Small updates to Javascript speed reading app

Just a note concerning two small new features I added to my Javascript speed reading (RSVP) app:

  • You can now change the speed using your keyboard’s up/down arrows keys
  • Text and background colors may now be selected using a color picker (based on JsColor)

These were features some users asked for either on the blog or in the comment form in the app. Thanks for the feedback!

Speed reading and my RSVP web application

A few days ago I published a JavaScript-based web program, which takes a text as input and flashes groups of words successively. It’s inspired by many other similar programs available on the Web, some free, some not. The technique is called RSVP, for Rapid Serial Visual Presentation. I baptized the program “Faster!” (well, I had to pick a name :) )

<br />
A screenshot of Faster!

Go ahead and try it out. Nothing to download, just click “Play that text”.

In the rest of the post I elaborate on similar software and the effectiveness of speed reading in general.

Comparing it to other available software

One (free & open source) program which has similar features, but more options for rhythm, is Dictator. You must download it though. I created my script to have something approaching that functionality, but available through the web and easy to modify for people who know JavaScript (and, *hrm*, because it made a cute little programming project :P )


Screenshot of Dictator

Other Web versions (see Spreeder and ZAPReader) are nice but lack some features which make Dictator and commercial programs more appealing, notably following the position in the text. Spreeder does have some more advanced rhythm options, though.

There are many commercial programs which offer even more features, such as integration with Office programs. Instead of trying to list them all here, I’ll point you to this comparison table of free and commercial RSVP programs.

I also want to make my version available for integration in other sites (say, for readers to read your blog posts), but I’m waiting for a few interested webmasters to contact me before I take the time to do it.

Why would one use RSVP? and the reality of speed reading

As mentioned briefly in my last post, some people believe this can help increase your reading speed. The idea is to gradually increase the reading speed, the number of words you read in a group, etc. by tweaking parameters in the software as you progress.

Recently, RSVP was also proposed as an alternative way to read on small displays such as cellphones. Some people seem to actually see RSVP as an alternative reading technique rather than simply a way to increase your “normal reading” speed.

My personal experience with the speed reading aspect is that in can indeed help you learn to focus more and reread back less of the text you read a line before. Also, it forces you to decrease subvocalization — hear the text in your head, or even whisper it. I personally never ended the in-head habit completely, though. Phrasal blurbs seem to overlap rather than disappear, if you will.

All these improvements translate in an increased reading speed for some material. They’re basic goals of “classic” speed reading techniques. A good reference for these techniques can be found at Wikibooks.

Speed reading software also has critics; see the bottom of the Wikibooks page.

Types of reading material

If you’re reading some advanced math textbook, taking the time to understand what you’re reading, sentence by sentence, naturally decreases your reading speed. Basically, speed reading is definitely no panacea for Will Hunting your way through a textbook every 30 minutes.

Where it can really help, though, in my experience (and as said by others), is when reading familiar material, say when reading the daily news or reading multiple opinion pieces on a given event.

Speed reading is to be combined with, but not confused with, skimming. Skimming is about not reading at all some parts. Speed reading is about reading faster the whole thing.


If any of you has comments on my application, bugs or suggestions, don’t hesitate to write to me.

Small speed reading JavaScript app

This is a work in progress, but I’ve developped a small speed reading application in JavaScript. It’s definitely not the first of its kind, but I wanted web version with more options. I’m also planning to open source it, and I’ve yet to see an open source web app of this kind.

The app: http://www.fsavard.com/code/speedread/

You simply click “Play that text” and you should grasp the principle real quick.

This is thought by some to increase your reading speed if used consistently. It teaches to not go back while reading, not “subvocalize” (ie. hear the words in your head, or even whisper them as you read) and by displaying more than one word at a time, to read more in one glance.

If you like it and want to come back to it, there’s a bookmarklet in the “About & download” tab that will allow you to select text in any web page and use it as input. Or you can simply copy & paste the text in the text area.

I’ll post something more lengthy on speed reading at some point.

Firefox: creating a shortcut to ScrapBook highlight operations with the Keyconfig extension

Summary: ScrapBook is a Firefox extension that allows one to save snippets from web pages locally, and to add notes and highlights to them. I wanted shortcuts to access the highlighting features. Using the Keyconfig extension, which allows you to create new keyboard shortcuts, I associated 4 keyboard commands to the 4 available highlight styles.

The bare steps

(The following, of course, assumes having the ScrapBook extension installed.)

1. I installed the Keyconfig extension and restarted Firefox. It’s available here, just click on keyconfig.xpi.

2. In Tools > Keyconfig, I first selected the “Keyconfig” option in the dropdown list at the top of the window.

3. For each highlight operation (there are 4 possible styles), I created a new key with the titles you may see in the screenshot (“scrapbook highlight 1″). The code associated with each is:

    sbPageEditor.highlight(1)

and I replaced “1″ by 2, 3 and 4 for the other operations. Also, I checked the “global” checkbox a the top of the “key editor” window.

