Thursday, December 20, 2007

Web Accessibility And Usability: Coming Back To The Basics

The Nielsen Norman Group has made available a detailed report on accessibility, which includes the results of several usability tests --- see Going Beyond Alt Text. It's a very good read, and though its conclusions might be depressing to people coming to this area from the outside --- they should be no surprize to users who have been trying to use the Web via spoken output over the last 10 years. From the perspective of the Emacspeak user who lives in a specialized browsing environment that is optimized for performing oft-repeated tasks, there are several interesting take-aways from this report:

  • Though so-called Web Accessibility Standards have attempted to focus on the behavior observed when using screenreaders with mainstream browsers, that thread of work appears to be achieving little with respect to the real metric of task completion. As technologists, we would all do well to remember that users come to the Web, and Web Access solutions not to use the browser but rather to complete one or other task.
  • As described in Specialized Browsers and The Web The Way You Want It, task-oriented access and specialized user-optimized web tools have been around since the inception of the Web.
  • Though the Nielsen study asked users to carry out each of the given tasks by going to a given Web site, it would be interesting to see how such tasks work out in the Emacspeak environment. It's a given that an emacspeak user trying to buy a music CD at an online store would run into a brick wall fairly quickly (see, even online stores are made of brick and mortar;-)). However, as an Emacspeak user I'd never do that I'd either go to Amazon's highly efficient Amazon Accessible Store or faster yet, type an appropriate query at Google and click on the relevant Ad that sports a Google Checkout badge.
  • And more interestingly, it would be interesting to carry out a follow-up user study to compare the rate of task completion as well as observed efficiencies/inefficiencies between users of Emacspeak and generic browser/screenreader combinations for tasks such as:
    1. Play NPR news from the last hour.
    2. Play your local NPR station.
    3. Play BBC News from the last hour.
    4. Skim the top stories from CNN.
    5. Look up today's stock market numbers for the major indices.
    6. And items too numerous to enumerate in this margin.

Wednesday, November 28, 2007

Directions Using Public Transport From Google Maps

In the spirit of adding a smart URL template to enhance the Emacspeak Web Command Line for useful tools I discover ...

I just checked in a Public Transit Via Google Maps tool into the Emacspeak SVN repository. You specify trip details in the form start to destination e.g., 2715 La Terrace Circle 95123 to San Jose Airport and get back a filtered view that shows the information you want. Note that clicking on the link in this blog will give you the entire page, which is fairly easy to navigate. But having a smart filter in Emacspeak makes it that much more efficient to use.

Share And Enjoy,

Friday, November 23, 2007

Announcing Emacspeak 27.0 AKA FastDog

For Immediate Release

San Jose, CA, (Nov. 24, 2007)
Emacspeak: --- Bringing Cutteng-Edge Access For Sharp Users
--Zero cost of upgrade/downgrades makes priceless software affordable!

Downloads Reference Installation Usage Tips Tools Support
About the author SourceForge

Emacspeak Inc (NASDOG: ESPK) announces the immediate world-wide availability of Emacspeak-27 --a powerful audio desktop for leveraging today's evolving data and service-oriented semantic Web.

Major Enhancements

  1. emacspeak-web: Updated Web interaction.
  2. emacspeak-ess: Speech-enables Emacs Statistics Interface
  3. Header Line Support:
  4. Windows Key Now Stops Speech
  5. Smarter mode-line output:
  6. Google Suggest provides completion for search queries.
  7. Integrated Support For Google Services
  8. emacspeak-moz: Firefox integration.
  9. Emacspeak-webmarks: Online bookmarks.

And others too numerous for this margin ...

Friday, November 16, 2007

AxsJAX, Speech-Enabled Games And Auditory User Interfaces

This is not part of Emacspeak, but is relevant to emacspeak users given that:

  • Speech-enabled games have proven to be a successful means of discovering AUI techniques that work, beginning with the speech-enabled version of Tetris.
  • The emerging Emacs to Firefox connection using module emacspeak-moz.el and mozrepl
  • The ability to run Fire Vox with the Emacspeak speech servers --- look for a blog post on that soon.

Charles Chen and I recently released a JavaScript powered framework for access-enabling AJAX applications --- see AxsJAX. Along with access-enabling useful applications such as Google WebSearch and Google Reader, we also access-enabled JawBreaker, a popular game much in the spirit of Tetris --- but without a ticking clock. See AxsJAX showcase for pointer to this and other Web-2.0 applications that have been AxsJaxed.

