40/sec to 500/sec

Introduction

Surprised, by the title? well, this is a tour of how we cracked the scalability jinx from handling a meagre 40 records per second to 500 records per second. Beware, most of the problems we faced were straight forward, so experienced people might find this superfluous.
Contents

* 1.0 Where were we?

1.1 Memory hits the sky
1.2 Low processing rate
1.3 Data loss :-(
1.4 Mysql pulls us down
1.5 Slow Web Client

* 2.0 Road to Nirvana

2.1 Controlling memory!
2.2 Streamlining processing rate
2.3 What data loss uh-uh?
2.4 Tuning SQL Queries
2.5 Tuning database schema
2.5 Mysql helps us forge ahead!
2.6 Faster…faster Web Client

* 3.0 Bottom line

Where were we?

Initially we had a system which could scale only upto 40 records /sec. I could even recollect the discussion, about “what should be the ideal rate of records? “. Finally we decided that 40/sec was the ideal rate for a single firewall. So when we have to go out, we atleast needed to support 3 firewalls. Hence we decided that 120/sec would be the ideal rate. Based on the data from our competitor(s) we came to the conclusion that, they could support around 240/sec. We thought it was ok! as it was our first release. Because all the competitors talked about the number of firewalls he supported but not on the rate.

Memory hits the sky

Our memory was always hitting the sky even at 512MB! (OutOfMemory exception) We blamed cewolf(s) inmemory caching of the generated images.But we could not escape for long! No matter whether we connected the client or not we used to hit the sky in a couple of days max 3-4 days flat! Interestingly,this was reproducible when we sent data at very high rates(then), of around 50/sec. You guessed it right, an unlimited buffer which grows until it hits the roof.

Low processing rate

We were processing records at the rate of 40/sec. We were using bulk update of dataobject(s). But it did not give the expected speed! Because of this we started to hoard data in memory resulting in hoarding memory!

Data Loss :-(

At very high speeds we used to miss many a packet(s). We seemed to have little data loss, but that resulted in a memory hog. On some tweaking to limit the buffer size we started having a steady data loss of about 20% at very high rates.

Mysql pulls us down

We were facing a tough time when we imported a log file of about 140MB. Mysql started to hog,the machine started crawling and sometimes it even stopped responding.Above all, we started getting deadlock(s) and transaction timeout(s). Which eventually reduced the responsiveness of the system.

Slow Web Client

Here again we blamed the number of graphs we showed in a page as the bottleneck, ignoring the fact that there were many other factors that were pulling the system down. The pages used to take 30 seconds to load for a page with 6-8 graphs and tables after 4 days at Internet Data Center.

Road To Nirvana

Controlling Memory!

We tried to put a limit on the buffer size of 10,000, but it did not last for long. The major flaw in the design was that we assumed that the buffer of around 10000 would suffice, i.e we would be process records before the buffer of 10,1000 reaches. Inline with the principle “Something can go wrong it will go wrong!” it went wrong. We started loosing data. Subsesquently we decided to go with a flat file based caching, wherein the data was dumped into the flat file and would be loaded into the database using “load data infile”. This was many times faster than an bulk insert via database driver. you might also want to checkout some possible optimizations with load data infile. This fixed our problem of increasing buffer size of the raw records.

The second problem we faced was the increase of cewolf(s) in memory caching mechanism. By default it used “TransientSessionStorage” which caches the image objects in memory, there seemed to be some problem in cleaning up the objects, even after the rerferences were lost! So we wrote a small “FileStorage” implementation which store the image objects in the local file. And would be served as and when the request comes in. Moreover, we also implmentated a cleanup mechanism to cleanup stale images( images older than 10mins).

Another interesting aspect we found here was that the Garbage collector had lowest priority so the objects created for each records , were hardly cleaned up. Here is a little math to explain the magnitude of the problem. Whenever we receive a log record we created ~20 objects(hashmap,tokenized strings etc) so at the rate of 500/sec for 1 second, the number of objects was 10,000(20*500*1). Due to the heavy processing Garbage collector never had a chance to cleanup the objects. So all we had to do was a minor tweak, we just assigned “null” to the object references. Voila! the garbage collector was never tortured I guess ;-)

Streamlining processing rate

The processing rate was at a meagre 40/sec that means that we could hardly withstand even a small outburst of log records! The memory control gave us some solace,but the actual problem was with the application of the alert filters over the records. We had around 20 properties for each record, we used to search for all the properties. We changed the implementation to match for those properties we had criteria for! Moreover, we also had a memory leak in the alert filter processing. We maintained a queue which grew forever. So we had to maintain a flat file object dumping to avoid re-parsing of records to form objects! Moreover, we used to do the act of searching for a match for each of the property even when we had no alert criteria configured.

What data loss uh-uh?

Once we fixed the memory issues in receiving data i.e dumping into flat file, we never lost data! In addition to that we had to remove a couple of unwanted indexes in the raw table to avoid the overhead while dumping data. We hadd indexes for columns which could have a maximum of 3 possible values. Which actually made the insert slower and was not useful.

Tuning SQL Queries

Your queries are your keys to performance. Once you start nailing the issues, you will see that you might even have to de-normalize the tables. We did it! Here is some of the key learnings:

* Use “Analyze table” to identify how the mysql query works. This will give you insight about why the query is slow, i.e whether it is using the correct indexes, whether it is using a table level scan etc.

* Never delete rows when you deal with huge data in the order of 50,000 records in a single table. Always try to do a “drop table” as much as possible. If it is not possible, redesign your schema, that is your only way out!

* Avoid unwanted join(s), don’t be afraid to de-normalize (i.e duplicate the column values) Avoid join(s) as much as possible, they tend to pull your query down. One hidden advantage is the fact that they impose simplicity in your queries.

* If you are dealing with bulk data, always use “load data infile” there are two options here, local and remote. Use local if the mysql and the application are in the same machine otherwise use remote.

* Try to split your complex queries into two or three simpler queries. The advantages in this approach are that the mysql resource is not hogged up for the entire process. Tend to use temporary tables. Instead of using a single query which spans across 5-6 tables.

* When you deal with huge amount of data, i.e you want to proces say 50,000 records or more in a single query try using limit to batch process the records. This will help you scale the system to new heights

* Always use smaller transaction(s) instead of large ones i.e spanning across “n” tables. This locks up the mysql resources, which might cause slowness of the system even for simple queries

* Use join(s) on columns with indexes or foreign keys

* Ensure that the the queries from the user interface have criteria or limit.

* Also ensure that the criteria column is indexed

* Do not have the numeric value in sql criteria within quotes, because mysql does a type cast

* use temporary tables as much as possible, and drop it…

* Insert of select/delete is a double table lock… be aware…

* Take care that you do not pain the mysql database with the frequency of your updates to the database. We had a typical case we used to dump to the database after every 300 records. So when we started testing for 500/sec we started seeing that the mysql was literally dragging us down. That is when we realized that the typicall at the rate of 500/sec there is an “load data infile” request every second to the mysql database. So we had to change to dump the records after 3 minutes rather than 300 records.

Tuning database schema

When you deal with huge amount of data, always ensure that you partition your data. That is your road to scalability. A single table with say 10 lakhs can never scale. When you intend to execute queries for reports. Always have two levels of tables, raw tables one for the actual data and another set for the report tables( the tables which the user interfaces query on!) Always ensure that the data on your report tables never grows beyond a limit. Incase you are planning to use Oracle, you can try out the partitioning based on criteria. But unfortunately mysql does not support that. So we will have to do that. Maintain a meta table in which you have the header information i.e which table to look for, for a set of given criteria normally time.

* We had to walk through our database schema and we added to add some indexes, delete some and even duplicated column(s) to remove costly join(s).

* Going forward we realized that having the raw tables as InnoDB was actually a overhead to the system, so we changed it to MyISAM

* We also went to the extent of reducing the number of rows in static tables involved in joins

* NULL in database tables seems to cause some performance hit, so avoid them

* Don’t have indexes for columns which has allowed values of 2-3

* Cross check the need for each index in your table, they are costly. If the tables are of InnoDB then double check their need. Because InnoDB tables seem to take around 10-15 times the size of the MyISAM tables.

* Use MyISAM whenever there is a majority of , either one of (select or insert) queries. If the insert and select are going to be more then it is better to have it as an InnoDB

Mysql helps us forge ahead!

Tune your mysql server ONLY after you fine tune your queries/schemas and your code. Only then you can see a perceivable improvement in performance. Here are some of the parameters that comes in handy:

* Use the buffer pool size which will enable your queries to execute faster –innodb_buffer_pool_size=64M for InnoDB and use –key-bufer-size=32M for MyISAM

* Even simple queries started taking more time than expected. We were actually puzzled! We realized that mysql seems to load the index of any table it starts inserting on. So what typically happened was, any simple query to a table with 5-10 rows took around 1-2 secs. On further analysis we found that just before the simple query , “load data infile” happened. This disappeared when we changed the raw tables to MyISAM type, because the buffer size for innodb and MyISAM are two different configurations.

for more configurable parameters see here.

Tip: start your mysql to start with the following option –log-error this will enable error logging

Faster…faster Web Client

The user interface is the key to any product, especially the perceived speed of the page is more important! Here is a list of solutions and learnings that might come in handy:

* If your data is not going to change for say 3-5 minutes, it is better to cache your client side pages

* Tend to use Iframe(s)for inner graphs etc. they give a perceived fastness to your pages. Better still use the javascript based content loading mechanism. This is something you might want to do when you have say 3+ graphs in the same page.

* Internet explorer displays the whole page only when all the contents are received from the server. So it is advisable to use iframes or javascript for content loading.

* Never use multiple/duplicate entries of the CSS file in the html page. Internet explorer tends to load each CSS file as a separate entry and applies on the complete page!

Bottomline
Your queries and schema make the system slower! Fix them first and then blame the database!

See Also

* High Performance Mysql

* Query Performance

* Explain Query

* Optimizing Queries

* InnoDB Tuning

* Tuning Mysql

Categories: Firewall Analyzer | Performance Tips
This page was last modified 18:00, 31 August 2005.

-Ramesh-

Protect Your Computer…and Your Business!

We all take the computer for granted. I mean, all we have to do is switch it on and it’s ready to go. But did you ever stop to think what would happen if your computer suddenly crashed? And that is the only computer you have to work on!

What will happen to your work and your business for the next few days or weeks?

Do you have the original or a copy of all your programs?

Do you have the setup configurations, eg for your ISP?. You will need this to re-install some programs.

Do you have a copy of your email address book? Your email list or address book is vital to your business.

Do you remember all your passwords - for retrieving email, connecting to your ISP, membership sites, etc?

So what can you do to ensure that your computer will run as well as you’d expect, and continue working when your computer is down? Here’s a few simple tips:

1.Is your computer protected from viruses? Install an anti-virus software such as Norton AntiVirus or McAfee, and make sure to get regular updates. New viruses are coming out more often these days so you need to have updates regularly. Anything more than 3 months old needs to be updated today.

You can do an online virus scan at: http://housecall.antivirus.com

2.Install a firewall. Anytime your computer is connected to the Internet without a firewall, it is operating under an “open door” policy to intruders. Hackers can get in, take what they want, and even leave open a “back door” so they can turn your computer into a “zombie” and use it to attack other computers, distribute porn and spam.

Your bank account and credit card information, passwords, documents and personal files can be stolen while you’re busy surfing. Don’t let that happen!

You can download a personal firewall from here:
http://www.zonelabs.com or from http://soho.sygate.com/products/spf_standard.htm

3. Make regular backups of your important files. Keep a record of all vital information, such as passwords, system configurations, etc. in a file and also print a copy of this and keep in a safe place. Make a duplicate and keep at another location.

If your computer does not come with a zip drive or CDRW drive, it would be a good idea to invest in one. Zip drives and CDRW drives are inexpensive and can be easily installed. The cost of a blank CD for example is less than $1.00 and can store up to 650MB of data.

If you lost some files or your hard disk crashed you can easily retrieve them from the backups. And if your computer is down for repair, you can take that backup CD and work from another machine.

4.Remove all unwanted files on your hard disk. You can safely remove files in your temporary internet folder. In Internet Explorer, select Tools -> Internet options - > Delete Files.

5.Increase your systems performance by defragmenting your hard disk regularly. As applications and files are saved and deleted they gradually cause your hard disk to fragment. By defragmenting your hard disk you can optimise the performance of your computer. Defragmenting may also save wear and tear on your hard disk and extend its lifespan.

Do this today.

About The Author

About the author: Ahmad Supaat provides work-at-home ideas and opportunites for anyone interested to start a business online. For more information please visit http://insiderprofit.com. Subscribe to the “Insiderprofit Home Business Tips”: mailto:insiderprofit@getresponse.com, mailto:insiderprofit@yahoo.com

Microsoft Great Plains Integration Manager - Advanced Techniques

Great Plains Integration Manager scripting and translation - overview for programmer, software developer, database administrator, IT specialist

Microsoft Business Solutions main middle market ERP application - Microsoft Great Plains has multiple integration options: MS SQL Scripting (stored procedures and views), ADO.Net programming, Microsoft SQL Server DTS packages. You certainly can deploy such SDK tools as eConnect. However here we would like to show you how to program the simplest user friendly tool: Microsoft Great Plains Integration Manager.

We assume that you are familiar with Microsoft scripting technologies: Visual Basic for Application (VBA). You should be aware, however, about poor performance of Integration Manager. We recommend it for low volume of complex transactions. It is good tool, if you are importing about 100 transactions per day from text file (when you need to come through empty lines or something not matching the template to filter integration lines). If you have thousand transactions and performance is critical - switch to SQL Stored procs or Dexterity custom process server.

1. VBA Scripting - Launch Great Plains Integration Manager, open your integration, right click->Properties, switch tab to scripts, open Before Document script. Now place this code in it:


If Left(SourceFields(”F4″), 4)=”THRU” Then

SetVariable “DocDate”, Right(SourceFields(”F4″), 8) 

End If

If IsNull(SourceFields(”F1″)) Or IsNull(SourceFields(”F7″)) Then

CancelDocument

End If

It should mean that you can create DocDate variable and assign it the value from your query field.  The second statement cancels document integration if certain condition met (when line is empty or is not actually integration line - something like comment record, etc.)

Now open Before Document Commit script and place this code there:

Dim MyTime, MyHour

MyTime = Now

MyHour = Hour(MyTime)

If Not IsNull(GetVariable(”DocDate”)) then

SetVariable “DocNumber”, GetVariable(”DocNumber”)+1

DestinationFields(”Document Number”)=”THRU”+GetVariable(”DocDate”) &”A” & GetVariable(”DocNumber”)

DestinationFields(”Posting Date”)=GetVariable(”DocDate”)

DestinationFields(”Description”)=”Client Check “+ SourceFields(”F1″)

If Not IsNull(SourceFields(”F8″)) Then

DestinationFields(”Check.Check Number”)=SourceFields(”F8″)

Else

SetVariable “DocNumber”, GetVariable(”DocNumber”)+1

DestinationFields(”Check.Check Number”)=GetVariable(”DocDate”)& MyHour&GetVariable(”DocNumber”)

End If

DestinationFields(”Check.Date”)=GetVariable(”DocDate”)

If Month(DestinationFields(”Check.Date”)+1)= Month(DestinationFields(”Check.Date”)) Then

DestinationFields(”Check.Date”)=DestinationFields(”Check.Date”)+1

End If

End If

Here you do two things.  First you construct check number, using Date and time plus Document number.  And the second is even more interesting - you alter check date.

In After Integration script place this code:

ClearVariables

It is good idea to nullify your variables.

2. Translation. Imagine that your are something like collection agency and you need to translate your vendors (from whom you purchase AR) into real vendors (banks). In AP integration open Destination Mapping, select Vendor ID, in the Rule Properties, click on the button next to Translation field, answer No, click on Translation tab and paste from Excel your translation list, something like this:


JOHNB	BANKOFAMERICA

PETERP	BANKOFAMERICA

MARTHAM	CITIBANK

Now your vendors from integration file will be replaced with real vendors from Great Plains.

Happy integrating! if you want us to do the job - give us a call 1-866-528-0577! help@albaspectrum.com

About The Author

Andrew Karasev is Chief Technology Officer in Alba Spectrum Technologies - USA nationwide Great Plains, Microsoft CRM customization company, based in Chicago, California, Colorado, Arizona, New York, Texas, Florida, Georgia, Canada, UK, Australia and having locations in multiple states and internationally (www.albaspectrum.com), he is Dexterity, SQL, C#.Net, Crystal Reports and Microsoft CRM SDK developer; akarasev@albaspectrum.com

My Big Lesson - Adware Protection

Working in an office all day, connected to an open network I need to be very protective of my computer. I don’t look at those sites I shouldn’t be looking at, I don’t download music, and I have an adware and virus protection plan I stick to religiously. Each Monday upon startup, while I’m downloading my weekend mail and listening to the weekend dramas of my collegues I update my virus definitions and proceed to scan every inch of my computer for invading viruses.

If I’ve made it through the working week I deserve a treat, so I drag my best friend out of her office and off we go to this quaint sushi bar down the street. Fire, dancing and fantastic sushi made in front of my eyes is just enough to make me forget the work piling up back at the office.

Anyway by the time I pulled myself out of sushi mode, up the stairs, and back to the office my weekly spyware scan was complete, and was congratulating me on having a “spyware and adware free computer.”

Working on the net all day every day, competent adware protection software is important. I’m always skeptical when collegues offer me a new, free adware software. So for the last 2 months I’ve been using not just one adware protection program, but the 2 best anti-adware software packages I could find…….. everything was going great until……….

It was Friday morning, just one more day till the weekend, the boss couldn’t keep quiet about this weekends’ date, blonde, funny, the complete package…………..

Anyway, I was listening with amusement to the excited rantings while my inbox filled with this mornings messages, and suddenly everything went blue……. Not just my screen, but everyone on the network……….. Everything was down, no work today………………

Monday morning came around and the boss wasn’t happy, he missed his date trying to sort out the network, no date and no second chance……..

I was in the bad books, turns out one of the “Adware Protection” software programs I had downloaded had secretly filled mine, and every computer on the network with spyware….. Not Good At All!

A weekend without sales, without a date, and more than enough stress, all because of my one mistake…….. Needless to say I am no longer in charge of spyware and adware protection at the office. The techies who had to spend the weekend fixing my mistake have now installed a new adware program on my computer, one program to take care of the lot, I don’t touch it, I don’t change any settings, and I’m happy with that…..

Finally the boss has calmed down and everything’s under control again, luckily I’ve got a great boss that can see the funny side of things ……. and I still have a job! A lesson learned is the way I’m looking at the whole situation.

My advice to anyone working online is be aware of what you are downloading to your computer, sometimes software that should be protecting is actually infecting!

You can find the Adware Protecter we now use at http://www.realtimesolutions.info

A Tale of Two Regeds: Registry editors

Tech support tells me to type ‘regedt32′ as opposed to ‘regedit’ to access the registry from the command line (Start > Run). I question the use of ‘regedt32,’ but he says to do it anyway. Whenever I use the registry editor, I recall this incident and never look up the tale of the two regs… until now.

Regedt32.exe is an alternative registry editor available with Windows NT/2000 with features of its own. Regedt32.exe does not support importing and exporting registration entries (.reg) files. Regedit has limitations of its own as quoted here:

“You cannot set the security for registry keys. You cannot view, edit, or search the value data types <>REG_EXPAND_SZ and <>REG_MULTI_SZ. If you try to view a <>REG_EXPAND_SZ value, Regedit.exe displays it as a binary data type. If you try to edit either of these data types, Regedit.exe saves it as <>REG_SZ, and the data type no longer performs its intended function. You cannot save or restore keys as hive files.”

Research indicates regedit has:

  • a better search tool
  • bookmarking of subkeys
  • opens to last edited subtree, export and import capabilities
  • all keys are visible from a window similar to Windows Explorer

Regedt32 (pre-WinXP) can:

  • run in read-only mode
  • allows you to edit values longer than 256 characters (who wants to do that???)
  • displays subtrees in their own windows
  • modify access permissions to subtrees, keys, and subkeys

In WinXP and Server 2003, the two have been replaced by a new version of regedit that has features from both. Try typing ‘regedit’ and ‘regedt32′ to see what happens. They’re the same. To prove it, while in ‘regedit,’ select ‘edit’ and you’ll see ‘permissions.’ This is a feature that was only available in the old ‘regedt32′ and not ‘regedit.’

Technically, regedt32 is a small program that runs regedit. So when typing ‘regedt32,’ it takes you to ‘regedit.’ The destination is the same either way. So type whichever is easier for you to remember. Regedit is easier for me - I had to play with the spelling of the other version until I got it right.

Now I remember that tech support was checking to see if the permissions were properly set and that was why we used ‘regedt32.’ However, someone forgot to update the script or tell him that it didn’t matter anymore when a user had WinXP. Tech support always asks what operating system at the beginning of the call, so he knew.

More registry editor resources: Microsoft has a knowledgebase article on the differences between the two. Windows IT Library has a feature comparison chart dated 2000, so it’s way old, but it will satisfy curiosity. Here’s a list of registry editor alternatives for those who wish to try something different. For tweaks, tricks, and hacks, check out WinGuides’ Registry Guide for Windows.

Meryl K. Evans (www.meryl.net),
Content Maven, is the editor of eNewsletter Journal and Shavlik’s The
Remediator Security Digest. She writes columns for PC Today, InformIT,
and MarketingProfs. Contact her to get content that inspires action or
check out her blog (www.meryl.net/blog/.

Microsoft RMS Customization - PO Items Receiving in Great Plains

Microsoft Retail Management (RMS) and Microsoft Great Plains are retail and accounting/ERP solutions coming from the same Microsoft subdivision - Microsoft Business Solutions. There is often common need to do integration between the two. Despite the fact that both systems come from the same software development company - the integration is not as simple as it probably should be.

In each case you have to use set of new Microsoft technologies: web service, SQL stored procs, C#, VB.Net programming, etc. In this small article we give you customization overview when you receive Purchase Order Receivings in Great Plains and automatically transfer them to the RMS Store Operations via web services. Plus we can push serial number info from Great Plains to Store Operations (there is no way to store serial number in Headquarters)

Item Transfer Trigger in Great Plains

Microsoft Great Plains is written in Great Plains Dexterity - proprietary programming language and development environment, which has strong ties with SQL stored procedures and queries

When Items are transferred in Great Plains via the Item Transfer Entry window, the interface must recognize this transaction. This can be accomplished via two mechanisms:

1. Dexterity Trigger, which would identify that the transfer occurred and it would populate an interface table

2. SQL Trigger on IV00200, which would populate an interface table. The assumption is that all transferred items will be serialized

Handling Headquarters Initiated Inventory Transfer Requests

Once the interface table is populated, there might be either a timed procedure or a trigger that will push the transfer from Great Plains into RMS Headquarters and it will create automatically a Style 307 Worksheet in Headquarters.

The next time that the store “receiving” the inventory communicates with Headquarters, it will receive the Inventory Quantity Adjustment notification, which will increase the item’s quantity on hand.

In each store, a web service should be installed to handle transfer of Serial Number information. Therefore, when communication is established between Store Operations and Headquarters, an application that continuously monitors Stores (in the computer hosting Headquarters) will communicate with the web service at the Store level to transfer the Serial Number information and to update the serial number tables in Store Operations.

About The Author

Luis Leung is Lead Software Developer in Alba Spectrum Technologies - USA nationwide Microsoft RMS, CRM, Microsoft Great Plains customization company, with offices in Chicago, Boston, San Francisco, San Diego, Los Angeles, Houston, Dallas, Atlanta, Miami, Montreal, Toronto, Vancouver, Madrid, Moscow, Europe, Brazil, Mexico (www.albaspectrum.com), he is Microsoft CRM SDK, C#, VB.Net, SQL, GP Dexterity developer. Luis can be reached: 1-866-528-0577 or help@albaspectrum.com.

Event Planning Software: A Beginners Guide to Project Tracking

When using your event planning software, undoubtedly you reach the point where you need to perform project tracking. Depending on the size of the event, you will have one or more projects to accomplish prior to the big event.

Your event planning software should at least allow you to do the following two tasks:

Label the days of your project. You must have the ability to label each day of the week according to your project estimate. In other words, each day you estimate in your project timeline will have the name of the project attached to it.

Make notation about the details of the project on a daily basis. Your projects will have unique characteristics and challenges on a daily basis; so, you should be able to notate your project on each day. In your event planning software, you will be able to review roadblocks to your project and you will be able to see successful activities that have assisted your project moving forward. You will be able to notate specific techniques that have been instrumental in overcoming unique challenges.

As you can see, there are some particular features that must be in your event planning software that will allow you to properly assess your project at any one time. You saw that you must be able to associate the days of your project estimate to the actual name of your project. Additionally, you must be able to notate details of your project on a daily basis. You should be able to notate your successful techniques and the challenges you face along with the notable successes you experience.

(c) Copyright 2005 Olan Butler All Rights Reserved

Olan Butler is the Chief Architect of BHO Technologists, a computer productivity & organization software and service provider http://www.bhotechnologists.com with headquarters in Kansas City. His works also include the
Appointment Calendar Software Store and the Kansas City Computer Repair Site.

Medical volunteer Anthony Loeff is writing about screen readers for visually impaired people

There are also open source screen readers, such as the Linux Screen Reader for GNOME and NonVisual Desktop Access for Windows.

The movement towards greater web accessibility is opening a far wider number of websites to adaptive technology, making the web a more inviting place for visually impaired surfers. Access technology such as screen readers and Screen magnifiers enable the blind to use mainstream computer applications. The rest have some vision, from light perception alone to relatively good acuity. However, using a screen reader is, according to some users, considerably more difficult than using a GUI and many applications have specific problems resulting from the nature of the application. Linux distributions for the blind include Oralux and Adriane Knoppix. The console-based Oralux Linux distribution ships with three screen-reading environments: Emacspeak, Yasr and Speakup. While Apple Mac OS X includes VoiceOver, a more feature-rich screen reader. Screen readers can be assumed to be able to access all display content that is not intrinsically inaccessible.

Recent versions of Microsoft Windows come with the rather basic Narrator. Indeed functionality remains limited compared to equivalent desktop applications, the major benefit is to increase the accessibility of said websites. The primary audience for such applications is those who have difficulty reading because of learning disabilities or language barriers. Comming season Anthony Loeff nonprofit worker is reporting screen readers for blind people A persons choice of screen reader is dictated by many factors, including platform and the role of organizations like charities, schools, and employers.

The Macintosh OS also comes with a built-in screen reader, called VoiceOver. Web browsers, word processors, icons and windows and email programs are just some of the applications used successfully by screen reader users. A screen reader is a software application that attempts to identify and interpret what is being displayed on the screen. Approximately 8 percent of those deemed legally blind, by any measure, have no vision. Increasingly, screen readers are being bundled with operating system distributions. Only a small fraction of this population, when compared to the sighted community, have Internet access.

The latter developed in part by Knopper who has a visual impairment. Screen readers are a form of assistive technology potentially useful to people who are blind, visually impaired, or learning disabled, often in combination with other AT such as screen magnifiers.

Later versions of Microsoft Windows include an Accessibility Wizard & Magnifier for those with partial vision, and Microsoft Narrator, a simple screen reader. Screen reader choice is contentious: differing priorities and strong preferences are common. Experimental approaches in sensory substitution are beginning to provide access to arbitrary live views from a camera.

This interpretation is then represented to the user with text-to-speech, sound icons, or a braille output. The open source GNOME desktop environment long included Gnopernicus and now includes Orca. Most legally blind people 59 percent do not use computers.

« Previous Page