2014-11-06 17:55:43

Hello,
I'm looking into C++, but have so far had issues find a totally accessible compiler/IDE. The primary issues that I'm currently having are finding a compiler wherein I can read any compilation errors that may arise, and also figuring out the most convenient way to read application output. I'm staring out with just basic console applications, making use of out and in for output and input, but JAWS doesn't particularly like reading content. The only way I've found thus far for reading them is to read the entire screen with insert b.
So, can anyone recommend n IDE/compiler in which I can read the errors, and tell me what the best way would be to read the output from an application?

Best Regards,
Hayden

2014-11-06 20:33:28

Visual studio sort of works, but it depends which version.  Every version has its own unique special big problems, and I sort-of-jokingly call it the choose your hell adventure game.  The problem is that for stuff beyond the basics, Visual Studio is it for windows-there are huge swathes of the Windows API that aren't on MinGW, and VS is the only IDE that talks to the MS compilers right.
Eclipse is more accessible, assuming you can get it set up in the first place.  But doing that isn't so easy for C++, requiring as it does a working MinGW or Cygwin toolchaijn and a bunch of configuration.
Now, I'm going to be "helpful", but you're going to disagree.  You won't in 6 months or so, but you probably will for now.  I know of few if any blind programmers who don't follow this path in the end and I know of few if any just-starting blind programmers that like this answer.  Nevertheless, it's the only one I and everyone I know have found barring a great deal of experience as a sighted developer before going blind:
Use the command prompt.  All your accessibility issues disappear, you get next to nothing from the IDE as a blind person, and literally any compiler works.  You'll also be in a quite good position to program on Linux down the road, administer a webserver, or to go into a variety of other different places.  It works with most programming languages, all version control systems I am aware of, and there are even some languages (like Python) where lots of sighted people do it, too.  Using cin and cout is how it's done, and because your IDE isn't redirecting to inaccessible text controls, you get them read automatically.  I know the command prompt can seem frightening, but barring some sort of legislative change or a suddenly philanthropic company caring and spending hundreds of thousands of dollars, you're going to spend more time in the end fighting your IDE than just learning the command prompt.
If you have Visual Studio, you can get at it by looking up how to launch the developer command prompt; cl myfile.cpp compiles, myfile runs it.  Literally everything reads with no further hoops.  Specific directions depend on the version, but once you figure it out you can make a desktop shortcut.  If you don't have Visual Studio, you want it because it's basically the only good Windows compiler.
What are you trying to do in C++, anyway?  We may need to go into project management and build systems for anything larger than very very small.  I'm not sure why C++ is coming up again-the "Should I use C++ for audiogames?" question has been hammered into the ground and buried forever, or I'd have thought anyway.  If you're dead set on it, go look at CMake, and then be very very afraid.  Or fight your IDE because your IDE does the same things, only with a ton of accessibility "adventures".  If you are dead set on C++ and nothing will sway you, then good luck for you will need it.  But seriously-with C++, figuring out how to deal with inaccessible IDEs is only the beginning of the exquisite horror.  I say this as an experienced programmer with thousands of lines of C++ code.  The best thing you can do after figuring this problem out is to stop asking questions here and get on Stack Overflow-the answers to most of the C++-specific problems are well beyond the scope of what most people here do.

My Blog
Twitter: @ajhicks1992

2014-11-06 23:29:15

Hi,
Thanks; I appreciate the advice. I have no issue with using command prompt; I had a feeling that was the way to go with it. I've found most everything it outputs is read very well.

Best Regards,
Hayden

2014-11-06 23:40:33

That puts you in a minority.  A very small one.  Every other time I've said this to a new blind programmer, the reactions have been interesting.

My Blog
Twitter: @ajhicks1992

2014-11-08 19:45:53

