Monday, September 21, 2009

Emacspeak, The World's Fonts And Braille

Emacspeak has supported the editing of Unicode text for over a year now --- thanks to the patches fromLukas. With the support now mature, I have now retired option emacspeak-unibyte --- Emacspeak no longer supports running Emacs in unibyte mode. Note that this aligns Emacspeak with Emacs 23.2 which obsoletes unibyte mode.

When you edit text containing Unicode characters, Emacspeak uses the name of the character as found in the description file from the Unicode consortium --- you will need to download and install that data file as documented in Emacs:

describe-char-unicodedata-file is a variable defined in `descr-text.el'.
Its value is 
"/usr/local/share/unicode/UnicodeData.txt"

Documentation:
Location of Unicode data file.
This is the UnicodeData.txt file from the Unicode Consortium, used for
diagnostics.  If it is non-nil `describe-char' will print data
looked up from it.  This facility is mostly of use to people doing
multilingual development.

This is a fairly large file, not typically present on GNU systems.
At the time of writing it is at the URL
`http://www.unicode.org/Public/UNIDATA/UnicodeData.txt'.

You can customize this variable.

This variable was introduced, or its default value was changed, in
version 22.1 of Emacs.

With the Unicode data file in place, Emacspeak can announce names of characters from all of the world's fonts --- this includes Braille. As an added convenience, I have integrated package toy-braille.el found on the Emacs wiki into the Emacs codebase and defined a new interactive command emacspeak-wizards-braille --- if you find yourself using it often, you can bind it to a key of your choice. Command emacspeak-wizards-braille prompts for the string to Braille and produces a Grade-1 representation of the specified string using the appropriate Unicode characters.

⠠⠃⠗⠁⠊⠇⠇⠑⠀⠠⠁⠝⠙⠀⠠⠑⠝⠚⠕⠽

Tuesday, September 15, 2009

Emacspeak: Google News Suggest For Faster News Search

Google News now provides search suggestions --- this feature -- --has been present in Google WebSearch for a few years. As in the case of WebSearch, Emacspeak now leverages Google News' suggest feature to provide minibuffer completion when performing news searches on Google. To try the feature, try:

  • Press C-e?n to invoke News Search.
  • Type Oba and hit TAB

Search and Enjoy

Thursday, August 27, 2009

Emacspeak Servers --- Catching Up With Debian And Ubuntu

Over the last couple of years, the TCL world has moved on from TCL8.3 to TCL8.4 --- this introduces a set of needed changes to how Emacspeak servers such as Espeak and ViaVoice-Outloud work. I have finally decided to break backward compatibility with TCL8.3 and move things forward to TCL8.4, now that all the Linux distributions have settled on TCL8.4.

Also, sometime in 2005, I transitioned all of the server Makefiles to use libtool --- at the time, it made compilation of the servers somewhat easier. However, this has tended to make things more complex over time, thanks to changes in libtool. I've now dropped the libtool dependency in favor of using simpler Makefiles --- thanks William Hubbs of Gentoo!

ViaVoice Outloud Server For Emacspeak

The Voxin package from Guilles continues to be the easiest means of obtaining high-quality text-to-speech on Linux. Installation of that package went smoothly on Hardy; however on Jaunty, things did not go so well, see notes below for things to watch out for on Jaunty or later.

  • The libstdc++ compat libraries ended up not getting installed on Jaunty. Consequence, ViaVoice produces a warning asking you to install the ViaVoice RTK, even though it's already installed. I ended up rescueing the compat libs from my Hardy build. Perhaps we should put up a simple tar.gz file that drops those libs into /usr/lib?
  • Alsa is configured to use pulseaudio on Jaunty. An unfortunate consequence is that when ViaVoice runs, it sounds like a stereo channel played as mono, i.e. the speech slows down and the voice sounds wrong. The fix is to create a .asoundrc file in your home directory --- you can use the sample in linux-outloud/ASOUNDRC as a starting point. To see if pulseaudio is intervening in your setup, do :aplay -v wav file --- to see the set of alsa plugins that are participating in audio output.

ESpeak And Emacspeak

The ESpeak server does not get affected by the above problem. However, unless you install package alsa-oss and invoke that server as :aoss tcl espeak the server will fail to start if some other application is using the audio device.

Software Dectalk And Emacspeak

This still needs testing under newer Linux distributions --- I've not used it in a long time and dont have the libs installed any more.

Monday, June 29, 2009

Launching Favorite Media Via Hot Keys

Launching Oft-Played Media On The Complete Audio Desktop

Command emacspeak-multimedia lets you launch all forms of local and remote media. However this stil requires you to specify the media location --- and this requires a bunch of keystrokes that you end up repeating for selecting media that you play often, e.g., from your private music collection. No more extra keystrokes, you can now have Emacspeak automatically assign suitable hotkeys for launching emacspeak-media on your favorite audio collections.

How It Works

  • Customize Emacspeak option emacspeak-media-location-bindings using Emacs' Custom interface:
    M-x customize-variable --- 
    
    press C-H V in emacspeak.
  • Click ins to insert a key/location pair.
  • Click save to persist the binding.
  • pressing the assigned hotkey will automatically launch emacspeak-multimedia on the predefined location --- emacs will prompt you with regular filename completion for media resources found in that directory.

In my own case, I have favorites defined on hyper-<n> so I can define upto 10 hotkey assignments for media locations.Once launched, Emacspeak automatically switches to the media player buffer; note that this is different from how emacspeak-multimedia normally works. The justification: this hotkey interface is ideally suited to remote controls, joysticks, and any other peripheral via which you can deliver input to Emacs.

Friday, May 22, 2009

Looking Beyond The Screen At Google I/O2009

Come join me and Charles Chen at Google I/O2009 at our session on Looking Beyond The Screen (YouTube Preview where we will describe some of our work on eyes-free interaction on Android. We'll be around during most of Google I/O, so if you are interested in eyes-free interaction ranging from Emacspeak to Fire-Vox, or anything else eyes-free, feel free to grab us in the hallways. Looking forward to seeing you there!

Abstract: Looking Beyond The Screen

Looking Beyond The Screen

Project Eyes-Free aims to enable fluent eyes-free use of mobile devices running Android. Target uses range from eyes-busy environments like in-car use to users who are unwilling to or incapable of looking at the visual display --- see For The Blind, Technology Does What A Guide Dog Can't, NYTimes, January 4, 2009, for a high-level overview. As described in that article, we are releasing components from project Eyes-Free as they become ready for end-user deployment. This announcement marks the first public release of the eyes-free shell on the Android Marketplace, though the underlying source code has been available for some time from the code repository at Google Code Hosting.

Here is a brief overview of the end-user affordances provided in this release:

  1. An Eyes-Free Shell for conveniently launching talking applications.
  2. A collection of useful talking applications that turn an Android phone into an eyes-free communication device --- see subsequent sections for an overview of these applications. Note that thes eapplications have been written to be both useful to end-users as well as to help the developper community to come up to speed with developing eyes-free applications for Android.

We will be uploading video tutorials demonstrating the use of these applications to YouTube --- please see the project Web site for these links as they become available.

Talking Dialer

A key innovation is the use of the touch screen to enable one-handed, eyes-free dialing of phone numbers using the touch screen --- see Miguel Helft's NY Times article cited above for a good layman's description of the technique. The talking dialer comes with a talking phone-book that enables users to quickly select a desired contact using the touch screen.

Knowing Your Location

This mini-application announces your present location based on information acquired via GPS and the cell network. It speaks your current heading using the built-in magnetic compass, looks up the current location on Google Maps, and announces the location in terms of a nearby address and street intersection.

Device State

This mini-application announces useful information such as battery state, signal strength, and availability of WiFi networks.

Date And Time

This mini-application provides single-touch access to current date and time.

Monday, May 11, 2009

Announcing emacspeak 30.0 --- SocialDog!

Emacspeak-30.0 (SocialDog) Unleashed!

For Immediate Release

San Jose, CA, (May 11, 2009)
Emacspeak: --- Bringing friendly Access For social beings
--Zero cost of upgrade/downgrades makes priceless software affordable!

Downloads Reference Installation Usage Tips Tools Support
EMACSPEAK Logo
About the author SourceForge

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

Investors Note

With several prominent analysts initiating coverage, NASDOG: ESPK continues to trade over the net at levels close to that once attained by the DogCom high-fliers of yester-years and as of October 2008 is trading at levels close to that achieved by better known stocks in the tech sector.

What Is It?

Emacspeak is a fully functional audio desktop that provides complete eyes-free access to all major 32 and 64 bit operating environments. By seamlessly blending all aspects of the Internet such as Web-surfing and electronic messaging into the audio desktop, Emacspeak enables speech access to local and remote information with a consistent and well-integrated user interface. A rich suite of task-oriented tools provides efficient speech-enabled access to the evolving service-oriented Web cloud.

Major Enhancements

  1. Speech-enables Twitter.
  2. Unicode support for enabling the world's various charsets.
  3. Emacs front-end to popular Google AJAX APIs.
  4. Updated g-client with preliminary support for Google Docs.
  5. Updated URL Templates for rapid Web access.
  6. Updated WebSearch wizards for enhanced productivity.
  7. Emacs 23 support.

See the NEWS file for additional details.

Thursday, March 26, 2009

Toward an Accessible Democracy --- White House Moderator AxsJAXed

Toward An Accessible Democracy --- White House Moderator AxsJAXed!

This is not directly Emacspeak related --- except that it is useful for emacspeak users. Project AxsJAX, combined with Fire-Vox does for Web-2.0 applications what Emacspeak does for applications written within Emacs. Charles and I just announced AxsJAX For White House Moderator --- an AxsJAX extension that applies W3C ARIA to the White House Moderator.I'll append the article below:

An ARIA For The White House Moderator

Google-AxsJAX was launched in late 2007 as a library for access-enabling Web-2.0 applications. Since then, we have released accessibility enhancements for many Web-2.0 applications via the AxsJAX site as early experiments that have eventually graduated into the products being extended. Today, we are happy to announce an early AxsJAX extension for Google Moderator that enables fluent eyes-free use of Google Moderator as seen on the White House site.

HowTo: Brief Overview.

For details on installing and using AxsJAX extensions, see the AxsJAX FAQ. Briefly, you need Firefox 3.0 and a screenreader that supports W3C ARIA. Users who do not have a screenreader installed can most easily experience the results by installing Fire Vox, a freely available self-voicing extension for Firefox.

With the AxsJAX extension in place, you can use Google Moderator via the keyboard, with all user interaction producing spoken feedback via W3C ARIA. Here is a brief overview of the user experience:

  1. The user interface is divided into logical panes --- one listing topic areas, and the other listing questions in a given topic. At times, e.g., before a meeting, you may find an additional Featured Question pane that shows a randomly selected question that you can vote on.
  2. Users can ask new questions under a given topic, or give a thumbs-up/down to questions that have already been asked.
  3. Use the left and right arrow keys to switch between the two panes. You hear the title of the selected pane as you switch.
  4. Use up and down arrows to navigate among the items in the selected pane. As you navigate, you hear the current item.
  5. Hit enter to select the current item.
  6. The current item can be magnified by repeated presses of the + (or =) key. To reduce magnification, press the - key.
  7. When navigating the questions in a given topic, hit y or n to vote a question up or down.
  8. When navigating items in the topic pane, hit a to ask a question. Once you confirm your request to post the question, it will show up in the list of questions for that topic so that others can vote that question up or down.

Please use Google Group Accessible for providing feedback on this AxsJAX extension.

Share And Enjoy--

Raman and Charles.

Wednesday, November 26, 2008

Announcing Emacspeak 29.0 (AbleDog)

Downloads Reference Installation Usage Tips Tools Support
EMACSPEAK Logo
About the author SourceForge

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

Investors Note

With several prominent analysts initiating coverage, NASDOG: ESPK continues to trade over the net at levels close to that once attained by the DogCom high-fliers of yester-years and as of October 2008 is trading at levels close to that achieved by better known stocks in the tech sector.

Major Enhancements

  1. Speech-enables proced --- a new task manager.
  2. Emacspeak-Webspace for rapid access to content feeds.
  3. Unicode support for enabling the world's various charsets.
  4. Emacs front-end to popular Google AJAX APIs.
  5. Updated g-client with preliminary support for Google Docs.
  6. Updated URL Templates for rapid Web access.
  7. Updated WebSearch wizards for enhanced productivity.
  8. One-shot Google Search with suggestions for word under point.
  9. Emacs 23 support.

See the NEWS file for additional details.

Harnessing Emacspeak

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 emacspeak@cs.vassar.edu by sending mail to the list request address emacspeak-request@cs.vassar.edu.

Press/Analyst Contact: Hubbell Labrador
Going forward, BubbleDog acknowledges her exclusive monopoly on setting the direction the the Emacspeak Audio desktop, and promises to exercise this freedom to innovate and her resulting power responsibly (as before) in the interest of all dogs.

Emacspeak-28.0

Tuesday, September 09, 2008

Emacspeak Webspace Goodies

Module emacspeak-webspace has a few new goodies on offer. If you activate WebSpace Headlines to obtain a continuously updating ticker of headlines, you may also at times want to find one of the headlines you heard go by and read the relevant article. Command emacspeak-webspace-headlines-view bound by default to C-RET pops up a special Headlines buffer that lists all the currently available headlines. This is a regular Emacs buffer that uses a special major mode called emacspeak-webspace-mode. This mode provides special commands to open a feed at point, follow hyperlinks etc.; use Emacs' online help facilities to learn how this buffer works.

Mode emacspeak-webspace-mode is also used to advantage in browsing information retrieved via the Google AJAX APIs described in the previous set of articles on this blog. Google Reader subscribers can now view the subscription list in a Webspace buffer via command emacspeak-webspace-reader. Additionally, command emacspeak-webspace-google provides a more convenient interface to command gweb-google-at-point --- in addition to speaking the snippet from the first search hit, this command places the first four results in a special Search Results buffer that is put in Webspace mode.

Search And Enjoy!

Wednesday, August 20, 2008

Emacspeak-WebSpace Just Got A Lot Faster

In Praise Of Google AJAX APIS

New module gfeeds.el (part of Library g-client) now implements a Lisp interface to the Google AJAX FeedSearch API. An immediate consequence of this is that module Emacspeak-WebSpace just got orders of magnitude faster --- not that it was slow to start with:-)

Feed And Enjoy!

Thursday, August 14, 2008

In Praise Of The Google Search AJAX API

In Praise Of The Google AJAX Search API

Emacspeak has always provided Google Search with a single keystroke from anywhere on the audio desktop. But with the coming of the Google AJAX Search API it becomes possible to integrate Google Search at a far deeper level into your fingertips! The AJAX API demonstrates the true speed of Google Search, since you dont need to wait for an HTML page to download and render --- results are served as a light-weight JSON data structure.

What You Can Now Do

Module gsearch (part of the g-client package) provides an interactive command gsearch-google-at-point --- I have this bound to key hyper-/ in Emacs. Executing this command from anywhere inside Emacs does the following:

  • Grabs word under point, and prompts in the minibuffer for a search-term --- with the word we just grabbed as the default.
  • Fetches other relevant search terms in the background via Google Suggest, and makes these available via Emacs' minibuffer history mechanism. Use keys M-n and M-p to cycle through these if needed.
  • Hitting ENTER performs a Google Search using the AJAX API, and displays the title and content snippet for the first search result.
  • Executing command gsearch-google-at-point subsequently at the same location opens the first search result.

Search And Enjoy!

Friday, August 01, 2008

Tutorial: Enhancing Web 2.0 Usability Using AxsJAX

You can watch a video of the tutorial Charles and I gave as part of the Google Open Source series on July 14. Emacspeak users can play the video by pressing e e on the above link and specifying emacspeak-m-player-youtube-player when prompted.

Abstract

Google is the Web's premier creator of user-friendly Web 2.0 applications, and I have long viewed it as part of our mission to do for users in the long tail (AKA users with special needs) what we've achieved for the mainstream user. Accessibility 2.0 is now a hot topic on the Web --- and we would like to move from a world where AJAX applications were a straight No-No with respect to blind users to a world where these same technologies are used to enhance their usability for everyone.

Google-AxsJAX is an Open Source framework for injecting accessibility for users with special needs --- and more generally, usability enhancements --- into Web 2.0 applications. In this TechTalk, Charles Chen and I give a hands-on tutorial on using AxsJAX to enhance the usability of Web 2.0 applications. The tutorial covers the following:

  • A brief introduction to the additional opcodes introduced by W3C ARIA to the assembly language of the Web (AKA HTML+JavaScript).
  • AxsJAX library abstractions built on the above that help Web developers generate relevant feedback via the user's adaptive technology of choice.
  • Steps in creating fluent eyes-free interaction to Web applications, including enabling rapid access to parts of a complex Web page.

This tutorial focuses on solutions we've already built and deployed both within shipping products and as early end-user experiments. Google products that we will cover include:

  • Google WebSearch
  • Google Reader
  • Google Books
  • GMail and Google Talk
  • Google Scholar
  • Google Sky

And time permitting, we might even demonstrate how I now make up for all the time I save thanks to an efficient eyes-free auditory user interface by playing JawBreaker and reading XKCD via their AxsJAXed versions.

Note that writing AxsJAX enhancements to Web applications can help you win bragging rights and cool swag! The goal of this hands-on tutorial is to help you get there faster!

Monday, July 14, 2008

Talk Announcement: Developing Accessible Web-2.0 Applications

For those of you in Silicon Valley, Charles Chen and I will be giving a talk on developing accessible Web 2.0 applications as part of the Google Open Source Series --- see details below. This will be a hands-on tutorial on ARIA-enhancing Web 2.0 applications using Google AxsJAX, and is a follow-up to the talk given at Google I/O . A video of this talk will be posted later on the Web.

Open Source Developers @ Google Speaker Series: Charles Chen & T.V. Raman

Want to learn more about creating accessible Web 2.0 applications from the creators of Fire Vox and Emacspeak ? If you are nearby Google's Mountain View, California, USA Headquarters on Monday, July 14th, please join us for Charles Chen and T.V. Raman's presentation Enhancing Web 2.0 Accessibility via AxsJAX. They will take you through a hands on tutorial on Google-AxsJax , an Open Source framework for injecting usability enhancements into Web 2.0 applications. Among other topics, Charles and T.V. will cover an overview of AxsJAX's developer tools, enabling eyes-free interaction for web applications and iterative design processes for accessibility improvements. They will also let you know the secret to getting a cool t-shirt with the Google logo printed in Braille.

Like all sessions of the Open Source Developers @ Google Speaker Series, this session will be open to the public. Doors open at 6:30 PM and light refreshments will be served. All are welcome and encouraged to attend; guests should plan to sign in at Building 43 reception upon arrival. For those of you who cannot join us in person, the presentation will be taped and published along with all public Google Tech Talks.

Thursday, July 03, 2008

ProcEd: A Speech-Enabled Task Manager For Emacs

For the last 10 years or so, view-process-mode has been my task manager of choice for monitoring and controlling the state of processes on the Emacspeak audio desktop. As of Emacs 23, AKA Emacs from CVS, that module does not work anymore --- in fact it has not been updated for several years. On the positive side, Emacs now bundles module ProcEd --- a task manager that does for processes what module DirEd does for files and directories. As of this morning, proced.el is fully speech-enabled by Emacspeak. You can install module ProcEd for Emacs 22 by obtaining the file from the Web --- you can easily find it via Google.

Share And Enjoy ... And have a great July 4th Holiday!

Thursday, June 12, 2008

Leveraging Web 2.0 Design Patterns For Enhanced Accessibility

As promised, here is a link to the Youtube video of the talk on Leveraging Web 2.0 Patterns For Accessibility given during Google I/O on May 28, 2008 in San Francisco. Emacspeak users can play the video by hitting e e on the link, and specifying emacspeak-m-player-youtube-player when prompted. You can find the downloadable slides used during the talk along with other session material on the Google I/O page for this session.

Talk Details

Leveraging Web 2.0 Design Patterns For Enhanced Accessibility T. V. Raman (Google)

HTML DOM+ JavaScript constitutes the assembly language of Web Applications. Access To Rich Internet Applications --- ARIA --- adds in a couple of additional op-codes for helping Web applications better communicate with adaptive technologies such as screenreaders. How do we now push the envelope with respect to Web applications and adaptive technologies such as screenreaders and self-voicing browsers in a manner similar to what we as Web developers have collectively achieved for the mainstream user? This session will demonstrate programming techniques that help Web developers experiment with and build in the latest accessibility techniques into their Web applications. We will base this session on project Google-AxsJAX. Developers should know JavaScript, but session doesn't require deep AJAX hackery.

Wednesday, May 28, 2008

AxsJAX And Auditory User Interfaces At Google IO

For those of you interested in Auditory User Interfaces and attending Google IO 2008 in San Francisco today, I'll be giving a talk on AxsJAX and Auditory User Interfaces, and be around the rest of the two days to talk about Google's work on access-enabling Web-2.0 applications. Look forward to seeing you there!

Friday, May 16, 2008

Emacspeak On Thinkpad X-61 Running Gutsy (Ubuntu 7.0)

I recently upgraded to a Thinkpad X-61 running Gutsy --- here are some brief notes on the move. In summary, all is well, and I like Gutsy running on the X-61.

Here are things to be aware of both from a hardware and software perspective. All of this is with X and GNOME turned off; note that some of the tips e.g. turning off the display as described here, will cause havoc with X.

  • The X-61 display can be turned off using vbetool
    vbetool dpms off

    for turning off the display, and
    vbetool dpms on

    for turning it back on again.
  • If you suspend to memory etc., make sure to add the appropriate vbetool command to the relevant script in /etc/acpi/resume.d.
  • Gutsy is running ALSA 1.0.15, and to date, I've not had any trouble with the ViaVoice Outloud TTS engine in this environment. Make sure to play with amixer --specifically run command
    amixer controls

    to understand all the various switches and controls exposed by the audio hardware on the X61. Here are some of the things that were noticeably different that are worth mentioning:
    1. The PC speaker can now be manipulated via ALSA.
    2. The X-61 has two input sources. If you plug in an external mike, make sure to set both input sources to the microphone --- as opposed to leaving one or both of them to be either internal mic or mix. Specifically, plugging in an external mike does not disable the internal microphone.
    3. For some bizarre reason, it's possible to turn off the headphone output--- but you cannot control its gain.
  • Kernels later than 2.6.21 do much better with respect to power management, and this really shows on the X-61. With the LCD off, my X61 claims it'll run for 7.5 hours; if you turn off the wireless and USB1.1 as well, it claims it can go for over 8.5 hours.
  • Emacs versions: I'm running out of CVS AKA Emacs 23--- but the emacs-snapshot or emacs22 Ubuntu packages appear to mostly work as well. One irritation with some of the prepackaged bundles of Emacs under Ubuntu is that they dont install the Emacs Lisp sources, and this will bite if you try compiling packages like Emacs/W3.

All in all, the upgrade to Gutsy was mostly painless --- other than having to figure out the usual nits about the new hardware. The /proc/acpi/ibm support is further along but not yet complete--- as an example /proc/acpi/ibm/video does not yet control the state of the LCD --- and you cannot query the state of the display reliably through that interface.

Thursday, May 15, 2008

Emacspeak-28.0 (PuppyDog) Unleashed!

Emacspeak-28.0 (PuppyDog) Unleashed!

For Immediate Release

San Jose, CA, (May. 16, 2007)
Emacspeak: --- Bringing Cutting-Edge Access For Keen Users
--Zero cost of upgrade/downgrades makes priceless software affordable!

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.

Emacspeak can be downloaded from Google Code Hosting --see GoogleCode You can visit Emacspeak on the WWW at http://emacspeak.sf.net. You can subscribe to the emacspeak mailing list emacspeak@cs.vassar.edu by sending mail to the list request address emacspeak-request@cs.vassar.edu. The PuppyDog release is here. The latest development snapshot of Emacspeak is available via Subversion from Google Code Hosting at http://emacspeak.googlecode.com/svn/trunk/

Saturday, April 12, 2008

W4A Keynote: Cloud Computing And Equal Access For All

I'll be giving the opening keynote at the upcoming W4A 2008 conference in Beijing on April 21. You can find an online version of the paper along with the slides here: Cloud Computing And Equal Access For All. Coincidentally, another excellent Web 2.0 accessibility event is happening on the same day in London --- see Accessibility 2.0 --- it's unfortunate one cannot be in multiple places at opposite corners of the globe at the same time!

Tuesday, April 01, 2008

Emacspeak Goes Social

Leveraging The Benefits Of Free Speech!

For Immediate Release:
April 1, 2008

Live From San Jose ... Emacspeak Goes Social!

Investors and users alike welcomed today's announcement that Emacspeak (NASDOG:ESPK) would be going social --- Going Social is better than Going Postal!

As a pioneer in the space of eyes-free information access, and a firm believer in free speech and free software, Emacspeak will now help users go social speech-free --- all users need do is to use the system. When in use, the free-social features of Emacspeak will talk to others on your behalf, answer inane questions, and contribute to the community by in its turn asking even more inane questions of everyone else. In a repeat of the network effect that has led to the resounding success of systems like the World Wide Web and The Blogosphere, these viral features in Emacspeak are expected to win ones running instance many social connections. The longer one uses these features, the deeper one's social graph --- going forward, the information encapsulated in these social graphs will be converted to ever-increasing stacks of small pieces of green paper.

Coming Soon!

As these features are launched over the next few weeks, expect Emacspeak generated conversation streams to show up everywhere ranging from Twitter streams to random email messages that you can usefully use to forward to spammers. This innovative approach to communication finally adds value to spam --- and is being hailed as the next biggest business model to hit the ether. By making such content available on the Internet, the system will foster the long term human goal of organizing and searching all the world's ignorance to make it universally accessible --- thereby bringing ignorance on par with knowledge!

Friday, March 28, 2008

My Web-2.0 Application Is Feeling Accessible

If you feel up to Web hackery and want to win a cool T-shirt in the bargain, see My Web-2.0 Application Is Feeling Accessible!. You can see examples of what you can achieve with this framework in the AxsJAX showcase.

Thursday, March 06, 2008

Emacspeak WebSpace --- Interaction-Free Information Access

A few months ago, I started an Emacspeak module called emacspeak-webspace that is now ready for wider use. The goal of this module is to unobtrusively fetch useful information from the Web and communicate it at those times that one is context-switching among tasks. I gave a talk on user interaction at the last Hackers Conference in November; in the same session, there was another talk whose gist was a plea for less human-computer interaction --- motivation: User Interfaces are nice, but wouldn't it be nice if one didn't have to explicitly interact with the machine to get information? The speaker coined the term Zen interfaces in that context, something that stuck in memory long after the talk.

I built that thought into module emacspeak-webspace. Conceptually, it consists of smart fetchers that fetch information asynchronously from the Web, and smart displayers that communicate this information at appropriate times. These are detailed below.

Fetchers

There are two fetchers at present:

Weather
Fetches current weather conditions for your location.
News
Fetches headlines from a customizable collection of ATOM and RSS feeds.

Note that this module is not intended to be an RSS or ATOM feed-reader; for that, use module greader --- an API-based Google Reader client that is bundled with Emacspeak.

Communicating Useful Information Usefully

With the information in hand, the next question is how does one communicate this information usefully, and what does at the appropriate time mean? Things to avoid:

Interaction-Free
Do not require explicit user action to hear the information.
Avoid Chatter
Avoid creating an auditory user interface that chatters at the user all the time.

These are conflicting constraints. Notice that in a visual interface, one can meet the interaction-free requirement by displaying the information in a toolbar or sidebar and allow the user to ignore or absorb the information at will.

Emacspeak uses Emacs' header-line to display the continuously updating information. This meets the interaction-free requirement. The header line updates every time Emacs updates its display, and automatically speaking it would produce too much feedback. But Emacspeak doesn't automatically speak the header-line; it only speaks it when there is a context-switch.

How To Use

Here is how I am using emacspeak-webspace at present:

Weather
Activate weather display in the calendar and scratch buffers.
News
Activate feed headlines in selected shell buffers.

You hear the updated information when switching to buffers where the webspace display is active.

Activating WebSpace Displays

Webspace displays are activated via the following commands; all Webspace displays will be placed by default on prefix key hyper-space

  • emacspeak-webspace-headlines: hyper-space h
  • emacspeak-webspace-weather hyper-space w

Share And Enjoy, And May The Source Be With You!

Thursday, January 03, 2008

Announcing: The Coming Of Piglets To The Emacspeak Desktop

This is to announce a new emacspeak module called Piglets that brings together Emacs and Firefox to create a powerful framework for authoring Web interaction wizards.

Why Piglets?

You might well ask Why Piglets?, and might conjecture that PIGLETS might stand for Powerful Internet Gadgets for a Light-Weight Talking System. You might conjecture that the Emacspeak mascot likes pig-ears; or you might even think of attributing it to the fact that my friend and colleague Charles Chen and creator of Fire Vox was born in the year of the pig. But you'd be mostly wrong in all of the above.

Piglets on the Emacspeak desktop are the result of having two large (and powerful) software pigs connect over a socket. A few months ago, I blogged here about MozREPL and how it allows me to Put The Fox In A Box. Piglets mark the completion of the Emacs/Firefox integration that started with Firebox. Once you install Fire Vox, the free self-voicing extension for Firefox, piglets become a versatile means to leverage the self-voicing Fire-Vox/Firefox DOM from the comfort of the emacspeak environment.

What You Need

Caveat: ALL of this is early experimental software --- and you'll need to tweak things for your environment to get things working.

  • A version of Emacspeak from the subversion repository.
  • Check the installation of the servers/python files in your Emacspeak installation.
  • Confirm that the HTTP wrapper for the TTS servers works. You can most easily do this by running:
    # Start the HTTPspeech server 
    # from emacspeak/servers/python
    python HTTPSpeaker.py  outloud 2222 &
    # you can replace outloud with dtk-exp
    # but the bindings to other TTS  servers is not defined for now
    # Run wget to test the speech server:
    wget --post-data='speak:hello world' localhost:2222
    
    If all is well, you should here the TTS engine say Hello World

    Do not proceed if the above does not work.

  • Install Fire-Vox and configure it to use the Emacspeak TTS server. You can do this with ORCA providing the feedback. Alternatively, once you have installed Fire-Vox, shutdown Firefox and then edit your ~/.mozilla/firefox/default/prefs.js
    user_pref("firevox.LastWorkingTTS", 4);
    
  • The above sets up Fire-Vox to use the running HTTP speech server you started earlier.

Loading And Running Piglets

The Piglets framework is implemented in module emacspeak-piglets.el. There is a Fire-Vox binding in module emacspeak-firevox.el and a binding to the JawBreaker game in emacspeak-jawbreaker.el.

How Does It Work?

When you get the various pieces configured and working, here is how things work:

  • Piglets place you in a special interaction buffer in Emacs.
  • Typing keys in this buffer go to Firefox.
  • Control keys send commands to Firefox using MozREPL.
  • The latter is most useful in conjunction with Web 2.0 applications that have been AxsJAXed.
  • Additional commands give access to FireFox features such as the URL bar. As an example, hit C-w and type the phrase you'd like to go into the address bar --- either a URL or a search term. As an example, try typing XKCDComic. This will automatically do a Google Lucky Search (thanks to FireFox magic) and open the XKCD site.
  • But wait, there's more! Because XKCD has been AxsJAXed, you will hear Fire-Vox automatically speak the comic strip and its associated transcript. Hit ? in the FireFox interaction buffer to hear the available keystrokes for this AxsJAXed application; in general, ? brings up keyboard help for AxsJAXed applications.

ToDos:

These are some todos that I plan to get to eventually --- if you have coding cycles to contribute, feel free to work on these.

  • Create an HTTP binding to the TTS servers using TCL and the TCL HTTP libraries. This will eliminate the dependency on the Python wrapper I originally wrote for ORCA in fall 2005.
  • Write more Piglets.
  • Make installation and configuration simpler.
  • Test installation and configuration of the various pieces.

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
EMACSPEAK Logo
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.

ActionKeyEffect
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.
Location
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.
Forecast
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.
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.

Abstract

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 emacspeak@cs.vassar.edu by sending mail to the list request address emacspeak-request@cs.vassar.edu.

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 <raman@cs.cornell.edu>>

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