RSVP = Really Fast Reading

March 8th, 2014 / Tech Tock


A colleague at Lab49 just informed me of the existence of Rapid Serial Visual Presentation/RSVP speed reading apps. They’re amazing. Basically, the words of your reading selection are displayed in place one after another. With this interface, 300 words per minute seems slow to me and I can easily read news articles at 600 wpm.

imageThese apps are available on web and mobile.  On the web I’m using spreeder which has a website and chrome extension.  Just highlight web page text, right click and choose so spreed it. Using the spreeder bookmarklet may be the best choice here since it has keyboard control for increasing and decreasing the speed while reading.  Using the Shortcut Manager extension, you can make a shortcut for the bookmarklet and just highlight and hotkey.

How quickly can you read this post?

March 7th, 2014 / Ari Designs Stuff

Today on the blogs there was a lot of talk about Spritz, a new speed-reading application that claims you can use it to read a novel in 90 minutes.

Spritz's ORP system

Digging into some of their documentation, the idea here is that humans actually recognise words by seeking what Spritz calls the Optimal Recognition Point (ORP) of a word. ORP does not seem to be a particularly new concept. In 1936 Jacob Kantor coined the term psycholinguistics to describe the study of the psychological and neurobiological factors that enable humans to acquire, use, comprehend and produce language (source). The concept of Psycholingustics has gained attention in the public eye through old chain emails like this one:

The Revealing Constructor Pattern

February 13th, 2014 / Hidden Variables

I want to document an interesting pattern we've seen emerge in some recent web platform specs, including promises and streams. I'm calling it the revealing constructor pattern.

The Promises Example

Let's take the case of promises first, since that may be familiar. You can construct a new promise like so:

