NEWS: Queens of the stone age ringtones Video game ringtones Motorola ringtone format Free nextel polyphonic ringtone Motorola v557 downloadable ringtones Here we go steelers ringtone Free sony ericsson t610 ringtone Top ringtones Personalized ringtones Ringtone for motorola Cricket free kyocera phone ringtone Motorola v3 ringtones com Boston legal ringtone Ringtone star trek communicator Cellular one ringtones Free ringtones sent to your phone Blade kyocera ringtone Ringtone jukebox 2 Download ringtones for my cell phone. Motorola nextel iden free downloads ringtone java How to make ringtones Free country ringtones Free nokia ringtone Free latest indian ringtones Us cellular and kyocera ringtones? Cellular phone ringtone canada Advent children ringtones? Nextel ringtone cd Free tracfone ringtones Lg ringtone Ringtones mp3 motorola Verizon mp3 ringtones Reg reagan ringtones I like to move it ringtone Free ringtone for verizon lg vx3200 phone? Nextel wav ringtone Ringtone loader: Cellular download phone ringtone Kill bill ringtones Free us cellular ringtone Ringtones for nokia 2128i Normal ringtones Free cingular music ringtone Mp3 to ringtone gold Cell free motorola phone ringtone v60i. Free lg ringtone verizon vx6000 wireless Free funny ringtones for cingular R225 ringtones Drum and bass ringtones Lil jon ringtones Free audiovox cdm 8910m ringtones. Kanye west ringtones Free latest indian ringtones Cingular free mp3 ringtone Star wars imperial march ringtone: Free music ringtones for cingular Ringtones for Download free ringtone for motorola v60i Sprint cell phone ringtones, Ringtone for nextel blackberry 7520 Free ringtones for uscc Here we go steelers ringtone Phones the pussycat dolls ringtone: Motorola 120t ringtones Emery ringtones Composer ringtones for nokia Ringtone cingular nokia 3560 Free ringtones and screensavers Download la migra ringtone. Download free motorola phone ringtone Download free midi ringtone Gorillaz ringtones Usher yeah realtone ringtone Motorola polyphonic ringtones Arac free ringtone sprint Virgin mobile ringtone Cingular free ringtones Wireless ringtones Att ringtones Us celluar ringtones Cartoon ringtones Country music ringtones free Free motorola mp3 ringtones Ringtone graphic Keypad ringtones Hockey night in canada ringtone Jamster ringtones Ringtone planet Free polyphonic ringtones for sprint Free final fantasy ringtones Download ringtones Palm treo 600 ringtones Compose ringtones O zone music ringtones Motorola v120 ringtone? Gorillaz ringtones Cingular mp3 ringtone Cell free pcs ringtone sprint Free ringtones for your cell phone Compose your own ringtone British telephone ringtone, Sony ringtone Kernkraft 400 ringtone Nextel ringtone maker Nextel ringtones free Free cellular phone ringtone downloads Download free funny ringtone New zealand ringtones Samsung i500 ringtones: Dierks bentley music ringtones Tv ringtones Free ringtones for a panasonic phone Immortal technique ringtones. Motorola v70 ringtone 5300 free ringtone sanyo sprint Harley ringtones Free ringtone sanyo sprint! Hockey nokia ringtone Free cellphone ringtones for cingular Free ringtone for motorola v330 Ctu 24 ringtone Download alltel ringtones Nextel free ringtones Nextel i275 ringtones Jeremy camp free wap mp3 ringtone A670 free phone ringtone verizon wireless Jamster ringtone Motorola e815 ringtones Bad boys inner circle ringtone I90c nextel ringtones Ringtones for tracfone: Free kyocera se47 ringtone Free ringtone Nokia 6102 free ringtones There it go ringtone: 24 ctu ringtone nokia Pretty ricky ringtones Pink panther ringtones Sidekick ringtone. Free nextel i730 ringtones College fight song ringtones Alltel ringtone wireless Nextel ringtones Cingular ringtone software Phoenix nights ringtones! Free ringtone for a cingular cell phone Ringtones music, Free ringtones for verizon Lg 5225 ringtones Ctu ringtones Free disney ringtones Free sean paul ringtones Download ringtones free i90c Ringtones harry potter Christian download free ringtone Free ringtones for 6010 phone of hilary duff Daddy yankee ringtone Sidekick ii ringtones Motorola c131 cdma ringtones Mario bros ringtone Ringtones for alltel phones Free fall out boy ringtones Paul wall nextel ringtones! Beverly hills cop ringtone Free mobile phone ringtone sprint Download themes and ringtones for phone for free Mp3 to midi ringtone Free nokia indian ringtones Cellular download phone ringtone com Motorola v60s ringtones! Free phone ringtone screensaver sprint Free poly ringtones Free midi ringtone Free ringtone for verizon wireless cell phone Free ringtones for nextel phones Sanyo ringtones Blink 182 ringtones Iden game ringtone i830 nextel! Jimmy buffett ringtones Bollywood download free ringtone Lord of the rings ringtone Free lg vx3100 verizon wireless ringtone Siemens ringtones Free keypress motorola ringtone v66. C343 free motorola ringtone Lg ax5000 ringtones Cell phone ringtone and screensaver Free unicel ringtones Lg 4015 ringtone Magix ringtone maker Lg verizon ringtones Final fantasy ringtone, com Battlestar galactica ringtone Free ringtone for lg sprint phone Free ringtone totally Ringtone creator software Download real ringtones: Fraggle rock ringtone Motorola v60i keypress ringtones: Ringtone wav Free cellular phone ringtones Ringtone uploads Vietnamese ringtone Sexy ringtones Simple plan ringtone Free verizon cell phone ringtone Nokia kepros ringtones Free motorola v60i ringtone converter Centennial wireless ringtones Free mobile motorola ringtone t Explicit ringtones Jay chou ringtone Download able free motorola ringtones? Best ringtones for cell phones 311 ringtones 100 free ringtone sprint Kylie minogue ringtones Download free nextel ringtones Totally free ringtones Family guy ringtones Free cellophane ringtones Sending ringtones Hamster dance ringtone Free motorola 120e ringtones Get free ringtones Ringtones for cell phones Ringtone composer? Here we go ringtone Free ringtone sprint voice Free nokia ringtone tracfone Sprint download ringtones: Carmina burana ringtones Create ringtones Altel free ringtones Listen to your heart ringtone Free i205 motorola ringtone Kingdom hearts ringtone: Download maker ringtone Free ringtone for cingular phone Black cingular eyed pea ringtone Cheap ringtones Wrestling kane real ringtones for cellular one Sprint ringtone! Listen to ringtones Cellular phone ringtone us Ringtone for sprint pcs cell phone Free lg ringtone sprint Reggae ringtones California love ringtone Nokia 6102 ringtone maker Keypress ringtone samsung Sms ringtones Keypress motorola ringtone v60i Motorola free mp3 ringtone download Nextel blackberry ringtone, Blige real ringtones Tupac ringtones Free verizon lg 3200 ringtone Free ringtone for verizon wireless lg vx4500 Motorola e815 verizon ringtones Motorola c343 ringtone Free audiovox ringtones melodies Slayer ringtones Cool ringtone Get free cingular ringtone: Download kyocera ringtone Free ringtones for kyocera Mothers day motherfucker ringtone Free g4010 lg ringtone Free nokia 6610 polyphonic ringtones Ringtone writing Motorola v60i ringtone Free motorola ringtone tracfone: Shakira ringtone Mp3 ringtones lg! Banana phone ringtone Free nokia 2126 ringtones Motorola v60i free ringtones Free motorola 120t phone ringtones, Sanyo katana free ringtones E715 free ringtone samsung I like to move it ringtone Get it now ringtones Verizon free ringtones Download free ringtone motorola v60i. Download ringtones Sweet home alabama ringtones! Verizon lg ringtones Final fantasy victory ringtone Nextel motorola ringtone Centennial free ringtone. Free nokia indian ringtones Free real ringtone tone Download free ringtone for verizon wireless phone Free nokia ringtone composers Cingular free ringtones Voice ringtone Nebraska fight song ringtone Free polyphonic ringtones for mobile phones: Accompli 009 ringtone Mpx220 ringtones Download free polyphonic ringtone Download ringtone tracfone Free ringtone for a cingular cell phone Alltel kyocera ringtones: Phone ringtone software Nightmare before christmas ringtones Free verizon samsung a650 ringtones The oc ringtone. Buffy ringtones Blackberry ringtone Nokia 1108 ringtones Download mobile phone ringtones Polyphonic ringtones samsung Boostmobileringtones Free cell phones ringtones Motorola ringtone! Motorola ringtone converter Free lg phone ringtone verizon vx3200 wallpaper Sprint nextel ringtone Cell phone ringtone Free ringtones for virgin mobile Free ringtone for verizon lg tm510 Free tracfone ringtone promo code Verizon lg vx3300 ringtones Download free ringtone software Metropcs ringtones 4010 lg ringtone Free ringtone for sprint nokia phone Free mono ringtones Groovy kind of love music ringtones Free ringtones us cellular Naruto ringtones Motorola free ringtones Download nextel ringtone Mc hammer ringtone Lg vx3200 ringtones Polyphonic ringtones Ringtone studio Ringtone software Free verizon kyocera ringtone Free ringtone suncom Real ringtone nokia, Free polyphonic ringtones for verizon phones Free ringtones for sprint cell phones, Free nokia ringtone codes Free verizon polyphonic ringtones Free phone screensavers logos ringtones Free nokia poly ringtones Free verizon real music ringtone Nokia 2285 ringtones Free samsung ringtones Free ringtones Free get ringtone sprint Phantom of the opera ringtones Free nokia phone ringtone Nokia 6030 ringtones, Free star wars ringtones Nokia tracphone realtones ringtones! Buy nextel ringtone Real music cell phone ringtone Nextel cellular ringtone Download mobile phone ringtones Free ringtones for samsung sprint phone Illegally get free ringtones! Laffy taffy ringtone Qcp ringtone converter Motorhead ringtones Free polyphonic ringtone for lg phone Free ringtone sprint wallpaper 5400 free ringtone sanyo sprint Midi ringtones Verizon music ringtone Ludacris ringtones Mario bros ringtone Free motorola v180 ringtones Message ringtone Free download nextel i830 ringtone Napster ringtones! Motorola v170 tracfone ringtones Hat dance ringtone 3588 nokia ringtone Ringtone wav. Squad 51 ringtones Sony ringtones! Free polyphonic ringtones usa Audiovox cell phone ringtones Samsung e600 ringtones Altel free ringtones? Cell free nextel phone ringtone Cingular girl golden ringtone, 5600 free ringtone sanyo sprint Mario ringtone Mid polyphonic ringtones Cellular mobile phone ringtone t Mobile phone prepaid ringtone virgin Free 120t motorola cell phone ringtones? Free ringtone for motorola v330 Polyphonic ringtone software Sprint lg ringtones Ringtone converter California love ringtone Free i95cl nextel ringtone Nextel real music ringtone Free cingular ringtones Sprint sms ringtones free Samsung x427m ringtones. Free ringtone unlimited Download free ringtones to computer Polyphonic ringtone composer Download i730 nextel ringtone software? Free poly ringtones Motorola 120e ringtone code. Hotlink caller ringtone Download free ringtone t mobile Mono ringtones Turkey gobble ringtones Treo 600 ringtones Motorola v600 mp3 ringtone: College football ringtones Christian ringtones Download able ringtones for sprint pcs I836 nextel ringtone Tracfone ringtones Download free ringtone ringtone ringtone ringtone sprint Akon ringtones Ringtones for verizon lg 6000 phone Nightmare before christmas ringtones Hail to the victors ringtone Free keypress ringtone Lg 4500 ringtones Jennifer rush free ringtone Free verizon ringtone and wallpaper: Ringtones for siemens Download free nextel i860 ringtone Pretty ricky ringtones Free polyphonic ringtone sprint Cellular free ringtone us Download free nokia polyphonic ringtones, Free nokia 6255i ringtones Download sprint ringtones Yamaha ringtones Thugz mansion ringtone I90c ringtones i95cl Ringtone websites Free rap ringtones Limewire cell phone ringtones Free ringtones for nokia 5100 phone Ringtones for cellphones Christian rock ringtones Crazy frog ringtone Phones pussycat dolls ringtone Free ringtones for my cell phone jason alden Free downloadable polyphonic ringtones for samsung Free motorola polyphonic ringtone v60i Nokia ringtone cingular Free boost ringtones Create your own ringtone Free t mobile ringtones. Car sound ringtones Free blackadder motorola ringtones Naruto ringtones Ringtone software for nextel: Firefighter ringtones Talking ringtone! Nextel ringtones download free Motorola v180 ringtones Free cingular samsung x427m music ringtones Free ringtone for a verizon lg vx3100 Sprint samsung ringtone Download free nokia polyphonic ringtone: Free composer ringtones Navy ringtone Free rtttl ringtones Audiovox ringtones Motorola v190 ringtones Motorola razr ringtones: Firefighter ringtones Cdma motorola ringtone v60i Keypress composer ringtones Free nextel ringtone? Free x427 cingular ringtone logo Downloadable free ringtone: E715 free monophonic ringtone samsung Dada ringtones Corr wireless ringtones Free polyphonic ringtones for nokia phones. Realtone ringtones Free ringtones for a sprint pcs phone Motorola v710 ringtone Free ringtone makers Amr ringtones Cell ericsson free phone ringtone sony! Free lg ringtone verizon Verizon wireless free music ringtone! Asian ringtones Free nextel i710 ringtone Free mobile phone ringtone sprint Arabic free ringtone! Antony and the johnson ringtones Nokia 1100 composer ringtones? Free online ringtones Train whistle ringtone Cell free phone ringtone sprint wallpaper Free korn ringtones Free nokia ringtones australia Police siren ringtones? Sanyo ringtones Free ringtones for motorola v60i tracfones Free verizon ringtones Nokia 3510i ringtones U2 ringtones Ringtone samsung x426. Real ringtones bon jovi Free nextel ringtone loader. Cletus t judd real ringtones Free metropcs ringtones Cingular wireless ringtones free phone 7210 ringtones Ringtones motorola verizon Free nokia ringtones for any carrier Free game lg ringtone verizon Listen to ringtones Download ericsson free ringtone sony Ringtones for kyocera phones Free siemens a50 ringtones aus Motorola t720 keypress ringtone Star wars mp3 ringtone Hack nextel to download ringtones? Simple freedom ringtones Motorola v262 ringtones! A670 free phone ringtone verizon wireless Classical ringtones Free mp3 ringtone converter Free jaws ringtone Free lg vx3200 ringtones Kyocera ringtone se47 Phantom of the opera ringtone mp3 Ringtones for blackberry Download able ringtones for sprint phones Code free motorola ringtone Us cellular ringtone Cheap ringtone Download free ringtone sanyo sprint Free ringtones download? Free nextel polyphonic ringtone Download free ringtone for verizon phone! Free i860 ringtones Download motorola ringtone free

