<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Spun</title>
	
	<link>http://ginatrapani.org/spun</link>
	<description>A web programmer's notebook.</description>
	<pubDate>Wed, 04 Feb 2009 19:43:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Spun" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item>
		<title>My First Ubiquity Command</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/lWZgyv2yJRA/my-first-ubiquity-command</link>
		<comments>http://ginatrapani.org/spun/posts/2009/02/04/my-first-ubiquity-command#comments</comments>
		<pubDate>Wed, 04 Feb 2009 19:36:34 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Ubiquity]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2009/02/04/developing-ubiquity-commands</guid>
		<description><![CDATA[Spent a few days playing with the awesome Ubiquity Firefox extension, and yesterday I dove into developing my own command.  Here&#8217;s the result: a Google search of Lifehacker&#8217;s archives that shows up in-panel in Ubiquity, like this:

The code itself is Javascript that uses a jQuery template for results.  It&#8217;s heavily ripped off from [...]]]></description>
			<content:encoded><![CDATA[<p>Spent a few days playing with the awesome <a href="http://labs.mozilla.com/projects/ubiquity/">Ubiquity Firefox extension</a>, and yesterday I dove into developing my own command.  Here&#8217;s the result: <a href="http://ginatrapani.org/workshop/ubiquity/lifehacker-search.xhtml">a Google search of Lifehacker&#8217;s archives</a> that shows up in-panel in Ubiquity, like this:</p>
<p><img src="http://ginatrapani.org/workshop/ubiquity/lifehacker-ubiquity-search-screenshot.png" /></p>
<p>The code itself is Javascript that uses a jQuery template for results.  It&#8217;s heavily ripped off from the existing Google search command (with the <code>site:lifehacker.com</code> operator thrown in).  If you haven&#8217;t tried out Ubiquity, here&#8217;s my <a href="http://lifehacker.com/5145709/make-ubiquity-your-ultimate-firefox-commander">introductory tutorial</a>.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/lWZgyv2yJRA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2009/02/04/my-first-ubiquity-command/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2009/02/04/my-first-ubiquity-command</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/DmUHca7PYO4/162</link>
		<comments>http://ginatrapani.org/spun/posts/2009/02/03/162#comments</comments>
		<pubDate>Tue, 03 Feb 2009 06:14:04 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/?p=162</guid>
		<description><![CDATA[Thanks a million to Sean Lynch at the Fairleads blog for walking through building scaffolding in Ruby on Rails 2.0; it was a huge help in my first week of RoR programming.
]]></description>
			<content:encoded><![CDATA[<p>Thanks a million to Sean Lynch at the Fairleads blog for <a href="http://fairleads.blogspot.com/2007/12/rails-20-and-scaffolding-step-by-step.html">walking through building scaffolding in Ruby on Rails 2.0</a>; it was a huge help in my first week of RoR programming.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/DmUHca7PYO4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2009/02/03/162/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2009/02/03/162</feedburner:origLink></item>
		<item>
		<title>Less Skeezy Alternatives to GoDaddy</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/DmVtBj1ubhw/less-sexist-alternatives-to-godaddy</link>
		<comments>http://ginatrapani.org/spun/posts/2009/02/02/less-sexist-alternatives-to-godaddy#comments</comments>
		<pubDate>Tue, 03 Feb 2009 00:51:30 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Domain Registrars]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/?p=155</guid>
		<description><![CDATA[Yes, I knew that popular, cheap domain registrar GoDaddy always used sex to sell their services, and yes, their bullying upsells always bugged me, but yesterday&#8217;s Super Bowl ad shot my &#8220;Stop doing business with GoDaddy&#8221; to-do to the top of my list. But where to transfer to? I polled my Twitter friends on which [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, I knew that popular, cheap domain registrar GoDaddy always used sex to sell their services, and yes, their bullying upsells always bugged me, but yesterday&#8217;s Super Bowl ad shot my &#8220;Stop doing business with GoDaddy&#8221; to-do to the top of my list. But where to transfer <i>to</i>? I polled my Twitter friends on which registrars were the best alternatives.  Here&#8217;s <a href="http://spreadsheets.google.com/pub?key=p3O079avNqMbOeQaSMmiODQ">a spreadsheet of the full vote tally</a>; turns out the least expensive, top vote-getter was <a href="http://namecheap.com">Namecheap.com</a>.  </p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/DmVtBj1ubhw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2009/02/02/less-sexist-alternatives-to-godaddy/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2009/02/02/less-sexist-alternatives-to-godaddy</feedburner:origLink></item>
		<item>
		<title>Wake-up Call</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/8oSUEsP6s4g/wake-up-call</link>
		<comments>http://ginatrapani.org/spun/posts/2009/02/02/wake-up-call#comments</comments>
		<pubDate>Mon, 02 Feb 2009 23:41:18 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/?p=150</guid>
		<description><![CDATA[Now that I&#8217;ve got a bit more free time on a day-to-day basis, I&#8217;m doing more development, so I&#8217;ve got more dev-related links that need a parking spot.  Expect more posts at this blog, which has been newly upgraded to the impressive WordPress 2.7, starting now!
]]></description>
			<content:encoded><![CDATA[<p>Now that I&#8217;ve got <a href="http://lifehacker.com/5132674/so-long-and-thanks-for-all-the-fish">a bit more free time</a> on a day-to-day basis, I&#8217;m doing more development, so I&#8217;ve got more dev-related links that need a parking spot.  Expect more posts at this blog, which has been newly upgraded to the impressive WordPress 2.7, starting now!</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/8oSUEsP6s4g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2009/02/02/wake-up-call/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2009/02/02/wake-up-call</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/SMJJ64rtHpc/148</link>
		<comments>http://ginatrapani.org/spun/posts/2007/08/13/148#comments</comments>
		<pubDate>Mon, 13 Aug 2007 14:48:34 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/08/13/148</guid>
		<description><![CDATA[Great collection of Firefox extensions to set up the ultimate Firefox development profile.
]]></description>
			<content:encoded><![CDATA[<p>Great collection of Firefox extensions to set up the <a href="http://www.howtogeek.com/howto/internet/firefox/create-the-ultimate-firefox-web-development-profile/">ultimate Firefox development profile.</a></p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/SMJJ64rtHpc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/08/13/148/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/08/13/148</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/KBZDxouhV3s/147</link>
		<comments>http://ginatrapani.org/spun/posts/2007/06/29/147#comments</comments>
		<pubDate>Fri, 29 Jun 2007 23:03:48 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Search Engine Optimization]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/06/29/147</guid>
		<description><![CDATA[At the request of a reader, a blast from the past - a 2003 SEO article that&#8217;s way dated, but still has some good points.  Help the Googlebot understand your web site
]]></description>
			<content:encoded><![CDATA[<p>At the request of a reader, a blast from the past - a 2003 SEO article that&#8217;s way dated, but still has some good points.  <a href="http://ginatrapani.org/spun/code-snippets/help_the_googlebot_understand_your_web_site.html">Help the Googlebot understand your web site</a></p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/KBZDxouhV3s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/06/29/147/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/06/29/147</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/pWE1fUfk3rg/146</link>
		<comments>http://ginatrapani.org/spun/posts/2007/04/30/146#comments</comments>
		<pubDate>Mon, 30 Apr 2007 15:31:14 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Icons]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/04/30/146</guid>
		<description><![CDATA[Always will be a sucker for free, good-looking icons.
]]></description>
			<content:encoded><![CDATA[<p>Always will be a sucker for <a href="http://commons.wikimedia.org/wiki/Crystal_Clear">free, good-looking icons</a>.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/pWE1fUfk3rg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/04/30/146/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/04/30/146</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/lnvt1NJfdWk/144</link>
		<comments>http://ginatrapani.org/spun/posts/2007/04/27/144#comments</comments>
		<pubDate>Fri, 27 Apr 2007 22:40:53 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/04/27/144</guid>
		<description><![CDATA[The first indicator that a design trend is on the way out is when there&#8217;s a Javascript toolkit for it.  Here&#8217;s image reflections.js. (via pb)
]]></description>
			<content:encoded><![CDATA[<p>The first indicator that a design trend is on the way out is when there&#8217;s a Javascript toolkit for it.  <a href="http://cow.neondragon.net/stuff/reflection/">Here&#8217;s image reflections.js.</a> (via <a href="http://www.onfocus.com/">pb</a>)</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/lnvt1NJfdWk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/04/27/144/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/04/27/144</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/6W8W5PqLCzA/143</link>
		<comments>http://ginatrapani.org/spun/posts/2007/04/24/143#comments</comments>
		<pubDate>Wed, 25 Apr 2007 02:28:40 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[Extensions]]></category>

		<category><![CDATA[Firebug]]></category>

		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/04/24/143</guid>
		<description><![CDATA[Firebug&#8217;s creator, Joe Hewitt, demonstrates how he uses Firebug.
]]></description>
			<content:encoded><![CDATA[<p>Firebug&#8217;s creator, Joe Hewitt, <a href="http://ajaxian.com/archives/joe-hewitt-firebug-power-user-demo">demonstrates how he uses Firebug.</a></p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/6W8W5PqLCzA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/04/24/143/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/04/24/143</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/qj1n2f-3-kc/debugging20javascript20with20firefox</link>
		<comments>http://ginatrapani.org/spun/posts/2007/04/17/debugging20javascript20with20firefox#comments</comments>
		<pubDate>Tue, 17 Apr 2007 23:14:38 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/04/17/debugging20javascript20with20firefox</guid>
		<description><![CDATA[Note to self: get better at debugging JavaScript with Firefox.
]]></description>
			<content:encoded><![CDATA[<p>Note to self: get better at <a href="http://www.codejacked.com/debugging-javascript-with-firefox/">debugging JavaScript with Firefox</a>.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/qj1n2f-3-kc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/04/17/debugging20javascript20with20firefox/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/04/17/debugging20javascript20with20firefox</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/gnlVAV7PUNg/141</link>
		<comments>http://ginatrapani.org/spun/posts/2007/04/16/141#comments</comments>
		<pubDate>Mon, 16 Apr 2007 22:13:28 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Bash scripts]]></category>

		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/04/16/141</guid>
		<description><![CDATA[Ah-ha!  So THAT&#8217;s the difference between .bash_profile and .bashrc.
]]></description>
			<content:encoded><![CDATA[<p>Ah-ha!  So THAT&#8217;s <a href="http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html">the difference between .bash_profile and .bashrc</a>.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/gnlVAV7PUNg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/04/16/141/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/04/16/141</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/TtnHZeISrDE/140</link>
		<comments>http://ginatrapani.org/spun/posts/2007/04/16/140#comments</comments>
		<pubDate>Mon, 16 Apr 2007 17:16:24 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Startup dot com]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/04/16/140</guid>
		<description><![CDATA[Paul&#8217;s rumination about launching a website rings so true.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ftrain.com/SiteLaunch.html">Paul&#8217;s rumination about launching a website</a> rings so true.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/TtnHZeISrDE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/04/16/140/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/04/16/140</feedburner:origLink></item>
		<item>
		<title>Release: Better Gmail Firefox extension</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/j3btMOdTVug/release-better-gmail-firefox-extension-lifehacker</link>
		<comments>http://ginatrapani.org/spun/posts/2007/04/16/release-better-gmail-firefox-extension-lifehacker#comments</comments>
		<pubDate>Mon, 16 Apr 2007 17:13:23 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Browsers]]></category>

		<category><![CDATA[Extensions]]></category>

		<category><![CDATA[Greasemonkey]]></category>

		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/04/16/release-better-gmail-firefox-extension-lifehacker</guid>
		<description><![CDATA[Been awhile since I&#8217;ve spent the entire weekend happily coding in a haze, but that&#8217;s what happened yesterday and Saturday.  The result is the Better Gmail Firefox extension, which packages up my favorite Gmail Greasemonkey scripts into one, standalone extension, with the help of the awesome Greasemonkey Compiler.  Check it out.

Lifehacker Code: Better [...]]]></description>
			<content:encoded><![CDATA[<p>Been awhile since I&#8217;ve spent the entire weekend happily coding in a haze, but that&#8217;s what happened yesterday and Saturday.  The result is the Better Gmail Firefox extension, which packages up my favorite Gmail Greasemonkey scripts into one, standalone extension, with the help of the awesome <a href="http://arantius.com/misc/greasemonkey/script-compiler">Greasemonkey Compiler</a>.  Check it out.</p>
<div class="post-link">
<a href="http://lifehacker.com/software/gmail/lifehacker-code-better-gmail-firefox-extension-251923.php">Lifehacker Code: Better Gmail (Firefox extension)</a></div>
<img src="http://feeds.feedburner.com/~r/Spun/~4/j3btMOdTVug" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/04/16/release-better-gmail-firefox-extension-lifehacker/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/04/16/release-better-gmail-firefox-extension-lifehacker</feedburner:origLink></item>
		<item>
		<title>Release:  About This Site Firefox add-on, v. 1.2</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/EzdyM6oJNqM/release-about-this-site-firefox-add-on-v-12</link>
		<comments>http://ginatrapani.org/spun/posts/2007/01/30/release-about-this-site-firefox-add-on-v-12#comments</comments>
		<pubDate>Tue, 30 Jan 2007 18:09:34 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

		<category><![CDATA[Open source]]></category>

		<category><![CDATA[Release]]></category>

		<category><![CDATA[XUL]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2007/01/30/release-about-this-site-firefox-add-on-v-12</guid>
		<description><![CDATA[I got all fancy-pants with XUL and Firefox preferences in the latest release of About This Site, a Firefox add-on that hooks you up with all sorts of meta-services when you&#8217;re researching a web site (like Alexa graphs, del.icio.us bookmarks, a WhoIs query, etc.)
The new release is only a minor point upgrade but feature-wise it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I got all fancy-pants with XUL and Firefox preferences in the latest release of <b><a href="http://lifehacker.com/software/firefox/lifehacker-code--about-this-site-addon-firefox-232375.php">About This Site</a></b>, a Firefox add-on that hooks you up with all sorts of meta-services when you&#8217;re researching a web site (like Alexa graphs, del.icio.us bookmarks, a WhoIs query, etc.)</p>
<p>The new release is only a minor point upgrade but feature-wise it&#8217;s major:  now you can configure whatever meta-lookups your heart desires in the menu all by yourself.  (This will also head off all that email I get from folks requesting that I add their new webapp to the menu.)</p>
<p>Current About This Site users can upgrade just using the auto-update feature;  go to your Add-ons in Firefox, right click on About This Site and hit &#8220;Find Update.&#8221;</p>
<p>What&#8217;s more, the fine folks at Lifehacker are funding some of my whimsical open source development efforts, so the extension and some more little utilities I&#8217;ve got in the works will be hosted there, under the new <a href="http://lifehacker.com/software/lifehacker-code/">Lifehacker Code</a> tag.</p>
<p>A girl cannot subsist on blogging alone.  Meep.</p>
<div class="post-link"><a href="http://lifehacker.com/software/firefox/lifehacker-code--about-this-site-addon-firefox-232375.php">Lifehacker  Code: About This Site add-on (Firefox)</a></div>
<img src="http://feeds.feedburner.com/~r/Spun/~4/EzdyM6oJNqM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2007/01/30/release-about-this-site-firefox-add-on-v-12/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2007/01/30/release-about-this-site-firefox-add-on-v-12</feedburner:origLink></item>
		<item>
		<title>PHP foreach loops pass arrays by value</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/OuWxgYZemc0/php-foreach-loops-pass-arrays-by-value</link>
		<comments>http://ginatrapani.org/spun/posts/2006/12/17/php-foreach-loops-pass-arrays-by-value#comments</comments>
		<pubDate>Sun, 17 Dec 2006 22:22:35 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Code snippets]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2006/12/17/php-foreach-loops-pass-arrays-by-value</guid>
		<description><![CDATA[I nearly lost my mind debugging a problem with some PHP I&#8217;d written awhile back that wasn&#8217;t working as I&#8217;d expected on one server (but fine on my own.)  
After many hours of cursing myself for not having a better debugging system, I discovered it was a PHP 4 versus PHP 5 code incompatibility. [...]]]></description>
			<content:encoded><![CDATA[<p>I nearly lost my mind debugging a problem with some PHP I&#8217;d written awhile back that wasn&#8217;t working as I&#8217;d expected on one server (but fine on my own.)  </p>
<p>After many hours of cursing myself for not having a better debugging system, I discovered it was a PHP 4 versus PHP 5 code incompatibility.  Turns out that PHP passes arrays into foreach loops by value, which means that any changes you make to that array inside the foreach don&#8217;t appear <i>after</i> the foreach, because it&#8217;s acting on a copy of the arrray instead of the original data.  </p>
<p>So code like this:</p>
<p><iframe src="/spun/code-snippets/show-source.php?src=foreach.php" width="500" height="200" border="0" style="border:solid #999 1px"></iframe></p>
<p>Doesn&#8217;t print &#8220;nothingnothing&#8221;, which is what I&#8217;d expect;  it prints &#8220;rainbowspuppies.&#8221;  In PHP4, apparently, there&#8217;s no way to get around this.  In PHP5, you can pass the array into the foreach by reference using this notation:  <code>foreach ($gina->interests as &#038; $interest)</code></p>
<p>For now, I to make my code both PHP4 and PHP5 compatible, I went with a:</p>
<p><code>while ($i=0; $i < sizeof($gina->interests); $i++)</code></p>
<p>Which just isn&#8217;t as readable as the foreach.  Here&#8217;s the <a href="http://us3.php.net/foreach">PHP doc on foreach</a> (which clearly states the PHP 5 caveat.)</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/OuWxgYZemc0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2006/12/17/php-foreach-loops-pass-arrays-by-value/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2006/12/17/php-foreach-loops-pass-arrays-by-value</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/eldz7FJhDn0/136</link>
		<comments>http://ginatrapani.org/spun/posts/2006/12/03/136#comments</comments>
		<pubDate>Sun, 03 Dec 2006 07:13:07 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Google Analytics]]></category>

		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2006/12/03/136</guid>
		<description><![CDATA[Here&#8217;s a handy tip on how to track broken links or missing pages on your site with Google Analytics.  Speaking of, here&#8217;s how we use Analytics at Lifehacker to figure out which posts are our top performers.
]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a handy tip on <a href="http://analytics.blogspot.com/2006/09/tip-tracking-404-pages.html">how to track broken links or missing pages on your site</a> with Google Analytics.  Speaking of, here&#8217;s how <a href="http://www.lifehacker.com/software/web-publishing/geek-to-live--improve-your-web-site-with-google-analytics-200935.php">we use Analytics</a> at Lifehacker to figure out which posts are our top performers.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/eldz7FJhDn0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2006/12/03/136/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2006/12/03/136</feedburner:origLink></item>
		<item>
		<title>Graphing Amazon sales rank, or automated author navel-gazing</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/I7umiBDcx90/graphing-amazon-book-rank-or-automated-author-navel-gazing</link>
		<comments>http://ginatrapani.org/spun/posts/2006/12/02/graphing-amazon-book-rank-or-automated-author-navel-gazing#comments</comments>
		<pubDate>Sun, 03 Dec 2006 03:00:34 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[API]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2006/12/02/graphing-amazon-book-rank-or-automated-author-navel-gazing</guid>
		<description><![CDATA[Like most authors tasked with promoting their new book, checking Lifehacker the book&#8217;s Amazon sales rank has become part of my daily routine.  But your book&#8217;s sales rank is one of those things - if you obsess about it too much, you&#8217;ll lose your mind.  &#8220;It&#8217;s total B.S.,&#8221; a writer friend told me. [...]]]></description>
			<content:encoded><![CDATA[<p>Like most authors tasked with promoting their new book, checking <a href="http://www.amazon.com/exec/obidos/ASIN/0470050659/ref=nosim/lifehackerboo-20"><i>Lifehacker</i> the book</a>&#8217;s Amazon sales rank has become part of my daily routine.  But your book&#8217;s sales rank is one of those things - if you obsess about it too much, you&#8217;ll lose your mind.  &#8220;It&#8217;s total B.S.,&#8221; a writer friend told me.  &#8220;My agent told me it&#8217;s a miniscule representation of your book&#8217;s sales overall.&#8221;  That&#8217;s probably less true for tech books than fiction, but either way, I wanted a way to capture my sales rank over time without constantly checking myself like an anxious freak.  A number alone after awhile is pretty meaningless, and it literally changes by the hour.</p>
<p>So, inspired by <a href="http://www.onfocus.com/2006/10/3866">PB&#8217;s graphing post</a> and a curiosity about Amazon&#8217;s API, I set out to write a little something that would help me visualize what&#8217;s happening with the book&#8217;s sales over time.  I didn&#8217;t get into the hardcore tools Paul did - just the names RRDTool or SNMP scare me - so I instead opted for the very no-frills, Flash-based <a href="http://www.maani.us/charts/index.php">PHP/SWF graphs.</a>  After registering for a free key, I was delighted to find that the Amazon API is dead simple.  In less than 30 minutes of a little PHP/MySQL hacking, I had a sales rank capture-and-graph set of PHP scripts.  It&#8217;s turned out to be a really nice way to keep an eye out without reloading the book&#8217;s Amazon page 4 times a day like a total egotistical loser.</p>
<p>Here&#8217;s the finished <a href="http://ginatrapani.org/workshop/book-rank/"><i>Lifehacker</i> book Amazon sales rank charter</a>.  Screengrab below:</p>
<p><img id="image135" src="http://ginatrapani.org/spun/wp-content/uploads/2006/12/salesrankcharter.png" alt="Amazon sales rank charter" /></p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/I7umiBDcx90" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2006/12/02/graphing-amazon-book-rank-or-automated-author-navel-gazing/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2006/12/02/graphing-amazon-book-rank-or-automated-author-navel-gazing</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/Spun/~3/LYeithhz47U/133</link>
		<comments>http://ginatrapani.org/spun/posts/2006/11/01/133#comments</comments>
		<pubDate>Thu, 02 Nov 2006 02:17:07 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Announcements]]></category>

		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2006/11/01/133</guid>
		<description><![CDATA[Oh, and this is the reason I&#8217;ve been so woefully absent around these parts the last few months.
]]></description>
			<content:encoded><![CDATA[<p>Oh, and <a href="http://www.amazon.com/exec/obidos/ASIN/0470050659/ref=nosim/lifehackerboo-20">this</a> is the reason I&#8217;ve been so woefully absent around these parts the last few months.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/LYeithhz47U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2006/11/01/133/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2006/11/01/133</feedburner:origLink></item>
		<item>
		<title>Firefox 2.0 extension development</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/a1oBiPN-Aco/firefox-20-extension-development</link>
		<comments>http://ginatrapani.org/spun/posts/2006/11/01/firefox-20-extension-development#comments</comments>
		<pubDate>Thu, 02 Nov 2006 01:55:31 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Extensions]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2006/11/01/firefox-20-extension-development</guid>
		<description><![CDATA[I wrote my first Firefox extension for version 0.9 in September of 2004.  The development process was a huge pain in the ass, but I pressed on, powered by sheer delight that I could develop an interface within the Firefox chrome.
Two years and one point one version later, I&#8217;ve revisited Mozilla&#8217;s extension development docs, [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote my first Firefox extension for version 0.9 in September of 2004.  The development process was a huge pain in the ass, but I pressed on, powered by sheer delight that I could develop an interface within the Firefox chrome.</p>
<p>Two years and one point one version later, I&#8217;ve revisited Mozilla&#8217;s extension development docs, processes and community.  What an improvement!  You can actually make changes to your extension and see them without repackaging, uninstalling, restarting, reinstalling and restarting again!  There&#8217;s a fabulous Extension Maker wizard that produces an extension skeleton starter file set, and batch scripts to do the packaging for you.  It&#8217;s all very exciting.  Here are some tools and reference links I used to update my extensions:</p>
<ul>
<li>The aformentioned <a href="http://ted.mielczarek.org/code/mozilla/extensionwiz/">Extension Wizard</a></li>
<li><a href="http://kb.mozillazine.org/Setting_up_extension_development_environment">Setting up the extension development environment</a> [Mozillazine]</li>
<li><a href="http://kb.mozillazine.org/Getting_started_with_extension_development">Getting started with extension development</a> [Mozillazine]</li>
</ul>
<p>When I was done updating all my extensions, I got all uppity and submitted one to the Mozilla Add-ons directory.  To my surprise and dismay/happiness, an editor tested it and rejected the submission because the extension threw a Javascript error!  (An error that didn&#8217;t keep it from working, mind you, just cluttered up the Error Console.)  I was pretty impressed with their vigilance (and sheepish about my shitty code), so I fixed it and re-submitted.  It just got accepted.</p>
<p>Here&#8217;s a final list of my completed (and very simple) extensions, now compatible with Firefox 2.0:</p>
<ul>
<li><a href="http://ginatrapani.org/workshop/firefox/aboutsite/">About This Site</a> (here it is <a href="https://addons.mozilla.org/developers/itemoverview.php?id=3673">on Mozilla Update</a>)</li>
<li><a href="http://ginatrapani.org/workshop/firefox/showscreencap/">Show Screen Captures</a></li>
<li><a href="http://ginatrapani.org/workshop/firefox/textareawordcounter/">Text Area Word Counter</a></li>
</ul>
<p>I&#8217;ve got a few more extension ideas in the works, especially for web writers.</p>
<p><i>Notes on Mozilla Update:</i>  The great thing about hosting your extension there is that they take care of the auto-update on new versions, count your downloads for you, have per-extension comments enabled and are generally considered a trusted source for extensions (because they, you  know, actually test them, as I found out).  The bad part is that to host on Mozilla Update, you have to remove your custom auto-update URL from the install.rdf file.  So, if you want to host your own extension (like say, to run ads on the page or include them in your custom portfolio) in addition to making it available on Mozilla Update, you have to build TWO separate versions - one, without an updateUrl set for Mozilla Update and one WITH an updateUrl for your own hosted version.  That part kinda sucks.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/a1oBiPN-Aco" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2006/11/01/firefox-20-extension-development/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2006/11/01/firefox-20-extension-development</feedburner:origLink></item>
		<item>
		<title>Comment cleanup</title>
		<link>http://feedproxy.google.com/~r/Spun/~3/QQxkpGMA08E/comment-cleanup</link>
		<comments>http://ginatrapani.org/spun/posts/2006/11/01/comment-cleanup#comments</comments>
		<pubDate>Thu, 02 Nov 2006 01:38:34 +0000</pubDate>
		<dc:creator>Gina Trapani</dc:creator>
		
		<category><![CDATA[Announcements]]></category>

		<category><![CDATA[Code snippets]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://ginatrapani.org/spun/posts/2006/11/01/comment-cleanup</guid>
		<description><![CDATA[UPDATE wp_posts SET comment_status='closed';
DELETE FROM wp_comments;

Sorry folks, comments here on Spun are now disabled - the spam got the better of me.  I know, I know, there are plugins to help manage it, but I simply don&#8217;t have the time.  Email me your thoughts on posts to ginatrapani at gmail.
]]></description>
			<content:encoded><![CDATA[<p><code>UPDATE wp_posts SET comment_status='closed';<br />
DELETE FROM wp_comments;<br />
</code><br />
Sorry folks, comments here on Spun are now disabled - the spam got the better of me.  I know, I know, there are plugins to help manage it, but I simply don&#8217;t have the time.  Email me your thoughts on posts to ginatrapani at gmail.</p>
<img src="http://feeds.feedburner.com/~r/Spun/~4/QQxkpGMA08E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ginatrapani.org/spun/posts/2006/11/01/comment-cleanup/feed</wfw:commentRss>
		<feedburner:origLink>http://ginatrapani.org/spun/posts/2006/11/01/comment-cleanup</feedburner:origLink></item>
	</channel>
</rss>