var p = new Promise(function (resolve, reject) {
    // Use `resolve` to resolve `p`.
    // Use `reject` to reject `p`.

We see here that the Promise constructor takes a single function as its sole parameter (called the “executor function”). It then immediately calls that function with two arguments, resolve and reject. These arguments have the capability to manipulate the internal state of the newly-constructed Promise instance p.

Continual Progress in the W3C TAG

December 1st, 2013 / Hidden Variables

The W3C Technical Architecture Group has made immeasurable progress this year since
the original wave of reformist thought swept through it last
election season. The extensible web agenda, which I've
spoken about previously, has been adopted into their vision for the
web's foundations and informed recent spec work across the W3C. The TAG even moved its deliverables
onto GitHub, allowing better collaboration with and transparency to developers.

The Extensible Web

October 6th, 2013 / Hidden Variables

This post adapts my talk from JSConf EU 2013.

The web platform has, historically, been somewhat of a kludge. It's grown, organically, into something with no real
sense of cohesion. Most of its APIs have been poorly designed, by C++ developers, via
a binding layer meant originally for CORBA.

Worse, there have been major gaps in what we can do compared to native apps. And for those things that we can do, we end
up accomplishing them by drowning ourselves in custom JavaScript functionality.

ES6 Iterators, Generators, and Iterables

September 5th, 2013 / Hidden Variables

I wrote up a quick guide to the terminology around ES6's iteration-related concepts, plus some notes and other


An iterator is an object with a next method that returns { done, value } tuples.

An iterable is an object which has an internal method, written in the current ES6 draft specs as
obj[@@iterator](), that returns an iterator.

A generator is a specific type of iterator whose next results are determined by the behavior of its corresponding
generator function. Generators also have a throw method, and their next method takes a parameter.

Jasmine-style BDD tests in Scala

August 25th, 2013

I write a lot of JavaScript these days and got quite accustomed to Jasmine-style unit tests with their expressiveness and flexibility. I also code a fair amount of Scala and one thing I miss every time I switch is a good support for BDD. I use ScalaTest and it is a powerful framework but one thing it is missing for years is the support for hierarchical specs. Namely, the analog of Jasmine’s “beforeEach” and “afterEach” in nested “describe”s. So recently, after struggling once again to express a test concisely, I felt that enough was enough. Here is a FunSpec extension trait I came up with: Read more…

Hooray, Asynchronous Code Debug Support

July 26th, 2013 / Tech Tock

In VS2013, Only for Windows 8.1 Sad smile

I could download the VS2013 at right now, but I don’t know when my client will get me Windows 8.1.  Since so many financial companies just made it to Windows 7 in the last couple years it could be a while…

A Few Short Words

July 23rd, 2013 / Tech Tock

As a fan of word games, and dabbling a little with Html and JavaScript, I made this little app (a few months ago), to drill on 2 letter words.  Sometime I’ll add the 3 letter words and more.

I played around with augment, es5 shim sham, and require.js, and of course jQuery and jQueryUI.  I probably made a bit of a mess, but its just for fun.

Of course it comes with unit tests in qUnit. If its good enough for jQuery, its good enough for my toys.

Play it here.

As usual, also available on GitHub.

Explaining Away the Web’s Magic

June 9th, 2013 / Hidden Variables

Today we revealed The Extensible Web Manifesto, calling for a new approach to
web standards that prioritizes new local-level capabilities in order to explain and extend higher-end platform features.
I want to take a minute to talk about what this means in practice, and why it's different from how we operate today.

Show Me the Magic!

The core of the extensible web manifesto says two things:

  • We should expose new low-level capabilities to JavaScript
  • We should explain existing high-level features in terms of JavaScript

Maven and Android

May 6th, 2013 / Join Them

If you find yourself with a Maven Android project which builds fine from mvn command line but gives errors in eclipse the problem may be this:

After a Maven / Update Project, your Eclipse build compliance is updated to what is found in the pom. Without need for “maven-compiler-plugin”, it uses the oldest level.

In my case, Eclipse wasn’t happy with @Override annotations. This was because it was updating to Java compliance to 1.5 which doesn’t support annotations. The problem was more confusing because it didn’t give the correct error. (It said that my methods were not overriding anything – removing them then gave the error that I needed to override two methods.)

Maven, Eclipse and Android

May 4th, 2013 / Join Them

To use maven and eclipse with android projects:

You need the Maven Android Plugin ( for your maven builds.

And the m2e-android plugin ( for eclipse – otherwise you will get a pom error (“Plugin execution not covered by lifecycle configuration”).

Follow the usual steps to convert a project to maven after m2e-androud plug-in is installed (rt click on project / configure / convert to maven). One thing, when following instructions on the m2e-android plugin page for installing the plugin, you will get multiple hits when searching in the marketplace, the one you want is “Android Configurator for M2E”.

Ubuntu – getting full system information

May 4th, 2013 / Join Them

To get full system information from the terminal command line:

sudo lshw -html > info.html
gnome-open info.html

Ubuntu Terminal Mode

May 4th, 2013 / Join Them

If you’ve done something silly and can’t log on with your ubuntu user (in my case it was changing my ~/.pam_environment file to something invalid, then this is worth remembering:

Log on as guest.

Press Ctrl-Alt-F1 to get terminal mode

log on as yourself and make changes to the files.

Press Ctrl-Alt-F7 to exit terminal mode

Strict Mode = Static Scoping

March 18th, 2013 / Hidden Variables

It is indeed
time to start using JavaScript's strict mode.
There are many reasons, but one of the most compelling is that it brings sanity to JavaScript's scoping rules, by
guaranteeing static scoping.

Simply put, code is statically scoped if you can statically analyze it and determine what all the identifiers refer
to. In other words, you can statically determine where every variable was declared. As we'll see, JavaScript's sloppy
mode does not have this property, giving you yet one more reason to shun it in favor of "use strict".

Thank you Jon Skeet

March 16th, 2013 / Tech Tock

Weird VS Bug 99

March 15th, 2013 / Tech Tock

Still a bug in VS 2012.

It happened frequently to me on my current work machine in VS2010 that the VS Global Search stops working with this annoying message:

“No files were found to look in. Find was stopped in progress.”

This is the answer: Ctrl + Scroll Lock

Git disHarmony

March 8th, 2013 / Tech Tock

If only my various git interfaces would play together nicely.

This is too regular an occurrence.

image (2)

Function Declarations vs. Function Expressions

March 6th, 2013 / Tech Tock

Great post on the subtleties of Javascript functions with examples and quiz.

VS 2012 – Not as bad as 2010

February 28th, 2013 / Tech Tock

Recently started using VS 2012. It’s growing on me.  Here’s my first impressions from my current focus as a C#/.Net WPF developer.

The bad

The bad parts are similar to bugs in VS 2010

  • MS Test "Now even more unusable than ever":  can’t run tests in current context and all the tests in a project are lumped together so you can’t just look for tests in one class.  Workaround: use ReSharper as your test runner.
  • Similarly slow worthless XAML designer.  Workaround: switch to XML view and move on.