Creating GUIDs in Two Steps or Less

Posted on April 23, 2008
Filed Under python, development, .Net | 4 Comments

If you happen to find yourself needing to create a GUID for your brand new C# program, a Google search for “Create GUID” is the first reasonable thing you might do. Here’s my summary after doing the same…

First off, in the “Truth in Advertising” department, the best link from the top 10 was “The Quick Guide to GUIDs” at betterexplained.com.

But the rest of the top search results seemed overly complicated. Guidgen.exe is a clunky little program, and I had to do more searching just to find where to download guidgen.exe. I’m using Visual C# Express, and “Create GUID” was not available from my Tools menu, as the MSDN link about guidgen.exe suggests it is. Since the really simple way was not obvious in the top search result (betterexplained.com was seventh), I’m hoping to change that in my own little way with this blog post.

The Simplest Way (as mentioned in the betterexplained.com article above):

  1. Go to http://www.famkruithof.net/uuid/uuidgen
  2. There’s no step 2!

Alternative Way #1 (found via a simpler Google search for just “GUID”)

  1. Go to http://www.guidgen.com/
  2. There’s no step 2!

A Simple Way with CPython (alluded to in the betterexplained.com article):

  1. Install Python 2.5 if you don’t have it already. (Download from python.org)
  2. Open a command prompt, and run the following:
    c:\>python
    Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from uuid import uuid4
    >>> print uuid4()
    927a36e2-4c9f-4235-a3f3-ebedbadf48c3
    >>>
  3. There’s no step 3!

