<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.5" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Viva La Chipperfish</title>
	<link>http://www.jrandolph.com/blog</link>
	<description>Tales of corporate software development.</description>
	<pubDate>Fri, 04 Apr 2008 20:21:47 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.5</generator>
	<language>en</language>
			<item>
		<title>Testing &#8212; Mission Impossible?</title>
		<link>http://www.jrandolph.com/blog/2008/04/04/testing-mission-impossible/</link>
		<comments>http://www.jrandolph.com/blog/2008/04/04/testing-mission-impossible/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 20:18:31 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>testing</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/2008/04/04/a-quote-worth-repeating/</guid>
		<description><![CDATA[<p>&#8230; 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.</p>

<p>People still do that?! :-) No [...]</p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.testobsessed.com/2008/04/02/effective-test-automation-isnt-created-in-a-vacuum"><cite>&#8230; 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.</cite></a></p>

<p>People still do that?! :-) No wonder &#8220;testers&#8221; get such a bad rap. Their mission is literally impossible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2008/04/04/testing-mission-impossible/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A web 2.0 app for uploading and running remote Python code snippets?</title>
		<link>http://www.jrandolph.com/blog/2008/03/13/a-web-20-app-for-uploading-and-running-remote-python-code-snippets/</link>
		<comments>http://www.jrandolph.com/blog/2008/03/13/a-web-20-app-for-uploading-and-running-remote-python-code-snippets/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 19:01:18 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>python</category>

		<category>development</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/2008/03/13/a-web-20-app-for-uploading-and-running-remote-python-code-snippets/</guid>
		<description><![CDATA[<p>I know I read about this on reddit within the last week or so&#8230; But I just can&#8217;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 [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>I <em>know</em> I read about this on reddit within the last week or so&#8230; But I just can&#8217;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 &#8220;site:reddit.com&#8221; didn&#8217;t work either.)
If you remember seeing this, too, let me know!</p>

<p><strong>Update</strong>: Thank you, Internets! <a href="http://codepad.org/">Codepad.org</a> is the answer. (Though <a href="http://utilitymill.com/">UtilityMill.com</a> looks similar, too.) Here&#8217;s <a href="http://reddit.com/info/6aw16/comments/">the original thread on reddit</a> that I was looking for, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2008/03/13/a-web-20-app-for-uploading-and-running-remote-python-code-snippets/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Annoucement: Selenium Users&#8217; Meetup - Monday, February 25 2008</title>
		<link>http://www.jrandolph.com/blog/2008/02/20/selenium-users-meetup/</link>
		<comments>http://www.jrandolph.com/blog/2008/02/20/selenium-users-meetup/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 01:26:15 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>selenium</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/2008/02/20/selenium-users-meetup/</guid>
		<description><![CDATA[<p>I&#8217;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&#8217;s a blurb about it from the sign-up page :</p>

<p>With representatives [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;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&#8217;s a blurb about it from the <a href="http://selenium.openqa.org/meetup.jsp">sign-up page</a> :</p>

<blockquote>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!</blockquote>

<p>And here are the important event details:</p>

<div class="blah">
<blockquote><strong>Monday, February 25, 2008</strong>
<strong>         6:30PM PST to 9:00PM PST</strong></blockquote>
<blockquote><a href="http://maps.google.com/maps?f=q&#038;hl=en&#038;geocode=&#038;q=1600+Amphitheatre+Pky,+Mountain+View,+CA&#038;sll=37.38948,-122.08171&#038;sspn=0.085789,0.108147&#038;ie=UTF8&#038;z=16&#038;iwloc=addr">Google         Campus, </a>
1600 Amphitheatre Pky,
Mountain View, California</blockquote>
<blockquote>Upon arriving, please proceed to reception in building 41 and ask for directions to the <u>Selenium Users Open     Evening</u>.</blockquote>
</div>

<p>Oh, and did I mention free food? And I&#8217;ll be signing autographs, too! :-)</p>

<p>If you&#8217;ll be in the Silicon Valley on Monday and love or hate all things Selenium, please <a href="http://selenium.openqa.org/meetup.jsp">sign-up now</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2008/02/20/selenium-users-meetup/feed/</wfw:commentRss>
		</item>
		<item>
		<title>This is why I love JavaScript and Python, but not Java</title>
		<link>http://www.jrandolph.com/blog/2008/01/29/fun-end-of-programming/</link>
		<comments>http://www.jrandolph.com/blog/2008/01/29/fun-end-of-programming/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 22:02:38 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>python</category>

		<category>development</category>

		<category>javascript</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/2008/01/29/fun-end-of-programming/</guid>
		<description><![CDATA[<p>&#8220;Exploratory programming is the fun end of programming, and we hope that will be the guiding  principle of the Arc community.&#8221;
(arclanguage.org)</p>

<p>Amen! (And when I do have to work with code on the JVM, it&#8217;s via Rhino or Jython.) I don&#8217;t know how much I&#8217;ll use Arc in the future, but I already like its [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>&#8220;<em><span class="admin"><a title="arc language website" href="http://arclanguage.org/">Exploratory programming is the fun end of programming, and we hope that will be the guiding  principle of the Arc community.</a></span></em><span class="admin">&#8221;
(arclanguage.org)
</span></p>

<p>Amen! (And when I do have to work with <a title="Selenium Remote Control website" href="http://selenium-rc.openqa.org/index.html">code on the JVM</a>, it&#8217;s via Rhino or Jython.) I don&#8217;t know how much I&#8217;ll use Arc in the future, but I already like its attitude.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2008/01/29/fun-end-of-programming/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Me at Google - the 10 month update</title>
		<link>http://www.jrandolph.com/blog/2007/11/09/me-at-google-the-11-month-update/</link>
		<comments>http://www.jrandolph.com/blog/2007/11/09/me-at-google-the-11-month-update/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 09:20:21 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>personal</category>

		<category>selenium</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/2007/11/09/me-at-google-the-11-month-update/</guid>
		<description><![CDATA[<p>[update: yeah, I&#8217;m lame. Jan 24 to Nov 9 is (rounding up) 10 months, not 11.]</p>

<p>Well, since last I posted&#8230; (~10 months!) I&#8217;ve been pretty busy. I started at Google eight months ago on March 5th, and so far it&#8217;s been great.</p>

<p>In April, I finally got to meet-up with several members of the core Selenium [...]</p>
]]></description>
			<content:encoded><![CDATA[<p style="font-size: 75%"><em>[<strong>update</strong>: yeah, I&#8217;m lame. Jan 24 to Nov 9 is (rounding up) 10 months, not 11.]</em></p>

<p>Well, since last I posted&#8230; (~10 months!) I&#8217;ve been pretty busy. I started at Google eight months ago on March 5th, and so far it&#8217;s been great.</p>

<p>In April, I <a href="http://www.jrandolph.com/gallery/2007-04/DSCF0121">finally got to meet-up with several members of the core Selenium development team</a>, specifically, <a href="http://blogs.opensymphony.com/plightbo/">Patrick Lightbody</a>, <a href="http://darkforge.blogspot.com/">Dan Fabulich</a>, <a href="http://wiki.openqa.org/display/~sproul">Nelson Sproul</a>, and <a href="http://paulhammant.com/">Paul Hammant</a>. Paul and I go way back&#8230; 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!</p>

<p>In May, I attended <a href="http://picasaweb.google.com/jrhuggins/CITCONNorthAmerica2007">CITCON North America in Dallas</a>, and led an informal talk on &#8220;<a href="http://www.citconf.com/wiki/index.php?title=What_Is_The_One_True_LanguageFor_Writing_Tests">The One True Programming Language for Writing Tests</a>&#8221; (Slightly tongue-in-cheek, I was hoping for a good Python-vs-Ruby fist fight &#8212; I&#8217;ve missed those since leaving ThoughtWorks. :-)</p>

<p>In June, a <a href="http://www.oreilly.com/catalog/functionalwt/">&#8220;Short Cut&#8221; on Selenium</a> was finally published. Many thanks to the hard work of <a href="http://www.advogato.org/person/titus/">Titus Brown</a>, <a href="http://agiletesting.blogspot.com/">Grig Gheorghiu</a> (co-authors) and <a href="http://www.oreillynet.com/pub/au/29">Mike Loukides</a> (our editor).  Titus, Grig, and I  are on the hook to write a few more of those, so stay tuned.</p>

<p>Hmmm&#8230; what else? I was <a href="http://googletesting.blogspot.com/2007/09/seleniums-inventor.html">interviewed on the Google Testing Blog in September</a>. And I made a few presentations, once at the <a href="http://www.youtube.com/watch?v=gFlaZ2UjAEw">Google Developer Day back in May</a>, and twice at the Google Test Automation Conference (GTAC) in September.</p>

<p>GTAC was especially fun. <a href="http://www.youtube.com/watch?v=qxBatJ1N_Og">Jennifer Bevan and I publicly announced the &#8220;Selenium Farm&#8221;</a> &#8212; work Google has been doing to improve and build upon Selenium RC, specifically making a multiplexed &#8220;farm&#8221; 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&#8217;s Selenium Farm has not been open sourced, yet&#8230; But a few crafty ThoughtWorkers saw the YouTube movie of our talk and started to work on a clean room implementation&#8230; A month later, the &#8220;<a href="http://seleniumgrid.thoughtworks.com/">Selenium Grid</a>&#8221; is open sourced and available now! It&#8217;s slightly different than Google&#8217;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&#8217;s EC2 cloud to bring down Selenium&#8217;s own build time down from the current 25 minutes to something more manageable in the 2-4 minute range. (It&#8217;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 &#8220;<a href="http://www.youtube.com/watch?v=Vlz-WmcrBL8">Selenium vs WebDriver &#8212; the Steel Cage Knife Fight</a>&#8220;. (If you want a chuckle, watch the last 30 seconds or so of that one.)</p>

<p>And lately, I started a &#8220;Makers&#8221; (as in &#8220;Make magazine&#8221; Makers) group at Google. For our first project, we&#8217;re working on something which will sound quite familiar to many agile teams. As you&#8217;d hope and expect, agile and testing are big here&#8230; 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&#8217;m working to put together some Do-it-yourself kits based on the <a href="http://www.arduino.cc/">Arduino board</a>. The best example of this is explained in <a href="http://www.ladyada.net/learn/arduino/lesson3.html">Arduino tutorial #3</a> at ladyada.net. In the spirit of <a href="http://content.techrepublic.com.com/2346-10878_11-3929-1.html">Google&#8217;s roots</a>, I&#8217;m sure there will be a few Lego blocks in there, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2007/11/09/me-at-google-the-11-month-update/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Feeling lucky&#8230; From ThoughtWorker to Noogler</title>
		<link>http://www.jrandolph.com/blog/2007/01/24/feeling-lucky-from-thoughtworker-to-noogler/</link>
		<comments>http://www.jrandolph.com/blog/2007/01/24/feeling-lucky-from-thoughtworker-to-noogler/#comments</comments>
		<pubDate>Wed, 24 Jan 2007 17:13:31 +0000</pubDate>
		<dc:creator>JH</dc:creator>
		
		<category>development</category>

		<category>personal</category>

		<category>selenium</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/2007/01/24/feeling-lucky-from-thoughtworker-to-noogler/</guid>
		<description><![CDATA[<p>Well, I&#8217;ve had six wonderful years in the land of Thinking and Working (aka &#8220;The Martin Fowler Company&#8220;). Today, however, is my last day at ThoughtWorks. I&#8217;ll be packing up my home in Chicago and joining Google in Mountain View starting in February. My official title there will be &#8220;Software QA Engineer&#8220;, which is ironic, because no serious software tester goes [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;ve had six wonderful years in the land of <a href="http://www.thoughtworks.com/index.html">Thinking and Working</a> (aka &#8220;<a href="http://www.google.com/search?hl=en&amp;lr=&amp;q=%22Martin+Fowler+Company%22">The Martin Fowler Company</a>&#8220;). Today, however, is my last day at ThoughtWorks. I&#8217;ll be packing up my home in Chicago and joining Google in Mountain View starting in February. My official title there will be &#8220;<a href="http://www.google.com/support/jobs/bin/answer.py?answer=23523&amp;query=software+qa+engineer&amp;topic=&amp;type=software+qa+engineer">Software QA Engineer</a>&#8220;, which is ironic, because no serious software tester goes by the title &#8221;QA Engineer&#8221;. So I won&#8217;t either. Just call me a <a href="http://www.testobsessed.com/2007/01/19/where-are-the-developer-testerstester-developers/">developer-tester</a>, please!</p>

<p>On that note, it just so happens that Google is a huge fan of <a href="http://openqa.org/selenium/">Selenium</a> for browser testing their web applications. According to veteran Googler <a href="http://www.flickr.com/photos/agentilini/240878514/">Goranka Bjedov</a>, &#8220;Google projects use open source tools, and Selenium in particular for their testing projects&#8230; Selenium is well regarded and people who use it are very happy with it.&#8221; Hey&#8230; I&#8217;m happy they&#8217;re happy!</p>

<p>It has been fun working with so many prolific and talented <a href="http://opensource.thoughtworks.com/people/index.html">open source coders at ThoughtWorks</a> 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 <a href="http://www.nasajobs.nasa.gov/">NASA</a> or <a href="http://www.lego.com/eng/info/default.asp?page=vacancies">Lego</a> opens up. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2007/01/24/feeling-lucky-from-thoughtworker-to-noogler/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A new litmus test for evaluating Python web frameworks &#8212; What&#8217;s your security policy?</title>
		<link>http://www.jrandolph.com/blog/2006/08/10/a-new-litmus-tests-for-evaluating-python-web-frameworks-whats-your-security-policy/</link>
		<comments>http://www.jrandolph.com/blog/2006/08/10/a-new-litmus-tests-for-evaluating-python-web-frameworks-whats-your-security-policy/#comments</comments>
		<pubDate>Thu, 10 Aug 2006 15:36:47 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>rails</category>

		<category>python</category>

		<category>development</category>

		<category>django</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/?p=45</guid>
		<description><![CDATA[<p>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&#8217;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 [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>With the almost <a href="http://antony.lesuisse.org/qweb/trac/">daily</a> <a href="http://pylonshq.com/">announcement</a> of <a href="http://rhubarbtart.org/">new</a> <a href="http://www.cleverharold.org/">Python-based</a> web frameworks, there needs to be a way to filter the contenders from the pretenders. I&#8217;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.</p>

<p>The <a href="http://weblog.rubyonrails.com/2006/8/9/rails-1-1-5-mandatory-security-patch-and-other-tidbits">recent security hole in Rails</a> 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.</p>

<p>So to jump start my web framework evaluation checklist, I&#8217;m adding &#8220;What&#8217;s your policy on how you deal with security holes&#8221; to the top of the list. Django is pretty up-front and clear with their <a href="http://www.djangoproject.com/documentation/contributing/#reporting-security-issues">stated policy</a>. Importantly, they explicitly state they will support patches for the current release at that time and the two previous releases. I&#8217;m still a little fuzzy on how much time is covered by &#8220;a current + 2 previous releases&#8221; policy. And I&#8217;m also a little fuzzy on exactly where I should look to be notified about such an event. But already, Django&#8217;s explicit policy is better than Rails implicit policy of &#8220;upgrade now, cause you should have been keeping up-to-date anyway.&#8221; Given the recent announcement of <a href="http://weblog.rubyonrails.com/2006/8/7/ruby-on-rails-will-ship-with-os-x-10-5-leopard">Rails shipping with Mac OS X - 10.5 (Leopard)</a>, how security issues are dealt with and disseminated becomes even more important to get right.</p>

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

<p>On that note, help me flesh out my web framework evaluation checklist! What question would you add? And don&#8217;t say: &#8220;But does it scale?&#8221; :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2006/08/10/a-new-litmus-tests-for-evaluating-python-web-frameworks-whats-your-security-policy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>On Selenium and language design&#8230;</title>
		<link>http://www.jrandolph.com/blog/2006/08/01/on-selenium-and-language-design/</link>
		<comments>http://www.jrandolph.com/blog/2006/08/01/on-selenium-and-language-design/#comments</comments>
		<pubDate>Tue, 01 Aug 2006 16:57:04 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>development</category>

		<category>selenium</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/?p=44</guid>
		<description><![CDATA[<p>Lately, I&#8217;ve had language design on the brain. In short, I&#8217;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&#8217;s a [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>Lately, I&#8217;ve had language design on the brain. In short, I&#8217;m working to make <a href="http://www.openqa.org/selenium-core/">Selenium</a> tests <a href="http://en.wikipedia.org/wiki/Turing-complete">Turing complete</a>. 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 <a href="http://wiki.openqa.org/display/SEL/flowControl">flowControl</a>. Not that it&#8217;s a bad thing, this &#8220;limitation&#8221; is also considered newbie-friendly simplicity by many users of Selenium. (Here, I&#8217;m talking about the in-browser core of Selenium, you can get all kinds of Turing complete testing goodness using <a href="http://www.openqa.org/selenium-rc/">Selenium Remote Control</a> on the server side with Java, C#, Ruby, Python, or Perl.)</p>

<p>I&#8217;ve had early success integrating Brendan Eich&#8217;s excellent <a href="http://en.wikipedia.org/wiki/Narcissus_(JavaScript_engine)">Narcissus JavaScript</a> 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&#8211; blocking code. In &#8220;Plain Old JavaScript&#8221;, you can&#8217;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&#8217;s existence. It looks like the <a href="http://neilmix.com/narrativejs/doc/">Narrative JavaScript</a> project was created for this same reason, and it also (!) uses the Narcissus engine to work its magic. The difference here in what I&#8217;m doing vs what Narrative JS is doing is that my code doesn&#8217;t require a server-side compilation step. &#8220;Selenium JavaScript&#8221; is all done in the browser. </p>

<p>I&#8217;ve also dabbled with extending Narcissus and reimplementing my favorite language of all time&#8211; <a href="http://en.wikipedia.org/wiki/HyperTalk">HyperTalk</a>&#8211; in JavaScript as a syntactically sugar sweet &#8220;super-set&#8221; of JavaScript, so I&#8217;ll have a &#8216;native-in-the-browser&#8217; testing language for Selenium (a &#8216;<a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html">DSL</a> for testing&#8217;, if you will), with no server-side dependencies (like Ruby, Java, Python, etc.). But this is slower going &#8212; 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&#8217;ll be rather straight forward to port the <a href="http://wtr.rubyforge.org/watir_user_guide.html">Watir API</a> to Selenium JavaScript for in-browser tests. I hope this raises a few eyebrows and generates some smiles with the Watir developers. :-)</p>

<p>On a side note, I&#8217;ve found <a href="http://press.samedi-studios.com/drafts/jones2004pl4li.plopD5/jones2004pl4li.pdf">A Pattern Language for Language Implementation</a> (PDF) and the <a href="http://littlelanguages.com/">Little Languages blog</a> 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 <em>very useful</em> for prototyping your own little language. A few years ago, everyone was talking about design patterns. So design patterns for DSLs?! Man, I can&#8217;t imagine the cocktail conversations this is going to generate!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2006/08/01/on-selenium-and-language-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaScript is the new C</title>
		<link>http://www.jrandolph.com/blog/2006/07/21/javascript-is-the-new-c/</link>
		<comments>http://www.jrandolph.com/blog/2006/07/21/javascript-is-the-new-c/#comments</comments>
		<pubDate>Fri, 21 Jul 2006 17:09:55 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>development</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/?p=43</guid>
		<description><![CDATA[<p>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.</p>
]]></description>
			<content:encoded><![CDATA[<p>A thread came up last week about JavaScript on the <a href="http://rudolphheringsociety.org">Rudolph Hering Society</a> list. I promised to repost my thoughts as a blog post for a larger audience to dissect:</p>

<p><a href="http://redsquirrel.com/dave/">Dave Hoover</a> wrote:</p>

<blockquote>
  <p>Not everyone hates JavaScript.  After digging deeply into (Chicago
  resident) Sam Stephenson&#8217;s wonderful <a href="http://prototype.conio.net/">Prototype</a>
  framework, extending it, and using it
  extensively, I can honestly say I enjoy working with JavaScript. </p>
</blockquote>

<p>I came to a similar point in the development of <a href="http://openqa.org/selenium/">Selenium</a>.  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&#8230; Sam took a different path and wrote a code library, instead. But the motivation was probably the same.</p>

<p>To kinda hate something at first, but then grow to love it&#8230; I believe it&#8217;s called  &#8220;<a href="http://en.wikipedia.org/wiki/Stockholm_syndrome">Stockholm Syndrome</a>&#8220;.</p>

<p>I agree when Dave said, &#8220;At least for now, I&#8217;d rather deal with JavaScript directly than have it generated for me by another language.&#8221; But I don&#8217;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&#8217;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&#8217;t have to do the same.</p>

<p>However, when you write to the C platform, everyone can talk to you with ease. For example, there have been lots of &#8216;mini&#8217; SQL database engines implemented for every language. <a href="http://gadfly.sourceforge.net/">Gadfly</a> is the one I know about for Python. <a href="http://www.hsqldb.org/">HSQL</a> for Java. But <a href="http://www.sqlite.org/">SQLite</a> is becoming quite popular across all languages because it is &#8220;100% Pure C&#8221;. So support and docs get better because a larger community of developers can make use of the code. Another example&#8211; YAML libraries&#8230;. Because _why wrote <a href="http://whytheluckystiff.net/syck/">Syck</a> 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.</p>

<p>In a similar fashion, because Sam&#8217;s Prototype library is 100% JavaScript, it&#8217;s now used by PHP, Ruby, Perl, Python, Java, and .Net shops. And that&#8217;s the best empirical argument I can think of that JavaScript is the new C.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2006/07/21/javascript-is-the-new-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>See Spot Test Django</title>
		<link>http://www.jrandolph.com/blog/2006/07/07/see-spot-test-django/</link>
		<comments>http://www.jrandolph.com/blog/2006/07/07/see-spot-test-django/#comments</comments>
		<pubDate>Fri, 07 Jul 2006 19:25:43 +0000</pubDate>
		<dc:creator>Jason Huggins</dc:creator>
		
		<category>python</category>

		<category>development</category>

		<category>django</category>

		<category>selenium</category>

		<guid isPermaLink="false">http://www.jrandolph.com/blog/?p=42</guid>
		<description><![CDATA[<p>Here is some &#8220;science fiction&#8221; I&#8217;m working on at the moment for testing the Django admin app with Selenium. I call it science fiction because the I&#8217;m still working on the code that will actually read this and execute it correctly in the browser. </p>

<p>I imagine the source document will be HTML with a scent [...]</p>
]]></description>
			<content:encoded><![CDATA[<p>Here is some &#8220;science fiction&#8221; I&#8217;m working on at the moment for testing the Django admin app with Selenium. I call it science fiction because the I&#8217;m still working on the code that will actually read this and execute it correctly in the browser. </p>

<p>I imagine the source document will be HTML with a scent of ReStructuredText and a dash of Doctest. The intention is that the &#8220;doctest&#8221; code is written in JavaScript, interpreted and executed by the Selenium engine on the fly inside the browser.</p>

<pre>
----- begin 'spot test' source code ----------

========================
See.Spot.Login.to.Django
========================

To modify data in Django, you'll need to login to the 
administrative application with your username and 
password. For the purposes of this demonstration, 
I'll assume you are a dog and that your name is 'Spot'.

First, please navigate to the login page.

  >>> see.spot.open.the.url ('http://localhost:8080/admin')


You should now see a page with a form asking for 
username and password. 

  >>> var username = see.spot.get ('username')
  >>> var password = see.spot.get ('password')

  >>> see.spot.type(username).into.the.field.id ('username')
  >>> see.spot.type(password).into.the.field.id ('password')
  >>> see.spot.click.the.button.where ('id', 'submit')


Verify that you're now logged in and that you see 
the main administrative dashboard.

  >>> see.spot.verify.page.text.containts ('Welcome, Spot')
  >>> see.spot.verify.existence.of.link ('text', 'Log out')


==========================
See.Spot.Log.out.of.Django
==========================

When you're done editing data in Django, it's good 
practice to log out. Logging out will expire your session 
cookie and prevent other people from using your login 
credentials with the same computer and browser.

  >>> see.spot.click.the.link.where ('id', 'logout')
  >>> see.spot.verify.page.text.contains ('Thanks')
  >>> see.spot.verify.exisitence.of.link ('text', 'Log in again')


You are now logged out! Good boy, Spot!  

----- end ----------------------------------
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jrandolph.com/blog/2006/07/07/see-spot-test-django/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
