<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
<title>sixtyPercent: Cochlear Implants, Aviation, Technlology, and Philosophy</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog"/>
<author><name>David Creemer</name></author>

<modified>2007-03-08T05:47:13Z</modified>

<entry>
<title>The obligitory Mac OS X Applications I Use Post</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2007/03/07/useful.mac.os.x.applications.list"/>
<modified>2007-03-08T05:47:13Z</modified>
<issued>2007-03-08T05:47:13Z</issued>
<id>http://www.zachary.com/s/blog/2007/03/07/useful.mac.os.x.applications.list</id>
<content type="text/html" mode="escaped"><![CDATA[<p>Here's the obligitory &quot;3rd Party Applications I use on Mac OS X&quot; post. I find these lists useful when I stumble across them, as I often find tools that I didn't know about before. A good case in point in the &quot;Thrupp&quot; application (see below). I learned about that while reading a post like this one, and now find it to be a useful way of getting my iTunes music on our Tom Tom GPS in an organized and consistent way. 
</p>
<p>
Here's my list, broken up into classes of frequency of use, but otherwise in no particular order.
</p>
<h3>Key Applications</h3>
<p>
These are the applications that I use these every day or nearly so.
</p>
<ul><li>Mac OS X Mail</li>
<li>Safari</li>
<li>iTunes <a class="external" href="http://www.apple.com/ilife/">http://www.apple.com/ilife/</a></li>
<li>Adium <a class="external" href="http://www.adiumx.com">http://www.adiumx.com</a></li>
<li>Yojimbo <a class="external" href="http://www.barebones.com/products/yojimbo">http://www.barebones.com/products/yojimbo</a></li>
<li>Vienna <a class="external" href="http://www.opencommunity.co.uk/vienna2.html">http://www.opencommunity.co.uk/vienna2.html</a></li>
<li>Mac Ports (formerly Darwin Ports <a class="external" href="http://www.macports.org">http://www.macports.org</a></li>
<li>OmniOutliner Pro <a class="external" href="http://www.omnigroup.com/applications/omnioutliner">http://www.omnigroup.com/applications/omnioutliner</a></li>
<li>TextMate <a class="external" href="http://www.macromates.com">http://www.macromates.com</a></li>
<li>Firefox <a class="external" href="http://www.mozilla.com/en-US/firefox">http://www.mozilla.com/en-US/firefox</a></li>
<li>Skype <a class="external" href="http://www.skype.com">http://www.skype.com</a></li>
<li>Backup <a class="external" href="http://www.apple.com/dotmac/features.html">http://www.apple.com/dotmac/features.html</a></li>
<li>Quicksilver <a class="external" href="http://quicksilver.blacktree.com">http://quicksilver.blacktree.com</a></li>
<li>Synergy <a class="external" href="http://synergy2.sourceforge.net/">http://synergy2.sourceforge.net/</a> and <a class="external" href="http://software.landryhetu.com/synergy/">http://software.landryhetu.com/synergy/</a></li></ul>
<h3>Secondary Applications</h3>
<p>
I use these from somewhat frequently -- they are all great applications, just not things I need all day every day.
</p>
<ul><li>Chicken of the VNC <a class="external" href="http://sourceforge.net/projects/cotvnc/">http://sourceforge.net/projects/cotvnc/</a></li>
<li>Delicious Library <a class="external" href="http://www.delicious-monster.com/">http://www.delicious-monster.com/</a></li>
<li>HandBrake <a class="external" href="http://handbrake.m0k.org/">http://handbrake.m0k.org/</a></li>
<li>iStumbler <a class="external" href="http://www.istumbler.net/">http://www.istumbler.net/</a></li>
<li>NeoOffice <a class="external" href="http://download.neooffice.org/neojava/en/index.php">http://download.neooffice.org/neojava/en/index.php</a></li>
<li>OmniGraffle Pro <a class="external" href="http://www.omnigroup.com/applications/omnigraffle/">http://www.omnigroup.com/applications/omnigraffle/</a></li>
<li>Thrupp <a class="external" href="http://www.utsire.com/thrupp/">http://www.utsire.com/thrupp/</a> </li>
<li>SubEthaEdit <a class="external" href="http://www.codingmonkeys.de/subethaedit/">http://www.codingmonkeys.de/subethaedit/</a></li>
<li>Tofu <a class="external" href="http://amarsagoo.info/tofu/index.shtml">http://amarsagoo.info/tofu/index.shtml</a></li>
<li>CanoScan <a class="external" href="http://www.usa.canon.com/consumer/controller?act=ProductCatIndex1Act&amp;fcategoryid=104">http://www.usa.canon.com/consumer/controller?act=ProductCatIndex1Act&amp;fcategoryid=104</a></li>
<li>Transmission <a class="external" href="http://transmission.m0k.org/">http://transmission.m0k.org/</a></li>
<li>VLC <a class="external" href="http://www.videolan.org/">http://www.videolan.org/</a></li>
<li>Wx <a class="external" href="http://hunter.pairsite.com/wx/">http://hunter.pairsite.com/wx/</a></li>
<li>Parallels <a class="external" href="http://www.parallels.com/">http://www.parallels.com/</a></li>
<li>Pages and Keynote <a class="external" href="http://www.apple.com/iwork/">http://www.apple.com/iwork/</a></li>
<li>iPhoto and GarageBand <a class="external" href="http://www.apple.com/ilife/">http://www.apple.com/ilife/</a></li></ul>
<h3>Tertiary Applications</h3>
<p>
The are the tools I use very occasionally -- again -- they seem like good applications, I just don't need them for my daily routine.
</p>
<ul><li>Seashore <a class="external" href="http://seashore.sourceforge.net/">http://seashore.sourceforge.net/</a></li>
<li>Inkscape <a class="external" href="http://inkscape.org/">http://inkscape.org/</a></li>
<li>MonoLingual <a class="external" href="http://monolingual.sourceforge.net/">http://monolingual.sourceforge.net/</a></li>
<li>ServiceScrubber <a class="external" href="http://www.manytricks.com/servicescrubber/">http://www.manytricks.com/servicescrubber/</a></li></ul>]]></content>
</entry>

<entry>
<title>Review of the Nokia E61</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2007/01/27/review.nokia.e61.iphone"/>
<modified>2007-01-28T00:16:56Z</modified>
<issued>2007-01-28T00:16:56Z</issued>
<id>http://www.zachary.com/s/blog/2007/01/27/review.nokia.e61.iphone</id>
<content type="text/html" mode="escaped"><![CDATA[<p>I got a new phone a couple of days ago -- a <a class="external" href="http://europe.nokia.com/A4142101">Nokia E61</a> &quot;smartphone&quot; -- here is a random collection of some of my thoughts after two days of use.
</p>
<p>
<img src="/s/static/nokia_e61.jpeg" alt="E61"/> First off, I should point out that I didn't buy the phone through a cellular carrier, but rather I got it &quot;unocked&quot; from Expansys (<a class="external" href="http://www.mobileplanet.com">Mobile Planet</a> in the US). I just popped in my T-Mobile USA SIM card, and it worked right away. Nokia has a nice <a class="external" href="http://europe.nokia.com/A4144889">web site</a> that will additionally send some more carrier-specific configuration information via an SMS, and in addition, since the E61 has WiFi, you can do that same thing via the internet on your phone. In any case, getting the phone up and running on T-Mobile for voice and data services was pretty painless.
</p>
<p>
The E61 more or less does everything -- it make calls (of course), is a competent PIM, has a very good web browser, plays music, has five or six different email options (both personal and corporate), plays videos, has games, is a note taker, speech synthesizer, world clock, book reader, VoIP client, reads -- edits -- and prints office documents and on and on and on. In short, it's really a full productivity computer in many ways. It is not designed to be a primary productivity computer of course, but rather an <i>in a pinch</i> or <i>on the go</i> productivity tool.
</p>
<p>
I'm happy to report that pretty much everything works as claimed -- thanks in no spall part to the very capable <a class="external" href="http://www.symbian.com">Symbian OS</a>. I'm not happy to report that though everything <i>works</i> the end product is a user interaction disaster. If you read this blog, you probably know a bit about me -- I'm a computer professional, and have spent a decade working at Apple and Palm. I'm pretty familiar with all of the technologies in the E61, but I'm amazed at how much difficulty I'm having making the product work smoothly. I'm not running into bugs (as far as I know) -- just running headlong into what is obviously an software stack riddled with poor design choices and the unmistakable evidence of committee design. Somewhere along the way to producing the E61, too many product managers spent too much time in too many meetings with too many carrier people. I've been in exactly this situation, and it is amazingly easy to forget the end users' needs. When a cell phone company refers to a <i>customer</i> they are usually not talking about you and me -- they mean Vodaphone and T-Mobile, etc. I'm under no illusion that Apple's forthcoming iPhone will cure cancer and stop global warming, but I do hope it will seriously kick Nokia's ass back into focusing on the needs of their <i>real</i> customers.
</p>
<p>
Here's some of the most exasperating examples: As I said above, the web browser is actually quite capable. It renders pages much like I'd see on a desktop computer, and even has a nice overview mode for seeing the whole page and then zooming in to read some detail. Unfortunately, it takes <i>eight</i> key clicks to switch to page overview mode (and then just one click to go back to the zoomed in view). I knew this couldn't be right -- there had to be a shortcut key to do this, as the feature is so useful, but there's no &quot;key equivalents&quot; listed on the menus. After consulting the manual, I found what I needed -- press &quot;8&quot; -- which you do by pressing and holding the numeric shift-key while pressing &quot;B&quot;. Why can't this be discoverable on the device?
</p>
<p>
Far far worse is the way the E61 in specific and Symbian OS in general treat data access. Nokia comes from the thick specification manual world of Networks and Carriers -- not the wild west of WiFi. When I turn on my MacBook, it connects to any known available wifi network without my interaction at all. If it can't find a know network, but it can find an open network, it offers to connect to that. On the E61, I have to define &quot;Access Points&quot; and &quot;Access Point Groups&quot; -- the former a named specific instance of a wifi networks, and the latter specify an ordered collection of data access methods. Hold on we're not done yet. When connecting to the Web, I must specify which Access Point or Access Point Group I want to use -- if I'm in a new open wifi area I must add the Access Point to my list. But wait -- click on a streaming media link in the browser, and the Real Player is (nicely) launched, and then you must re-specify which Access Point to use to access the stream. The Real Player doesn't seem to support the concept of Access Point Groups (and neither do many of the other apps on the E61), so you have to pick the right individual Access Point. By this point you're ready to throw the phone at the wall.
</p>
<p>
And on and on. Settings for various things are poorly organized; streaming media is handled through three different applications (&quot;Real Player&quot;, &quot;Mus. Player&quot;, and &quot;Gallery&quot;, and yes, the application is labeled &quot;Mus. Player&quot;). Flash is installed, but doesn't work with the browser -- apparently it's only for &quot;mobile Flash application&quot; -- cool, but there is no Java application icon on the device, yet I know the phone runs Java apps -- the inconsistency is just stupid and confusing. The main screen of the phone is called -- get this -- &quot;Active Standby Mode&quot;. (!). I poked around the phone for 30 minutes trying to figure out how to change the application shortcuts on the main screen -- it turns out you have to hit &quot;Menu &gt; Tools &gt; Settings &gt; Phone &gt; Standby mode &gt; Active standby apps.&quot;, and then choose from a small window that shows a long list of all applications and some bookmarks. Some -- not all.
</p>
<p>
In the end, I have a lot of sympathy for the folks at Nokia -- I know some of them, and I know they're probably trying to build great products against the usual pressures of budgets, schedules, partner agendas, carrier needs, and so on. But those things are all the kind of excuses that can kill a company by a death of a thousands cuts. Make no mistake -- the E61 technically accomplishes pretty much everything listed on its data sheet, and is probably currently as good as it gets on a smart phone. But from an actual end-user's perspective it's a piece of poorly designed, barely usable garbage.
</p>
<p>
The E61 is a good example of the phone evolving to become a true general purpose computing device -- in both good and bad ways. I support my less technically-savvy friends and family members on their computers, I can see that in Nokia's vision of the future I'll have to add their phones to my list too. Thanks a lot.</p>]]></content>
</entry>

<entry>
<title>Millions of dynamic web application hits a day with open source</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2007/01/23/dynamic.web.open.source.million.hits"/>
<modified>2007-01-24T00:48:44Z</modified>
<issued>2007-01-24T00:48:44Z</issued>
<id>http://www.zachary.com/s/blog/2007/01/23/dynamic.web.open.source.million.hits</id>
<content type="text/html" mode="escaped"><![CDATA[<p>At my day job, our traffic has grown quite a bit over the last few months, and we're now serving web pages to hundreds of thousands of visitors per day. When we designed our basic system architecture, we planned for this and more traffic, and I'm happy to say that our design seems to be scaling well, using a modest hardware investment.
</p>
<p>
In many ways, our application is a &quot;traditional&quot; three-tiered web application -- front-end web-servers connected to mid-tier application servers connected to back end databases. Our front-end essentially consists of a web server (<a class="external" href="http://www.lighttpd.net">lighttpd</a>), content cache (<a class="external" href="http://www.squid-cache.org">Squid</a>), and load-balancing proxy (<a class="external" href="http://haproxy.1wt.eu">HAProxy</a>). Lighttpd, though not without its warts, is a reliable very fast webserver. All of our static web content is server by lighttpd, and the source data fits within the OS's page cache. We've seen peaks of more than 1000 requests / second handled by the front end without any trouble. Any complete page that can be cached for a reasonable amount of time is requested through the Squid cache. All requests that need to go to the middle tier -- both cache misses and completely dynamic pages are routed through the HAProxy load balancer. HAProxy is a very, very nice product -- it handles millions of requests/day, proxying to and monitoring the next tier, and reporting and allowing configuration of everything anyone could want -- all without placing much of a load on the CPU. We used to use <a class="external" href="http://www.apsis.ch/pound">Pound</a> for this task, but switch to HAProxy to fix some timeout issues. Pound worked OK, but HAProxy provides a much greater level of monitoring and control.
</p>
<p>
Our application server middle tier consists of -- well -- our application servers, written in <a class="external" href="http://www.python.org">Python</a>. What makes this layer interesting from a systems-architecture perspective is its statelessness. Client sessions are not stored in this tier, and so we can add appserver capacity by simply adding more application servers to our cluster. The application servers are managed as a unit, so things like pushing software releases can be accomplished with a single click. The application server's main function is to process web requests and return result pages (and AJAX page content). Much of this result data is aggressively cached in a shared <a class="external" href="http://www.danga.com/memcached">memcached</a> pool -- all of the application servers share the same pool and can therefore benefit from the work of their peers.
</p>
<p>
Finally we come to the back-end database. We run <a class="external" href="http://www.postgresql.org">PostgreSQL</a> on x86_64 Linux, and I'm very pleased with it's performance. As our load has grown, we have migrated to a more capable database configuration. We're currently running our primary database on an 8-CPU, 32GB Penguin Computing server, with lots of very fast disks. We work hard to minimize our database load, and our current system should handle our load well through at least the next 5x growth in traffic. In the grand scheme of things, RAM is pretty cheap -- even 32GB, and our system has room for another 32GB. With some help from <a class="external" href="http://varlena.com">Varlena LLC</a> we learned about many of the ins and outs of the <a class="external" href="http://gborg.postgresql.org/project/slony1">Slony</a> replication system, and replicate our database in near-real time to both a co-located backup system as well as an offsite backup, which we also use for analytics.
</p>
<p>
The whole thing is monitored with <a class="external" href="http://munin.projects.linpro.no">Munin</a> using and a collection of standard and custom plugins, and the system sends us SMS notifications of anomalous events. Putting together the whole system has been a ton of fun. I'm especially happy that we here able to do it entirely with open source software, contributing fixes and enhancements as we go along.</p>]]></content>
</entry>

<entry>
<title>End of Year Charitable Gift</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2006/12/06/securities.taxes.charitable.gifts"/>
<modified>2006-12-07T06:34:28Z</modified>
<issued>2006-12-07T06:34:28Z</issued>
<id>http://www.zachary.com/s/blog/2006/12/06/securities.taxes.charitable.gifts</id>
<content type="text/html" mode="escaped"><![CDATA[<p>The ads on this blog do not make me much money -- actually I don't make any money from the ads. As the link says, I <a href="/s/ads_for_charity">donate the proceeds</a> to charities. This year we're also taking advantage of the a nice US tax code &quot;loop hole&quot; to give gifts of long-term appreciated securities (i.e. stock).
</p>
<p>
It turns out that many charities can accept stock as a gift. If you were to sell the stock, and then give the money to a charity, you would pay the long-term capital gains on the stock sale. If you just give the stock directly, you pay no capital gains (assuming long-term), and still get the full market value for the charitable deduction. Since 2006 has been a good year for stocks, I bet that many people have a bit extra to give.</p>]]></content>
</entry>

<entry>
<title>Easy and cheap PDF Document Management (with OCR) on Mac OS X</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2006/10/09/easy.pdf.document.management.ocr.mac.os.x"/>
<modified>2006-10-10T03:40:22Z</modified>
<issued>2006-10-10T03:40:22Z</issued>
<id>http://www.zachary.com/s/blog/2006/10/09/easy.pdf.document.management.ocr.mac.os.x</id>
<content type="text/html" mode="escaped"><![CDATA[<p>I recently purchased a <a class="external" href="http://www.usa.canon.com/consumer/controller?act=ModelDetailAct&amp;fcategoryid=119&amp;modelid=14003">Canon CanoScan LiDE70</a> scanner today for $80, intending to set up a simple document management solution for all of my paper bills, statements, receipts, etc. My hope was to develop a workflow that easily supports scanning a sequence of paper documents into a single PDF containing both the scanned images and the text of the document. I would then store the PDFs in <a class="external" href="http://www.barebones.com/products/yojimbo/">Yojimbo</a> -- the application I currently use (and like) for my document management. After a bunch of fiddling and a couple of &quot;a ha&quot; moments, I'm happy to report a very easy to use system that surpasses my expectations.
</p>
<p>
The Canon scanner comes with a (sadly PowerPC only) application called CanoScan Toolbox, as well as assorted other &quot;shovel-ware&quot; applications, including OmniPage SE OCR software. The first step is to <i>throw everything away</i> except for the CanoScan Toolbox -- even the OmniPage OCR software. Just install the scanner driver and the CanoScan Toolbox, and either don't install, or throw away everything else.
</p>
<p>
I then created a simple Automator workflow to open a PDF file, apply a Quartz filter to reduce the image size and quality somewhat (adjust as necessary), and then open the file with Yojimbo. Yojimbo will then automatically import the file into its document library. Next, I edited the &quot;PDF&quot; workflow in the CanoScan software to open the scanned PDF file with my workflow.
</p>
<p>
I pushed the &quot;PDF&quot; button on the scanner, and my document was pretty quickly scanned, compresses, and imported into Yojimbo. But then I noticed something very cool -- the text in the PDF was selectable (!). Apparently the CanoScan Toolbox software has OCR built in -- scanning the package contents of the application bundle gives some hints that this is so. There are files in the package with names like &quot;basicj.ocr&quot; and &quot;cocr_carbon.shlb&quot; -- so I guess this where the OCR is taking place. Unlike OmniPage, there are no options to tweak, but then again -- everything seems to work exactly as I want it.
</p>
<p>
So that's it -- in fact I think the same software suite comes with the $40 CanoScan LiDE25, so for about $50 you can have an amazingly easy to follow path to a paperless home or office.</p>]]></content>
</entry>

<entry>
<title>More on Cochlear Implants and Playing Piano</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2006/09/11/cochlear.implants.playing.piano"/>
<modified>2006-09-12T04:59:34Z</modified>
<issued>2006-09-12T04:59:34Z</issued>
<id>http://www.zachary.com/s/blog/2006/09/11/cochlear.implants.playing.piano</id>
<content type="text/html" mode="escaped"><![CDATA[<p>My son Brendan, who was born deaf, seems to hear quite well with his  <a href="/s/cochlear_implants">cochlear implants</a> (see the previous link for more writings on that). He has now been taking  <a href="/s/blog/2006/01/13/learning.piano.cochlear.implant">piano lessons</a> for about three months and likes to practice  -- which he generally manages to do about four or fives days a week.
</p>
<p>
At first, I was unsure how well he would do at playing the piano. Before the first lesson, I sat him down at a piano, and asked him to identify the higher of two notes, which I then proceeded to play while he turned his back. He couldn't do better than chance at discriminating between two notes played on adjacent white keys (middle C and D, for example).
</p>
<p>
After three months of playing, he can identify the higher of two adjacent notes now with much, much better accuracy. While playing a song, he also seems to be able to hear when a note is one step off and self-correct. While he has not yet started playing chords in his lessons, we have been experimenting with them a bit at home. He can generally do a very good job discriminating between a single key, and a two or three note chord. His implant has theoretical frequency range from about 100 Hz to 8000 Hz, so all but the very lowest piano notes (range of about 28 Hz to 4200 Hz) should sound fine to him.
</p>
<p>
The piano lessons are a great source of joy and humor for me, and I hope for Brendan too. The teacher has pretty clearly just forgotten that Brendan is deaf -- she gives him no breaks and he responds well to her style. I still haven't told her that he has an off-the charts, fiendishly sharp memory, though she's starting to suspect that something isn't quite run of the mill. He also seems to have the best singing voice in the family, though that may be more sad than funny.... :-)</p>]]></content>
</entry>

<entry>
<title>My new MacBook is very nice.</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2006/08/26/macbook.is.very.nice"/>
<modified>2006-08-26T20:14:53Z</modified>
<issued>2006-08-26T20:14:53Z</issued>
<id>http://www.zachary.com/s/blog/2006/08/26/macbook.is.very.nice</id>
<content type="text/html" mode="escaped"><![CDATA[<p>Count me among the many new MacBook fans. I've had mine for all of a week now, and it's without question the best computer I've owned.
</p>
<p>
I have switched back and forth between the PowerBook and iBook lines for a number of years. The PowerBook (now MacBook Pro) has of course always been targeted to the high-end, or &quot;pro&quot; user and that's me. The problem is, I <i>use</i> my computer every day -- a lot. I use it at work, I use it at home, while I traveling, and so on. The iBook line (now MacBook) always seems to be able to handle the wear and tear better than the pro-line.
</p>
<p>
So now the pendulum swings back to the consumer model, and I have replaced my 12&quot; Aluminum PowerBook (PPC) with a fully-loaded black (of course) MacBook. It feels pretty tough -- and I hope it is. It is certainly very, very fast, especially with 2GB of RAM. I have no heat or fan issues or dead pixels; I am fortunate in that all of the applications I use for work and play are fully Intel-native, so there's no PowerPC emulation penalty to pay. It connects to my 24&quot; LCD monitor at work and spans the display to include the extra pixels without any trouble. WiFi performance is much better than my &quot;old&quot; PowerBook; the built in video camera works well with iChat, Delicious Library, and Skype. My calendar and contacts sync to my phone via Bluetooth.
</p>
<p>
Everything just works, and works well.</p>]]></content>
</entry>

<entry>
<title>Deep Linkers -- Not Thinkers</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2006/08/10/deep.links.droopy.dog"/>
<modified>2006-08-10T16:41:23Z</modified>
<issued>2006-08-10T16:41:23Z</issued>
<id>http://www.zachary.com/s/blog/2006/08/10/deep.links.droopy.dog</id>
<content type="text/html" mode="escaped"><![CDATA[<p>I posted a <a href="/s/blog/2005/02/21/separated_at_birth">blog entry a while back</a> about my observation that the Aeronca C3 airplane looked a lot like Droopy Dog. Of course the search engines crawled the page, and pretty soon the Droopy image was in their image search results. Apparently a lot of people found this image, and &quot;deep linked&quot; to it from various sites.
</p>
<p>
By &quot;deep linking&quot; in this context I mean this: someone built a web page (or more commonly posted a comment on a blog or other forum) that included the image served from my poor little server. Every time the page on that website is served, the image gets pulled from my machine. In effect, I'm providing free image hosting of a sort. Now actually, I don't mind this too much, but recently the deep links have come from some very <a class="external" href="http://www.dailykos.com/story/2006/7/3/123115/8685">high</a> <a class="external" href="http://profile.myspace.com/index.cfm?fuseaction=user.viewprofile&amp;friendid=78696844">traffic</a> <a class="external" href="http://nykfanpage.com/forum/viewtopic.php?t=14757&amp;postdays=0&amp;postorder=asc&amp;start=60">web</a> <a class="external" href="http://ilx.p3r.net/thread.php?msgid=6948060">sites</a>.
</p>
<p>
Instead of just removing the image I configured my web server to look at the referrer header when receiving a request for the Droopy image. If the request came from this website, Yahoo, or Google, or if it has no referrer, then the Droopy image is served. If the request comes from anywhere else, then a different image is served. This has the nice effect of continuing to show Droopy on my website as it always has, and letting that same Droopy image show up in Yahoo and Google search results. But if used directly by another site -- then no Droopy.
</p>
<p>
I'm writing about this for two reasons: my amusement, and to let the deep linkers know (should they care to investigate), why the image they linked to of Droopy Dog:
</p>
<p>
<img src="/s/static/droopy.jpeg" alt="Droopy Dog"/>
</p>
<p>
now looks like this:
</p>
<p>
<img src="/s/static/bush.jpeg" alt="George Bush"/></p>]]></content>
</entry>

<entry>
<title>Steal this idea, please</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2006/07/31/disposable_razor_usage_counter"/>
<modified>2006-07-31T07:19:26Z</modified>
<issued>2006-07-31T07:19:26Z</issued>
<id>http://www.zachary.com/s/blog/2006/07/31/disposable_razor_usage_counter</id>
<content type="text/html" mode="escaped"><![CDATA[<p>My Friend Philip had a great idea (well many and that's the point, but read on) -- it's probably the case that everyone has great ideas from time to time, but they usually just get lost. The ideas come and go because <b>doing something</b> with an idea is of course the hard part. Since we all can't be captains of industry, and let's face it -- we're not all going to run down to the patent attorney's office after every brilliant (or not so brilliant) thought, why not just post the idea on a blog and let someone else &quot;steal it.&quot; I'm glad Philip decided to <a class="external" href="http://www.stealthisidea.com">do something</a> about at least that original idea.
</p>
<p>
I like the concept of sharing the ideas which I'll probably never get around to implementing (see for example my earlier idea about <a href="/s/blog/2005/12/12/friends_and_cuban_cigars">importing Cuban cigar leaves as works of art</a>). So here's why I thought of today -- literally in the shower this morning:
</p>
<p>
Can the consumer goods companies please put a simple &quot;usage counter&quot; dial or sliding indicator on my disposable razors? Every time I use it, I can just flick the number up one. Then at a glance I can see that I've used the razor four times. If they are very clever, counter will go up to one <b>less</b> than the average number of uses.</p>]]></content>
</entry>

<entry>
<title>Integrating Amazon's S3 Simple Storage Service</title>
<link rel="alternate" type="text/html" href="http://www.zachary.com/s/blog/2006/07/26/amazon_s3_storage_service_python"/>
<modified>2006-07-27T04:40:26Z</modified>
<issued>2006-07-27T04:40:26Z</issued>
<id>http://www.zachary.com/s/blog/2006/07/26/amazon_s3_storage_service_python</id>
<content type="text/html" mode="escaped"><![CDATA[<p>At work today, I spent a fun few hours migrating our picture storage from local files to <a class="external" href="http://www.amazon.com/b/ref=sc_fe_l_2/104-5201944-2848766?node=16427261">Amazon's Simple Storage Service</a> (S3) web service. Our application lets customers upload images for display on their customized listing page (like an online Yellow Pages). I've been thinking about ways to both scale and &quot;clusterize&quot; our services as we grow both our customer base and consumer web traffic.
</p>
<p>
Like many cool applications these days, we use <a class="external" href="http://lighttpd.net/">lighttpd</a> to serve up our static images -- the scalability is fantastic and our web server's CPU usage is essentially zero no matter the bandwidth. OK, not zero, but close -- and lighttpd is the reason why. The web server hosts the images locally, and the directory is exported via NFS to our application servers for their use (which is mostly just writing new files). The server winds up getting many of the images in the OS's page cache, so serving them is obviously efficient. This all works great, and probably gives us at least a year's worth of traffic growth, but leaves the lighttpd / NFS server box as a single point of failure.
</p>
<p>
I've investigated the <a class="external" href="http://linux-ha.org/">Linux-HA heartbeat</a> and <a class="external" href="http://www.drbd.org/">drbd</a> technologies for building a clustered NFS server (and in fact I am using heartbeat to cluster our application servers).  This seems promising, but we strongly, strongly favor simple solutions over perfect-but-complex ones, and a drbd/NFS cluster does not seem super simple.
</p>
<p>
That's where Amazon's S3 comes in -- it gives effectively unlimited storage and bandwidth, with Amazon's reliability, on a pay-as-you-go basis. Since our application nicely encapsulates all image management in a single Python class, I was able to move all image functionality to S3 in a few hours. Instead of generating URLs that point to our own web servers, the code just points to the S3-specific URLs, and the rest of the application is unnaffected. So now in exchange for one day's work and a few dollars per month, I get a scalable, reliable image serving and storage solution. If I were working in a Fortune-500 company instead of a tiny startup, I might call this a Server-Oriented Scalable Grid Computing integration, but that seems like quite a mouthful for a two hundred lines of Python :-)</p>]]></content>
</entry>

</feed>
