<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jon Fox &#187; General</title>
	<atom:link href="http://jonefox.com/blog/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonefox.com/blog</link>
	<description>My rants, ramblings, and random thoughts</description>
	<lastBuildDate>Mon, 24 May 2010 16:12:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/><cloud domain='jonefox.com' port='80' path='/blog/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Interview on James Woodcock&#8217;s Podcast</title>
		<link>http://jonefox.com/blog/2010/05/24/interview-on-james-woodcocks-podcast/</link>
		<comments>http://jonefox.com/blog/2010/05/24/interview-on-james-woodcocks-podcast/#comments</comments>
		<pubDate>Mon, 24 May 2010 16:12:22 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[podcast]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=358</guid>
		<description><![CDATA[I recently did an interview about IntenseDebate on James Woodcock&#8217;s Podcast. Check it out here: http://www.jameswoodcock.co.uk/?p=3421]]></description>
			<content:encoded><![CDATA[<p>I recently did an interview about <a href="http://intensedebate.com">IntenseDebate</a> on <a href="http://www.jameswoodcock.co.uk/?page_id=2518">James Woodcock&#8217;s Podcast</a>.  Check it out here: <a href="http://www.jameswoodcock.co.uk/?p=3421">http://www.jameswoodcock.co.uk/?p=3421</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2010/05/24/interview-on-james-woodcocks-podcast/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Add a custom url shortener to Firefox</title>
		<link>http://jonefox.com/blog/2009/11/30/add-a-custom-url-shortener-to-firefox/</link>
		<comments>http://jonefox.com/blog/2009/11/30/add-a-custom-url-shortener-to-firefox/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 19:52:12 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[jfox.in]]></category>
		<category><![CDATA[short url]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=271</guid>
		<description><![CDATA[I recently wrote a post about why I made my own url shortener. I&#8217;m now porting some of my common uses over to use this new shortener (keep life simple, right?). The first thing I wanted to address was adding an option to the right-click menu to shorten whatever page I was currently viewing and [...]]]></description>
			<content:encoded><![CDATA[<p>I recently wrote a <a href="http://jonefox.com/blog/2009/11/01/my-own-short-urls/">post</a> about why I made my own url shortener.  I&#8217;m now porting some of my common uses over to use this new shortener (keep life simple, right?). The first thing I wanted to address was adding an option to the right-click menu to shorten whatever page I was currently viewing and copy it to the clipboard.  The easiest way I found to do this was to modify an existing Firefox addon called <a href="https://addons.mozilla.org/en-US/firefox/addon/11423">Shorten URL</a>.  It works particularly well because it already supports a TON of shortening services and adding new ones is a breeze.  So how do you do it?</p>
<ol>
<li>First, download <a href="https://addons.mozilla.org/en-US/firefox/addon/11423">the extension</a>.</li>
<li>Next, find your <a href="http://kb.mozillazine.org/Profile_folder_-_Firefox">Firefox profile folder</a>.</li>
<li>In your profile folder, find and open the &#8220;extensions/ShortenURL@loucypher/defaults/preferences&#8221; folder.</li>
<li>You should then find a file named shortenURL_prefs.js &#8211; open it in any text editor.</li>
<li>You should see two large blocks of similar lines repeating &#8211; find the last one in the first block (as of writing this it is <code>pref("extensions.shortenURL.name.145", "w3t.org");</code> and add a new line below it (incrementing the number) and swap out the name w/ whatever you want to reference your url shortener as. (in my case <code>pref("extensions.shortenURL.name.146", "jfox.in");</code></li>
<li>Continue to the end of the file and you should find a matching url line <code>pref("extensions.shortenURL.145", "http://w3t.org/?module=ShortURL&#038;file=Add&#038;mode=API&#038;url=");</code>.  Add a new line below this one incrementing the number again (to match the one in the last step) and adding the url of the page to submit a url to shorten (the url will be appended to the end).  For example: <code>pref("extensions.shortenURL.146", "http://jfox.in/make-tiny.php?url=");</code> (note the example here won&#8217;t actually work because my shortener is private).</li>
<li>Save the file and restart Firefox.  Now go to Tools->Add-ons, find ShortenURL in the list and select &#8220;preferences&#8221;.  You should now be able to find your custom shortener in the list using the name you provided above (in my case jfox.in).  Select your preference and enjoy!</li>
</ol>
<p>A quick trailing note:  This all assumes that your shortener has an interface that allows a url to be passed as a GET parameter and returns the shortened url in plain text as a result of that request.  This is straight forward to implement, but worth mentioning.  You should now be able to shorten simply by right-clicking and selecting the &#8220;Shorten this page URL&#8221; option (which will also copy the short url to your clipboard and put it in the location bar).  Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2009/11/30/add-a-custom-url-shortener-to-firefox/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>My own short URLs</title>
		<link>http://jonefox.com/blog/2009/11/01/my-own-short-urls/</link>
		<comments>http://jonefox.com/blog/2009/11/01/my-own-short-urls/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 16:32:19 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[jfox.in]]></category>
		<category><![CDATA[short url]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=249</guid>
		<description><![CDATA[A little while ago I setup my own short URL service on http://jfox.in. I already know there are tons of free services that already do this and there are even a few open source alternatives of projects aimed at this kind of thing&#8230;so why then did I decide to write my own? There are actually [...]]]></description>
			<content:encoded><![CDATA[<p>A little while ago I setup my own short URL service on http://jfox.in.  I already know there are tons of free services that already do this and there are even a few open source alternatives of projects aimed at this kind of thing&#8230;so why then did I decide to write my own?  There are actually a couple reasons:</p>
<ul>
<li>Full control of the data &#8211; I can get at it wherever, however, and whenever I want to.  I can also move it into different formats and systems at will.</li>
<li>Full control over the service &#8211; I can add whatever features I want in whatever interface I want and not have to worry about the 15 other features I&#8217;ll never use that clutter up my UI.</li>
<li>Full control over the URLs themselves &#8211; I don&#8217;t have to worry about the domain shutting down, remapping my short URLs some time in the future, or what type of header redirect they&#8217;re using to make sure I get my Google juice.</li>
<li>It was fun &#8211; Perhaps the biggest reason I wanted to do this was because it&#8217;s such a simple project and it was kind of a fun exercise for me.</li>
</ul>
<p>Anyone that is code savvy and is considering doing this &#8211; whatever your reasons &#8211; I definitely recommend doing it.  It was simple and something I enjoyed, and it gives me the control I want in such a simple application.  Not every problem makes sense to roll your own solution for, but this is one that does in my mind since it&#8217;s so simple.</p>
<p>I honestly wouldn&#8217;t be surprised if we see more web services offering their own custom URLs.  It allows a bit more brand recognition and all the control issues I mention above.  It also seems that short URL services aren&#8217;t going away anytime soon.</p>
<p>Do you have any thoughts on the merits of short URL services?  Have you written your own or considered doing so?</p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2009/11/01/my-own-short-urls/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Quebec</title>
		<link>http://jonefox.com/blog/2009/10/26/quebec/</link>
		<comments>http://jonefox.com/blog/2009/10/26/quebec/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 20:00:04 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[automattic]]></category>
		<category><![CDATA[canada]]></category>
		<category><![CDATA[quebec]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=213</guid>
		<description><![CDATA[I recently got back from a trip to Quebec City for an Automattic meet up. It was a ton of fun and we cranked out some really interesting projects that will be rolling out over the coming weeks, but I thought I&#8217;d share a few of my photos from the trip here.]]></description>
			<content:encoded><![CDATA[<p>I recently got back from a trip to Quebec City for an <a href="http://automattic.com/">Automattic</a> meet up.  It was a ton of fun and we cranked out some really interesting projects that will be rolling out over the coming weeks, but I thought I&#8217;d share a few of my photos from the trip here.
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1268/' title='IMG_1268'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1268-150x150.jpg" class="attachment-thumbnail" alt="IMG_1268" title="IMG_1268" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1270/' title='IMG_1270'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1270-150x150.jpg" class="attachment-thumbnail" alt="IMG_1270" title="IMG_1270" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1273/' title='IMG_1273'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1273-150x150.jpg" class="attachment-thumbnail" alt="IMG_1273" title="IMG_1273" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1275/' title='IMG_1275'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1275-150x150.jpg" class="attachment-thumbnail" alt="IMG_1275" title="IMG_1275" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1276/' title='IMG_1276'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1276-150x150.jpg" class="attachment-thumbnail" alt="IMG_1276" title="IMG_1276" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1278/' title='IMG_1278'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1278-150x150.jpg" class="attachment-thumbnail" alt="IMG_1278" title="IMG_1278" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1279/' title='IMG_1279'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1279-150x150.jpg" class="attachment-thumbnail" alt="IMG_1279" title="IMG_1279" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1280/' title='IMG_1280'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1280-150x150.jpg" class="attachment-thumbnail" alt="IMG_1280" title="IMG_1280" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1281/' title='IMG_1281'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1281-150x150.jpg" class="attachment-thumbnail" alt="IMG_1281" title="IMG_1281" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1282/' title='IMG_1282'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1282-150x150.jpg" class="attachment-thumbnail" alt="IMG_1282" title="IMG_1282" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1283/' title='IMG_1283'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1283-150x150.jpg" class="attachment-thumbnail" alt="IMG_1283" title="IMG_1283" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1285/' title='IMG_1285'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1285-150x150.jpg" class="attachment-thumbnail" alt="IMG_1285" title="IMG_1285" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1286/' title='IMG_1286'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1286-150x150.jpg" class="attachment-thumbnail" alt="IMG_1286" title="IMG_1286" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1287/' title='IMG_1287'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1287-150x150.jpg" class="attachment-thumbnail" alt="IMG_1287" title="IMG_1287" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1291/' title='IMG_1291'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1291-150x150.jpg" class="attachment-thumbnail" alt="IMG_1291" title="IMG_1291" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1293/' title='IMG_1293'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1293-150x150.jpg" class="attachment-thumbnail" alt="IMG_1293" title="IMG_1293" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1299/' title='IMG_1299'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1299-150x150.jpg" class="attachment-thumbnail" alt="IMG_1299" title="IMG_1299" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1301/' title='IMG_1301'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1301-150x150.jpg" class="attachment-thumbnail" alt="IMG_1301" title="IMG_1301" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1304/' title='IMG_1304'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1304-150x150.jpg" class="attachment-thumbnail" alt="IMG_1304" title="IMG_1304" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1312/' title='IMG_1312'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1312-150x150.jpg" class="attachment-thumbnail" alt="IMG_1312" title="IMG_1312" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1313/' title='IMG_1313'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1313-150x150.jpg" class="attachment-thumbnail" alt="IMG_1313" title="IMG_1313" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1323/' title='IMG_1323'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1323-150x150.jpg" class="attachment-thumbnail" alt="IMG_1323" title="IMG_1323" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1327/' title='IMG_1327'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1327-150x150.jpg" class="attachment-thumbnail" alt="IMG_1327" title="IMG_1327" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1363/' title='IMG_1363'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1363-150x150.jpg" class="attachment-thumbnail" alt="IMG_1363" title="IMG_1363" /></a>
<a href='http://jonefox.com/blog/2009/10/26/quebec/img_1366/' title='IMG_1366'><img width="150" height="150" src="http://jonefox.com/blog/wp-content/uploads/2009/10/IMG_1366-150x150.jpg" class="attachment-thumbnail" alt="IMG_1366" title="IMG_1366" /></a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2009/10/26/quebec/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>5 Things You Shouldn&#8217;t Do To A Developer Working On Fixing A Major Bug</title>
		<link>http://jonefox.com/blog/2008/12/08/5-things-you-shouldnt-do-to-a-developer-working-on-fixing-a-major-bug/</link>
		<comments>http://jonefox.com/blog/2008/12/08/5-things-you-shouldnt-do-to-a-developer-working-on-fixing-a-major-bug/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 06:30:42 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=102</guid>
		<description><![CDATA[For all you non-developers out there that work with developers on a regular basis, here are a few quick tips of things NOT to do when the developer is working on fixing a major bug. Ask for attendance at a meeting which we&#8217;re not really needed at. Assign other work to us &#8211; we need [...]]]></description>
			<content:encoded><![CDATA[<p>For all you non-developers out there that work with developers on a regular basis, here are a few quick tips of things <strong><em>NOT </em></strong> to do when the developer is working on fixing a major bug.</p>
<ol>
<li>Ask for attendance at a meeting which we&#8217;re not really needed at.</li>
<li>Assign other work to us &#8211; we need more weight on our shoulders in these stressful moments!</li>
<li>Ask for some development work to be done on another project &#8211; if we have any available time it&#8217;ll be spent fixing the urgent issue, so by definition we don&#8217;t have time to work on anything else.</li>
<li>Ignore our requests for help solving the problem &#8211; it&#8217;s top priority for us, but your time is better spent asking for updates than helping&#8230;</li>
<li>Send us multiple emails pointing out how serious the bug is &#8211; if we&#8217;re working on fixing it already&#8230;as fast as we can&#8230;a reminder of how urgent it is doesn&#8217;t really help anything.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2008/12/08/5-things-you-shouldnt-do-to-a-developer-working-on-fixing-a-major-bug/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Follow Through</title>
		<link>http://jonefox.com/blog/2008/12/02/follow-through/</link>
		<comments>http://jonefox.com/blog/2008/12/02/follow-through/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 05:22:52 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=100</guid>
		<description><![CDATA[Do you have &#8220;follow through&#8221;? When I say follow through, what I mean is that you can be trusted to do what you say you will do &#8211; on your own. One very important lesson I&#8217;ve learned is that it&#8217;s critical to find people that you can trust to follow through with what they tell [...]]]></description>
			<content:encoded><![CDATA[<p>Do you have &#8220;follow through&#8221;?</p>
<p>When I say follow through, what I mean is that you can be trusted to do what you say you will do &#8211; on your own.  One very important lesson I&#8217;ve learned is that it&#8217;s critical to find people that you can trust to follow through with what they tell you they will do when choosing partners/employees in a startup.  It&#8217;s also critically important that you can be trusted in this regard as well.</p>
<p>Startups by their very nature have limited resources.  Because of this, it is more important than anywhere else that startups are as efficient as possible with these resources.  The most valuable resource for a young company is the time of the employees/founders.  Since everyone is forced to wear many hats and there is always more to be done, time is often a bottleneck.</p>
<p>If you can&#8217;t trust your employees/partners to do what they say they will, then you&#8217;re forced to spend cycles on their problems.  Suddenly, you need to keep track of their tasks so that you can be sure that they complete them all.  You spend extra time checking up on the status of items to make sure they&#8217;re being done on time.  And most importantly, you can&#8217;t give them very much freedom to do their tasks and make them their own because you&#8217;re constantly having to check up on them.  This ends up wasting a lot of your time and a considerable amount of theirs.  You basically end up doubling up your resources on these problems, which is not an efficient way to do things.</p>
<p>Instead, make your first criteria when choosing partners/employees their ability to follow through with what they say they will do.  If you can&#8217;t trust them enough to assume that they&#8217;re doing what they say they will do then you should probably start looking elsewhere.  A young company simply can&#8217;t afford to have resources piled up on a single problem.  You can&#8217;t be second guessing other people in the company constantly or you&#8217;ll find progress slowing to a halt over time.</p>
<p>Find people you can trust to follow through, then give them the freedom to do it.  It&#8217;s the most efficient use of company resources, and a lot less likely to cause blow ups between coworkers stepping on each others&#8217; toes.</p>
<p>Here are a couple quick things to test if you trust your coworkers/have follow through:<br />
1.) Do you find yourself frequently doubling back on a task to check the status of an item?  For example, do you send a lot of emails like: &#8220;What&#8217;s the status on ______?  Did this ever get resolved?&#8221;.<br />
2.) Do you find yourself often asking people to run stuff by you?<br />
3.) Do you find yourself constantly worried about other people&#8217;s tasks?</p>
<p>These are solid signs that you don&#8217;t trust these people to &#8220;follow through&#8221; on their required tasks.  So make you and your company more efficient; find people you can trust and give them the freedom to complete the tasks on their own.  It&#8217;ll make all the difference&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2008/12/02/follow-through/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Uploading vs Downloading</title>
		<link>http://jonefox.com/blog/2008/11/11/uploading-vs-downloading/</link>
		<comments>http://jonefox.com/blog/2008/11/11/uploading-vs-downloading/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 07:52:50 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=96</guid>
		<description><![CDATA[When the internet first started out it was really hard to do much of anything. Browsing in its current form didn&#8217;t exist, and just basic navigation around the web was difficult. Fortunately, we&#8217;ve gotten really good at downloading. With web browsers, search engines, and news feeds it&#8217;s easier than ever to consume tons of content [...]]]></description>
			<content:encoded><![CDATA[<p>When the internet first started out it was really hard to do much of anything.  Browsing in its current form didn&#8217;t exist, and just basic navigation around the web was difficult.  Fortunately, we&#8217;ve gotten really good at downloading.  With web browsers, search engines, and news feeds it&#8217;s easier than ever to consume tons of content online.</p>
<p>A bit slower to rise was the ease of uploading, or contributing new things, to the web.  Although downloading has been easy for the average guy for years, it&#8217;s really just now starting to get to a place where uploading is as easy.  With the rise of <a href="http://wordpress.com">WordPress</a>, <a href="http://flickr.com">Flickr</a>, <a href="http://youtube.com">YouTube</a>, <a href="http://twitter.com">Twitter</a>, and <a href="http://intensedebate.com">IntenseDebate </a>(among others) it&#8217;s become progressively easier to upload your content to the web (in whatever form) and contribute.</p>
<p>So please, don&#8217;t just consume the internet &#8211; help build it by being an uploader too.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2008/11/11/uploading-vs-downloading/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Front End Optimization &#8211; Part 2</title>
		<link>http://jonefox.com/blog/2008/09/21/front-end-optimization-part-2/</link>
		<comments>http://jonefox.com/blog/2008/09/21/front-end-optimization-part-2/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 05:29:50 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=76</guid>
		<description><![CDATA[One fairly common thing in javascript programming is the need to add/edit the html contents of an element on the page. It turns out that there&#8217;s actually a pretty significant performance impact on how quickly this update renders depending on how you do the actual edit. The main 5 ways to add/edit html via javascript [...]]]></description>
			<content:encoded><![CDATA[<p>One fairly common thing in javascript programming is the need to add/edit the html contents of an element on the page.  It turns out that there&#8217;s actually a pretty significant performance impact on how quickly this update renders depending on how you do the actual edit.  The main 5 ways to add/edit html via javascript are the following:</p>
<ul>
<li>Document.write() method</li>
<li>element.innerHTML (before element is in the DOM)</li>
<li>element.innerHTML (after element is in the DOM)</li>
<li>DOM manipulations on the element (before element is in the DOM)</li>
<li>DOM manipulations on the element (after the element is in the DOM)</li>
</ul>
<p>So the first thing to note is that whenever you&#8217;re faced with the question of adding/editing html before or after adding it to the DOM you should always make any changes <strong>BEFORE</strong> adding it to the DOM.  The performance difference of this is pretty significant as if the element is in the DOM the browser must immediately render the changes as the edits are taking place.  If you modify the html before attaching the element to the DOM, however, the updates stay only in memory and don&#8217;t get rendered until the edits are in place.</p>
<p>This is the single most important factor for performance in this task.  In fact, the difference is often so drastic (particularly in IE browsers) that in many cases it&#8217;s actually better to remove the element from the DOM, edit the contents, and re-attach it instead of editing it directly.  This also allows you to sidestep odd inconsistencies in IE with the innerHTML method (in some cases editing the innerHTML attribut7e of an object can cause a browser cache in IE &#8211; in particular when the element is a child of a table element).</p>
<p>Now that we know to edit contents before attaching elements to the DOM, which method should we use?  In general, the order of speeds of the methods is as follows:</p>
<ol>
<li>document.write() method</li>
<li>element.innerHTML attribute</li>
<li>DOM manipulations</li>
</ol>
<p>Document.write is consistently the fastest across browsers and is often the best method to use when it&#8217;s possible.  The main drawback of this method, however, is that it can only be used during initial browser load/rendering.  If the method is used after the page has been initially rendered it will have the undesirable effect of either crashing the browser or clearing the current page and replacing the entire page contents with the write statement instead.  This makes it unusable for adding elements after initial page load or editing the contents of an element after page load, but the pure speed/flexibility (it basically allows you to write any html to the page including inline css and javascript &#8211; though javascript tags must be written as a combined string instead a standard script tag [for example "&lt;scr"+"ipt&gt;"]) make it an option worth using when possible.</p>
<p>The next fastest method is the element.innerHTML method.  This method is very readable and easy to construct quickly in general.  One other suggestion is when concatenating strings to form the innerHTML use a temporary variable and apply it to the element only once.  For example:<br />
<code>var innerHTML = "&lt;div&gt;";<br />innerHTML += "Inner Contents";<br />innerHTML += "&lt;/div&gt;";<br />element.innerHTML = innerHTML;</code></p>
<p>This speeds up rendering (since it only has to update the DOM/render the change once) and prevents some inconsistencies when using the concatenation/assignment operators in certain browsers.</p>
<p>The last, and by far the slowest, method is to do direct DOM manipulations.  This is a broad categorization of using methods like the following:<br /><code>var element = document.createElement('DIV');<br />var element2 = document.createElement('DIV'); <br />element.appendChild(element2);</code><br />
This technique has many disadvantages.  It renders slowly as each element is added and styled as it is appended to the DOM.  Although you can improve this drastically by waiting to attach the top level element to the DOM until all the inner elements are completed, it still doesn&#8217;t compare with the previous methods described above.  This code is also much harder to read (in general) than the above methods as each style, class, and attribute of the element must be assigned individually.  This also leads to much larger code than the previous methods which adds to download time and parsing time.  This method is really only suitable when you&#8217;re editing specific attributes or doing very minor manipulations.</p>
<p>And that wraps up the 5 different methods.  Hopefully someone out there finds this helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2008/09/21/front-end-optimization-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Front End Optimization</title>
		<link>http://jonefox.com/blog/2008/09/10/front-end-optimization/</link>
		<comments>http://jonefox.com/blog/2008/09/10/front-end-optimization/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 03:28:27 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=69</guid>
		<description><![CDATA[Over the last year and a half or so I&#8217;ve spent a lot of time dealing with javascript widgets on web pages. One thing that I learned very early on is that people don&#8217;t have a lot of patience for slow widgets on their blog/website. As a result I&#8217;ve spent a fair amount of time [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last year and a half or so I&#8217;ve spent a lot of time dealing with javascript widgets on web pages.  One thing that I learned very early on is that people don&#8217;t have a lot of patience for slow widgets on their blog/website.  As a result I&#8217;ve spent a fair amount of time trying to hunt down various tips/tricks to speed up load time.  Some of these optimizations take place on the backend (actually serving up the javascript), but a surprising amount of optimization can be done on the frontend that many don&#8217;t even consider.  In order to do my little part to spread the word, I&#8217;ve decided to do a series of posts with some helpful techniques to optimize your front end load time on web sites.  This will be my first series on the blog, but it seems like a popular enough thing these days that I&#8217;ve decided to give it a try.</p>
<p>So first off, why do we care about front end optimization?  Take a look at the breakdown for <a href="http://amazon.com">Amazon.com</a> as an example (click the image for a larger view):<br />
<a href="http://jonefox.com/blog/wp-content/uploads/2008/09/frontend-optimization1.jpg"><img src="http://jonefox.com/blog/wp-content/uploads/2008/09/frontend-optimization1-300x42.jpg" alt="Amazon load time" title="Amazon load breakdown" width="100%"  class="size-medium wp-image-70" /></a></p>
<p>The red bar represents the time it took to serve and download the core page from the server (920ms in this case).  The rest of the 6.34s is spent downloading images, css, js, and rendering/executing it all.  Clearly there is plenty of room for optimization on the front end. (Note: many of the requests have been stripped from the screen shot &#8211; limited only to HTML requests &#8211; for brevity.)  This is just for Amazon &#8211; many other sites are even worse ratios for front end vs. back end load time.</p>
<p>Now that it&#8217;s clear that there is optimization to be done, how does one get started?  I&#8217;d recommend getting started with a couple basic tools right off the bat.  Here&#8217;s my short list:</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug</a> &#8211; great addon for Firefox with tons of features helpful for front end optimizing (among other things)</li>
<li><a href="http://developer.yahoo.com/yslow/">YSlow</a> &#8211; an addon to an addon, YSlow extends Firebug to give it a new tab with a bunch of handy features.  It also has some tips built right in and will tell you which you&#8217;re doing and which you&#8217;re not</li>
<li><a href="http://httpwatch.com/">HttpWatch</a> &#8211; an HTTP traffic sniffer for IE.</li>
</ul>
<p>In my next post I&#8217;ll start covering some basic techniques to improve performance.  Got a tip of your own?  Let me know in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2008/09/10/front-end-optimization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Computing</title>
		<link>http://jonefox.com/blog/2008/08/26/cloud-computing/</link>
		<comments>http://jonefox.com/blog/2008/08/26/cloud-computing/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 07:13:30 +0000</pubDate>
		<dc:creator>jon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cloud computing]]></category>

		<guid isPermaLink="false">http://jonefox.com/blog/?p=59</guid>
		<description><![CDATA[I&#8217;ve recently heard/been involved in a lot of discussion around the concept of cloud computing and whether or not there is an impending evolution/revolution around it. As such, I decided to put in my 2 cents. Let&#8217;s get the punch line out of the way: cloud computing is coming&#8230;so deal with it. Skeptics cite a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently heard/been involved in a lot of discussion around the concept of cloud computing and whether or not there is an impending evolution/revolution around it.  As such, I decided to put in my 2 cents.</p>
<p>Let&#8217;s get the punch line out of the way: cloud computing is coming&#8230;so deal with it.</p>
<p>Skeptics cite a handful of reasons why this is purely &#8220;hype&#8221; as opposed to the way of the future.  Mainly the issues around reliability, accessibility, security, and performance.  I&#8217;ll deal with each of these points individually.</p>
<p>Reliability is no doubt an issue currently.  When one looks at sites like <a href="http://twitter.com">Twitter</a> and the issues surrounding it, it is no wonder that this is a major concern of the skeptics.   It&#8217;s important to remember, however, that we&#8217;re in the early stages of this transition.  Looking back on the initial digital revolution the computers of the day weren&#8217;t very reliable either.  Computers would crash and lose the active document, hardware would fail losing all the documents on the computer, and we still constantly face issues around viruses and data corruption.  As time has gone on, however, we&#8217;ve found solutions to most of these problems.  Word (and many other applications) have periodic auto-save and document recovery features, software has gotten more stable over time, hardware has built-in monitoring to warn of pending failures, and anti-virus has matured while data-redundancy options have begun to go mainstream.  Similarly, the reliability issues around cloud computing will evolve over time.  The network will become more reliable, the individual sites will be held to a higher standard of up-time, and data redundancy will become a trivial task built in to the libraries the applications are built on top of.  There are possible early examples of this already available using solutions like <a href="http://aws.amazon.com/s3">Amazon S3</a> and <a href="http://code.google.com/appengine/">Google AppEngine</a> that aggregate the needs of many applications to take advantage of economies of scale.  As the cloud computing applications mature and become more wide spread the issues around reliability will diminish until web apps are no more or less reliable than their desktop counter parts.</p>
<p>Accessibility is another commonly cited example.  What will we do when we don&#8217;t have access to the internet?  How will we use these applications?  My answer to this: A long time ago, we didn&#8217;t have laptops.  Instead desktops (and their corresponding data) was trapped in that single location on that single machine.  As the technology matured we got cheaper desktops that we could buy for personal/home use and laptops that we could take with us anywhere.  This freed users to use their applications wherever their hearts desired.  It&#8217;s easy to see that internet connectivity is getting more and more wide spread.  Wifi is everywhere and access to cellular networks is filling in the gaps.  As this trend continues it&#8217;s easy to see that internet connectivity will one day be available wherever electricity is available (which we often take for granted now).  In the transition, however, we&#8217;ll continue to see development around projects like <a href="http://gears.google.com/">Gears</a> that allow users to take their web app experience offline and re-sync when the internet becomes available.  Accessibility is an issue fading fast and will fade even faster as the trend continues.</p>
<p>The issues around security are real and worth noting.  Having data accessible via the internet means it&#8217;s accessible to everyone on the internet if the proper security isn&#8217;t in place.  Although the internet isn&#8217;t exactly built for security there have been huge leaps in this area over the last few years.  As encryption becomes more prevalent and new systems of multi-authentication become widespread we&#8217;ll see many of the same types of security issues we&#8217;ve faced with laptops come and go in the web space.  Ultimately many of the security issues will come from user-error and social engineering, not software failure.  While this is significant, it&#8217;s important to note that these same issues would be faced on a traditional desktop application and/or even pre-digital revolution data storage (old school papers and files).  The biggest holes in security will continue to be in the people accessing the data, not the systems in place to protect it.</p>
<p>And lastly, performance is a commonly mentioned issue.  Web apps have a reputation as being a bit slow and clunky.  This mostly stems from the fact that these applications are built in JavaScript which is a powerful, but dated system.  JavaSscript is interpreted, which makes it run much slower than compiled counter parts.  As the technology matures, however, we&#8217;ll see the same trends we saw in the desktop space: initially the improvements will come from clever programmers and minor improvements in the processing of the code itself, but over time the hardware improvements will out-pace the software changes allowing the same applications to run faster on the new hardware/platforms (in this case it&#8217;ll most likely be a combination of hardware improvements and browser enhancements).  The performance woes will subside as we see the line between the client and the server blending (as made possible by the technical enhancements previously mentioned).</p>
<p>In summary, although there are some real issues around the current state of cloud computing many of these issues aren&#8217;t all that different than the issues we faced in the initial digital revolution.  And, just like in the previous revolution, these concerns are far out-weighed by the advantages of the cloud computing model.  The accessibility of having <em>your</em> data and <em>your</em> application available from <em>any</em> internet enabled device is very powerful.  Add to that the advantages of direct, digital distribution (software updates are seamless and immediate&#8230;dramatically lower distribution costs as everything moves to digital downloads) and you&#8217;ve got a real force behind this movement.  Watch for clients to become simpler, more prevalent, and the emphasis to move more to form factor and usability as opposed to power and performance.</p>
<p>The cloud computing revolution is coming&#8230;might as well embrace it.</p>
]]></content:encoded>
			<wfw:commentRss>http://jonefox.com/blog/2008/08/26/cloud-computing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
