• Tag Archives Windows
  • Windows 10s – A revolution for Accessibility

    Microsoft released the Surface laptop last week. As someone who absolutely loves the Surface Book, I’ve been following with interest the developments in the surface line. I’m not hugely blown away with the Surface Pro line but that’s a reflection of the state of touch screen access using screen readers more than the device itself. Physically, I think the surface pro is very nice to hold, powerful enough to run all standard productivity and development tools and durable enough to be used for both business and pleasure every day. The surface book however is the perfect computer. When relaxing on the bus on the way to and from work I can easily consume content but with this machine, an I7 with 16GB RAM and a 512GB solid state hard disk, I can just as easily run up a few virtual machines, Visual Studio 2017 and a suite of debug and analysis tools and it hardly breaks a swet. It’s perfectly comfortable to type on for 12 hours a day and the battery life is just brilliant. I sound like an advertisement for Surface Book which is fine. It’s easily the nicest laptop I’ve ever owned.


    The Surface Laptop doesn’t quite tick all the boxes for me but that’s a good thing at the moment. It is expensive. Maybe too expensive for most people but it’s what it represents that is important. The Surface line is aspirational. It’s expensive but it’s a product line that shows off the power of Windows. It’s Microsoft’s way of showing the world what can be done with devices that run Windows and as a result, PC manufacturers are following their lead. This means that although the Surface Laptop is at the higher end of the price scale, the introduction of Windows10S in parallel means that Microsoft partners are again following Microsoft’s example by releasing their own devices built on Windows 10S. This will mean lower prices for lower spec machines that although do less, still do more than a device like the iPad or Android tablet.


    What has all this got to do with accessibility for Blind people? The answer is unfortunately a bit long but please stick with me for a minute so I can explain. Because the result in a year or two could be huge if the current pace of change is retained.


    I love the Jaws screen reader for what I do every day. But for many people, all they need to use is a browser and Microsoft Office. I’m not sure if Jaws will be as compelling in the long term as it is right now for the average user with the recent developments in Narrator, the built in screen reader for Microsoft Windows. Not that I’m saying I could personally use Narrator every day. I think it’s still years behind Jaws but look at Voiceover, the built in screen reader for Apple’s OSX and IOS operating systems. It’s also years behind Jaws and it has quite a few bugs but yet, it’s probably the most popular screen reader in the world at the moment. It is highly likely that it has taken over from Jaws in terms of overall screen reader market

    share as more blind users have access to mobile devices than Windows PC’s I’m sure. Those same users might be happy paying $189 to $1200 for various specs of low powered laptops.


    For those of you who remember or paid any attention to Windows RT, this really isn’t that. From an accessibility perspective, Windows RT was completely unusable. But with Surface pro, Surface book, the surface studio and now the surface laptop, a blind user can turn it on, hit two buttons and get access to the core of the OS without a commercial screen reader. I bet Freedom scientific are very worried about this – and if they aren’t, they certainly should be.


    I’m talking to Microsoft in Ireland and the US every week at the moment about offers for education as that’s the area I’m now working in. I’m consistently delighted when they raise the topic of accessibility without being prompted. There’s a fella heading up the applications for children that includes Minecraft who is great at working on accessibility problems for many difficult areas.


    I think it’s a case of watch this space.


    I’m also putting my money where my mouth is. There’s an application called Whats up gold that isn’t working with Jaws at all at the moment. I’ve switched to narrator and Edge when using it as I get the best results. This should come as a huge shock for anyone related to the development of Jaws. It certainly shocks me. There are controls that Narrator is reading perfectly such as grid views, tree views and toolbars that Jaws isn’t even seeing in Chrome, Firefox or IE.


    I need Narrator to be more responsive and I’ve left feedback with Microsoft in relation to this so here’s hoping that it gets better. I can see myself using it more as time goes on unless Jaws gets a lot better for touch screen access.


    I travel a lot on busses so using the laptop isn’t always very comfortable. For that reason, I use a touch screen device such as my phone. I’d really like to be able to use my surface book more for consuming content on the go. If Narrator gives me this freedom first, then there will be no contest.


    This is coming from someone who has used Jaws as the primary screen reader for twenty years. So, I have a certain level of brand loyalty. So, the point I’m making is even with brand loyalty from a person who has used this software for 20 years, if Microsoft can take the lead, even I’ll switch. That should drive some serious innovation and changes in Jaws version 19. Because if someone like me will change over, someone who just uses a computer for browsing and Email will change much sooner.

  • Using PuTTY with Jaws 18.

    Please be aware that I don’t recommend that you use PuTTY exclusively for SSH access. Especially in Windows 10. There are a number of better alternatives out there at this point for most day to day use. I’ll add links to one or two below. However, there are times when PuTTY or Putty as it’s pronounced is just the best tool for the job so it’s important that you can get some feedback from Jaws.

    Note as of 26th October 2017

    Please note that this post is now out of date. You should use these fantastic PuTTY scripts instead as they provide much more complete functionality.

    I had posted a script before that worked with previous versions of Jaws and in fact, it would probably work with Jaws 18 as well but the SayNonHighlightedText function in Jaws 18 has been updated so it’s only right that I tweak it slightly and publish it here to be used in a PuTTY.jss file.

    Here’s the code:

    Include “HjGlobal.jsh” ; default HJ global variables
    Include “hjconst.jsh” ; default HJ constants
    Include “HjHelp.jsh” ; Help Topic Constants
    Include “common.jsm” ; message file
    include “MSAAConst.jsh”
    include “UIA.jsh”

    NavigationByLineTickThreshold = 200
    int LastLineNavigationTick

    Void Function SayNonHighlightedText (handle hwnd, string buffer)
    ; NonHighlightedText Function for speaking all newly written nonhighlighted
    ; text.
    If GetScreenEcho () > ECHO_NONE
    && hWnd == GetFocus()
    If GetWindowClass(GetFocus()) == “PuTTY”
    && GetTickCount()-LastLineNavigationTick > NavigationByLineTickThreshold
    ;New text should be spoken only if it is not a result of navigation by line.
    ;This prevents double speaking when navigating through a command history,
    ;since the SayLineUnit will already have spoken the new text.
    ;Now clear LastLineNavigationTick, just in case more new text appears shortly after the navigation.
    LastLineNavigationTick = 0
    if (GetScreenEcho() > 1) then

    There are a number of great alternatives to PuTTY.
    Over on Git Hub, Microsoft have a rather nice SSH Powershell module that provides a method of accessing an OpenSSH server on Linux from within Powershell.
    The best way to use SSH on Windows in my opinion is to install Git. Be sure that you choose to make git features available from the command line so that you can use SSH without starting the Git Bash shell first.
    Lastly, another really good option if you are using Windows 10 is to install Bash or Linux for Windows. This is an add on that you can install from within Programs and Features\Windows Features.

    There are now more ways than ever to access your Linux servers over SSH from within Windows. Have fun!

  • A skype chat with Nicky Kealy discussing and exploring some of the latest tech news and events.


    | Open Player in New Window

    There is a lot happening in the tech world at the moment. Some good, some not so good and some that’s just very interesting.
    In this podcast we discuss:

    • Satya Nadella, the CEO of Microsoft visited the ST. Patrick’s campus of DCU where I work a week ago. I got to speak to him briefly about accessibility and inclusion in education.
    • Elon Musk thinks we’ll be in mars by 2022. Do you agree? Is he a visionary or a mad man? All his efferts seem to be connected to autonomy and sustainable power so here’s hoping.Another organization Mars one thinks we’ll be ready by 2027. What do you think?
    • Speaking of self driving cars, we discuss the potential assistive technology requirements of a blind person using a self driving car.
    • Facebook’s Mark Zukkerburg was live for about half an hour yesterday while he was preparing dinner. Yet he had eighty three to eighty six thousand viewers. Why! How!
    • We discuss augmented reality and AI. Where could it be in 5 years.

    Listen to this tech review with special guest Nicky Kealy.
    Thanks to my special guest Nicky Kealy for helping with this podcast.

  • Logon script to migrate users to a new file server and remove and recreate mapped network drives

    I’m migrating a few hundred users over to a new file server.

    The paths will be different. It’s not just the server name that’s changing.

    1. I have run into several problems.
    2. Although I’m a domain admin, I don’t have access to most of the folders. In the worst case scenario I need to take ownership to gain access.
    3. Inheritance is disabled on some of the sub folders.
    4. Permissions are sometimes configured on the fifth or even tenth sub folder.
    5. There are drive paths distributed using group policy but 99% of the paths are mapped directly on the PC.
    6. Five minutes of down time causes untold problems.
    7. The tool that is used to replicate the files isn’t replicating the permissions in all cases. It is also having the same problem that I’m encountering in terms of access to some files and folders.
    8. Permissions aren’t given to groups. Each person is added to the folder directly.
    9. There are often eight different drive maps. Some of these are even pointing to duplicate locations.

    Here’s what I’ve tried.

    1. Section shares will be mapped to S. However, the policy is set to update. IT isn’t changing locally mapped drives. This is ok. It allows users to come to support if they can’t access their files. The benefit of this is support are noting down what S was previously mapped to.
    2. I’m using powershell to level the permissions on all sub directories.
    3. I’m talking to section heads to determine the permissions that each person needs.
    4. I’m adding these people to groups based on the section and directory name and applying access to the group.
    5. I’m marking the old files as hidden. Mainly so that if someone continues using the old path they will think the drive is empty. That will result in a call to support where they can tell the user to use the new drive and then also delete the old map.

    There are far too many manual steps in this.

    There’s also too many remaining drive maps that aren’t needed.

    Here is what the script does to automate most of these manual steps.
    This is run at log in and targets one or more groups.

    1. List the currently mapped network drives.
    2. Check the groups that the user is a member of.
    3. Remove all drive maps
    4. Map drives based on assigned groups.
    5. Show a message to the user to inform them that the migration has completed.

    The main remaining problem is that if I move Drive Q that is used by ApplicationX to the letter Y, all the users who used the old letter will probably have problems opening files. There’s nothing I can really do about this. However, so far, the instances where this has been encountered has been managed easily by support.

    One choice I also made was to remove all existing permissions from the folder and reapply the permissions on the new file server so that only groups that should have access are applied to each folder. Of course, this requires that staff speak to their section heads to in turn ask me for access but this removes the potential that people have access to folders that they no longer need. It also helps to promote a more structured method of processing access requests. I could implement a form for tracking these requests but this overhead would be justifiably resisted by section heads.

    The script follows:

    Option Explicit
    Dim objShell,grouplistD,ADSPath,userPath,listGroup,WshNetwork,objFSO,objFile,strComputer,objWMIService,IPConfigSet,strIPAddress,colItems,strDrives,mappedDrives,objNetwork,x
    dim objTS, sReadLine, bReturn, strOutputFile, RunBefore, WshShell, IPConfig,i,objItem, objOutputFile
    strOutputFile = “\\spd-adc01.spd.dcu.ie\RemainingComputer\SharedFolders.txt”
    On Error Resume Next
    Set objShell = CreateObject(“WScript.Shell”)
    Const ForAppending = 8
    Set WshShell = CreateObject(“WScript.Shell”)
    Set WshNetwork = CreateObject(“WScript.Network”)
    Set objFSO = CreateObject(“Scripting.FileSystemObject”)
    Set objFile = objFSO.OpenTextFile(strOutputFile, ForAppending)

    if (RunBefore = “False”) Then
    objFile.WriteLine WshNetwork.ComputerName & “,” & WshNetwork.UserName & “,” & GetIpAddress & “,” & GetMappedNetworkDrives

    If isMember(“SPD President”) Then
    End If
    End If

    Function GetIPAddress
    strComputer = “.”
    Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
    Set IPConfigSet = objWMIService.ExecQuery _
    (“Select IPAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled = ‘True'”)

    For Each IPConfig in IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
    If Not Instr(IPConfig.IPAddress(i), “:”) > 0 Then
    strIPAddress = strIPAddress & IPConfig.IPAddress(i) & ” ”
    End If
    End If
    GetIPAddress = strIPAddress
    End Function

    Function GetMappedNetworkDrives
    On Error Resume Next
    strComputer = “.”
    Set objWMIService = GetObject(“winmgmts:” & “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2”)
    Set colItems = objWMIService.ExecQuery(“Select * from Win32_MappedLogicalDisk”)

    For Each objItem in colItems
    strDrives = strDrives & “,” & objItem.Name & ” ” & objItem.ProviderName
    GetMappedNetworkDrives = strDrives
    End Function

    Function DeleteMappedDrives
    On Error Resume Next
    Set objNetwork = CreateObject(“Wscript.Network”)
    Set mappedDrives = objNetwork.EnumNetworkDrives
    For x = 0 to mappedDrives.Count
    objNetwork.RemoveNetworkDrive mappedDrives.Item(x), True, True
    End Function

    Function MapPresidentsDrive
    If isMember(“SPD President”) Then
    Set objNetwork = WScript.CreateObject(“WScript.Network”)
    objNetwork.MapNetworkDrive “S:” , “\\ad.dcu.ie\data\dept\spd\college admin\President”
    MsgBox”Drive S added successfully.” & vbcrlf & “The presidents section share is available in this new location.” & vbcrlf & vbcrlf & “Please contact the helpdesk if you have any questions.”,64,”Migration successfull”
    End If

    End Function

    Function IsMember(groupName)
    If IsEmpty(groupListD) then
    Set groupListD = CreateObject(“Scripting.Dictionary”)
    groupListD.CompareMode = 1
    ADSPath = EnvString(“userdomain”) & “/” & EnvString(“username”)
    Set userPath = GetObject(“WinNT://” & ADSPath & “,user”)
    For Each listGroup in userPath.Groups
    groupListD.Add listGroup.Name, “-”
    End if
    IsMember = CBool(groupListD.Exists(groupName))
    End Function

    Function EnvString(variable)
    variable = “%” & variable & “%”
    EnvString = objShell.ExpandEnvironmentStrings(variable)
    End Function
    Set objShell = Nothing

    Function ScriptNotRunBefore
    Set WshNetwork = CreateObject(“WScript.Network”)
    RunBefore = “False”
    strComputer = WshNetwork.ComputerName
    set objFSO = CreateObject(“Scripting.FileSystemObject”)
    set objOutputFile = objFSO.GetFile(strOutputFile)
    set objTS = objOutputFile.OpenAsTextStream(1)

    ‘Loop through the output file to see if “Computer name in STRComputer” is found,
    ‘if it is then the script has run before.
    do while objTs.AtEndOfStream <> true
    sReadLine = objTs.ReadLine
    if instr(sReadLine, strComputer) > 0 then
    RunBefore = “True”
    exit do
    end if

    ‘Close output file and release objects
    set objTS = nothing
    set strOutputFile = nothing
    set objFSO = nothing
    end function

  • VBS to inventory your workstations or servers

    Sometimes you just need a clear picture of what is in your environment.

    Sometimes you just need to see how much disk space, RAM and CPU capacity a few dozen workstations have available.

    Sometimes you walk into an office and you haven’t a clue what’s live, what’s turned off and what is very out of date.

    This script fixes all of that. Give it a text file with as many Windows workstations or servers as you like and let it go off and get the version of Windows, the license type, the RAM, CPU, Hard disk capacity, the software and hardware serial number and the Windows installation directory. It saves this into a CSV file that you can then open in Excel to sort and play with as much as you want.

    I wrote this to create an inventory of the servers in use here so I could see what version of windows they have, ensure they are using the most recent service pack and ensure they were all using the enterprise skew. I then expanded it to give me more information. Mainly so I can save it somewhere for use on a later date.

    On Error Resume Next

    Const ForReading = 1
    Const ForWriting = 2
    Const Forappend = 8
    filecomputer = “.\computer.txt” ‘ -> File that contains the computers list
    strComputer = “.”
    Star = “*”
    InventoryOutputFile = “inventory.txt”
    logfilename = “.\inventory.log”

    Dim hostname,OSType,CSDVersion,WinSerialNumber,Version,Windir,Timewritten,sw,Make,Model,CPU,Drives,TotalMemory,SerialNumber

    sw = 0

    ‘ Call the routine for log file creation

    createlogfile logfilename

    ‘ Read computer.txt file

    Set objFSO = CreateObject(“Scripting.FileSystemObject”)
    Set objTextFile = objFSO.OpenTextFile(filecomputer,ForReading)
    Do While objTextFile.AtEndOfStream <> True
    strLinetoParse = objTextFile.ReadLine
    First_char = Left(strLinetoParse, 1)
    if (First_char <> star) And (First_char <> ” “) then ‘ Bypass the row starting with * and blank char
    hostname = Trim(strLinetoParse)

    Get_user_info hostname
    If WinSerialNumber > 0 then ‘ If the computer exist or is UP
    hostname = strLinetoParse

    AddLineToOutputFile hostname,OSType,CSDVersion,WinSerialNumber,Version,Windir,TotalMemory,Make,Model,CPU,Drives,SerialNumber,Forappend
    WinSerialNumber = 0
    msg = “=====> Hostname ” & hostname & ” not found or Down”

    writetofile msg,Forappend
    End if
    End if

    ‘ Retrieve the information from the remote computer

    Function Get_user_info(strComputer)
    Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)

    Set colItems = objWMIService.ExecQuery(“Select * from Win32_OperatingSystem”,,48)
    For Each objItem in colItems
    OSType = objItem.Caption
    CSDVersion = objItem.CSDVersion
    WinSerialNumber = objItem.SerialNumber
    Version = objItem.Version
    Windir = objItem.WindowsDirectory
    TotalMemory = Round(Trim(objItem.TotalVisibleMemorySize) / 1024, 2 /1024) /1024

    Set colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_Processor”,,48)
    For Each objItem in colItems
    CPU = Trim(objItem.Name)

    Set colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_LogicalDisk WHERE DriveType=3″,,48)
    For Each objItem in colItems
    Drives = Drives & Trim(objItem.DeviceID) & ” ” & Round(Trim(objItem.Size) / (1024^2), 2) & “;”

    Set colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_ComputerSystem”,,48)
    For Each objItem in colItems
    Make = Trim(objItem.Manufacturer)
    Model = Trim(objItem.Model)

    Set colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_BIOS”,,48)
    For Each objItem in colItems
    SerialNumber = Trim(objItem.SerialNumber)
    End function

    ‘ Add/Update the records

    function AddLineToOutputFile(hostname,OSType,CSDVersion,WinSerialNumber,Version,Windir,TotalMemory,Make,Model,CPU,Drives,SerialNumber,forwriting)
    ‘WScript.Echo hostname
    Set objFSO = CreateObject(“Scripting.FileSystemObject”)
    Set WriteInventory = objFSO.OpenTextFile(InventoryOutputFile,forwriting, True)
    WriteInventory.WriteLine(hostname & “,” & OSType & “,” & CSDVersion & “,” & WinSerialNumber & “,” & Version & “,” & Windir & “,” & TotalMemory & “,” & Make& “,” & Model & “,” & CPU & “,” & Drives & “,” & SerialNumber)
    End function

    ‘ Create the log file

    function createlogfile(logfilename)
    Dim objFileSystem, objOutputFile
    Dim strOutputFile
    strOutputFile = logfilename
    Set objFileSystem = CreateObject(“Scripting.fileSystemObject”)
    Set objOutputFile = objFileSystem.CreateTextFile(strOutputFile, TRUE)
    objOutputFile.WriteLine(“——————— Inventory Report ” & now() & ” ———————“)
    objOutputFile.WriteLine(” “)
    Set objFileSystem = Nothing
    End function

    ‘ Write to log file

    function writetofile(msg,forwriting)
    Set myFSO = CreateObject(“Scripting.FileSystemObject”)
    Set WriteStuff = myFSO.OpenTextFile(logfilename,forwriting, True)
    WriteStuff.WriteLine(” “)
    WriteStuff.WriteLine(” “)
    End function

  • See who is logging onto your domain

    I was looking a migration from one domain to another a short while ago. Almost all the users accounts had been migrated over but there were a few hanging on.

    The migration tool wasn’t doing a great job of picking them up so I wrote a small script and added it to group policy for all servers and workstations. Now when someone logs in to the old domain a line is written to the log with their username, computer name and IP address.

    Using this the person responsible for the migration can get through the last few people on the old domain. This has saved a lot of time as before I wrote this th eprocess was very manual.

    Const ForAppending = 8
    Set WshShell = CreateObject("WScript.Shell")
    Set WshNetwork = CreateObject("WScript.Network")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("\\ServerName.DomainName.TLD\RemainingComputer\log.txt", ForAppending)
    objFile.WriteLine WshNetwork.ComputerName & "," & WshNetwork.UserName & "," & GetIpAddress

    Function GetIPAddress
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set IPConfigSet = objWMIService.ExecQuery _
    ("Select IPAddress from Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'")

    For Each IPConfig in IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then
    For i = LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
    If Not Instr(IPConfig.IPAddress(i), ":") > 0 Then
    strIPAddress = strIPAddress & IPConfig.IPAddress(i) & " "
    End If
    End If
    GetIPAddress = strIPAddress
    End Function

  • Dell XPS13

    I gave the Mac book air a fair shot. I lasted two months but when with every update, problems weren’t fixed and bugs seemed to get worse, I decided enough was enough. So, two weeks ago I started looking around for alternatives. I’ve decided, I’m sticking with Windows for the foreseeable future but the size of the Mac book air was still really appealing because of its keyboard and its size. Comparable systems on the Windows platform are called Ultra books. There are a few good names in this area. Acer, Toshiba, Sony, Samson and Dell. In fairness to these companies, they are pretty much neck and neck with their offering. They are governed by the limitations of the hardware in the form factor of ultra-books so there aren’t major differences in the specifications. Weight, size, processor, RAM and storage is all very equal among these systems. It wasn’t easy to make a choice based on website specs.

    Fortunately, I was very lucky to know several people who could let me spend some time trying out some of the ultra-books from the main providers. HP, Toshiba and Dell were definitely the winners of the bunch for what I wanted. Unfortunately, almost all of the ultra-books I tested felt very flimsy and cheap. Maybe it seems silly, but I want a laptop that’s going to feel and look great. It doesn’t matter that I can’t see it, when I walk into a meeting with this, I want people to know that I take computing seriously and I take care in what I choose. The feel of it is hugely important. A laptop with a spongy keyboard is uncomfortable and sloppy. If it has a big boxy body then it’s just not sexy. Let’s face it; I spend more time on a computer than most. It’s important that I’m happy with everything when I finally settle on buying a laptop.

    I finally decided on the Dell XPS. The keyboard is incredibly comfortable, it is very light, the front has a lovely shape, my wrists don’t hit off the touch pad when I’m typing, it has just enough USB ports, the battery life is just about adequate, it’s very quiet and it performs well. Of course, it goes without saying that it has a solid state disk and four GB of RAM.

    I put Dell through hell while buying this laptop. The machine I tried out was six months old and it had a number of annoying problems. The wireless adapter frequently dropped the connection and the fan would spin up for absolutely no reason and remain on at full throttle for ages. These were recognised defects in the first model of the XPS13 however from only a day of using this one; it would appear that they have been rectified. I certainly ensured that I got confirmation in writing that the issues had been resolved in the unit I was about to purchase before I made any decision. I was torn between the XPS13 and the XPS14. The extra inch allows Dell to cram a lot more power into the laptop but in the end I decided that portability was a little more important than power at the moment. Plus, although the XPS13 isn’t as powerful as the XPS14, it’s by no means weak. It easily handles Windows 7 and Windows 8, Office 2010, Visual studio, the VSphere client and a plethora of other applications. Also, for the past few years, I find that I spend most of my time on system administration so I don’t need a huge amount of power to get my job done.

    So, there you have it, I’ve given up on the Mac. I don’t mind telling you, I’m relieved. If you like, I can go into all the reasons at another stage but for now, all I’ll say is, it’s nice to be more efficient while out and about again.

  • Window Eyes verses Jaws?

    It’s that time again.
    Do I spend €445 on a Jaws upgrade and another SMA or do I move to a rival screen reader. Really, Window Eyes is the only application that comes close to competing with Jaws in my experience so it is the only one I am considering. Hal by Dolphin is just so far behind that I haven’t given it a second thought. This is just my opinion though. If your going through a similar decision then I encourage you to keep all of your options open.

    I’ve downloaded a demo of Window eyes and I’m currently running it through it’s paces. I’ll have to blog about this in more detail but right away, I miss some of the more advanced features of Jaws that don’t just make applications accessible, they make applications more intuitive and more efficient. When I talk about access, I don’t just need the basic screen reading functionality, I need an application to assist me in accessing data as quickly as possible.

    I like some features of Window eyes though. For example, the open scripting framework allows for standard development languages to be used. This is a major selling point.

    I’ll write about this in a little more detail over the next few days I hope.

  • The accessibility of virtual desktops.

    This probably could be a much more scientific approach to a review or analysis of the accessibility of a Windows guest running on the ESXI hypervisor however, I don’t really have the time to write such a document at the moment. However, this will serve as verification to some that access to this environment is possible all be it in a limited way.

    For the less technical people out there, basically what I’m talking about here is running a Windows computer inside a virtual machine.

    You need a more basic description? No problem. Try this. Let’s say you have one large computer. Virtual machines are machines that run inside this big computer. Think about it as if it was a building. This building might have ten different companies. True, each company could probably have its own building but there’s no need. It only needs a certain amount of space. An entire building would be over kill. So, the one building hosts all of these guest companies. Just like one large server can host dozens or hundreds of virtual machines be those workstations that users work with or servers that run the companies IT systems. Having one building hosting all these smaller companies cut down on the space required the cost of maintenance and the cost of power. When you hear the word hypervisor, I am basically talking about the building or the large server that hosts all the virtual machines or companies. When I talk about a guest, I am talking about the companies in the building i.e, the virtual machines. Get it?

    • Building = Server / Hypervisor
    • Company = Guest or virtual machine

    Ok. I’m glad we have all of that cleared up. You can take a break for a few seconds before I move on to the next part because it’s going to get a little technical again. Don’t worry. You’ll understand it now that you have a grip of the basics.

    For one reason or another, I spent some time yesterday tackling the problem of how a blind person can independently and efficiently access a Windows 7 PC that has been virtualized using a thin client. A thin client for those of you who aren’t aware of the term is a basic PC. It has very limited storage, limited RAM and a low power processor. The idea of this machine is to give a user a platform from where they can access a virtual computer. All it does is start a cut down version of Windows and provide the user with a log in box to start their virtual system.

    There is one barrier to accessibility when using thin clients. No additional software can be installed ordinarily as there isn’t enough space to facilitate it. This means installing a screen reader isn’t an option. Even a pen drive version of Jaws won’t work because it requires the installation of a mirror driver. Fortunately, NVDA will work very well. Just download the portable version and run it. If I was to make one suggestion it would be to put NVDA to sleep automatically when the PC over IP or the RDP client started as it can get a little confusing when modifier keys such as caps lock are pressed. I know this can be done using scripts though and it is something I would look at doing if I was using this as my workstation every day.

    So, you can now use the thin client to log into your workstation. That’s the first hurdle out of the way. Now what?

    With VMware you can log onto virtual machines using two protocols. RDP which is Microsoft’s remote desktop protocol or PC over IP which is the protocol used by VMware. PC over IP is more efficient for a number of reasons but in later versions of RDP Microsoft have gained some ground. I won’t explain the benefits over PC over IP in this post but very quickly, PC over IP is less bandwidth intensive so the experience of remotely using a virtual machine is a little smoother.

    You’ll be happy to know that relaying sound back to the thin client is supported by both of these protocols however you won’t get instant feedback like you would if sitting at your own PC. The delay is in the realm of about fraction of a second but if like me you expect instant responses from a screen reader this fraction of a second may as well be an eternity.

    Relaying sound back to the thin client is very important. Jaws, my preferred screen reader crashes every time it is started in a virtual machine using the PC over IP protocol. Without fail, it refuses to run. NVDA on the other hand runs very nicely in a virtual machine using the PC over IP protocol. Of course, using NVDA sound mapping to your thin client is vital which is why I made the point earlier.

    Unfortunately, there you have it. What I’m saying in a very long winded way is, yes, you can access a virtual machine using a thin client if you’re stuck but I wouldn’t think it’s usable every day. The sound lag is just too pronounced. NVDA’s ability to work in this environment should however be recognised and commended. Jaws, a leader in screen reading software seems to fail badly.

    Please don’t’ take this as an endorsement or a criticism of any screen reader. I am simply stating what I have found to be the reality here. I have written this post to highlight this area and to show that improvement is required. More and more organizations and companies are moving to virtual desktops to replace physical machines as they provide significant cost savings. I have a genuine fear that assistive technology companies are not aware of this trend and blind computer users such as me will be left clambering to keep up with my sighted colleagues. I strongly believe that it is vital that companies such as Freedom Scientific, NV Access and GW Micro listen to users and when possible, utilize their experience and expertise. I for one offer it freely.

    Systems used are:

    • ESXI 5.0
    • VMWare view 5.0
    • Windows 7 X64 and 32 bit.
    • Thin client running a cut down version of Windows XP.
    • 1GB network connection.
    • Virtual machine had two processors and 4GB of RAM.
    • Thin client had 1GB of RAM and 1 processor at 1.5GHZ.

    I should finally note that I do not see RDP as a viable solution for accessing virtual machines using a thin client. Especially for screen reader users. If by some stroke of luck you get Jaws running on your thin client, you would then use Jaws on your virtual machine to tunnel the data back to your locally running instance of Jaws on the thin client. That’s fine, however, what if like me your a system administrator and you will need to establish connections to other remote systems from your virtual machine. You will not be able to use Jaws to establish a second or third connection as you are already using jaws through one RDP session. Drawing on an article from IBM this seems to be a viable solution for some researchers however from the perspective of someone who both administers and uses a virtual environment every day, I would not be able to depend on RDP due to this limitations. PC over IP is a protocol designed and optomized for he VMware virtual platform. We should be able to use it.

  • Risky Trojan doing the rounds. Please read this.

    A script has been found on a number of websites that when run will attempt to install a trojan onto a PC. This script is usually sent by Email and in fact you may find that it origionates from Glynis Bradbury Of course, I have motified that Email address slightly for security. The script redirects you to a site with the domain name agentcleanerrescue.info.

    For some reason, Proxies and anti-virus applications are not yet detecting this threat even though it has been out there for four days now. To protect against this, do the following:

    If you have a proxy on your network, blacklist the domain: agentcleanerrescue.info.
    If you are a home user, you can block this domain as well. Just do the following.

    For Windows 7 or Vista

    1. Click the start button.
    2. Type notepad into the search box.
    3. Right click the notepad
    4. Click run as administrator.
    5. When prompted to confirm that you want to run as an administrator click the Yes button.
    6. Click File in the menu.
    7. Click Open
    8. In the file name box paste the following line:


    9. Click the Open button.
    10. Scrole to the bottom of the file.
    11. Paste the following line: agentcleanerrescue.info

    12. Click the File menu.
    13. Click Save

    For Windows XP

    1. Click the start button.
    2. Navigate to All Programs, then Accessories
    3. Click Notepad
    4. Yes button.

    5. Click File in the menu.
    6. Click Open
    7. In the file name box paste the following line:


    8. Click the Open button.
    9. Scrole to the bottom of the file.
    10. Paste the following line: agentcleanerrescue.info

    11. Click the File menu.
    12. Click Save

    Of course, it should go without saying that in addition to letting your system update software automatically in the background, you should regularly fource a manual update of your AntiVirus application and perform Windows updates.