<?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>The Joy of Hack</title>
	<atom:link href="http://www.aijazansari.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aijazansari.com</link>
	<description>For people who like to make things</description>
	<lastBuildDate>Tue, 20 Jul 2010 13:20:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>In Search Of A Good Alarm Clock App</title>
		<link>http://www.aijazansari.com/2010/07/20/in-search-of-a-good-alarm-clock-app/</link>
		<comments>http://www.aijazansari.com/2010/07/20/in-search-of-a-good-alarm-clock-app/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 13:20:06 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Alarm]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Evo]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=718</guid>
		<description><![CDATA[When I recently switched from the iPhone to HTC Evo running Android, I found the Evo's Alarm Clock app surprisingly primitive.  I looked for replacements on the Android Market and found mobitobi's Gentle Alarm, one of the best-written Android applications I've seen so far.]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-722" href="http://www.aijazansari.com/2010/07/20/in-search-of-a-good-alarm-clock-app/mobitobi/"><img class="alignleft size-full wp-image-722" title="GentleAlarm by Mobitobi" src="http://www.aijazansari.com/wp-content/uploads/2010/07/mobitobi.jpg" alt="GentleAlarm by Mobitobi" width="167" height="266" /></a>When I recently switched from the iPhone to HTC Evo running Android, I found the Evo&#8217;s Alarm Clock app surprisingly primitive.  When I had multiple alarms set, it wouldn&#8217;t sort them by the time of day.  Predictably, I started looking for alarm clock apps online, but the others were even more primitive.  One was so bad that once the alarm went off, there was no way to turn it off other than rebooting the phone.</p>
<p>As I was beginning to lose hope of finding a usable app, and second-guess my choice of phones, I found Gentle Alarm by <a title="GentleAlarm by mobitobi" href="http://mobitobi.com/en/android/gentlealarm.php">mobitobi</a>.   At €1.59 it&#8217;s one of the best-written Android applications I&#8217;ve bought so far.</p>
<p>It&#8217;s got the fundamentals right &#8211; multiple alarms (sorted by time of day!), snooze, customizable sounds, etc.  It&#8217;s also got a feature I didn&#8217;t think I wanted, but now need.  The writers of the software believe that when you wake up during the REM phase of your sleep (light sleep), you&#8217;re more refreshed than when you wake up from deep sleep.  To that end, if you want you can create alarm profiles where the alarms start ringing very softly as much as 30 minutes prior to the actual alarm time.</p>
<p>The idea is that if you&#8217;re in REM sleep, the soft alarm will be enough to wake you.  If you&#8217;re in deep sleep, you&#8217;ll sleep right through it, and hopefully be back in REM by the main alarm time.  So really what you&#8217;re doing is setting two alarms for each alarm time &#8211; the pre-alarm that&#8217;s really soft and starts a configurable amount of time prior to the second alarm &#8211; the one that&#8217;s louder.  Even the main alarm can be configured so that the volume gently gets louder over a period of time.</p>
<p>I&#8217;ve found this gradual ramping-up of intensity to be very comforting &#8211; I no longer have to be shocked out of bed by a blaring buzz next to my ear.</p>
<p>The app also has other features that I don&#8217;t use like a captcha system to &#8216;prove you&#8217;re awake&#8217; so that you don&#8217;t turn the alarm off in your sleep.  It also has a night-time display that can be muted so that it doesn&#8217;t illuminate a dark bedroom.</p>
<p>There are several wristwatches and bedside alarm clocks available that provide this functionality, but they cost hundreds of dollars (US).  I&#8217;ve found that this app gets the job done admirably for a fraction of the cost.  There is one thing you have to be careful about: Because of the way Android handles long-running tasks you have to make sure that you&#8217;ve installed a task manager like &#8220;Advanced Task Manager&#8221; and that Gentle Alarm is on its &#8220;exception list.&#8221;  This way, the system won&#8217;t kill the Alarm Clock process thinking it&#8217;s a long-running job that&#8217;s needlessly using system resources.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/07/20/in-search-of-a-good-alarm-clock-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Processing A List Of Files In bash</title>
		<link>http://www.aijazansari.com/2010/07/17/processing-a-list-of-files-in-bash/</link>
		<comments>http://www.aijazansari.com/2010/07/17/processing-a-list-of-files-in-bash/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 05:21:53 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=672</guid>
		<description><![CDATA[When you&#8217;re working in Unix or Linux or even Mac OS X, there are often times when you need to apply the same command to a list of files.  In this post I&#8217;ll show you a couple of quick ways to do this using the bash shell. Let&#8217;s assume you have a command called that [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_706" class="wp-caption alignleft" style="width: 295px"><a rel="attachment wp-att-706" href="http://www.aijazansari.com/2010/07/17/processing-a-list-of-files-in-bash/ogilvietunnel/"><img class="size-medium wp-image-706" title="Under the tracks at Washington and Canal" src="http://www.aijazansari.com/wp-content/uploads/2010/07/OgilvieTunnel-285x189.jpg" alt="Under the tracks at Washington and Canal" width="285" height="189" /></a><p class="wp-caption-text">Under the tracks at Washington and Canal</p></div>
<p>When you&#8217;re working in Unix or Linux or even Mac OS X, there are often times when you need to apply the same command to a list of files.  In this post I&#8217;ll show you a couple of quick ways to do this using the bash shell.</p>
<p>Let&#8217;s assume you have a command called <span class="icode">process</span> that takes a file name as its input and processes the file in place.  For example, if you want to process the file at <span class="icode">/tmp/f1</span>, the command would be</p>
<pre class="brush: plain;">process /tmp/f1</pre>
<p>.  Let&#8217;s also say that after processing a file you want to archive it, using the <span class="icode">archive</span> command.</p>
<p>Now, if you want to process and archive files <span class="icode">/tmp/f1</span>, <span class="icode">/tmp/f2</span> and <span class="icode">/tmp/f3</span> you could either do this:</p>
<pre class="brush: plain;">
./process /tmp/f1
./archive /tmp/f1
./process /tmp/f2
./archive /tmp/f2
./process /tmp/f3
./archive /tmp/f3
</pre>
<p>or, you could use the bash keyword <span class="icode">for</span> and process all files in a loop like this:</p>
<pre class="brush: plain;">
for f in /tmp/f1 /tmp/f2 /tmp/f3
do
    ./process $f
    ./archive $f
done
</pre>
<p>That&#8217;s a lot less typing.  Let&#8217;s look at this loop closely:</p>
<p>A <span class="icode">for</span> loop used like this has three key components: the loop variable, the loop list and the loop body.  Let&#8217;s identify them in reverse order: The loop body is the part between the <span class="icode">do</span> and <span class="icode">done</span> keywords.  The loop list is the list of &#8216;things&#8217; over which you want the for loop to iterate.  In this case, the loop list is the list of files /tmp/f1 through /tmp/f3.  Note that the items in the loop list are separated by spaces.</p>
<p>The last component that makes the for loop work is the loop variable.  In this example the loop variable is called <span class="icode">f</span>.  This means that in the body of the loop, the loop variable <span class="icode">f</span> will be used as a placeholder for each of the items in the loop list.</p>
<p>The first time through the loop, the loop variable <span class="icode">f</span> will have the value <span class="icode">/tmp/f1</span>.  To refer to the value of the loop variable, you put a &#8216;$&#8217; before its name.  That&#8217;s why the body of the loop contains <span class="icode">process $f</span> and not <span class="icode">process f</span>.  <span class="icode">process f</span> would attempt to process a file named &#8216;f&#8217;, while <span class="icode">process $f</span> processes /tmp/f1 (in the first iteration of the loop).</p>
<p>Let&#8217;s test this out just to be sure.  Let&#8217;s create a dummy <span class="icode">process</span> program that does nothing other than print out the name of the file it&#8217;s processing.</p>
<pre class="brush: plain;">
#!/bin/bash

echo &quot;process - processing file $1&quot;;
</pre>
<p>Let&#8217;s also create an <span class="icode">archive</span> program that prints out the name of the file it&#8217;s archiving:</p>
<pre class="brush: plain;">
#!/bin/bash

echo &quot;archive - archiving file $1&quot;;
</pre>
<p>Now, you could type the following on the command line:</p>
<pre class="brush: plain;">
for f in /tmp/f1 /tmp/f2 /tmp/f3
do
    ./process $f
    ./archive $f
done
</pre>
<p>but if you&#8217;re like me and you prefer to see everything on the same line, you could instead type in the following one line:</p>
<pre class="brush: plain;">
for f in /tmp/f1 /tmp/f2 /tmp/f3; do ./process $f; ./archive $f; done
</pre>
<p>What&#8217;s different here is that you need the two semicolons (;) to tell bash where the loop list and loop body end.</p>
<p>Whichever method you choose, you&#8217;ll see the following output:</p>
<pre class="brush: plain;">

process - processing file /tmp/f1
archive - archiving file /tmp/f1
process - processing file /tmp/f2
archive - archiving file /tmp/f2
process - processing file /tmp/f3
archive - archiving file /tmp/f3
</pre>
<p>As you can see, the loop body was executed three times, and each time the value of the loop variable f was used wherever there was a <span class="icode">$f</span> in the loop body.</p>
<h3>Using Wildcards With Loops</h3>
<p>Sometimes you may have so many files in the loop list that you don&#8217;t want to type all their names onto the comand line.  In cases like this you could use wildcards.</p>
<p>Let&#8217;s say you want to process all files whose names end with <span class="icode">.txt</span>. You can do that by replacing the loop list with the appropriate regular expression:</p>
<pre class="brush: plain;">
for f in *.txt; do ./process $f; ./archive $f; done
</pre>
<p>Now, even if you have a hundred <span class="icode">.txt</span> files to process, this short command line will still work for you.</p>
<p>If you want to process all <span class="icode">.txt</span> and <span class="icode">.jpg</span> files, you could use either of the following two methods:</p>
<pre class="brush: plain;">
for f in *.txt *.jpg ; do ./process $f; ./archive $f; done
</pre>
<p>or</p>
<pre class="brush: plain;">
for f in *.{txt,jpg}; do ./process $f; ./archive $f; done
</pre>
<h3>In Conclusion</h3>
<p>As you can see, it&#8217;s easy to perform the same operations on a bunch of files when you use loops.  Loops are exceptionally useful as one-time command-line hacks.  It is important to remember that loops are not appropriate for every task.  There are times when the loop body is so complex that it&#8217;s safer to abandon the command line method and instead &#8216;factor out&#8217; the complexity into a script in bash or other scripting language.</p>
<p>There are also times when the files on which you want to operate are all over the disk drive, or in many subdirectories of the current directory.  As we&#8217;ll see in a later post, there are other common programs like &#8216;find&#8217; that are perfect in this case.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/07/17/processing-a-list-of-files-in-bash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Backing Up Data With rsync</title>
		<link>http://www.aijazansari.com/2010/04/18/backing-up-data-with-rsync/</link>
		<comments>http://www.aijazansari.com/2010/04/18/backing-up-data-with-rsync/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 03:46:03 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Backups]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Macs]]></category>
		<category><![CDATA[rsync]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=442</guid>
		<description><![CDATA[This post shows you how to use the 'rsync' command to back up data from one directory to another (or one drive to another).  ]]></description>
			<content:encoded><![CDATA[<div id="attachment_661" class="wp-caption alignleft" style="width: 295px"><a rel="attachment wp-att-661" href="http://www.aijazansari.com/2010/04/18/backing-up-data-with-rsync/20081224-img_4891-edit/"><img class="size-medium wp-image-661" title="The Agra Fort" src="http://www.aijazansari.com/wp-content/uploads/2010/04/20081224-IMG_4891-Edit-285x190.jpg" alt="The Agra Fort" width="285" height="190" /></a><p class="wp-caption-text">At the Agra Fort, on the way to the Public Hall</p></div>
<p>In a <a title="What To Do When Your Mac Is Temporarily Disabled" href="http://www.aijazansari.com/2009/12/24/what-to-do-when-your-mac-is-temporarily-disabled/">earlier post</a> I wrote about how important it is to have your data backed up.  On my Macs, my main backup utility is <a title="Apple's Time Machine" href="http://www.apple.com/macosx/what-is-macosx/time-machine.html">Time Machine</a>, which comes pre-installed with the Mac OS.  Time Machine can also back up external hard drives, even though it may not be obvious how to do it.  <a title="Does Time Machine Back Up External Hard Drives?" href="http://www.onedigitallife.com/2007/10/30/does-time-machine-backup-external-drives/">This article</a> shows you how to change the default settings to do this.</p>
<p>If you don&#8217;t have Time Machine &#8211; for example, if you&#8217;re using Linux -  the <em>rsync</em> command can be almost as easy to use and it can be used to back up your data.  Now, rsync is a very powerful command that has dozens of options, but three options are all you need for simple backups.  Let&#8217;s say you save all your photos on an external drive visible at /Volumes/Media.      And  you want to back it up on another drive located at /Volumes/Backup.  The following command would do this for you:</p>
<pre class="brush: plain;">

rsync -avh /Volumes/Media /Volumes/Backup
</pre>
<p>The preceding command will copy all of /Volumes/Media, and place it inside a subdirectory of /Volumes/Backup, called Media.  In other words, /Volume/Backup/Media will contain everything that /Volumes/Media contains.  But here&#8217;s the really neat part: Every subsequent time you invoke this command, rsync will only copy those files that are different from what is already in the destination directory (or those files that are new).  So if you copy 500 pictures on one day, and then back up the directory as shown above, and then import 10 new pictures into /Volumes/Media, and then back up again, the second backup will only copy the 10 new pictures, not all 510.</p>
<p>Since Mac OS X is also based on UNIX, the above command will work on the Mac OS just as well as it works on Linux or UNIX.</p>
<p>For more details on the rsync command, please see the <a title="The rsync documentation page" href="http://samba.anu.edu.au/rsync/documentation.html">rsync documentation page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/04/18/backing-up-data-with-rsync/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Now Considers Website Speed In Its Ranking</title>
		<link>http://www.aijazansari.com/2010/04/10/google-now-considers-website-speed-in-its-ranking/</link>
		<comments>http://www.aijazansari.com/2010/04/10/google-now-considers-website-speed-in-its-ranking/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 19:55:15 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[TaskForest]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=617</guid>
		<description><![CDATA[Google reported yesterday that their search engine will now include a website&#8217;s speed in the list of factors it uses to decide how high to rank the site in its search results.  In this post I consider what this means for web developers and what steps you can take to make your site faster. Google [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-634" href="http://www.aijazansari.com/2010/04/10/google-now-considers-website-speed-in-its-ranking/googlewebmaster/"></a></p>
<p><img class="alignleft size-medium wp-image-634" title="GoogleWebmaster" src="http://www.aijazansari.com/wp-content/uploads/2010/04/GoogleWebmaster-285x156.png" alt="" width="285" height="156" /><a href="http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html">Google reported yesterday</a> that their search engine will now include a website&#8217;s speed in the list of factors it uses to decide how high to rank the site in its search results.  In this post I consider what this means for web developers and what steps you can take to make your site faster.<span id="more-617"></span></p>
<p>Google has made it clear that speed is not the primary factor when determining page rank:</p>
<blockquote><p>While site speed is a new signal, it doesn&#8217;t carry as much weight as the  <a href="http://www.youtube.com/watch?v=muSIzHurn4U">relevance of a  page</a>. Currently, fewer than 1% of search queries are affected by the  site speed signal in our implementation and the signal for site speed  only applies for visitors searching in English on Google.com at this  point.</p></blockquote>
<p>It is, however, a turning point for web site developers.  What Google is really doing is putting a tangible value on the User Experience.  A fast site makes for a more satisfactory experience, and linking to fast sites also makes users happier with Google.  I know how frustrating it is to see what appears to be a promising search result on Google, only to find the site very sluggish once I click through Google&#8217;s recommendation.  So, like it or not, you and I will now have to make sure we at least consider our sites&#8217; rendering speeds.</p>
<p>As I had mentioned in a <a title="The Performace Cost of Using WordPress" href="http://www.aijazansari.com/2010/03/31/performance-cost-of-using-wordpress/">earlier post</a>, I recently changed the taskforest.com website to static HTML from a template-based system.   After reading Google&#8217;s blog entry, I installed <a title="Firebug" href="http://getfirebug.com/">Firebug</a> on Firefox, as well as two different page performance measuring tools: <a title="Page Speed for Firebug" href="http://code.google.com/speed/page-speed/index.html">PageSpeed</a> and <a href="http://developer.yahoo.com/yslow/">YSlow from Yahoo</a> and started testing out the TaskForest web site.  To my dismay, the site scored a paltry 76/100 on PageSpeed and a &#8216;D&#8217; (67/100) on YSlow.  I&#8217;m glad to say that in less than an hour I was able to make the changes that most significantly improved my site&#8217;s speed.</p>
<p>There were four major areas in which the two tools recommended changes:</p>
<dl>
<dt>Exploiting Browsers&#8217; Caches</dt>
<dd>The site was not using the Expires response headers. As <a title="Optimizing Page Performance Via Caching" href="http://code.google.com/speed/page-speed/docs/caching.html">this document from Google</a> shows, proper usage of this HTTP header can greatly reduce load on the server as well as clients.The Expires header tells the client how long the server expects the resource to stay unchanged.  For images like logos and screenshots that don&#8217;t change very often, this period could (and should) be as high as few months, possibly even the maximum allowed value &#8211; one year.  For HTML pages that change often, you could set it to 2-7 days. </dd>
<dd>The taskforest site which was using Apache 1.41, was not sending the Expires HTTP response header. The reason is that the module that sets this, <em>mod_expires</em>, is not enabled by default. </dd>
<dt>Combining External CSS</dt>
<dd>The website was using three CSS style sheets.  One was my own &#8216;styles.css,&#8217; but the other two were Yahoos YUI style sheets.  For every request for a web page, there were 3 additional requests for style sheets. </dd>
<dt>Combining External Javascript</dt>
<dd>Just like style sheets, There were 6 Javascript files that were being served with every page. </dd>
<dt>Using Compression</dt>
<dd>The website was not compressing the data it sent to the client.  As <a title="Using Compression" href="http://code.google.com/speed/articles/use-compression.html">this article</a> and the video below from Google shows, data compression can have a major impact on the size of the payload the server delivers to the client, thus making the site faster.</dd>
<dd><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Mjab_aZsdxw&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/Mjab_aZsdxw&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></dd>
</dl>
<h3>Optimizing the site</h3>
<p>So the first order of business was to enable <em>mod-expires</em> and install and activate <em>mod_gzip</em>.  These are the Apache modules that enable the Expires header and Response compression.  I reconfigured Apache with the &#8211;enable-module=expires and &#8211;activate-module=src/modules/gzip/mod_gzip.c options.  Previously, the relevant lines in my httpd.conf file looked like this:</p>
<pre class="brush: plain;">
&lt;VirtualHost 216.139.227.47&gt;
 ServerName www.taskforest.com
 DocumentRoot &quot;.../taskforest/htdocs/website&quot;
&lt;/VirtualHost&gt;
</pre>
<p>After installing the two new modules, my httpd.conf file looked like this:</p>
<pre class="brush: plain;">
&lt;VirtualHost 216.139.228.44&gt;
 ServerName www.taskforest.com
 DocumentRoot &quot;.../taskforest/htdocs/website&quot;

 FileEtag None

 # enable expirations
 ExpiresActive On

 # unless overridden elsewhere resources expires
 # after 60 days in the client's cache
 #
 ExpiresDefault &quot;access plus 60 days&quot;

 # The site's feed expires after 1 day in the cache
 ExpiresByType application/xml A86400

 # HTML files expire after 1 day in the cache
 ExpiresByType text/html A86400

 # Turn compressing on
 mod_gzip_on Yes

 # Don't bother compressing tiny files
 mod_gzip_minimum_file_size  1002

 mod_gzip_maximum_file_size  0
 mod_gzip_maximum_inmem_size 60000

 # Compress XML files, text files (including HTML)
 # and directory listings
 mod_gzip_item_include mime &quot;application/xml&quot;
 mod_gzip_item_include mime text/*
 mod_gzip_item_include mime &quot;httpd/unix-directory&quot;

 # Compress files based on their names as well
 mod_gzip_item_include file &quot;\.txt$&quot;
 mod_gzip_item_include file &quot;\.html$&quot;
 mod_gzip_item_include file &quot;\.css$&quot;
 mod_gzip_item_include file &quot;\.js$&quot;

 mod_gzip_dechunk Yes
 mod_gzip_temp_dir &quot;/tmp&quot;
 mod_gzip_keep_workfiles No

&lt;/VirtualHost&gt;
&lt;VirtualHost 216.139.228.44&gt;
 ServerName taskforest.com
 RedirectMatch (.*) http://www.taskforest.com$1
&lt;/VirtualHost&gt;
</pre>
<p>For the multiple CSS files, I just copied both of the YUI  style sheets into my styles.css file, preserving the copyright comments.  As for the YUI javascript files, it turns out that none of them were being used!  They were just copied and pasted from the taskforestd webserver web site, which does use the javascript files.  I was able to delete them altogether.  It was rather embarrassing to realize that the site was serving unused files.  But I was glad to have the tools that helped me realize this.</p>
<h3>Results of Optimization</h3>
<p>The results of the optimization were startling.  The PageTest scores originally looked like this:</p>
<div id="attachment_639" class="wp-caption alignnone" style="width: 385px"><a rel="attachment wp-att-639" href="http://www.aijazansari.com/2010/04/10/google-now-considers-website-speed-in-its-ranking/pagespeedorig/"><img class="size-full wp-image-639 " title="PageSpeed Results Before Optimization" src="http://www.aijazansari.com/wp-content/uploads/2010/04/PageSpeedOrig.png" alt="PageSpeed Results Before Optimization" width="375" height="436" /></a><p class="wp-caption-text">PageSpeed Results Before Optimization</p></div>
<p>Now, after the optimization, the report was much more respectable:</p>
<div id="attachment_640" class="wp-caption alignnone" style="width: 457px"><a rel="attachment wp-att-640" href="http://www.aijazansari.com/2010/04/10/google-now-considers-website-speed-in-its-ranking/pagespeed/"><img class="size-full wp-image-640" title="PageSpeed Results After Optimization" src="http://www.aijazansari.com/wp-content/uploads/2010/04/PageSpeed.png" alt="PageSpeed Results After Optimization" width="447" height="473" /></a><p class="wp-caption-text">PageSpeed Results After Optimization</p></div>
<p>This exercise gave me new insight into what is needed to make a website faster.  It&#8217;s not just the fastest machine and the most optimized database that matters.  One also has to consider the fundamental characteristics of the Web, and HTTP in particular, where a little effort can bring significant improvement.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/04/10/google-now-considers-website-speed-in-its-ranking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox Search Shortcut</title>
		<link>http://www.aijazansari.com/2010/04/03/firefox-search-shortcut/</link>
		<comments>http://www.aijazansari.com/2010/04/03/firefox-search-shortcut/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 17:00:00 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Efficiency]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=528</guid>
		<description><![CDATA[Wow.  This cool Firefox feature has been around since 2005, but I just found out about it a few months ago!  I swear I haven&#8217;t been living in a cave all this time.  So if you&#8217;re like me and don&#8217;t know about this yet, listen up:  In Firefox, you can bookmark a search with a [...]]]></description>
			<content:encoded><![CDATA[<p>Wow.  This cool Firefox feature has been around since 2005, but I just found out about it a few months ago!  I swear I haven&#8217;t been living in a cave all this time.  So if you&#8217;re like me and don&#8217;t know about this yet, listen up:  In Firefox, you can bookmark a search with a keyword, and then use that keyword in your URL entry field.  As <a href="http://johnbokma.com/firefox/keymarks-explained.html">this article</a> shows, you right-click on the input field and select &#8220;Add a Keyword for this Search.&#8221;  This will allow you to bookmark the search and add a keyword.  I usually use two letter keywords like &#8216;we&#8217; for weather.com and &#8216;im&#8217; for imdb.com.</p>
<p>In the case of &#8216;im,&#8217; I first manually went to the imdb.com site and looked for the search form at the top of the page.  I right-clicked on the input field, and selected &#8216;im&#8217; as the keyword for that search.  So now, whenever I want to look up something on imdb, all I have to do is hit &#8216;Cmd-L&#8217; on my Mac to shift focus to the URL bar, enter &#8216;im&#8217; followed by the query string and then hit enter.  Then I&#8217;m taken directly to the search results page.  It saves me from having to navigate to imdb.com first. It works really well for all kinds of searches, including CPAN, Wikipedia and Weather.com.</p>
<p>I can&#8217;t believe I wasn&#8217;t aware of this shortcut all this time <img src='http://www.aijazansari.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_596" class="wp-caption alignnone" style="width: 344px"><a rel="attachment wp-att-596" href="http://www.aijazansari.com/2010/04/03/firefox-search-shortcut/addkeyword/"><img class="size-full wp-image-596" title="Adding a Keyword to the CPAN Search Box" src="http://www.aijazansari.com/wp-content/uploads/2010/04/addKeyword.png" alt="Adding a Keyword to the CPAN Search Box" width="334" height="298" /></a><p class="wp-caption-text">Adding a Keyword to the CPAN Search Box</p></div>
<div id="attachment_595" class="wp-caption alignnone" style="width: 346px"><a rel="attachment wp-att-595" href="http://www.aijazansari.com/2010/04/03/firefox-search-shortcut/enterkeyword/"><img class="size-full wp-image-595" title="Entering the Keyword" src="http://www.aijazansari.com/wp-content/uploads/2010/04/EnterKeyword.png" alt="Entering the Keyword" width="336" height="175" /></a><p class="wp-caption-text">Entering the Keyword</p></div>
<div id="attachment_594" class="wp-caption alignnone" style="width: 422px"><a rel="attachment wp-att-594" href="http://www.aijazansari.com/2010/04/03/firefox-search-shortcut/keywordprompt/"><img class="size-full wp-image-594" title="The Keyword Search In Action" src="http://www.aijazansari.com/wp-content/uploads/2010/04/KeywordPrompt.png" alt="The Keyword Search In Action" width="412" height="65" /></a><p class="wp-caption-text">The Keyword Search In Action</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/04/03/firefox-search-shortcut/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TaskForest Write-up at SourceForge</title>
		<link>http://www.aijazansari.com/2010/04/02/taskforest-write-up-at-sourceforge/</link>
		<comments>http://www.aijazansari.com/2010/04/02/taskforest-write-up-at-sourceforge/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 17:10:50 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[My Software]]></category>
		<category><![CDATA[SourceForge]]></category>
		<category><![CDATA[TaskForest]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=606</guid>
		<description><![CDATA[SourceForge.net has a blog in which they feature a different hosted project every day.  Today&#8217;s blog entry features my open-source job scheduler, TaskForest.  I&#8217;d like to take this opportunity to thank SourceForge for their support of open source software.]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment  wp-att-607" href="http://www.aijazansari.com/2010/04/02/taskforest-write-up-at-sourceforge/taskforestlogo/"><img class="alignleft  size-full wp-image-607" title="TaskForest Logo" src="http://www.aijazansari.com/wp-content/uploads/2010/04/TaskForestLogo.gif" alt="TaskForest Logo" width="154" height="74" /></a>SourceForge.net has a blog in which they feature a different hosted project every day.  <a href="https://sourceforge.net/blog/robust-job-scheduling-lives-in-taskforest/">Today&#8217;s blog entry</a> features my open-source job scheduler, <a href="http://www.taskforest.com/">TaskForest</a>.  I&#8217;d like to take this opportunity to thank SourceForge for their support of open source software.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/04/02/taskforest-write-up-at-sourceforge/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Communicating During A Crisis</title>
		<link>http://www.aijazansari.com/2010/04/01/communicating-during-a-crisis/</link>
		<comments>http://www.aijazansari.com/2010/04/01/communicating-during-a-crisis/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 04:02:41 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Crisis]]></category>
		<category><![CDATA[Delegation]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Honesty]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Pogue]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=529</guid>
		<description><![CDATA[A couple of recent outages in the internet industry got me thinking about the importance of communicating with clients during a crisis.  I write about the four key points to consider when trying to communicate with clients during crises.]]></description>
			<content:encoded><![CDATA[<p>A few day ago the data center where I used to host my name servers lost its connection to the Internet for a very long time (almost 36 hours).   Whatever the cause, the web, mail and application servers of customers big and small were dead in the water.  There was no way to reach them via the Internet.  The data center&#8217;s owner, who&#8217;s a friend of mine, was on the phone with his service providers, getting the issue sorted out.  In the first 24 hours I sent him around five text messages and was able to speak with him a couple of times.  However, many of his other clients couldn&#8217;t reach him, and some of them even called me asking if I knew what was going on.</p>
<p>Also that week, many of us heard of Line2, an app for the iPhone that allows you to make calls using WiFi and bypassing AT&amp;T.  After New York Times columnist David Pogue <a href="http://www.nytimes.com/2010/03/25/technology/personaltech/25pogue.html">wrote about it</a>, hundreds of readers went to the iTunes store to download the app, only to find it missing.  Soon after, Pogue received hundreds of angry emails blaming him for bringing the app to Apples attention, saying that Apple pulled the app.  After some investigative work <a href="http://pogue.blogs.nytimes.com/2010/03/27/why-the-line-2-app-is-up-and-down/">Pogue found out</a> that it was the app developers themselves who pulled the app off the iTunes store in response to a denial of service attack &#8211; automated sign-ups.  In that article&#8217;s comments, Pogue noted that a lot of the finger pointing could have been averted if the developers simply mentioned on their website that they had pulled the app while they worked on the denial of service attack.</p>
<p><a rel="attachment wp-att-577" href="http://www.aijazansari.com/2010/04/01/communicating-during-a-crisis/question/"><img class="alignleft size-full wp-image-577" title="Question" src="http://www.aijazansari.com/wp-content/uploads/2010/04/question.png" alt="Question" width="204" height="140" /></a>These episodes got me thinking about the importance of communicating  with clients during a crisis.  Most individuals and businesses that I&#8217;m  familiar with have very well-planned procedures in the case of fire or  building evacuation.  But that&#8217;s seldom the case with digital crises  like internet access outages or denial of service attacks.</p>
<p><a href="http://www.ehow.com/how_15981_communicate-during-crisis.html">This article</a> on ehow.com has some good instructions on how to communicate during crises.  My own advice is to pay attention to the key questions:</p>
<dl>
<dt>How</dt>
<dd>Have a plan that specifies how you will communicate with clients, especially when your normal means of communication are not available.  In the case of my friend, he couldn&#8217;t email his clients, or even update his own website.  I think the best thing he could have done to prepare for this would be to have one name server at a competitor&#8217;s data center, and have that name server be one of those responsible for his domain.  As his clients noticed their own sites were down, the next thing most of them would do (as I did) is check the website of the data center.  With a couple of quick commands, he could redirect his domain to a static web page that would give clients the information they need.  If that were planned in advance, this entire setup could be arranged for about $6 to $10 per month.  Not bad at all.</dd>
<dt>Who</dt>
<dd>Identify what needs to be done to open the channels of communication during a crisis and assign your staff specific roles.  If you&#8217;re the president of the company you may be too busy working behind the scenes calling in favors or negotiating with counterparties.  Again, in my friend&#8217;s case, while he&#8217;s on the phone calling his vendors, a member of his staff could be  running to the local Starbucks coffee shop with a laptop and logging in to the name server on their competitor&#8217;s network and changing their DNS records. And then staying there for updates that need to be relayed to the clients.</dd>
<dt>When</dt>
<dd>During a crisis, the most stressful thing for clients is &#8216;radio silence.&#8217;  Sometimes it&#8217;s inevitable that there will be nothing new to report for long periods of time.  Even then, let your clients know that there is nothing new to report.  Depending on the business, and the nature of the crisis,  the frequency of updates could be anywhere from five minutes to a few hours.</dd>
<dt>What</dt>
<dd>This is really important.  Tell the truth.  Clients will bolt if they lose their trust in you.  If you tell them the truth they will likely sympathize with your situation and even offer to help.  Oh, and telling the truth is also the Right Thing To Do.  A 36 hour outage for a data center is usually catastrophic.  I was sure my friend was going to lose some big clients after such a prolonged outage.  I called him a few days after the dust settled and asked him about the fallout.  There was none.  He told everyone the truth &#8211; whether they paid $20 a month or thousands of dollars a month.  His biggest clients physically came in to the data center and weathered the storm with him.  They knew exactly what was going on and offered to help in many tangible ways.  Even though, in my opinion, my friend didn&#8217;t do a good job on the &#8220;How,&#8221; &#8220;Who,&#8221; and &#8220;When,&#8221; telling the truth to everyone who was able to get in touch with him allowed him to emerge from this crisis relatively unscathed.</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/04/01/communicating-during-a-crisis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Performance Cost of Using WordPress</title>
		<link>http://www.aijazansari.com/2010/03/31/performance-cost-of-using-wordpress/</link>
		<comments>http://www.aijazansari.com/2010/03/31/performance-cost-of-using-wordpress/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 17:57:48 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Efficiency]]></category>
		<category><![CDATA[Etag]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Metrics]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Safari Web Browser]]></category>
		<category><![CDATA[Spiders]]></category>
		<category><![CDATA[TaskForest]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=531</guid>
		<description><![CDATA[I recently tried to switch a website over from a homegrown content management system to WordPress.  The results were thoroughly disheartening.  This post illustrates the steps I took, and how I managed to move in the opposite direction and optimize my site even more.  ]]></description>
			<content:encoded><![CDATA[<p>Happy with my experience with a custom WordPress installation for this blog, I decided to try using the blogging platform for the <a title="TaskForest Job Scheduler" href="http://www.taskforest.com/">TaskForest</a> website.  The two main reasons were the ease of creating RSS feeds and the ability for users to comment on posts or articles.  After a few days of tinkering around, I&#8217;ve come to the conclusion that, at least for TaskForest, WordPress would cause more problems than it would solve. Here&#8217;s how I came to that conclusion:</p>
<h2>Setting up a Sandbox Domain</h2>
<p>The first step in trying out WordPress was to set up a new domain just for testing out the WordPress installation.  This way, I wouldn&#8217;t affect the taskforest.com domain during my experiments.  I happen to run my own name servers using Daniel Bernstein&#8217;s <a href="http://cr.yp.to/djbdns.html"><em>tinydns</em></a>, so I decided to create a new domain called <em>tf.enoor.com</em>, a subdomain of my defunct company&#8217;s domain.  Since I use bluehost.com&#8217;s WordPress hosting service, I had to make their name servers responsible for the domain.  All that&#8217;s needed is adding the following two lines to <em>/etc/tinydns/root/data</em>:</p>
<pre class="brush: plain;">
&amp;tf.enoor.com:74.220.195.31:ns1.bluehost.com:300
&amp;tf.enoor.com:69.89.16.4:ns2.bluehost.com:300
</pre>
<h2>Selecting a Theme</h2>
<p>After setting up WordPress, the next step was to select a theme.  I wanted something similar to TaskForest&#8217;s current design, so I chose the remarkably customizable <a title="Suffusion" href="http://www.aquoid.com/news/themes/suffusion/">Suffusion</a> theme.  After some tinkering I was able to get a site that was quite similar to the original, with one compromise &#8211; I could get either the logo or the site&#8217;s name in the header, but not both.  Not the way they are on the current site.  It&#8217;s quite important that the site&#8217;s name appear in the header, because that helps with Search Engine Ranking.  So with a heavy heart I decided to omit the logo.</p>
<h2>The Problem with Content</h2>
<p>TaskForest ships with its own web server to support <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a> interface.  As part of the included website is all the documentation for the system. Just like the code, this documentation is under source control, and it&#8217;s also used to populate the taskforest.com website.  This way, I can ensure that both the taskforest.com website and a user&#8217;s local install have the most up-to-date docs, as long as the user is running the latest version of the software.  What this also means is that I have a few dozen webpages that need to be transfered to WordPress before the new site can go live.  I was already resigned to the fact that the URLs of these pages would be different &#8211; the current site has URLs that look like <em>http://www.taskforest.com/about.html</em>, but the default WordPress installation would use URLs that look like <em>http://www.taskforest.com/about/</em>.  It&#8217;s not a huge deal, but I prefer my way.</p>
<p>The bigger issue is that when a new version of the software is released, the pages change.  The current build process ensures that the client website and the taskforest.com website stay in sync.  Now if I use WordPress, I don&#8217;t want to manually edit the pages using the WP admin site.  I need to install a new plugin that handles inclusion of files.  So, I installed the WP Include plugin.  I&#8217;d have to change my build process, but I could get it to work.</p>
<h2>Putting It All Together</h2>
<p>Okay, so I got the themes and plugins installed, and I&#8217;ve got the process worked out.  It was then time to try a proof of concept with a single page.  It worked just as expected, but the site seemed very sluggish.  I made sure I didn&#8217;t have anything enabled that I didn&#8217;t need.  Still, the site was noticeably slower than the existing site, and that&#8217;s with only one non-blank page and zero blog posts.  I thought that maybe the problem was that the bluehost.com shared server was too slow.  I just happened to have an unused server in the same data center that hosts taskforest.com.  The same kind of server as well. It took the better part of the morning, but I installed PHP, mysql and WordPress on that server.  In installed PHP as a static module within Apache, for optimal performance.  Even then, on a pristine machine running nothing else, it was <strong>slow</strong>.</p>
<h2>How Slow is Slow?</h2>
<p>Anyone who knows me knows that I&#8217;m an Engineer, and as an Engineer I like metrics.  I wanted to know that it wasn&#8217;t just my own bias that was penalizing WordPress over my established way of doing things.  So, I looked at the Safari web browser on the Mac.  Safari has a really useful feature called the Web Inspector that, among other things, displays the amount of time it takes for different parts of a page to load.  The numbers were very surprising.  With WordPress, a new page would take <strong>1.75</strong> seconds to load &#8211; an eternity on a high-speed broadband connection.  A subsequent request of the same page would take about <strong>700ms</strong>. Switching to the TaskForest website&#8217;s strategy would take about <strong>800ms</strong> for a new page, and <strong>275ms</strong> for a cached page.  That&#8217;s more than a <strong>20</strong><strong>0%</strong> increase in speed!  The TaskForest website used a preprocessor that allowed for including header files.  It ran under mod_perl.  I decided to write a spider that crawled the website and convert everything to static pages, and serve those pages without mod_perl.  With this enhancement, the results were even better.  I saw a <strong>400% to 800% speed increase</strong>, with cached pages taking just <strong>140ms</strong> to load.</p>
<p>One of the reasons WordPress&#8217;s numbers were so poor is that if articles like <a href="http://www.codinghorror.com/blog/2008/04/behold-wordpress-destroyer-of-cpus.html">this one</a> are still correct, WordPerfect does not cache the content of pages by default.  Resources within the HTML page, like images or javascript files seem to be cached, but every page still does upto 120 database accesses depending on the setup.  Apache is a lot better at caching requests for static HTML pages.  Even the TaskForest webserver used for the REST API, caches data very intelligently using the HTTP headers.</p>
<h2>What Does This All Mean?</h2>
<p>Given the amount of compromises I would have to make in the design, layout and build process, switching to WordPress would have been very painful.  However, with the performance hit the site would be taking, it seems unlikely that I&#8217;ll switch to WP any for the TaskForest website any time soon.  I think I&#8217;d rather write a script to generate RSS feeds on demand and automatically submit the feed to feed notification sites like pingomatic. I think this was a great learning experience that will help me with similar decisions in the future.  And I also got to write a cool spider and increase the speed of the TaskForest web site.</p>
<div id="attachment_559" class="wp-caption alignnone" style="width: 595px"><a rel="attachment wp-att-559" href="http://www.aijazansari.com/2010/03/31/performance-cost-of-using-wordpress/webinspector/"><img class="size-large wp-image-559" title="Safari's Web Inspector" src="http://www.aijazansari.com/wp-content/uploads/2010/03/WebInspector-585x351.png" alt="" width="585" height="351" /></a><p class="wp-caption-text">Safari&#39;s Web Inspector</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/03/31/performance-cost-of-using-wordpress/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Submit Photos To Frommer&#8217;s Contests</title>
		<link>http://www.aijazansari.com/2010/03/12/boycott-frommers/</link>
		<comments>http://www.aijazansari.com/2010/03/12/boycott-frommers/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 05:01:04 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Copyright]]></category>
		<category><![CDATA[Frommers]]></category>
		<category><![CDATA[Legal]]></category>
		<category><![CDATA[Licensing]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=523</guid>
		<description><![CDATA[When you submit a photograph to Frommer's  not only do they want the rights to use it for the stated purpose, they also want all rights to do anything with your picture, even license it out to others for perpetuity.  In other words, they are asking for the rights of the photographer, without paying for what those rights are worth. Unchecked, these policies will wind up killing the freelance photography business. I urge you to boycott Frommer's products in protest of their licensing policies. ]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not a professional photographer.  I&#8217;m merely an student of  the art and science of photography.  Sometimes I think of submitting my pictures to contests or for use by others &#8211; not for the money, but for the personal satisfaction.  Now after reading <a href="http://www.bobkrist.com/blog/frommers-now-fing-freelancers-and-photo-enthusiasts/">this post</a> by Bob Krist, I&#8217;ll make sure to pay attention to photographers&#8217; rights when I submit my pictures anywhere. I will also refuse to buy any product from Frommer&#8217;s Travel Guides, and urge you to do the same.</p>
<p>As Bob points out, when you submit a photograph to Frommer&#8217;s  not only do they want the rights to use it for the stated purpose, they also want all rights to do <em>anything</em> with your picture, even license it out to others for perpetuity.  In other words, they are asking for the rights of the photographer, without paying for what those rights are worth.  This is regardless of whether a photo is accepted for publication or wins a contest or not.  It appears that they&#8217;re counting on the fact that most people who submit photos will not read the fine print, or will be amateurs who are just happy that they have a picture good enough to send to a competition.  As Bob correctly points out, this kind of action will end up &#8216;kill[ing] the freelancers&#8217; who make their livelihoods selling the rights to use their pictures, not all the rights to their pictures.</p>
<p>I went to their website and entered the following on their &#8216;Contact Us&#8217; page:</p>
<blockquote><p>This is is regard to the issues brought up at Bob Krist&#8217;s blog, found at http://www.bobkrist.com/blog/frommers-now-fing-freelancers-and-photo-enthusiasts/</p>
<p>I&#8217;m not a professional photographer but I am a frequent traveler.  I just want you to know that I find your company&#8217;s take on photographers&#8217; rights reprehensible, and that I intend to boycott you and your products, and urge all my friends and family to do the same &#8211; until you change your policy on seeking perpetual rights for submitted photographs.</p>
<p>Please reconsider your position.</p>
<p>Sincerely,</p>
<p>Aijaz Ansari.</p></blockquote>
<p>Keeping true to my word, I urge you, readers of this blog, to boycott Frommer&#8217;s products in protest of their licensing policies.</p>
<div id="attachment_525" class="wp-caption alignnone" style="width: 595px"><a rel="attachment wp-att-525" href="http://www.aijazansari.com/2010/03/12/boycott-frommers/3181524704_017ca436df_b/"><img class="size-large wp-image-525" title="A Stop Sign" src="http://www.aijazansari.com/wp-content/uploads/2010/03/3181524704_017ca436df_b-585x390.jpg" alt="A Stop Sign" width="585" height="390" /></a><p class="wp-caption-text">A Stop Sign in Sharjah, U.A.E.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/03/12/boycott-frommers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>David duChemin On Being A Professional Photographer</title>
		<link>http://www.aijazansari.com/2010/03/10/david-duchemin-on-being-a-professional-photographer/</link>
		<comments>http://www.aijazansari.com/2010/03/10/david-duchemin-on-being-a-professional-photographer/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 13:44:48 +0000</pubDate>
		<dc:creator>Aijaz Ansari</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://www.aijazansari.com/?p=518</guid>
		<description><![CDATA[I recently discovered David duChemin&#8217;s blog.  I&#8217;d like to share a couple of  his posts with you.  In &#8216;Just?&#8217; he offers advice to people who consider themselves &#8216;just an amateur photographer.&#8217;  In his follow-up piece &#8216;Confessions of a So-Called PRO&#8217; he serves up an &#8216;anti-pep-talk&#8217; that demonstrates that professional photographers aren&#8217;t necessarily that different from [...]]]></description>
			<content:encoded><![CDATA[<p>I recently discovered David duChemin&#8217;s blog.  I&#8217;d like to share a couple of  his posts with you.  In <a href="http://www.pixelatedimage.com/blog/2009/11/just/">&#8216;Just?&#8217;</a> he offers advice to people who consider themselves &#8216;just an amateur photographer.&#8217;  In his follow-up piece <a href="http://www.pixelatedimage.com/blog/2010/03/not-much-of-a-pro-really/">&#8216;Confessions of a So-Called PRO&#8217;</a> he serves up an &#8216;anti-pep-talk&#8217; that demonstrates that professional photographers aren&#8217;t necessarily that different from amateurs like you and me.</p>
<p><a href="http://www.flickr.com/photos/aijazansari/3182995057/"><img class="alignnone" title="Fish" src="http://farm4.static.flickr.com/3507/3182995057_700d89dc98.jpg" alt="Fish" width="500" height="333" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aijazansari.com/2010/03/10/david-duchemin-on-being-a-professional-photographer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