Another Simple Way with IronPython:

IronPython let’s you easily play around with the .Net libraries. If you’re doing .Net development, IronPython is indispensable.

Prerequisite: You already have .Net installed. Consider this “Step Zero”. This is already taken care of if you’re developing with Visual C# Express. (Hey, by the way, Microsoft, thanks for making your compilers free, finally! :-)

  1. Download and unzip the IronPython binaries. (Download from codeplex.com. Latest is 1.1.1 as of 23 April, 2008.)
  2. Open a command prompt, locate ipy.exe and run the following:
    C:\>applications\IronPython-1.1.1>ipy.exe
    IronPython 1.1.1 (1.1.1) on .NET 2.0.50727.1433
    Copyright (c) Microsoft Corporation. All rights reserved.
    >>> import System
    >>> print System.Guid.NewGuid()
    e70e472a-365d-45fc-9bfa-6665e27dc5bd
    >>>
  3. There’s no step 3!

That’s it! Happy GUIDing!

Testing — Mission Impossible?

Posted on April 4, 2008
Filed Under testing | Leave a Comment

… test automation created by a siloed QA team working in isolation to reverse-engineer existing software and automate tests against an untestable UI using proprietary tools accessible only to a few select team members is guaranteed to be incredibly expensive both to create and to maintain, and also ridiculously fragile.

