<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<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>
	<lastBuildDate>Tue, 02 Mar 2010 10:39:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Considering in-house web automation?</title>
		<link>http://adamchristian.com/archives/358</link>
		<comments>http://adamchristian.com/archives/358#comments</comments>
		<pubDate>Tue, 02 Mar 2010 10:38:06 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[WatiN]]></category>
		<category><![CDATA[Watir]]></category>
		<category><![CDATA[Windmill]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=358</guid>
		<description><![CDATA[Recently I have had numerous conversations with people at various tiers of companies all over the place who are toying with the idea of building their own test automation and continuous integration infrastructure. Since I have spent a considerable amount of time dealing with such undertakings I decided that it might be worth the time [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I have had numerous conversations with people at various tiers of companies all over the place who are toying with the idea of building their own test automation and continuous integration infrastructure. Since I have spent a considerable amount of time dealing with such undertakings I decided that it might be worth the time to brain dump some of the issues you may want to consider before you dive in.</p>
<h2>Choosing Tools</h2>
<hr /><strong>Boxes, VM&#8217;s or Cloud?</strong></p>
<p>A common first reaction is to take a couple of those old boxes sitting around to run the first &#8220;couple&#8221; tests you have. In some cases, this is the perfect solution. That is if you have a small application that rarely changes and only needs a daily test run (on one operating system and it&#8217;s available browsers). In my experience you can reasonably run one Windows VM without lagging the host machine unusable, which gives you two concurrent browser test jobs without worrying about process conflicts. Do remember that to do this correctly, you really want a machine dedicated to your CI system (which I will talk more about below).</p>
<p>VM&#8217;s are a great solution, however they require significant hardware overhead, continuous attention and licensing costs. Depending on the VM solution you choose you may also wind up dealing with the dreaded <a href="http://software.intel.com/en-us/blogs/2009/06/25/virtualization-and-performance-vm-time-drift/">VM Time Drift</a> causing problems with JavaScript and failing tests that aren&#8217;t actually failing.</p>
<p>&#8220;The Cloud&#8221;, is the 2009-2010 buzz word that makes all technology sound better, and in a lot of ways COULD be the ideal solution for test automation. You get the benefits of paying for only the cycles you use, having someone else manage the infrastructure and avoid those pesky licensing costs. However in <a href="http://adamchristian.com/archives/269">my experience </a> the setup is painful, the solutions (EC2, etc.) are slow and lacking some of the features to really do test automation well. For example, if you want to run your own CI instance and run your tests on demand in the cloud you will run into some pretty painful engineering problems. It&#8217;s not easy to instruct the &#8220;cloud&#8221; service to fire up a Windows VM and then have that VM connect to your CI instance and become an available slave. It&#8217;s doable with Linux, but last I checked &#8211; the features to do something similar with Windows simply weren&#8217;t there. Also do you really want to wait sometimes up to 15 minutes (also my experience with EC2) for the machines to come up before you can even start running your tests?</p>
<p><strong>What CI System?</strong></p>
<p>The point of this article is not to recommend solutions, it is to encourage questions. However, outlining all of the possible CI systems would take forever so I will simply say that I wound up using <a href="http://hudson-ci.org/">Hudson</a>. The reasoning includes a very open and functional Open Source community, with smart contributors willing to take a few minutes to respond and help me out. I also found it possible (not simplistic) to build plugins to customize the things that I needed changed. Many people out there swear by <a href="http://cruisecontrol.sourceforge.net/">Cruise Control</a>, or <a href="http://buildbot.net/trac">Build Bot</a> and I would highly encourage you to do some research and pick the solution that you feel will allow you to be the most productive. For example if you plan to use Windmill and EC2, you may want to do some reading about the <a href="http://weblogs.java.net/blog/2009/05/18/hudson-ec2-plugin">Amazon EC2</a> and <a href="http://github.com/admc/HudsonWindmillPlugin/">Windmill plugins</a> available for Hudson and see what comparable tools are available.</p>
<p><strong>Which test framework?</strong></p>
<p>Some of you may know that I hold a mild bias when it comes to this question, but over the last year and a half I have ventured out into the land of testing frameworks and am able to see the values held by the other projects. For example, if you don&#8217;t ever need to deal with JavaScript in your application (or have browser specific functionality) &#8212; I suggest you use a tool that doesn&#8217;t require a real browser (like <a href="http://twill.idyll.org/">Twill</a>). Tests will run faster, they will be more stable and can be run without access to your OS&#8217;s graphics layer.</p>
<p>When it comes to browser based web testing tools I really think you need to pick the one that fits your needs the best. A great example of this was in my needs to automate functionality contained in iframes being served over HTTPS from a different domain, the only solution (after weeks of trial and error) turned out to be WatiN. Of course, writing and building tests in C#.net wasn&#8217;t going to be an easy sell so <a href="http://github.com/rtyler/IronWatin">IronWatin</a> was <a href="http://unethicalblogger.com/node/231">invented</a> as a means to write <a href="http://watin.sourceforge.net/">WatiN</a> tests in Python.</p>
<p><a href="http://watir.com/">Watir</a> has captured a lot of the <a href="http://www.ruby-lang.org/">Ruby</a> community and has recently been moving towards consolidating the separated browser  projects into one, which will significantly improve the ease of use.</p>
<p><a href="http://getwindmill.com/">Windmill</a> has a dedicated community, focuses on dynamic JavaScript applications, boasts lots of features and goes for an ease out of the box type of experience.. at least that&#8217;s what I would like to think! Please feel free to check out the destination site or <a href="http://wiki.github.com/windmill/windmill/">Github wiki</a> for more information</p>
<p><a href="http://seleniumhq.org/">Selenium</a> has a thriving community, lots of available consulting support, integrates well into a Java environment and offers the <a href="http://selenium-grid.seleniumhq.org/">Grid project</a>. You can also avoid all of the work involved in running your own system by writing your tests in Selenium and then offloading them to a company like <a href="http://saucelabs.com/">Sauce Labs</a> if you are willing to pay for it.</p>
<p><strong>What do we do about Flash/AS3 automation?</strong></p>
<p>After unsuccessfully trying out <a href="http://code.google.com/p/flexmonkey/">FlexMonkey</a> and <a href="http://asunit.org/">AsUnit</a> (don&#8217;t take my word for it), <a href="http://fleegix.org/">Matthew Eernisse</a> sat down and wrote an AS3 test controller that works the way the rest of test automation works in the browser, it&#8217;s part of the Windmill codebase (codenamed <a href="http://github.com/windmill/windmill/tree/master/flash/">FlashMill</a>). There are two ways to run the tests, one is to hand FlashMill your tests already <a href="http://wiki.github.com/windmill/windmill/actionscript-tests">written in AS3</a> and the other is to write them in your favorite tool (or raw JavaScript) and have them call into the FlashMill API. Windmill currently has full IDE/UI integration in master to be released soon, the integration code is simple and can be <a href="http://github.com/windmill/windmill/blob/master/windmill/html/js/controller/flash.js">viewed here</a> (best doco at the moment until I write a better one).</p>
<h2>Workload</h2>
<hr /><strong>How much work goes into maintenance and software upgrades?</strong></p>
<p>Depending on the machine setup you are going with, this will vary. Obviously if you have a box and a VM on it you can manually go through the process of upgrading the browsers on each, installing patches and security fixes for the OS etc. But if you went with the VM solution, you need to come up with a way to deploy updates to all the machines in your pool. An Open Source solution that came up near the top of my search is <a href="http://wpkg.org/">WPKG</a>, but like the rest of the tools on this page &#8211; there are many solutions and you will want to do your research. Some of the maintenance you will be dealing with can be done as a system job, or run by your CI system. A good example of this is to remove data, test files, source repositories etc. that accumulate on your test running machines.After a while, these files in combination with temporary internet files from the browsers and system tmp files start to slow things down.</p>
<p>This piece is very important to take into consideration from the beginning, because once you have 15 VM&#8217;s running tests &#8212; doing anything manually becomes a major chore. You also need to be cognizant of that fact that if you chose the cloud testing solution you will be managing your own test running images used to boot the VM&#8217;s. Every time you want to make updates or changes to that image, you get to go through the whole process of baking it and uploading it to the cloud hosting service. In my experience, this process is NOT enjoyable or quick.. so be prepared to invest some serious time.</p>
<p><strong>What is the strategy for scaling and expanding?</strong></p>
<p>Clearly this will be dictated by the rest of decisions you made, but I think when you get to this point, the idea of buying and manually setting up more and more physical boxes starts to break down. Buying more and more machines to sit there running tests simply seems like a bad use of resources (and desk space). VM&#8217;s allow you to quickly replicate images and expand your arsenal as long as the host machine has the hardware resources to power it without negatively effecting test run times on all the others. There are also solutions out there that allow you to boot and shutdown VM&#8217;s on the fly, which provides some interesting possibilities in juggling system resources.</p>
<p>I have found that since Windows is the common platform that can run all the browsers I care about, having a large pool of identical VM&#8217;s running all the time is an easy way to queue up 100&#8217;s of tests and get results in a reasonable amount of time. I do think that this is the aspect that cloud services start to become more appealing. The idea of spinning up more and more virtual machines in the cloud (with essentially endless capacity) makes the idea of scaling those tests considerably less terrifying. If you can get over the generally slow spin up times, and have come up with a strategy of dynamically harnessing and adding those machines to the pool &#8211; you may have it made!</p>
<p><strong>What format/language is best for our tests?</strong></p>
<p>At this point in web testing you simply need to decide what you care the most about doing. Is it manipulating the page? Or is it interacting with a database?, or a little of both? If you can get away with writing your tests fully in JavaScript, I would recommend it. At least in Windmill the JavaScript tests run exponentially faster than the Python or Ruby tests do. However the libraries for communicating with databases, email, system services etc, may make Python, Java, C#, etc your ideal solution. Each of the tools has their own ways of doing things, and to come up with the ideal language really depends upon your system, what your test developers are comfortable with, and what your application platform looks like.</p>
<p><strong>What operating systems and browsers do we need?</strong></p>
<p>The answer to this question should come from the metrics of your user base, and will also help you narrow down a testing framework and your test machines. Some of the available frameworks simply won&#8217;t run on Linux, or support IE6. Are all your users using Google Chrome? Then you should probably make sure the test framework you use has a Chrome launcher. Historically I have concentrated about 90% of the available VM resources on the most popular platform (usually Windows), with the most popular browsers (Firefox latest release, IE 7 or 8 depending on the users, Safari Windows latest release, and Chrome). This gives me a pool of work horse machines that can crank out tests representing the majority. The other 10% would be divided into the higher percentage minorities which probably includes a MacOSX slave running FF and Safari and a Linux machine running FF and Konqueror.</p>
<h2>Methodology</h2>
<hr /><strong>Can we support both functional and unit tests?</strong></p>
<p>I have found that having your own test infrastructure really makes this one easier. Since your resources will probably be on the same network as your codebase, you can easily access and run unit tests.. however as soon as you start sending your tests off to the cloud you are dealing with some security/privacy issues and engineering challenges. If inorder to unit test your code you need the entirety of your code base available, sending a copy of it off to your image on the cloud for every test (job, run or even change set) over and over could become a major strain on your system and simply sounds like a bad idea. If you are counting on unit tests you will at least want a machine on your network available as a slave from the CI system for those jobs.</p>
<p><strong>How do we report results, and stay tuned into failures?</strong></p>
<p>Most CI solutions have many ways they can be configured to alert you of a failure, from email, irc, jabber to a phone call you can usually find some solution that will get your attention. At this point in time the norm appears to be jUnit compatible results in XML. I&#8217;m not a huge fan, but the available tools for parsing and aggregating jUnit into something useful is very appealing. If you are okay with a true/false, that will always work out of the box, but you will need to be prepared to put in a little extra effort in both your test development and test job setup to generate the jUnit report files.</p>
<p><strong>What role does automation need to play in our process?</strong></p>
<p>For maximal results you need to make the leap where QA and Development both understand that a failing job in the CI system is a show stopper and must be investigated immediately. This way people honor the continual nature of continuous integration. It&#8217;s job is to catch problems shortly after they are broken, point you directly at them, and continue failing until you have solved the issue or fixed the test. If this isn&#8217;t the process you want, having continuous integration may not be the solution you are looking for.</p>
<p>Another effective strategy I have seen is to base release viability on the status of your CI system. Don&#8217;t let the product go out the door until the &#8216;thoroughly defined&#8217; suite of functional and unit tests running in continuous integration are all running and passing. It is easy to push off the process of updating failing tests until &#8220;later&#8221;, but everyone is busy, and later is usually never.</p>
<p><strong>What part of our application should we automate?</strong></p>
<p>This really should be computed by time and resources, as much as I would like to say &#8220;everything&#8221; I am well aware of it&#8217;s low probability. Pick your application flows that make you money, or really mean a lot to your users likely experience. Ensure that your application loads, they can take the happy path, give you some money and then leave. At least this way you can sleep at night knowing that, they may not be able to change their profile information but they can still pay your salary.</p>
<h2>Conclusion</h2>
<hr />I hope that I sufficiently communicated my point and passed on some useful and informative tidbits. Setting up automation infrastructure that has any chance of actually doing it&#8217;s job is a major investment of resources and should be well planned based on individualized needs. I hope this saves someone some time and energy.<br />
<br />Best of luck, and happy testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/358/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meet Kimta</title>
		<link>http://adamchristian.com/archives/329</link>
		<comments>http://adamchristian.com/archives/329#comments</comments>
		<pubDate>Thu, 25 Feb 2010 05:17:13 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Cat]]></category>
		<category><![CDATA[home]]></category>
		<category><![CDATA[Jungle Mountain]]></category>
		<category><![CDATA[Kimta]]></category>
		<category><![CDATA[San Francisco]]></category>
		<category><![CDATA[Savannah]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=329</guid>
		<description><![CDATA[The year 2010 so far has been personally very hard on me, however there has been a bit of shining light. Starting in mid January Megan and I started tossing around the idea of having an animal in our little Russian Hill cottage, after living with two awesome cats for the last two years things [...]]]></description>
			<content:encoded><![CDATA[<p>The year 2010 so far has been personally very hard on me, however there has been a bit of shining light. Starting in mid January Megan and I started tossing around the idea of having an animal in our little Russian Hill cottage, after living with two awesome cats for the last two years things just didn&#8217;t feel right without the raw untainted animal presence to which we became accustomed. The land lord wasn&#8217;t keen on dogs on the property, and I can fully understand and appreciate that rule as dogs left at home for too long can cause quite a lot of noise. I was however a bit disappointed because I was really starting to get used to the idea of a Shibu Inu.</p>
<p>However, we were given approval to get a cat without any specification as to what kind of cat. I started googling for &#8220;cat leash walk&#8221; etc. and came upon Servals on many of the big cat websites. Unfortunately most of the write-ups concluded with &#8220;check your states legislation as to the legality of owning a big cat&#8221;. Of course California would be one of the states to completely outlaw and enforce the rules of not having a pet big cat. So then my search turned into &#8220;biggest legal cat in California&#8221; and I stumbled upon a news report in San Diego about this &#8220;new&#8221; and emerging breed called the Savannah cat. It turns out that starting in 1986 someone though it would be pretty neat to have a cat with the temperament and some of the physical features of a Serval cat without having to deal with your house getting sprayed and literally torn apart.</p>
<p>Don&#8217;t get me wrong, if I was living in any of the surrounding states I probably would have bought a full blown Serval cat.. but living in a small place in San Francisco it just didn&#8217;t seem like a smart move even if it was legal. So I started emailing various breeders across the entire US that I found on the <a href="http://pets.groups.yahoo.com/group/kittensavailable/">Available Savannah Kittens Yahoo Group</a>. I received a few really great responses, and had some really satisfying correspondence with very caring breeders. A few less than inspring responses simply containing a photo and a price tag and a little in between. One response didn&#8217;t show up until February 4th from <a href="http://www.junglemtnexotics.com/">Jungle Mountain Exotics</a> based in the San Fernando Valley. February 5th was a pretty low day, and after a night of not being able to sleep and thinking about the pictures in the email I broke out my phone while still laying in bed pulled up the email and said &#8220;thats the one I want&#8221;. To make a long story short, 5 hours of phone calls later we were in the car driving to LA.</p>
<p>We arrived around 9AM Saturday morning at Jungle Mountain after a restless sleep at the Van Nuys Hampton. We were greeted by Bion Kirk and were led into an office with a litter box where we heard a squeak and meow from the corner of the room under a desk. After a few seconds of swinging around the feathers on a stick a little white spotted lightening bolt came cruising out from under the desk and went right up to Meg.. game over.</p>
<div id="attachment_330" class="wp-caption alignnone" style="width: 310px"><a href="http://www.adamchristian.com/wp-content/uploads/2010/02/bion.jpg"><img class="size-medium wp-image-330" src="http://www.adamchristian.com/wp-content/uploads/2010/02/bion-300x255.jpg" alt="" width="300" height="255" /></a><p class="wp-caption-text">Bion and Temba (F1 Safari Cat)</p></div>
<div id="attachment_331" class="wp-caption alignnone" style="width: 235px"><a href="http://www.adamchristian.com/wp-content/uploads/2010/02/photo.jpg"><img class="size-medium wp-image-331" src="http://www.adamchristian.com/wp-content/uploads/2010/02/photo-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">Meg and Temba</p></div>
<div id="attachment_333" class="wp-caption alignnone" style="width: 310px"><a href="http://www.adamchristian.com/wp-content/uploads/2010/02/IMG_0484.jpg"><img class="size-medium wp-image-333" src="http://www.adamchristian.com/wp-content/uploads/2010/02/IMG_0484-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Hybrid Wolf!</p></div>
<p>We took a tour of the compound and saw Kimta&#8217;s parents and the famous F1 Safari, as well as a hybrid wolf and various other cool animals.</p>
<p>We then headed back to the little office where we could watch little Kimta run around in circles while Bion told us how to take care of him, clip his nails, shots etc and then we stuck him a carrier and took him to the car. We made a quick stop by a pet stop to buy some goodies, food and litter box and then set on our way. For a little kitten he was surprisingly happy to sleep on our laps (total strangers) the whole 5 and a half hour drive up to San Francisco.</p>
<div id="attachment_334" class="wp-caption alignnone" style="width: 235px"><a href="http://www.adamchristian.com/wp-content/uploads/2010/02/kimta.jpg"><img class="size-medium wp-image-334" title="kimta" src="http://www.adamchristian.com/wp-content/uploads/2010/02/kimta-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">The view for 5.5 hours, who are you?</p></div>
<p>After a couple days of settling in, he pretty much runs the house and has become part of the family. I have been busily training him (or letting him train me) how to go on a walk. He currently loves to play fetch for hours and after a long day alone he has an insane amount of energy that needs to be burnt off.</p>
<p>As for the name, it represents a very special place to me that I spent time with my Dad as a kid on the Olympic Peninsula in the middle of the park just north of <a href="http://en.wikipedia.org/wiki/Lake_Quinault">Lake Quinault</a>. &#8220;Kimta Peak&#8221;, is a place where you rarely get good weather because it&#8217;s constantly surrounded by intense weather systems.. but when you do it opens up and is one the most amazing views you will ever see. At the base of the Peak is a small glacial lake full of freezing glacier water and ice bergs where you can take a morning dip to wake up and bask in the glory of the immensely hard work you put out to get there (on the <a href="http://www.trailsgalore.com/trails/1009538_Skyline_Trail_Washington.html">Skyline Trail</a>). The second I saw the pictures of the little cub the name jumped into my head.</p>
<div id="attachment_341" class="wp-caption alignnone" style="width: 310px"><a href="http://www.adamchristian.com/wp-content/uploads/2010/02/dad-033.jpg"><img class="size-medium wp-image-341" src="http://www.adamchristian.com/wp-content/uploads/2010/02/dad-033-300x201.jpg" alt="" width="300" height="201" /></a><p class="wp-caption-text">Dad at Kimta Peak.</p></div>
<p><iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=kimta+peak&amp;sll=37.0625,-95.677068&amp;sspn=42.581364,84.990234&amp;ie=UTF8&amp;hq=&amp;hnear=Kimta+Peak,+West+End,+Jefferson,+Washington&amp;t=p&amp;ll=47.697865,-123.689351&amp;spn=0.323499,0.583649&amp;z=10&amp;iwloc=A&amp;output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&amp;source=embed&amp;hl=en&amp;geocode=&amp;q=kimta+peak&amp;sll=37.0625,-95.677068&amp;sspn=42.581364,84.990234&amp;ie=UTF8&amp;hq=&amp;hnear=Kimta+Peak,+West+End,+Jefferson,+Washington&amp;t=p&amp;ll=47.697865,-123.689351&amp;spn=0.323499,0.583649&amp;z=10&amp;iwloc=A" style="color:#0000FF;text-align:left">View Larger Map</a></small></p>
<p>As I have told this whole crazy story to quite a few friends and family at this point, I decided it was time to write it up before I start forgetting details. At this point I have noticed a few things about Kimta that are different from the cats I spent the last two years with. As long as I am in sight, he is okay pretty much anywhere he is (car rides, walks, new buildings/places). When he is getting ready to hunt one of his toys he will make an interesting chirping noise that sounds more like a bird than a cat. He plays in the shower and doesn&#8217;t mind getting wet (on his own terms, walking in the rain is not one of his favorite activities).</p>
<p>Kimta regularly head bumps me anytime he finds my head near enough to his, which I have read is normal behavior for the Serval.. but I still don&#8217;t quite know what it means. Many of the write-ups I read about Savannah&#8217;s really made them out to sound like a dog like cat, however they are still a cat and you need to keep that in mind. When walking, those giant ears are tuned to hear every single noise for miles and a screeching truck can really make them uncomfortable. I find that when walking if I continually talk to him, or have Pandora on my iPhone turned up as high as it will go (with some Mark Knopfler) that he will concentrate on that and continue his walk instead of constantly stopping to figure out what he&#8217;s hearing.</p>
<p>These animals attach to you, not to your house &#8211; so you will find them following you from room to room about 5 feet behind you to keep an eye on what you&#8217;re up to. They beg for scraps and go CRAZY when you have pungent cheese around, we found this out when opening a can of Cougar Gold (GO COUGS).</p>
<p>Kimta is a Silver Savannah with a coat similar to a Silver Tabby, however the stripes he has are thiner and more defined and he has many rosette&#8217;s (spots without an interior). I&#8217;m told that the Silver coat genetics are similar to that of the elusive white tigers. My understanding is that Kimta is somewhere around ~20% <a href="http://en.wikipedia.org/wiki/Serval">African Serval</a>, but to me he&#8217;s the little dog cat that greets me at the door with a wagging tail.</p>
<div id="attachment_339" class="wp-caption alignnone" style="width: 310px"><a href="http://www.adamchristian.com/wp-content/uploads/2010/02/lazy1.jpg"><img class="size-medium wp-image-339" title="Lazy" src="http://www.adamchristian.com/wp-content/uploads/2010/02/lazy1-300x225.jpg" alt="" width="300" height="225" /><br />
</a><br />
<p class="wp-caption-text">Getting some sun after a morning walk!</p></div>
<div class="wp-caption alignnone" style="width: 310px"><a href="http://www.adamchristian.com/wp-content/uploads/2010/02/stalk.jpg"><img src="http://www.adamchristian.com/wp-content/uploads/2010/02/stalk-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Kimta on the hunt (for flying bugs)</p></div>
<div id="attachment_343" class="wp-caption alignnone" style="width: 235px"><a href="http://www.adamchristian.com/wp-content/uploads/2010/02/walk.jpg"><img class="size-medium wp-image-343" src="http://www.adamchristian.com/wp-content/uploads/2010/02/walk-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">Radio tuner ears!</p></div>
<p>A few people out there know that I have occasionally mentioned my dream of one day owning a ranch somewhere in the Northwest where I can raise some Mountain Lions.. I guess perfect practice makes perfect! It has been quite a trip so far, thanks for reading!</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/329/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>#OSB, #CLS and #OSCON &#8211; 09</title>
		<link>http://adamchristian.com/archives/319</link>
		<comments>http://adamchristian.com/archives/319#comments</comments>
		<pubDate>Tue, 28 Jul 2009 23:36:51 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=319</guid>
		<description><![CDATA[I had the opportunity to attend the Community Leadership Summit in San Jose last weekend followed by OSCON in the same venue. The whole experience of these in conjunction gave me a lot of interesting comparison and contrast.
First I&#8217;m going to talk about my frustrations so that I can get them out of the way [...]]]></description>
			<content:encoded><![CDATA[<p>I had the opportunity to attend the <a href="http://www.communityleadershipsummit.com/">Community Leadership Summit</a> in San Jose last weekend followed by <a href="http://en.oreilly.com/oscon2009/">OSCON</a> in the same venue. The whole experience of these in conjunction gave me a lot of interesting comparison and contrast.</p>
<p>First I&#8217;m going to talk about my frustrations so that I can get them out of the way and talk about all the really great stuff. Like most people who have written about their experience of the weekend &#8212; I miss Portland for <a href="http://en.oreilly.com/oscon2009/">OSCON</a>. I was in Portland for the <a href="http://opensourcebridge.org/">Open Source Bridge</a>, which was small, intimate, granola and very purely open sourcey. My main problem was that driving from Oakland to San Jose was absolutely 10x more painful than I imagined it would be. By the time I got down there each day to park (and pay) for that massive hot concrete bunker they call a parking garage I was in a terrible mood. It took at least an hour before I was even in the mood to talk to anyone. I&#8217;m not going to spend any more time harping on this, but please O&#8217;Reilly, if you are doing it in the bay area do it in SF, Oakland, or even Sanoma &#8212; but SJ didn&#8217;t work for me <img src='http://adamchristian.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Good things! <a href="http://opensourcebridge.org/">Open Source Bridge</a> was really small, but there was a great tight knit group of folks there. Percentage wise, there were more women attending and involved than any other conference I have been to. I think conference planner should take a look at how they managed their costs and only sprung for the necessity. I do hope that next year the attendance goes up, more talks and interesting people to talk to is the only thing I would like to see change with this conference.</p>
<p><a href="http://www.communityleadershipsummit.com/">Community Leadership Summit</a> was different than any meet-up I have ever been to. The extreme un-conference format really gave it a different vibe. The idea here was that anyone involved, or interested in being involved in an OSS community could come and basically round table a whole big set of different topics (determined on the fly). And it actually worked! Many interesting folks from different organizations and projects showed up and had a lot of questions, and a lot to say. Nine out of ten of the discussions I participated in had some really great substance, and a reasonable flow of different people talking. One was pretty much two or three people talking a lot, lots of people listening, and one guy very blatantly sleeping. I guess you can&#8217;t win them all&#8230; One thing I thought was really interesting was a small almost &#8216;track&#8217; of &#8217;social media in community building&#8217;. It seems many people want to build up their community, but are already overwhelmed with all of the different tasks involved. Their question&#8217;s were &#8212; &#8216;Should I use twitter/facebook etc. to promote my project?&#8217; And if so, &#8220;How do I do it without spending all day and night on there?&#8217; I think the answer is &#8220;Yes&#8221;, use them, as much as you reasonably can. You want to really kick ass and grow you community&#8230; give up sleeping for a couple weeks, get interns, encourage your community help you!</p>
<p>I&#8217;m not going to try to provide a full recap of the discussions, because they were beyond what I have time to even try to summarize &#8212; but it was great talking with all of you! Special thanks for <a href="http://www.jonobacon.org/">Jono Bacon</a> and <a href="http://www.canonical.com/">Canonical</a> for their support of this event.</p>
<p>I have to admit, by the time it became time to get involved in <a href="http://en.oreilly.com/oscon2009/">OSCON</a> I was pretty beat. Since I work in SF I was trying to be involved in the conference, but also keep working &#8212; which was a bit much. I have to say for my personal growth, the best thing I did was attend the <a href="http://damian.conway.org/">Damien Conway</a> Speaker Workshop. I heard his great talk on &#8220;How to not suck at being a speaker&#8221;, and then had the chance to get up in front of everyone and get torn apart. It turned out to be the best speaking advise I have ever received, Tuesday I completely re-did my Slides and practiced the talk out-loud in the mirror with an audience of cats. Unfortunately part of the re-do did removed all of the loud Journey from the talk.. I may see if there is some way I can work a little of that back in for next year!</p>
<ul>
<li>Bigger Font, ALWAYS</li>
<li>Talk to the audience, don&#8217;t preach to them</li>
<li>Simple slides, simple colors</li>
<li>Don&#8217;t put a logo on every slide, its annoying</li>
<li>Ask questions</li>
<li>Tell a story</li>
<li>Be very careful with demo videos</li>
<li>Talk about things you care about and know</li>
<li>4 points max on a slide, they aren&#8217;t queue cards</li>
<li>Don&#8217;t be nervous (this is a bit harder to fix)</li>
</ul>
<div id="attachment_320" class="wp-caption alignnone" style="width: 410px"><a href="http://www.flickr.com/photos/juliancash/sets/72157621663915357/"><img class="size-full wp-image-320" title="Adam on Fire" src="http://www.adamchristian.com/wp-content/uploads/2009/07/adam_fire.jpg" alt="Adam on Fire" width="400" height="266" /></a><p class="wp-caption-text">Julian Cash took this crazy picture of me.</p></div>
<p>There was a lot more than that, but those were incredibly important in making the Windmill talk more successful. The food was pretty good, the free beers were nice, walking around the Expo Hall yielded lots of cool stuff to look at and play with.</p>
<p>Saw the inevitable excitement over &#8220;Cloud Technology&#8221;, Scala, Lift, Closure, R, CouchDB and all of the other new and awesome things I haven&#8217;t had enough time to really dig into.</p>
<p>Thanks for a great conference season everyone! Monday I leave for Moscow, stand by for a report on that.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/319/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hudson + EC2 + Windmill = Cloud Testing</title>
		<link>http://adamchristian.com/archives/269</link>
		<comments>http://adamchristian.com/archives/269#comments</comments>
		<pubDate>Thu, 28 May 2009 10:05:07 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=269</guid>
		<description><![CDATA[This should give you a pretty good idea how to use the available tools to run your functional tests out there on the cloud.
I do plan to keep updating this post, so consider this a rough draft for the time being! I hope this provides some value.
Setting up Hudson
It would be pretty silly for me [...]]]></description>
			<content:encoded><![CDATA[<p>This should give you a pretty good idea how to use the available tools to run your functional tests out there on the cloud.</p>
<p>I do plan to keep updating this post, so consider this a rough draft for the time being! I hope this provides some value.</p>
<h2>Setting up Hudson</h2>
<p>It would be pretty silly for me to try and re-document the Hudson installation process, so I will refer you to <a href="http://wiki.hudson-ci.org/display/HUDSON/Meet+Hudson">Meet Hudson</a>.</p>
<h3>Installing Hudson Plug-ins</h3>
<p><img class="alignnone size-full wp-image-274" title="Manage Plugins" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-2.png" alt="Manage Plugins" width="690" height="55" /></p>
<p>Click the &#8220;Manage Hudson&#8221; link, and then &#8220;Manage Plugins.</p>
<p><img class="alignnone size-full wp-image-275" title="Tabs" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-13.png" alt="Tabs" width="285" height="45" /></p>
<p>Select the &#8220;Available&#8221; plugins tab.</p>
<p><img class="alignnone size-full wp-image-276" title="EC2" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-14.png" alt="EC2" width="616" height="42" /></p>
<p><img class="alignnone size-full wp-image-278" title="Windmill Plugin" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-22.png" alt="Windmill Plugin" width="616" height="30" /></p>
<p>Select both the Amazon EC2 plugin, and the windmill plugin, then click Install:<img class="alignnone size-full wp-image-279" title="Install" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-3.png" alt="Install" width="94" height="40" /></p>
<p>You should see the following:</p>
<p><img class="alignnone size-full wp-image-280" title="Installed" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-4.png" alt="Installed" width="526" height="155" /></p>
<p>Click &#8220;Restart Now&#8221;</p>
<p><img class="alignnone size-full wp-image-281" title="Restarting" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-5.png" alt="Restarting" width="527" height="136" /></p>
<p>Success!</p>
<h3>Create your slaves</h3>
<p>Click &#8220;Manage Hudson&#8221;</p>
<p><img class="alignnone size-full wp-image-282" title="Manage Nodes" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-23.png" alt="Manage Nodes" width="531" height="57" /></p>
<p>Click &#8220;Manage Nodes&#8221;, then &#8220;New Node&#8221; in the upper left.</p>
<p><img class="alignnone size-full wp-image-283" title="Configure the node" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-15.png" alt="Configure the node" width="688" height="171" /></p>
<p>Configure the node, we do 1 executor so that Windmill test runs don&#8217;t step on each other, c:\hudson is the standard place to store hudson job workspaces, and to keep other jobs from using our slave we specify &#8220;Leave this machine for tired jobs only&#8221;, then save.</p>
<h3>Setup some jobs</h3>
<p>In the upper left link menu, click &#8220;New Job&#8221;</p>
<p><img class="alignnone size-full wp-image-284" title="Configuration Matrix Job" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-31.png" alt="Configuration Matrix Job" width="516" height="174" /></p>
<p>We need to make this a &#8220;multi-configuration project&#8221;, so that we can run the same job against multiple browsers on multiple slaves. Click save.</p>
<p><img class="alignnone size-full wp-image-286" title="Get the test" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-8.png" alt="Get the test" width="693" height="162" /></p>
<p>In this example, I am using wget (which I have installed via cygwin) to pull down the test file into the workspace that we are going to run.</p>
<p><img class="alignnone size-full wp-image-287" title="Specify the machines and browsers" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-6.png" alt="Specify the machines and browsers" width="551" height="221" /></p>
<p>In this example I have selected to run this test on three different machines, each against firefox, ie and safari. This would be useful if each of these machines had different versions of the browsers. You can run each of the combination&#8217;s from one job.</p>
<p><img class="alignnone size-full wp-image-288" title="Windmill Plugin" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-7.png" alt="Windmill Plugin" width="642" height="136" /></p>
<p><img class="alignnone size-full wp-image-289" title="Test run" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-10.png" alt="Test run" width="736" height="202" /></p>
<p>Configure your Windmill test run, setting Browser to %browser% allows the job to get the browser from the configuration matrix. We also specify the url, and to run the test file that we download in the previous step. Save.</p>
<h2>Setting up EC2</h2>
<h3>Get an account</h3>
<p><img class="alignnone size-full wp-image-292" title="Sign Up" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-41.png" alt="Sign Up" width="266" height="97" /></p>
<p>Head to <a href="http://aws.amazon.com/">http://aws.amazon.com/</a> and sign up!</p>
<h3>Setup Amazon EC2 API Tools</h3>
<p>I found this to be relatively straight forward, however these docs look terrifying and poorly organized: http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351</p>
<p>These were much easier on the eyes, and to the point.. plus they are OSX specific, which was nice: http://www.robertsosinski.com/2008/01/26/starting-amazon-ec2-with-mac-os-x/</p>
<p>Once you are all setup, allow connections to all images you launch with remote desktop by issuing the following command:<br />
<code><br />
ec2-authorize default -p 3389<br />
</code></p>
<h3>Launch Windmill AMI images</h3>
<p><img class="alignnone size-full wp-image-293" title="AWS Management Console" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-16.png" alt="AWS Management Console" width="179" height="146" /></p>
<p><img class="alignnone size-full wp-image-295" title="Sign In" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-25.png" alt="Sign In" width="216" height="94" /><br />
Navigate to the AWS Management Console</p>
<p><img class="alignnone size-full wp-image-296" title="Launch Instances" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-51.png" alt="Launch Instances" width="382" height="163" /></p>
<p>Click to Launch some Instances</p>
<p><img class="alignnone size-full wp-image-297" title="Find AMI's" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-61.png" alt="Find AMI's" width="561" height="181" /></p>
<p>Click to the &#8220;Community AMI&#8217;s&#8221; tab</p>
<p><img class="alignnone size-full wp-image-299" title="Search for Windmill" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-62.png" alt="Search for Windmill" width="666" height="118" /></p>
<p>My pre-maid Windmill AMI&#8217;s should appear, &#8216;windmillxp&#8217; specifies that it&#8217;s the windows xp Windmill image. Click &#8217;select&#8217;.</p>
<p><img class="alignnone size-full wp-image-300" title="Configure Launching" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-9.png" alt="Configure Launching" width="622" height="407" /></p>
<p>Your security groups will reflect what you configured for your account, but specify the number of slaves you would like to use. Then click &#8220;Launch&#8221;.</p>
<p><img class="alignnone size-full wp-image-301" title="Confirm" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-101.png" alt="Confirm" width="723" height="456" /></p>
<p>You should get the following confirmation that your slaves have been launched.</p>
<p><img class="alignnone size-full wp-image-302" title="Dashboard" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-111.png" alt="Dashboard" width="367" height="173" /></p>
<h3>Start the slave agents</h3>
<p>For each of the slaves in the following list:</p>
<p><img class="alignnone size-full wp-image-304" title="Slaves" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-131.png" alt="Slaves" width="799" height="176" /></p>
<h2><img class="alignnone size-full wp-image-305" title="Connect to instance" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-17.png" alt="Connect to instance" width="766" height="110" /></h2>
<p>Check the image, and click connect.</p>
<p><img class="alignnone size-full wp-image-306" title="Download Dialog" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-26.png" alt="Download Dialog" width="204" height="180" /></p>
<p>Click &#8220;Download shortcut file&#8221;.</p>
<p><img class="alignnone size-full wp-image-307" title="Auth" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-42.png" alt="Auth" width="400" height="186" /></p>
<p>If you have Remote Desktop Installed, you should connect and see the following dialog. I have also found <a href="http://cord.sourceforge.net/">CoRD</a> to be a great alternative on MacOSX.</p>
<p>You will be prompted for a username and password, use &#8216;Administrator&#8217; and &#8216;w1ndmill&#8217; respectively. Note: the second character of the password is the number one.</p>
<p>In the Window you can now access, launch a browser and navigate to the URL of your Hudson Instance and find your slave node in the list.<br />
<img class="alignnone size-full wp-image-308" title="Slave" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-91.png" alt="Slave" width="216" height="186" /></p>
<p>Click that the node to get it&#8217;s configuration screen.</p>
<p><img class="alignnone size-full wp-image-309" title="Launch Slave" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-102.png" alt="Launch Slave" width="550" height="200" /></p>
<p>Click the &#8220;Launch&#8221; button, your EC2 image is now an available Hudson slave.</p>
<h2>Run that Test</h2>
<p><img class="alignnone size-full wp-image-310" title="Build" src="http://www.adamchristian.com/wp-content/uploads/2009/05/picture-72.png" alt="Build" width="636" height="43" /></p>
<p>Click the clock image on the right to start the job running. In the VM you should see the Windmill test zooming along. You can also navigate around the job to find access to the console output to see line by line what is happening on the standard out.</p>
<h2>Other</h2>
<p>The manual launching process can be automated using the hudson EC2 plugin for Linux, but is not yet compatible with Windows. Resolving this step would make the whole process of launching cross platform cross browser tests in the cloud a fully automated process, which we are looking forward to!</p>
<p>Other possible ways to handle this are by using the hudson VMWare plugin, and launch images on a VMWare server.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/269/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Windmill Plugin for Hudson</title>
		<link>http://adamchristian.com/archives/251</link>
		<comments>http://adamchristian.com/archives/251#comments</comments>
		<pubDate>Mon, 11 May 2009 04:42:27 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Slide]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windmill]]></category>
		<category><![CDATA[Windmill-dev]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=251</guid>
		<description><![CDATA[Over the last 6+ months, I have been using Hudson in conjunction with Windmill very heavily for continuous integration. For the most part using the build step specific to whatever the slave OS requires has worked sufficiently well until recently when my needs changed.
I use the &#8216;configuration matrix&#8217; option to build a matrix of browsers [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last 6+ months, I have been using Hudson in conjunction with Windmill very heavily for continuous integration. For the most part using the build step specific to whatever the slave OS requires has worked sufficiently well until recently when my needs changed.</p>
<p>I use the &#8216;configuration matrix&#8217; option to build a matrix of browsers to run the tests, this way I can have one job that represents a test run on multiple boxes and multiple browsers on each box. Drilling down allows me to see the results for each of these test runs within the job. (Configuration Matrix is awesome btw, except for one really annoying bug for, which there is a <a href="http://wiki.hudson-ci.org/display/HUDSON/Aboutncysa">reasonable workaround</a>)</p>
<p>Having many build resources, sometimes I want to move a job from one machine to another in order to equalize load on the different machines or to have a job running in ff2 and ie6 instead of ff3 and ie7. Thus the need for a uniform build step that will run the same way regardless of the machine or installed browsers, became necessary. Additionally the commands for running tests got bigger and less manageable all the time, so the time for a clean user interface finally came. This way I can automatically append arguments like &#8216;exit&#8217; to keep the build step interface simple and clean.</p>
<p>The other simplification is that in the Hudson configuration page for the Windmill Test plug-in you can tell it to automatically call the contrib &#8216;clean_run.py&#8217; script with the correct arguments (assuming clean_run.py can be found in your path).</p>
<p>As I am relatively new to the Java world, I struggled through the development process but thanks to some reasonable plug-in documentation, responses from the hudson dev mailing list and some IRC conversations with Kohsuke (thanks so much) I finally have something that sufficiently addresses my needs.</p>
<p><strong>Screenshots</strong><br />
<img style="width:99%" title="Hudson Configuration UI" src="http://cloud.github.com/downloads/admc/HudsonWindmillPlugin/Picture_4.png" alt="" /><br />
<img title="Adding the Windmill build" src="http://cloud.github.com/downloads/admc/HudsonWindmillPlugin/Picture_5.png" alt="" /><br />
<img style="width:99%" title="Plugin basic UI" src="http://cloud.github.com/downloads/admc/HudsonWindmillPlugin/Picture_2.png" alt="" /><br />
<img style="width:99%" title="Windmill Build Expanded" src="http://cloud.github.com/downloads/admc/HudsonWindmillPlugin/Picture_3.png" alt="" /></p>
<p><strong>Project</strong></p>
<p>The code is all available on <a href="http://github.com/admc/HudsonWindmillPlugin/tree/master">GitHub</a> and I welcome any improvements or input from the community as I know that continuous integration is a very important piece of the utility provided by Windmill and this pieces should be as easy as possible to setup.</p>
<p>The combination of this plug-in, and others like the <a href="http://github.com/dougm/hudson-s3/tree/master">amazon s3 plug-in </a> or the <a href="http://wiki.hudson-ci.org/display/HUDSON/VMware+plugin">hudson VMware plugin</a> bring us that much closer to seamlessly creating test resources, running our functional web tests across all of our supported platforms and then throwing it away until it&#8217;s again needed (or using the CLOUD).I have also done some integration with virtual box that I have found to be very successful.</p>
<p><strong>Download</strong></p>
<ul>
<li><a href="http://cloud.github.com/downloads/admc/HudsonWindmillPlugin/HudsonWindmillPlugin.hpi">Hudson Windmill Plugin 0.4</a></li>
</ul>
<p>Please<a href="http://github.com/admc/HudsonWindmillPlugin/issues"> log bugs</a> and let me know what you think! If you are an avid Java and or Hudson plug-in developer and you are interested in contributing, please jump right in!</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/251/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyCon 2009 Recap</title>
		<link>http://adamchristian.com/archives/236</link>
		<comments>http://adamchristian.com/archives/236#comments</comments>
		<pubDate>Tue, 14 Apr 2009 00:54:38 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[JavaScript]]></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[Windmill-dev]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Oscon]]></category>
		<category><![CDATA[pycon]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[using windmill]]></category>
		<category><![CDATA[windmill talk]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=236</guid>
		<description><![CDATA[Getting back in the swing of things after conferencing for weeks can be pretty painful, thus the lateness of the post. However I think it&#8217;s important to go over some thoughts still lingering in my brain as a result.
First off, I have to say that for those of you who don&#8217;t know, PyCon is a [...]]]></description>
			<content:encoded><![CDATA[<p>Getting back in the swing of things after conferencing for weeks can be pretty painful, thus the lateness of the post. However I think it&#8217;s important to go over some thoughts still lingering in my brain as a result.</p>
<p>First off, I have to say that for those of you who don&#8217;t know, PyCon is a community organized event, and amazingly well done. I was impressed by the design of the conference, the way they had four talks going on at once and they tried to keep them in a similar interest track. Every talk I attended was at least &#8220;good&#8221;, and many were &#8220;great&#8221;. You could really feel a community vibe, and for a conference that had 800+ attendees in the middle of a major recession they had every right to be excited.</p>
<p>There were two major themes content wise that really impressed me, the first was an amazing amount of web framework focus. <a href="http://www.djangoproject.com/">Django</a> obviously being the twinkle in the eye of the community, but there were smaller communities for each of the other projects, <a href="http://pylonshq.com/">Pylons</a>-<a href="http://turbogears.org/">Turbo Gears</a>, <a href="http://www.web2py.com/">web2py</a> and lots of tools built on top of them. One that struck me with some major promise is the <a href="http://pinaxproject.com/">Pinax Project</a>. Their goal is to make it so that I don&#8217;t ever have to deal with building user registration and in site messaging&#8230; and all the other features expected for any site that has social network functionality.</p>
<p>The other major theme was a mini testing conference going on within PyCon, that I was very comfortable hanging around with. We had a hugely successful Birds Of a Feather, as well as a surprisingly active Open Space talk for Windmill.</p>
<p>The &#8220;Using Windmill&#8221; talk turns out to be pretty successful in every aspect that I really care about. I do wish that I had been able to get a little more sleep the night before, and I have to admit the size of the venue was a bit overwhelming. I now realize watching the footage that I used the word &#8220;UM&#8221; way too much, and the demo videos must have been hard to watch from the very back of the room. But barring those two things, I am quite happy (I shall learn and practice for the next round of shameless PR at <a href="http://en.oreilly.com/oscon2009">OSCON 2009</a>).</p>
<p>The &#8220;Functional Testing Tools in Python&#8221; panel was very successful, and a lot of fun. I always enjoy the friendly banter between the different project owners. Everyone has a different opinion on what they care about, focus on and feel they do the best. Obviously since the only two projects represented that focused on Web Testing were Windmill and Selenium, we got a lot of attention.</p>
<p>Watching that panel footage I definitely think that the introductions were too long, but I still think our Journey themed &#8211; mind blowing &#8211; Windmill demo video was a great intro. At the very least, the audience had a little entertainment before the geek droning began <img src='http://adamchristian.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.slide.com">Slide</a> had an awesome presence this year, a fun booth, huge banners everywhere and 6 attendees. It was fun to see all of the great responses I received about Slide from people out there in Python land.</p>
<p><strong>Here are links to the videos:</strong></p>
<ul>
<li>Using Windmill: <a href="http://pycon.blip.tv/file/1947236/">http://pycon.blip.tv/file/1947236/</a></li>
<li>Functional Testing Tools in Python Panel: <a href="http://pycon.blip.tv/file/1947342/">http://pycon.blip.tv/file/1947342/</a></li>
</ul>
<p><strong>And some pictures:</strong></p>
<p><img class="alignnone size-full wp-image-237" title="Me, with the great Slide backdrop" src="http://www.adamchristian.com/wp-content/uploads/2009/04/1.png" alt="Me, with the great Slide backdrop" width="350" height="233" /></p>
<p><img class="alignnone size-full wp-image-238" title="Mikeal answering Questions" src="http://www.adamchristian.com/wp-content/uploads/2009/04/2.png" alt="Mikeal answering Questions" width="233" height="350" /> <img class="alignnone size-full wp-image-239" title="More me" src="http://www.adamchristian.com/wp-content/uploads/2009/04/3.png" alt="More me" width="350" height="233" /></p>
<p>If you are interested in seeing the new and improved version of the &#8220;Using Windmill&#8221; talk, please make it out to OSCON 2009, &#8220;Scheduled for 16:30 on 22 Jul 2009.&#8221; in San Jose, CA.<br />
<a href="http://conferences.oreilly.com/oscon"><br />
<img class="alignnone" style="border: 0px initial initial;" title="OSCON 2009" src="http://assets.en.oreilly.com/1/event/27/oscon2009_banner_speaking_125x125.gif" border="0" alt="OSCON 2009" width="125" height="125" /></a></p>
<p>We are waiting to hear back from both <a href="http://opensourcebridge.org/">Open Source Bridge</a> and the <a href="http://ajaxexperience.techtarget.com/html/index.html">AJAX Experience</a> as to whether we will be participating in those conferences (fingers crossed)!</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/236/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Skinning Windmill with JQuery UI Themes</title>
		<link>http://adamchristian.com/archives/221</link>
		<comments>http://adamchristian.com/archives/221#comments</comments>
		<pubDate>Wed, 25 Mar 2009 01:15:27 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Windmill]]></category>
		<category><![CDATA[Windmill-dev]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[skin]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[theme]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=221</guid>
		<description><![CDATA[I have been doing a lot of UI work on the Windmill trunk, and over the past few months I have had multiple requests for the ability to apply skins. Of course my reaction up until this point has been&#8230; alter the CSS! Which is not exactly the answer people were looking for.
Here is your [...]]]></description>
			<content:encoded><![CDATA[<p>I have been doing a lot of UI work on the Windmill trunk, and over the past few months I have had multiple requests for the ability to apply skins. Of course my reaction up until this point has been&#8230; alter the CSS! Which is not exactly the answer people were looking for.</p>
<p>Here is your answer, and it is now easier than ever.</p>
<p><strong>1.</strong> Go to: <a href="http://jqueryui.com/themeroller/">http://jqueryui.com/themeroller/</a> and create your theme (or pick a pre-defined one)<br />
<strong>2.</strong> Download and unzip the file. (it doesn&#8217;t matter what you select for jQuery components)<br />
- On a mac you will find something like this: jquery-ui-1.7.1.custom.zip Folder<br />
<strong>3.</strong> Open the contained CSS folder there will be another folder, currently windmill uses &#8220;smoothness&#8221;<br />
<strong>4.</strong> Find <em>windmill/html/css</em> folder in the windmill source directory<br />
<strong>5.</strong>  Copy the specified folder in step 3 into this folder<br />
<strong>6.</strong> Edit windmill/html/remote.html, line 10 to read like the following:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">&lt;link type<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span> href<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;css/*your folder name*/jquery-ui-1.7.1.custom.css&quot;</span> rel<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;stylesheet&quot;</span> /<span style="color: #00AA00;">&gt;</span></pre></td></tr></table></div>

<p><strong>7.</strong> Load windmill!!</p>
<p>Here are a couple examples of pre-defined themes I tested out.</p>
<p><strong>Humanity</strong><br />
<img class="alignnone size-full wp-image-223" title="Windmill Theme" src="http://www.adamchristian.com/wp-content/uploads/2009/03/e73bfb899c1b3e804b3bf46830d9ba761.png" alt="Windmill Theme" width="438" height="492" /><br />
<strong>UI Darkness</strong><br />
<img class="alignnone size-full wp-image-224" title="Windmill Theme" src="http://www.adamchristian.com/wp-content/uploads/2009/03/a84ceded77718ff0a88b8916a4a0bc24.png" alt="Windmill Theme" width="446" height="519" /></p>
<p>Happy skinning.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/221/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MozMill 1.1 UI Overview</title>
		<link>http://adamchristian.com/archives/185</link>
		<comments>http://adamchristian.com/archives/185#comments</comments>
		<pubDate>Mon, 09 Mar 2009 22:31:29 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Mozmill]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=185</guid>
		<description><![CDATA[During the Open Design session at Mozilla with Aza we were informed that we could load a HTML file with a Chrome URL, allowing me to rebuild the MozMill UI a bit more like a web page instead of using the XUL constructs that I had been struggling with. Granted it feels a lot more [...]]]></description>
			<content:encoded><![CDATA[<p>During the Open Design session at Mozilla with Aza we were informed that we could load a HTML file with a Chrome URL, allowing me to rebuild the MozMill UI a bit more like a web page instead of using the XUL constructs that I had been struggling with. Granted it feels a lot more like a web page than it does a desktop application, but the speed that I can build new UI features by using libraries like JQuery UI have made it worth it.</p>
<p>The combination of writing content style HTML, and the good advice we received have come together into what I feel is a pretty usable user interface. Granted this is the first revision and will probably continually be refined to become even more user friendly, but from 1.0 to 1.1 it is a vast improvement.</p>
<p><img style="position:relative;float:right" title="MozMill Editor" src="http://www.adamchristian.com/wp-content/uploads/2009/03/picture-2.png" alt="MozMill Editor" width="368" height="510" /></p>
<p><strong>Improved Editor</strong></p>
<p>The first major improvement is the implementation of a full featured code editor named <a href="http://www.cdolivet.net/editarea/">EditArea</a>. </p>
<p>We have been keeping our eye on <a href="https://bespin.mozilla.com/">Bespin</a>, which we will look more into integrating when it is a bit more modular. </p>
<p>For the meantime EditArea does a great job, and was *relatively* painless to integrate.</p>
<p>Some of the features include:</p>
<ul>
<li>Multiple file editing</li>
<li>Syntax hilighting</li>
<li>Full Screen mode</li>
<li>Adjustable font properties</li>
<li>Jump to line numbers</li>
<li>Search and replace</li>
<li>Automatic tabulation</li>
<li>Toggle hi-lighting</li>
<li>Toggle edit modes</li>
</ul>
<p><a href="http://www.cdolivet.net/editarea/editarea/docs/javascript_functions.html">EditArea</a> implements execCommand similar to the implementation in <a href="http://www.mozilla.org/editor/midas-spec.html">Midas</a>.</p>
<div style="clear:both"></div>
<p><strong>Reorganized Menu&#8217;s</strong></p>
<p>Part of the move from XUL involved no longer relying on the toolbox, so we have reorganized the menu&#8217;s into dialog&#8217;s (don&#8217;t worry most functions have a keyboard shortcut if you are one of those people that doesn&#8217;t want to deal with that extra click). </p>
<p>This cleanly displays all the available options, and doesn&#8217;t clutter up the main UI. This also provides space to easily add new features that fall into these logical spaces in the future.</p>
<p><img style="float:right;position:relative" title="Test Dialog" src="http://www.adamchristian.com/wp-content/uploads/2009/03/picture-5-300x140.png" alt="Test Dialog" width="300" height="140" /></p>
<p><img src="http://www.adamchristian.com/wp-content/uploads/2009/03/picture-6-300x140.png" alt="File Dialog" title="File Dialog" width="300" height="140" style="float:right;position:relative" /></p>
<p><img src="http://www.adamchristian.com/wp-content/uploads/2009/03/picture-7-300x197.png" alt="Options Dialog" title="Options Dialog" width="300" height="197" style="float:right;position:relative;" /></p>
<div style="clear:both"></div>
<p><strong>Improved Inspector</strong><br />
<img src="http://www.adamchristian.com/wp-content/uploads/2009/03/picture-8-274x300.png" alt="Inspector" title="Inspector" width="274" height="300" class="alignright size-medium wp-image-197" /></p>
<p>There was a lot of frustration when it came to getting the results from the inspector into the editor, some of this had to do with the non editable default nature of the elements we were using to draw them out in XUL, but the integration of the feature into the IDE became very messy and confusing.</p>
<p>This creates an obvious separation between the rest of the UI and the inspector feature and puts helper features out in front of you to simplify the process by dumping to the clipboard and then moving you to a focused editor window.</p>
<div style="clear:both"></div>
<p><strong>Improved Output</strong><br />
<img src="http://www.adamchristian.com/wp-content/uploads/2009/03/picture-31.png" alt="Output" title="Output" width="368" height="510" class="alignright size-full wp-image-202" /></p>
<p>The output UI has been completely revamped to give you the most important information quickly, but allow you to navigate down an expandable tree to explore the output of the exception.</p>
<p>All of the information in the output divs can be easily selected and copied to stick in bugs etc, but also saves you a trip to the error console as it should encompass all of the information being thrown in the error object, serialized and organized into a more readable format.</p>
<p>Thanks to JQuery UI&#8217;s information and error boxes I was able to tweak the CSS to make some relatively attractive, but more importantly, informative UI that should quickly give you the status of your test run.</p>
<div style="clear:both"></div>
<p><strong>More Information</strong></p>
<ul>
<li><a href="http://code.google.com/p/mozmill/">MozMill Google Code Project</a></li>
<li><a href="http://www.mikealrogers.com/archives/471">Mikeal Rogers Release Blog Post</a></li>
<li><a href="http://mozmill.googlecode.com/files/mozmill-1.1.xpi">Google Code XPI Download</a></li>
<li><a href="http://quality.mozilla.org/mozmill-docs">QMO Documentation</a></li>
<li><a href="http://pypi.python.org/pypi/mozmill">MozMill on PyPi</a></li>
</ul>
<p>
Thanks everyone who logged bugs!</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/185/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Micro-Bookmarking with MyTabs</title>
		<link>http://adamchristian.com/archives/147</link>
		<comments>http://adamchristian.com/archives/147#comments</comments>
		<pubDate>Tue, 24 Feb 2009 01:18: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[Web]]></category>
		<category><![CDATA[Addons]]></category>
		<category><![CDATA[Mozmill]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=147</guid>
		<description><![CDATA[A few weeks ago I realized that every time I boot my laptop, one of the first things I do is to open Firefox, and immediately load about 7 web sites as tabs. Some of them requiring user interaction to navigate to the desired state. I didn&#8217;t realize that this was actually a phenomenon called [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-156" style="float:right" title="MyTabs" src="http://www.adamchristian.com/wp-content/uploads/2009/02/mytabs.png" alt="MyTabs" width="88" height="51" />A few weeks ago I realized that every time I boot my laptop, one of the first things I do is to open Firefox, and immediately load about 7 web sites as tabs. Some of them requiring user interaction to navigate to the desired state. I didn&#8217;t realize that this was actually a phenomenon called &#8220;micro-bookmarking&#8221;, and that I may not be the only person who has this routine.</p>
<p>I don&#8217;t necessarily want to bookmark these sites, and this process of opening them is somehow part of my routine, however spending this kind of time every time I want to get to this state is just silly. Part of the ritual is to go through each of the open tabs, read the most recent updates and then close the tab, repeating this whole process many times a day.</p>
<p>At this point you should be starting to get the jist, to automate this whole process I created a Firefox Extension called <a href="http://wiki.github.com/admc/mytabs">MyTabs</a>. The UI and use case is simple, but some of the tools I built in make it potentially very powerful.</p>
<p><a href="mytabs">MyTabs</a> has the <a href="http://code.google.com/p/mozmill/wiki/ControllerAPI">MozMill Controller</a> built in, and is automatically setup in the tabs content window scope, allowing you to <a href="http://wiki.github.com/admc/mytabs/tab-scripting">write and attach scripts to each tab to be executed &#8216;onload&#8217;</a>. Thus automating the need to ever manually login to your web applications again.<br />
<br/><br />
<strong><a href="http://wiki.github.com/admc/mytabs/tab-scripting">Example script</a> for logging into <a href="http://www.facebook.com">Facebook</a>:</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
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Lookup the three elements I want to interact with</span>
<span style="color: #003366; font-weight: bold;">var</span> email <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> elementslib.<span style="color: #660066;">ID</span><span style="color: #009900;">&#40;</span>doc<span style="color: #339933;">,</span> <span style="color: #3366CC;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> pass <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> elementslib.<span style="color: #660066;">ID</span><span style="color: #009900;">&#40;</span>doc<span style="color: #339933;">,</span> <span style="color: #3366CC;">'pass'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> login <span style="color: #339933;">=</span> doc.<span style="color: #660066;">getElementsByClassName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'UILinkButton_A'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//Controller expects elementslib objects</span>
<span style="color: #003366; font-weight: bold;">var</span> elibLogin <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> elementslib.<span style="color: #660066;">Elem</span><span style="color: #009900;">&#40;</span>login<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//Tell the controller to type the credentials</span>
tab.<span style="color: #660066;">type</span><span style="color: #009900;">&#40;</span>email<span style="color: #339933;">,</span> <span style="color: #3366CC;">'my_facebook_account@address.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tab.<span style="color: #660066;">type</span><span style="color: #009900;">&#40;</span>pass<span style="color: #339933;">,</span> <span style="color: #3366CC;">'my_password'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//Click the login button</span>
tab.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span>elibLogin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>This is all possible by a really slick snipped of code I found on <a href="https://developer.mozilla.org/en/Code_snippets/Tabbed_browser">MDC</a>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> newTabBrowser <span style="color: #339933;">=</span> gBrowser.<span style="color: #660066;">getBrowserForTab</span><span style="color: #009900;">&#40;</span>gBrowser.<span style="color: #660066;">addTab</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://www.google.com/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
newTabBrowser.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;load&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> newTabBrowser.<span style="color: #660066;">contentDocument</span>.<span style="color: #660066;">body</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Stuff&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><br/><strong>Security/Preferences</strong></p>
<p>For the sake of security I made it so that you can only attach scripts, not edit them so that you friends can&#8217;t go and view your script to get those plain text passwords. All the tab data is stored in the prefManager so that it is available across sessions. However if someone knew enough to pick apart the source, install a trusted JS Shell and manually access the prefManager you may be in trouble&#8230; so be careful about super sensitive information especially on a shared machine.</p>
<p>Using <a href="http://ui.jquery.com">jQuery UI</a> I was able to make the UI relatively attractive, intuitive and possibly skinnable in the future (if you want to do this yourself, grab the source swap out the jQuery UI theme CSS directory and boom you have yourself  new look.)</p>
<p><br/><strong>Some Screenshots</strong></p>
<p><img class="alignnone size-full wp-image-148" title="Welcome" src="http://www.adamchristian.com/wp-content/uploads/2009/02/picture_1.png" alt="Welcome" width="592" height="410" /><br />
<img class="alignnone size-full wp-image-149" title="Tab Overview" src="http://www.adamchristian.com/wp-content/uploads/2009/02/picture_2.png" alt="Tab Overview" width="581" height="403" /><img class="alignnone size-full wp-image-150" title="Adding new Tabs" src="http://www.adamchristian.com/wp-content/uploads/2009/02/picture_3.png" alt="Adding new Tabs" width="581" height="403" /><img class="alignnone size-full wp-image-151" title="Tab Scripting" src="http://www.adamchristian.com/wp-content/uploads/2009/02/picture_4.png" alt="Tab Scripting" width="581" height="403" /></p>
<p>The source is fully available on <a href="http://www.github.com">GitHub</a>, and the <a href="http://cloud.github.com/downloads/admc/mytabs/mytabs-03.xpi">XPI</a> is available on <a href="http://addons.mozilla.org">Mozilla Add-ons</a>.</p>
<ul>
<li><a href="http://github.com/admc/mytabs/tree/master">MyTabs on GitHub</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/10720/">MyTabs on Mozilla Add-ons</a></li>
</ul>
<p>Remember that I am currently on bug fix release 0.3, but please let me know if you run into any problems!</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/147/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XUSH (.01), you know it&#8217;s fun to say.</title>
		<link>http://adamchristian.com/archives/121</link>
		<comments>http://adamchristian.com/archives/121#comments</comments>
		<pubDate>Wed, 28 Jan 2009 22:57:49 +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[Web]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Mozmill]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Venkman]]></category>
		<category><![CDATA[XPCOM]]></category>
		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://adamchristian.com/?p=121</guid>
		<description><![CDATA[Over the past 8 months I have been neck deep in XUL and XPCOM and with Venkman being as unintuitive as it is I have badly needed a shell with access to the trusted space in the browser. I also had a couple more requirements, which were that it was super easy to get at [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past 8 months I have been neck deep in <a href="http://www.mozilla.org/projects/xul/">XUL</a> and <a href="http://www.mozilla.org/projects/xpcom/">XPCOM</a> and with <a href="https://addons.mozilla.org/en-US/firefox/addon/216">Venkman</a> being as unintuitive as it is I have badly needed a shell with access to the trusted space in the browser. I also had a couple more requirements, which were that it was super easy to get at (keyboard shortcut), and that it looks awesome (transparency required).</p>
<p>Since making things looks really nice in <a href="http://www.mozilla.org/projects/xul/">XUL </a>is really hard, I decided that I would build the UI in the current Firefox content window (sorry <a href="http://www.mozillamessaging.com/en-US/">tbird</a> etc, but I built a less shiny version of this into <a href="http://code.google.com/p/mozmill/">Mozmill</a> trunk for all of you).</p>
<p>Some of the functionality that I decided was a top priority was some slightly abstracted access to the window mediator which I am calling &#8216;windows&#8217;, and is simply an array of all the different windows available in the whole browser. The other big one is dir(), I am constantly looking for a property in one of the many, many objects I am trying to access and now that is really easy.</p>
<p>All of that goodness combined with enough space to stick real code blocks and a full history (which you can access using the shift key and up/down arrows), I find myself pretty comfortable.</p>
<p>After <a href="http://adamchristian.com/stuff/xush-01.xpi">installing the extension</a>, you can <strong>simply press &#8216;meta (cmd on mac) + shift + s&#8217;</strong> and you should be greeted with the following (toggling will show/hide the shell):</p>
<p><strong>UPDATE: </strong>It was pointed out to me that on windows meta may not be bound, so I have updated both the extension and git, please try &#8216;alt+shift+ctrl+s&#8217; or &#8216;ctrl+shift+s&#8217; on windows/linux, (I am testing in a VM so it&#8217;s a bit strange. Sorry about the confusion!) </p>
<p> </p>
<div id="attachment_123" class="wp-caption alignnone" style="width: 624px"><img title="Welcome to XUSH" src="http://www.adamchristian.com/wp-content/uploads/2009/01/picture-13-1024x847.png" alt="Welcome to XUSH" width="614" height="508" /><p class="wp-caption-text">Welcome to XUSH</p></div>
<p>To get started, you can type &#8216;help&#8217; to see what is available to you.</p>
<div id="attachment_128" class="wp-caption alignnone" style="width: 831px"><img class="size-full wp-image-128 " title="Help Menu" src="http://www.adamchristian.com/wp-content/uploads/2009/01/picture-22.png" alt="Help Menu" width="821" height="206" /><p class="wp-caption-text">Help Menu</p></div>
<p> </p>
<p> </p>
<p>Other available functionality includes a big chunk of the <a href="http://code.google.com/p/mozmill/wiki/ControllerAPI" target="_blank">mozmill controller</a> for driving user actions in the browser, as well as <a href="http://code.google.com/p/mozmill/source/browse/trunk/mozmill/extension/resource/modules/elementslib.js" target="_blank">elementslib</a> &#8212; which gives you all kinds of powerful features for looking up nodes in the browser.</p>
<div id="attachment_127" class="wp-caption alignnone" style="width: 868px"><img class="size-full wp-image-127 " title="ElementsLib" src="http://www.adamchristian.com/wp-content/uploads/2009/01/picture-6.png" alt="ElementsLib" width="858" height="187" /><p class="wp-caption-text">ElementsLib</p></div>
<p>As I mentioned above, the windows helper can quickly give you an idea of what is open in the browser and let you directly access the objects in the windows[x] array.</p>
<div id="attachment_129" class="wp-caption alignnone" style="width: 840px"><img class="size-full wp-image-129 " title="Windows Helper" src="http://www.adamchristian.com/wp-content/uploads/2009/01/picture-3.png" alt="Windows Helper" width="830" height="149" /><p class="wp-caption-text">Windows Helper</p></div>
<p> </p>
<p>The nice big console gives you enough space (and using shift) you can do multiple line commands to actually execute code snippets:</p>
<div id="attachment_130" class="wp-caption alignnone" style="width: 676px"><img class="size-full wp-image-130 " title="Code Blocks" src="http://www.adamchristian.com/wp-content/uploads/2009/01/picture-5.png" alt="Code Blocks" width="666" height="218" /><p class="wp-caption-text">Code Blocks</p></div>
<p>My next round of features will include some more helpers, including tab completion and any bug fixes I find, please let me know of any that you find!</p>
<p>If you would like to play with the source, <a href="http://github.com/admc/xush/tree/master">I have it on github </a>and have a python script that uses <a href="http://code.google.com/p/mozrunner/">mozrunner</a> to launch it in dev mode (with venkman installed, although now I don&#8217;t really need it), but saves you from installing and uninstalling the extension every-time you want to try out your latest code changes:<br />
<code><br />
python xush.py<br />
</code></p>
<p>That should launch <a href="http://www.getfirefox.com">Firefox</a> with <a href="http://github.com/admc/xush/tree/master">XUSH</a> and <a href="https://addons.mozilla.org/en-US/firefox/addon/216">Venkman</a> both installed and allow you to hit the shortcut and wham, test away.</p>
<p>After another round of bug fixes I will be submitting this to <a href="https://addons.mozilla.org/en-US/firefox/">Mozilla AMO</a>.</p>
<p><strong>Other projects you might be into if this interests you:</strong></p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/216">Venkman</a></li>
<li><a href="http://code.google.com/p/mozmill/">Mozmill</a></li>
<li><a href="http://getfirebug.com/releases/chromebug/">Chomebug</a></li>
</ul>
<p>Thanks for your interest!</p>
]]></content:encoded>
			<wfw:commentRss>http://adamchristian.com/archives/121/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