Monday, October 08, 2007

The Web The Way You Want

I gave a talk last week at University of Washington entitled The Web The Way You Want; it should be of general interest to users interested in flexible access to the Web.

Monday, September 24, 2007

Podcast Covering Web Accessibility

I recorded this Accessibility Podcast a few weeks ago for the Google Developer Blog. It focuses on the overall topic of Web Accessibility and covers some of what I have been building with respect to custom clients for Google Services, alongside a broad range of issues around developing usable applications.

Tuesday, September 04, 2007

Emacspeak Video Demo: Looking Up The Weather

In the first of a sequence of posts demonstrating live emacspeak user interaction, I'll give an overview of what it feels like to use Emacspeak's powerful Web Command Line provided by its rich collection of web gadgets made up of search wizards and smart url templates

Here are a few things to note about this and all the subsequent video demos in this series:

  • All demos were recorded using recordmydesktop on an Ubuntu laptop running Linux (Ubuntu Dapper).
  • The text-to-speech is produced by the IBM ViaVoice engine, this can now be purchased from a couple of sources in the US and Europe.
  • All demos are recorded with the speech rate at which I use Emacspeak. These demos are primarily intended to show the efficiency of the environment, and slowing down the speech would detract significantly from that goal.
  • Frequent users of text-to-speech will still find the output comprehensible. For the rest, you can match it up with what you see on the screen ;-)
  • Careful listeners will notice some jitter/clipping in the audio --- this appears to be an artifact of using recordmydesktop that I was unable to eliminate.
  • In each of these articles, I'll enumerate the actions I take, and their effect. I'll enumearate actual keystrokes, but I suggest readers focus more on the atomic commands being executed, rather than individual keypresses.

Looking Up The Weather

Looking up current weather is a sufficiently common action where browsing to a weather site, typing in ones zip-code and reviewing the resulting page is three steps too many. This is also why most modern desktop environments provide gadgets that display such live information with minimal user intervention. This first video shows Emacspeak smart url RSS Weather From Wundergroundin action.

Here is the RSS Weather Demo. This is an OGG/Theora video and should play with tools like mplayer. The table below shows a brief description of each user action and its effect.

Access GadgetsC-e uPrompts for gadget
Pick Weather Gadgetrss tabpartial input completes to RSS Weather From Wunderground
Pick Default LocationreturnCA/SanJose
Speaks weather forecast
QuitqStops speech, dismisses weather forecast, and speaks current context. In this case the shell becomes current and you hear the relevant information.

A Transcript Of What You Hear

Users who could see the video half of this demo but were not frequent text-to-speech users reported that it would be useful to see a transcript of what is being spoken. I'm revising this entry to have an annotated transcript. Note that the transcript may not be accurate to the last word, since I'm typing it in by hand; however it should give one a sense of what information emacspeak chooses to speak.

Access Gadgets
The spoken prompt is Resource:.
Pick Gadget
You hear me type RS and then you hear Emacspeak completing my input to RSSWeather. Half way through that utterance, I know it's found the right gadget, so I hit enter, and that stops the utterance RSSWeather half-way through and speaks the next prompt. Notice that you also hear auditory icons to indicate that a prompt input area just opened.
With the gadget now selected, you hear the City/State prompt generated by the weather gadget. It also produces a default location of CA/San_Jose. In the demo, you hear the State/City prompt, along with the default value. I hit enter midway through that utterance, again the speech flushes immediately. The gadget now has enough information to do its work; it pulls the RSS feed from Wunderground, converts it to XHTML (using XSLT) and displays the page using Emacs/W3. Once displayed, it starts speak the forecast you see on the screen.
Here is a rough transcript of what you hear as the weather forecast is spoken. The forecast starts with the words: Conditions 73 degrees F Partly cloudy 4:50pm PDT August 18 ... This is in a lower-pitched (deeper) voice since it was generated from the title of the corresponding RSS item. Emacspeak uses Aural CSS to produce such audio formatted information. The contents of the item are spoken in the default voice starting with the utterance Temperature 73 degrees F 23 degrees C ... Conditions partly cloudy ... When I've heard enough, I hit q to quit.
When I quit the weather gadget, a number of things happen.
  • You hear auditory icon close-object to indicate the weather forecast being dismissed.
  • You hear context information indicating that the Emacs shell buffer has now become current.
  • For this context information, you hear it speak the working directory of the shell buffer and the word shell

Friday, August 31, 2007