People still do that?! :-) No wonder “testers” get such a bad rap. Their mission is literally impossible.

A web 2.0 app for uploading and running remote Python code snippets?

Posted on March 13, 2008
Filed Under python, development | 5 Comments

I know I read about this on reddit within the last week or so… But I just can’t find it! My Google-fu is failing me! Grrrrr. There was a general upload text area form where you copy in your code snippet. You then select the language from a drop down, and click submit. In the commentary on reddit about this service, the author talked about all the things he did to keep his machines safe from attack, including using virtual machines, code jails, and refreshing both the host and the VMs frequently. I can remember a bunch of keywords from the comments, but apparently there is no comment search at reddit! (And a google search with “site:reddit.com” didn’t work either.) If you remember seeing this, too, let me know!

Update: Thank you, Internets! Codepad.org is the answer. (Though UtilityMill.com looks similar, too.) Here’s the original thread on reddit that I was looking for, too.

Annoucement: Selenium Users’ Meetup - Monday, February 25 2008

Posted on February 20, 2008
Filed Under selenium | Leave a Comment

I’ll be attending the Selenium Users Open Evening this Monday, February 25. The event will be at the Google campus in Mountain View, California. Most of the core Selenium development team will be in attendance, traveling from as far away as Tokyo and London. Here’s a blurb about it from the sign-up page :

