RE: Ed-sharp bug report

  • From: "Sina Bahram" <sbahram@xxxxxxxxx>
  • To: "'Jamal Mazrui'" <empower@xxxxxxxxx>, <programmingblind@xxxxxxxxxxxxx>
  • Date: Sun, 5 Dec 2010 23:48:34 -0500

Jamal,

Quick answers, and then ask other questions if I ignore them.

I'm using windows 7 64-bit

Yes, I'm willing to run debug builds if you want to give me a special elevate 
string or something such that I can quickly test out
things with you back and forth.

Interesting on the Microsoft word stuff. Have you emailed someone over at 
Microsoft on this one? Uhm, a few folks come to mind, but
I don't know if any of them are in their old positions anymore. An msdn search 
for Microsoft MVP's will actually do you more good,
honestly, because those guys are MVP's simply because they are willing to help 
people in the community. If you remember Will
Pearson, he used to be one.

Why don't you simply run the installer with elevated privileges; thus, allowing 
you to put in that shortcut? Btw, when you have that
shortcut key there, it's going to override the system wide, no matter what you 
do. I wouldn't' worry about it. You're being a good
citizen by asking, in the installer, whether they want that keystroke. If they 
say yes, then hello, they want the keystroke, and if
they uncheck it, then they don't, so I wouldn't feel too cautious when it comes 
to making sure control+alt+e actually works.

I have a partial academic background in security, and trust me when I say you'd 
rather run your briefly running, only once or twice
used installer code as elevated, rather than running your editor with elevated 
privileges.

Running an editor, especially one like yours which hooks left, right, up, down, 
and inside/outside into more libraries than the
library of congress, is asking for a world of hurt from a vulnerability point 
of view.

Dll injection attacks are the first thing that come to mind, and would be 
child's play with your current setup, but in the current
setup, they would also be useless, because you simply run with the user's 
privilege, actually lower if you want to get technical
about it; thus, it doesn't matter.

Thus, my vote would definitely be to elevate the installer, not the editor.

Btw, do you precompile all your python? I was listening to some of the 
installer chatter, and it mentioned files with a .py
extension, for which there is just no reason to have. Everything should be 
.pyc, right? This will give you orders of magnitude speed
increases across the board.

As for windows vista ... *sigh*, god that operating system tries so hard, but 
unlike the little engine that could, it couldn't,
which is why windows 7 is a real operating system, and windows xp, bless its 
little heart, is just old.

I would ask your users if it's ok to report usage statistics, and by that, I 
only mean the OS string, back via the f11 command, and
do a basic breakdown of OS versions. I would imagine vista would be lower than 
both windows 7 and xp.

Then, you could just target windows 7, and btw, most of the time, if you get it 
working in windows 7 first, as opposed to vista
first, you have a much higher chance of it going smoothly in vista, as opposed 
to the other approach. Counter intuitive? Sure, but
hey, *shrug*.

Did I miss anything?

Take care,
Sina

-----Original Message-----
From: Jamal Mazrui [mailto:empower@xxxxxxxxx] 
Sent: Sunday, December 05, 2010 5:05 PM
To: programmingblind@xxxxxxxxxxxxx
Cc: Sina Bahram
Subject: Re: Ed-sharp bug report

Excellent feedback -- thanks, Sina!  I appreciate your taking the time to write 
with specific observations and ideas.  I have saved
your message for further review.  Let me respond initially as follows.

Indeed, the EdSharp installer does not currently ask whether to install a 
destop shortcut.  The choice is only whether to add a
system-wide hotkey to that shortcut of Alt+Control+E.  Unfortunately, I have 
not found a way to make that happen on every Windows
version, seemingly for security-related reasons.  So, even if I accept the 
default hotkey on Windows Vista, it will not actually be
enabled until I press Alt+Enter on the desktop to edit its properties, and 
instruct the shortcut to run as administrator.  The
hotkey is not part of the Start Menu shortcut. 
The reasoning is that it is minimal cost, except for one item in a list, to add 
the shortcut to the list of desktop or Sart Menu
items, but the hotkey should be confirmed so that it does not risk replacing an 
existing global hotkey.  There is no use of the
Quick Launch bar by the installer.

Neither EdSharp, via the JAWS API, nor the JAWS scripts for EdSharp, intervene 
in menu processing in ways that could explain the
delays you experience, as far as I know.  Sorry, but I do not know the cause, 
other than JAWS processing of .NET menus (which are
not Win32 menus).  What Windows version are you using?  32 or 64 bit?

I will review trigger keys for menu items.  In general (with a few exceptions), 
I find such trigger letters to be of little value to
users. 
  In general, I think users either navigate to the menu item of interest and 
press Enter, or alternatively, learn the direct,
accelerator key combination, and press that instead, bypassing the menu system 
entirely. 
  I am generalizing, and appreciate your points in a systematic analysis for 