Emacspeak And GMail

See this article by my Google colleague Srinivas Annam that outlines the availability of GMail Filters from the basic HTML interface. This was the final piece that remained to convince me to use my GMail account for email --- now, keeping the GMail Inbox clean and free of clutter has become a snap.

To go with this, I've added a few smart URL templates to Emacspeak's Web Command Line. Once you've signed in, you can use template GMail Search to type a search term, and find matching mesages. Note that GMail uses CSS class msg to tag the actual contents of a message. You can use this to advantage by hitting e c on a message link, and specifying msg as the class value to filter the message.

At some point I'll add a couple of Emacspeak wizards for creating filters; the present HTML interface is still a bit too click intensive for my liking. But cudos to Srinivas for doing the hard work that lets me discover the pain points in the HTML interface; until now these were completely invisible to me since I couldn't use GMail from the Emacspeak environment.

Emacs/W3 note: Note that signing in to GMail from the main GMail screen defeats W3. An easy work-around, and something that is more efficient anyway is to use the glogin.xml form found in Emacspeak --- use C-e ?/ in Emacspeak to pick that form. Once you're signed in to Google, you can:

  • Open your inbox
  • Perform searches to find the message you want

Friday, August 17, 2007

AMixer And Emacspeak: Controlling The Sound Card

In the days of OSS, Emacspeak had a nice Emacs-interface to aumix and it is a piece of functionality that I have missed even more under ALSA, given that one can do many more sophisticated tweaks to one's sound-card. Tool alsamixer --- a full-screen terminal application is bewilderingly confusing (at least to me), and amixer though usable required me to go find out how it worked each time I needed to do something new. The final straw came last weekend when I tried to record some Emacspeak demos using recordmydesktop and needed to configure ALSA so that it would capture sound directly from the PCM output, rather than the microphone.