With representatives from all the major Selenium projects on hand to present ideas, discuss the future of Selenium and answer audience questions, the Selenium Open Evening is an opportunity to get involved in the future of the project. With Selenium developers from as far apart as London, Tokyo and the US and Lightning Talks on related subjects, this is a great way to meet Selenium users and meet some of the other brightest minds in web testing and Agile development!

And here are the important event details:

Monday, February 25, 2008 6:30PM PST to 9:00PM PST
Google Campus, 1600 Amphitheatre Pky, Mountain View, California
Upon arriving, please proceed to reception in building 41 and ask for directions to the Selenium Users Open Evening.

Oh, and did I mention free food? And I’ll be signing autographs, too! :-)

If you’ll be in the Silicon Valley on Monday and love or hate all things Selenium, please sign-up now!

This is why I love JavaScript and Python, but not Java

Posted on January 29, 2008
Filed Under python, development, javascript | Leave a Comment

Exploratory programming is the fun end of programming, and we hope that will be the guiding principle of the Arc community.” (arclanguage.org)

Amen! (And when I do have to work with code on the JVM, it’s via Rhino or Jython.) I don’t know how much I’ll use Arc in the future, but I already like its attitude.

Me at Google - the 10 month update

Posted on November 9, 2007
Filed Under personal, selenium | 2 Comments