I honestly think there are quite a number of myths surrounding what it would really take to make most applications accessible. I think the cases in which there would be cost approaching anything close to "hundreds of thousands" are the minority.
Case in point, I had an interesting discussion with a developer over at Project Pokémon, a site dedicated to Pokémon hacking research and development. His program, PokéGen (a save game editor for Pokémon games) had an excessibility issue. I gave him some suggestions and then asked him to download Jaws and just play with it for a little while. To my surprise he did, and quickly realized that the only problem was that his icons were purely graphical with no textual supplement.
All he did was create text icons, which he hid "underneath" the graphics to hide them from sited users completely, and that made PokéGen completely accessible (the hidden icons could receive tab focus, so you could press enter on them). The best part? It took him a couple of hours at most.
Now I'm only talking about windows here, but most of the design mistakes that result in problems for us are generally minor and easily reversible. For instance, in Visual studio class we were assigned to write a program in which the output was to be displayed to the user on a label. Unfortunately this approach resulted in Jaws being unable to detect it, so I suggested to the prof that I use a text box with read only property set instead. Result? you could tab to it and read it just fine. If he had really insisted on the label approach for appearance I'd have hidden the text box underneath of it and made it small for at least enough accessibility to make it manageable.
For another assignment, we were to create a text box for output and set it's "enabled" property to false to prevent users from typing in to it. This made it only accessible via the root curser. Solution? keep it enabled, just set it to read only and then you can tab to it and read it with standard reading keys; mind you, having to root isn't the end of the world so for what it's worth I could have gone with the original approach which was at least better than completely inaccessible labels.
Granted custom controls are a new kind of evil, but hiding an alternative control still works in a pinch.
I think it all goes back to the simple fact that most people have never met a blind person, and many still think we're bumps on a log who sit at home and wait to die (many people are downright shocked when they ask me how much assistance I require in order to bathe and I tell them none at all). I guess people think that making their software accessible means rewriting the entire program which is just a total myth. Of course there are exceptions (Microsoft in all their glory couldn't make their flight simulator excessible no matter how hard they tried) but these are special cases and let's face it, what good is a flight simulator to a blind fellow anyway.
Most of the time, we're talking a day or two for one person, and the real cost involved isn't so much financial as it is pride (convincing someone to do a little bit of research and risk the "embarrassment?" of being educated by a blind guy isn't easy). I guess just giving the canned and uneducated response of "Helping a minority would break the bank" takes less effort than sitting down with the Jaws demo for a few hours and learning how to think outside the box.
Just my $0.02 but this topic is one I've been passionate about for a long time.

Now as for c++ compilers and ides... visual studio really isn't all that bad once you get used to it's querks. Jaws comes with scripts for it out of the box (can't comment on accessibility with other readers), and as long as you're just doing code you shouldn't run in to too many problems.

Official server host for vgstorm.com and developer of the Manamon 2 netplay server.
PSA: sending unsolicited PMs or emails to people you don't know asking them to buy you stuff is disrespectful. You'll just be ignored, so don't waste your time.

2014-11-08 20:10:48

A few things.

When your setting the various properties of controls, I'm pretty sure they look different depending on the property you set. If a control's enabled property is set to false, it's going to look greyed out or not even be there at all. Read only keeps the text control there, you just can't input anything. Similarly if you add a textbox occupying the same pixel coordinates as a label, you could run into potential problems. Keep in mind that there are transparency settings for controls etc, people are going to notice if you can tab to a label where you usually can't, the exception being link labels.

With visual studio, code is relatively accessible, despite some annoying focus changes and sometimes text not being read properly. If you are debugging, it's not accessible in the least. Some of the property dialogs act weirdly to, sometimes the focus for reading properties of controls screws up so the properties don't show up when you select the name.

Deep in the human unconscious is a pervasive need for a logical universe that makes sense. But the real universe is always one step beyond logic.

2014-11-08 20:33:39

So, if you don't want to position the text box under the other control, then you can register a hotkey that forces the target to focus or that triggers it's  control's onclick, update or other event as if you had interacted with that control.
Aside from us, very few people tab through windows anyway (it's less efficient than using the mouse if you can use it) so I don't really see having a small minority of people observing an oddity in tab control to be a real issue.
The point I'm trying to make is that there are trivial workarounds that work fine in most cases.

Official server host for vgstorm.com and developer of the Manamon 2 netplay server.
PSA: sending unsolicited PMs or emails to people you don't know asking them to buy you stuff is disrespectful. You'll just be ignored, so don't waste your time.

2014-11-08 21:18:37

No. This is wrong.
First, web sites are in fact easy.  That's why I'm so excited about Aria: in the case of web sites, it can be as easy as adding barely anything to the HTML.  In another couple years, once all the bugs are worked out, we'll be able to have desktop-like apps in the browser, and everyone will be able to play with accessibility.
But desktops aren't this way.  That alternative text on the image?  It involves implementing a COM interface and responding to a custom Windows message.  The total number of lines of code for adding support is somewhere around 500, assuming you even can.  Most GUI frameworks are at a very high level and you can't get in to where you need to be to do this.  If you are lucky, your framework already provides the support-I am aware of a grand total of 0 that do so but Winforms and WPF *might*.  Other things that are problematic depending on your GUI framework: changing a control's type as the screen reader sees it, adding accessibility information to a custom control, telling the screen reader that label a goes with control b, and I haven't even talked about the nightmare of making table controls accessible-there is a reason that I export to CSV and use Excel when I need such.
On the internet, your web browser translates HTML into the DOM, exposes the DOM, and hides all of this.  If you gave me an IDE that was fully in my web browser, I would agree with your statement-getting it to be accessible would be pretty easy, comparatively.  But doing it for a desktop app requires a ton of specialized knowledge.
But that's not even the worst news.  I am not aware of an IDE that doesn't use a custom framework or at least a custom control for something useful.  Microsoft is not using WPF or Winforms, they're using an internal toolkit that we don't have access to.  Older ones have less problems because they used to use more standard controls.  Netbeans and the stuff from IntelliJ are using Swing, but in such a way that you can't use them--not to mention the accessibility issues of Swing in the first place, and the fact that enabling it actually opens a huge security hole in your system (larger than normal for a screen reader).  Others use QT (finally starting to maybe get better, but with huge bugs yet) and GTK (don't hold your breath).  Even some of the built-in WPF and Winforms controls are inaccessible to one extent or another, though those tend to at least be passable.  The next best GUI toolkit for us, WX, isn't fully accessible either: all the advanced controls like property lists and tables need to be exposed, probably with IA2.
But there's one final hidden cost, too.  You have to hire someone with very specialized knowledge.  This isn't a $50000 job, this is a minimum $100000 job.  And you have to keep them hired or it just slips back to where it was over time and you might as well not have bothered.  But it's probably not one person, it's probably a team, so yes. It's expensive.  The only reason Eclipse is even accessible is that IBM paid for it: they wrote a custom GUI framework for it and had a team who put in the components needed, and yes, it was a huge effort.  The workarounds being suggested here change the visual experience drastically and are screen reader and screen reader version specific; they work for little blindie apps, but not for Microsoft who can't sacrifice sighted user experience for blind user experience.  Not to mention that your afternoon of playing isn't going to give you the years of experience needed to do this right the first time, and any company concerned about it also needs to be worried about 10 other disabilities-you're also going to have to give this team color changes, font changes, stuff related to dyslexia and all sorts of fun.
It's simply not going to happen, and I'm sorry that your optimism about it will be crushed in the near future.  I am certain it will. I'd bet just  about anything.  We're at the point of having to make laws in order to get companies to even care.  This is not a happy field, and there is a reason I have decided that it is not my long-term career goal: your accessibility team is often told to do the bare minimum so that if a lawsuit comes along they can say they technically met the guidelines.
And more people tab than you think-it is faster than a mouse if you know what you're doing or if you're trying to enter data in 50 consecutive text fields.
If you don't believe me, go try to make some WX controls accessible.  Then you will understand the scope of the problem you're brushing aside with "people don't understand us".

My Blog
Twitter: @ajhicks1992

2014-11-10 17:43:36

What I'm proposing is a hack, admittedly, but there are ways to get the job done. Heck, everybody cuts corners in other areas anyway, so if a sloppy hack turned an app from impossible to somewhat annoying but manageable (rooting and the like) I'm personally for it.
Mind you I've done some pretty crazy things in order to limp through an application so maybe I'm the odd man out; I managed to convince a tech support rep at Haupauge to download and run a quick and dirty script I wrote while on the phone with him to expose mouse positions, window sizing parameters etc and managed to hac together a solution that made their app work. Basically homemade shortcut keys.
Of course when the next release came out it was all for not but it was great while it lasted.

Official server host for vgstorm.com and developer of the Manamon 2 netplay server.
PSA: sending unsolicited PMs or emails to people you don't know asking them to buy you stuff is disrespectful. You'll just be ignored, so don't waste your time.

2014-11-10 19:15:57

Yes, I've done crazy things too.  But by the time I'm doing something crazy, the app is not accessible.  Being able to use an app doesn't make it accessible, not by any definition you'd want to make meaningful.  Yes, you have to.  But if you promote that, the entire accessibility world becomes workarounds, and we don't want that.
This is meaningless, however: the big companies aren't going to use your little hack because they are selling a commercial product.  Anything that changes the experience for someone who isn't blind is questionable, and the justification to get it into the product will probably be involving at least 10 people.  You can't fix it for one release either; that's not good enough.  I need IDE x for my job, and when we upgrade, what?  Do I get fired?  Saddled with a sighted assistant for all of every day?  In the end, the command prompt is easier for this particular discussion--it requires almost 0 workarounds, especially for the command prompt friendly languages.
But in general, for Windows and Linux, there's basically no resources that I can throw you at for desktop accessibility.  Mac is a bit better in this regard, but not tremendously so.  You could probably get small companies to do it, but not for this-maybe 10% of blind people are programmers of the caliber required to get a job, and companies don't seem to care about hobbyists that aren't buying the product.  Could you convince them of the wonderful world of blind customers?  No, not really.  The good news is that we have a number of new laws coming into play that will make companies have to care, especially if they want to sell to education, but it's not there yet.  And blind programmers will probably always be shafted in this regard for the simple reason that there are not enough of us by any stretch of the imagination.
People don't realize how amazing the web is in this regard.  With just a little HTML knowledge, a copy of NVDA, and an afternoon with the internet, one person can often do it.  With desktop apps, it requires more--usually C++, always COM, almost always access to the window callback procedure (some GUI frameworks let you intercept this properly), a huge amount of boiler plate for even simple little things like labeling.  I can point at the necessary MSDN pages if there's interest, but it's certainly not for the faint of heart.

My Blog
Twitter: @ajhicks1992

2014-11-10 23:27:46

Actually I've always been a command line person myself, and it's been a godsend this semester with Java since even with Sodbeans, Netbeans still poses problems.
That said, I haven't had much trouble using visual studio, except for a few things like the profiler and (of course) things like control positioning which is problematic for different reasons.
Is the new law you're talking about specific to the U.S? I'm not a politics expert by any means but I'd assume coming even close to internationalization on something like that would be near impossible so you'd still have software coming out of other countries with problems.
What do you define as true accessibility? Are you strongly against software that makes you either root or use your reader's scripting functionality?

Official server host for vgstorm.com and developer of the Manamon 2 netplay server.
PSA: sending unsolicited PMs or emails to people you don't know asking them to buy you stuff is disrespectful. You'll just be ignored, so don't waste your time.

2014-11-11 01:06:00

The laws I'm aware of are US only, but I believe they will affect non-US companies which wish to sell to the US.  I'm not 100% up on this issue, but we're finally getting more and better usability requirements--at the moment, the biggest issue is that there's a checklist and the checklist is all that matters, the end.  Look up 508 Refresh.  Also CVAA.  There's another one that's currently important, but I'm not remembering the name.
I'm not sure what you mean by root, not in a Windows context.  Since Linux accessibility is worse than Mac accessibility, I'm not bringing it into this discussion--they're not even able to get things like audio right, let alone have the huge driving force that Windows benefited from.  I'm specifically against unscalable solutions and, unfortunately, screen reader scripting is such no matter how you slice it.  You move the tremendous amount of resources needed to make apps accessible from the people writing those apps, pile them up in the corner, and dump them on one, usually small, company.  While I fully understand the reasoning and know that without it accessibility would probably have been stillborn, the Jaws philosophy of scripting everything is now coming back to bite us in a way.  People are used to solutions that involve hacking the graphics card and the app developers have this mentality of someone else's problem.  We suffer from a lack of tutorials, and it's just generally shoved into the corner.  The truth of the matter is that it really belongs to the GUI frameworks, and that if people like QT put a big push behind making it work we'd suddenly have hundreds and hundreds of apps that just started being fine.  I'll take the workarounds when I have to.  but I will never endorse them because it just hurts everyone in the long run.
As for Visual studio and Sodbeans, well, I tried Sodbeans once and didn't really get anything out of it at all.  Visual Studio tends to have this little trend of becoming less accessible, with a hard dip for VS 2012.  At the moment, the debuggers don't work with anything but jaws.  This falls under the hacky workarounds that hurt us.  I reported it and Microsoft doens't care.  Other funny little things: submenus don't show up as submenus and you have to recognize them because they're the only menu items that are "unchecked" according to the accessibility API, alt-tabbing out works inconsistently (I think this has to do with color scheme, but you can get stuck in a strange phantom menu bar), 2012 at least had multiple places where you could tab in but not back out, and that's when I gave up.  I'm 100% sure there is more.  Jaws works around some of this with display driver hooking, but it's still definitely unpleasant.  2008 and 2005 are much, much better and, if you (like many others who have not had to deal with invalid pointers or have never tried one) think debuggers aren't necessary, it's almost fine.  but not great, not fast, and definitely unpleasant.

My Blog
Twitter: @ajhicks1992

2014-11-11 01:19:15

Sorry, I meant route, not root. That was just a typo, but what I was talking about was the Jaws cursor, not Root as in the Linux name for the admin user.

Official server host for vgstorm.com and developer of the Manamon 2 netplay server.
PSA: sending unsolicited PMs or emails to people you don't know asking them to buy you stuff is disrespectful. You'll just be ignored, so don't waste your time.

2014-11-11 03:40:12

Well, that's a conversation we can't quite have.  I use NVDA.  I left jaws after the "our authorization scheme won't work on your machine, it's your fault, why don't you go edit BIOS, fine, have a dongle" phone call.  Also it was crashing my system hard at least twice a week.  But the general concept? Yeah, I used it, and I do use the NVDA equivalents.  The problem I have with it is that their method is to literally scrape via your graphics card, and they're so set in it that the rumor mill (I can't substantiate, but it's coming from people I believe to know what they're talking about) says that the reason we still have Mirror Display Drivers is because FS begged for them.  The things that work with Jaws and not with NVDA are the things wherein the app developer did nothing, jaws decided to script, and mirror display drivers are involved.  Now that the commercial screen readers are on the wane, well.

My Blog
Twitter: @ajhicks1992