<?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/"
	>

<channel>
	<title>The Mozmonkey Blog</title>
	<atom:link href="http://blog.mozmonkey.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mozmonkey.com</link>
	<description>More fun with monkeys!</description>
	<pubDate>Mon, 12 Apr 2010 16:38:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Climbing Mount Shasta &#8212; Part 2</title>
		<link>http://blog.mozmonkey.com/2009/climbing-mount-shasta-part-2/</link>
		<comments>http://blog.mozmonkey.com/2009/climbing-mount-shasta-part-2/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 23:25:16 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Insipiring]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=224</guid>
		<description><![CDATA[


This is a follow-up to the post I wrote last year with a lot of new information I learned from my last two climbs. Be sure to read the original post first to get a good overview about the mountain and the route.
The Tale of Two Trips
My plan was to attempt to climb Shasta twice [...]]]></description>
			<content:encoded><![CDATA[<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3565581023/in/set-72157618728310597/" title="Dad and I at the summit"><img src="http://farm4.static.flickr.com/3372/3565581023_8e1d36f15e.jpg" /></a>
</p>
<p>This is a follow-up to the post I <a href="http://blog.mozmonkey.com/2009/climbing-mount-shasta/">wrote last year</a> with a lot of new information I learned from my last two climbs. Be sure to read the <a href="http://blog.mozmonkey.com/2009/climbing-mount-shasta/">original post</a> first to get a good overview about the mountain and the route.</p>
<h3>The Tale of Two Trips</h3>
<p>My plan was to attempt to climb Shasta twice in one week in May, with a few days in between to recover. It didn&#8217;t go entirely as well as I had planned, but I did learn a lot. Here&#8217;s how both trips went.</p>
<h4>Trip 1</h4>
<p>
<em>Note: The events in the first trip are not representative of a common climb up Shasta, but the risks are present. Be prepared and wear a helmet.</em>
</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3540365609/in/set-72157618300173191/" title="Dehydrated lasagna for dinner"><img src="http://farm3.static.flickr.com/2023/3540365609_6f5c8c6610_m.jpg" /></a>
</p>
<p>The first trip was with my friends Tracy and Karen and we decided to do a three day journey starting with the first night at horse camp, to acclimate to the elevation, and then to base camp at Lake Helen the next day. Summit morning was extremely difficult; there was ~40mph winds up at Red Banks, which kept dusting the climbers with snow and once in awhile pelting small ice balls at them. About an hour into the climb, at a 15 <a href="#pacing">steps and stop pace</a>, Karen started feeling <a href="http://en.wikipedia.org/wiki/Hypothermia">hypothermic</a> and couldn&#8217;t go any further. I told Tracy to keep going and I&#8217;d walk Karen back down to base camp and then catch up. After getting Karen into the tent and making sure she would be okay, I started back up the mountain, now at a ~35 <a href="#pacing">steps and stop pace</a> to catch up. </p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3541227354/in/set-72157618300173191/" title="Base camp"><img src="http://farm3.static.flickr.com/2202/3541227354_eef445ff52_m.jpg"/></a>
</p>
<p>Before I caught up to her, and on one of the steeper parts of the ascent, I heard a climber up ahead yell &#8220;rock!&#8221; and everyone around me, including myself, dug our ice axes into the snow and crouched into safe fetal positions on the snow. About 3 second later I felt a medium size rock slam into my body. For the first few moments I went into shock and everything was a little slower and I was a bit dizzy. I went through the mental checklist: can I move my toes? Check. Am I still awake? Check. Still holding onto my ice axe? Check. I was lucky that the rock hit me square on the butt cheek, otherwise it could have been a much more serious issue.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3541245192/in/set-72157618300173191/" title="Almost to Red Banks"><img src="http://farm4.static.flickr.com/3598/3541245192_373aa2f618_m.jpg"/></a>
</p>
<p>After I composed myself and was sure that there weren&#8217;t any more falling rocks, I got up and caught up to Tracy close to  Red Banks (see picture above). We continued over the ridge and started hiking up the next hill. The wind was insane and I was exhausted from trying to catch up to Tracy, not drinking/eating enough and still mentally recovering from the incident with the rock. Tracy&#8217;s was determined, but her camelback hose has froze and she had not been drinking or eating enough either. At that point I realized that getting to the summit and back to base camp wouldn&#8217;t be safe and we needed to turn around. (we weren&#8217;t even to Misery Hill yet) It&#8217;s always important to put the safety of the group ahead of hitting the summit. The mountain will still be there next year.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3541256032/in/set-72157618300173191/" title="At the point we turned around"><img src="http://farm3.static.flickr.com/2137/3541256032_46f528a933.jpg"/></a>
</p>
<h4>Trip 2</h4>
<p>A few days later, with a huge bruise on my ass, I attempted the mountain with my Dad. The conditions couldn&#8217;t have been better &#8212; calm skies, no wind to worry about and a few clouds to keep base camp cool from the midday sun. We did the standard two-day trip, with one night at Helen Lake, and we were able to hit the summit without a hitch.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3566375932/in/set-72157618728310597/" title="On the way to Red Banks"><img src="http://farm3.static.flickr.com/2475/3566375932_fda5b80734_m.jpg"/></a><a href="http://www.flickr.com/photos/mozmonkey/3566388474/in/set-72157618728310597/" title="Right before Misery Hill"><img src="http://farm3.static.flickr.com/2445/3566388474_33f839072d_m.jpg"/></a><a href="http://www.flickr.com/photos/mozmonkey/3566389396/in/set-72157618728310597/" title="Going up Misery Hill"><img src="http://farm4.static.flickr.com/3362/3566389396_ea0fd8284a_m.jpg"/></a><a href="http://www.flickr.com/photos/mozmonkey/3565581023/in/set-72157618728310597/" title="On the summit!"><img src="http://farm4.static.flickr.com/3372/3565581023_8e1d36f15e_m.jpg"/></a>
</p>
<h3>Training</h3>
<p>Before you attempt the mountain be sure to do the proper training so that you can complete it safely. Last season I trained too hard, too fast and didn&#8217;t balance my muscle groups, which led to a bad back injury and a trip to the ER for a mild <a href="http://en.wikipedia.org/wiki/Vasovagal_episode">vasovagal episode</a> from the pain.  To prevent this, make sure when you work one muscle group at the gym you also build the opposite group. For example, if you are building your pectoral muscles (pecs), make sure you spend as much time on your shoulders (bench press followed by seated rows). When working your abs also strengthen your lower back. Do slow, clean reps and watch your form. If you <em>don&#8217;t</em> do this, you will injure yourself! </p>
<p>Another good way to train is to find some good difficult hikes around your area and notice which muscles are weak on the hike and sore the next day. Those are the muscles you&#8217;ll want to strengthen at the gym. If you find that your calve muscles get tired easily or are really sore the next day, make sure to concentrate on building those muscles between hikes. Keep doing this until your entire body feels strong during and after the hike. In the San Francisco Bay area I&#8217;ve found that <a href="http://www.yelp.com/biz/mission-peak-regional-park-fremont">Mission Peak</a> is a great mountain to train on. Whichever trail you pick for training, make sure it has a decent elevation gain. For example, Mission Peak has about 2000 feet elevation gain.</p>
<h3>Caffeine</h3>
<p>Another good trick that I tried before Shasta was to give up coffee three weeks before the climb. This lowered my tolerance to caffeine so that when I had coffee the morning of the climb and in food supplements like Gu it was far more effective. In fact, I don&#8217;t remember the last time I had that much energy. When we reached base camp, after a full day of hiking, we still had the energy to build a large snow shelter, complete with walls.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3566364096/in/set-72157618728310597/" title="Building the snow shelter walls"><img src="http://farm3.static.flickr.com/2470/3566363470_9e158b108f.jpg"/></a>
</p>
<p>My Dad did the same caffeine trick, so when we got to base camp on my second trip, we went to work improving the snow shelter with bigger walls and a <a href="http://www.flickr.com/photos/mozmonkey/3566362992/in/set-72157618728310597/">breakfast nook</a>. Not bad at 11,000 feet.</p>
<h3>Altitude</h3>
<p>One way to counter the affects of the high altitude is to get a prescription for Diamox, which you&#8217;ll need to start taking at least 24 hours before the climb. The standard dose is 240mg, which can cause you to urinate a lot, but studies show that taking 125mg (basically cutting the 240mg pill in half) is just as effective. </p>
<p>Here&#8217;s more information on altitude sickness, prevention and acclimation:<br />
<a href="http://www.princeton.edu/~oa/safety/altitude.html">http://www.princeton.edu/~oa/safety/altitude.html</a></p>
<h3>Talk to the rangers</h3>
<p>The conditions on the mountain change daily and the rangers can alert you to things to look out for. Always talk to them and take their advice to ensure a safe trip. When you get your wilderness pass at the ranger station in town, ask them about the mountain, the climb, weather conditions and to show you their short mountain presentation. </p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3541235096/in/set-72157618300173191/" title="The rangers"><img src="http://farm3.static.flickr.com/2178/3541235096_4c6a5aec85.jpg" /></a>
</p>
<p>When you&#8217;re on the mountain, make sure you ask similar questions to all the rangers you pass. Here&#8217;s a list of handy questions to ask:</p>
<ul>
<li>What are the current conditions like?</li>
<li>Any avalanche dangers?</li>
<li>
What should do I do if:</p>
<ul>
<li>I get caught in an avalanche?</li>
<li>someone yells &#8220;rock&#8221;?</li>
</ul>
</li>
<li>What is the best route up avalanche gulch?</li>
<li>What should be our absolute <a href="#turnaroundtime">turn around time</a> on the summit ascent?</li>
<li>How&#8217;s your day? Can I buy you a beer when we get off this mountain?</li>
</ul>
<p>If you&#8217;re nice to the rangers, they&#8217;ll take care of you!</p>
<h3 id="pacing">Pacing yourself</h3>
<p>A lot of climbers will be tempted to push themselves as long as possible between breaks, but on the steep terrain and high altitude, this will wear you out really quickly. A good technique is to figure out an attainable number of steps between breaks and stick to it. When I was going up Red Banks my pace was about 35 steps per 15 - 30 second break. When we were on Misery Hill we adjusted it to 15 - 20 steps. Be sure to use some of your breaks to hydrate and consume solid nutrients, like Gu or trail mix. Counting off your steps will also give you something to concentrate on and off of how it looks like you&#8217;re not making any progress.</p>
<h3 id="turnaroundtime">Turn around time</h3>
<p>Hitting the summit is the goal of all the climbers on the mountain, but getting a late start or not turning around early enough can be dangerous. As the sun comes up and warms the mountain, it&#8217;ll turn nice solid ice to squishy snow and slides. It can make your decent more difficult and, at the worst, it can open up small crevasse or cause avalanches. Be sure to decide on an absolute turn around time for your ascent. If you don&#8217;t hit the summit by this time, you turn around &#8212; no exceptions. Ask the rangers what the turnaround time should be considering the current conditions. Ideally you should be back at base camp before noon.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3565569011/in/set-72157618728310597/" title="A crevasse opening at Red Banks"><img src="http://farm4.static.flickr.com/3662/3565569011_56ae3e1643_m.jpg"/></a>
</p>
<h3>Equipment</h3>
<p>The number one piece of equipment you should have is a helmet! You can rent one pretty cheap at The Fifth Season in town. Many climbers will think they don&#8217;t need one, but if I didn&#8217;t have one and the rock had hit me on the head, I would have been <strong>dead</strong>. There&#8217;s no question about that. If that doesn&#8217;t convince you, last year <a href="http://www.redding.com/news/2008/dec/03/climbers-death-is-reminder-of-mountain-risks/">climber died</a> on the Avalanche Gulch route because she was not properly prepared.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3540448315/in/set-72157618300173191/" title="Helmets above Red Banks"><img src="http://farm3.static.flickr.com/2163/3540448315_9b65a9c48a.jpg"/></a>
</p>
<p>Make sure the rest of your equipment is fitted right for you and balanced in your bag. Ask the friendly people at the sporting good store to help you with this. Wearing a backpack that is not fitted for your height and size will easily injure your back. Get your back measured so you can get the right size pack.</p>
<p>If you&#8217;re not carrying skis and there&#8217;s snow at Bunny Flats, be sure to rent snow shoes for the decent from base camp. Otherwise, you&#8217;ll be &#8220;post holing&#8221; (i.e. your feet will sink into the snow about a foot or more with each step) all the way down to your car and you shoes will be filled with freezing water.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3565610537/in/set-72157618728310597" title="Snow shoes"><img src="http://farm4.static.flickr.com/3625/3565610537_2d45449c67_m.jpg"></a>
</p>
<h3>Planning for 2010</h3>
<p>For 2010, we&#8217;ll be trying a different approach on the ascent to base camp, we&#8217;re going to ski <em>up</em>! This is called <a href="http://en.wikipedia.org/wiki/Ski_randonnee#Alpine_Touring_.28randonn.C3.A9e.29">Ski Randonnée</a>, or Alpine Touring, in which you wear skis with specially designed downhill-like bindings that allows you to ascend like cross-country skis. Attaching a special fabric to the bottom, called climbing skins, prevents the skis from slipping backwards when you are going uphill. Then when you pack up base camp you remove the skins, clip down and ski all the way to your car.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2009/climbing-mount-shasta-part-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Split Button Form Control</title>
		<link>http://blog.mozmonkey.com/2009/split-button-form-control/</link>
		<comments>http://blog.mozmonkey.com/2009/split-button-form-control/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 08:28:05 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Code]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=186</guid>
		<description><![CDATA[A split button element is a submit button with a built-in menu of actions. My goal was to create a split button form control that is both semantic and accessible. 

Stylized controls, like this, should only be used when there is a solid reason to do so. In general the default browser controls work fine [...]]]></description>
			<content:encoded><![CDATA[<p>A split button element is a submit button with a built-in menu of actions. My goal was to create a split button form control that is both semantic and accessible. </p>
<p><iframe src="/pages/examples/SplitButton/split-sample.html" height="180" width="500"></iframe></p>
<p>Stylized controls, like this, should only be used when there is a solid reason to do so. In general the default browser controls work fine and provide a pattern that users are familiar with. For certain situations, however, it is useful to provide a simple way to choose a single action using stylized controls.</p>
<pre>
<h3>Split Button HTML</h3>

&lt;script type="text/javascript" src="splitbutton.js"&gt;&lt;/script&gt;

&lt;p class="splitButton"&gt;
   &lt;select name="actions" id="actions" title="Choose Action"&gt;
      &lt;option&gt;Send Message&lt;/option&gt;
      &lt;option&gt;Flag&lt;/option&gt;
      &lt;option&gt;Chug Pixie Stick&lt;/option&gt;
   &lt;/select&gt;
   &lt;input type="submit" value="Go" /&gt;
&lt;/p&gt;
</pre>
<p>This will create a split button with 3 options and the default button name will be &#8220;Choose Action&#8221; (see example above).   The key elements here are:</p>
<ul>
<li>A surrounding element with the <code>splitButton</code> class.</li>
<li>A select element with an <em>optional</em> title attribute.</li>
<li>A submit button.</li>
</ul>
<p>If the select element has a title attribute, that text will be used as the default button name; otherwise, it will use the first (or selected) option as the button name.</p>
<p>When an action is selected the JavaScript will send a click event (via the <code>click()</code> function) to the submit button element in order submit the form.</p>
<p>The menu is also accessible with the keyboard. When you bring focus to control, the menu will open and you can use your arrows to select an option. Pressing ESC will close the menu.</p>
<h3>Dependencies</h3>
<p>This code uses YUI 2.6 with the Selector <em>beta</em> library and can easily be ported to jQuery or any other framework.</p>
<h3>Download</h3>
<p><a href="/pages/examples/SplitButton/SplitButton.zip">Split button</a></p>
<h3>Usage</h3>
<p>You are free to download, modify and use this code anywhere you want. There are no restrictions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2009/split-button-form-control/feed/</wfw:commentRss>
		</item>
		<item>
		<title>I don&#8217;t want to miss a single life experience &#8212; even death</title>
		<link>http://blog.mozmonkey.com/2009/i-dont-want-to-miss-a-single-life-experience-even-death/</link>
		<comments>http://blog.mozmonkey.com/2009/i-dont-want-to-miss-a-single-life-experience-even-death/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 22:14:19 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Life]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=144</guid>
		<description><![CDATA[I&#8217;m the type of person who loves to learn and experience new and different things whenever I can.  My Parents have always shown me how exposure and experiences can enrich your life, and often times the more awkward or uncomfortable it is, the more you get out of it.
For example, recently I had a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m the type of person who loves to learn and experience new and different things whenever I can.  My Parents have always shown me how exposure and experiences can enrich your life, and often times the more awkward or uncomfortable it is, the more you get out of it.</p>
<p>For example, recently I had a few days where I was going through some real depression; the cause of which is another story which I&#8217;m sure I&#8217;ll write about in the near future.  Having depression felt odd since I&#8217;ve never really experienced depression before and have always been good at regulating my emotional state.  This is how my mind processed the experience:</p>
<p>&#8220;Hmmm, this is a new feeling. Kind of different.&#8221;<br />
&#8220;I think it&#8217;s depression&#8230;yup, I&#8217;m entirely sure it&#8217;s depression.&#8221;<br />
&#8220;It&#8217;s an odd new feeling.&#8221;<br />
&#8220;I have decided I don&#8217;t like it much.&#8221;<br />
&#8220;Okay, I know how to deal with this, I will now <strong>decide</strong> to be happy!&#8221;<br />
&#8220;Hmmm, I&#8217;m still feeling depressed, that didn&#8217;t work very well.&#8221;</p>
<p>Simply deciding to be happy didn&#8217;t help as much as it usually does, but instead, I eventually went for a hike where I meditated and later enlisted the support of friends.  I let the feelings wash over me and they were gone in a couple of days.</p>
<p>Being depressed made me feel completely tired, sad and the need to be around people but somehow despised the thought of being around people.  The contradiction alone was enough to keep my mind busy for awhile to sort it out.</p>
<p>After the fact, I find it funny that I was so intrigued by this new feeling and experience.</p>
<h3>The Death Experience</h3>
<p>A couple years ago the thought of death became my greatest fascination &#8212; and fear.  It was brought on by some very bizarre dreams I had, where in them, I died.  At first it was disturbing, and then it became something of a mental obsession.</p>
<p>I am a spiritual person and was raised Catholic (although, not currently practicing), so I posed this question to myself: &#8220;What if there <em>is</em> no after life? What happens?  What&#8217;s it like?&#8221;  That became a riddle for me to unwind; similar to asking about the meaning of life.  The vision of nothingness appeared to me like an empty black void.  &#8220;What is is like to <em>not</em> exist?&#8221;  </p>
<p>That&#8217;s a hard question to answer because, well, <em>existing</em> is practically all I do.</p>
<p>The other part of the question was, &#8220;What is it like to die instantly?&#8221;  The thought of being alive one moment and not the next without being aware of it, scared me.  But why?  It&#8217;s not like it&#8217;ll matter much after I&#8217;m dead.  I wont know that I&#8217;m dead, so why should it matter that I know I&#8217;m about to go?</p>
<p>Sometimes I pose this question to friends and they usually say they would rather not know and just die instantly or in their sleep.  This still bothers me.</p>
<p>I finally realized why &#8212; I want to know what it&#8217;s <em>like</em> to die.  I want to be able to embrace that final life experience before I head off into the great unknown. (as ironic as that is) Somehow I feel that if I miss it, then I have missed one of life&#8217;s greatest, and last, experiences.  Some of you reading this probably think that&#8217;s pretty sick.  I&#8217;m okay with that.</p>
<h3>Conclusion</h3>
<p>For those of you who are afraid this is the prologue to a suicide letter, fear not.  There are still too many experience I have not had to end this ride short.  I expect to live my life long and full until I die at a very old age.</p>
<p>Maybe I&#8217;ll be that old guy who interrupts your conversation at the coffee shop to bore you with off color Irish jokes (&#8221;What&#8217;s the difference between an Irish wedding and an Irish wake?&#8221;) or tails of grand things I [never] did.  Yes I&#8217;m sure I&#8217;ll be <em>that guy</em>.  Oh the stories I will tell.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2009/i-dont-want-to-miss-a-single-life-experience-even-death/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Climbing Mount Shasta</title>
		<link>http://blog.mozmonkey.com/2009/climbing-mount-shasta/</link>
		<comments>http://blog.mozmonkey.com/2009/climbing-mount-shasta/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 02:32:11 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Events]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=89</guid>
		<description><![CDATA[
UPDATE: I&#8217;ve written a follow-up post which contains a lot of new information and how my two 2009 trips went.



As 2009 rolled around I decided that this would be a great year to go backpacking up Mount Shasta again.  I have attempted the mountain twice in the past and topped out (i.e. reached the [...]]]></description>
			<content:encoded><![CDATA[<p>
<strong>UPDATE:</strong> I&#8217;ve written a <a href="http://blog.mozmonkey.com/2009/climbing-mount-shasta-part-2/">follow-up</a> post which contains a lot of new information and how my two 2009 trips went.
</p>
<hr />
<p>
As 2009 rolled around I decided that this would be a great year to go backpacking up Mount Shasta again.  I have attempted the mountain twice in the past and topped out (i.e. reached the summit) once.  This year I&#8217;m organizing a group trip, which is why I&#8217;ve started planning so early and the reason for this post.  Here I will outline my experience with the mountain and what to expect.
</p>
<p>
Not all the pictures I&#8217;ve included are mine.  Here are the pictures from my Shasta trips in <a href="http://www.flickr.com/photos/mozmonkey/sets/72157616698501829/">2001</a> and <a href="http://www.flickr.com/photos/mozmonkey/sets/72157616789200014/">2002</a>.
</p>
<p class="blockImg">
<a href="http://flickr.com/photos/mary-lynn/453491382/"><img src="http://farm1.static.flickr.com/215/453491382_f231f59763_m.jpg"></a>
</p>
<h3>Mountain Stats</h3>
<dl>
<dt>Location</dt>
<dd>Northern California (near the Oregon border)
<dd>
<dt>Elevation at the top</dt>
<dd>14,179 ft</dd>
<dt>Trailhead</dt>
<dd>6,920 ft</dd>
<dt>Elevation Gain</dt>
<dd>7,259 ft</dd>
<dt>Trail Distance</dt>
<dd>~ 6 miles (averages to about 1,000 feet elevation gain per mile)</dd>
<dt>Nights on trail</dt>
<dd>1</dd>
<dt>Best time of year to climb</dt>
<dd>May to Mid July</dd>
</dl>
<p class="blockImg">
<a href="http://flickr.com/photos/garytrinity/3122747937/"><img src="http://farm4.static.flickr.com/3201/3122747937_5d8727b845_m.jpg" alt="" /></a>
</p>
<h3>Overview of a standard trip</h3>
<p>
Typically the climb and decent will take two days, although, some people do it in one.
</p>
<p>
Day 1 starts with a 4 - 6 hour hike from the parking lot up to Helen Lake (which is really just a glacier) where you setup base camp.  The rest of the day is spent admiring the view, making food (yay, dehydrated meals!) and preparing your day pack for the next morning.
</p>
<p>
The summit ascent begins somewhere between 12 AM - 3 AM the next morning.  You&#8217;ll want to start as early as possible, while the snow is still firm and solid, and get to red banks before the sun starts making it soft and slushy.
</p>
<p>
When you reach the summit stop to enjoy the view, regain your energy and prepare for the best part of the journey &#8212; <a href="http://www.flickr.com/search/?l=cc&#038;ss=2&#038;w=all&#038;q=glissade+mountain&#038;m=text">glissading</a> down the mountain!  This literally means you will sit on your butt in the groove created by the people before you and slide down the entire mountain; stopping briefly at base camp to collect the rest of your gear.  Not to worry, you will have your ice axe with you as a safety device that will help you regulate your speed down the mountain. Think of it as your hand brake.
</p>
<p>
So that&#8217;s it, 2 days to get to the top and and 3 - 4 hours down.
</p>
<p class="blockImg">
<a href="http://flickr.com/photos/fauxpork/381936793/"><img src="http://farm1.static.flickr.com/146/381936793_daf67bc7f0_m.jpg?v=0" alt="" /></a>
</p>
<h3>My First Attempt</h3>
<p>
Now that you know the basics, here are my experiences.
</p>
<p>
As long as I can remember my father has been telling me the story of when he was young and climbed Shasta with his friends from school.  It always sounded like an exciting adventure and in 2001 I invited him to climb it with me.  He spent months preparing.  Hired a personal trainer, lost a lot of weight and really got prepared for the trip.  I was 20 years old and thought I was in perfect shape and wouldn&#8217;t need to train or do anything to prepare.  I mean, I&#8217;ve done hikes before, I went biking regularly, how hard could it be?  That was my first mistake.
</p>
<p>
Our second mistake was to attempt the mountain sometime in August or September.  At that time of year much of the snow has melted at the base of the mountain and you have to traverse up loose volcanic <a href="http://en.wikipedia.org/wiki/Scree">scree</a> all the way to base camp.  It was miserable, and I was seriously lagging behind my Dad.
</p>
<p>
The next morning we decided not to attempt the summit since the snow was melting and could cause falling rocks.  And I was still exhausted from the day before.
</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3443262677/in/set-72157616698501829/"><img src="http://farm4.static.flickr.com/3645/3443262677_6be97d848c_m.jpg" alt="" /></a><br />
<a href="http://www.flickr.com/photos/mozmonkey/3443263233/in/set-72157616698501829/"><img src="http://farm4.static.flickr.com/3555/3443263233_e6b7eaf1b4_m.jpg" alt="" /></a>
</p>
<h3>My Second Attempt &#8212; Success!</h3>
<p>
The following year we decided to attempt it again with a better understanding of how to approach it.  I was 21 years old now, so <em>a lot</em> wiser and as a bonus was legal to drink! (although that has nothing to do with the story)
</p>
<p>
This time I started training about 2 months prior to the climb by going to the local high school 2 or 3 nights a week and running the bleachers.  That made all the difference in the world.
</p>
<p>
We also decided to go in June, so the snow on the mountain was almost at the trail head.  This helps considerably by giving you enough traction to hike straight up the mountain without a lot of traversing.
</p>
<p>
We got to Helen Lake and the next morning started the ascent around 12 AM, while it was still dark.  With our headlamps turned on and crampons on our boots we began the steep hike to the summit.  The closer we got the thinner the air became.  With the summit in view I would take about 5 to 10 steps and need to stop for a short break.
</p>
<p>
Reaching the top was extremely rewarding and provided a view that was worth every minute of the climb.  It&#8217;s beyond description and pictures can&#8217;t come close to capturing it; you&#8217;re at the top of the world.  From there you can look down at the giant shadow the mountain casts on the rest of the valley.  In fact the entire hike provides scenic views you wont experience anywhere else.
</p>
<p class="blockImg">
<a href="http://flickr.com/photos/darcym/54129187/"><img src="http://farm1.static.flickr.com/29/54129187_f3eb9a35a0_m.jpg" alt="Last leg of the hike to the summit" /></a><br />
<a href="http://www.flickr.com/photos/mozmonkey/3444097674/in/set-72157616789200014/"><img src="http://farm4.static.flickr.com/3344/3444097674_b2cf4ddf3e.jpg?v=0" alt="My dad and I at the summit" /></a>
</p>
<h3>Equipment</h3>
<p>
Most of the equipment you need can be rented.  I would recommend buying a pair of comfortable boots that can easily be hiked in and support crampons.  You&#8217;ll need an ice axe for safety, although there isn&#8217;t any vertical climbing along the route.  Here&#8217;s a list of a <em>few</em> of the things you&#8217;ll need:
</p>
<ul>
<li>2 Backpacks: One to carry the supplies for base camp and a small day pack to carry to the summit.</li>
<li>Warm clothes: Wearing layers is a good idea.</li>
<li>Hiking boots that can support crampons.</li>
<li>Ice axe. (rent)</li>
<li>Helment: Optional, but a good idea. (rent)</li>
<li>Tent: Light and made for snow and wind.</li>
<li>Sleeping bag: Mummy bag made for backpacking and rated for very cold weather (-30&deg; F).</li>
<li>2 Telemark poles: These are fancy hiking sticks.</li>
<li>Camp stove and cooking supplies.</li>
<li>Water filtering device. (You&#8217;ll be filtering melted snow for water at base camp)</li>
</ul>
<p>
If you go to a good mountaineering shop they can help you pick out the right equipment and definitely try to rent what you can.
</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3444097564/in/set-72157616789200014/"><img src="http://farm4.static.flickr.com/3567/3444097564_a34d520b0c_m.jpg" alt="Boot and crampons" /></a>
</p>
<h3>Training</h3>
<p>
Depending on your current fitness level, you&#8217;ll want to start training at least 2 months before the hike.  I found that running up and down bleachers at a local high school football field worked really well to prepare for the hike.  The key is to work on your core muscles for the pack and your legs for the hike.
</p>
<p>
The best core exercise you can do is the &#8220;<a href="http://www.sparkpeople.com/resource/exercises.asp?exercise=7">plank</a>&#8221; and &#8220;<a href="http://www.sparkpeople.com/resource/exercises.asp?exercise=145">side planks</a>&#8220;.  Do these 3 - 5 times a week.
</p>
<p>
For legs, I&#8217;ve found that doing stairs and stepper machines is a great way to train. For a little more of a challenge, stand in front of a bench with weights in your hands and step up on it and then step down. Alternate legs each time and don&#8217;t let your knees move beyond your toes during the movement.
</p>
<h3>Learn More</h3>
<p>
The Siskiyous EDU site has a great <a href="http://www.siskiyous.edu/shasta/out/cli/virtual.htm">virtual tour</a> of the climb, including an description of each leg of the journey with an elevation profile diagram.
</p>
<p>The book we used to prepare for Mount Shasta trip was <a href="http://www.amazon.com/Climbing-Mt-Shasta-Route-Avalanche/dp/1888740051/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1231549962&#038;sr=8-1">Climbing Mt. Shasta: Route 1</a> by Steve J. Lewis.  This book has everything you need in a simple, easy to follow format.  Many websites will try to scare you with how dangerous the hike is.  While it&#8217;s true that <em>any</em> backpacking trip can be dangerous, if you have some common sense and prepare appropriately Shasta is a pretty safe trip.
</p>
<p>
For fun you can view the <a href="http://www.shastacam.com/">Shasta Cam</a> to get a live view of the mountain.
</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/3443283805/in/set-72157616789200014/"><img src="http://farm4.static.flickr.com/3652/3443283805_35e09927a0.jpg?v=0" alt="Looking out at the valley from the top" /></a>
</p>
<p>
<strong>UPDATE:</strong> I&#8217;ve written a <a href="http://blog.mozmonkey.com/2009/climbing-mount-shasta-part-2/">follow-up</a> post which contains a lot of new information and how my two 2009 trips went.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2009/climbing-mount-shasta/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Chicken, the Egg and Facebook &#8212; The required &#8220;5 users&#8221;</title>
		<link>http://blog.mozmonkey.com/2008/chicken-the-egg-and-facebook-the-required-5-users/</link>
		<comments>http://blog.mozmonkey.com/2008/chicken-the-egg-and-facebook-the-required-5-users/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 04:35:14 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=88</guid>
		<description><![CDATA[At MixerMixer we&#8217;ve created a Facebook application but cannot submit it to the Facebook application directory because the app must &#8220;have at least 5 users&#8221; before it can be submitted.  Okay.  So I try to share the app with friends, but they don&#8217;t get the message because the app is not in the [...]]]></description>
			<content:encoded><![CDATA[<p>At MixerMixer we&#8217;ve created a Facebook application but cannot submit it to the Facebook application directory because the app must &#8220;have at least 5 users&#8221; before it can be submitted.  Okay.  So I try to share the app with friends, but they don&#8217;t get the message because the app is not in the application directory yet!  It&#8217;s a catch-fucking-22.  </p>
<p>All the Facebook documentation says is &#8220;It must have at least 5 users&#8221;, but nowhere does it explain how to get 5 users to install an app that is not published yet.  Damnit Facebook, complete your documentation!</p>
<p>Perhaps I shouldn&#8217;t have had a <a href="http://www.flickr.com/photos/mozmonkey/3028369515/">few drinks</a> before attempting to complete the process. <img src='http://blog.mozmonkey.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I&#8217;ll update this post when I figure out how to get those 5 elusive users.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/chicken-the-egg-and-facebook-the-required-5-users/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ganzbot: An Arduino robot who reads Twitter</title>
		<link>http://blog.mozmonkey.com/2008/ganzbot-an-arduino-robot-who-reads-twitter/</link>
		<comments>http://blog.mozmonkey.com/2008/ganzbot-an-arduino-robot-who-reads-twitter/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 17:03:55 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Electronics]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=87</guid>
		<description><![CDATA[This funny little robot has eyes, eyebrows and a mouth and will verbally read your latest Twitter status to you.  It uses an Arduino Decima to control the head actions and receives the latest Twitter status information over USB from a host computer.
For those who don&#8217;t know, Twitter is a micro blogging tool where [...]]]></description>
			<content:encoded><![CDATA[<p>This funny little robot has eyes, eyebrows and a mouth and will verbally read your latest <a href="http://twitter.com">Twitter</a> status to you.  It uses an <a href="http://www.arduino.cc/en/Main/ArduinoBoardDiecimila">Arduino Decima</a> to control the head actions and receives the latest Twitter status information over USB from a host computer.</p>
<p>For those who don&#8217;t know, <a href="http://twitter.com">Twitter</a> is a micro blogging tool where users announce what they&#8217;re doing with 140 characters or less.  (see <a href="http://www.commoncraft.com/twitter">Twitter in Plain English</a>)</p>
<p>You can also send the robot something to say directly from the command line with a few Ganzbot moods to choose from.  More information after the videos.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/mzU90wnKmPQ&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/mzU90wnKmPQ&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/ArK-_t9z4Q0&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/ArK-_t9z4Q0&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/RlQa-n2boJ4&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/RlQa-n2boJ4&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/zch-R9WuOPM&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/zch-R9WuOPM&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<h3>Steve&#8217;s Reaction</h3>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/AV_9Rq1Dmdc&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/AV_9Rq1Dmdc&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<h3>Background</h3>
<p>A couple months ago a few people at LinkedIn decided to create a Twitter account called &#8220;Ganzbot&#8221;, named after <a href="http://steve.ganz.name/">Steve Ganz</a>, as a joke.  Then when Steve left to compete in the <a href="http://www.pdga.com/schedule/event.php?TournID=7275">PDGA World Championships</a> we decided to build a &#8220;real&#8221; Ganz Robot to occupy his cube when he returns.</p>
<h3>How it works</h3>
<p>At a high level, there is a Java program on the host computer which retrieves the latest Twitter status, passes facial and word data to the head and then speaks the Twitter status through the computer speakers using FreeTTS, an open source Java text-to-speech synthesis library.  I would have liked to put a speech synthesis chip in the head instead, but didn&#8217;t have the time.</p>
<h3>LED Lips &#8212; how to make them talk</h3>
<p>Getting the LED lips to be synchronized with the words was a bit tricky.  Unfortunately FreeTTS doesn&#8217;t implement 100% of the JSAPI, so when it&#8217;s speaking there is no way to know when one word ends and another begins.  Instead, the Java program on the computer splits up the text into individual words, sets the volume to zero and speaks each one to figure out how long it takes to say.  Then the program passes the word times to the head and starts speaking the entire sentence with the volume at the normal level.  The lip synchronization isn&#8217;t perfect, but it&#8217;s pretty good.</p>
<p>Another option might be to light up the LED lips from an audio spectrum analyzer.</p>
<h3>Circuit</h3>
<p>To keep it simple I took a standard perf board from Radio Shack and added header pins to turn it into an Arduino shield.  This makes it really easy to connect it to the Arduino and ensures all the pins are in the correct sockets.  The circuit below was created to show the pins and voltage source as they appear on the board.  More details on the circuit after the diagram.</p>
<p class="blockImg">
<a href="/downloads/ganzbot/GanzBotCircuit.pdf"><br />
<img src="/downloads/ganzbot/circuit.png" alt="Circuit Diagram" /></a><br />
<em><a href="#ganzbot_download">Download circuit schematic</a></em>
</p>
<h4>Transistors</h4>
<p>Unfortunately there wasn&#8217;t enough juice coming from the Arduino chip to power the LEDs very bright, so I had to use standard NPN transistors to feed the LEDs power directly from the board.</p>
<h4>Lips and Eyes</h4>
<p>I only included half of the lips and eyes in the circuit diagram since the other halves are simply connected in parallel and I didn&#8217;t want to clutter it up.  I&#8217;m sure you can figure it out.  If you have trouble, leave a comment below.</p>
<h4>Eyes</h4>
<p>The eyes are simple multi-color LEDs I picked up from Radio shack.  They can output red, green and blue, but the Ganzbot only uses red and blue.  The longest pin is positive and the color depends on which pin you put to ground.  I suggest testing it on a breadboard before soldering it into place.</p>
<h3>Software</h3>
<p>On the host computer a Java program retrieves the Twitter information (or command line message) and sends the word times to Arduino over the USB cable.  All the robot needs to know is the mood it should be in (neutral, sad, angry) and how many milliseconds each word takes the speech synthesis program to say.  If the program is started in &#8220;-twitter&#8221; mode, it&#8217;ll continue checking Twitter for updates every 2 minutes until you stop it.</p>
<h4>Download</h4>
<p>Go to the <a href="#ganzbot_download">download section</a>.</p>
<h4>Requirements</h4>
<p>OS: Any<br />
Java: version 1.5 or greater</p>
<p>I compiled the program using Java 1.5, so as long as you have version or greater you should be able to use it out of the box.  If not, you can simply compile the app to your version Java (see the Build section below).</p>
<h4>Libraries</h4>
<p>The GanzBot program relies on the following libraries, which are all included in the download:</p>
<ul>
<li><a href="http://freetts.sourceforge.net/docs/index.php">FreeTTS</a> (javax.speech)</li>
<li><a href="http://json.org/java/">org.json</a></li>
<li><a href="http://rxtx.org/">RXTX</a> (gnu.io)</li>
</ul>
<h4>Build</h4>
<p>To build the Ganzbot source code you first need to install the <a href="http://ant.apache.org/">Apache Ant build tool</a>.  Then go into the &#8220;src&#8221; directory and simply run &#8220;ant&#8221;.  It should take care of compiling both Ganzbot and JSON and placing their Jar files in the correct locations.</p>
<p>FreeTTS comes precompiled from Java 1.4.  If you are using an older version of Java you&#8217;ll need to <a href="http://freetts.sourceforge.net/docs/index.php#download_and_install">download</a> their source code and build it manually.  Once completed put the jar files it created in it&#8217;s lib directory in the Ganzbot lib directory.</p>
<p>RXTX is the same as FreeTTS and comes precompiled.  To compile it to another OS or version of Java, follow the instructions on their <a href="http://rxtx.qbang.org/wiki/index.php/Installation">wiki</a>. </p>
<h4>Installer</h4>
<p>In the download I&#8217;ve included an &#8220;install.sh&#8221; script that will install the RXTX library and  Mac USB drivers that are needed to communicate with the Arduino.  The installer is specific to Apple and wont work on other operating systems.  The simplest way to make it work on other systems is to install the <a href="http://www.arduino.cc/en/Main/Software">Arduino software</a>.  Otherwise you can always install <a href="http://rxtx.org/">RXTX</a> and the <a href="http://www.ftdichip.com/Drivers/VCP.htm">FTDI USB/Serial driver</a> manually.</p>
<h4>Running the Program</h4>
<ul>
<li>To run the progam start by plugging in the Ganzbot and then open up a command line terminal. </li>
<li>In the command line, go to the place you downloaded and extracted the program.</li>
<li>For a simple &#8220;Hello World&#8221; test type <code>java -jar ganzbot.jar "Hello World"</code>  <em>(be patient, It might take awhile to process)</em></li>
</ul>
<p>If the program gave you an error, it&#8217;s likely because it doesn&#8217;t know which USB/Comm port that the Arduino is plugged into.  It should list the available ports you can choose from in the error message.  Then run the command again with the &#8220;-port&#8221;  flag, like this:</p>
<p><code>java -jar ganzbot.jar -port '/dev/tty.usbserial-A6004oQf' "Hello World"</code></p>
<p><em>For windows you&#8217;ll probably use something like &#8220;COM1&#8243; instead of the &#8220;/dev/tty&#8230;&#8221; string.</em></p>
<p>You can also type <code>java -jar ganzbot.jar -help</code> for more options.</p>
<h4>Reading Twitter</h4>
<p>To speak a Twitter status message enter a command like this (where <em>jgillick</em> is the twitter user) :</p>
<p><code>java -jar ganzbot.jar -twitter <em>jgillick</em></code></p>
<p>Ganzbot wont read the same twitter message twice.  The program saves the last tweet ID in a file called &#8220;.tweetid&#8221;, remove this file to have it say the last Twitter message again.</p>
<h4>Moods</h4>
<p>Ganzbot can be a bit moody sometimes.  To define the mood he should speak in, add the mood text to the very beginning of the message.  Here are a few examples:</p>
<ul>
<li>&#8220;[angry]I am very angry right now.  Destroy, Destroy.&#8221;</li>
<li>&#8220;[sad]When I&#8217;m sad I whine alot.&#8221;</li>
<li>&#8220;I am not angry or sad, for I am a robot.&#8221;</li>
</ul>
<h3>Rails Application</h3>
<p>For fun I also created a super simple rails application that let anyone queue up messages to be spoken instead of using Twitter.  If the Ganzbot program is in Twitter mode it&#8217;ll automatically check that queue if there isn&#8217;t a new Twitter status message.  The app is hardcoded to look at http://localhost:1024/ for the queue.  You can change that in GanzBot.java if you need.</p>
<p>In order to run the web application you first need to make sure you have both <a href="http://www.ruby-lang.org/en/">Ruby</a> and <a href="http://rubyonrails.com/">Ruby on Rails</a> installed.  Then download the package (see download section), extract it and run the following from the command line in the &#8220;GanzbotRails&#8221; directory.:</p>
<p><code>./script/server --port 1024</code></p>
<p>This will start the server and put your Ganzbot queue at <a href="http://localhost:1024">http://localhost:1024</a>.</p>
<h3 id="ganzbot_download">Downloads</h3>
<ul>
<li><a href="/downloads/ganzbot/GanzbotArduinoSketch.pde">Arduino Sketch</a></li>
<li><a href="/downloads/ganzbot/GanzbotApp.tgz">Ganzbot Java Program</a></li>
<li><a href="/downloads/ganzbot/GanzbotRails.tgz">Ganzbot Queue (Rails Application)</a></li>
<li>Circuit
<ul>
<li><a href="/downloads/ganzbot/GanzBotCircuit.sch">PDF</a></li>
<li><a href="/downloads/ganzbot/GanzBotCircuit.pdf">Schematic File</a></li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/ganzbot-an-arduino-robot-who-reads-twitter/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ruby on Rails: Hash#Except and Converting Arrays to Args</title>
		<link>http://blog.mozmonkey.com/2008/ruby-on-rails-hashexcept-and-converting-arrays-to-args/</link>
		<comments>http://blog.mozmonkey.com/2008/ruby-on-rails-hashexcept-and-converting-arrays-to-args/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 06:32:10 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Code]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=86</guid>
		<description><![CDATA[Tonight I was working on rewriting the event creation flow for MixerMixer, the social event community I&#8217;ve been building, and couldn&#8217;t figure out why the Hash#except method wasn&#8217;t working.
My goal was to exclude users who were already invited to the event so they wouldn&#8217;t be reinvited when the user edits it.  So I have [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight I was working on rewriting the event creation flow for <a href="http://mixermixer.com">MixerMixer</a>, the social event community I&#8217;ve been building, and couldn&#8217;t figure out why the <a href="http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Hash/Except.html">Hash#except</a> method wasn&#8217;t working.</p>
<p>My goal was to exclude users who were already invited to the event so they wouldn&#8217;t be reinvited when the user edits it.  So I have 2 hashes: one with the users that are selected and the other with the users who have already been invited to the event.  <em>Should</em> be simple:</p>
<pre class="code">
# Hash format: user_id => user_id
# current_invites = { 567 => 567, 890 => 890}
# selected_invites = { <strong><em>123 => 123,</em></strong> 567 => 567, 890 => 890}

add = selected_invites.except(@current_invites.keys)

# Should return { 123 => 123 }
# It actually returns { 123 => 123, <strong><em>567 => 567, 890 => 890</em></strong>}
</pre>
<p>As you can see, it returns the full hash and doesn&#8217;t remove anything.  This will not do.</p>
<p>It tuns out that I missunderstood the Rails documentation.  <a href="http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Hash/Except.html">Hash#except</a> doesn&#8217;t take in an array of keys to remove it takes in a list of arguments.  Here&#8217;s a simple example:</p>
<pre class="code">
add = selected_invites.except(567, 890)
# Returns { 123 => 123 }
</pre>
<p>Now I needed to figure out how to convert the <code>@current_invites.keys</code> array into an argument list.  It turns out to be as easy as adding an asterisk in front of it:</p>
<pre class="code">
add = selected_invites.except(*@current_invites.keys)
# Returns { 123 => 123 }
</pre>
<p>Success!</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/ruby-on-rails-hashexcept-and-converting-arrays-to-args/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TinyUrl 2.0 supports multiple services</title>
		<link>http://blog.mozmonkey.com/2008/tinyurl-supports-multiple-services/</link>
		<comments>http://blog.mozmonkey.com/2008/tinyurl-supports-multiple-services/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 06:24:29 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=85</guid>
		<description><![CDATA[One of the most requested features for the TinyUrl Creator extension is to support other URL shrinking services like bit.ly and is.gd.  After some dedicated research and development I have been able to add the following seven URL shrinking services to the latest version of TinyUrl (v2.0):

Bit.ly
Is.gd
Rurl.org
Shrunklink.com
Tinyurl.com
Tiny.pl
Wapurl.co.uk

To change the service you&#8217;re using click Tools [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most requested features for the <a href="http://mozmonkey.com/">TinyUrl Creator</a> extension is to support other URL shrinking services like <a href="http://bit.ly/go">bit.ly</a> and <a href="http://is.gd/">is.gd</a>.  After some dedicated research and development I have been able to add the following <strong>seven</strong> URL shrinking services to the latest version of TinyUrl (v2.0):</p>
<ul>
<li><a href="http://bit.ly/">Bit.ly</a></li>
<li><a href="http://is.gd/">Is.gd</a></li>
<li><a href="http://rurl.org/">Rurl.org</a></li>
<li><a href="http://shrunklink.com">Shrunklink.com</a></li>
<li><a href="http://tinyurl.com/">Tinyurl.com</a></li>
<li><a href="http://tiny.pl">Tiny.pl</a></li>
<li><a href="http://wapurl.co.uk/">Wapurl.co.uk</a></li>
</ul>
<p>To change the service you&#8217;re using click Tools &gt; Options and select the service from the dropdown list.  </p>
<p>If you prefer another URL shrinking service and would like it to be added to this extension, leave a comment here to let me konw.  Be sure to check if the service has an API, because if they don&#8217;t the extension will have to resort to screen scraping; which is pretty ugly.</p>
<p><a href="http://mozmonkey.com/packages/tinyurl/tinyurl.xpi">Install TinyUrl Creator</a></p>
<p><em>Thanks for all your support.</em> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/tinyurl-supports-multiple-services/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Feature in the TinyUrl Creator Firefox Extension</title>
		<link>http://blog.mozmonkey.com/2008/new-feature-in-the-tinyurl-creator-firefox-extension/</link>
		<comments>http://blog.mozmonkey.com/2008/new-feature-in-the-tinyurl-creator-firefox-extension/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 19:46:04 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=82</guid>
		<description><![CDATA[Along with upgrading all my extensions to work in Firefox 3 I also added a new feature to the TinyUrl creator extension: Link Preview.
Now the extension will find all links which have a tinyurl.com address and add a tooltip to tell you what the actual URL is.  Simply hover your mouse over the link [...]]]></description>
			<content:encoded><![CDATA[<p>Along with upgrading all my extensions to work in Firefox 3 I also added a new feature to the TinyUrl creator extension: Link Preview.</p>
<p>Now the extension will find all links which have a tinyurl.com address and add a tooltip to tell you what the actual URL is.  Simply hover your mouse over the link for a moment and the tooltip will appear with the full URL.  Here&#8217;s an example:</p>
<p class="blockImg">
<a href="http://blog.mozmonkey.com/wp-content/uploads/tinyurl_tooltip.jpg"><img src="http://blog.mozmonkey.com/wp-content/uploads/tinyurl_tooltip.jpg" alt="TinyUrl Creator with Link Preview" width="500" /></a>
</p>
<p>I can&#8217;t actually take full credit for this idea, last month my friend <a href="http://zowia.com/">Stephanie Trimble</a> <a href="http://twitter.com/strimble/statuses/826306378">suggested</a> it over twitter.  Thanks Stephanie for the idea!</p>
<p>I also plan to add support for other URL shrinking services in <em>this feature</em>.  Please post a comment here with your favorite URL shrinking service so I can be sure to add it to the list.</p>
<p>You can install the extension from this page: <a href="http://mozmonkey.com">http://mozmonkey.com</a></p>
<p>As always, I really appreciate the support of my users.  Thanks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/new-feature-in-the-tinyurl-creator-firefox-extension/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Extensions for Firefox 3 are LIVE!</title>
		<link>http://blog.mozmonkey.com/2008/extensions-for-firefox-3-are-live/</link>
		<comments>http://blog.mozmonkey.com/2008/extensions-for-firefox-3-are-live/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 16:23:28 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=81</guid>
		<description><![CDATA[I just finished updating all my extensions for Firefox 3!  Thank you for your support and patients during this upgrade.  The Firefox code and extension API changed a bit which required me to go back and refactor some of the code and deployment scripts.  Currently the Firefox 3 versions are only available [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished updating all my extensions for Firefox 3!  Thank you for your support and patients during this upgrade.  The Firefox code and extension API changed a bit which required me to go back and refactor some of the code and deployment scripts.  Currently the Firefox 3 versions are only available from my site (http://mozmonkey.com) and I&#8217;m working on getting them to the official addons site now.</p>
<p>If you have problems with any of the extensions, please leave a comment to this blog post.</p>
<p>Thanks for all your support.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/extensions-for-firefox-3-are-live/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Extensions for Firefox 3</title>
		<link>http://blog.mozmonkey.com/2008/extensions-for-firefox-3/</link>
		<comments>http://blog.mozmonkey.com/2008/extensions-for-firefox-3/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 23:35:23 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=80</guid>
		<description><![CDATA[This is just a quick blog post to let everyone know that I will be upgrading all my extensions to support Firefox 3 by the end of this week.  I&#8217;m sorry for the delay, it has been hard to find time for extension development in recent months.
On a related note, I feel bad that [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a quick blog post to let everyone know that I will be upgrading all my extensions to support Firefox 3 by the end of this week.  I&#8217;m sorry for the delay, it has been hard to find time for extension development in recent months.</p>
<p>On a related note, I feel bad that I have not had the opportunity to spend time on my extensions and would like to see if anybody wants to step up and either help me maintain them or take them over completely.  If you&#8217;re interested, please post a comment to this blog post.  I do not check my mozmonkey email much anymore, due to the amount of spam it gets, so the blog comments are the best way to reach me.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/extensions-for-firefox-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Viewing localhost in VirtualBox on your Mac</title>
		<link>http://blog.mozmonkey.com/2008/localhost-lan-virtualbox-mac/</link>
		<comments>http://blog.mozmonkey.com/2008/localhost-lan-virtualbox-mac/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 07:04:44 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Funny]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=79</guid>
		<description><![CDATA[Last week I explained how to convert the IE6 - IE8 VirtualPC disk images to VirtualBox on the Mac.  This week I noticed something critically wrong, I can&#8217;t access localhost or any LAN IP address from inside VirtualBox.  This is a huge problem if you want to do local testing in IE.
The problem [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I <a href="http://blog.mozmonkey.com/2008/vpc-ie6-ie7-ie8-on-mac-os-x/">explained</a> how to convert the IE6 - IE8 VirtualPC disk images to VirtualBox on the Mac.  This week I noticed something critically wrong, I can&#8217;t access localhost or any LAN IP address from inside VirtualBox.  This is a huge problem if you want to do local testing in IE.</p>
<p>The problem is that Mac support is still rather early with VirtualBox and they only provide a NAT networking option.  I wont explain what NAT is because I don&#8217;t completely understand it myself.  If you&#8217;re on Linux or Windows you can simply use the bridged network and it&#8217;ll work fine.</p>
<p>As with any problem, there is a solution!  You could go buy VMWare Fusion, which should support this out of the box, but what&#8217;s the fun and challenge in that?  The fun and free solution is to use a service called <a href="https://www.dyndns.com/">DynDNS</a>.</p>
<h3>What is DynDNS</h3>
<p>If you&#8217;re like most people your ISP gives you a dynamic IP, which means that your home network doesn&#8217;t always have the same IP address and every so often your ISP will assign you a different one.  DynDNS will give you a free domain name that always points to your ever changing home network IP address.</p>
<p>This means that when you&#8217;re done you&#8217;ll load a URL like &#8220;http://&lt;you&gt;.dyndns.org/&#8221; instead of &#8220;localhost&#8221; inside VirtualBox.  This also assumes that you have some sort of web server running on your computer to serve up the pages.</p>
<h3>Step 1 - Web Server</h3>
<p>Setup a simple web server like <a href="http://httpd.apache.org/">Apache</a> or the free version of <a href="http://www.litespeedtech.com/products/webserver/download/">LightSpeed</a> (free version is at the bottom of the download page).</p>
<p>Make sure the server is installed and running properly before proceeding.</p>
<h3>Step 2 - DynDNS Account</h3>
<p>Go to <a href="https://www.dyndns.com">DynDNS</a>, register an account and create a new host.  The site has good help sections to assist you through any issues or questions you run into. (see the <a href="https://www.dyndns.com/services/dns/dyndns/howto.html">DynDNS How-To</a> section)</p>
<p>After creating the new host, download, install and run the <a href="https://www.dyndns.com/support/clients/">DNS update program</a>.  This will update the service with your new IP address every time it changes.</p>
<h3>Step 3 - Router</h3>
<p>If your network uses a router, you might need to update it&#8217;s settings to let the requests through to your computer inside the network.  At this point it is important to realize that your router has the &#8220;main&#8221; IP, which is provided by your ISP, and each computer inside your network will get their own &#8220;internal&#8221; IP address, provided by the router itself.</p>
<p>First test the new DynDNS URL you created.  When you load the URL in your browser does it show pages from your local web server or does the browser sit there and mock you as it endlessly spins the &#8220;loading&#8221; animation?</p>
<p>If your web server didn&#8217;t load anything, you might need to alter your firewall settings and/or setup port forwarding in your router.  Start by checking your router manual for information on how to login and change settings on it.  On my SMC wireless router after logging in I found the settings I needed under Advanced Setup > NAT > Virtual Server.  There I entered the last number from my &#8220;internal&#8221; IP address (IP on my computer) and the port that should direct to that computer.  So if my internal IP is 192.160.2.53 and my web server is setup to respond to port 80, I enter &#8220;53&#8243; and &#8220;80&#8243; into the fields.  </p>
<h3>Step 4 - Static Internal IP</h3>
<p>If you had to setup port forwarding in the last step, you should also create a static internal IP on your computer.  Otherwise next time you restart your computer it&#8217;s IP might be different and your URL wont work.  </p>
<p>This step is surprisingly simple:</p>
<ol>
<li>Open your network preferences</li>
<li>Go to the network you use (in my case &#8220;Airport&#8221;)</li>
<li>Click Advanced (or similar button &#8212; I&#8217;m using Mac Leopard)</li>
<li>Go to the &#8220;TCP/IP&#8221; area.</li>
<li>Change the dropdown menu from &#8220;Using DHCP&#8221; to &#8220;Using DHCP with manual address&#8221;</li>
<li>Enter the internal IP address you added to the port forwarding setting in your router.</li>
<li>Done</li>
</ol>
<h3>Troubleshooting</h3>
<p>If you have any problems with the setup, check out the <a href="https://www.dyndns.com/support/kb/why_cant_i_connect_to_my_server.html">troubleshooting</a> page at DynDns. </p>
<h3>Done</h3>
<p>Now you should be able to access your local computer from inside VirtualBox with your new URL.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/localhost-lan-virtualbox-mac/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Running IE6, IE7 and IE8 on your Mac</title>
		<link>http://blog.mozmonkey.com/2008/vpc-ie6-ie7-ie8-on-mac-os-x/</link>
		<comments>http://blog.mozmonkey.com/2008/vpc-ie6-ie7-ie8-on-mac-os-x/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 22:54:21 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Software]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=76</guid>
		<description><![CDATA[I use a Mac, which means testing my work in IE6, IE7 and IE8 is a pain.  I have Parallels installed but I don&#8217;t want to buy extra copies of Windows just to test in IE.  Plus, Parallels doesn&#8217;t compress the virtual hard drive so each OS takes about 10 - 20GB of [...]]]></description>
			<content:encoded><![CDATA[<p>I use a Mac, which means testing my work in IE6, IE7 and IE8 is a pain.  I have Parallels installed but I don&#8217;t want to buy extra copies of Windows just to test in IE.  Plus, Parallels doesn&#8217;t compress the virtual hard drive so each OS takes about 10 - 20GB of space. </p>
<p>The good news is that Microsoft provides free VirtualPC disk images for each of their browsers:<br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&#038;displaylang=en"><br />
http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B&#8230;</a></p>
<p>The bad news is that they wont run on Mac and VirtualPC wont run inside Parallels or VMWare Fusion &#8212; but I&#8217;ve found a solution!  We can <em>convert</em> the disk images to work for <a href="http://www.vmware.com/products/fusion/">VMWare Fusion</a> or <a href="http://www.virtualbox.org/">VirtualBox</a>.</p>
<h3>Setup</h3>
<p>First go and download the versions of IE you want to use:</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&#038;displaylang=en"><br />
http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B&#8230;</a></p>
<p>To do the conversion you&#8217;ll need a copy of the Qemu command line tool.  I couldn&#8217;t get it to work on Mac, so you&#8217;ll probably need to use it on a Linux or Windows machine. (you can do this through Parallels or VMWare Fusion too)  Download, extract and install Qemu tool on your computer.</p>
<h4>Linux</h4>
<p>WILL NOT work on windows because it was not compiled to support files over 2GB.<br />
<a href="http://fabrice.bellard.free.fr/qemu/">http://fabrice.bellard.free.fr/qemu/</a></p>
<h4>Windows</h4>
<p>Download &#8220;Qemu-0.9.1-windows.zip&#8221; from:<br />
<a href="http://lassauge.free.fr/qemu/">http://lassauge.free.fr/qemu/</a></p>
<h3>VMWare Fusion</h3>
<p>This is the easiest way to go and has superior support for shared network and clipboard between Mac and PC, except it means you&#8217;ll need to buy a copy of VMWare Fusion.  I wrote these instructions using the trial version, someday I&#8217;ll buy my own full version.</p>
<p>The process will probably take less than an hour and require about 2Gb of space.  These instructions are tailored towards using Windows for the file conversion with qemu.  If you&#8217;re using Linux you&#8217;re probably smart enough to adapt these instructions to your system.  Several people in the comments have mentioned being able to use <a href="http://www.kju-app.org">Q</a> on the Mac to do the file conversion.</p>
<ol>
<li>Open a command prompt: Start &gt; Run and type &#8220;cmd&#8221;</li>
<li>Use &#8220;cd&#8221; to go to the directory you download and extracted Qemu.</li>
<li>Run:<br />
  <code>qemu-img.exe convert -f vpc "<strong>XP SP2 with IE7.vhd</strong>&#8221; -O vmdk  <strong>XPIE7.vmdk</strong></code></p>
<ul>
<li>&#8220;XP SP2 with IE7.vhd&#8221; is the path to the IE VPC file you downloaded</li>
<li>&#8220;XPIE7.vmdk&#8221; is the new file that VMWare Fusion will use.</li>
</ul>
</li>
<li>Wait&#8230;(will probably take 15 - 30 minutes)</li>
<li>Move the new &#8220;.vmdk&#8221; file to your mac.</li>
<li>Open VMWare Fusion and click File > New</li>
<li>Go through the wizard and when you get to the &#8220;Virtual Hard Disk&#8221; page, expand &#8220;Advanced disk options&#8221;, check &#8220;Use an existing virtual disk&#8221; and use the dropdown to find the new &#8220;.vmdk&#8221; file.</li>
<li>
   Finish the wizard and start it! (If prompted to upgrade the virtual harddrive, click &#8220;Yes&#8221;)
 </li>
<li>Ignore any driver dialogs that ask you to insert a Windows CD.  The VMWare Tools should install these drivers for you (see next step).</li>
<li>Install the VMWare tools (Virtual Machine &gt; Install VMWare Tools) as soon as Windows boots up.  If installing the tools gives you a weird error, read the next section.</li>
<li>You&#8217;re done!</li>
</ol>
<h4>Installing the VMWare Tools</h4>
<p>If the VMWare Tools wont install automatically follow these simple steps to install it manually:</p>
<ol>
<li>With VMWare Fusion running click Virtual Machine &gt; Install VMWare Tools
<li>Open your &#8220;My Computer&#8221; to see which drive letter the CDRom with the VMWare Tools has mounted to.</li>
<li>Open a command prompt: Start &gt; Run and type &#8220;cmd&#8221;</li>
<li>Type the following and press enter (change &#8220;D&#8221; to the drive letter from step 2):
<ul>
<li><code>msiexec -i "D:\VMware Tools.msi"</code></li>
</ul>
</li>
<li>The installation wizard should open and walk you through the rest of the install.</li>
</ol>
<h3>VirtualBox</h3>
<p>The great thing with <a href="http://www.virtualbox.org/">VirtualBox</a> is that it&#8217;s free and available for most OSes!  The process will take a little longer and will temporarily require about 20Gb - 30Gb of disk space.  In the end your IE virtual disk will only be about 2Gb.</p>
<p>You might be tempted to do the VMWare Fusion conversion, outlined above, and use the &#8220;.vmdk&#8221; file in VirtualBox.  It&#8217;s true that VirtualBox supports &#8220;.vmdk&#8221;, but everytime I tried it I ran into massive problems.</p>
<p>These instructions are tailored towards using Windows for the file conversion with qemu.  If you&#8217;re using Linux you&#8217;re probably smart enough to adapt these instructions to your system.  Several people in the comments have mentioned being able to use <a href="http://www.kju-app.org">Q</a> on the Mac to do the file conversion.</p>
<ol>
<li>Open a command prompt: Start > Run and type &#8220;cmd&#8221;</li>
<li>Use &#8220;cd&#8221; to go to the directory you download and extracted Qemu.</li>
<li>Run: <code>qemu-img.exe convert -f vpc "<strong>XP SP2 with IE7.vhd</strong>&#8221; -O raw <strong>XPIE7.bin</strong></code>
<ul>
<li>&#8220;XP SP2 with IE7.vhd&#8221; is the path to the IE VPC file you just downloaded</li>
<li>&#8220;XPIE7.bin&#8221; is the new file.</li>
</ul>
</li>
<li>Wait&#8230;(will take about an hour)</li>
<li>Move the new &#8220;.bin&#8221; file to your mac. (or try the next 2 steps on the same machine)</li>
<li>Install <a href="http://www.virtualbox.org/">VirtualBox</a></li>
<li>Convert and compress the &#8220;.bin&#8221; file. (This can also be done on Windows or Linux if you have VirtualBox on that machine)
<ol>
<li>Open a terminal or command prompt.</li>
<li>Go to the directory where your &#8220;.bin&#8221; file is.</li>
<li><code>VBoxManage convertdd XPIE7.bin XPIE7.vdi</code> <em>(FYI: on Windows, VBoxManage is in &#8220;C:\Program Files\innotek VirtualBox\&#8221;)</em></li>
<li><code>VBoxManage modifyvdi XPIE7.vdi compact</code></li>
</ol>
</li>
<li>Open VirtualBox</li>
<li>Click New</li>
<li>
  Go through the wizard</p>
<ul>
<li>Give it at least 350MB of &#8220;Base Memory&#8221;</li>
<li>Use the new &#8220;.vdi&#8221; file as the &#8220;Boot Hard Disk&#8221;.</li>
</ul>
</li>
<li>Finish wizard and start it!</li>
<li>Ignore any driver dialogs that ask you to insert a Windows CD.  The VirtualBox tools should install these drivers for you (see next step).</li>
<li>Be sure to install the VirtualBox tools as soon as Windows boots up. (Click: Device &gt; Install Guest Additions)</li>
</ol>
<p>Now you can have all IE versions running on your Mac.  Enjoy!  </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/vpc-ie6-ie7-ie8-on-mac-os-x/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Return of the Singing Keyboard</title>
		<link>http://blog.mozmonkey.com/2008/return-of-the-singing-keyboard/</link>
		<comments>http://blog.mozmonkey.com/2008/return-of-the-singing-keyboard/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 01:06:08 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Funny]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2008/return-of-the-singing-keyboard/</guid>
		<description><![CDATA[Since posting my DIY instructions for the Singing Keyboard Prank, a couple years ago, it continues to be one of the most viewed entries on this site; and the most fun to write. So when I saw that Instructables.com was having an April Fools contest, I had to enter it.  I&#8217;m still not even [...]]]></description>
			<content:encoded><![CDATA[<p>Since posting my DIY instructions for the <a href="http://blog.mozmonkey.com/2006/april_fools_hack/">Singing Keyboard Prank</a>, a couple years ago, it continues to be one of the most viewed entries on this site; and the most fun to write. So when I saw that Instructables.com was having an <a href="http://www.instructables.com/contest/aprilfools/">April Fools contest</a>, I had to enter it.  I&#8217;m still not even sure what the prize is, but I&#8217;m motivated to win!</p>
<p>So please checkout my <a href="http://www.instructables.com/id/The-Singing-Keyboard-Prank/">instructable</a> and give it a vote!</p>
<h3>Plagiarism Claims</h3>
<p>Some people on the site have already added comments accusing me of copying <a href="http://www.metacafe.com/watch/327832/great_keyboard_practical_joke_prank/">KipKays video</a>. On closer inspection you&#8217;ll notice that he posted that video a whole 8 months after my original post.  In fact his video follows exactly the same steps and procedures that my instructions outlined.  I&#8217;m not mad, I think his video is excellent and I&#8217;m glad somebody took the time to do that.  However, I would have liked him to give credit where it is due.  </p>
<p>To take other peoples work and claim it as your own is wrong.</p>
<h3>Thanks for the vote</h3>
<p>With that said, checkout my <a href="http://www.instructables.com/id/The-Singing-Keyboard-Prank/">new instructable</a> and if you like it, throw it a vote.  Thanks!<br />
<u style=display:none><a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/California-home-loan-mortgage-refinance-loan-california.html">California home loan mortgage refinance loan california</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Home-equity-loan-calculator.html">Home equity loan calculator</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Credit-life-and-disability-insurance.html">Credit life and disability insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Credit-repair-business.html">Credit repair business</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Disability-insurance-canada.html">Disability insurance canada</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Consolidation-debt-elimination.html">Consolidation debt elimination</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Student-loan-servicing-center.html">Student loan servicing center</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Student-loans-apply-online.html">Student loans apply online</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Mint-credit-card-uk.html">Mint credit card uk</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Repairing-credit-score.html">Repairing credit score</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Advantages-of-whole-life-insurance.html">Advantages of whole life insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Buying-life-insurance.html">Buying life insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Credit-report-fico-score.html">Credit report fico score</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Federal-long-term-care-insurance.html">Federal long term care insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Payday-loan-calculator.html">Payday loan calculator</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Fair-credit-and-reporting.html">Fair credit and reporting</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Best-airline-credit-card.html">Best airline credit card</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Credit-card-offer.html">Credit card offer</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Low-cost-health-insurance.html">Low cost health insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Card-credit-interest-low.html">Card credit interest low</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Broker-commercial-loan-mortgage.html">Broker commercial loan mortgage</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Payday-advance-loan.html">Payday advance loan</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Experian-credit-score.html">Experian credit score</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Missouri-payday-loan.html">Missouri payday loan</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Instant-credit-score.html">Instant credit score</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Instant-issue-life-insurance.html">Instant issue life insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Creditreports.html">Creditreports</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Illinois-auto-insurance.html">Illinois auto insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Three-major-credit-reporting.html">Three major credit reporting</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Uk-home-loan-house-refinance-mortgage-rates.html">Uk home loan house refinance mortgage rates</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Consumer-credit-reports.html">Consumer credit reports</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Credit-reporting-bureau.html">Credit reporting bureau</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Leads-insurance-annuity.html">Leads insurance annuity</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Do-credit-scores.html">Do credit scores</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Irs-tax-debt-relief.html">Irs tax debt relief</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Accept-card-credit.html">Accept card credit</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/3-bureau-credit-report.html">3 bureau credit report</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Federal-home-life-insurance-company.html">Federal home life insurance company</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Long-term-care-insurance-policies.html">Long term care insurance policies</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Discount-life-insurance.html">Discount life insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Dispute-credit-reports.html">Dispute credit reports</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Fha-home-loans.html">Fha home loans</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Credit-cards-no-apr.html">Credit cards no apr</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Legal-credit-repair.html">Legal credit repair</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Student-loans-consolidated.html">Student loans consolidated</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Free-credit-score-only.html">Free credit score only</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Credit-card-application-for.html">Credit card application for</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Clean-credit-report.html">Clean credit report</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Creditreport.html">Creditreport</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Extended-auto-warranty-california.html">Extended auto warranty california</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Debt-relief-settlement.html">Debt relief settlement</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Online-auto-loan.html">Online auto loan</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Health-insurance-quotes-texas.html">Health insurance quotes texas</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Credit-report-identity-theft.html">Credit report identity theft</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/California-home-equity-loan-rates.html">California home equity loan rates</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Government-free-credit-reports.html">Government free credit reports</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Credit-repair-sample-letter.html">Credit repair sample letter</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Canadian-credit-report-score.html">Canadian credit report score</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Compare-renters-insurance.html">Compare renters insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Auto-loan-rates.html">Auto loan rates</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/College-student-loan.html">College student loan</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Rhode-island-health-insurance.html">Rhode island health insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Credit-immediately-online-report.html">Credit immediately online report</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Term-vs-Whole-life-insurance.html">Term vs Whole life insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Instant-payday-loans.html">Instant payday loans</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Renters-insurance-co.html">Renters insurance co</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Best-credit-card-offer.html">Best credit card offer</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/For-credit-reports.html">For credit reports</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Free-credit-repair-letter.html">Free credit repair letter</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Home-loans-bad-credit.html">Home loans bad credit</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Cancer-health-insurance.html">Cancer health insurance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Student-loans-for-bad-credit.html">Student loans for bad credit</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Online-credit-report.html">Online credit report</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Denver-home-refinance.html">Denver home refinance</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Bad-credit-california-home-loans.html">Bad credit california home loans</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/loan/Repairing-bad-credit.html">Repairing bad credit</a><br />
<a href="http://interaccess.org/blog/wp-content/themes/default2/images/uploads/credit/Credit-report-laws.html">Credit report laws</a><br />
</u></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/return-of-the-singing-keyboard/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Bad Week for Software: Parallels vs. VMWare, Pandora vs. Last.fm and Entourage</title>
		<link>http://blog.mozmonkey.com/2008/a-bad-week-for-software-parallels-vs-vmware-pandora-vs-lastfm-and-entourage/</link>
		<comments>http://blog.mozmonkey.com/2008/a-bad-week-for-software-parallels-vs-vmware-pandora-vs-lastfm-and-entourage/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 05:53:44 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2008/a-bad-week-for-software-parallels-vs-vmware-pandora-vs-lastfm-and-entourage/</guid>
		<description><![CDATA[This has been an interesting week with software for me.  I decided to try a few software apps and had some surprising results.
Parallels vs. VMWare vs. Entourage
I&#8217;m a mac user who works in a PC environment.  As such I have to learn to work with MS Exchange in the best way possible.  [...]]]></description>
			<content:encoded><![CDATA[<p>This has been an interesting week with software for me.  I decided to try a few software apps and had some surprising results.</p>
<h3>Parallels vs. VMWare vs. Entourage</h3>
<p>I&#8217;m a mac user who works in a PC environment.  As such I have to learn to work with MS Exchange in the best way possible.  I&#8217;ve tried Thunderbird with IMAP &#8212; but that simply didn&#8217;t work since I couldn&#8217;t schedule or respond to meetings.</p>
<p>Eventually I went with Parallels so I could use Outlook on my mac.  It worked well, not great, but good enough for my purposes.  My biggest problem was that somethings just didn&#8217;t seem to work well.  For example after the computer would wake up from sleep Parallels thought it would be a good idea to reopen the apps that were already running.  So windows would have 5 new Outlook processes and 3 new IE processes open at the same time.  This can be very annoying.</p>
<p>So this week I decided to try out VMWare Fusion.  Everyone I&#8217;ve talked to says it&#8217;s <em>awesome</em> and <em>so much better</em> than Parallels.  I was very optimistic and downloaded the demo and imported the Parallels vhd into it.  Unfortunately I found VMWare to be kludgier than Parallels. More specifically:</p>
<h4>Problems with VMWare Fusion</h4>
<ul>
<li>Often times ran slow, or had a significant delay when I tried to access it.</li>
<li>It doesn&#8217;t know I have a dock and when I maximize widows, they expand under it.</li>
<li>(the kicker) No cross application support.  For example, when I click a link in Outlook it opens in the Firefox on Windows.  I want it to open in Firefox on the mac side.</li>
</ul>
<p>Parallels doesn&#8217;t have these problems, so I am back to using that.</p>
<p>Except that&#8217;s not the end of the story.  I also won a copy of Office 2008 for Mac at the <a href="http://sxsw.geekslovebowling.com/">Geeks Love Bowling</a> event at SXSW.  We didn&#8217;t win for the most points, but for consuming the most alcohol; we had to live up to our team name: &#8220;The Beer Liberation Front&#8221;. (<a href="http://flickr.com/photos/mozmonkey/tags/geekslovebowling/">See Pictures</a>).</p>
<p>I got excited that Entourage in Office 2008 might actually be usable.  After installing it I was impressed &#8212; the UI looked great and the calendar wasn&#8217;t pink! (Entourage 2004 was pink)  Entourage is very usable but I still fell back to Outlook because I couldn&#8217;t totally get used to it.  Here are some points:</p>
<h4>Problems with Entourage 2008</h4>
<ul>
<li>Local folders are far down on the left bar, so you have to scroll to get to most of them.</li>
<li>Not many options to customize.</li>
<li>Sorting email by &#8220;conversation&#8221; doesn&#8217;t build the message tree like Outlook, so you don&#8217;t really know who replied to which message.</li>
<li>Not as easy to skim through the email list.</li>
<li>NO WAY to directly import PST files from Outlook (The same company produces both of these products, right?)</li>
<li>(the kicker) Dragging an email to your local folder COPIES it instead of moving it! How does that make sense?</li>
</ul>
<p>Overall these are mostly small issues, but the app wasn&#8217;t good enough to make me totally switch to it.  Maybe someday.</p>
<h3>Pandora vs. Last.fm</h3>
<p>I&#8217;ve been using the <a href="http://pandora.com/">Pandora</a> music player for the last 6 months and have found so many great new artists through their music recommendations; I love it.  They&#8217;ve always had big advertising around the player, and I never minded.  They provide a valuable service to me and I think they should get paid for that.  The problem is this week their player took a turn to the dark side: It would play a song or two, but refuse the next one until you put focus on the browser window with the player.  This is unacceptable!  I cannot stop what I&#8217;m doing every 5 - 10 minutes to jump to that page just to get another couple songs!</p>
<p>This was enough of a push to send me to try another thing that I&#8217;ve been hearing everyone rave about: <a href="http://last.fm">last.fm</a>.  With so many people talking about it, it must be good, right?  I signed up, downloaded the software and &#8220;scrobbled&#8221; (WTF?) my itunes library.  Coming from Pandora I expected that by having their program send the titles from my itunes library to my account it would know what I like and give me recommendations on that.  No luck.  It didn&#8217;t tell me what to expect from it, so I decided maybe it was waiting for me to listen to some music first.</p>
<p>I open the player and entered &#8220;Pink Floyd&#8221; &#8212; my favorite band &#8212; and pressed play to listen to them and similar artists.  Nice so far.  I have a rather eclectic music taste so as much as I like Pink Floyd I don&#8217;t want to listen to them and similar music <em>all day</em>.  In Pandora can setup stations and add a range of artists like Metallica, Ludo, Booker-T and the MGs, RJD2, Moby, Bob Marley, etc.  The point is I like my music to switch up ever couple of songs and give me a different sound.  Last.fm wont give that to me.</p>
<p>It feels very restrictive.  I have to pick an artist or genre and I can&#8217;t add anything to it.  If I get tired of the music selection I need to start over.  The site isn&#8217;t helpful either.  No real instructions or guidance, they just expect that you <em>get it</em> or are going to take the social approach and search for users like you.  I&#8217;m sorry; I just want to listen to good music.</p>
<p>For example, take the following screen (notice it tells me the recommendations are a &#8220;Sample&#8221;):</p>
<p class="blockImg"><a href="http://flickr.com/photos/mozmonkey/2369792923/"><img src="http://farm4.static.flickr.com/3289/2369792923_2ddef7ba96.jpg?v=0" alt="Give me real results" /></a></p>
<p>It says that there aren&#8217;t any &#8220;real&#8221; recommendations for me yet because&#8230;why?  It read my itunes library, I&#8217;ve listened, and scrobbled, a lot of songs.  So at what point is it going to recommend something to me?  I&#8217;ve done everything it has asked me to do.  BAD USER EXPERIENCE == FAIL!</p>
<p>The good news is that I&#8217;ve found that several projects that have created desktop applications that play music from Pandora and they don&#8217;t have the stupid &#8220;pause&#8221; behavior that is present in the web player.  So I&#8217;ve downloaded <a href="http://code.google.com/p/pandoraboy/">PandoraBoy</a> and can now groove to my stations.  In fact as I type this blog post Pandora is playing a list of fantastic selections &#8212; I&#8217;m very pleased. (at this second it&#8217;s playing &#8220;Sunday&#8221;, by Moby)</p>
<h3>Summary</h3>
<p>So at the end of the week, even though I&#8217;m back where I started, I&#8217;m happy I tried these products and got a taste for what&#8217;s out there.  It seems I was using the better apps to begin with.  Big Win!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/a-bad-week-for-software-parallels-vs-vmware-pandora-vs-lastfm-and-entourage/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Back from SXSW with a little Scurvy</title>
		<link>http://blog.mozmonkey.com/2008/back-from-sxsw-with-a-little-scurvy/</link>
		<comments>http://blog.mozmonkey.com/2008/back-from-sxsw-with-a-little-scurvy/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 00:24:28 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2008/back-from-sxsw-with-a-little-scurvy/</guid>
		<description><![CDATA[SXSW this year was fantastic!  I built my foundation last year (it being my first), so this year I had loads more fun partying with my existing friends, meeting lots of new people and scheming new ideas.  The panels were OK and the conference center floor plan was horrible &#8212; but then again [...]]]></description>
			<content:encoded><![CDATA[<p>SXSW this year was fantastic!  I built my foundation last year (it being my first), so this year I had loads more fun partying with my existing friends, meeting lots of new people and scheming new ideas.  The panels were OK and the conference center floor plan was horrible &#8212; but then again SXSW is really about the networking.</p>
<p>Sadly I returned with what is now widely known as the SXSW Scurvy!  It seems everyone who went to the 5 day conference came back with a bad strain of the flu.  To make everyone feel better <a href="http://zowia.com/">Stephanie Trimble</a>, <a href="http://joshgillick.com/">Josh Gillick</a> and I put together a giant <a href="http://sxswscurvy.com/">Get Well</a> card and patient registry for all who are infected.</p>
<p class="blockImg">
<a href="http://sxswscurvy.com/"><img src="http://farm3.static.flickr.com/2152/2346072041_5ddfe5219c.jpg?v=0" alt="The SXSW Scurvy Get Well Card" /></a>
</p>
<p>Not only did I return with the scurvy, I also came back with a sprained ankle and now I need to wear this walking boot for 4 - 6 weeks.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/2332630303/in/set-72157604115292978/"><br />
<img src="http://farm4.static.flickr.com/3115/2332630303_85a88ea090.jpg?v=0" alt="The walking boot for my ankle" /></a>
</p>
<p>All-in-all though, it was totally worth it.  I extended my network in many important directions and had a great time with friends.  I&#8217;m already planning a list of panel ideas in hopes of actually speaking at the 2009 conference.  The ideas are revolving around JavaScript, how social sites connect people in real life and easy progressive enhancement techniques.  I&#8217;m hoping that next year will have a stronger technical path and design panels with fresh information and strategies.</p>
<p class="blockImg">
<a href="http://www.flickr.com/photos/mozmonkey/2333950948/in/set-72157604115292978/"><br />
<img src="http://farm3.static.flickr.com/2221/2333950948_c4a7b4c970.jpg?v=0" alt="I have a W3C Scarf" /></a>
</p>
<p><a href="http://www.flickr.com/photos/mozmonkey/sets/72157604115292978/">More photos from SXSW.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/back-from-sxsw-with-a-little-scurvy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Back From India and off to SXSWi</title>
		<link>http://blog.mozmonkey.com/2008/back-from-india-and-off-to-sxsw/</link>
		<comments>http://blog.mozmonkey.com/2008/back-from-india-and-off-to-sxsw/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 20:05:37 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2008/back-from-india-and-off-to-sxsw/</guid>
		<description><![CDATA[My trip to India was a huge success!  
It was great to finally meeting all the people who I had been exchanging emails with over the past 14 months at PayPal.  There is something very human and refreshing when you put a face to the name.  The training went very well and [...]]]></description>
			<content:encoded><![CDATA[<p>My trip to India was a huge success!  </p>
<p>It was great to finally meeting all the people who I had been exchanging emails with over the past 14 months at PayPal.  There is something very human and refreshing when you put a face to the name.  The training went very well and both weeks were very interactive with lots of great questions and discussions.  We were able to get through beginning JavaScript and ended on intermediate OO JavaScript techniques.  Everyone was really friendly and always made sure Kimberly and I were comfortable and having a good time.  </p>
<p>While I was there I also received a <a href="http://blog.mozmonkey.com/2008/off-to-india-to-do-taining/#comment-84034">comment on my blog</a> asking me to do a talk at a local webcamp in Chennai.  Even though I wasn&#8217;t able to make it out to that, it was very flattering to receive a request out of the blue like that.  Thanks <a href="http://www.prabhu-s.com/">Prabhu</a>! </p>
<p>Over the weekend we flew up to Delhi and Agra to see the Taj Mahal and a few forts.  There aren&#8217;t words to explain how amazing of an experience it was.  From seeing the amazing architecture and history to watching people putting the time, heart and pride into making a marble inlaid dinner table which takes a full year and a half to complete.</p>
<p>After the 2 weeks were complete I realized that it <em>truly</em> wasn&#8217;t about the training; it was about the people.  There&#8217;s not enough room on my blog to thank everyone who affected my journey, but I want to say a special thanks to <a href="http://www.guruprasath.name/">Guru Prasath</a> and Reena Bansal.  Guru made sure <a href="http://www.kimberlyblessing.com/">Kimberly</a> and I were always comfortable and not getting ourselves into <em>too much</em> trouble and Reena became our tour guide through Delhi and helped us negotiate good prices for things in the market and let me borrow he camera when mine ran out of battery.</p>
<div class="blockImg">
<a href="http://flickr.com/photos/18756971@N00/2320789416/in/set-72157604078758907/"><img src="http://farm4.static.flickr.com/3046/2320789416_287faf8649.jpg?v=0" alt="WebDev and UED in Chennai, India" /></a>
</div>
<p><a href="http://flickr.com/photos/18756971@N00/sets/72157604078758907/">See more pictures&#8230;</a></p>
<p>After I returned to California I had 6 days to readjust before jumped back on a plane to head down to Austin, Texas for 5 days at the <a href="http://2008.sxsw.com/interactive/" rel="nofollow">SXSW Interactive conference</a>.  More on that later&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/back-from-india-and-off-to-sxsw/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Off to India to do Taining</title>
		<link>http://blog.mozmonkey.com/2008/off-to-india-to-do-taining/</link>
		<comments>http://blog.mozmonkey.com/2008/off-to-india-to-do-taining/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 01:44:23 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2008/off-to-india-to-do-taining/</guid>
		<description><![CDATA[In a few hours (5.5 to be exact) I&#8217;m jumping on a plane to travel from San Francisco to Chennai, India.  PayPal is sending me to do the JavaScript training for the Web Development team there.
My plane leaves tonight at 12:05a and lands in Singapore for an 8 hour layover.  I expect to [...]]]></description>
			<content:encoded><![CDATA[<p>In a few hours (5.5 to be exact) I&#8217;m jumping on a plane to travel from San Francisco to Chennai, India.  PayPal is sending me to do the JavaScript training for the Web Development team there.</p>
<p>My plane leaves tonight at 12:05a and lands in Singapore for an <em>8 hour</em> layover.  I expect to leave the airport of a few hours of sight seeing and sampling the local food.  Then I jump back on the plain to hop over to India.</p>
<p>I&#8217;ll be in India for 2 weeks and doing the &#8220;Intro to JavaScript and DOM Scripting&#8221; class for half the team each week.  Over the weekend my boss, <a href="http://www.kimberlyblessing.com/">Kimberly Blessing</a>, and I will be traveling up to Agra to see the amazing Taj Mahal.  I&#8217;ll be taking lots of pictures and posting them on <a href="http://flickr.com/photos/18756971@N00/">Flickr</a> along the way.  I love how every time I tell someone I&#8217;m going to India their eyes light up and they instantly have stories and advice for places to go and things to do &#8212; it&#8217;s fantastic!  (and yes I&#8217;ve had my shots, pills and will avoid the water)</p>
<p>OK, off to finish packing now.  Wish me luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/off-to-india-to-do-taining/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SXSW Panel Follow-up</title>
		<link>http://blog.mozmonkey.com/2008/sxsw-panel-follow-up/</link>
		<comments>http://blog.mozmonkey.com/2008/sxsw-panel-follow-up/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 22:47:59 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2008/sxsw-panel-follow-up/</guid>
		<description><![CDATA[I received word from the SXSW planning committee that my panel idea was not chosen for the 2008 SXSW schedule.  I can&#8217;t say that I&#8217;m surprised, since documentation isn&#8217;t a very exciting or compelling topic.
I still would like to contribute to a SXSW topic, so if you&#8217;re putting together a panel and need another [...]]]></description>
			<content:encoded><![CDATA[<p>I received word from the SXSW planning committee that <a href="http://blog.mozmonkey.com/2007/vote-for-me-before-sept-21-sxsw-panel/">my panel idea</a> was not chosen for the 2008 SXSW schedule.  I can&#8217;t say that I&#8217;m surprised, since documentation isn&#8217;t a very exciting or compelling topic.</p>
<p>I still would like to contribute to a SXSW topic, so if you&#8217;re putting together a panel and need another person, let me know.  Personally I specialize in standards based web development where my target areas are:</p>
<ul>
<li>Unobtrusive and accessible JavaScript</li>
<li>Semantic [X]HTML/CSS</li>
<li>Logical use of XHR (i.e. don&#8217;t use it for everything &#8212; only where it matters)</li>
<li>Discussing where certain Web 2.0 and <em>Ajax</em> patterns are over used and abused</li>
</ul>
<p>If you&#8217;re interested, leave me a comment below and I&#8217;ll get back to you.  Don&#8217;t send me an email since I get too much spam at my public address.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/sxsw-panel-follow-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Flickr / Twitter Mashup = Twickr (or maybe Flitter)</title>
		<link>http://blog.mozmonkey.com/2008/flickr-twitter-mashup-twickr/</link>
		<comments>http://blog.mozmonkey.com/2008/flickr-twitter-mashup-twickr/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 04:27:46 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Software]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2008/flickr-twitter-mashup-twickr/</guid>
		<description><![CDATA[I&#8217;ve been using Twitter (https://twitter.com/jgillick)  for a little over a month now and the one that&#8217;s lacking is picture messaging.  What I want is to upload a photo to Flickr, create a TinyUrl for it and sent that plus a short description as a Twitter update.  Well now it&#8217;s possible.
After a little [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using Twitter (<a href="https://twitter.com/jgillick">https://twitter.com/jgillick</a>)  for a little over a month now and the one that&#8217;s lacking is picture messaging.  What I want is to upload a photo to Flickr, create a TinyUrl for it and sent that plus a short description as a Twitter update.  Well now it&#8217;s possible.</p>
<p>After a little research I found a tool, called <a href="http://www.twittergram.com/flickrToTwitter">TwitterGram</a>, which does just this.  You enter your Flickr username and Twitter username/password and it will automatically send updates to your Twitter log when you upload a photo.  Unfortunately it didn&#8217;t work for me, so I went ahead and made my own which you can download and run on your servers!</p>
<p>My script starts by reading the Flickr feed (rss or atom), checks for new images that were uploaded within the last 12 hours (this can be set by <code>$timeout</code> &#8212; see <a href="#twickr_config">configuration</a>), gets the TinyUrl for each new photo and sends it with the Flickr title to Twitter.  </p>
<h3>Setup</h3>
<ul>
<li><a href="#twickr_download">Download</a> the script.</li>
<li>Upload it to your PHP enabled web server.</li>
<li>Set <a href="#twickr_config">configuration options</a></li>
<li>Setup a <a href="#twickr_cron">cron job</a> to run this script as often as you want.</li>
</ul>
<h3 id="twickr_config">Configuration</h3>
<p>The options PHP variables at the top of the file.</p>
<dl>
<dt>$twitter</dt>
<dd>The username/password for your twitter account</dd>
<dt>$flickr</dt>
<dd>The flickr feed URL to watch.  This must be in atom or rss2 format. NOTE: RSS1.0 does not have timestamps and can cause duplicate entries or other unexpected behavior.
</dd>
<dt>$cacheFile</dt>
<dd>This file holds the last 50 flickr image URLs uploaded in PHP serialized form to prevent duplicate entries.</dd>
<dt>$timeout</dt>
<dd>Filters out photos from your stream that were uploaded before this number of hours ago.</dd>
<dt>$debug</dt>
<dd>Set this to TRUE if you want to test the script and do everything but send the message to twitter.</dd>
</dl>
<h3>Flickr Feed</h3>
<p>Using a Flickr feed lets you limit the Twickr tweets to a specific tag.  Here&#8217;s how to get the feed URL:</p>
<ul>
<li>Login to Flickr</li>
<li>Click &#8220;Your Photos&#8221;</li>
<li>Add the following to the end of the URL &#8220;tags/twickr/&#8221; (change &#8220;twickr&#8221; to any tag you want to limit the app to)</li>
<li>Click the RSS icon (<img src="http://blog.mozmonkey.com/wp-content/themes/Mozmonkey/images/rss/orange-14x14.png" alt="Subscribe to a feed of stuff on this page..." />) towards the bottom of the page.</li>
<li>The page that loads is your Flickr feed, copy that URL into your <code>$flickr</code> configuration variable.</li>
</ul>
<h3>Testing</h3>
<p>Before finishing the setup be sure to test it.  Edit the script and set <code>$debug</code> to <code>TRUE</code> and then run it from the command line:</p>
<pre>
php -f twickr.php
</pre>
<p>A common error will be &#8220;Permission denied&#8221; when it tries to create the cacheFile &#8212; which is used to store the URL of the last 50 images tweeted to prevent duplicates.  This file is saved in the same directory as the script.  Be sure the user which calls the script has access to write to this directory.</p>
<p>Remember to set <code>$debug</code> back to <code>FALSE</code> when you&#8217;re ready to use the script for real.</p>
<h3 id="twickr_cron">Cron Job</h3>
<p>If you&#8217;ve never setup a cron job before, use this command:</p>
<pre>
sudo crontab -e
</pre>
<p>The to have the script (which in my case is at /usr/local/bin/twickr/twickr.php) run every 10 minutes enter the following as it&#8217;s own line:</p>
<pre>
0,10,20,30,40,50 *   *   *   *   php -f /usr/local/bin/twickr/twickr.php
</pre>
<p>(<a href="http://en.wikipedia.org/wiki/Cron">More information about cron</a>)</p>
<p>Now whenever you upload a photo to flickr with the required tag it&#8217;ll automatically send a tweet with the Flickr image title and URL (as a TinyUrl).</p>
<h3 id="twickr_download">Download</h3>
<p><a href="http://src.mozmonkey.com/viewvc.cgi/twickr.tar.gz?view=tar">Download</a> or get the latest from my <a href="http://src.mozmonkey.com/viewvc.cgi/twickr/trunk/">SVN repository</a>.</p>
<h3>Web Service</h3>
<p>If you do not have a web server or are want to have somebody else host the script I&#8217;m considering putting together a simple site to do just that for you.  If you&#8217;re interested let me know in the comments and subscribe to my blog to hear about updates like this in the future. </p>
<h3>Updates</h3>
<p>Subscribe to my blog to learn about updates.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2008/flickr-twitter-mashup-twickr/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Make Sure You&#8217;re Site Says &#8220;Hello&#8221; to New Users</title>
		<link>http://blog.mozmonkey.com/2007/make-sure-youre-site-says-hello-to-new-users/</link>
		<comments>http://blog.mozmonkey.com/2007/make-sure-youre-site-says-hello-to-new-users/#comments</comments>
		<pubDate>Sun, 30 Dec 2007 06:56:00 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Useability]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/make-sure-youre-site-says-hello-to-new-users/</guid>
		<description><![CDATA[I can&#8217;t tell you how many sites I&#8217;ve stumbled upon which do not tell me who they are on their homepage.  Yeah they have a cool design &#8212; BUT WHAT DO YOU DO?  This is more common on (sadly) open source project websites, but I&#8217;ve also seen them on sites which are trying [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t tell you how many sites I&#8217;ve stumbled upon which do not tell me who they are on their homepage.  Yeah they have a cool design &#8212; BUT WHAT DO YOU DO?  This is more common on (sadly) open source project websites, but I&#8217;ve also seen them on sites which are trying to sell some sort of Enterprise software.  I&#8217;m sure if I dig through the folds deep enough I&#8217;ll find out who you are, but I just don&#8217;t have the time.</p>
<p>An example I saw today, and what compelled me to write this post, was when I dropped in on the PunBB website (<a href="http://punbb.org/">http://punbb.org/</a>).  It tells me &#8220;It&#8217;s called PunBB. It&#8217;s the only way to fly.&#8221;, hmmm, OK sure, whatever that means. Then the main column part of the page is News, with the developers talking about milestones and progress and other stuff they&#8217;re doing on this <em>mysterious</em> product.  Why wont you just come out andtell me who you are?  When you finally look around and discover the &#8220;About&#8221; link, you find out that &#8220;PunBB is a fast and lightweight PHP-powered discussion board.&#8221;  Oh, why didn&#8217;t you say so?</p>
<div class="blockImg">
<a href='http://blog.mozmonkey.com/wp-content/uploads/2007/12/punbb.gif' title='PunBB Website'><img src='http://blog.mozmonkey.com/wp-content/uploads/2007/12/punbb.gif' alt='PunBB Website' width="300" /></a>
</div>
<p>This is a perfect example of poor design and user interaction.  As a web developer or designer you should always ensure that the user immediately understands what you do as soon as they hit your site.  Don&#8217;t waste your homepage with talking about progress and milestones; put that on another page.  At most you should <em>only</em> have the latest update on the homepage and all other news on a dedicated page.  If you forget this many users will come, glance around the homepage, be confused and run away with a negative feeling about your website &#8212; not the product.  This is dangerous because that feeling will last and can mean they&#8217;ll never use your service or product.</p>
<p>PHP Nuke (<a href="http://phpnuke.org/">http://phpnuke.org/</a>) is another example of this.  This site does have a tagline, although you might have to look for it: &#8220;Professional Content Management System - Official Website&#8221;.  Unfortunately that&#8217;s the last bit of coherent content you&#8217;ll find.  So tell me more about this professional CMS.  Half the links send me to pages with content which doesn&#8217;t help me at all.  Cut down on the links and the noise.  Put the most important information and links for new users at the top.</p>
<p>Don&#8217;t fall into the same bad habits.  Take time and care to make sure your homepage is clear, self explanatory and easy to navigate &#8212; you know what they say about first impressions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/make-sure-youre-site-says-hello-to-new-users/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Vote for Me before Sept 21 (SXSW Panel)</title>
		<link>http://blog.mozmonkey.com/2007/vote-for-me-before-sept-21-sxsw-panel/</link>
		<comments>http://blog.mozmonkey.com/2007/vote-for-me-before-sept-21-sxsw-panel/#comments</comments>
		<pubDate>Fri, 31 Aug 2007 21:23:01 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/vote-for-me-before-sept-21-sxsw-panel/</guid>
		<description><![CDATA[OK.  So I&#8217;m not running for President (damn), but I did submit a panel to SXSW: &#8220;Documentation Blues &#8212; How to Keep Your Stuff Documented&#8221;.  Well the title isn&#8217;t the best since I&#8217;ve always been bad at coming up with catchy titles (and tunes for that matter).  Basically it&#8217;s a panel that [...]]]></description>
			<content:encoded><![CDATA[<p>OK.  So I&#8217;m not running for President (damn), but I did submit a panel to SXSW: <a href="http://panelpicker.sxsw.com/ideas/view/241">&#8220;Documentation Blues &#8212; How to Keep Your Stuff Documented&#8221;</a>.  Well the title isn&#8217;t the best since I&#8217;ve always been bad at coming up with catchy titles (and tunes for that matter).  Basically it&#8217;s a panel that will discuss how to maintain documentation for your website, APIs and/or product.  Anybody who has done this before knows it can be a nightmare to create and even more to maintain.  However, some projects have been very successful at either using automated tools or encouraging an active community.  </p>
<p>This panel will explore these solutions and talk to the people who helped to create them in an effort to find the perfect recipe for self maintaining documentation.</p>
<p>The only way panels make it into the conference schedule is if people vote for them. Vote for it here:<br />
<a href="http://panelpicker.sxsw.com/ideas/view/241">http://panelpicker.sxsw.com/ideas/view/241</a></p>
<p><strong>You only have until Friday September 21!</strong></p>
<p>Thanks for your vote! &lt;Presidential Wave&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/vote-for-me-before-sept-21-sxsw-panel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Semantic Tab Box v2.0</title>
		<link>http://blog.mozmonkey.com/2007/semantic-tab-box-v20/</link>
		<comments>http://blog.mozmonkey.com/2007/semantic-tab-box-v20/#comments</comments>
		<pubDate>Wed, 18 Jul 2007 22:02:20 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Accessibility]]></category>

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/semantic-tab-box-v20/</guid>
		<description><![CDATA[Last year I came up with the original semantic tab box, now I&#8217;m improving it.  Here are the things I wanted to fix:

Keep JavaScript unobtrusive &#8212; no inline event handlers and needs to work without JavaScript.
Create a standard API that can be easily reused and customized.
Make the markup more flexible.
Support both vertical and horizontal [...]]]></description>
			<content:encoded><![CDATA[<p>Last year I came up with the original <a href="http://blog.mozmonkey.com/2006/creating-a-semantic-tab-box-without-ajax/">semantic tab box</a>, now I&#8217;m improving it.  Here are the things I wanted to fix:</p>
<ul>
<li>Keep JavaScript unobtrusive &#8212; no inline event handlers and needs to work without JavaScript.</li>
<li>Create a standard API that can be easily reused and customized.</li>
<li>Make the markup more flexible.</li>
<li>Support both vertical and horizontal tabs.</li>
<li>Don&#8217;t constrain the height of the box &#8212; let it expand to the size of the content.</li>
<li>Keyboard navigation.</li>
</ul>
<h3>How is this better that other tab boxes out there?</h3>
<p>All the tab boxes I&#8217;ve seen overcomplicate their solutions.  They start with an unordered list of the tab names, followed by the content blocks.  With a bit of CSS this looks very nice, but for screen readers the content is disconnected from the tab names and can be very confusing.  Just try turning off CSS, you&#8217;ll see how horrible this looks:  </p>
<div class="example">
<ul>
<li><a href="#tabSec1">Internet</a></li>
<li><a href="#tabSec2">Accessibility</a></li>
<li><a href="#tabSec3">Progressive Enhancement</a></li>
</ul>
<p id="tabSec1">The Internet is a worldwide, publicly accessible network of interconnected computer networks that transmit data by packet switching using the standard Internet Protocol (IP).</p>
<p id="tabSec2">Accessibility is a general term used to describe the degree to which a system is usable by as many people as possible.</p>
<p id="tabSec3">Progressive enhancement is a label for a particular strategy of Web design that emphasizes accessibility, semantic markup, and external stylesheet and scripting technologies&#8230;</p>
</div>
<p>Notice how the content is disconnected from the &#8220;tabs&#8221; when CSS is disabled (or when being read by a screen reader).</p>
<p>To solve this problem, most people just duplicate the tab name with a header (h2, h3, etc) at the top of each content block and use CSS to hide them from visual users. Here&#8217;s an example of what this solution looks like without CSS:</p>
<div class="example">
<ul>
<li><a href="#tabSec4">Internet</a></li>
<li><a href="#tabSec5">Accessibility</a></li>
<li><a href="#tabSec6">Progressive Enhancement</a></li>
</ul>
<h3 id="tabSec4">Internet</h3>
<p>The Internet is a worldwide, publicly accessible network of interconnected computer networks that transmit data by packet switching using the standard Internet Protocol (IP).</p>
<h3 id="tabSec5">Accessibility</h3>
<p>Accessibility is a general term used to describe the degree to which a system is usable by as many people as possible.</p>
<h3 id="tabSec6">Progressive Enhancement</h3>
<p>Progressive enhancement is a label for a particular strategy of Web design that emphasizes accessibility, semantic markup, and external stylesheet and scripting technologies&#8230;</p>
</div>
<p>Sure this works, but why the redundancy?  Yuck!  </p>
<p>My solution gets rid of the unordered lists and formats the content blocks logically &#8212; with header tags.  </p>
<h3>Enough talk&#8230;</h3>
<p>&#8230;lets get to the examples:</p>
<ul>
<li><a href="/pages/examples/tabbox2/simple/horizontal/index.html" title="Simple horizontal tab box">Simple-Horizontal</a>: A simple horizontally oriented tab box.</li>
<li><a href="/pages/examples/tabbox2/simple/vertical/index.html" title="Simple vertical tab box">Simple-Vertical</a>: A simple vertically oriented tab box.</li>
</ul>
<pre>
<h3>In &lt;head&gt;</h3>

&lt;script type="text/javascript"&gt;
   var tabs = new Tabbox("editorTabs")
&lt;/script&gt;
</pre>
<pre>
<h3>In &lt;body&gt;</h3>

&lt;div id="myTabbox"&gt;

   &lt;!-- Internet Tab --&gt;
   &lt;div class="tabPanel selected"&gt;
      &lt;h3&gt;&lt;a href="#interWebTab"&gt;Internet&lt;/a&gt;&lt;/h3&gt;
      &lt;div id="interWebTab" class="tabContent"&gt;
         &lt;p&gt;
            The Internet is a worldwide...
         &lt;/p&gt;
      &lt;/div&gt;
   &lt;/div&gt;

   &lt;!-- Accessibility Tab --&gt;
   &lt;div class="tabPanel"&gt;
      &lt;h3&gt;&lt;a href="#accessTab"&gt;Accessibility&lt;/a&gt;&lt;/h3&gt;
      &lt;div id="accessTab" class="tabContent"&gt;
         &lt;p&gt;
            Accessibility is a general term used to...
         &lt;/p&gt;
      &lt;/div&gt;
   &lt;/div&gt;

&lt;/div&gt;
</pre>
<p>Pretty simple huh?</p>
<h3>Accessibility and Non-JavaScript Support</h3>
<p>This new version supports accessibility by using CSS to hide the content divs (<code>&lt;div class="tabContent"&gt;</code>) off screen, instead of with the <a href="http://blog.mozmonkey.com/2007/display-none-is-not-accessible/" title="'display: none' is NOT Accessible">unaccessible display:none</a> CSS property.</p>
<p>These CSS classes are applied with JavaScript, so the content will be viewable if JavaScript is disabled or broken on the page.  Try viewing the <a href="/pages/examples/tabbox2/simple/horizontal/index.html">examples</a> with JavaScript disabled and you&#8217;ll see what I mean.</p>
<h3>API</h3>
<p>To setup the tab box all you need to do is initialize the Tabbox object with the main div ID:</p>
<pre class="code">
var box = new Tabbox("myTabbox", { header: "h3",
                                   vertical : true,
                                   select: 1,
                                   autosize: true });
</pre>
<p>All the values in the second parameter are optional:</p>
<table border="1">
<tr>
<th>Name</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td>header</td>
<td>&#8220;h3&#8243;</td>
<td>The header element used for each tab name.  This element <em>cannot</em> be used anywhere else in the content block.</td>
</tr>
<tr>
<td>vertical</td>
<td>false</td>
<td>If the tabs should be oriented vertically. The tabs are setup horizontally by default.</td>
</tr>
<tr>
<td>select</td>
<td>0</td>
<td>The tab index to select initially.</td>
</tr>
<tr>
<td>autosize</td>
<td>true</td>
<td>Automatically size the box to the content of the tab.</td>
</tr>
</table>
<p>The code has been commented and layed out logically so updating it with features and enhancements should be easy.  Speaking of enhancements&#8230;</p>
<h3>Advanced Example &#8212; Hey Look! Something shiny.</h3>
<p>So far the examples have been rather simple and plain so I wanted to create one that was more advanced.  This example has a more complex UI, animations and implements the YUI history manager.  Now when you change tabs it adds history to your browser and the back button will select the previous tab.  Check it out &#8212; it&#8217;s the <a href="http://blog.mozmonkey.com/pages/examples/tabbox2/advanced/index.html">Über-Cool, Shiny, Tab Box</a>.</p>
<h3>Download</h3>
<p>Now that you&#8217;ve seen the examples, you can download all the code and use it on your site:<br />
<a href="http://blog.mozmonkey.com/pages/examples/tabbox2/tabbox2.zip" title="Download the semantic tab box source code">tabbox2.zip (46K)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/semantic-tab-box-v20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ajax Experience Here I Come</title>
		<link>http://blog.mozmonkey.com/2007/ajax-experience-here-i-come/</link>
		<comments>http://blog.mozmonkey.com/2007/ajax-experience-here-i-come/#comments</comments>
		<pubDate>Fri, 13 Jul 2007 19:07:11 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/ajax-experience-here-i-come/</guid>
		<description><![CDATA[It&#8217;s official, I&#8217;m going to be attending The Ajax Experience in San Francisco July 25 - 27th.  I expect it to be a great opportunity to get around my peers, network and hear about a lot of really cool stuff.  The schedule looks packed and the list of speakers is impressive.
If you&#8217;re going [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s official, I&#8217;m going to be attending <a href="http://ajaxexperience.techtarget.com/west/index.html">The Ajax Experience</a> in San Francisco July 25 - 27th.  I expect it to be a great opportunity to get around my peers, network and hear about a lot of really cool stuff.  The schedule looks packed and the list of speakers is impressive.</p>
<p>If you&#8217;re going to be there, lets get together for some drinks and general geekiness. Leave a comment below with your email (which will be kept private) and I&#8217;ll get back to you.  Don&#8217;t send me an email, because my @mozmonkey email system is not working right now.</p>
<p>If you see me there, reach out a hand and say &#8220;Hello&#8221;.  Here&#8217;s what <a href="http://blog.mozmonkey.com/about/" title="Picture of Jeremy Gillick">I look like</a>.  And here&#8217;s a more <a href="http://www.flickr.com/photos/polvero/766007760/" title="Another picture of Jeremy Gillick">recent picture</a> by <a href="http://www.dustindiaz.com/" title="Dustin Diaz's Blog">Dustin Diaz</a> on the 4th of July.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/ajax-experience-here-i-come/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;display: none&#8221; is NOT Accessible</title>
		<link>http://blog.mozmonkey.com/2007/display-none-is-not-accessible/</link>
		<comments>http://blog.mozmonkey.com/2007/display-none-is-not-accessible/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 18:35:12 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Accessibility]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/display-none-is-not-accessible/</guid>
		<description><![CDATA[Just a quick note to say that using &#8220;display:none&#8221; is not as accessible as many web developers think.  I know I fell into this in several of my earlier examples.  The general though is: &#8220;To keep my app accessible I need to include content that will only be read by screen readers and [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note to say that using &#8220;display:none&#8221; is not as accessible as many web developers think.  I know I fell into this in several of my earlier examples.  The general though is: &#8220;To keep my app accessible I need to include content that will only be read by screen readers and not to my visual audience&#8221;.  This type of content can include submit buttons for simple dropdown lists, textual headers and content that needs to be hidden until a browser event occurs.  The simple solution is just to add &#8220;display:none&#8221; to that element to hide it from view &#8212; but this is wrong.</p>
<p>The problem is that modern screen readers <em>do</em> understand CSS and if you use &#8220;display:none&#8221;, they will assume this content should be ignored and will skip it entirely.  This of course was not your intention and leaves all that work and consideration for nothing.</p>
<p>A better solution is to hide the content off-screen until you need it:</p>
<pre>
.accessible { position: absolute; top: -9999px; left: -9999px; }
</pre>
<p>&#8211; </p>
<p>You&#8217;ll find that once you start supporting accessibility through Progressive Enhancement (<a href="http://domscripting.com/blog/display/41">Hijax</a>), development becomes more straight forward and easier to maintain.  Keep it accessible.</p>
<p>&#8211;</p>
<p>Discuss&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/display-none-is-not-accessible/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My Simpsons Avatar</title>
		<link>http://blog.mozmonkey.com/2007/my-simpsons-avatar-2/</link>
		<comments>http://blog.mozmonkey.com/2007/my-simpsons-avatar-2/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 01:42:07 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/my-simpsons-avatar-2/</guid>
		<description><![CDATA[Finally, the Simpsons Movie is almost here (7/27/07).



]]></description>
			<content:encoded><![CDATA[<p>Finally, the Simpsons Movie is almost here (<a href="http://www.simpsonsmovie.com/">7/27/07</a>).</p>
<div class="blockImg">
<a href='http://blog.mozmonkey.com/wp-content/uploads/2007/07/simpsons_small.jpg' title='My Simpsons Avatar'><img src='http://blog.mozmonkey.com/wp-content/uploads/2007/07/simpsons_small.jpg' alt='My Simpsons Avatar' /></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/my-simpsons-avatar-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lost: The Answers? - I&#8217;m Still Lost</title>
		<link>http://blog.mozmonkey.com/2007/lost-the-answers-im-still-lost/</link>
		<comments>http://blog.mozmonkey.com/2007/lost-the-answers-im-still-lost/#comments</comments>
		<pubDate>Tue, 22 May 2007 19:01:01 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/lost-the-answers-im-still-lost/</guid>
		<description><![CDATA[I&#8217;ve been in a love/hate relationship with the television show &#8220;Lost&#8221; since it started.  I do enjoy some of the plot twists and the character flashback that, over time, show how all the characters relate. The whole story is an interesting concept, and Ben is the perfect villain.  But, since the beginning I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been in a love/hate relationship with the television show &#8220;Lost&#8221; since it started.  I <em>do</em> enjoy some of the plot twists and the character flashback that, over time, show how all the characters relate. The whole story is an interesting concept, and Ben is the perfect villain.  But, since the beginning I&#8217;ve hated the countless plot twists without any answers (do the producers even know where it&#8217;s going), the number filler episodes that draw out 5 minutes of content over an entire hour &#8212; for example: Boone dieing, Lock&#8217;s obsession with the hatch and Paulo and what&#8217;s-her-name dying (they weren&#8217;t even part of the show).</p>
<p>Lost has been loosing much of it&#8217;s audience for exactly these reasons.  Instead of the producers fixing the problem, they instead narrate a review episode, called &#8220;The Answers&#8221; where they explain all that we have learned throughout the series.  The episode felt like they were trying to convince all of us that there <em>have</em> been answers &#8212; really &#8212; we must not have seen them.  The problem is that the answers so far are either not directly part of the main plot line or open other questions.</p>
<p>The types of answers that don&#8217;t matter are things like how Locks&#8217; Dad is the same person that conned Sawer&#8217;s parents.  Or that Jack&#8217;s father is also Claire&#8217;s dad.  Oh and Kate killed her father.  Do the producers have &#8220;daddy&#8221; problems?  How about how the girl Sawer conned helped Kate later on &#8212; that was really important, right?  These things are interesting, but don&#8217;t give a whole lot to the story.  They really aren&#8217;t answers.</p>
<p>Most of the other &#8220;answers&#8221; really didn&#8217;t answer anything but opened up more.  For example, we thought that the others were part of the Dharma Initiative.  Well, the show answered that question by&#8230;spoiler alert&#8230;telling us the &#8220;others&#8221; were rebels who murdered everyone in the Dharma Initiative with the help of Ben.  Ok, then where did the rebels come from?  Why are they at war the plane crash survivors? And who the f***k is Jacob?!?</p>
<p>This is why the audience feels like there haven&#8217;t been any answers, because the answers aren&#8217;t leading anywhere.  They don&#8217;t really contribute, and I&#8217;m starting to get really pissed off.  I&#8217;m considering tuning out until the last season.  Because I&#8217;m reasonably sure not much will happen until then and the last few episodes will be a huge explosion of revelation.</p>
<p>If the producers want to keep their audience, they need to answer some big questions first:  Why are the others at war with the survivors?  Who is Jacob, why is he there and where did he come from? What&#8217;s with the black entity on the island?   Give us real answers, then feel free to open a few more questions.  We want to feel progress. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/lost-the-answers-im-still-lost/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Web Design [and developer] Survey, 2007</title>
		<link>http://blog.mozmonkey.com/2007/the-web-design-and-developer-survey-2007/</link>
		<comments>http://blog.mozmonkey.com/2007/the-web-design-and-developer-survey-2007/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 17:03:52 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/the-web-design-and-developer-survey-2007/</guid>
		<description><![CDATA[From A List Apart:


Designers, developers, project managers. Writers and editors. Information architects and usability specialists. People who make websites have been at it for more than a dozen years, yet almost nothing is known, statistically, about our profession. Who are we? Where do we live? What are our titles, our skills, our educational backgrounds? Where [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://alistapart.com/">A List Apart</a>:</p>
<blockquote>
<p>
Designers, developers, project managers. Writers and editors. Information architects and usability specialists. People who make websites have been at it for more than a dozen years, yet almost nothing is known, statistically, about our profession. Who are we? Where do we live? What are our titles, our skills, our educational backgrounds? Where and with whom do we work? What do we earn? What do we value?
</p>
<p>
It’s time we learned the answers to these and other questions about web design. And nobody is better qualified than the readers of A List Apart to provide the answers. Participate in our first annual <a href="http://alistapart.com/articles/webdesignsurvey" title="The Web Design [and developer] Survey, 2007">survey</a> to increase knowledge of web design and boost respect for the profession. Selected participants, chosen by random drawing, will win one free ticket to An Event Apart event held in the continental U.S.; an Apple 30GB video iPod, an Event Apart jump drive, or a funky A List Apart T-shirt.
</p>
</blockquote>
<p>This <a href="http://alistapart.com/articles/webdesignsurvey" title="The Web Design [and developer] Survey, 2007">survey</a> is so important for our industry.  How often have you wondered where your salary fit within the industry standard?  Are you being paid enough?  How do you rank among your peers?  Of course these questions are <em>taboo</em> to ask of coworkers, but this survey will help break the ice.</p>
<p><a href="http://alistapart.com/articles/webdesignsurvey" title="The Web Design [and developer] Survey, 2007">TAKE THE SURVEY!</a>
</p>
<p class="blockImg">
<a href="http://alistapart.com/articles/webdesignsurvey" title="The Web Design [and developer] Survey, 2007"><img src="http://aneventapart.com/webdesignsurvey/templates/ala/images/i-took-the-2007-survey.gif" alt="I Took the survey" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/the-web-design-and-developer-survey-2007/feed/</wfw:commentRss>
		</item>
		<item>
		<title>I&#8217;m Naked and it feels great&#8230;</title>
		<link>http://blog.mozmonkey.com/2007/im-naked-and-it-feels-great/</link>
		<comments>http://blog.mozmonkey.com/2007/im-naked-and-it-feels-great/#comments</comments>
		<pubDate>Thu, 05 Apr 2007 06:52:16 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Funny]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/im-naked-and-it-feels-great/</guid>
		<description><![CDATA[&#8230;a bit brisk though.
If you&#8217;re wondering why my site is missing it&#8217;s design and appears a bit &#8216;naked&#8217;, it&#8217;s because I&#8217;m participating in CSS Naked Day &#8216;07.  To support web standards this site will be naked on April 5th.
CSS Naked Day is the brainchild of Dustin Diaz:


&#8220;The idea behind this event is to promote [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;a bit brisk though.</p>
<p>If you&#8217;re wondering why my site is missing it&#8217;s design and appears a bit &#8216;naked&#8217;, it&#8217;s because I&#8217;m participating in <a href="http://naked.dustindiaz.com/">CSS Naked Day &#8216;07</a>.  To support web standards this site will be naked on April 5th.</p>
<p><a href="http://naked.dustindiaz.com/">CSS Naked Day</a> is the brainchild of <a href="http://www.dustindiaz.com/">Dustin Diaz</a>:</p>
<blockquote>
<p>
&#8220;The idea behind this event is to promote Web Standards. Plain and simple. This includes proper use of (x)html, semantic markup, a good hierarchy structure, and of course, a good &#8216;ol play on words. It&#8217;s time to show off your &lt;body&gt;.&#8221;
</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/im-naked-and-it-feels-great/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GE Evolution™  Series Locomotive</title>
		<link>http://blog.mozmonkey.com/2007/ge-evolution%e2%84%a2-series-locomotive/</link>
		<comments>http://blog.mozmonkey.com/2007/ge-evolution%e2%84%a2-series-locomotive/#comments</comments>
		<pubDate>Wed, 28 Mar 2007 19:18:11 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/ge-evolution%e2%84%a2-series-locomotive/</guid>
		<description><![CDATA[



I&#8217;m not the type of guy that gets excited about new locomotives, but this is something cool that I caught while browsing through inhabitat.com.


The folks at General Electric have recently put together a series of informative, compelling, and visually stunning videos as part of their Ecomagination “commitment.” Here’s a video about their Evolution Series Locomotive, [...]]]></description>
			<content:encoded><![CDATA[<p class="blockImg">
<a href="http://blog.mozmonkey.com/wp-content/uploads/2007/03/ecomagination.jpg"><br />
<img src='http://blog.mozmonkey.com/wp-content/uploads/2007/03/ecomagination.jpg' alt='GE Ecomagination' width="450" /></a>
</p>
<p>I&#8217;m not the type of guy that gets excited about new locomotives, but this is something cool that I caught while browsing through <a href="http://www.inhabitat.com/">inhabitat.com</a>.</p>
<blockquote>
<p>
The folks at General Electric have recently put together a series of informative, compelling, and visually stunning <a href="http://www.youtube.com/watch?v=u4Ree17E1es">videos</a> as part of their Ecomagination “commitment.” Here’s a video about their <a href="http://ge.ecomagination.com/@v=020220071742@/site/index.html#erie">Evolution Series Locomotive</a>, a lean mean high-performing machine which truly “defies the perception that greater efficiency means less power,” using 189,000 fewer gallons of fuel in its lifetime than its predecessors….
</p>
</blockquote>
<p><a href="http://www.inhabitat.com/2007/03/24/general-electric-ecoimagination/">via inhabitat.com</a></p>
<p>The coolest thing was the numbers on the GE site (located from the <a href="http://ge.ecomagination.com/@v=020220071742@/site/index.html#erie">video</a> page at &#8216;Behind the Story&#8217; > Facts):</p>
<blockquote>
<ul>
<li>
If every locomotive in North America were as clean as GE&#8217;s Evolution&#8230;[it] would be like removing 48 million cars from the road each year.
</li>
<li>
If the largest railroad in North America switch half its locomotive fleet to the GE Evolution, annual carbon dioxide emissions would be reduced by an amount equal to planting more than 31,000 acres of trees.
</li>
<li>
Compared to locomotives built in 2004, a single Evolution locomotive will consume 315,000 fewer gallons of fuel in its lifetime&#8230;
</li>
</ul>
</blockquote>
<p>I always love seeing innovations like these.  We wont stop, or reverse, global warming with a single solution but many smaller steps until we reach the tipping point.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/ge-evolution%e2%84%a2-series-locomotive/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SXSW is halfway over</title>
		<link>http://blog.mozmonkey.com/2007/sxsw-is-halfway-over/</link>
		<comments>http://blog.mozmonkey.com/2007/sxsw-is-halfway-over/#comments</comments>
		<pubDate>Mon, 12 Mar 2007 15:47:22 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/sxsw-is-halfway-over/</guid>
		<description><![CDATA[It&#8217;s 10a on Monday morning, I&#8217;m sitting in the Ajax and Accessibility panel (Ajax Kung Fu Meets Accessibility Feng Shui) with Jeremy Keith and  Derek Featherstone and I just realized that South by Southwest is about halfway over.  The last couple days have been a whirlwind of panels, seminars, networking and almost no [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s 10a on Monday morning, I&#8217;m sitting in the Ajax and Accessibility panel (<a href="http://2007.sxsw.com/interactive/programming/panels/?action=show&#038;id=IAP060108">Ajax Kung Fu Meets Accessibility Feng Shui</a>) with Jeremy Keith and  Derek Featherstone and I just realized that South by Southwest is about halfway over.  The last couple days have been a whirlwind of panels, seminars, networking and almost no sleep &#8212; and it&#8217;s all be worth it.</p>
<p>OK, back to listening to the panel&#8230;</p>
<p class="blockImg"><a href='http://www.flickr.com/photos/18756971@N00/417860271/in/set-72157594580944041/' title='SXSW 07 Badge'><img src='http://blog.mozmonkey.com/wp-content/uploads/2007/03/p1010061.jpg' alt='SXSW 07 Badge' /></a></p>
<p class="blockImg"><a href='http://www.flickr.com/photos/18756971@N00/417857545/in/set-72157594580944041/' title='Hand Sanitizing System'><img src='http://blog.mozmonkey.com/wp-content/uploads/2007/03/p1010044.jpg' alt='Hand Sanitizing System' /></a></p>
<p class="blockImg"><a href='http://www.flickr.com/photos/18756971@N00/417857474/in/set-72157594580944041/' title='Hand Sanitizer'><img src='http://blog.mozmonkey.com/wp-content/uploads/2007/03/p1010043.jpg' alt='Hand Sanitizer' /></a></p>
<p class="blockImg"><a href='http://www.flickr.com/photos/18756971@N00/417860156/in/set-72157594580944041/' title='I Have Clean Hands'><img src='http://blog.mozmonkey.com/wp-content/uploads/2007/03/p1010059.jpg' alt='I Have Clean Hands' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/sxsw-is-halfway-over/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Start of SXSW</title>
		<link>http://blog.mozmonkey.com/2007/the-start-of-sxsw/</link>
		<comments>http://blog.mozmonkey.com/2007/the-start-of-sxsw/#comments</comments>
		<pubDate>Sat, 10 Mar 2007 18:35:39 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/the-start-of-sxsw/</guid>
		<description><![CDATA[This year I decided to find out what this whole SXSW conference thing was all about.  Yesterday I hopped on a plane and when it landed I was surrounded by nerds, geeks and trendy Web 2.0 developers and designers &#8212; I suddenly felt home.  I spent the day talking to and hanging out [...]]]></description>
			<content:encoded><![CDATA[<p>This year I decided to find out what this whole <a href="http://2007.sxsw.com/">SXSW</a> conference <em>thing</em> was all about.  Yesterday I hopped on a plane and when it landed I was surrounded by nerds, geeks and trendy Web 2.0 developers and designers &#8212; I suddenly felt home.  I spent the day talking to and hanging out with the likes of <a href="http://steve.ganz.name/blog/">Steve Ganz</a>, <a href="http://www.kimberlyblessing.com/">Kimberly Blessing</a>, <a href="http://kentbrewster.com/">Kent Brewster</a>, <a href="http://elitizmr.com/wiki/Stephanie_Trimble">Stephanie Trimble</a>, <a href="http://www.dylanschiemann.com/">Dylan Schiemann</a>, Gilnda the Good Witch, among others.</p>
<p class="blockImg"<img src='http://blog.mozmonkey.com/wp-content/uploads/2007/03/p1010001.jpg' alt='SXSW Registration' />
<p>Right now I&#8217;m in the &#8220;How to Bluff Your Way in Web 2.0&#8243; hosted by the very funny Jeremy Keith and Andy Budd.  It is a 90 minute mockery of Ajax, Web2.0 and important site design.  Half the people in the room have their laptops open and are playing Buzzword Bingo &#8212; 2 people have won so far.</p>
<p class="blockImg"<img src='http://blog.mozmonkey.com/wp-content/uploads/2007/03/p1010024.jpg' alt='Buffalo Billards' />
<p class="blockImg"<img src='http://blog.mozmonkey.com/wp-content/uploads/2007/03/p1010013.jpg' alt='Sunset in Austin' />
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/the-start-of-sxsw/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ClassAnim &amp; HoverHijax: Keeping Presentation out of Your JavaScript</title>
		<link>http://blog.mozmonkey.com/2007/classanim-hoverhijax-keeping-presentation-out-of-your-javascript/</link>
		<comments>http://blog.mozmonkey.com/2007/classanim-hoverhijax-keeping-presentation-out-of-your-javascript/#comments</comments>
		<pubDate>Tue, 20 Feb 2007 21:44:23 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Code]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/classanim-hoverhijax-keeping-presentation-out-of-your-javascript/</guid>
		<description><![CDATA[Ever since the dawn of CSS and compliant browsers web developers have been squeezing the presentation layer out of HTML and into external CSS files.  It has become a web development battle cry and having a tableless website was worn as your badge of honor.  To the web dev elite, having &#60;br&#62; tags [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since the dawn of CSS and compliant browsers web developers have been squeezing the presentation layer out of HTML and into external CSS files.  It has become a web development battle cry and having a tableless website was worn as your badge of honor.  To the web dev elite, having &lt;br&gt; tags in your HTML is a sin punishable by death (or at least severe laughing and poking).</p>
<p>Now we are moving in to the so-called &#8216;Web 2.0&#8242; era.  The time of shiny websites with page refreshes cut down to a select few actions.  Animations and special effects compliment the content as it fades in and out of view.  Libraries like <a href="http://developer.yahoo.com/yui/">YUI</a>, <a href="http://www.dojotoolkit.org/">Dojo</a> and <a href="http://www.prototypejs.org/">Prototype</a> are making these things increasingly easy and well supported.  But with all this, I feel we&#8217;re forgetting something.  Where&#8217;d the presentation layer go?</p>
<p>When you&#8217;re animating a rollover or fading some colors do you stop and thing what you&#8217;re doing?  You&#8217;re putting the colors, dimensions and effects into your JavaScript!  The presentation layer that you&#8217;ve worked so hard to externalize is leaking into your JavaScript code.  This is a slippery slope that we have to prevent now.  The presentation layer should remain in the CSS, markup in the HTML and logic in the JavaScript.  If you want to change the colors or sizes the elements are morphed into, you should be making those changes in CSS.</p>
<p>This brings me to my solution.  I present to you an extension to the <a href="http://developer.yahoo.com/yui/animation/">YUI animation library</a> that will perform your cool animations from the styles defined in your CSS.  I call it ClassAnim.</p>
<h3>How it works</h3>
<ol>
<li>ClassAnim starts by reading the styles from the base element.</li>
<li>Then it quickly applies the new CSS class to it, reads the new styles and removes the class.  This happens quicker than the user can notice.</li>
<li>Now it compares the styles from both versions, extracts the differences that can be animated, and invokes the animation.</li>
</ol>
<p>With ClassAnim, when you want to make a color or dimensional change you don&#8217;t have to go searching through your JavaScript, you make the change straight in the CSS &#8212; the way it was meant to be.</p>
<p><a href="/pages/examples/ClassAnim/1/" title="See the ClassAnim demo">See the demo</a><br />
<span class="note">(Please note: This API is still beta)</span></p>
<h3>Link Rollovers (HoverHijax)</h3>
<p>Here&#8217;s a simple implementation for rollovers.  You&#8217;ll notice that all the links on my site have a fading hover effect on them (try mousing over one).  This uses a simplified version of ClassAnim that I call HoverHijax.  It only animates colors and does it on mouseover and mouseout.  My original prototype would actually honor the :hover pseudo class, but good &#8216;ol Internet Explorer wasn&#8217;t allowing me to get to those styles through JavaScript.  The current implementation adds a &#8216;hover&#8217; class to all links when they are being moused over.</p>
<p><a href="/pages/examples/HoverHijax/1/" title="See the HoverHijax demo">See the demo</a><br />
<span class="note">(Please note: This API is still beta)</span></p>
<p>The best thing with HoverHijax is that it follows the <a href="http://en.wikipedia.org/wiki/Progressive_Enhancement">Progressive Enhancement</a> (or <a href="http://domscripting.com/blog/display/41">Hijax</a>) strategy and can easily work with or without JavaScript <strong>as long as</strong> you use the &#8216;hover&#8217; class along with a &#8216;:hover&#8217; pseudo class.  The only difference is that without JavaScript it wont have the cool fade effect.</p>
<pre class="code">
a:hover, a.hover {

   color: #000;

}</pre>
<h3>Where to Download</h3>
<p>You can download these new &#8216;experimental&#8217; APIs from my <a href="http://src.mozmonkey.com/JavaScript/APIs/">subversion repository</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/classanim-hoverhijax-keeping-presentation-out-of-your-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Browser Wars Episode II</title>
		<link>http://blog.mozmonkey.com/2007/browser-war-episode-ii/</link>
		<comments>http://blog.mozmonkey.com/2007/browser-war-episode-ii/#comments</comments>
		<pubDate>Tue, 20 Feb 2007 18:29:03 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/browser-war-episode-ii/</guid>
		<description><![CDATA[Looks like Yahoo is getting pretty active on hosting exciting web development events!  In their latest offering they will be hosting &#8220;Browser War Episode II&#8221; where the &#8220;Jedi Masters&#8221; behind Internet Explorer, Firefox and Opera will converge on a single floor to talk about DOM scripting &#8212; and perhaps we&#8217;ll even see a death [...]]]></description>
			<content:encoded><![CDATA[<p>Looks like Yahoo is getting pretty active on hosting exciting web development events!  In their latest offering they will be hosting &#8220;<a href="http://blog.mozmonkey.com/wp-admin/%3Cbr%3E%3C/a%3Ehttp://www.svwebbuilder.com/page/2%2F28%2F07+Browser+War+Episode+II">Browser War Episode II</a>&#8221; where the &#8220;Jedi Masters&#8221; behind Internet Explorer, Firefox and Opera will converge on a single floor to talk about DOM scripting &#8212; and perhaps we&#8217;ll even see a death match.  OK, that&#8217;s my wishful thinking creeping into my blog again.  This will all be moderated by the very smart Douglas Crockford.</p>
<p>This should be a very exciting and insightful night!<br />
<a href="http://www.svwebbuilder.com/page/2%2F28%2F07+Browser+War+Episode+II"><br />
http://www.svwebbuilder.com/page/2%2F28%2F07+Browser+War+Episode+II</a></p>
<dl>
<dt>What: </dt>
<dt>
</dt>
<dd>Browser Wars: Episode II Attack of the DOMs</dd>
<dt>When:</dt>
<dd>Feb 28, 2007 Wed 6:00pm</dd>
<dt>Where:</dt>
<dd>Yahoo Building C, 701 First Avenue, Sunnyvale , California 94089</dd>
<dt>Who:</dt>
<dd>Douglas Crockford, Architect at Yahoo &amp; Founder of JSON (Moderator &amp; Host)<br />
Chris Wilson, Group Program Manager of the Internet Explorer Platform at Microsoft<br />
Mike Shaver, Director of Ecosystem Development at Mozilla Corporation<br />
Håkon Wium Lie, CTO at Opera &amp; Founder of CSS</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/browser-war-episode-ii/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web 2.0 &#8230; The Machine is Us/ing Us</title>
		<link>http://blog.mozmonkey.com/2007/web-20-the-machine-is-using-us/</link>
		<comments>http://blog.mozmonkey.com/2007/web-20-the-machine-is-using-us/#comments</comments>
		<pubDate>Wed, 14 Feb 2007 19:19:22 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Insipiring]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/web-20-the-machine-is-using-us/</guid>
		<description><![CDATA[I just saw this video and it&#8217;s a really inspiring visualization of the web, semantic HTML and how it has connected the world.  Makes me want to go out and compile some mashups!  Enjoy.


&#8220;We are the web&#8230;teach the machine&#8221;
]]></description>
			<content:encoded><![CDATA[<p>I just saw this video and it&#8217;s a really inspiring visualization of the web, semantic HTML and how it has connected the world.  Makes me want to go out and compile some mashups!  Enjoy.</p>
<p><object height="350" width="425" type="application/x-shockwave-flash" data="http://www.youtube.com/v/6gmP4nk0EOE"><param name="movie" value="http://www.youtube.com/v/6gmP4nk0EOE"></param><param name="wmode" value="transparent"></param>
</object></p>
<p>&#8220;We are the web&#8230;teach the machine&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/web-20-the-machine-is-using-us/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Site Design &#8212; Built with Web 2.0 ;)</title>
		<link>http://blog.mozmonkey.com/2007/new-site-design-built-with-web-20/</link>
		<comments>http://blog.mozmonkey.com/2007/new-site-design-built-with-web-20/#comments</comments>
		<pubDate>Mon, 12 Feb 2007 21:29:55 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/new-site-design-built-with-web-20/</guid>
		<description><![CDATA[Last weekend I had some spare time, a picture and a bit of inspiration and decided to redesign my website.  The reason it has taken me so long to create my own design is that, simply put, I&#8217;m not a designer.  I usually don&#8217;t know where to begin and how to get the [...]]]></description>
			<content:encoded><![CDATA[<p>Last weekend I had some spare time, a picture and a bit of inspiration and decided to redesign my website.  The reason it has taken me so long to create my own design is that, simply put, I&#8217;m not a designer.  I usually don&#8217;t know where to begin and how to get the design to flow correctly.   I mean, I know good design and can even sometimes spit out things that are viewable, but I&#8217;m no designer.</p>
<p>So where did I start?  &lt;Leans back in chair&gt; It all started a couple weeks ago when my Dad and I decided to go hiking up at Sanborn Park.  Originally we were going to go Jeeping, but it had just rained the night before and his Jeep doesn&#8217;t have a winch yet, so we went hiking instead.  The conditions were perfect and I was able to snap a few pretty <a href="http://www.flickr.com/photos/18756971@N00/tags/sanbornpark/">good pictures</a>.  Out of the set, I was really drawn to the <a href="http://www.flickr.com/photos/18756971@N00/383053181/">misty trail image</a>.  I liked it so much I decided to play with it in <a href="http://www.gimp.org/">GIMP</a> and afterwards decided to design my entire site around it.  Once I had the picture, the rest of the site practically designed itself.</p>
<p>So browse around and let me know how you like it.  I&#8217;ve also added some cool new Web 2.0 features:</p>
<ul>
<li>All links have a new animated fading rollover effect pulled in from the CSS and animated with YUI.
<ul>
<li>This is part of an API I&#8217;m building in order to keep presentatin separate from the JavaScript.  More on this soon!</li>
</ul>
</li>
<li>The tagline text fades into view when the page loads.  I plan to add more random statements over time &#8212; any suggestions?</li>
<li>Comment submission is now done with XHR.  I plan to make this more robust in the future.</li>
<li>And of course, shiny title bars.</li>
</ul>
<p>The fading effects and XHR comments were all built with the <a href="http://developer.yahoo.com/yui/">YUI libraries</a>.</p>
<p class="blockImg"> <img src="http://blog.mozmonkey.com/wp-content/uploads/2007/02/6891.jpg" alt="Misty Trail - Sanborn Park" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/new-site-design-built-with-web-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The YUI&#8217;s First Year Party</title>
		<link>http://blog.mozmonkey.com/2007/the-yuis-first-year-party/</link>
		<comments>http://blog.mozmonkey.com/2007/the-yuis-first-year-party/#comments</comments>
		<pubDate>Sat, 10 Feb 2007 00:23:08 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/the-yuis-first-year-party/</guid>
		<description><![CDATA[ If you haven&#8217;t heard yet, the YUI team has put out an open invitation to their first year party.
Quoting Nate Koechley from the YUI blog:
 This month the YUI Library turns one year old. When we started last year I wrote that I was “thrilled to have you with us.” That’s never been truer [...]]]></description>
			<content:encoded><![CDATA[<p> If you haven&#8217;t heard yet, the <a href="http://developer.yahoo.com/yui">YUI</a> team has put out an open invitation to their first year party.</p>
<p>Quoting Nate Koechley from the YUI blog:</p>
<blockquote><p> This month the YUI Library turns one year old. When we started last year I wrote that I was “thrilled to have you with us.” That’s never been truer than it is today. We owe an outstanding first year to you. Libraries aren’t achievements themselves — it’s what people do with them that’s exceptional. We love everything you’re doing, so we’re throwing a party to thank you, our amazing community.</p>
<p>Join us Thursday, February 22nd, from 5:30 to 8:30 PM, at Yahoo! HQ in Sunnyvale, California. Visit Upcoming.org for details and to RSVP. 300 people max, so RSVP early!</p></blockquote>
<p>You can bet that I&#8217;ll be there along with many other WebDevs from PayPal.  The guest list is up to 197, so <a href="http://upcoming.org/event/148641">RSVP now!</a></p>
<p class="blockImg"> <img src="http://blog.mozmonkey.com/wp-content/uploads/2006/10/beer_squared.thumbnail.jpg" alt="Czech Beer" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/the-yuis-first-year-party/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Version of OpenDownload</title>
		<link>http://blog.mozmonkey.com/2007/new-version-of-opendownload/</link>
		<comments>http://blog.mozmonkey.com/2007/new-version-of-opendownload/#comments</comments>
		<pubDate>Fri, 26 Jan 2007 05:19:08 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2007/new-version-of-opendownload/</guid>
		<description><![CDATA[I finally got around to updating the OpenDownload extension and it&#8217;s now better than ever.  Firefox 2.0 now hides the &#8220;Open With&#8230;&#8221; and &#8220;Save&#8221; options when downloading certain file types.  When this happens now OpenDownload adds a &#8220;Run&#8221; button to the dialog.  See screenshot below:

I also fixed the bug that would, sometimes, [...]]]></description>
			<content:encoded><![CDATA[<p>I finally got around to updating the <a href="http://mozmonkey.com/" title="Download OpenDownload from Mozmonkey.com">OpenDownload</a> extension and it&#8217;s now better than ever.  Firefox 2.0 now hides the &#8220;Open With&#8230;&#8221; and &#8220;Save&#8221; options when downloading certain file types.  When this happens now OpenDownload adds a &#8220;Run&#8221; button to the dialog.  See screenshot below:</p>
<p class="blockImg"><img src="http://blog.mozmonkey.com/wp-content/uploads/2007/01/opendownload.gif" alt="OpenDownload screenshot" id="image27" /></p>
<p>I also fixed the bug that would, sometimes, execute the file multiple times.</p>
<p>I&#8217;ll be trying to find time to update my other extensions.  Recently I&#8217;ve changed jobs and am working on a couple other open source projects.  I can&#8217;t go into much detail right now about the open source projects I&#8217;m working on, but expect to hear more soon.</p>
<p>I&#8217;ve been at PayPal for about a month now and am really enjoying it.  They hired me into their web development platform team as the JavaScript specialist.  We&#8217;ve adopted the <a href="http://developer.yahoo.com/yui/" title="The Yahoo User Interface JavaScript Libraries">YUI libraries</a> and they are working great to conserve time and provide really customized functionality.  Will be sharing more soon.</p>
<p>Speaking of PayPal&#8230;</p>
<form method="post" action="https://www.paypal.com/cgi-bin/webscr">
<p>
<input value="_xclick" name="cmd" type="hidden" />
<input value="moz_jg@yahoo.com" name="business" type="hidden" />
<input value="The Poor Extension Developer Fund" name="item_name" type="hidden" />
<input value="2" name="no_shipping" type="hidden" />
<input value="1" name="no_note" type="hidden" />
<input value="USD" name="currency_code" type="hidden" />
<input value="0" name="tax" type="hidden" />
<input value="US" name="lc" type="hidden" />
<input value="PP-DonationsBF" name="bn" type="hidden" /></p>
<p class="blockImg">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" /></p>
</form>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2007/new-version-of-opendownload/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Updates for Firefox 2.0</title>
		<link>http://blog.mozmonkey.com/2006/updates-for-firefox-20/</link>
		<comments>http://blog.mozmonkey.com/2006/updates-for-firefox-20/#comments</comments>
		<pubDate>Tue, 28 Nov 2006 05:54:48 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/updates-for-firefox-20/</guid>
		<description><![CDATA[Good news everybody (cue up Professor Farnsworth), I&#8217;ve finally got my server back up to 99% and have upgraded all the extensions for Firefox 2.0.  You can go to my extensions list (http://mozmonkey.com) and download the latest versions there (NOTE: I haven&#8217;t updated the version numbers listed on the site yet).  I&#8217;m also [...]]]></description>
			<content:encoded><![CDATA[<p>Good news everybody (cue up Professor Farnsworth), I&#8217;ve finally got my server back up to 99% and have upgraded all the extensions for Firefox 2.0.  You can go to my extensions list (<a href="http://mozmonkey.com" title="The BEST Firefox extensions in the world ;o)">http://mozmonkey.com</a>) and download the latest versions there (NOTE: I haven&#8217;t updated the version numbers listed on the site yet).  I&#8217;m also updating my update.rdf and submitting the extensions to addons right now.</p>
<p>Even better is that all the extensions have now been committed to my shiny new Subversion source control that&#8217;ll I&#8217;ll open to the public sometime next week.  When I do I&#8217;ll also release and article on how to download and painlessly upgrade extension version numbers with my handy build scripts.</p>
<p>I hope you enjoy the extensions.</p>
<form method="post" action="https://www.paypal.com/cgi-bin/webscr">
<p>
<input value="_xclick" name="cmd" type="hidden" />
<input value="moz_jg@yahoo.com" name="business" type="hidden" />
<input value="The Poor Extension Developer Fund" name="item_name" type="hidden" />
<input value="2" name="no_shipping" type="hidden" />
<input value="1" name="no_note" type="hidden" />
<input value="USD" name="currency_code" type="hidden" />
<input value="0" name="tax" type="hidden" />
<input value="US" name="lc" type="hidden" />
<input value="PP-DonationsBF" name="bn" type="hidden" /></p>
<p class="blockImg">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" /></p>
</form>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/updates-for-firefox-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Extensions for FF2.0 and Server Update</title>
		<link>http://blog.mozmonkey.com/2006/extensions-for-ff20-and-server-update/</link>
		<comments>http://blog.mozmonkey.com/2006/extensions-for-ff20-and-server-update/#comments</comments>
		<pubDate>Mon, 13 Nov 2006 22:54:56 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/extensions-for-ff20-and-server-update/</guid>
		<description><![CDATA[I just received a response from http://flock.com, who are the friendly folks that provide my web hosting, and they are trying to resolve my server problems now.  I&#8217;ll send another update out shortly.  Sorry for the delay and thank you for your patients.
]]></description>
			<content:encoded><![CDATA[<p>I just received a response from http://flock.com, who are the friendly folks that provide my web hosting, and they are trying to resolve my server problems now.  I&#8217;ll send another update out shortly.  Sorry for the delay and thank you for your patients.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/extensions-for-ff20-and-server-update/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Delay in Firefox 2.0 Extensions Release</title>
		<link>http://blog.mozmonkey.com/2006/delay-in-firefox-20-extensions-release/</link>
		<comments>http://blog.mozmonkey.com/2006/delay-in-firefox-20-extensions-release/#comments</comments>
		<pubDate>Mon, 06 Nov 2006 18:26:33 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/delay-in-firefox-20-extensions-release/</guid>
		<description><![CDATA[I know many of you are still patiently waiting for my extensions to be compatible with Firefox 2.0, but I continue to have severe web server issues.  Somehow the server that hosts my extension site has come down and I cannot access it.  I&#8217;m trying to get the hosting company to reboot it [...]]]></description>
			<content:encoded><![CDATA[<p>I know many of you are still patiently waiting for my extensions to be compatible with Firefox 2.0, but I continue to have severe web server issues.  Somehow the server that hosts my extension site has come down and I cannot access it.  I&#8217;m trying to get the hosting company to reboot it in safe mode right now so I can get to my code and give all of you upgrades to the extensions.</p>
<p>In the meantime, if any of you have hacked the source code and upgraded my extensions, please post a link to them here.</p>
<p>Again, sorry for the delay and thanks for the continued support.  You&#8217;ll get updates soon.</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<p><input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="business" value="moz_jg@yahoo.com" />
<input type="hidden" name="item_name" value="The Poor Extension Developer Fund" />
<input type="hidden" name="no_shipping" value="2" />
<input type="hidden" name="no_note" value="1" />
<input type="hidden" name="currency_code" value="USD" />
<input type="hidden" name="tax" value="0" />
<input type="hidden" name="lc" value="US" />
<input type="hidden" name="bn" value="PP-DonationsBF" /></p>
<p class="blockImg">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" /></p>
</form>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/delay-in-firefox-20-extensions-release/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Extension Upgrades for Firefox 2.0</title>
		<link>http://blog.mozmonkey.com/2006/extension-upgrades-for-firefox-20/</link>
		<comments>http://blog.mozmonkey.com/2006/extension-upgrades-for-firefox-20/#comments</comments>
		<pubDate>Sun, 29 Oct 2006 06:35:35 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/extension-upgrades-for-firefox-20/</guid>
		<description><![CDATA[I&#8217;ve been getting loads of emails everyday from people requesting, or demanding in some cases, that I upgrade my extensions to be compatible for Firefox 2.0.  Be assured that I am working on this.  Right now I&#8217;m trying to get my server back up to 100% after it had been hacked twice.  I expect to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been getting loads of emails everyday from people requesting, or demanding in some cases, that I upgrade my extensions to be compatible for Firefox 2.0.  Be assured that I am working on this.  Right now I&#8217;m trying to get my server back up to 100% after it had been hacked twice.  I expect to be releasing updates next week &#8212; I appreciate your patients.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/extension-upgrades-for-firefox-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>So White &amp; Nerdy</title>
		<link>http://blog.mozmonkey.com/2006/so-white-nerdy/</link>
		<comments>http://blog.mozmonkey.com/2006/so-white-nerdy/#comments</comments>
		<pubDate>Thu, 19 Oct 2006 01:02:46 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Funny]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/so-white-nerdy/</guid>
		<description><![CDATA[I just saw the new Weird Al video, and it worries me that I can relate.


]]></description>
			<content:encoded><![CDATA[<p>I just saw the new Weird Al video, and it worries me that I can relate.</p>
<div style="text-align: center"><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/Mlsiw5lmEzw"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/Mlsiw5lmEzw" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></div>
<div style="text-align: center"><img id="image20" alt="Czech Beer" src="http://blog.mozmonkey.com/wp-content/uploads/2006/10/beer_squared.thumbnail.jpg" /></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/so-white-nerdy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>This Site Was Hacked &#8212; And so the fun begins&#8230;</title>
		<link>http://blog.mozmonkey.com/2006/damn-hackers/</link>
		<comments>http://blog.mozmonkey.com/2006/damn-hackers/#comments</comments>
		<pubDate>Thu, 19 Oct 2006 00:55:37 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/damn-hackers/</guid>
		<description><![CDATA[Last week this site was hacked into and brought down.  I couldn&#8217;t access it through SSH or anything so I had to reboot it into safe-mode.  The good news is none of the data was compromised and I was able to back everything up safely, the bad news is I had to reimage [...]]]></description>
			<content:encoded><![CDATA[<p>Last week this site was hacked into and brought down.  I couldn&#8217;t access it through SSH or anything so I had to reboot it into safe-mode.  The good news is none of the data was compromised and I was able to back everything up safely, the bad news is I had to reimage the server in case a root kit was installed.  Now I have to go through the process of reinstalling EVERYTHING!  As you can see I&#8217;ve gotten the blog back up but I still have to reinstall and configure SVN, ViewVC, Trac, Webmin among other things.  Webmin and SVN are usually straight forward, but I remember the headaches I had trying to get ViewVC and Trac to work.  Wish me luck and a lot of coffee.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/damn-hackers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Farewell Jimmy B.</title>
		<link>http://blog.mozmonkey.com/2006/farewell-jimmy-b/</link>
		<comments>http://blog.mozmonkey.com/2006/farewell-jimmy-b/#comments</comments>
		<pubDate>Thu, 05 Oct 2006 21:25:14 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/farewell-jimmy-b/</guid>
		<description><![CDATA[Since Jimmy is transfering from the Sunnyvale Yahoo! office to the one in England, we had to send him off properly&#8230;get him drunk and take pictures of him dancing on the pole.  We met up at the Buddha Lounge in Mountain View at 6p, and the rest is best described in pictures:

http://www.flickr.com/photos/18756971@N00/sets/72157594314275342/
]]></description>
			<content:encoded><![CDATA[<p>Since Jimmy is transfering from the Sunnyvale Yahoo! office to the one in England, we had to send him off properly&#8230;get him drunk and take pictures of him dancing on the pole.  We met up at the Buddha Lounge in Mountain View at 6p, and the rest is best described in pictures:</p>
<div style="text-align: center"><a href="http://www.flickr.com/photos/18756971@N00/sets/72157594314275342/"><img alt="Jimmy on the Pole" title="Jimmy on the Pole" src="http://static.flickr.com/104/261626864_c656407ade_m.jpg" /></a></div>
<div align="center"><a href="http://www.flickr.com/photos/18756971@N00/sets/72157594314275342/">http://www.flickr.com/photos/18756971@N00/sets/72157594314275342/</a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/farewell-jimmy-b/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ways to Prevent Shooting Yourself in The Foot While Programming</title>
		<link>http://blog.mozmonkey.com/2006/ways-to-prevent-shooting-yourself-in-the-foot-while-programming/</link>
		<comments>http://blog.mozmonkey.com/2006/ways-to-prevent-shooting-yourself-in-the-foot-while-programming/#comments</comments>
		<pubDate>Wed, 04 Oct 2006 18:45:08 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Funny]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/ways-to-prevent-shooting-yourself-in-the-foot-while-programming/</guid>
		<description><![CDATA[Well, there really isn&#8217;t any way to prevent shooting yourself in the foot while programming but this funny article explains how to do it in almost every language.
http://www.fullduplex.org/humor/2006/10/how-to-shoot-yourself-in-the-foot-in-any-programming-language/ (via digg)
I especially like the UNIX example.
]]></description>
			<content:encoded><![CDATA[<p>Well, there really isn&#8217;t any way to prevent shooting yourself in the foot while programming but this funny article explains how to do it in almost every language.</p>
<p><a href="http://www.fullduplex.org/humor/2006/10/how-to-shoot-yourself-in-the-foot-in-any-programming-language/">http://www.fullduplex.org/humor/2006/10/how-to-shoot-yourself-in-the-foot-in-any-programming-language/</a> (via <a title="digg" href="http://digg.com/programming/How_to_Shoot_Yourself_in_the_Foot_in_Any_Programming_Language">digg</a>)<br />
I especially like the UNIX example.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/ways-to-prevent-shooting-yourself-in-the-foot-while-programming/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Optimizing WordPress for High Volume Traffic</title>
		<link>http://blog.mozmonkey.com/2006/optimizing-wordpress-for-high-volume-traffic/</link>
		<comments>http://blog.mozmonkey.com/2006/optimizing-wordpress-for-high-volume-traffic/#comments</comments>
		<pubDate>Mon, 01 May 2006 21:37:02 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Technical]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/2006/optimizing-wordpress-for-high-volume-traffic/</guid>
		<description><![CDATA[Last week my keyboard prank post was promoted to the front page of Digg and within minutes my WordPress blog was down for the count.  Being slightly embarrassed I tried get my site back online and along the way found several things you can do to prevent this from happening to you!
NOTE:
I do not [...]]]></description>
			<content:encoded><![CDATA[<p>Last week my <a href="http://blog.mozmonkey.com/2006/april_fools_hack/">keyboard prank</a> post was promoted to the front page of Digg and within minutes my WordPress blog was down for the count.  Being slightly embarrassed I tried get my site back online and along the way found several things you can do to prevent this from happening to you!<span id="more-16"></span></p>
<h3>NOTE:</h3>
<p>I do not claim to be an expert on this subject.  If you have more insight or suggestions please post a comment here.</p>
<h3>MySql</h3>
<p>Most times it&#8217;s the MySql database that&#8217;s the problem.  All your blog entries are stored, managed and retrieved from a MySql database, and, by default MySql doesn&#8217;t allow more than 100 connections at a given time.  So if you&#8217;re getting pounded by the entire world, most of your viewers will see an error page</p>
<p>Luckily there is an easy solution (if you manage your own server): just increase the number of connections MySql supports.  Open your MySql configuration file, in my case it was at /etc/my.cnf, and set &#8216;max_connections&#8217; to any number you want; I set it to 250.  Now don&#8217;t forget to restart MySql after this change.</p>
<h3>WP-Cache</h3>
<p>MySql is only part of the issue &#8212; why abuse your database server if you don&#8217;t have to?  <a href="http://mnm.uib.es/gallir/wp-cache-2/">WP-Cache</a> is a WordPress plugin that caches your posts to static HTML files to save your database and server cycles.</p>
<p>This saves your MySql server by keeping the number of connections to a minimum.  Also since WordPress is written in PHP, which is an interpreted language that must be parsed each time a page is requested, caching the pages as HTML saves your web server cycles and speeds up the load time for your viewers.<br />
By default the cache is used for an hour until it&#8217;s expired and refreshed with new content.   Since I wanted to view the recent comments quicker than that I changed the expiration time to 4 minutes (or 240 seconds).  To change this click Options > WP-Cache and change the expire time value and then click &#8216;Change Expiration&#8217;.  Be sure to read the WP-Cache instructions on how to install and configure it.</p>
<h3>Mirroring</h3>
<p>These steps are all fine and good, but what if your server can&#8217;t handle the traffic or you don&#8217;t have the administrative rights to make the necessary optimizations?  At this point you&#8217;ll want to mirror blog post <em>before</em> it gets submitted to Digg or Slashdot.  The reason I stress this is if you wait until your site is down, it&#8217;s too late.</p>
<p>Mirroring your content only takes a single click with the <a href="http://www.coralcdn.org/">Coral Content Distribution Network</a>.  Coral works like a P2P network and as soon as your link is submitted on their website, it&#8217;s mirrored around the world across 260+ servers.  To start, go to their <a href="http://www.coralcdn.org/">website</a> and enter your URL in the form (under Using Coral) and click &#8216;Go&#8217;.  This will open a new window and show you your mirrored page (this may take a minute).</p>
<p>It&#8217;s important to note that Coral does have a bandwidth limit on the URLs it mirrors, so it might be a good idea to create a couple more mirrors through Coral.  You should be able to do this by adding a unique parameter to your URL; I did it this way:</p>
<ol>
<li>http://blog.mozmonkey.com.nyud.net:8090/2006/april_fools_hack/</li>
<li>http://blog.mozmonkey.com.nyud.net:8090/2006/april_fools_hack/<strong>?mirror2</strong></li>
<li>http://blog.mozmonkey.com.nyud.net:8090/2006/april_fools_hack/<strong>?mirror3<br />
</strong></li>
</ol>
<p>Now, when you post to Digg or another high traffic website you can include these mirror URLs as the one of the first comments.</p>
<h3>Apache</h3>
<p>If you&#8217;re running your site through <a href="http://httpd.apache.org/">Apache</a> you probably wont need to tweak it much &#8212; the only thing I did was set MaxClients to the max (256). For more information about Apache optimizations checkout the <a href="http://httpd.apache.org/docs/1.3/misc/perf-tuning.html">Apache Performance Notes</a>.  This article has some simple changes you can make to help squeeze the most out of Apache.</p>
<h3>Advanced Options</h3>
<p>If you want to know more advanced optimizations checkout <a href="http://asymptomatic.net/2006/05/02/2327/high-performance-wordpress/">High Performance WordPress</a>.  This article goes into great detail about how WordPress works and many more things you can do to optimize it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/optimizing-wordpress-for-high-volume-traffic/feed/</wfw:commentRss>
		</item>
		<item>
		<title>April Fools Hack - The Singing Keyboard</title>
		<link>http://blog.mozmonkey.com/2006/april_fools_hack/</link>
		<comments>http://blog.mozmonkey.com/2006/april_fools_hack/#comments</comments>
		<pubDate>Fri, 28 Apr 2006 02:15:01 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Funny]]></category>

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

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=14</guid>
		<description><![CDATA[

This year I decided to go all out for April Fools and do something that could be duplicated across multiple computers without permanent damage &#8212; and so the singing keyboard hack was born.
Update

If you like this project, please vote for it on instructables.com.

Concept
Take the musical element from a musical greeting card and connect it to [...]]]></description>
			<content:encoded><![CDATA[<p class="blockImg">
<img src="http://blog.mozmonkey.com/images/april_fools_06/intro.jpg" /></p>
<p>This year I decided to go all out for April Fools and do something that could be duplicated across multiple computers without permanent damage &#8212; and so the singing keyboard hack was born.</p>
<p><strong>Update</strong></p>
<blockquote><p>
If you like this project, please vote for it on <a href="http://www.instructables.com/id/The-Singing-Keyboard-Prank/">instructables.com</a>.
</p></blockquote>
<p><strong>Concept</strong></p>
<p>Take the musical element from a musical greeting card and connect it to the caps lock LED on the user&#8217;s keyboard. Each time the victim presses caps lock the music plays (and quite loud too).  This is a great sleeping prank&#8230;It might be found on the first day, or weeks from implementation.  It&#8217;s the perfect prank.<br />
<span id="more-14"></span></p>
<p><strong>Why Caps?</strong></p>
<p>True, most people don&#8217;t use caps lock very often, if ever, but unfortunately not many other keys are linked to an LED.  Also most keys are only pressed momentarily, which would require a solid-state bounceless switch; which I had trouble getting to work.  The num lock LED turns on and off several times during boot time, so that&#8217;s out and only leaves the caps lock as a viable solution.</p>
<p><strong>Disclaimer</strong></p>
<p>If you decide to do this prank understand that it could be a <em>career-limiting move</em> if you do it to your boss and/or somebody without a sense of humor.  I would also recommend to first experiment with a dummy keyboard that you don&#8217;t mind destroying.</p>
<p>I will not be held responsible for your problems. ;o)</p>
<p><strong>Setup</strong></p>
<p>To start you&#8217;ll need, of course, several musical greeting cards.  Hallmark stores usually have a section dedicated to these cards.  You&#8217;ll also need these tools and supplies:</p>
<div style="text-align: center"><a target="_blank" href="http://flickr.com/photos/18756971@N00/136156059/"><img alt="Tools &#038; Supplies" title="Tools &#038; Supplies" src="http://blog.mozmonkey.com/images/april_fools_06/setup.jpg" /></a></div>
<ol>
<li>Screw drivers (Phillips and a wide slotted)</li>
<li>Needle nose pliers</li>
<li>Soldering iron + solder</li>
<li>Thin wire (22 gauge works well)</li>
<li>NPN transistor</li>
<li>Electrical tape</li>
</ol>
<p>I went out and bought a CoolHeat soldering for this project due to its great portability.  If you get one of these be sure to purchase at least 2 replacement tips as they&#8217;re pretty brittle and <em>WILL</em> break during normal use.</p>
<p><strong>Getting Down to Business</strong></p>
<p><strong>1) Getting the music.</strong> The first thing you want to do is remove the musical element from the greeting card and cut off the excess paper.</p>
<p align="center">
<div style="text-align: center"><a href="http://flickr.com/photos/18756971@N00/136156075/"><img title="Cutting out the musical element" alt="Cutting out the musical element" src="http://blog.mozmonkey.com/images/april_fools_06/music_card.jpg" /></a><a href="http://flickr.com/photos/18756971@N00/136156078/"><img title="Musical Element" alt="Musical Element" src="http://blog.mozmonkey.com/images/april_fools_06/music_removed.jpg" /></a></div>
<p><strong>2)</strong>  <strong>Switch work.</strong> We now need to replace the metal switch with your transistor.  First, let me define the parts of the switch I&#8217;ll be talking about.  The bendable metal part of the switch I&#8217;m calling the metal tab, and thing it connects to, or touches, I&#8217;m calling the switch contact area.</p>
<p>Take the transistor and bend the center pin back slightly.  Then slide the transistor onto the musical element switch area with the outer pins on top and the center pin on the bottom (see picture below &#038; a better <a href="http://flickr.com/photos/18756971@N00/136156087">picture with notes here</a>).  Now make sure the left pin is resting on top of the switch tab and the right pin on the contact area.</p>
<p align="center"><a href="http://flickr.com/photos/18756971@N00/136156087"><img alt="Adding the transistor" title="Adding the transistor" src="http://blog.mozmonkey.com/images/april_fools_06/transistor_setup_1.jpg" /></a></p>
<p align="center">
<p>Using your needle nose pliers bend the metal switch tab back over the transistor pin and make sure it holds it tightly.  Now solder the other pin to the switch contact area.</p>
<p align="center"><a href="http://flickr.com/photos/18756971@N00/136156094/in/photostream/"><img alt="Solder in Transistor" title="Solder in Transistor" src="http://blog.mozmonkey.com/images/april_fools_06/transistor_setup_2.jpg" /></a></p>
<p><strong>3)</strong> <strong>Lets wire it up.</strong>  Cut two lengths of wire about 12 - 15 inches long.  Solder one to the switch contact area (see black wire in picture above) and other to the center pin of the transistor (picture below).</p>
<p align="center"><a href="http://flickr.com/photos/18756971@N00/136156096/in/photostream/"><img title="Solder center pin" alt="Solder center pin" src="http://blog.mozmonkey.com/images/april_fools_06/transistor_center_pin.jpg" /></a></p>
<p align="left">At this point you&#8217;ll want to use some electrical tape to tape down all the transistor pins and protect them from being pulled on.</p>
<p><strong>4) Deconstructing the keyboard.</strong>  Using your phillips screwdriver remove all the screws from the bottom of your keyboard.  FYI: On some keyboards there are screws hiding under the rubber feed. Then use the slotted screwdriver to separate the keyboard halves.  Be very careful  with this step, as it&#8217;s likely to create visible damage.</p>
<p align="center"><a href="http://flickr.com/photos/18756971@N00/136156099/in/photostream/"><img title="Take apart the keyboard" alt="Take apart the keyboard" src="http://blog.mozmonkey.com/images/april_fools_06/deconstruct_keyboard.jpg" /></a></p>
<p><strong>5)</strong> <strong>LED setup.</strong>  Find the LED and locate the positive and negative pins.  Fish the wires from the musical element up through the keyboard and to the LED.  Solder the wire from the  center transistor pin to the  positive LED pin and the other wire to the negative pin (the image below is from an ergo keyboard).</p>
<p align="center"><a href="http://flickr.com/photos/18756971@N00/136156107/in/photostream/"><img alt="Attaching to the LED in an ergo keyboard" title="Attaching to the LED in an ergo keyboard" src="http://blog.mozmonkey.com/images/april_fools_06/led_work.jpg" /></a></p>
<div align="left"><strong>6)</strong> <strong>Finishing up.</strong>  Now close up the keyboard, screw it back together and tape the musical element to the bottom.  You&#8217;re done, plug it in and try it out!</div>
<p align="center"><a href="http://flickr.com/photos/18756971@N00/136156132/in/photostream/"><img alt="Tape the musical element to the bottom of the keyboard" title="Tape the musical element to the bottom of the keyboard" src="http://blog.mozmonkey.com/images/april_fools_06/finished_1.jpg" /></a> <a href="http://flickr.com/photos/18756971@N00/136156144/in/photostream/"><img alt="Add a friendly note" title="Add a friendly note" src="http://blog.mozmonkey.com/images/april_fools_06/finished_2.jpg" /></a></p>
<p><strong>Results</strong></p>
<p>Late one night I went into the office and carefully chose 3 keyboards to terrorize and an hour later I was done.  The following day the first guy got the music playing right away, since he always uses caps instead of shift.  He was baffled for a couple of hours, muting the sound on his computer and still wondering why it was making noise.  Eventually he turned over the keyboard to find my note, and got a good laugh out of it.  Strangely enough, he didn&#8217;t want me to remove it.</p>
<p>The second victim found it sometime after lunch.  I wandered by, acting as innocent as I could, and suggesting &#8220;Try turning your sound off&#8221; then asking &#8220;Did you install anything today?  Could it be a virus?&#8221;   She started getting a bit concerned and I couldn&#8217;t hold a straight face any longer and ended up giving away my guilt.</p>
<p>The last guy never uses caps, so after waiting 2 weeks for it to happen I coerced him to press the key.  He did and we had a good laugh about it.</p>
<p>I still have 5 more units setup and ready to go, I just have to find more victims&#8230;</p>
<p align="center"><a href="http://flickr.com/photos/18756971@N00/136156156/in/photostream/"><img title="All musical elements" alt="All musical elements" src="http://blog.mozmonkey.com/images/april_fools_06/all_units.jpg" /></a></p>
<p><strong>Final Thoughts</strong></p>
<p>This has been a really fun project, and one I plan on doing again.  There is, however, one thing I would like to improve: be able to hook up the musical element to any key on the keyboard. Earlier on I tried some simple solid-state bounceless switch circuits and they worked well on the breadboard, but not on the keyboard itself.  The complete pathway to and from keyboard button has about 120 ohms of resistance, which seemed a bit too much for the small battery.  If anybody comes up with a solution, please post it in the comments section here.</p>
<p align="center"><a href="http://flickr.com/photos/18756971@N00/136156151/in/photostream/"><img alt="Me with my creations" title="Me with my creations" src="http://blog.mozmonkey.com/images/april_fools_06/me.jpg" /></a></p>
<p>I want to hear about your experiences.  If you decide to implement this project, please post your story in the comments section here.</p>
<p><strong>Vote For Me</strong><br />
If you like this project, please vote for it on <a href="http://www.instructables.com/id/The-Singing-Keyboard-Prank/">instructables.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/april_fools_hack/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My second &#8216;Firefox&#8217; at the Songbirder+Mozilla Party</title>
		<link>http://blog.mozmonkey.com/2006/my-second-firefox-at-the-songbirdermozilla-party/</link>
		<comments>http://blog.mozmonkey.com/2006/my-second-firefox-at-the-songbirdermozilla-party/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 18:37:57 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=11</guid>
		<description><![CDATA[
Last night I went to the Songbird+Mozilla party in SF and it was awesome.  There were lots of people from various startup companies, good music, great food, drinks and the Flaming Firefox (pictured above) was most excellent.  It almost felt like we were back in the ol&#8217; &#8220;dot com&#8221; boom; oh sweet nostalgia.

I [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: center"><img title="Flaming Firefox" alt="Flaming Firefox" src="http://blog.mozmonkey.com/wp-content/uploads/2006/04/PIX__142.jpg" /></div>
<p align="left">Last night I went to the <a href="http://www.songbirdnest.com/node/430">Songbird+Mozilla</a><a href="http://www.songbirdnest.com/node/430"> party</a> in SF and it was awesome.  There were lots of people from various startup companies, good music, great food, drinks and the Flaming Firefox (pictured above) was most excellent.  It almost felt like we were back in the ol&#8217; &#8220;dot com&#8221; boom; oh sweet nostalgia.</p>
<div align="left">
<p align="left">I really like what they have going there.  It&#8217;s the first real use of the <a href="http://developer.mozilla.org/en/docs/XULRunner">XULRunner</a> application that I&#8217;ve seen and has a lot of potential and a great executive team.  I just hope that someday when they make millions they&#8217;ll remember I came to their party. ;o)</p>
<div align="left">
<p align="left">GO SONGBIRD! (versions for Apple and *NIX are coming soon. Hooray!)</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/my-second-firefox-at-the-songbirdermozilla-party/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creating a Semantic Tab Box &#8212; Without AJAX</title>
		<link>http://blog.mozmonkey.com/2006/creating-a-semantic-tab-box-without-ajax/</link>
		<comments>http://blog.mozmonkey.com/2006/creating-a-semantic-tab-box-without-ajax/#comments</comments>
		<pubDate>Thu, 16 Mar 2006 02:20:08 +0000</pubDate>
		<dc:creator>Jeremy Gillick</dc:creator>
		
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://blog.mozmonkey.com/?p=9</guid>
		<description><![CDATA[
Recently I wanted to create a content box that would use tabs to organize a few sections of text.  Here were my requirements:

Tabs oriented vertically (you can easily customize my example to be horizontal)
HTML be semantic, logical and gracefully degrade
Be easily accessible to screen readers
Easy to implement and portable
Works in IE, Firefox &#038; Safari


		I [...]]]></description>
			<content:encoded><![CDATA[
<p>Recently I wanted to create a content box that would use tabs to organize a few sections of text.  Here were my requirements:</p>
<ol>
<li>Tabs oriented vertically (you can easily customize my example to be horizontal)</li>
<li>HTML be semantic, logical and gracefully degrade</li>
<li>Be easily accessible to screen readers</li>
<li>Easy to implement and portable</li>
<li>Works in IE, Firefox &#038; Safari</li>
</ol>
<p>
		I started by looking on the web for pre-existing examples of this and found a lot of things that worked well, but when you looked under the hood they were a mess.<br />
		<span id="more-9"></span>
	</p>
<p>
		Some used iframe, JXCSS (JS + XML[HttpRequest] + CSS) or AJAX but were overly complex for the simple task they did.  It seemed as if the developer made it so complex so he could slap the &#8220;AJAX&#8221; sticker on it.  The problem with these approaches is they&#8217;re not very portable or easy to understand; plus I would imagine they&#8217;re not too friendly to screen readers.  So these failed requirements 2, 3 and 4.
	</p>
<p>
		The next common approach was to put the tabs in an unordered list and the content in divs under them.  This is closer to the result, but still not acceptable.  The UL tag has become the &#8217;semantic&#8217; utility for all web developers (myself included) as a quick tableless fix.  There <em>are</em> a lot of places where this tag is very useful and meaningful, but not everywhere.  Let me explain.  When you use a UL for the tabs in a tabbed box you are completely removing the titles from the content and destroying the natural structure. When degraded without CSS support it looks like this:
	</p>
<div style="margin: 20px 0 20px 20px; background: #CCC; padding: 7px;">
<ul style="list-style-type: disc;">
<li style="background: none; padding: 0;"><a href="#" style="color: #00F; text-decoration: underline;">Section One</a></li>
<li style="background: none; padding: 0;"><a href="#" style="color: #00F; text-decoration: underline;">Section Two</a></li>
<li style="background: none; padding: 0;"><a href="#" style="color: #00F; text-decoration: underline;">Section Three</a></li>
</ul>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit&#8230;</p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci&#8230;</p>
<p>Li Europan lingues es membres del sam familie&#8230;</p>
</p></div>
<p>
		As you can see, when the CSS is removed, there&#8217;s no way to know which section is pointing to which paragraph.  It is true that you could duplicate the link names as headers above each paragraph and use CSS to hide them, but that&#8217;s redundant and just plain lazy.
	</p>
<p>
		My approach is to lay everything out naturally and logically and then add CSS to make it look like a tabbed box.  Here&#8217;s what my version looks like without CSS:
	</p>
<div style="margin: 20px 0 20px 20px; background: #CCC; padding: 7px;">
		<strong><big>Section One</big></strong></p>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit&#8230;</p>
<p>		<strong><big>Section Two</big></strong></p>
<p>Ut wisi enim ad minim veniam, quis nostrud exerci&#8230;</p>
<p>		<strong><big>Section Three</big></strong></p>
<p>Li Europan lingues es membres del sam familie&#8230;</p>
</p></div>
<p>
		This degrades to something that is clearly marked and it&#8217;s easy to read.  After the CSS has been added, it looks like <a href="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox.html">this</a>:
	</p>
<p>	<!-- Using an iframe because otherwise wordpress pukes --><br />
	<iframe src="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox_small.html" height="230" width="600" style="display: block; border: none; overflow: hidden; margin: 0 0 0 20px;"></iframe></p>
<p><strong>Getting Started &#8212; The HTML</strong></p>
<p>Lets start by building the basic HTML:</p>
<pre style="font-family: Courier, Helvetica, Arial; font-size: .9em; background: #DEDEDE; border: 1px solid #666; padding: 5px; margin: 20px 0 20px 20px;">
&lt;h2&gt;Section One&lt;/h2&gt;
&lt;div&gt;
   Lorem ipsum dolor sit amet, consectetuer adipiscing elit...
&lt;/div&gt;

&lt;h2&gt;Section Two&lt;/h2&gt;
&lt;div&gt;
   Ut wisi enim ad minim veniam, quis nostrud exerci...
&lt;/div&gt;

&lt;h2&gt;Section Three&lt;/h2&gt;
&lt;div&gt;
   Li Europan lingues es membres del sam familie...
&lt;/div&gt;
	</pre>
<p>
		Next we&#8217;ll add some divs for styling.  These also help encapsulate the tabs and content as well as makes the code portable and easy to implement.
	</p>
<pre style="font-family: Courier, Helvetica, Arial; font-size: .9em; background: #DEDEDE; border: 1px solid #666; padding: 5px; margin: 20px 0 20px 20px;">
&lt;div&gt;
   &lt;div&gt;
      &lt;h2&gt;Section One&lt;/h2&gt;
      &lt;div&gt;
         Lorem ipsum dolor sit amet, consectetuer adipiscing elit...
      &lt;/div&gt;
   &lt;/div&gt;

   &lt;div&gt;
      &lt;h2&gt;Section Two&lt;/h2&gt;
      &lt;div&gt;
         Ut wisi enim ad minim veniam, quis nostrud exerci...
      &lt;/div&gt;
   &lt;/div&gt;

   &lt;div&gt;
      &lt;h2&gt;Section Three&lt;/h2&gt;
      &lt;div&gt;
         Li Europan lingues es membres del sam familie...
      &lt;/div&gt;
   &lt;/div&gt;
&lt;/div&gt;
	</pre>
<p>
		Now for the CSS classes (<code>tabbox</code>, <code>selected</code>, <code>tabpanel</code>).
	</p>
<pre style="font-family: Courier, Helvetica, Arial; font-size: .9em; background: #DEDEDE; border: 1px solid #666; padding: 5px; margin: 20px 0 20px 20px;">
&lt;div class="tabbox"&gt;
   &lt;div class="selected"&gt;
      &lt;h2&gt;Section One&lt;/h2&gt;
      &lt;div class="tabpanel"&gt;
         Lorem ipsum dolor sit amet, consectetuer adipiscing elit...
      &lt;/div&gt;
   &lt;/div&gt;

   &lt;div&gt;
      &lt;h2&gt;Section Two&lt;/h2&gt;
      &lt;div class="tabpanel"&gt;
         Ut wisi enim ad minim veniam, quis nostrud exerci...
      &lt;/div&gt;
   &lt;/div&gt;

   &lt;div&gt;
      &lt;h2&gt;Section Three&lt;/h2&gt;
      &lt;div class="tabpanel"&gt;
         Li Europan lingues es membres del sam familie...
      &lt;/div&gt;
   &lt;/div&gt;
&lt;/div&gt;
	</pre>
<p>
		And finally we add the links and event handlers to the headers to perform the tab switching.
	</p>
<pre style="font-family: Courier, Helvetica, Arial; font-size: .9em; background: #DEDEDE; border: 1px solid #666; padding: 5px; margin: 20px 0 20px 20px;">
&lt;h2&gt;
   &lt;a href="#section_one" name="section_one"
         onclick="return changeTab(this)"
         onfocus="return changeTab(this)"&gt;
      Section One
   &lt;/a&gt;
&lt;/h2&gt;
	</pre>
<p><strong>Evolving &#8212; Add the CSS</strong></p>
<p>
		Now let&#8217;s use CSS to make it look like a tabbed box.  We start by positioning the <code>H<em>n</em></code> tags relatively and the content divs (or tabpanels) absolutely in the tabbox; this will make the titles stack natually as <a href="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox_step2.html">vertical tabs</a>.
	</p>
<pre style="font-family: Courier, Helvetica, Arial; font-size: .9em; background: #DEDEDE; border: 1px solid #666; padding: 5px; margin: 20px 0 20px 20px;">
.tabbox { position: relative;
          top: 0;
          left: 0;
          width: 565px;
          height: 220px;
        }
.tabbox h2 { position: relative;
             margin: 0;
             padding: 0;
             width: 150px;
           }
.tabbox .tabpanel { position: absolute;
                    top: 0;
                    left: 150px;
                    width: 400px;
                    height: 150px;
                    padding: 7px;
                    z-index: 1;
                    display: none;
                  }
</pre>
<p>
		So this is a start, but all the content has disappeared  because we&#8217;ve set <code>display:none</code> in the tabpanel class.
	</p>
<p>
		Now we define the selected class that will highlight the default tab and <a href="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox_step3.html">show it&#8217;s content</a>:
	</p>
<pre style="font-family: Courier, Helvetica, Arial; font-size: .9em; background: #DEDEDE; border: 1px solid #666; padding: 5px; margin: 20px 0 20px 20px;">
.tabbox .selected .tabpanel { display: block;
                              overflow: auto;
                            }
.tabbox .selected h2 a { background: #DEDEDE;
                         cursor: default;
                       }
</pre>
<p>
		It should now resemble something <em>close</em> to a <a href="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox_step3.html">tabbed box</a>.
	</p>
<p>
		At this point you add can the fluff to make it look presentable, and for my <a href="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox.html">simple example</a>, the final the CSS looks like this:
	</p>
<pre style="font-family: Courier, Helvetica, Arial; font-size: .9em; background: #DEDEDE; border: 1px solid #666; padding: 5px; margin: 20px 0 20px 20px;">
 .tabbox { position: relative;
		   top: 0;
		   left: 0;
		   width: 565px;
		   height: 220px;
		 }

 .tabbox h2 { position: relative;
              margin: 0;
              padding: 0;
              width: 150px;
              border: solid #000;
              border-width: 1px 0 0 1px;
              z-index: 2;
            }

 .tabbox .last h2 { border-bottom-width: 1px; }

 .tabbox h2 a { display: block;
                padding: 5px;
                margin: 0 1px 0 0;
                font-size: .8em;
                color: #000;
                text-decoration: none;
			  }

 .tabbox h2 a:hover { background: #FFC; }

 .tabbox .tabpanel { position: absolute;
                     top: 0;
                     left: 150px;
                     width: 400px;
                     height: 150px;
                     padding: 7px;
                     background: #DEDEDE;
                     border: 1px solid #000;
                     border-top: 1px solid #000;
                     z-index: 1;
                     visibility: hidden;
                   }

 .tabbox .selected .tabpanel { visibility: visible;
                               overflow: auto;
                             }

 .tabbox .selected h2 a { background: #DEDEDE;
                          margin: 0;
                          cursor: default;
                        }
</pre>
<p><strong>Make it work &#8212; Add the JS</strong></p>
<p>Lastly <a href="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox.js">download</a> and insert the JavaScript.  I wont go into the JavaScript code from here, but if you followed my examples it should work right out of the box.  You can also checkout my pre-baked <a href="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox.html">example</a> and compare.</p>
<p>It&#8217;s important to note that the JavaScript works off of the <code>tabbox</code> and <code>selected</code> classes and the basic HTML structure. You can have any HTML you want within the <code>H<em>n</em></code> tags and tabpanels, however, the overall framework must look the same.</p>
<p>And now we have the <a href="http://blog.mozmonkey.com/pages/examples/tabbox/tabbox.html">completed product</a>.</p>
<p><strong>Final Thoughts</strong></p>
<p>I&#8217;m not the best or smartest developer and I&#8217;m sure there&#8217;s a million other (potentially better) ways to do this, and am interested to hear about them. If you&#8217;ve seen good examples of this, please leave a comment and tell me about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozmonkey.com/2006/creating-a-semantic-tab-box-without-ajax/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