[update: yeah, I’m lame. Jan 24 to Nov 9 is (rounding up) 10 months, not 11.]

Well, since last I posted… (~10 months!) I’ve been pretty busy. I started at Google eight months ago on March 5th, and so far it’s been great.

In April, I finally got to meet-up with several members of the core Selenium development team, specifically, Patrick Lightbody, Dan Fabulich, Nelson Sproul, and Paul Hammant. Paul and I go way back… See, I started Selenium Core, but he started Driven-now-known-as-Remote-Control. And RC is the flavor most heavily used at Google, so I owe all my future earnings to him, or so he thinks!

In May, I attended CITCON North America in Dallas, and led an informal talk on “The One True Programming Language for Writing Tests” (Slightly tongue-in-cheek, I was hoping for a good Python-vs-Ruby fist fight — I’ve missed those since leaving ThoughtWorks. :-)

In June, a “Short Cut” on Selenium was finally published. Many thanks to the hard work of Titus Brown, Grig Gheorghiu (co-authors) and Mike Loukides (our editor). Titus, Grig, and I are on the hook to write a few more of those, so stay tuned.

Hmmm… what else? I was interviewed on the Google Testing Blog in September. And I made a few presentations, once at the Google Developer Day back in May, and twice at the Google Test Automation Conference (GTAC) in September.

GTAC was especially fun. Jennifer Bevan and I publicly announced the “Selenium Farm” — work Google has been doing to improve and build upon Selenium RC, specifically making a multiplexed “farm” of many, many Windows, Linux, and Mac machines for teams, like Gmail and Docs to run their tests against. Selenium has become a standard (but not the only, of course) web testing tool for many high profile Google Apps. Gmail, for example, was able to bring their test time down from 40 minutes to 4 minutes by using the Selenium Farm. Cool! So, if you ever find a bug in Gmail, be sure to file a Selenium test for it for faster service. :-) As it turns out, though Google’s Selenium Farm has not been open sourced, yet… But a few crafty ThoughtWorkers saw the YouTube movie of our talk and started to work on a clean room implementation… A month later, the “Selenium Grid” is open sourced and available now! It’s slightly different than Google’s internal farm, but the high-level concepts are the same. I look forward to continuing the work I outlined in my GTAC presentation (this time with the open Selenium Grid) and use dozens of machines on Amazon’s EC2 cloud to bring down Selenium’s own build time down from the current 25 minutes to something more manageable in the 2-4 minute range. (It’ll also be nice to have a shareable Selenium grid client on EC2 for anyone to use in their own web test builds.) Also at GTAC, I got to debate Simon Stewart (also a former ThoughtWorker, and now Googler) on the topic of “Selenium vs WebDriver — the Steel Cage Knife Fight“. (If you want a chuckle, watch the last 30 seconds or so of that one.)

And lately, I started a “Makers” (as in “Make magazine” Makers) group at Google. For our first project, we’re working on something which will sound quite familiar to many agile teams. As you’d hope and expect, agile and testing are big here… and of course, every agile team needs to have some kind of cool, highly visible gadget to show off their build status. To that end, I’m working to put together some Do-it-yourself kits based on the Arduino board. The best example of this is explained in Arduino tutorial #3 at ladyada.net. In the spirit of Google’s roots, I’m sure there will be a few Lego blocks in there, too.

