<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Adam Christian</title>
	<atom:link href="http://adamchristian.com/feed" rel="self" type="application/rss+xml" />
	<link>http://adamchristian.com</link>
	<description>Writing about Life, Business and Technology - the way I see it.</description>
	<pubDate>Wed, 19 Nov 2008 12:20:43 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>Windmill Gets a Facelift for 1.0Beta1</title>
		<link>http://adamchristian.com/archives/56</link>
		<comments>http://adamchristian.com/archives/56#comments</comments>
		<pubDate>Wed, 19 Nov 2008 12:11:36 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[Windmill]]></category>

		<category><![CDATA[automation]]></category>

		<category><![CDATA[windmill-dev]]></category>

		<category><![CDATA[1.0]]></category>

		<category><![CDATA[Beta]]></category>

		<category><![CDATA[IDE]]></category>

		<category><![CDATA[Mozmill]]></category>

		<category><![CDATA[release]]></category>

		<category><![CDATA[testing]]></category>

		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=56</guid>
		<description><![CDATA[Working up to the Windmill 1.0 Beta 1 Release, I finally had the opportunity to put some time into making the IDE (that a lot of you live in when in test writing mode) a little bit nicer to look at.
The IDE has been growing organically since 0.1 and there was a lot of functionality [...]]]></description>
			<content:encoded><![CDATA[<p>Working up to the <a href="http://www.getwindmill.com/archives/315">Windmill 1.0 Beta 1 Release</a>, I finally had the opportunity to put some time into making the IDE (that a lot of you live in when in test writing mode) a little bit nicer to look at.</p>
<p>The IDE has been growing organically since 0.1 and there was a lot of functionality hacked into it that wasn&#8217;t in the original game plan, so I did what I could to improve the beauty of the CSS/Layout as well as the whole mess of code behind it.</p>
<p><img style="float:right;position:relative;" title="loading" src="http://www.adamchristian.com/wp-content/uploads/2008/11/loading.png" alt="" width="244" height="127" /><br />
<strong>Launching</strong><br />
If you have used our latest release, or are running trunk you know that we have significantly improved the load times for the Windmill IDE. By compressing the JavaScript when the service is instantiated we can simply hand the IDE window one file that contains the vast majority of the required code.</p>
<p>The reason that this makes such a huge performance difference is because we are loading the source via the local windmill proxy and the data size size had very little impact, the overhead was in the browser two connection limit. When you have to pull down ~30 files two at a time it takes its toll and made the IDE feel very sluggish and more like a web page loading than an IDE.</p>
<p>In the process of figuring out exactly what was slowing down the launch time we added some more informative messages and output so you don&#8217;t sit there staring at a twirling circle graphic wondering if anything is happening. And to make the experience even more fun, I couldn&#8217;t help but implement a progress bar.</p>
<p><strong>General Layout</strong><br />
I removed the toolbar at the bottom of the screen, which I felt it was an irritation for test editing (especially with the drag and droppable actions). It is now in a drop down menu at the top right of the screen, with the rest of the UI access to IDE functions.<br />
<img class="size-full wp-image-60 alignleft" title="gen_layout0" src="http://www.adamchristian.com/wp-content/uploads/2008/11/gen_layout0.png" alt="" width="216" height="62" /><img class="size-full wp-image-62 alignright" title="gen_layout2" src="http://www.adamchristian.com/wp-content/uploads/2008/11/gen_layout2.png" alt="" width="198" height="88" /><br />
<img class="size-full wp-image-61 aligncenter" title="gen_layout1" src="http://www.adamchristian.com/wp-content/uploads/2008/11/gen_layout1.png" alt="" width="218" height="58" /></p>
<p><strong>Settings and Firebug Lite Improvements</strong><br />
The settings dialog has continued to improve by implementing more useful defaults, adding new options, removing deprecated options and simply making it just look better. Thanks jQuery UI!</p>
<p><img class="alignnone size-full wp-image-63" title="wm_settings" src="http://www.adamchristian.com/wp-content/uploads/2008/11/wm_settings.png" alt="" width="298" height="328" /></p>
<p>Firebug Lite has been a very popular feature since we first announced it, which has led to a handful of bug fixes over the last month. The most major of these was that the initial Windmill implementation of Firebug Lite required you to have Internet access as it was using resources that were hosted elsewhere.</p>
<p>These have since been copied to our source tree and are made available by the Windmill server so you can happily introspect your Web Apps JavaScript while writing tests on your Intranet.</p>
<p><img class="alignnone size-full wp-image-64" title="fblite1" src="http://www.adamchristian.com/wp-content/uploads/2008/11/fblite1.png" alt="" width="342" height="375" /><br />
<img class="alignnone size-full wp-image-65" title="fblite2" src="http://www.adamchristian.com/wp-content/uploads/2008/11/fblite2.png" alt="" width="393" height="449" /></p>
<p><strong>Output and Performance</strong><br />
Instead of writing all the raw windmill output to the output and performance tabs there is now an array called windmill.errorArr, where all terrible errors and warnings about technical details are pushed in the case you are interested to see all that data. However, it&#8217;s more likely that you aren&#8217;t and scrolling through all that output data becomes tedious.</p>
<p>This is why we have implemented output in blocks with the background color representing pass/failure with green/red (white for performance). These blocks are expandable, clicking them will reveal all output (or performance information) we know about the action that was executed. This should give you a faster general overview of your results and allow you to quickly see the details you care about.</p>
<p><img class="alignnone size-full wp-image-67" title="output" src="http://www.adamchristian.com/wp-content/uploads/2008/11/output.png" alt="" width="406" height="240" /><br />
<img class="size-full wp-image-68 alignnone" title="perf" src="http://www.adamchristian.com/wp-content/uploads/2008/11/perf.png" alt="" width="406" height="257" /></p>
<p><strong>Other Worthwhile Mentions</strong><br />
We moved our XPath implementation from Ajax-Slt to JS-XPath, which has proven to be more accurate when it comes to resolving XPath generated in Firefox (or using Firebug) against non XPath native browsers such as IE.</p>
<p>Many bugs and improvements have been made to the DOM Explorer, which should now feel a lot more like the Firebug DOM inspector, but should work in any browser.</p>
<p style="text-align: center;"><img class="size-full wp-image-66 aligncenter" title="dx" src="http://www.adamchristian.com/wp-content/uploads/2008/11/dx.png" alt="" width="500" height="150" /></p>
<p>We have also put a lot of effort into improving the communication between the JavaScript Controller and the Python Service so that when a test fails you get as much detailed information in the service as you do in the IDE.</p>
<p style="text-align: center;"><img class="size-full wp-image-69 aligncenter" title="stdout" src="http://www.adamchristian.com/wp-content/uploads/2008/11/stdout.png" alt="" width="500" height="74" /></p>
<p><strong>Timing and MozMill</strong><br />
The timing has lined up nicely as we are working on both a 1.0 release for <a href="http://www.getwindmill.com">Windmill</a> and <a href="http://code.google.com/p/mozmill/">MozMill</a>. MozMill is geared towards automated testing of all applications on the Mozilla Platform and functions in the trusted space providing lots of very useful flexibility.</p>
<p>You can currently try out <a href="https://addons.mozilla.org/en-US/firefox/addon/9018">MozMill 1.0rc1 as a Firefox Add-on</a>, and keep your eyes pealed as some exciting new MozMill feature work is around the corner.</p>
<p><strong>Participate</strong><br />
We are always trying to make life easier for the test writer, so please <a href="http://trac.getwindmill.com/report">log your bugs</a> and feel free to come <a href="http://freenode.net/">chat with us in #windmill on FreeNode</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/56/feed</wfw:commentRss>
		</item>
		<item>
		<title>Zero to Continuous Integration with Windmill</title>
		<link>http://adamchristian.com/archives/43</link>
		<comments>http://adamchristian.com/archives/43#comments</comments>
		<pubDate>Fri, 19 Sep 2008 06:29:58 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Slide]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[Windmill]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[automation]]></category>

		<category><![CDATA[continuous integration]]></category>

		<category><![CDATA[hudson]]></category>

		<category><![CDATA[windmill-dev]]></category>

		<category><![CDATA[continuous]]></category>

		<category><![CDATA[integration]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=43</guid>
		<description><![CDATA[Following &#8216;automation&#8217; and &#8216;continuous integration&#8217; in the micro blogging world I have seen a major influx in people being super interested in functionally automating their web apps. I have seen a slew of things about Grid, and Selenium, and people hacking on Watir so I decided to show you from the ground up how incredibly [...]]]></description>
			<content:encoded><![CDATA[<p>Following &#8216;automation&#8217; and &#8216;continuous integration&#8217; in the micro blogging world I have seen a major influx in people being super interested in functionally automating their web apps. I have seen a slew of things about Grid, and Selenium, and people hacking on Watir so I decided to show you from the ground up how incredibly easy it is to get automated test running setup using <a href="http://www.getwindmill.com">Windmill</a> and <a href="http://hudson.gotdns.com/wiki/display/HUDSON/Meet+Hudson#Installation">Hudson</a>. I am not going to walk you through every detail, this is much more high level but I do plan to start a &#8216;continuous integration&#8217; page on getwindmill.com in the near future for those kinds of details.</p>
<p>The first step is to get a couple machines that you want use as slaves and a machine to run Hudson, our setup looks like this:</p>
<p><a href="http://adamchristian.com/wp-content/uploads/2008/09/arch.png"><img class="alignnone size-medium wp-image-44" title="Windmill/Hudson Arch" src="http://adamchristian.com/wp-content/uploads/2008/09/arch.png" alt="" width="291" height="191" /></a></p>
<p>Each of the machines with a different OS has <a href="http://www.getwindmill.com">Windmill</a> installed. To make them slaves you simply bring up the Hudson web page on the machine, and run the launcher.. now it&#8217;s a slave &#8212; crazy easy right?</p>
<p>Now to setup test runs for the machines, in Hudson you click: &#8220;New Job&#8221; on the left hand side and do something like the following:</p>
<p><strong>Tie this job to the slave you want it to run on (we can&#8217;t have IE runs happening on MacOSX):<br />
</strong><span style="color: #0000ee;"><span style="color: #000000;"><img class="alignnone size-full wp-image-55" title="tie_node" src="http://adamchristian.com/wp-content/uploads/2008/09/tie_node.png" alt="" width="500" height="55" /></span></span></p>
<p><strong>Tell this job to run 10 and 30 minutes after the hour:<br />
</strong><a href="http://adamchristian.com/wp-content/uploads/2008/09/build_periodic2.png"><img class="alignnone size-full wp-image-50" title="build_periodic2" src="http://adamchristian.com/wp-content/uploads/2008/09/build_periodic2.png" alt="" width="500" height="69" /></a></p>
<p><strong>The build steps to actually run the tests, the first kills any straggling processes (more details below):<br />
</strong><a href="http://adamchristian.com/wp-content/uploads/2008/09/build_steps1.png"><img class="alignnone size-full wp-image-51" title="build_steps" src="http://adamchristian.com/wp-content/uploads/2008/09/build_steps1.png" alt="" width="353" height="328" /></a></p>
<p>On the Mac for the Safari job, I want to make sure there aren&#8217;t any instances of Safari left hanging, or windmill processes sitting around so we do:<br />
<code>ps -ax | grep windmill | awk '{ print $1 }' | xargs kill  | true<br />
ps -ax | grep Safari | awk '{ print $1 }' | xargs kill | true<br />
</code></p>
<p>Then we want to grab the latest test code from svn and launch the windmill test:<br />
<code>svn up /Users/adam/Documents/main_bt/windmill/<br />
python /usr/local/bin/windmill safari http://www.facebook.com test=/Users/adam/Documents/main_bt/windmill/fb email=username@slide.com password=pass report=true exit<br />
rm /Users/adam/Library/Cookies/Cookies.plist<br />
</code></p>
<p>I am telling windmill to run a test against facebook.com, with the test hierarchy in the windmill/fb directory in Safari, with the provided email and password, then to report it&#8217;s results and exit.</p>
<p>The only thing different on our windows test runs is the way we kill the processes:<br />
Example:<br />
<code>taskkill /F /T /IM windmill.exe<br />
taskkill /F /T /IM firefox.exe<br />
</code></p>
<p>You might be asking how do I use those variables, check it out in my setup module:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> setup_module<span style="color: black;">&#40;</span>module<span style="color: black;">&#41;</span>:
    client = WindmillTestClient<span style="color: black;">&#40;</span>__name__<span style="color: black;">&#41;</span>
    client.<span style="color: #008000;">type</span><span style="color: black;">&#40;</span>text=functest.<span style="color: black;">registry</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'email'</span><span style="color: black;">&#93;</span>, <span style="color: #008000;">id</span>=u<span style="color: #483d8b;">'email'</span><span style="color: black;">&#41;</span>
    client.<span style="color: #008000;">type</span><span style="color: black;">&#40;</span>text=functest.<span style="color: black;">registry</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'password'</span><span style="color: black;">&#93;</span>, <span style="color: #008000;">id</span>=u<span style="color: #483d8b;">'pass'</span><span style="color: black;">&#41;</span>
    client.<span style="color: black;">click</span><span style="color: black;">&#40;</span><span style="color: #008000;">id</span>=u<span style="color: #483d8b;">'doquicklogin'</span><span style="color: black;">&#41;</span>
    client.<span style="color: black;">waits</span>.<span style="color: black;">forPageLoad</span><span style="color: black;">&#40;</span>timeout=u<span style="color: #483d8b;">'100000'</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>You can also read a great entry about adding reporting to your tests on Mikeal Rogers blog, <a href="http://www.mikealrogers.com/archives/46">here.</a></p>
<p>And that last line removing Cookies.plist makes sure that the next test run starts without any cookies set to cause problems.</p>
<p><strong>Have Hudson keep you updated on Jabber:</strong></p>
<p><a href="http://adamchristian.com/wp-content/uploads/2008/09/jabber1.png"><img class="alignnone size-full wp-image-52" title="jabber1" src="http://adamchristian.com/wp-content/uploads/2008/09/jabber1.png" alt="" width="500" height="97" /></a></p>
<p><strong>Grab the generated XML output so you can view the test results in Hudson:</strong></p>
<p><img class="alignnone size-full wp-image-54" title="publish_junit" src="http://adamchristian.com/wp-content/uploads/2008/09/publish_junit.png" alt="" width="500" height="58" /></p>
<p><strong>Do this for each of the test runs you would like to have, and boom &#8212; continuous integration:</strong></p>
<p><a href="http://adamchristian.com/wp-content/uploads/2008/09/jobs_dash1.png"><img class="alignnone size-medium wp-image-53" title="jobs_dash" src="http://adamchristian.com/wp-content/uploads/2008/09/jobs_dash1-300x148.png" alt="" width="300" height="148" /></a></p>
<p>This is obviously a simple scenario, and you can do way, way more customization.. but this should get you off the ground. Happy testing!</p>
<p><span style="text-decoration: underline;"><br />
</span><br />
 </p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/43/feed</wfw:commentRss>
		</item>
		<item>
		<title>Bringing Windmill to Life</title>
		<link>http://adamchristian.com/archives/41</link>
		<comments>http://adamchristian.com/archives/41#comments</comments>
		<pubDate>Thu, 04 Sep 2008 06:42:28 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[Windmill]]></category>

		<category><![CDATA[windmill-dev]]></category>

		<category><![CDATA[automation]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[feedback]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[project]]></category>

		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=41</guid>
		<description><![CDATA[
Project Status
I have spent nearly every day since July 7th working to bring the Windmill Project up to a level where it can be used reliably in a production environment. Our mission starts with &#8220;Windmill is a web testing framework intended for complete automation of user interface testing&#8221;, of course this refers to the web [...]]]></description>
			<content:encoded><![CDATA[<p><img style="position:relative;float:right;" title="Windmill Logo" src="http://adamchristian.com/wp-content/uploads/2008/09/wlogo.png" alt="Windmill Logo" width="120" height="117" /></p>
<p><strong>Project Status</strong></p>
<p>I have spent nearly every day since July 7th working to bring the <a href="http://www.getwindmill.com">Windmill Project</a> up to a level where it can be used reliably in a production environment. Our mission starts with <em>&#8220;Windmill is a web testing framework intended for complete automation of user interface testing&#8221;</em>, of course this refers to the web including everything and anything inside the browser window. This turns out to be a very large task, one that only an Open Source labor of love could possibly attempt to accomplish.</p>
<p>Windmill has slowly evolved as a project with user contributions, a moderately active IRC channel, and enough users to keep me from forgetting what a useful and powerful tool it is. When I was offered the opportunity to work on the project I quickly saw how much needed to be done in order to get to where we needed to be. We still aren&#8217;t quite there, and like most Open Source projects we might not ever get to the envisioned perfection, however recently we hit a very important milestone. The project is now fully hosted and run by the committers, and in many ways &#8220;Grown Up&#8221;, thanks to a lot of good advise and hard work. The milestone we have reached, is that Windmill is ready for YOU to use. This week we pushed 0.8.2, which is a release that has addressed all of the major issues that we know about and have discovered with heavy usage over the past months. Our hopes are that you will go install Windmill 0.8.2 and things will just WORK. If not, I can&#8217;t wait to get your issues in trac and see what we can do to fix them.</p>
<p><strong>Priorities</strong></p>
<p>The main things we care about when it comes to our web testing tools:</p>
<ul>
<li>Low barrier to entry, low learning curve, and ease of use</li>
<li>Thorough documentation, community and project support</li>
<li>Support for the big 3 platforms; Windows, MacOSX and Linux</li>
<li>Support for the big 4 browsers; Firefox, IE, Safari and Opera</li>
<li>Easy integration with continuous integration tools</li>
<li>Reliability; developers aren&#8217;t going to pay attention if the failures aren&#8217;t real</li>
<li>A really nice looking logo, and a web site that is easy on the eyes..</li>
</ul>
<p>There are always more features to implement, but Windmill hasn&#8217;t needed new features for a very long time. What Windmill needed was some serious QA, some code cleanup and a whole mess of bug fixes. If you look through the <a href="http://trac.getwindmill.com/timeline?from=09%2F04%2F2008&amp;daysback=100&amp;ticket=on&amp;changeset=on&amp;milestone=on&amp;wiki=on&amp;update=Update">Trac Timeline</a> you will see the massive amounts of all of the above that have happened and I am proud as hell when I launch the application today and see all that it can do.</p>
<p><strong>What can Windmill do?</strong></p>
<p>Windmill offers the ability to build, write, record and run tests as well as aid in debugging and development. In addition, the framework provides the ability to create and maintain hierarchies of smart and thorough tests that will ensure the quality of your web applications over time. Not only can we save you hours creating and maintaing tests, but we can also help you see your web application as a growing feature rich product, instead of a QA nightmare.</p>
<p>Many tools out there provide ways to write tests, some even provide recorders and DOM explorers, but none that I have ever seen provide this rich functionality cross platform and cross browser, which is really what is required in order to build a thorough test repository that represents all your possible users.</p>
<p>The current set of major features can be found at the <a href="http://www.getwindmill.com/features">Windmill Features Page</a> as well as more details about what is currently available. One of the more exciting new features is the full integration with <a href="http://getfirebug.com/lite.html">Firebug Lite</a>. Web developers rely on the existence of Firebug in order to quickly build and debug web applications, and Firebug Lite is the next best thing. It&#8217;s hard to even describe how useful it has been to instantly access the JavaScript Console and DOM inspector in IE to debug a failing test. As the Open Source community grows, and tools are improved and brought to light, I think it&#8217;s very important to do everything we can to utilize these tools and use them to enhance the Windmill Framework.</p>
<p><strong>Keeping it Open</strong></p>
<p>The Open Source aspect of Windmill has turned out to be it&#8217;s greatest asset. The project is almost entirely written in JavaScript and Python, which instantly gives us many advantages over the competition. The JavaScript community is constantly evolving and is most certainly the futures technology platform. Python has a very strong community as well and has given us immense amounts of functionality and flexibility right out of the box.</p>
<p>One of the most exciting things to me personally about this particular project is the immense potential user base out there, and the large impact the Windmill Tools can have on the daily work flow of it&#8217;s users. Windmill was obviously inspired with the hopes of minimizing the need for manual testing of rich web applications, and has grown to be much more than that.</p>
<p>The future of the work to be done on Windmill will primarily be driven by the needs of it&#8217;s users, the changes and development of the industry and the success of it reaching the goal, to make web automation better.</p>
<p><strong>Moving Forward</strong></p>
<p>Concluding this major push of work, testing, documentation and moving of infrastructure; we now need to see how the community feels. There are lots of choices out there for web automation and we have made many differentiating choices along the way. It is now time to get the word out and take in some real feedback.</p>
<p>Thanks you all for input, contributions, patience and valuable feedback. Those of you who spent many hours on Freenode in #windmill with us debugging and hunting down those spastic blockers are troopers and we really appreciate it.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/41/feed</wfw:commentRss>
		</item>
		<item>
		<title>JUnit Compatible Reporting for Windmill</title>
		<link>http://adamchristian.com/archives/40</link>
		<comments>http://adamchristian.com/archives/40#comments</comments>
		<pubDate>Fri, 29 Aug 2008 19:52:38 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Slide]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Windmill]]></category>

		<category><![CDATA[windmill-dev]]></category>

		<category><![CDATA[continuous]]></category>

		<category><![CDATA[integration]]></category>

		<category><![CDATA[reporting]]></category>

		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=40</guid>
		<description><![CDATA[A large part of the utility in a testing framework like Windmill is the ability to interoperate with a continuous integration environment. Much of the work that has gone into Windmill recently has been the result of continuous integration needs. There are many ways to do this with existing software packages out there that include [...]]]></description>
			<content:encoded><![CDATA[<p>A large part of the utility in a testing framework like Windmill is the ability to interoperate with a continuous integration environment. Much of the work that has gone into Windmill recently has been the result of continuous integration needs. There are many ways to do this with existing software packages out there that include <a href="http://www.mozilla.org/projects/tinderbox/">Tinderbox</a>,<a href="http://buildbot.net/trac">Buildbot</a> and <a href="http://cruisecontrol.sourceforge.net/">Cruise Control</a> however we picked <a href="https://hudson.dev.java.net/">Hudson</a> as a result of the super small learning overhead and amazing simplicity required to setup slaves on the network.</p>
<p>One of the requirements of course for parsing results is the need for JUnit compatible XML output from the Windmill test runs. I don&#8217;t claim to be a Python wizard, or a XML/Java wizard for that matter but it wasn&#8217;t that painful to hammer out a function to generate some minimal output to get the process off the ground.</p>
<p>I would love to get a wiki page up on <a href="http://www.getwindmill.com">Get Windmill</a> to start documenting the many ways to use Windmill in a continuous integration environment. So let me know if you have a working setup and would like to contribute.</p>
<p><strong>Example Reporting Excerpt from <em>__init__.py</em>:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> functest <span style="color: #ff7700;font-weight:bold;">import</span> reports
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">datetime</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">datetime</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> JUnitReport<span style="color: black;">&#40;</span>reports.<span style="color: black;">FunctestReportInterface</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> summary<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, test_list, totals_dict, stdout_capture<span style="color: black;">&#41;</span>:
&nbsp;
        total_sec = 0
        <span style="color: #ff7700;font-weight:bold;">for</span> entry <span style="color: #ff7700;font-weight:bold;">in</span> test_list:
            time_delta = entry.<span style="color: black;">endtime</span> - entry.<span style="color: black;">starttime</span>
            total_sec += time_delta.<span style="color: black;">seconds</span> 
        out = <span style="color: #483d8b;">'&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<span style="color: #000099; font-weight: bold;">\n</span>'</span>
        out += <span style="color: #483d8b;">'&lt;testsuite errors=&quot;'</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>totals_dict<span style="color: black;">&#91;</span><span style="color: #483d8b;">'fail'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'&quot; failures=&quot;'</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>totals_dict<span style="color: black;">&#91;</span><span style="color: #483d8b;">'fail'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'&quot; name=&quot;windmill.functional&quot; tests=&quot;'</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>test_list<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'&quot; time=&quot;'</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>total_sec<span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'&quot;&gt;<span style="color: #000099; font-weight: bold;">\n</span>'</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">for</span> entry <span style="color: #ff7700;font-weight:bold;">in</span> test_list:
            <span style="color: #ff7700;font-weight:bold;">if</span> entry.<span style="color: black;">result</span> <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">True</span>:    
                entry_time = entry.<span style="color: black;">endtime</span> - entry.<span style="color: black;">starttime</span>
                out += <span style="color: #483d8b;">'&lt;testcase classname=&quot;'</span>+entry.__name__+<span style="color: #483d8b;">'&quot; name=&quot;'</span>+entry.__name__+<span style="color: #483d8b;">'&quot; time=&quot;'</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>entry_time.<span style="color: black;">seconds</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'.'</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>entry_time.<span style="color: black;">microseconds</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'&quot;&gt;<span style="color: #000099; font-weight: bold;">\n</span>'</span>
                out += <span style="color: #483d8b;">'&lt;failure type=&quot;exceptions.AssertionError&quot;&gt;<span style="color: #000099; font-weight: bold;">\n</span>'</span>
                <span style="color: #808080; font-style: italic;">#out += str(stdout_capture)</span>
                <span style="color: #808080; font-style: italic;">#until I can figure out how to get the traceback</span>
                out += <span style="color: #483d8b;">'There was an error in '</span>+ entry.__name__
                out += <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\n</span>&lt;/failure&gt;<span style="color: #000099; font-weight: bold;">\n</span>'</span>
                out += <span style="color: #483d8b;">'&lt;/testcase<span style="color: #000099; font-weight: bold;">\n</span>&gt;'</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                entry_time = entry.<span style="color: black;">endtime</span> - entry.<span style="color: black;">starttime</span>
                out += <span style="color: #483d8b;">'&lt;testcase classname=&quot;'</span>+entry.__name__+<span style="color: #483d8b;">'&quot; name=&quot;'</span>+entry.__name__+<span style="color: #483d8b;">'&quot; time=&quot;'</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>entry_time.<span style="color: black;">seconds</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'.'</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>entry_time.<span style="color: black;">microseconds</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'&quot;&gt;&lt;/testcase&gt;<span style="color: #000099; font-weight: bold;">\n</span>'</span> 
&nbsp;
        out += <span style="color: #483d8b;">'&lt;system-out&gt;&lt;![CDATA[]]&gt;&lt;/system-out&gt;<span style="color: #000099; font-weight: bold;">\n</span>&lt;system-err&gt;&lt;![CDATA[]]&gt;&lt;/system-err&gt;<span style="color: #000099; font-weight: bold;">\n</span>'</span>
        out += <span style="color: #483d8b;">'&lt;/testsuite&gt;'</span>
        f=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'continuous_test.log'</span>,<span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
        f.<span style="color: black;">write</span><span style="color: black;">&#40;</span>out<span style="color: black;">&#41;</span>;
        f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
reports.<span style="color: black;">register_reporter</span><span style="color: black;">&#40;</span>JUnitReport<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Happy automating!</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/40/feed</wfw:commentRss>
		</item>
		<item>
		<title>Windmill-Dev Category</title>
		<link>http://adamchristian.com/archives/39</link>
		<comments>http://adamchristian.com/archives/39#comments</comments>
		<pubDate>Fri, 29 Aug 2008 19:17:46 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Windmill]]></category>

		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=39</guid>
		<description><![CDATA[I have added a windmill-dev category to the site which will not also get picked up by getwindmill.com. Mikeal and I are both going to be aggregating Windmill specific posts to the Get Windmill blog, if you or anyone you know is using and writing about Windmill please let us know and we can talk [...]]]></description>
			<content:encoded><![CDATA[<p>I have added a windmill-dev category to the site which will not also get picked up by getwindmill.com. Mikeal and I are both going to be aggregating Windmill specific posts to the Get Windmill blog, if you or anyone you know is using and writing about Windmill please let us know and we can talk about adding your feed to our syndicator.</p>
<p>There has been a lot of cool stuff going on with Windmill in the last month, expect a very long winded entry from me explaining the state of everything in the next few days.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/39/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mozilla Summit</title>
		<link>http://adamchristian.com/archives/38</link>
		<comments>http://adamchristian.com/archives/38#comments</comments>
		<pubDate>Thu, 31 Jul 2008 00:18:00 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Career]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Slide]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[Windmill]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[99]]></category>

		<category><![CDATA[History]]></category>

		<category><![CDATA[Mobile]]></category>

		<category><![CDATA[Mozmill]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[Organically]]></category>

		<category><![CDATA[planning]]></category>

		<category><![CDATA[qa]]></category>

		<category><![CDATA[rocks]]></category>

		<category><![CDATA[summit]]></category>

		<category><![CDATA[thunderbird]]></category>

		<category><![CDATA[UE]]></category>

		<category><![CDATA[whistler]]></category>

		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=38</guid>
		<description><![CDATA[I am currently up here in Whistler BC for the Mozilla Summit. There is about 400 people here staying at the Westin Resort &#38; Spa up here in scenic Canada. 
The schedule for the con can be found here; http://wiki.mozilla.org/Summit2008/Sessions/Schedule
I do have to say that Mozilla is doing a great job at taking care of all their [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently up here in Whistler BC for the Mozilla Summit. There is about 400 people here staying at the Westin Resort &amp; Spa up here in scenic Canada. </p>
<p>The schedule for the con can be found here; http://wiki.mozilla.org/Summit2008/Sessions/Schedule</p>
<p>I do have to say that Mozilla is doing a great job at taking care of all their contributors and employees this week, and I feel like a lot of progress is being made on many levels. It&#8217;s very useful to see details as to how people are going about this, but it&#8217;s even more useful to see things on a bit higher level. It can be easy to get lost in the forest of Open Source, especially the way that Mozilla builds on things organically. </p>
<p>The sessions are ranging from &#8220;The History of the Browser&#8221; to Mobile, QA, UE/UI, Thunderbird, planning etc. As Moz has people all over the world I am getting to hear some very interesting accents and interpretations of things. At the dinner last night I was sitting across from people from Germany, Macedonia and Israel. Amazing how the Moz projects can cross the globe and still keep communication open with each of it&#8217;s appendages. The keynote from Mitchell Baker and John Lilly gave me a very solid impression of what they feel the company values, where it should be going and most importantly their extreme satisfaction with where it currently is.</p>
<p>Tomorrow I will be doing a session with Mikeal Rogers and Clint Talbert to demo and explain the GristMill XUL testing framework. My piece of this project is called Mozmill, which started out as a straight across port of the Windmill source with the addition of XUL support and has turned into a much more advanced tool that will fill some needs that have existed for a very long time.</p>
<p>I found it interesting to find out that the VP of Engineering Mike Schroepfer announced his departure last week during Oscon. Their have been mixed reactions about this, but many speculations were proven correct today when he announced he was going to facebook, http://blog.mozilla.com/schrep/. The idea of an IPO is can be extremely appealing, apparently they made him an offer he couldn&#8217;t refuse.</p>
<p>This morning we were alerted that tons, literally tons of rock had fallen on the highway 99 which turns out is the most convenient of two possible road trips to get back to Vancouver. We are leaving Friday morning, and the new word is that we will all be loaded onto shuttles to embark on the 7 hour trip back to the airport. This will make for an extremely long day and I am not looking forward to it, but the trip was well worth it and I look forward to getting home and picking up where I left off at Slide.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/38/feed</wfw:commentRss>
		</item>
		<item>
		<title>OSCON 2008 Recap</title>
		<link>http://adamchristian.com/archives/37</link>
		<comments>http://adamchristian.com/archives/37#comments</comments>
		<pubDate>Thu, 31 Jul 2008 00:05:46 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Career]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[booze]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[conference]]></category>

		<category><![CDATA[couchdb]]></category>

		<category><![CDATA[django]]></category>

		<category><![CDATA[location]]></category>

		<category><![CDATA[mapping]]></category>

		<category><![CDATA[open]]></category>

		<category><![CDATA[oscon]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[selenium]]></category>

		<category><![CDATA[source]]></category>

		<category><![CDATA[speaking]]></category>

		<category><![CDATA[testing]]></category>

		<category><![CDATA[watir]]></category>

		<category><![CDATA[Where]]></category>

		<category><![CDATA[Windmill]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=37</guid>
		<description><![CDATA[This year was my second year at OSCON in Portland, and it&#8217;s pretty amazing for me to look back at last July and know that I was working at OSAF. A lot can happen in a year, but what didn&#8217;t surprise me was the amount of people that I interacted with at the con that [...]]]></description>
			<content:encoded><![CDATA[<p>This year was my second year at OSCON in Portland, and it&#8217;s pretty amazing for me to look back at last July and know that I was working at OSAF. A lot can happen in a year, but what didn&#8217;t surprise me was the amount of people that I interacted with at the con that I had met during my OSAF experience.</p>
<p>A few things come to mind when I think about the conference as a whole. First off, who gave OSCON a Ruby adrenaline shot? The Ruby track was pretty extensive, and I would say more prominent even than the Python track this year. I felt like many of the talks were very introductory with very few actual visual demo&#8217;s of things &#8220;working&#8221;. I know that OSCON brings a very diverse crowd.. but please, please come up with some way to show us if things are advanced, or not. I really get absolutely nothing out of introductory level JavaScript sessions, but a title like &#8220;Digging into the guts of JavaScript&#8221; could pretty much mean anything under the sun.</p>
<p>Some of the most interesting talks I attended last year had to do with open mapping and location services, I know you want us to also attend the &#8220;Where&#8221; conference, but these things are part of Open Source and should be represented at OSCON!</p>
<p>I really enjoyed the talk about CouchDB, I hadn&#8217;t heard about it and really enjoyed how it opened my mind up to some new concepts about how your application should interact with a database. I would advise everyone to check it out at http://incubator.apache.org/couchdb/.</p>
<p>Another was the &#8220;Django Tricks&#8221; talk, this was great because he just ran through a bunch of really cool examples &#8212; one of which was introspecting a sqlite db to build models from the schema. Pretty cool stuff! Additionally, I think Ted Leung nailed his talk about &#8220;Open Source Community Antipatterns&#8221;. A lot of the ideas and concepts weren&#8217;t new to me, but it always helps to get a more detailed overview from someone who has seen these patterns repeated over the last 10 years.</p>
<p>The best quote I heard was that the &#8220;Second OSCON starts at 6pm each night.&#8221; I completely agree with this, the social aspect of the conference is invaluable, but be careful about all those free booze &#8212; they sneak up on you if you aren&#8217;t careful.</p>
<p>I do feel as if I should have done a Windmill talk this year, I didn&#8217;t see anything from Selenium or Watir and if we had been a little farther a long with the next iteration on Windmill it would have been a great venue to get some serious exposure. I may attend some other conferences this year, or wait till OSCON next year for Windmill to make it&#8217;s big splash.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/37/feed</wfw:commentRss>
		</item>
		<item>
		<title>Oscon 2008 Schedule</title>
		<link>http://adamchristian.com/archives/36</link>
		<comments>http://adamchristian.com/archives/36#comments</comments>
		<pubDate>Wed, 23 Jul 2008 09:43:13 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Career]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Slide]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[Windmill]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[Computing]]></category>

		<category><![CDATA[Internet]]></category>

		<category><![CDATA[learning]]></category>

		<category><![CDATA[Networking]]></category>

		<category><![CDATA[open]]></category>

		<category><![CDATA[oscon]]></category>

		<category><![CDATA[source]]></category>

		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=36</guid>
		<description><![CDATA[Every year I like to make myself a road map of how I will be spending my time during OSCON. As there are so many interesting possible talks, gatherings and social events it&#8217;s tough to get to all the things you care about.
At this point in my career my focus is on Web Development, Test [...]]]></description>
			<content:encoded><![CDATA[<p>Every year I like to make myself a road map of how I will be spending my time during OSCON. As there are so many interesting possible talks, gatherings and social events it&#8217;s tough to get to all the things you care about.</p>
<p>At this point in my career my focus is on Web Development, Test Automation (specifically for the web &amp; browsers), and social networking. Obviously on a moment by moment basis your interests are pulled in varying directions, but that sums up the bulk of my attention.</p>
<p>If you are interested in the full schedule grid, it can be seen here: <a href="http://en.oreilly.com/oscon2008/public/schedule/grid">Oscon 08 Schedule Grid</a>.</p>
<p><strong>Wednesday</strong></p>
<ul>
<li><em>8:45 AM</em>: Welcome</li>
<li><em>9:30 AM</em>: Keynote</li>
<li><em>10:45 AM</em>: <del datetime="2008-07-23T17:14:50+00:00">&#8220;An Introduction to Ruby Web Frameworks&#8221; (It&#8217;s going to be tough to convince me to move away from Django)</del>&#8220;Changing Education&#8230; Open Content, Open Hardware, Open Curricula&#8221; looks more interesting today.</li>
<li><em>11:35 AM</em>: <del datetime="2008-07-23T17:14:50+00:00">This one is tough, either &#8220;Web Graphics and Animations without Flash&#8221;, &#8220;Beautiful Concurrency with Erlang&#8221;, or</del> &#8220;Beyond REST? Building Data Services with XMPP PubSub&#8221;, &#8220;CouchDB from 10,000 ft&#8221; apparently thats the thing see, or &#8220;What Has Ruby Done for You Lately?</li>
<li><em>12:20 PM</em>: Really important, LUNCH!</li>
<li><em>1:45 PM</em>: <span style="text-decoration: line-through;">Probably &#8220;Thunderbird 3&#8243;,</span> maybe &#8220;The Open-Source Identity Revolution&#8221;</li>
<li><em>2:35 PM</em>: &#8220;Caching and Performance Lessons from Facebook&#8221;, never know when this one might come in handy working for Slide inc.</li>
<li><em>4:30 PM</em>: &#8220;Open Source Community Antipatterns&#8221;, I&#8217;m really looking forward to hearing Ted Leung explain how to NOT run an Open Source Project&#8230;</li>
<li><em>5:30 PM</em>: Probably &#8220;Give your Site a Boost with memcached&#8221;, <span style="text-decoration: line-through;">or &#8220;Shell Scripting Craftmanship&#8221;</span></li>
</ul>
<div><strong>Thursday</strong></div>
<div>
<ul>
<li><em>8:45 AM</em>: Keynote</li>
<li><em>9:30 AM</em>: Keynote</li>
<li><em>10:45 AM: &#8220;</em>Open Source Microblogging&#8221;</li>
<li><em>11:35 AM</em>: &#8220;This is Your PostgreSQL on Drugs&#8221;</li>
<li><em>1:45 PM</em>: &#8220;CSS for High Performance JavaScript UI&#8221;</li>
<li><em>2:35 PM</em>: &#8220;Stupid Django Tricks&#8221;</li>
<li><em>4:30 PM</em>: Either &#8220;Fixing Hard Problems Through Iterative QA and Development&#8221; or &#8220;Effective Software Development with Python, C++, and SWIG&#8221;, as I have worked with both speakers (Clint Talbert, Robin Dunn) respectively. OR &#8220;Machine Learning for Knowledge Extraction from Wikipedia &amp; Other Semantically Weak Sources. This is a hard one..</li>
<li><em>5:20 PM</em>: Couple interesting choices jump out at me here: &#8220;Code is Easy, People are Hard: Developing Meebo&#8217;s Interview Process&#8221;, or &#8220;Designing Political Web Apps for MoveOn.org&#8221; both could be really cool.</li>
</ul>
<div><strong>Friday</strong></div>
<div>
<ul>
<li><em>9:30 AM</em>: Plenary</li>
<li><em>10:45 AM</em>: &#8220;Toward a Strong Open Source Ecosystem&#8221; by Sara Ford at Microsoft? Interested to see what she has to say&#8230;</li>
<li><em>11:35 AM</em>: Oh hell yeah, &#8220;Searching for Neutrinos Using Ope Source at the Bottom of the World&#8221;</li>
<li><em>12:30 PM</em>: Plenary</li>
<li><em>1:30 PM</em>: Plenary, Bye Bye&#8217;s</li>
</ul>
</div>
<div>Off to the train to Seattle&#8230;</div>
<p> </p>
<div>I am going to try a new thing using the Word Press app on my new iPhone 3G, to jot down small blog entries of points during the talks, then fill out the rest of the entry with more detail later.</div>
</div>
<div>It&#8217;s 2:41 now, so lets see if I can get to that 8:45 AM.. yowch.</div>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/36/feed</wfw:commentRss>
		</item>
		<item>
		<title>iPhone 3G &#8212; The Saga Continues.</title>
		<link>http://adamchristian.com/archives/22</link>
		<comments>http://adamchristian.com/archives/22#comments</comments>
		<pubDate>Sat, 12 Jul 2008 02:17:44 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Career]]></category>

		<category><![CDATA[Location Aware]]></category>

		<category><![CDATA[Review]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[2G]]></category>

		<category><![CDATA[3G]]></category>

		<category><![CDATA[activation]]></category>

		<category><![CDATA[Apple]]></category>

		<category><![CDATA[Applications]]></category>

		<category><![CDATA[AT&amp;T]]></category>

		<category><![CDATA[Emeryville]]></category>

		<category><![CDATA[Facebook]]></category>

		<category><![CDATA[fun]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[GPS]]></category>

		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[Pandora]]></category>

		<category><![CDATA[Store]]></category>

		<category><![CDATA[Twitter]]></category>

		<category><![CDATA[Where]]></category>

		<category><![CDATA[Yelp]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=22</guid>
		<description><![CDATA[As you all know &#8212; this morning at 8 AM PST, the new iPhone 3G was made available at Apple and AT&#38;T stores on the west coast. Being a compulsive early adopter of such things, I somehow managed to tear myself out of bed around 6 AM this morning and head down to the Apple [...]]]></description>
			<content:encoded><![CDATA[<p>As you all know &#8212; this morning at 8 AM PST, the new iPhone 3G was made available at Apple and AT&amp;T stores on the west coast. Being a compulsive early adopter of such things, I somehow managed to tear myself out of bed around 6 AM this morning and head down to the Apple Store in Emeryville Califorinia. I arrived somewhere between 6:30 and 6:45 AM, and even though deep down I knew that it was going to be ridiculous &#8212; the whole experience still managed to be much crazier than I expected.<br />
<img src="http://adamchristian.com/wp-content/uploads/2008/07/img_0586-300x225.jpg" alt="" title="Emeryville" width="300" height="225" style="float:right" /></p>
<p>Approaching the Apple Store, every step revealed more and more people waiting in the line that stretched most of the sidewalk in front of the Emeryville Mall. In my relatively delirious state, I excepted the situation and joined Mikeal in the line. About 15 minutes into our wait the Apple Store staff, and Mall security people started alerting people at the end of the line (where we were) that the direction the line was building to the left of the Apple store was going to be in the way of the construction and that they would like everyone to move to the right side of the store, but to stay in the same order. Clearly this is an absolutely ludicrous request considering that no one wants to be there waiting in the line, and everyone will do whatever they can to jump a few spaces. I instantly started walking to the other side of the store where no one was yet, and we found a nice set of steps to sit on about 50 feet from the front doors of the store. Instead of people being annoyed by us, then went ahead and built a new line with us in it putting us significantly closer to the magical new phone than we had been before.</p>
<p>I do have to admit that the fact that the Apple employees were constantly walking up and down the line passing out water, answering questions and passing out necessary information did in fact distract us enough to keep me from losing my mind. The Pandora guys stopped by to chat, and gave out some pretty sweet hats. I have since tried the Pandora App on the new phone and it is really slick, certainly recommended.<br />
<img src="http://adamchristian.com/wp-content/uploads/2008/07/img_0588-225x300.jpg" alt="" title="Emeryville Mall" width="225" height="300" style="float:right"/><br />
<img src="http://adamchristian.com/wp-content/uploads/2008/07/img_0589-300x225.jpg" alt="" title="Emeryville Mall" width="300" height="225"  style="float:right" /><br />
<img src="http://adamchristian.com/wp-content/uploads/2008/07/img_0590-225x300.jpg" alt="" title="Apple Store" width="225" height="300" /></p>
<p>Somewhere around 9:15 we made out way into the store, to be greeted by another line that lasted around 15 minutes before we could actually talk to a sales specialist to do the deed. This is where things started to fall apart for me. My sales specialist (who was a pretty cool guy) disappeared into the back and came back with the box for my new 16g white iPhone 3G and started filling out the hand held device to complete the sale. After inputting all of my information, a big yellow box pops up on his screen saying that I am not eligible for the AT&amp;T price and that my only option is to pay the full $699 to buy the phone without a plan. Considering that I have been with AT&amp;T since the acquisition of Cingular, and my having an iPhone with them for a year I couldn&#8217;t understand that the problem could be. Instantly I got AT&amp;T on the line (which was amazingly fast to get a rep on a day like today) who proceeded to tell me that I had an overdue balance (due yesterday) and that I haven&#8217;t been with AT&amp;T long enough to be eligible for the upgrade and thus will be required to pay full price.</p>
<p>In my delirious state, I considered just paying full boat so I could get the hell out of there &#8212; or cancel my plan and just be done with it all. Instead I asked about three times to talk to a supervisor (to which I was told three times that they couldn&#8217;t &#8220;Override any of the rules&#8221;). I do have to interject that she was polite and could have been much more unpleasant (T-Mobile, Verizon, lets not go there), and a few minutes later I was on the phone with her supervisor. You must keep in mind that my poor sales specialist is standing there, with my phone half rung up (probably there since 6 AM as well) looking at a long day of selling phones, dealing with unruly Apple Fans and possibly having to listen to many unpleasant phone calls to the carrier. The supervisor after a few minutes of back and forth about the situation, and the realization that I was standing here in this situation announced that &#8220;If I pay my overdue balance, I can get the discounted rate.&#8221;, Hallaluia!</p>
<p>I&#8217;m now all paid up and feeling like a dodged a serious bullet, and it&#8217;s time to head to the front of the store to open things up and activate the phone. A woman with a huge camera, filming this whole event asked me a few questions and recorded me opening the phone&#8230; which was sort of strange. I wonder if I&#8217;m going to be on TV somewhere! We plugged the phone in and whala &#8212; a big error pops up from iTunes. We unplugged the phone and tried about 3 more times (as did everyone at the table trying to activate), and then I was released to go finish activation at home.</p>
<p>I&#8217;m not an infrastructure guy by any means, but didn&#8217;t anyone learn ANYTHING from the last time around? Call me crazy, but I would have assumed that this time around the servers for activation would have been beefed up enough to handle the load. The best part is that as soon as I left the store and went to use my iPhone 2G to call people to let them know I had survived and was heading out I received a &#8220;No Service&#8221; notice, and was now unable to use either phone.</p>
<p>I basically sat from 10:30AM to 1:30PM trying about every 5 minutes to activate the new iPhone and received the ugly error each time. FINALLY, it went through &#8212; and I am back to a working state of communication.<br />
<img src="http://adamchristian.com/wp-content/uploads/2008/07/dsc01814-300x225.jpg" alt="" title="iPhone Box" width="300" height="225" style="float:left"/></p>
<p><img src="http://adamchristian.com/wp-content/uploads/2008/07/dsc01815-300x225.jpg" alt="" title="iPhone Box 2" width="300" height="225" style="float:left"/></p>
<p><img src="http://adamchristian.com/wp-content/uploads/2008/07/dsc01816-300x225.jpg" alt="" title="iPhone Close Up" width="300" height="225" style="float:left"/></p>
<p>To answer your questions, yes 3G is that much faster. The screen is a slightly different size, the device is lighter, and thiner and the buttons have been enhanced for more satisfying feedback. The camera looks exactly the same, but the Applications store makes it all worth while. I have been told that the phone has a GPS chipset, but for some reason one Application thinks I&#8217;m in Seattle and Google Maps thinks I&#8217;m in San Ramon &#8212; so there appears to be a problem there. One last quibble &#8212; every time the phone wants to use your location data, a dialog pops up asking you if it&#8217;s okay. I understand the reasoning behind this, but please please please let us turn that off, it&#8217;s getting super annoying.</p>
<p><img src="http://adamchristian.com/wp-content/uploads/2008/07/dsc01817-300x225.jpg" alt="" title="Phone" width="300" height="225" style="float:left" /><br />
<img src="http://adamchristian.com/wp-content/uploads/2008/07/dsc01818-300x225.jpg" alt="" title="Phone" width="300" height="225" style="float:left" /><br />
<img src="http://adamchristian.com/wp-content/uploads/2008/07/dsc01819-300x225.jpg" alt="" title="Phone" width="300" height="225" style="float:left" /><br />
<img src="http://adamchristian.com/wp-content/uploads/2008/07/dsc01821-300x225.jpg" alt="" title="Phone" width="300" height="225" style="float:left" /></p>
<p>The applications I have installed and are really enjoying include:<br />
- Where, Yelp, Google, Facebook, Jott, Remote, CheckPlease, Pandora, Shazam, Evernote, Movies.app, NYTimes, Whrrl, Loopt, and of course &#8212; Twitteriffic.</p>
<p>There are many more apps and games that I am going to explore as soon as I get a moment.</p>
<p>Was it worth it? Of course it was &#8212; all this insanity is half the fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/22/feed</wfw:commentRss>
		</item>
		<item>
		<title>Leaving Rearden Commerce, What&#8217;s Next?</title>
		<link>http://adamchristian.com/archives/20</link>
		<comments>http://adamchristian.com/archives/20#comments</comments>
		<pubDate>Sat, 28 Jun 2008 01:22:39 +0000</pubDate>
		<dc:creator>adam</dc:creator>
		
		<category><![CDATA[Career]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Plans]]></category>

		<category><![CDATA[Slide]]></category>

		<category><![CDATA[Startup]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web]]></category>

		<category><![CDATA[Windmill]]></category>

		<category><![CDATA[Work]]></category>

		<category><![CDATA[automation]]></category>

		<category><![CDATA[commerce]]></category>

		<category><![CDATA[communication]]></category>

		<category><![CDATA[developer]]></category>

		<category><![CDATA[employ]]></category>

		<category><![CDATA[ie6]]></category>

		<category><![CDATA[internet explorer]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[osaf]]></category>

		<category><![CDATA[position]]></category>

		<category><![CDATA[professional]]></category>

		<category><![CDATA[qa]]></category>

		<category><![CDATA[rearden]]></category>

		<category><![CDATA[rearden commerce]]></category>

		<category><![CDATA[resign]]></category>

		<category><![CDATA[slide inc]]></category>

		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=20</guid>
		<description><![CDATA[
What happened?
As some of you may have heard, today I resigned from my position at Rearden Commerce. Leaving a company is never a fun thing, because you know how you feel when you hear that someone else is leaving.. and you can see it in people&#8217;s eyes. I have reminded myself multiple times today that I am [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:right;" src="http://adamchristian.com/wp-content/uploads/2008/06/logo.gif" alt="" width="145" height="38" /><br />
<strong>What happened?</strong></p>
<p>As some of you may have heard, today I resigned from my position at <a href="http://reardencommerce.com">Rearden Commerce</a>. Leaving a company is never a fun thing, because you know how you feel when you hear that someone else is leaving.. and you can see it in people&#8217;s eyes. I have reminded myself multiple times today that I am still going to be 30 mins away, most of my communication with those people has been via email and IM and there is no reason for me not to stay in touch.</p>
<p><strong>Why did I resign? </strong></p>
<p>That&#8217;s a very good question. Let me preface this by saying that I really don&#8217;t have anything about Rearden that I can point at and say &#8216;this thing&#8217; is why I left. Rearden is a great company, they were professional through out my entire experience there. They employ many very talented and driven engineers, and they have a great product. My gut feeling after spending some time there, is that they will do very well. The management team is very skilled and they know their market and niche extremely well. Every day I went to work I heard about a new major deal or a small company Rearden had acquired to contribute to their march toward owning the &#8216;Personal Assistant&#8217; space.</p>
<p>When I first arrived there I struggled with two things, and ultimately wound up being my demise as an employee. I have an extreme passion for Open Source, being part of that community, and giving my time to contribute. So you are probably thinking, &#8216;Why didn&#8217;t I just do that on the side?&#8217; &#8212; well the answer is that I did do it on the side and the results were slow and my sleep schedule paid the price. Rearden has a very business/enterprise specific niche at the moment, and building and deploying new features to those customers is a priority (as it should be), but I couldn&#8217;t stop my Open Source envy. </p>
<p>Secondly, a overwhelming majority of their user base is using IE6. As a web developer &#8212; the last thing I do when building anything in client side JavaScript is to test it in IE6. I basically hold my nose, load the page and pray that things &#8216;mostly work&#8217;. Now I&#8217;m not going to claim that I can ever get away from doing this, but building really cutting edge features based on new technology becomes significantly less probable when you are catering to this crowd. I know that Rearden has some really cool future plans, and is publicly talking about bringing the application to the consumer market &#8212; but I&#8217;m impatient and I just simply didn&#8217;t want to wait.</p>
<p><img style="float:right;" src="http://adamchristian.com/wp-content/uploads/2008/06/slide_logo_sm.gif" alt="" width="108" height="40" /><br />
<strong>What&#8217;s Next?</strong></p>
<p>I am going to jump right into a gig with <a href="http://slide.com">Slide Inc.</a> as a Web Developer. However, before I get to any Web Development tasks I am going to be addressing a pretty serious need they have in their QA department. Slide currently has many applications that are used directly on their site, slide.com and on social networks (primarily facebook.com and myspace.com) and right now they have essentially no functional automation.<br />
<img style="float:right" src="http://adamchristian.com/wp-content/uploads/2008/06/images-1.jpeg" alt="" width="86" height="73" class="alignnone size-thumbnail wp-image-19" /><br />
At <a href="http://osafoundation.org">OSAF</a> I saw what a major difference automated testing can make, and the reason I am so excited about this is because I was a QA Engineer at one point manually testing a pretty complex web application (<a title="Cosmo" href="http://hub.chandlerproject.org">Cosmo</a>) and I have seen how much a difference test automation can make in the release cycle, the development cycle, QA test cycles and simply the daily lives of your poor QA teams.</p>
<p><img style="float:left;" src="http://adamchristian.com/wp-content/uploads/2008/06/wmicon.png" alt="" width="41" height="40" /><br />
How am I going to accomplish this task you might ask? Thats the best part &#8212; I have fixed about 10 bugs in <a href="http://windmill.osafoundation.org">Windmill</a> in the last week, and will be putting whatever effort is required into getting Windmill to a state where we can functionally automate all of Slides application testing. This looks to be a serious win for Slide, and a serious win for Windmill. </p>
<p>At some point in the future, when I feel that this project is to the point where it can be maintained and built on by the Slide QA teams I will move on to Web Development tasks. At that point a smaller amount of time will still be allocated to maintaining Windmill, adding new features that Slide and the community need and working towards the next evolution of Windmill. That is quite a ways off in the future, so I will address all that when the time comes.<br />
<img style="float:right;" src="http://adamchristian.com/wp-content/uploads/2008/06/images.jpeg" alt="" title="images" width="127" height="46" class="alignnone size-medium wp-image-21" /><br />
The rest of my &#8216;free&#8217; development time, will be consumed by a project that I am involved in with the Mozilla Corporation. This project lives in the QA realm as well, and could probably be classified as a distant cousin to Windmill. More details about that will be announced the week of OSCON, so keep your eyes pealed.</p>
<p>Change can be extremely tough, but it is also very exciting. I want to thank all of my former peers at Rearden for a good experience, and I wish them all the absolute best.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/20/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
p-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php');
?>