To cut a short story even shorter, I ended up writing an Emacs wrapper around amixer called --- well, you guessed it, amixer. The code is checked in as amixer.el. The Emacspeak keybinding C-e ( formerly used to manipulate aumix is now ALSA-aware and will intelligently default to using the new amixer tool if /usr/bin/amixer is available.

Tuesday, August 07, 2007

The Web The Way You Want

While working on miscellaneous Web related things including:

  • Working on the W3C TAG in trying to understand how HTML TagSoup and well-formed markup might co-exist on the Web --- without the bad perennially driving out the good,
  • Thinking about the Web Command Line, and placing various Web gadget/widget technologies in perspective,
  • Building Emacs-G-Client --- an Emacs client for Google services,
  • Connecting Emacs and Firefox via MozREPL to get the best of both worlds ,
  • Refactoring some of the Web-related code in Emacspeak to better reflect the underlying ideas,
  • Adding additional Web goodies to Emacspeak including Google Suggest in the Emacs minibuffer,
  • And items too numerous to fit in this margin ...

I also wrote a draft chapter on specialized Web browsing. Given the set of things I have been working on, the end result is to point out that given the architecture and underlying design principles of the Web as embodied by HTTP, URIs and HTML, specialized Web browsing is in fact not so specialized after all.

Thursday, August 02, 2007

Google Suggest: Minibuffer Completion When Googling

Google Suggest has been available until now as a Firefox extension --- it displays a dynamically generated list of completions as one does Google searches in Firefox. The prefered way of Googling on the Emacspeak audio desktop --- using Emacspeak's Websearch facility available via C-e ? is now Google-Suggest enabled. This means that when doing Google searches via C-e ?g, you can type a partial query, and hit TAB to get a list of possible completions for the query.

Tuesday, July 24, 2007

Emacspeak WebMarks: Online Bookmarks Using Google

Emacspeak module emacspeak-webmarks adds support for adding, viewing and finding Google Bookmarks. Google Bookmarks allows you to store your bookmarks at Google; this module adds support similar to that provided by Firefox Bookmarklets for Google Bookmarks implemented in JavaScript. Note that this module though relatively small was one of the motivators for the code refactoring described in Web Interaction in Emacspeak.

Usage Tips

  • To use Webmarks, you need to be signed into Google.
  • Signing in to Google is easily done using the Webform provided as xml-forms/glogin.html in the Emacspeak distribution --- invoke it via key C-e?/.
  • In addition, the very first time you use Google Bookmarks, add your first bookmark using form xml-forms/bookmark-add.html. Fill out that form, hit submit, and extract the value the zx parameter returned by the server.
  • Use emacs Custom to save the value of the zx parameter as Emacs option emacspeak-webmarks-key.

Web Interaction In Emacspeak

Users running out of SVN will have noticed that the emacspeak codebase has seen a significant number of updates over the last couple of weeks. During this time, I've refactored the Web interaction code in Emacspeak to meet the following goals:

  • All Emacspeak Web smarts have now been re-factored to be independent of any given Web browser. In practice, this avoids code duplication between W3 and W3M support.
  • The interface to XSLT has been significantly improved.
  • When using W3, Emacspeak automatically builds a cache of CSS classnames and ids occuring on the page. These are then used to provide interactive completion when invoking commands emacspeak-extract-by-id (bound to e i in Web pages) and emacspeak-we-extract-by-class (bound to e c in Web pages).
  • Module emacspeak-we holds all code related to editing Web pages before they are displayed.
  • Module emacspeak-webutils holds all Web utility code.
  • Atom and RSS feeds are now pulled using Emacs-22 built-in library url rather than via libxslt. This has the advantage that the feeds are pulled with any cookies the browser may have set during the session.
  • All url templates, search wizards and related Web utilities should now be capable of working similarly under W3 and W3M.
  • Module emacspeak-moz provides a basic level of integration with Firefox --- see my related blog post on FireBox.
  • Module emacspeak-w3m still needs work to take advantage of all of these changes; I myself do not use W3M much, so those updates will happen as and when W3M users contribute the necessary time and patches.

Emacs-G-Client: Leveraging New Picasa API Features

The Google Picasa team announced a set of useful additions to the Picasa Web API yesterday. I've added support for most of these new features in module gphoto that is part of my Emacs G-Client package.

You can get the latest version of package Emacs-G-Client via SVN. Note that this development version of package Emacs-G-Client also includes a light-weight client for finding and playing YouTube videos.

Thursday, July 19, 2007

Emacspeak And Beautiful Code

In the fall of 2006, I was invited by O'Reilly Media to participate in an innovative book project called Beautiful Code. The project put together a set of chapters that focused on capturing the collected insight from creating real software. A particularly attractive aspect of this book was that it focused on code --- unlike many book projects in the field of software engineering, here the goal was to explicitly focus on real code and how it could be made beautiful.

The final book is now available in print. The chapter on Emacspeak is being published on this Web site under a Creative Common Licence --- this HTML version includes Chapter 31: Emacspeak --- The Complete Audio Desktop and the Afterword section from the book.

Friday, July 06, 2007

Searching The Emacspeak Knowledge Base

Information about Emacspeak and its use is available from a collection of Web sites, and being able to restrict the search to these authoritative sources is a good way of quickly finding the right document, without being distracted by the numerous hits one finds when doing a search across the whole Web. You can now search the Emacspeak Knowledge Base by using search form emacspeak-search.html; access it via Emacspeak command emacspeak-websearch and specify /to bring up the list of available forms. This form is also the default search form on the Emacspeak Web site.

HowTo: Implement Emacspeak Knowledge Base Search

Implementing the above using CSE is trivial --- all I needed to do was:

  1. Checked in an HTML file into the Emacspeak repository at Knowledge Base.
  2. Create a CSE that uses the above document.

Emacs G-Client, Reader, And CSE: Searching Past Articles From Google Reader

So I use module greader (part of package G-Client to read a large number of ATOM and RSS feeds. I have long missed the ability to search for articles I remember having read a few weeks or months ago; though I typically find it with an appropriately phrased Google Search, I've always wanted to have the ability to restrict the search to the feeds I subscribe to --- this makes formulating the query much easier.

The advent of CSEs --- see my earlier blog post entitled On The Fly Custom Search combined with Google Reader's ability to export ones subscription list as an OPML file gives me exactly what I needed.

HowTo: Enable Searching Of Past Articles From Google Reader

  • Since you need to be signed in to access the subscription list, the CSE magic cannot directly retrieve your subscription list at present. as a consequence, you need to retrieve and save your list of feeds to a location that is publicly accessible. Feature Request: Would be nice if Reader did this automatically by talking to CSE on behalf of the signed-in user --- that would obviate the next manual step.
  • Export your subscription list using command greader-opml. You'll need to do an svn update to get the above command; alternatively, sign in to Google and retrieve your subscription list.
  • Finally, customize emacspeak option emacspeak-url-template-reading-list-opml to the location of the saved OPML file.

Now, you can use Emacspeak url template reader subscription search from the Emacspeak Web Command Line to search articles you remember having seen in your Google Reader. This is also an excellent means of finding articles of interest that one might have missed in the past. As an example, I recently became interested in Selenium --- an extremely powerful Web application testing framework. Finding articles from the past that I ought to have read but hadn't was a snap using the feature describe here.

Tuesday, July 03, 2007

Google Books In Emacspeak

To coincide with today's announcement of gull-text access to public domain works from Google Books, I've updated the corresponding emacspeak Web Command-Line wizard. Use C-e u to invoke URL templates and type google books to access it.

Thursday, June 28, 2007

Making Search Fly: On-The-Fly Custom Search Engines

The Custom Search Engine team at Google recently released CSE On The Fly a truly amazing feature. Incidentally Google Custom Search is the same piece of magic that brought us Accessible Search last year.

So in the spirit of continuing to enhance the Web Command Line in Emacspeak for every smart Web tool that becomes available, I've checked in two new url templates that demonstrate how one can leverage this to be smart and selective about what one reads.

Searching Favorite Feeds
So I read a lot of Blogs, my current Blog Reader is Google Reader via --- you guessed it -- Emacs module GReader (part of the Emacs G-Client package). But I often feel the need to search my favorite feeds. URL-template Reader Subscriptions lets you do this; what's more it's not specific to Google Reader. All you need do is to publish an OPML file listing your favorite feeds and customize Emacs variable emacspeak-url-template-reading-list-opml to point to that location.
Official GoogleBlog Search
Google has a large number of Google-specific Blogs --- I usually read them through this aggregated feed: All GoogleBlog Stream Emacspeak wizard Official GoogleBlog Search builds a CSE from this feed to let you search articles from all of Google's blogs.

Eventually, I'll also add a meta search wizard that lets one construct any CSE on the fly --- with Lisp such meta-programming is a snap!

Later yesterday evening, I checked in a third url-template called On The Fly CSE that prompts for a search term and the URL for the feed of feeds that specifies the content to search.

Tuesday, June 26, 2007

Emacs-G-Client: Uploading Photos To PicasaWeb

The SVN version of package Emacs-G-Client at g-client now includes a new module gphoto.el that can create albums and upload photos to Google's PicasaWeb site --- as an example, see my photo gallery. Emacspeak users are likely to find the RSS and ATOM feeds for photo albums more useful in general; package gphoto provides easy access to previewing these feeds as well as viewing/editting the metadata that goes along with the pictures. As an example of such a feed, here is Hubbell Labrador's Graduation album.

Multilingual Dictionary Lookup Via Google

From the every useful Google tool deserves a Web Command -line equivalent ...

I just checked in an Emacspeak url-template for accessing multilingual dictionary lookup via Google. Invoke it like any other url-template using C-e u and type mult tab. Specify the word to look up, and the source-target language pair using two letter codes --- this is analogous to how the Emacspeak Translation Via Google tool works. And remember, if there is something you find yourself doing often on the Web, there is most likely an Emacspeak Web Command Line gadget for it --- well, at least that is true for the things I find myself doing often;-)

Friday, June 22, 2007

FireBox: Put The Fox In The Box

I've finally found the right development environment for myself for writing and debugging Web Applications that use JavaScript to implement client-side interaction. It turns out that it wasn't just me who found the thought of programming inside the Web browser a painful experience --- pleasant though the final end-user interaction that those results deliver might be for the final user. I discovered MozRepl --- a read-eval-print loop for Firefox. MozRepl is a Firefox extension that allows you to open a connection to a running Firefox session and gain access to a JavaScript interpreter context that can access all aspects of the Firefox runtime.

This is quite neat, I can now use the power of Emacs to write and debug end-user JavaScript applications. But wait, there is more. So in general, as someone who doesn't need to suffer from the hit on cycles and memory that running an X environment involves, I usually dont start GDM --- the graphical desktop --- on my Linux box. Believe me, running just at the console, especially with the LCD turned off makes my laptop run a lot longer. So challenge: How do you take the fox's head off Firefox? How do you run a headless Firefox?

Turns out that the original X Windows developers didn't always have access to all the displays that they were developing X applications for --- so they created XVFB --- the X Virtual Frame Buffer server. Like all good things in the Open Source world, XVFB continues to survive --- even though today, X developers hardly if ever resort to XVFB. But in the fine UNIX tradition of Get out of my way or I'll turn you into a shell script XVFB also turns out to be just what I needed in order to run FireFox as a headless application.

So in summary: I'm typing this blog on the shuttle bus riding home, with the monitor turned off, and Firefox running headless as I debug some of the code I've been writing. If you want to put the fox's head in a box yourself, here is a pointer to FireBox -- share and enjoy!

Thursday, June 14, 2007

Emacspeak And Beautiful Code

Beautiful Code is a collection of essays on software design, with all proceeds going to Amnesty International. It includes a chapter on the use of Lisp advice to speech-enable Emacs --- AKA Emacspeak. I'll eventually publish an HTML version of my article on the emacspeak Web site. In the meantime, I highly recommend the complete book --- which if you need an accessible version can probably be obtained from organizations like BookShare.

Wednesday, May 23, 2007

Google Group For Package G-Client

I've created a Google Group for package G-Client here: Emacs-G-Client. If you are using package G-Client you can use this group to discuss your experiences with other users. Note that the codebase for this package is evolving actively under SVN at lisp/g-client .

Saturday, May 19, 2007

An Essay On Eyes-Free Computing

I just posted an essay on eyes-free computing to my MathZomeblog. This essay highlights the relevance of ZomeTool in teaching mathematical concepts to students who are visually impaired. More generally, it describes my experiences as a mathematician who cannot see. I'm posting the abstract here; the complete essay can be found on my Web site.

The experiences described in this essay have influenced the software I have built and use on a daily basis; it should be of interest to:

  • Emacspeak users wishing to understand why things look like the way they do in Emacspeak.
  • Students with visual impairments who are entering the field of mathematics.
  • Teachers working with visually impaired students.
  • And the generally curious mathematician who wishes to view the world from a different perspective.


This essay outlines some of my experiences as a mathematician who cannot see. Note that I transitioned to being a Computer Scientist during Graduate School. However I strongly believe in the edict Once a mathematician, always a mathematician! — my training in mathematics continues to influence the way I think.

I've been unable to see since the age of 14, which means that I've studied and practiced mathematics predominantly in an eyes-free environment. This essay is my first conscious attempt at asking the question What is involved in doing mathematics when you cannot see? I hope that some of the experiences outlined here will prove insightful to mathematicians at large. At its heart, mathematics is about understanding the underlying structure inherent in a given area of interest — and where no such structure exists — to define the minimal structure that is needed to make forward progress.

The general perception that mathematics might be hard to do in an eyes-free environment probably traces itself to the common view of mathematics as a field where one performs copious calculations on paper. I'll illustrate some of the habits and abilities one evolves over time to compensate for the lack of ready access to scratch memory provided by pencil and paper when working in an eyes-free environment. In this essay, I hope to demonstrate that mathematics in its essence is something far bigger. By being bigger than calculations on paper, not being able to see rarely if ever proves an obstacle when it comes to doing mathematics; the challenges one needs to overcome are primarily centered around gaining access to mathematical material, and communicating ones insights with fellow mathematicians. Thus, a large portion of this essay focuses on solutions to the challenges inherent in mathematical communication.

Wednesday, May 16, 2007

Updates To G-Client

If you use g-client within Emacspeak to access Google Services, you might want to read G-Client Updates.

Wednesday, May 09, 2007

Web 2.0 And The Emacspeak Audio Webtop

Blogging while at WWW 2007. I attended the W3C AC meeting the first two days of the week. The highlight for me from the AC (Advisory Committee meeting was a panel consisting of TimBL and Tim OReilly at the end of the day yesterday. It was fun to hear Tim OReilly define Web-2.0 --- he is credited with originally coining the term, but in the last year, Web 2.0 has often been lightly equated to dynamic Web applications that use JavaScript to the extent that many assume that anything that doesn't use JavaScript is not Web-2.0!

The gist of Tim O's definition of Web-2.0 was to point out that once the Web had gained sufficient coverage and scale, it became possible to build application services on this Web that drew their value from aggregating the data on the Web; his examples ranged from Google to Amazon. His comments were insightful --- my own view now is that Web-2.0 should have been called Web^2 i.e. this current revolution is about applying the power of the Web to itself.

The other amusing piece while running around at the conference and observing what everyone is working on is to realize that now that Web Gadgets and the like are popular, it's now considered a fine idea to write light-weight site-specific tools. Notice that Emacspeak has had this since the late 90's in the form of first the websearch module, to be later joined by url-templates. I believe these innovations arrived earlier on the Emacspeak Webtop as compared to the rest of the Web for the following reasons:

  • Emacspeak relied on Emacs/W3 for Web functionality,and when that browser stopped being maintained, there was a strong need to develop Web tools in the context of Emacspeak.
  • The visual Web was getting too complex for use via speech output, and given the flexibility of the Emacs environment, and the arrival of XSLT in 1999, things were well set up to build a powerful set of Web access wizards.
  • Task-oriented Web tools in Emacspeak led to the conceptual Web Command Line in Emacspeak at a time when command-line interfaces were considered passe'.

Incidentally when I showed others working in the field of accessibility these Emacspeak tools during their early days, they were promptly dismissed as site-specific hacks that wouldn't scale in the face of generic screenreaders that would handle every web page. With the visual Web getting too busy for everyone mainstream users now have access to productivity solutions such as Apple's Dashboard Widgets, IGoogle modules that can be placed on a Web page or the desktop, and other comparable tools. It will be interesting to see how much longer blind users saddled with commercial screenreaders will have to wait before seeing similar tools emerge in their world --- just remember, when that does arrive, Emacspeak had them in 2000!

Thursday, May 03, 2007

Emacspeak 26.0 --- LeadDog Unleashed!

Emacspeak Inc (NASDOG: ESPK) announces the immediate world-wide availability of Emacspeak-26 --a powerful audio desktop for leveraging today's evolving data and service-oriented semantic Web.

Major Enhancements

  1. Added support for ESpeak -- a freely available TTS engine.
  2. Added support for Ocropus -- a freely available OCR engine.
  3. Updated Websearch tools.
  4. Updated URL templates to enhance the Web Command Line.
  5. Support for Google Services like Blogger via package G-Client.
  6. Updated productivity tools in the wizards package.
  7. Fully tested against the upcoming Emacs22.
  8. Better integration between W3 and W3M.

This release contains many user contributed patches including:

  • ESpeak patches from the Oralux project.
  • W3M patches from RDC.

You can visit Emacspeak at SourceForge. The latest development snapshot of Emacspeak is available via subversion from Google Code Hosting. You can subscribe to the emacspeak mailing list by sending mail to the list request address

Tuesday, March 20, 2007

See You At CSUN 2007

After a gap of 7 years, I will once again attend CSUN in LA this year. This will also be Bubbles' first CSUN --- I attended CSUN 6 years in a row with Aster between 1994 and 1999. Anyway, if you're an Emacspeak user and are coming to CSUN this year, look for me at the Google booth. This is also Google's first year at CSUN; I will be there with other Googlers working on accessibility. I arrive Wed morning and leave early Friday morning --- look forward to seeing you there.

Friday, March 02, 2007

An Emacs Client For Google Services

1 An Emacs Interface To Google Services

Google offers a number of services using a Google account. Many of these services also expose a Web API. this package provides a set of Emacs modules for accessing these services from inside Emacs. These modules are designed with an Emacs-centric, rather than a Web-browser centered view of the world. Where necessary Emacs package browse-url is used to invoke the Web browser of choice.

The current distribution can be downloaded from Google Code Hosting and the source code is available via Subversion. Note that this is still work in progress. I'm releasing it as part of the Emacspeak project since I believe the package already has sufficiently useful functionality for users who spend a large amount of their time inside Emacs. There is no dependency on Emacspeak, and all clients provided here can be used without Emacspeak loaded.

1.1 Installation

These are needed only if installing package g-client stand-alone, i.e. outside of Emacspeak.

  • Unpack the tar archive and place the resulting g-client directory on your emacs load-path.
  • Type make to compile the code.
  • In your .emacs, add (load-library "g") to set it up.

1.2 How It Works

Clients are implemented using Google APIs based on Atom Publishing Protocol APP and Google Data APIs (GData). We use curl to retrieve content via HTTPS and xsltproc to transform the retrieved content to browsable HTML.

Clients sign you in the first time you invoke commands that require authentication. Once signed in, the session cookie is cached for future use. Session cookies presently expire in 30 minutes, and clients check for expired cookies when authentication is needed. If the cookie has expired, clients retrieve a fresh cookie using the authentication credentials provided earlier. Note that authorization tokens etc are specific to a given service.

1.3 Top-level Customizations

All clients in this package use Emacs' customize interface to set user preferences. The most commonly used ones are enumerated below.

  • g-user-email Default email-id to use. Individual clients typically override this via user option <clientname>-user-email.
  • g-html-handler Name of function that handles HTML content.

1.4 Google Blogger gblogger

This client implements posting, editting and deleting of blog entries using the new Blogger API --- it replaces the now obsolete atom-blogger that implemented similar functionality using the old Blogger API. It uses value of customization option g-user-email by default; this can be overridden via option gblogger-user-email. See Blogger GData API for the underlying APIs used. For editing posts, I recommend installing nxml-mode.

  • Browse Command gblogger-blog brings up the list of blogs owned by the currently authenticated user.
  • Posting Command gblogger-new-entry takes a post URL and sets up a special buffer where you can compose your article. the post url is obtained from the feed of blogs above, use the post link for the blog to which you wish to post.
  • Browsing Command gblogger-atom-display displays the atom feed for a specified blog as a browsable HTML page. In addition to reading your blog, this helps you find the edit url for individual posts.
  • Editting Command gblogger-edit-entry takes the edit url of a previously posted entry. It retrieves the entry, and sets up a special composition buffer where you can edit the entry.
  • Submitting The special composition buffer created by commands gblogger-new-entry and gblogger-edit-entry provide a special command gblogger-publish (bound to C-c C-c) that submits the entry to blogger.
  • Deleting Command gblogger-delete-entry deletes an entry specified by its edit url.

1.5 Google Calendar gcal

This client can be used to view, add or delete events from the Google Calendar for the authenticated user. It uses value of customization option g-user-email by default; this can be overridden via option gcal-user-email. Commands that display calendar items optionally accept the feed url of the calendar to view; this can be used to view calendars to which the authenticated user has read access. See GData Calendar API for the underlying APIs used.

  • View Command gcal-calendar-agenda displays the default calendar for the authenticated user. A prefix arg prompts for the calendar to display. This command is best used from inside the Emacs calendar; in this case, it uses the date under point when showing the agenda.
  • Add Command gcal-add-event prompts for event details and adds it to the calendar.
  • Accept Command gcal-accept-event accepts an event. Event is specified using the edit url of the event.
  • Delete Command gcal-delete-event deletes an event. Event is specified using the edit url of the event.

1.6 Google Reader greader

This client allows the authenticated user to read, browse and subscribe/unsubscribe to feeds. It uses value of customization option g-user-email by default; this can be overridden via option g-user-email.

  • Reading Command greader-reading-list displays the reading list (river of news).
  • Browsing Command greader-feed-list displays a browsable Web page with pointers to subscribed feeds.
  • Finding Command greader-find-feeds searches for matching feeds to subscribe.
  • Subscribing Commands greader-subscribe-feed and greader-unsubscribe-feed are used to subscribe and unsubscribe.
  • Labeling Command greader-star and greader-add-label are used to label articles.
  • Reading Starred articles can be read by providing a prefix argument to command greader-reading-list. Thus, C-u M-x greader-reading-list will prompt for the specific set of articles to retrieve.

Author: T.V Raman <>>

Date: 2007/03/02 10:36:07

Monday, February 12, 2007

Emacspeak Downloads On GoogleCode

I've now made all Emacspeak releases available from the download area on Googlecode. Going forward, all Emacspeak releases will be made at the GoogleCode site --- not SourceForge. This is because uploading code to GoogleCode is significantly easier than making releases on SourceForge.

But even more importantly, once uploaded, grabbing a release from GoogleCode is significantly easier than on SourceForge's release mechanisms. You can always find a link to the latest releases from Emacspeak on GoogleCode by starting from the Emacspeak GoogleCode page. Follow the link labeled Featured Downloads to download the newest release. I've also made all past releases from the download area --- follow the link labeled downloads on the Emacspeak GoogleCode page.

Here is a brief summary of why I chose to start making releases on GoogleCode, it can be viewed as a short summary of the positives in making the switch.

  • GoogleCode makes it possible to create download URLs that can be bookmarked. No more clicking through multiple pages before getting to the file you want, you can simply point wget, curl or your favorite download tool at a meaningful URL. For instance, here is a pointer to Emacspeak 25 release.
  • The above is more than a convenience --- it's in line with good Web architecture. I've been looking for an alternative to SourceForge ever since that site decided to turn meaningful download URLs from the past into obfuscated pointers into their content management system; this left me with a feeling of having created Open Source Software only to have it locked away in someone else's vault with no easy mechanism for end-users to retrieve what had been released as free software.

Share And Enjoy --- and let's hope we never have download sites that say Glad to be of service as they close behind you with a sigh of a job well done.