Feeling lucky… From ThoughtWorker to Noogler

Posted on January 24, 2007
Filed Under development, personal, selenium | 9 Comments

Well, I’ve had six wonderful years in the land of Thinking and Working (aka “The Martin Fowler Company“). Today, however, is my last day at ThoughtWorks. I’ll be packing up my home in Chicago and joining Google in Mountain View starting in February. My official title there will be “Software QA Engineer“, which is ironic, because no serious software tester goes by the title ”QA Engineer”. So I won’t either. Just call me a developer-tester, please!

On that note, it just so happens that Google is a huge fan of Selenium for browser testing their web applications. According to veteran Googler Goranka Bjedov, “Google projects use open source tools, and Selenium in particular for their testing projects… Selenium is well regarded and people who use it are very happy with it.” Hey… I’m happy they’re happy!

It has been fun working with so many prolific and talented open source coders at ThoughtWorks over the years, and I look forward to being equally amazed by my fellow co-workers at Google. Well, at least until a position at NASA or Lego opens up. :-)

A new litmus test for evaluating Python web frameworks — What’s your security policy?

Posted on August 10, 2006
Filed Under rails, python, development, django | 16 Comments

With the almost daily announcement of new Python-based web frameworks, there needs to be a way to filter the contenders from the pretenders. I’ve been mulling over the idea of compiling a checklist for evaluating new frameworks. The checklist could also be used by new would-be Python framework creators as a gut check for the things they are now responsible for if they expect the world to use their software in any serious fashion.

The recent security hole in Rails is interesting, not because there was a security hole, but because it looks like there were no (or, at least, not well-known) policies in place on how urgent information gets communicated and exactly what the expectation is for how far back the Rails Core team will provide security patches.

So to jump start my web framework evaluation checklist, I’m adding “What’s your policy on how you deal with security holes” to the top of the list. Django is pretty up-front and clear with their stated policy. Importantly, they explicitly state they will support patches for the current release at that time and the two previous releases. I’m still a little fuzzy on how much time is covered by “a current + 2 previous releases” policy. And I’m also a little fuzzy on exactly where I should look to be notified about such an event. But already, Django’s explicit policy is better than Rails implicit policy of “upgrade now, cause you should have been keeping up-to-date anyway.” Given the recent announcement of Rails shipping with Mac OS X - 10.5 (Leopard), how security issues are dealt with and disseminated becomes even more important to get right.

Many open source projects have low-volume, read-only mailing lists explicitly set-up for these kind of announcements. Granted, security ain’t easy and there is much debate on how to do it right. But if you’re a would-be Python web framework author, seriously consider how you’re going to deal with security vulnerabilties when you go-live.

On that note, help me flesh out my web framework evaluation checklist! What question would you add? And don’t say: “But does it scale?” :-)

On Selenium and language design…

Posted on August 1, 2006
Filed Under development, selenium | Comments Off

