Ruby Programmer/Developer

George Armhold's Blog

Data-driven webapps built with Ruby, Java & Wicket

Introducing Quick Brown… Frog?

I’m working on a new consumer-oriented webapp for touch-typing lessons. I’ve been very much inspired by Patrick McKenzie of Bingo Card Creator fame, so you will find some obvious similarities between our approaches and target audience. This blog will document both the technical and business aspects of bringing Quick Brown Frog to market.

So, why typing software?

Typing software has been around forever, and there are some excellent, well-known packages for learning how to type. But most of them are shrink-wrap products that you have to physically purchase and install from CD. The idea that you need to have a round piece of plastic shipped to your home in order to install a piece of software is really an anachronism in 2010.

Yes, there are some decent typing tutors on the web, but the ones that actually work half-decently are Flash or Java apps. I think I can do something in the modern browser, and without resorting to any plugins.

Tools

Additionally, once I’ve had a chance to go back and clean up and refactor my code, I hope to take the nuts-and-bolts scaffolding from my app and turn that into a product- a quick-starter way to create all the common things a consumer-oriented webapps needs, such as account creation, secure password hashing, “Buy Now” links, expiring downloads, etc.

Stay tuned for more news on that front, as well as some “how it’s built” type posts.

Quick Brown… Frog?

“Quick Brown Fox” was the obvious choice, but alas, there’s already an (iPhone) app by that name. QuickBrownFrog.com was unique and available, so there it is! It’s still quite heavily under construction, but feel free to visit and leave me some (much appreciated) feedback.

Pause Your Web History- Break Google Maps

For a few days Google Maps stopped working for me. I first noticed it while trying to get directions to the airport. I use Safari, and the Maps page would just sit there with “Still loading…” forever. I thought it was a momentary glitch, but 2 days later it was still happening. I fired up Chrome on the same machine, which worked fine. Back in Safari, I tried clearing the cache, restarting the browser, etc. all to no avail.

Today I figured it out- I had paused my web history some time back. On a whim I tried unpausing it, and lo and behold, Maps now works again in Safari. Pausing it again results in the same breakage, so the problem is repeatable. Having to enable Web History to use Maps is a little unsettling, but this sounds like a bug.

image

A Multilingual Password Generator Using GWT and Google App Engine

My fascination with GWT and Google App Engine continues. This weekend I created a multi-lingual memorable password generator.

In order to create memorable passwords I took the Diceware approach. The idea is simple: create a list of English words, and assign a five digit number to each of them.

23542 click23543 cliff23544 climb23545 clime23546 cling23551 clink

To build up a password, you select some number of these words and combine them (preferably with some further randomization of the case, as well as perhaps inserting some digits or symbols between the words).

To select each word, you roll a die (or fire up a pseudo-random number generator) five times. If you roll 2, 3, 5, 4 and then 3, that corresponds to the word with index 23543. In our case, that’s cliff. Keep selecting words in this manner until you’ve built up a sufficiently long/complex password.

There are a number of password generator sites that seem to be using lots of server-side entropy for password generation, but then blithely download the generated passwords across the Internet to your browser. That doesn’t seem like such a good idea. With create-a-password, it all happens right in your browser window, thanks to the magic of GWT.

On the downside, the dictionaries used for word selection are in fact downloaded (and they are well-known anyway). Despite this shortcoming, it still seems safer to me than shipping generated passwords across the network. Using a longer password (Wikipedia recommends 5 or more dice words) can help with this.

Diceware dictionaries are available in several languages, so it was pretty straightforward to go ahead and use GWT’s i18n to make this program available in a few different languages. Hopefully I haven’t butchered the Spanish too badly.

I was a little disappointed to learn that GWT doesn’t seem to support automatically recognizing the user’s browser locale. I expected to be able to automatically detect this, and then offer localized content, but that doesn’t seem to be the case. I ended up having to embed a property into each of my localized html pages:

<meta name='gwt:property' content='locale=fr'/>

Another approach is to use a JSP. Despite this, I think it turned out pretty well.