4. After having defined that operation, I assigned it a keyboard shortcut , trying not to conflict with existing shortcuts for other operations.

5. I also configured two other operations which I find useful, “save” and “undo”, which are associated with the code

    sbPageEditor.saveOrCapture()

and

    sbPageEditor.undo()

respectively.

The underlying explanations

The “hard part” part (well, the non-obvious part) here was to find the code to activate the highlighting operations. That may be interesting to you if you want to repeat the process for other operations, perhaps in other extensions. There are many ways to go about doing this, one involving the DOM inspector in Firefox which is faster than the one I used. Mine involves exploring the extension source code, which I find instructive.

Firefox has a very extensible architecture. One key ingredient in this extensibility is XUL, the language used to describe components in the user interface. It’s real simple to grasp the basic principles, especially if you know HTML and JavaScript. Basically, extensions are programmed in XUL and JavaScript.

Firefox extensions may usually be found in your user directory (under Linux, by default, it’s in .mozilla/firefox/…/extensions, in your home directory). Their source code is right there for you to look at. Each extension is in its own directory, usually named with easy-to-remember strings like “{53A03D43-5363-4669-8190-99061B2DEBA5}” (here the Scrapbook extension directory name).

The code for ScrapBook is in there, in a JAR file (chrome/scrapbook.jar), which is just another extension for a Zip file, so you may open it and uncompress it with an unzipping utility. The file that interests us here is in this JAR file; it’s content/scrapbook/overlay.xul. This is the file that describes the way ScrapBook attaches itself to the main Firefox window, I believe.

Amongst other elements described in overlay.xul, you’ll find the toolbar which displays the highlight buttons (and “undo”/”save”). To find the line, search for “ScrapBookHighlighter”. The code for the operations is in the “oncommand” attribute.

To find the line and file of interest, which might seem non trivial given the number of files in there, I used a global search on files for the term “highlighter”.

Using xsel, xbindkeys and xmacro to insert common strings (date, name, etc.) in Linux

Goal: insert a date string (e.g. “2008/06/29″) in almost whatever text area/graphical program I’m using currently with a single keyboard shortcut.

Basic principle: copy the date string to the clipboard and emulate the Ctrl-V key combination, which activates the Paste operation in most programs.

Limitations:

  • The current program must support Ctrl-V as the Paste shortcut (won’t work on the command line, for example).
  • The current clipboard data is erased, replaced by the string inserted.

The bare steps I took

I’m using Ubuntu, but I guess this should work with most distributions, by adapting the installation instructions.

1. I installed the necessary utilities.

    sudo apt-get install xsel xbindkeys xbindkeys-config xmacro

2. I created a default xbindkeys configuration file.

    xbindkeys --defaults > ~/.xbindkeysrc

3. I wrote this shell script, which I saved on my local disk.

4. I configured xbindkeys using xbindkeys-config to launch the script when the Windows-D shortcut is pressed.

a. I loaded “xbindkeys-config” by typing that on the command line.

b. I created a new shortcut and associated it with the script.

c. I associated it with the Windows-D shortcut by pressing “Get Key” and then pressing Windows-D.

d. I saved and exited.

e. I arranged it so the “xbindkeys” command would run on every logon, which can be done by adding the line “xbindkeys” to a logon script (/home/…/.bash_profile, for example).

The underlying explanations

I often find it useful to insert the date in personal notes I take. So often, in fact, that it’s quite handy to automate the insertion. On Windows, there’s this handy app and scripting language called AutoIT which may be used to automate common tasks. But under Linux, quick googling doesn’t reveal any self-evident choice for an all-encompassing scripting language, so I went looking into more application-specific options.

The first key element to my solution, xsel, is a program that allows one to control the X selection and clipboard from the command line. The second utility, xbindkeys (and its configuration GUI, xbindkeys-config), as you guessed, allows you to associate keyboard shortcuts to commands. Finally, xmacro is a program that allows you to emulate specific keyboard key events, like key presses, and mouse events.

I therefore associated (using xbindkeys) a keyboard shortcut to a script that copies the date string to the clipboard (using xsel) and emulates the Paste keyboard shortcut (using xmacro). That’s a pretty complicated solution, but all in all it didn’t take so much time to set up. I commented the script so you may get a better understanding of the parameters used.

I could have used other shortcuts that Windows-D, but the Windows key isn’t used under Ubuntu, so this was a great occasion to capitalize on keyboard real estate.

As an alternative approach, which doesn’t replace the clipboard data, you can use xmacro to insert every single character in the date string, one at a time. I began by doing this, since it’s much simpler. The problem I ran into is instability: some programs need a delay between keypresses, otherwise they mix up the letters, and the insertion seems slow and sometimes misses letters. That limitation prompted me to try this solution.

If anyone has a suggestion as to how to improve this solution, feel free to post a comment about it.

Further reading and references