Lately, I’ve had language design on the brain. In short, I’m working to make Selenium tests Turing complete. Right now, the Selenium Core engine can parse simple command/key-word tests. No looping or conditional logic is provided, natively, out of the box in Selenium Core without using a user extension, like flowControl. Not that it’s a bad thing, this “limitation” is also considered newbie-friendly simplicity by many users of Selenium. (Here, I’m talking about the in-browser core of Selenium, you can get all kinds of Turing complete testing goodness using Selenium Remote Control on the server side with Java, C#, Ruby, Python, or Perl.)

I’ve had early success integrating Brendan Eich’s excellent Narcissus JavaScript engine into Selenium. Narcissus is pretty darn useful. It is a living breathing JavaScript interpreter for the browser. Now why would I need to use a JavaScript interpreter written in JavaScript to make Selenium Turing complete? In short– blocking code. In “Plain Old JavaScript”, you can’t easily tell the browser to pause the execution of JavaScript code while the browser loads a new page, then continue on with the rest of the script after page load. Sure, I can do some of this with Ajax or iframes, but the amount of boilerplate event listener code involved is quite ugly, and gets in the way of writing simple functional tests for web apps, which is the whole point of Selenium’s existence. It looks like the Narrative JavaScript project was created for this same reason, and it also (!) uses the Narcissus engine to work its magic. The difference here in what I’m doing vs what Narrative JS is doing is that my code doesn’t require a server-side compilation step. “Selenium JavaScript” is all done in the browser.

I’ve also dabbled with extending Narcissus and reimplementing my favorite language of all time– HyperTalk– in JavaScript as a syntactically sugar sweet “super-set” of JavaScript, so I’ll have a ‘native-in-the-browser’ testing language for Selenium (a ‘DSL for testing’, if you will), with no server-side dependencies (like Ruby, Java, Python, etc.). But this is slower going — getting HyperTalk parsing rules right and catching all the corner cases can be tricky. So just shipping plain old JavaScript support for the Selenium Core is the pragmatic thing to release for the moment. Even more pragmatically, with Plain Old JavaScript support in Selenium Core tests, it’ll be rather straight forward to port the Watir API to Selenium JavaScript for in-browser tests. I hope this raises a few eyebrows and generates some smiles with the Watir developers. :-)

On a side note, I’ve found A Pattern Language for Language Implementation (PDF) and the Little Languages blog incredibly useful as I grapple with the issues of language design and parsing techniques. At ThoughtWorks these days, writing DSLs in Ruby is all the rage. And with good reason, Ruby is very useful for prototyping your own little language. A few years ago, everyone was talking about design patterns. So design patterns for DSLs?! Man, I can’t imagine the cocktail conversations this is going to generate!

JavaScript is the new C

Posted on July 21, 2006
Filed Under development | 7 Comments

A thread came up last week about JavaScript on the Rudolph Hering Society list. I promised to repost my thoughts as a blog post for a larger audience to dissect:

Dave Hoover wrote:

Not everyone hates JavaScript. After digging deeply into (Chicago resident) Sam Stephenson’s wonderful Prototype framework, extending it, and using it extensively, I can honestly say I enjoy working with JavaScript.

I came to a similar point in the development of Selenium. I hated JavaScript enough because of browser compatibility issues to write a testing tool to fix it. But at the same time, I liked JavaScript enough because it let me do spiffy things in the client. Alas, I decided to write a testing tool… Sam took a different path and wrote a code library, instead. But the motivation was probably the same.

To kinda hate something at first, but then grow to love it… I believe it’s called “Stockholm Syndrome“.

I agree when Dave said, “At least for now, I’d rather deal with JavaScript directly than have it generated for me by another language.” But I don’t claim that dealing directly with JavaScript is right or necessary for everyone. For example, Python, Ruby, and Perl are really written in C under the hood. But only a handful of people in the world really need to know C. I’m happy I can go years without having to look at any C code whatsoever. I suspect most of the world feels the same way about JavaScript. Guido and Matz are to C as Sam Stephenson is to JavaScript. They are all-stars because they liked C/JavaScript enough to be productive in it, but also hated it enough to write a more productive higher level tool so the rest of the world wouldn’t have to do the same.

However, when you write to the C platform, everyone can talk to you with ease. For example, there have been lots of ‘mini’ SQL database engines implemented for every language. Gadfly is the one I know about for Python. HSQL for Java. But SQLite is becoming quite popular across all languages because it is “100% Pure C”. So support and docs get better because a larger community of developers can make use of the code. Another example– YAML libraries…. Because _why wrote Syck as a C library instead of Pure Ruby, I get to use his code in Python quite easily. C gets you language binding to all the higher languages quite cheaply.

In a similar fashion, because Sam’s Prototype library is 100% JavaScript, it’s now used by PHP, Ruby, Perl, Python, Java, and .Net shops. And that’s the best empirical argument I can think of that JavaScript is the new C.