unique trigger letters in menus.

I have tried to completely hide Microsoft Word while invoking its spellchecker, 
alas, without success so far.  I have closely
studied the COM object documentation.  My code sets properties to make Word 
invisible.  I changed calls to VB, which before C# 4.0,
considerably worked more harmoniously with COM than C#.  If anyone can help me 
tighten that code, I would appreciate the
contribution.

I will look at refining speech around the Undo command, and other speech 
suggestions you mention.

Jamal

On 12/5/2010 4:41 PM, Sina Bahram wrote:
> Jamal,
>
> I installed ed-sharp, latest version, today, and I ran into the 
> following issues within the first few minutes of use. I just wanted to report 
> them in hopes of making this better for other users.
>
> #1: installer doesn't ask about shortcuts
>
> The installer didn't let me choose, like most do, whether I want an icon on 
> my desktop. Can this be added?
>
> It also concerned me about whether it was putting something in my 
> quick launch. I hope it's not, as I always uncheck this option from every 
> installer I come across, but it would be nice to have
that standard installer screen, if possible.
>
> I simply deleted the icon, after I installed the program, but it would be 
> nice for it not to get created in the first place.
>
> #2: control+alt+e keystroke doesn't work, and in fact isn't assigned.
>
> So I was told that control+alt+E launches ed-sharp by the installer, 
> but when I pressed it after the install was done, nothing happened. I 
> tried it several times, and then I actually investigated the "launch 
> ed-sharp" icon in the start-menu, and found that the launch keystroke field 
> was empty; thus, that made sense why it didn't work.
After I manually added control+alt+e to that field, it of course started 
working.
>
> #3: the elevate command always updates
>
> When in ed-sharp, I pressed f11 just to verify I was at the latest 
> version, but apparently I am not, or the elevate command is broken 
> because it said comparing to server, and then it offered me a download 
> of the exact version I just installed. In other words, it never bothered 
> telling me that the version on my computer and the server
are the same, and it also makes the user think that they aren't, since it 
offers a download.
>
> I would suggest maybe changing the button or message to reinstall or 
> something like that, if the versions are identical, so that the user doesn't 
> think they are at an older version?
>
> #4: delay in file menus when using jaws
>
> I installed the jaws scripts, as I had no reason not to, using the 
> last page of the installer, and they compiled correctly; however, when 
> in ed-sharp, the menu bar is a little laggy. What I mean by this is 
> that if I hit alt, and then arrow through file, edit, delete, 
> navigate, etc, etc ... It's a little slow. I'm guessing that this is 
> possibly because of the JFWAPI being used or something like that; 
> however, it's kind of irritating, especially if you have your jaws set 
> to decently fast; for example, I listen to eloquence at 80% speed, as defined 
> by the jaws verbosity box, and there's about an
extra 300 to 600 millisecond delay, as if jaws is being instructed to speak, as 
opposed to doing it itself. My question would be, A.
can this be fixed/sped up? And B. if it's just a file menu, why is the JFWAPI 
being used? That it of course assumes that it even is
being used, and the delay isn't caused by something else of course.
>
> Note, this delay is especially noticeable when hitting keystrokes like 
> alt+f or alt+e to bring up menus. Almost to the point where you think you hit 
> the keystroke wrong or something, and then you
realize that the menu is coming up, but just slowly.
>
> #5: alt+tabbing to ed-sharp doesn't announce the title
>
> When you alt+tab to almost any other application, jaws reads the title 
> of the window for you, letting you know two things. It let's you know 
> that the alt+tab successfully completed and that focus is on that window, and 
> by announcing the window title, it gives you
whatever information the application developer wishes to convey in their title 
bar.
>
> This doesn't happen with ed-sharp. When I alt+tab to it, I get silence ... 
> Jaws doesn't make a peep. This is a bit jarring.
>
> #6: in the file menu, several characters map to different choices:
>
> In the file menu, I can hit o to open, open in other format, or open again.
>
> Unfortunately, o just activates open, which is the correct behavior 
> according to the underlying technology being used for the file menu. 
> Could the other two options be assigned different menu accelerators? Their 
> menu shortcuts are of course unique, but their
accelerators are the same.
>
> This is true in other places too, but even in the file menu, you can see it 
> with set favorite and save both being mapped to s.
>
> Note: what I've seen adopted as official policy by some UI developers 
> is that you start with the first letter, then move your way through 
> the word for subsequent accelerators. Some folks go further and  state 
> that vowels are excluded from this, although I personally disagree 
> with that approach and think all characters are fair game; for 
> example, o for open makes perfect sense, although p for "open again" doesn't 
> because p should map to print, so you have an
exclusion tree whereby the first letter of every menu item is put into a set, 
which by definition is a unique list, and then this
set is used as an exclusion list as you step through the characters of the 
duplicate menu item.
>
> One side note, another popular approach, of which I do tend to be a 
> fan of, is to use the first letter of subsequent words, before going back for 
> second and third letters of the original word. E.G.
"save as" maps to 'a'.
>
> The algorithm for this is rather straight forward, with one huge 
> caveat (discussed below), if you think about it, and goes like this.
>
> I have the following six menu items.
>
> New
> Save
> Save as
> Open
> Open recent
> Exit
>
> First I take the six characters and put them into a list, which is 
> technically called a bag:
>
> bag(n, s, s, o, o, e)
>
> And then I turn that bag into a set, like this:
>
> set = unique(bag)
>
> So I get:
>
> set(n, s, o, e)
>
> And then I have a set of characters I've used as accelerators, which starts 
> out empty:
>
> accelerators()
>
> Now, I add characters to that list, for each menu item, being careful 
> to disallow duplicates, which closure property I get for free as a result of 
> using a set instead of a bag, like so:
>
> New gives us n
>
> So we have:
>
> accelerators(n)
>
> Open gives us o
>
> So we have
>
> accelerators(n, o)
>
> Open again gives us o, but wait, o already exists in accellerators, so 
> we go to the first character of the next word which gives us an 'a':
> // see the cavviot section for why 'a' is a bad choice // the correct 
> choice here is 'g' because 'g' comes after 'a' in the word "again"
>
> accelerators(n, o, g)
>
> Then we get s for save, and so on
>
> accelerators(n, o, g, s)
>
> Then "save as" gives us 'a'
>
> accelerators(n, o, g, s, a)
>
> And then, finally, exit gives us 'e'
> // again, see the cavviot section for why 'e' is a bad choice // going 
> with x instead
>
> accelerators(n, o, g, s, a, x)
>
> And of course accellerators == unique(accellerators); thus proving it's in 
> fact a set, and not a bag.
>
> *** Huge Haunking Caveat Section: ***
>
> Now, the reason that this algorithm unfortunately can't be programmed 
> in, and has to really be done by hand, or at least whose output needs 
> to be revised by hand is that there are idioms users have come to expect. As 
> is the case with all things in computer science,
humans get in the way of elegant algorithms, almost always.
>
> So, for example, we assigned 'a' to save again, but this really isn't 
> what we want. We really want to assign it 'g', because users have come to 
> expect that 'a' is always save as in a file menu, just
like how s is save, and how o is open.
>
> Thus, if one is prone to think about things in  an algorithmic point 
> of view, just imagine a 2-ply deep file menu priority tree where the 
> semantics of these common idioms are stored; such as, under the file 
> node: 'a' maps to "save as", 'o' maps to "open", and so on. Then use the same 
> algorithm as above, but use the idiom tree as a
higher priority exclusion list than the accellerators set, indexing into the 
idiom tree with the menu item name, of course.
>
> To be fair, the above is more of a heuristic than an algorithm, but I 
> do find that it works super well, and takes all the guess work out of picking 
> accelerators in menus.
>
> #7: spell check issues
>
> When I hit f7 for spell check, I get some rather odd behavior. It 
> initializes Microsoft word, GUI and all, in the background. I 
> understand why it does this, because, why reimplement/reinvent spell 
> check, when Microsoft word exists right there on the user's machine; 
> however, can you just use word as a com object without invoking the UI, just 
> like that code snippet I sent out a really long time
ago about how to use Visual Studio 2005 without invoking the UI! This brings up 
a further question of whether the spell check
functionality is able to be used via com, without actually invoking the main 
MSWord object at all. Is that possible?
>
> Moving on. I perform a spell check, and then I'm never told that spell 
> check is over. I don't even really know I'm back in my document in 
> ed-sharp, probably because of the earlier bug where the title isn't read out, 
> but what's even more frustrating is that spell-check
didn't clean up after itself, and I have this empty Microsoft word document in 
the background.
>
> Also, sometimes, although I can't replicate this particular issue on 
> demand, so sorry about that, but sometimes, it focuses said empty Microsoft 
> word document, instead of ed-sharp, after the
spell-check is complete.
>
> #8: undo doesn't announce selection
>
> Would it be possible for undo to announce if it's undone action results in 
> selected text?
>
> For example, write a sentence, and then highlight that sentence and 
> hit the delete key. Now hit control+z for undo. It would be nice if 
> ed-sharp told you that the sentence that was brought back from the great bit 
> bucket in the sky was highlighted, simply by saying
the word selected before reading the sentence, as it does now.
>
> There are some other things as well, but the number 8 is a nice binary 
> number, so I wanted to stop there.
>
> Thanks much, and happy hacking.
>
> Take care,
> Sina
>
> __________
> View the list's information and change your settings at 
> //www.freelists.org/list/programmingblind
>

__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

Other related posts: