<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en">
		<id>http://www.sultanik.com/Main_Page&amp;action=feed</id>
		<title>Evan Sultanik's Page of Personal Deification</title>
		
		<link rel="alternate" type="text/html" href="http://www.sultanik.com/Main_Page" />
		<updated>2009-11-09T01:57:48Z</updated>
		<subtitle>And Other Self-Deprecating Incongruities</subtitle>
		<generator>MediaWiki 1.13.0</generator>

	<link rel="self" href="http://feeds.feedburner.com/EvanSultanik" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
		<id>http://www.sultanik.com/Blog:iPhone_vulnerability</id>
		<title>iPhone Vulnerability via SMS</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/B-UMZrmrgjY/Blog:iPhone_vulnerability" />
				<updated>2009-07-31T13:30:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;The gist of the story is that there is a new vulnerability that affects all iPhone models/firmware.  An attacker can compromise a phone simply by sending a series of specially formed SMS (&lt;i&gt;i.e.&lt;/i&gt;, text) messages, only the first of which is visible to the victim.  All that is needed by the attacker is the victim's phone number; no action on the part of the victim is required.  Once a phone is compromised, an attacker can almost instantaneously read the victim's contact list and subsequently automatically attack all of the victim's contacts.  More details can be found &lt;a href="http://news.cnet.com/8301-27080_3-10299378-245.html" class="external text" title="http://news.cnet.com/8301-27080_3-10299378-245.html" rel="nofollow"&gt;here&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Apple, having known about this for almost two months, have done nothing.
&lt;/p&gt;&lt;p&gt;The only known workaround is to:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; Jailbreak your phone;
&lt;/li&gt;&lt;li&gt; SSH into your phone; and
&lt;/li&gt;&lt;li&gt; &lt;code&gt;$ chmod 000 MobileSMS.app&lt;/code&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;This will obviously disable &lt;i&gt;all&lt;/i&gt; SMS, which is less than ideal for most users.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=B-UMZrmrgjY:7d3_akNzF4o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=B-UMZrmrgjY:7d3_akNzF4o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=B-UMZrmrgjY:7d3_akNzF4o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=B-UMZrmrgjY:7d3_akNzF4o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=B-UMZrmrgjY:7d3_akNzF4o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=B-UMZrmrgjY:7d3_akNzF4o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=B-UMZrmrgjY:7d3_akNzF4o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/B-UMZrmrgjY" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:iPhone_vulnerability</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:iPhone_development</id>
		<title>iPhone Toolchain on Linux</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/MQE2VOigLVw/Blog:iPhone_development" />
				<updated>2009-07-29T12:14:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I have an iPhone.  I also use Google Mail as my web-based mail client.  Unfortunately, there is really no good way to get push Gmail on an iPhone.  Even now, post firmware 3.0, these are the best ways:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; Pay for a service like &lt;a href="http://www.apple.com/mobileme/" class="external text" title="http://www.apple.com/mobileme/" rel="nofollow"&gt;MobileMe&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;Problem&lt;/b&gt;: service fees seem like overkill, and the push E-mail would be the only benefit I'd get from it.
&lt;/li&gt;&lt;li&gt; Wrap Gmail's IMAP service in an exchange server.  There are some paid services that do this, however, &lt;a href="http://z-push.sourceforge.net/" class="external text" title="http://z-push.sourceforge.net/" rel="nofollow"&gt;Z-Push&lt;/a&gt; is free (if one can host it one's self).&lt;br /&gt;&lt;b&gt;Problem&lt;/b&gt;: the iPhone only supports a single Exchange server at a time.  Therefore, I'd have to choose between getting push E-mail versus over-the-air calendar/contacts synchronization that is currently provided through Google's own "Sync" Exchange wrapper.
&lt;/li&gt;&lt;li&gt; Write an app that uses the new Push Notification service in firmware 3.0 to remotely push mail to the phone.&lt;br /&gt;&lt;b&gt;Problem&lt;/b&gt;: this would probably be a very lucrative solution (&lt;i&gt;i.e.&lt;/i&gt;, I'll bet lots of people would pay a nominal one-time fee for this app), but it would almost definitely be rejected from the App Store.  Furthermore, it would require me to set up a back-end server running 24/7 to push the updates.
&lt;/li&gt;&lt;li&gt; Jailbreak the phone and write a daemon that runs in the background, connects to Google's IMAP service, and goes into &lt;a href="http://en.wikipedia.org/wiki/IMAP_IDLE" class="external text" title="http://en.wikipedia.org/wiki/IMAP_IDLE" rel="nofollow"&gt;IDLE mode&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;Problem&lt;/b&gt;: the only Apple device I own is my iPhone; how might I compile my own apps for it?  (Sure, my wife does have a PowerBook, but that would be cheating, right?  Right‽)
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Therefore, I had to set up the iPhone development toolchain on Linux.  It turns out that this path was paved a number of years ago (well before Apple even released their official SDK).  It appears, however, that the primary audience for the open toolchain were Apple users that just wanted to code native apps for their phones.  Therefore, it seems, much of the interest in the open toolchain waned after Apple made it possible to compile both legitimate apps (&lt;i&gt;i.e.&lt;/i&gt;, those destined for the App Store) and jailbreak apps using their XCode IDE.  The problem, of course, is that XCode requires OSX.  Since it appears that the open toolchain hasn't been actively maintained for some time, it required a bit of hacking on my part to get it to work.
&lt;/p&gt;&lt;p&gt;I mentioned that I had gotten this working in Linux at a recent &lt;a href="http://phillycocoa.org/" class="external text" title="http://phillycocoa.org/" rel="nofollow"&gt;Philly CocoaHeads meeting&lt;/a&gt; and there was a surprising amount of interest.  Therefore, the remainder of this article serves to explain (to the best of my memory) the steps required in the installation.
&lt;/p&gt;&lt;p&gt;Before I start, though, this is what the toolchain will let you do:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; Compile native apps (both console and Cocoa/Springboard/GUI) for the Apple iPhone.
&lt;/li&gt;&lt;li&gt; Utilize API features up to version 2.2.
&lt;/li&gt;&lt;li&gt; Do both of the above on Linux/BSD (probably also including—but not personally tested—on OSX and from Cygwin).
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;This is what the toolchain &lt;i&gt;will not&lt;/i&gt; let you do:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; Use API 3.0 features (AFAIK), however, the binaries created by the toolchain can run on iPhones running firmware 3.0 just fine.
&lt;/li&gt;&lt;li&gt; Submit apps to the App Store.
&lt;/li&gt;&lt;li&gt; Simulate the iPhone on your desktop (like XCode's simulator).
&lt;/li&gt;&lt;li&gt; Install binaries to a non-jailbroken phone (AFAIK).
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Prerequisites:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; You must have &lt;a href="http://subversion.tigris.org/" class="external text" title="http://subversion.tigris.org/" rel="nofollow"&gt;Subversion&lt;/a&gt; installed.
&lt;/li&gt;&lt;li&gt; You must have a non-ancient version of Java installed.
&lt;/li&gt;&lt;li&gt; You need the &lt;a href="http://code.google.com/p/xar" class="external text" title="http://code.google.com/p/xar" rel="nofollow"&gt;xar&lt;/a&gt; and &lt;a href="http://www.gnu.org/software/cpio/cpio.html" class="external text" title="http://www.gnu.org/software/cpio/cpio.html" rel="nofollow"&gt;cpio&lt;/a&gt; utilities.
&lt;/li&gt;&lt;li&gt; You obviously need all of the dependencies required to compile the gcc cross-compiler (none of which I know offhand).
&lt;/li&gt;&lt;li&gt; Command line skillz.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Now, the instructions.  These instructions are a modification of those found &lt;a href="http://code.google.com/p/iphonedevonlinux/wiki/Installation" class="external text" title="http://code.google.com/p/iphonedevonlinux/wiki/Installation" rel="nofollow"&gt;here&lt;/a&gt;.  You can refer to that page and utilize its comments section if you have any trouble.  This following is the general sequence I used (although I may have forgotten something):
&lt;/p&gt;
&lt;pre&gt;
$ mkdir -p ~/projects/iphone/
$ cd ~/projects/iphone/toolchain
$ svn checkout http://iphonedevonlinux.googlecode.com/svn/trunk/ ./
&lt;/pre&gt;
&lt;p&gt;Modify &lt;code&gt;IPHONE_WIKI_KEY_URL&lt;/code&gt; in &lt;code&gt;toolchain.sh&lt;/code&gt; (around line 96) to be the following:
&lt;/p&gt;
&lt;pre&gt;http://www.theiphonewiki.com/wiki/index.php?title=VFDecrypt_Keys:_2.x&lt;/pre&gt;
&lt;p&gt;and then run
&lt;/p&gt;
&lt;pre&gt;
$ chmod u+x toolchain.sh
$ mkdir -p files/firmware
$ mkdir -p sdks
&lt;/pre&gt;
&lt;p&gt;Download the latest iPhone SDK from &lt;a href="http://developer.apple.com/iphone/" class="external text" title="http://developer.apple.com/iphone/" rel="nofollow"&gt;here&lt;/a&gt; (you need to have an apple developer account, which is free).  This should end up being a &lt;code&gt;.dmg&lt;/code&gt; file.  You need to get two &lt;code&gt;.sdk&lt;/code&gt; files out of this &lt;code&gt;.dmg&lt;/code&gt;.  The &lt;code&gt;toolchain.sh&lt;/code&gt; file has code to do this for you, but I couldn't get it to work.  Therefore, I used a free tool called &lt;code&gt;hfsexplorer&lt;/code&gt;; download it &lt;a href="http://hem.bredband.net/catacombae/hfsx.html" class="external text" title="http://hem.bredband.net/catacombae/hfsx.html" rel="nofollow"&gt;here&lt;/a&gt;.  It doesn't claim to work in Linux, but it turns out that it was written in Java so in actuality it works fine.  Just download the &lt;code&gt;.zip&lt;/code&gt; version, go into the &lt;code&gt;./lib/&lt;/code&gt; directory and run
&lt;/p&gt;
&lt;pre&gt;
$ java -jar hfsx.jar
&lt;/pre&gt;
&lt;p&gt;A GUI will pop up.  Open the iPhone SDK &lt;code&gt;.dmg&lt;/code&gt; file and locate &lt;code&gt;MacOSX10.5.pkg&lt;/code&gt; (or
whatever is the latest version) in the &lt;code&gt;Packages&lt;/code&gt; directory; extract it to the &lt;code&gt;sdks&lt;/code&gt; subdirectory in your toolchain directory.  Rename it to &lt;code&gt;macosx.pkg&lt;/code&gt;. Also in the &lt;code&gt;Packages&lt;/code&gt; directory, there should be a &lt;code&gt;.pkg&lt;/code&gt; for the latest iPhone SDK.  I forget what it was called, but it should be obvious (famous last words).  Also extract that file to the &lt;code&gt;sdks&lt;/code&gt; directory and rename it to &lt;code&gt;iphone.pkg&lt;/code&gt;.
&lt;/p&gt;
&lt;pre&gt;
$ cd ~/projects/iphone/toolchain/sdks
$ xar -xf iphone.pkg Payload
$ cat Payload | zcat | cpio -id
$ mv -f mv -f Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS*.sdk .
$ xar -xf macosx.pkg Payload
$ cat Payload | zcat | cpio -id
$ mv -f SDKs/MacOSX10.*.sdk .
&lt;/pre&gt;
&lt;p&gt;Now you should have two &lt;code&gt;.sdk&lt;/code&gt; files in the &lt;code&gt;sdks&lt;/code&gt; dir.  You can delete all other files in that directory; you don't need them anymore.
&lt;/p&gt;
&lt;pre&gt;
$ cd ~/projects/iphone/toolchain/files/firmware
&lt;/pre&gt;
&lt;p&gt;Download the &lt;code&gt;.ipsw&lt;/code&gt; file for the 2.2.1 firmware into this directory (I haven't yet tried this with the 3.0 firmware).  You can find the &lt;code&gt;.ipsw&lt;/code&gt; file stored within the file structure of iTunes' Application Support directory, if you've ever used that version of iTunes to upgrade your iPhone to that firmware.  If you don't have it, it's widely available online (just make sure to check the hash after you download).
&lt;/p&gt;&lt;p&gt;Now we're ready for the big step: compiling the toolchain!
&lt;/p&gt;
&lt;pre&gt;
$ cd ~/projects/iphone/toolchain/
$ ./toolchain.sh headers
$ ./toolchain.sh firmware
$ ./toolchain.sh darwin_sources
$ ./toolchain.sh build
&lt;/pre&gt;
&lt;p&gt;Now you can optionally remove some temporary files:
&lt;/p&gt;
&lt;pre&gt;
$ ./toolchain.sh clean
&lt;/pre&gt;
&lt;p&gt;You can test the toolchain by following the instructions here in the section of that same name, &lt;a href="http://code.google.com/p/iphonedevonlinux/wiki/Installation" class="external text" title="http://code.google.com/p/iphonedevonlinux/wiki/Installation" rel="nofollow"&gt;here&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Good luck!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=MQE2VOigLVw:9IYq0dFV8FM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=MQE2VOigLVw:9IYq0dFV8FM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=MQE2VOigLVw:9IYq0dFV8FM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=MQE2VOigLVw:9IYq0dFV8FM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=MQE2VOigLVw:9IYq0dFV8FM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=MQE2VOigLVw:9IYq0dFV8FM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=MQE2VOigLVw:9IYq0dFV8FM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/MQE2VOigLVw" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:iPhone_development</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:File_drop</id>
		<title>File drop</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/YyJtB14hm3U/Blog:File_drop" />
				<updated>2009-07-01T18:41:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Continuing the recent theme of &lt;a href="http://www.sultanik.com/Blog:Visualizing_Twitter" title="Blog:Visualizing Twitter"&gt;posting&lt;/a&gt;-&lt;a href="http://www.sultanik.com/Blog:Awaiting_death" title="Blog:Awaiting death"&gt;random&lt;/a&gt;-&lt;a href="http://www.sultanik.com/Blog:Mail_notifier" title="Blog:Mail notifier"&gt;scripts&lt;/a&gt;-as-blog-entries…
&lt;/p&gt;&lt;p&gt;I recently needed a quick and dirty way to send a really large (~1 gigabyte) file to someone.  We were both on the same LAN, so it didn't really make sense for me to upload it to my externally hosted web server.  I do not have a web server installed on my laptop and, at the time, it seemed like overkill to install a web server just so I could send him my file.  Using a thumb drive or &lt;a href="http://en.wikipedia.org/wiki/Secure_copy" class="external text" title="http://en.wikipedia.org/wiki/Secure_copy" rel="nofollow"&gt;scp&lt;/a&gt; would have been an option, but each would require the recipient to be physically at my computer (despite being on the same LAN, he was a 10 minute walk away).  Therefore, I gave myself a 10 minute deadline to code my own solution (plus it would be a fun diversion from writing my journal paper due later that day).
&lt;/p&gt;&lt;p&gt;Given that I had a &lt;i&gt;whole&lt;/i&gt; 10 minutes (an eternity when it comes to Perl hacking), I figured I might as well make my method generalized (&lt;i&gt;i.e.&lt;/i&gt;, not only should my script be able to send files, but it should also be able to receive).
&lt;/p&gt;&lt;p&gt;First, I had to decide on a method.  &lt;a href="http://en.wikipedia.org/wiki/FTP" class="external text" title="http://en.wikipedia.org/wiki/FTP" rel="nofollow"&gt;FTP&lt;/a&gt; seemed like a logical choice, but, besides really tech savvy people, who has full-blown FTP clients installed these days?  In keeping with my generality goal, my solution would ideally be usable by, say, my mom.  And &lt;a href="http://www.youtube.com/watch?v=Cs3eo-XKxIY" class="external text" title="http://www.youtube.com/watch?v=Cs3eo-XKxIY" rel="nofollow"&gt;moms don't know 'bout my FTP&lt;/a&gt;.  Everyone, my mom (and my mom's mom) included, has a web browser and knows how to use it.  Therefore, good ol' HTTP it was.  And I even had a bunch of &lt;a href="http://www.sultanik.com/Wireless_remote_control" title="Wireless remote control"&gt;old code&lt;/a&gt; to hack together!
&lt;/p&gt;&lt;p&gt;I ended up with a script that I call &lt;code&gt;filedrop&lt;/code&gt;.  Here's the usage:
&lt;/p&gt;
&lt;pre&gt;
$ filedrop
Version: filedrop 0.1 2009-07-01 http://www.sultanik.com/
Copyright (C) 2009 Evan A. Sultanik

Usage: filedrop [OPTIONS] FILE_PATH

Options:
  -s           send a file by hosting it on a local web server (default)
  -r           receive a file by accepting it from a local web server.
               FILE_PATH should be a directory to which the files should be
               saved.  FILE_PATH will default to '.' in this mode.
  -n, --num=N  quit after sending/receiving N files.  If N is less than zero
               the program will send/receive files until manually
               terminated.  If N is zero then the program will immediately
               quit.  Default is -1.
&lt;/pre&gt;
&lt;p&gt;And here's an example of how the file transfer went down:&lt;br /&gt;&lt;br /&gt;
&lt;font color="red"&gt;LeEtH4X0r:&lt;/font&gt;  Y0 Home Skillet! Can you fry me up some juarez‽&lt;br /&gt;
&lt;font color="blue"&gt;Me:&lt;/font&gt;  Indubitably!&lt;br /&gt;
&lt;/p&gt;
&lt;pre&gt;
$ filedrop -s -n1 ./hugefile.tar.gz
Server running at: http://my_ip:47489/
&lt;/pre&gt;
&lt;p&gt;&lt;font color="blue"&gt;Me:&lt;/font&gt;  Go to http://my_ip:47489/&lt;br /&gt;
&lt;font color="red"&gt;LeEtH4X0r:&lt;/font&gt;  ZOMGKTHXBAI!!!!1ONE&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Here's the code:
&lt;/p&gt;
&lt;div dir="ltr" style="text-align: left;"&gt;&lt;pre class="source-perl"&gt;&lt;span class="co1"&gt;#!/usr/bin/perl -w&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw2"&gt;use&lt;/span&gt; HTTP::&lt;span class="me2"&gt;Daemon&lt;/span&gt;;
&lt;span class="kw2"&gt;use&lt;/span&gt; HTTP::&lt;span class="me2"&gt;Status&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$version&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;0.1&amp;quot;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$date&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;2009-07-01&amp;quot;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$copyright&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;2009&amp;quot;&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$port&lt;/span&gt; = &lt;span class="nu0"&gt;80&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw2"&gt;sub&lt;/span&gt; print_usage &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Version: filedrop $version $date http://www.sultanik.com/&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Copyright (C) $copyright Evan A. Sultanik&lt;span class="es0"&gt;\n&lt;/span&gt;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Usage: filedrop [OPTIONS] FILE_PATH&lt;span class="es0"&gt;\n&lt;/span&gt;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Options:&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;  -s           send a file by hosting it on a local web server (default)&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;  -r           receive a file by accepting it from a local web server.&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;               FILE_PATH should be a directory to which the files should be&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;               saved.  FILE_PATH will default to '.' in this mode.&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;  -n, --num=N  quit after sending/receiving N files.  If N is less than zero&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;               the program will send/receive files until manually&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;               terminated.  If N is zero then the program will immediately&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;               quit.  Default is -1.&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$mode&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$num&lt;/span&gt; = &lt;span class="nu0"&gt;-1&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$last&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$nextIsN&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;;
&lt;span class="kw1"&gt;foreach&lt;/span&gt; &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$arg&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@ARGV&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$arg&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;-s&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="re0"&gt;$mode&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$arg&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;-r&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="re0"&gt;$mode&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$arg&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;-n&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="re0"&gt;$nextIsN&lt;/span&gt; = &lt;span class="nu0"&gt;1&lt;/span&gt;;
        &lt;span class="kw1"&gt;next&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$arg&lt;/span&gt; =~ /-n&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;\d+&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;/&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="re0"&gt;$num&lt;/span&gt; = $&lt;span class="nu0"&gt;1&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$arg&lt;/span&gt; =~ &lt;span class="kw3"&gt;m&lt;/span&gt;/--num=&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;\d+&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;/&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="re0"&gt;$num&lt;/span&gt; = $&lt;span class="nu0"&gt;1&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$nextIsN&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="re0"&gt;$num&lt;/span&gt; = &lt;span class="re0"&gt;$arg&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;!&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$last&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            print_usage&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class="kw3"&gt;die&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Invalid option: &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$last&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
        &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
        &lt;span class="re0"&gt;$last&lt;/span&gt; = &lt;span class="re0"&gt;$arg&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="re0"&gt;$nextIsN&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$last&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class="re0"&gt;$mode&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    print_usage&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class="kw3"&gt;die&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Path to a file to host expected!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$last&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class="re0"&gt;$mode&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="re0"&gt;$last&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$file&lt;/span&gt; = &lt;span class="re0"&gt;$last&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw3"&gt;exit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$num&lt;/span&gt; == &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$d&lt;/span&gt; = HTTP::&lt;span class="me2"&gt;Daemon&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;new&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;LocalPort =&amp;gt; &lt;span class="re0"&gt;$port&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; || HTTP::&lt;span class="me2"&gt;Daemon&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;new&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; || &lt;span class="kw3"&gt;die&lt;/span&gt;;
&lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Server running at: &amp;quot;&lt;/span&gt;, &lt;span class="re0"&gt;$d&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;url&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$servings&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;;
&lt;span class="kw1"&gt;while&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$c&lt;/span&gt; = &lt;span class="re0"&gt;$d&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;accept&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw1"&gt;while&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$r&lt;/span&gt; = &lt;span class="re0"&gt;$c&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;get_request&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$mode&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;s&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$r&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;method&lt;/span&gt; eq &lt;span class="st0"&gt;'GET'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
                &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Someone's downloading!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
                &lt;span class="re0"&gt;$c&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;send_file_response&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$file&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
                &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Download finished!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
                &lt;span class="re0"&gt;$servings&lt;/span&gt;++;
            &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
                &lt;span class="re0"&gt;$c&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;send_error&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;RC_FORBIDDEN&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
            &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
        &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$mode&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$r&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;method&lt;/span&gt; eq &lt;span class="st0"&gt;'POST'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
                &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Someone is uploading!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
                &lt;span class="re0"&gt;$servings&lt;/span&gt;++;
                &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$url&lt;/span&gt; = &lt;span class="re0"&gt;$r&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;content&lt;/span&gt;;
                &lt;span class="kw1"&gt;while&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$url&lt;/span&gt; =~ &lt;span class="kw3"&gt;m&lt;/span&gt;/.*?-+&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;\d+&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;\r\nContent-Disposition:.*? filename=&lt;span class="st0"&gt;&amp;quot;([^&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;+&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;.*?&lt;span class="es0"&gt;\r&lt;/span&gt;&lt;span class="es0"&gt;\n&lt;/span&gt;&lt;span class="es0"&gt;\r&lt;/span&gt;&lt;span class="es0"&gt;\n&lt;/span&gt;(.*?)&lt;span class="es0"&gt;\r&lt;/span&gt;&lt;span class="es0"&gt;\n&lt;/span&gt;-+&lt;span class="es0"&gt;\1&lt;/span&gt;-+(.*)$/ism){
                    my $id = $1;
                    my $filename = $2;
                    my $content = $3;
                    $url = $4;
                    my $newName = $filename;
                    my $i = 0;
                    $newName = $filename . &amp;quot;&lt;/span&gt;.&lt;span class="st0"&gt;&amp;quot; . ++$i while(-e $file . &amp;quot;&lt;/span&gt;/&lt;span class="st0"&gt;&amp;quot; . $newName);
                    if($i &amp;gt; 0) {
                        print &amp;quot;&lt;/span&gt;A file of named &lt;span class="re0"&gt;$filename&lt;/span&gt; already &lt;span class="kw3"&gt;exists&lt;/span&gt; in &lt;span class="re0"&gt;$file&lt;/span&gt;!\n&lt;span class="st0"&gt;&amp;quot;;
                        print &amp;quot;&lt;/span&gt;Saving to &lt;span class="st0"&gt;&amp;quot; . $file . &amp;quot;&lt;/span&gt;/&lt;span class="st0"&gt;&amp;quot; . $newName . &amp;quot;&lt;/span&gt; instead.\n&lt;span class="st0"&gt;&amp;quot;;
                        $filename = $newName;
                    }
                    open(OUTFILE,&amp;quot;&lt;/span&gt;&amp;gt;&lt;span class="st0"&gt;&amp;quot; . $file . &amp;quot;&lt;/span&gt;/&lt;span class="st0"&gt;&amp;quot; . $filename) or die(&amp;quot;&lt;/span&gt;Error opening &lt;span class="re0"&gt;$file&lt;/span&gt;/&lt;span class="re0"&gt;$filename&lt;/span&gt; &lt;span class="kw1"&gt;for&lt;/span&gt; writing!\n&lt;span class="st0"&gt;&amp;quot;);
                    binmode OUTFILE;
                    print OUTFILE $content;
                    close(OUTFILE);
                    print &amp;quot;&lt;/span&gt;Received &lt;span class="re0"&gt;$filename&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;ID: &lt;span class="re0"&gt;$id&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;\n&lt;span class="st0"&gt;&amp;quot;;                    
                }
                $h = HTTP::Headers-&amp;gt;new;
                $h-&amp;gt;header('Content-Type' =&amp;gt; 'text/html');
                my $msg = &amp;quot;&lt;/span&gt;&lt;span class="re4"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;span class="re4"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;span class="re4"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Uploaded&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;span class="re4"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;span class="re4"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Uploaded!&amp;lt;/h1&amp;gt;&lt;span class="st0"&gt;&amp;quot;;
                $msg .= &amp;quot;&lt;/span&gt;&lt;span class="re4"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&amp;lt;a href=\&lt;span class="st0"&gt;&amp;quot;/&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;gt;Click here&amp;lt;/a&amp;gt; to upload another file.&amp;lt;/p&amp;gt;&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$num&lt;/span&gt; &amp;lt; &lt;span class="nu0"&gt;0&lt;/span&gt; || &lt;span class="re0"&gt;$servings&lt;/span&gt; &amp;lt; &lt;span class="re0"&gt;$num&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
                &lt;span class="re0"&gt;$msg&lt;/span&gt; .= &lt;span class="st0"&gt;&amp;quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;/span&gt;;
                &lt;span class="re0"&gt;$r&lt;/span&gt; = HTTP::&lt;span class="me2"&gt;Response&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;new&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt; HTTP_OK, &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="re0"&gt;$h&lt;/span&gt;, &lt;span class="re0"&gt;$msg&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
                &lt;span class="re0"&gt;$c&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;send_response&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$r&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;                
            &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$r&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;method&lt;/span&gt; eq &lt;span class="st0"&gt;'GET'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
                &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Someone connected!  Sending the upload form...&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
                &lt;span class="re0"&gt;$h&lt;/span&gt; = HTTP::&lt;span class="me2"&gt;Headers&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;new&lt;/span&gt;;
                &lt;span class="re0"&gt;$h&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;header&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'Content-Type'&lt;/span&gt; =&amp;gt; &lt;span class="st0"&gt;'text/html'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
                &lt;span class="re0"&gt;$r&lt;/span&gt; = HTTP::&lt;span class="me2"&gt;Response&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;new&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt; HTTP_OK, &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="re0"&gt;$h&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Upload&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;form name=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;upload&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt; action=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;/&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt; enctype=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;multipart/form-data&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt; method=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;POST&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;gt;
&amp;lt;p&amp;gt;
Please specify a file, or a set of files:&amp;lt;br&amp;gt;
&amp;lt;input type=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;file&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt; name=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;datafile&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt; size=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;40&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;div&amp;gt;
&amp;lt;input type=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;submit&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt; value=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;Upload&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
                &lt;span class="re0"&gt;$c&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;send_response&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$r&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
                &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Sent!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
            &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
                &lt;span class="re0"&gt;$c&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;send_error&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;RC_FORBIDDEN&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
            &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
            &lt;span class="kw1"&gt;last&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$num&lt;/span&gt; &amp;gt; &lt;span class="nu0"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class="re0"&gt;$servings&lt;/span&gt; &amp;gt;= &lt;span class="re0"&gt;$num&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;            
        &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
        &lt;span class="kw1"&gt;last&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$num&lt;/span&gt; &amp;gt; &lt;span class="nu0"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class="re0"&gt;$servings&lt;/span&gt; &amp;gt;= &lt;span class="re0"&gt;$num&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="re0"&gt;$c&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;close&lt;/span&gt;;
    &lt;span class="kw3"&gt;undef&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$c&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw1"&gt;last&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$num&lt;/span&gt; &amp;gt; &lt;span class="nu0"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class="re0"&gt;$servings&lt;/span&gt; &amp;gt;= &lt;span class="re0"&gt;$num&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw3"&gt;close&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$d&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=YyJtB14hm3U:N5nCw5kU71w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=YyJtB14hm3U:N5nCw5kU71w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=YyJtB14hm3U:N5nCw5kU71w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=YyJtB14hm3U:N5nCw5kU71w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=YyJtB14hm3U:N5nCw5kU71w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=YyJtB14hm3U:N5nCw5kU71w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=YyJtB14hm3U:N5nCw5kU71w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/YyJtB14hm3U" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:File_drop</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Mail_notifier</id>
		<title>Mail notifier</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/J0-t2dmpAu4/Blog:Mail_notifier" />
				<updated>2009-06-22T16:32:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;div class="thumb tright"&gt;&lt;div class="thumbinner" style="width:202px;"&gt;&lt;a href="http://www.sultanik.com/Image:EmailNotification.png" class="image" title="An example of the notifier, well, notifying."&gt;&lt;img alt="An example of the notifier, well, notifying." src="http://www.sultanik.com/images/thumb/8/83/EmailNotification.png/200px-EmailNotification.png" width="200" height="150" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:EmailNotification.png" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;An example of the notifier, well, notifying.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I recently caught a glimpse of how &lt;a href="http://toolbar.google.com/toolbar/gmail-helper/" class="external text" title="http://toolbar.google.com/toolbar/gmail-helper/" rel="nofollow"&gt;Gmail Notifier&lt;/a&gt; works on a friend's Mac.  It looked pretty cool.  Unfortunately for me, though, there's no reasonable facsimile in Linux.  Sure, there are a &lt;a href="http://gmail-notify.sourceforge.net/" class="external text" title="http://gmail-notify.sourceforge.net/" rel="nofollow"&gt;couple&lt;/a&gt; &lt;a href="http://sourceforge.net/projects/kcheckgmail" class="external text" title="http://sourceforge.net/projects/kcheckgmail" rel="nofollow"&gt;options&lt;/a&gt;, but they aren't available in Gentoo's package management system.  Given my &lt;a href="http://www.sultanik.com/Blog:Awaiting_death" title="Blog:Awaiting death"&gt;recent experience dealing with E-mail from Perl&lt;/a&gt;, I figured it would be just as easy to write my own E-mail notifier as it would be to manually install these programs (along with their dependencies).  I was right.  I just spent the last ~20 minutes (while idling through a meeting) writing such an app.  The code follows below.  Its only dependency is &lt;a href="https://sourceforge.net/projects/libxosd/" class="external text" title="https://sourceforge.net/projects/libxosd/" rel="nofollow"&gt;XOSD&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;b&gt;Disclaimer:&lt;/b&gt; I blatantly cribbed some of my code from &lt;a href="http://www.perlmonks.org/?node_id=649742" class="external text" title="http://www.perlmonks.org/?node_id=649742" rel="nofollow"&gt;Flavio Poletti&lt;/a&gt; (for the MTA stuff) and &lt;a href="http://www.mail-archive.com/perl-unix-users@listserv.activestate.com/msg02509.html" class="external text" title="http://www.mail-archive.com/perl-unix-users@listserv.activestate.com/msg02509.html" rel="nofollow"&gt;Bill Luebkert&lt;/a&gt; (for the password input).
&lt;/p&gt;&lt;p&gt;&lt;b&gt;Future work:&lt;/b&gt; right now the code simply polls the mail server once every three minutes.  In the future I'll post an update that uses IMAP Idle to reduce bandwidth.
&lt;/p&gt;
&lt;div dir="ltr" style="text-align: left;"&gt;&lt;pre class="source-perl"&gt;&lt;span class="co1"&gt;#!/usr/bin/perl -w&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw2"&gt;use&lt;/span&gt; Term::&lt;span class="me2"&gt;ReadKey&lt;/span&gt;;	END &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt; ReadMode &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'restore'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;	&lt;span class="co1"&gt;# just in case&lt;/span&gt;
&lt;span class="kw2"&gt;use&lt;/span&gt; Mail::&lt;span class="me2"&gt;IMAPClient&lt;/span&gt;;
&lt;span class="kw2"&gt;use&lt;/span&gt; IO::&lt;span class="me2"&gt;Socket&lt;/span&gt;::&lt;span class="me2"&gt;SSL&lt;/span&gt;;
&lt;span class="kw2"&gt;use&lt;/span&gt; File::&lt;span class="me2"&gt;HomeDir&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$username&lt;/span&gt; = &lt;span class="st0"&gt;'youremail@domain.com'&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$sleeptime&lt;/span&gt; = &lt;span class="nu0"&gt;180&lt;/span&gt;; &lt;span class="co1"&gt;# Time between checks, in seconds.&lt;/span&gt;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$conffile&lt;/span&gt; = File::&lt;span class="me2"&gt;HomeDir&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;my_home&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;/.checkmail&amp;quot;&lt;/span&gt;;
&amp;nbsp;
&lt;span class="co1"&gt;######################################################&lt;/span&gt;
&amp;nbsp;
&lt;span class="re0"&gt;$canceled&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;;
&lt;span class="re0"&gt;$inwhile&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw2"&gt;sub&lt;/span&gt; get_passwd &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="co1"&gt;# legal clear passwd chrs (26+26+10+24=86): &amp;quot;a-zA-Z0-9!#$%&amp;amp;()*+,-./:;&amp;lt;=&amp;gt;&amp;nbsp;?@[\]^&amp;quot;;&lt;/span&gt;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;@legal_clear&lt;/span&gt; = &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'a'&lt;/span&gt;..&lt;span class="st0"&gt;'z'&lt;/span&gt;, &lt;span class="st0"&gt;'A'&lt;/span&gt;..&lt;span class="st0"&gt;'Z'&lt;/span&gt;, &lt;span class="st0"&gt;'0'&lt;/span&gt;..&lt;span class="st0"&gt;'9'&lt;/span&gt;, &lt;span class="kw3"&gt;split&lt;/span&gt; //,
                       &lt;span class="st0"&gt;'!#$%&amp;amp;()*+,-./:;&amp;lt;=&amp;gt;&amp;nbsp;?@[\]^'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;%legal_clear&lt;/span&gt;; &lt;span class="kw1"&gt;foreach&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@legal_clear&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt; &lt;span class="re0"&gt;$legal_clear&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="re0"&gt;$_&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; = &lt;span class="nu0"&gt;1&lt;/span&gt;; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    $| = &lt;span class="nu0"&gt;1&lt;/span&gt;;	&lt;span class="co1"&gt;# unbuffer stdout to force unterminated line out&lt;/span&gt;
    ReadMode &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'cbreak'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$ch&lt;/span&gt; = &lt;span class="st0"&gt;''&lt;/span&gt;;
    &lt;span class="kw1"&gt;while&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;defined&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$ch&lt;/span&gt; = ReadKey &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
	&lt;span class="kw1"&gt;last&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="re0"&gt;$ch&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\x&lt;/span&gt;0D&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="re0"&gt;$ch&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\x&lt;/span&gt;0A&amp;quot;&lt;/span&gt;;
	&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$ch&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\x&lt;/span&gt;08&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;	&lt;span class="co1"&gt;# backspace&lt;/span&gt;
            &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\b&lt;/span&gt; &lt;span class="es0"&gt;\b&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;;	&lt;span class="co1"&gt;# back up 1&lt;/span&gt;
            &lt;span class="kw3"&gt;chop&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;;
            &lt;span class="kw1"&gt;next&lt;/span&gt;;
	&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
	&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$ch&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\x&lt;/span&gt;15&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;	&lt;span class="co1"&gt;# ^U&lt;/span&gt;
            &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\b&lt;/span&gt; &lt;span class="es0"&gt;\b&lt;/span&gt;&amp;quot;&lt;/span&gt; x &lt;span class="kw3"&gt;length&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;;	&lt;span class="co1"&gt;# back 1 for each char&lt;/span&gt;
            &lt;span class="re0"&gt;$passwd&lt;/span&gt; = &lt;span class="st0"&gt;''&lt;/span&gt;;
            &lt;span class="kw1"&gt;next&lt;/span&gt;;
	&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
	&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="kw3"&gt;exists&lt;/span&gt; &lt;span class="re0"&gt;$legal_clear&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="re0"&gt;$ch&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;'$ch' not a legal password character&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
            &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;'Password: '&lt;/span&gt;;
            &lt;span class="kw1"&gt;next&lt;/span&gt;;
	&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
	&lt;span class="re0"&gt;$passwd&lt;/span&gt; .= &lt;span class="re0"&gt;$ch&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    ReadMode &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'restore'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw3"&gt;return&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="re0"&gt;$SIG&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="st0"&gt;'INT'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; = &lt;span class="st0"&gt;'INT_handler'&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw2"&gt;sub&lt;/span&gt; INT_handler &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw3"&gt;exit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;!&lt;span class="re0"&gt;$inwhile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$canceled&lt;/span&gt; = &lt;span class="nu0"&gt;1&lt;/span&gt;;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;Caught Signal; exiting gracefully!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Password: &amp;quot;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$password&lt;/span&gt; = &amp;amp;get_passwd&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw1"&gt;while&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;!&lt;span class="re0"&gt;$canceled&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="re0"&gt;$inwhile&lt;/span&gt; = &lt;span class="nu0"&gt;1&lt;/span&gt;;
&amp;nbsp;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$socket&lt;/span&gt; = IO::&lt;span class="me2"&gt;Socket&lt;/span&gt;::&lt;span class="me2"&gt;SSL&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;new&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;
        PeerAddr =&amp;gt; &lt;span class="st0"&gt;'imap.gmail.com'&lt;/span&gt;,
        PeerPort =&amp;gt; &lt;span class="nu0"&gt;993&lt;/span&gt;,
        &lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="kw2"&gt;STDERR&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Warning: lost internet connection!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class="kw1"&gt;next&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;; &lt;span class="co1"&gt;# Perhaps we lost the internet connection?&lt;/span&gt;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$greeting&lt;/span&gt; = &amp;lt;&lt;span class="re0"&gt;$socket&lt;/span&gt;&amp;gt;;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$id&lt;/span&gt;, &lt;span class="re0"&gt;$answer&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; = &lt;span class="kw3"&gt;split&lt;/span&gt; /\&lt;span class="kw3"&gt;s&lt;/span&gt;+/, &lt;span class="re0"&gt;$greeting&lt;/span&gt;;
    &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;problems logging in: $greeting&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="re0"&gt;$answer&lt;/span&gt; &lt;span class="kw1"&gt;ne&lt;/span&gt; &lt;span class="st0"&gt;'OK'&lt;/span&gt;;
&amp;nbsp;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$client&lt;/span&gt; = Mail::&lt;span class="me2"&gt;IMAPClient&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;new&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;
        Socket   =&amp;gt; &lt;span class="re0"&gt;$socket&lt;/span&gt;,
        User     =&amp;gt; &lt;span class="re0"&gt;$username&lt;/span&gt;,
        Password =&amp;gt; &lt;span class="re0"&gt;$password&lt;/span&gt;,
        Uid =&amp;gt; &lt;span class="nu0"&gt;1&lt;/span&gt;,
        &lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;new(): $@&amp;quot;&lt;/span&gt;;
    &lt;span class="re0"&gt;$client&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;State&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Mail::&lt;span class="me2"&gt;IMAPClient&lt;/span&gt;::&lt;span class="me2"&gt;Connected&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$client&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;login&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;'login(): '&lt;/span&gt; . &lt;span class="re0"&gt;$client&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;LastError&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class="kw3"&gt;die&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Failed authentication!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;unless&lt;/span&gt; &lt;span class="re0"&gt;$client&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;IsAuthenticated&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class="re0"&gt;$client&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;examine&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'INBOX'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Could not examine: $@&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;@msgs&lt;/span&gt; = &lt;span class="re0"&gt;$client&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;unseen&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Could not search the inbox! $@&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$last_max&lt;/span&gt; = &lt;span class="nu0"&gt;-2&lt;/span&gt;;
    &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;-e &lt;span class="re0"&gt;$conffile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="co1"&gt;# Load the old largest&lt;/span&gt;
        &lt;span class="kw3"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;CONFFILE, &lt;span class="st0"&gt;&amp;quot;&amp;lt;&amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$conffile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Error opening &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$conffile&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
        &lt;span class="kw1"&gt;while&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re4"&gt;&amp;lt;CONFFILE&amp;gt;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$line&lt;/span&gt; = &lt;span class="re0"&gt;$_&lt;/span&gt;;
            &lt;span class="re0"&gt;$last_max&lt;/span&gt; = $&lt;span class="nu0"&gt;1&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$line&lt;/span&gt; =~ /^\&lt;span class="kw3"&gt;s&lt;/span&gt;*last_max_uid\&lt;span class="kw3"&gt;s&lt;/span&gt;*=\&lt;span class="kw3"&gt;s&lt;/span&gt;*&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;\d+&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;\&lt;span class="kw3"&gt;s&lt;/span&gt;*$/i&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
        &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
        &lt;span class="kw3"&gt;close&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;CONFFILE&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$max&lt;/span&gt; = &lt;span class="nu0"&gt;-1&lt;/span&gt;;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;@over&lt;/span&gt;;
    &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$msg&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@msgs&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="re0"&gt;$max&lt;/span&gt; = &lt;span class="re0"&gt;$msg&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="re0"&gt;$msg&lt;/span&gt; &amp;gt; &lt;span class="re0"&gt;$max&lt;/span&gt;;
        &lt;span class="kw3"&gt;push&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@over&lt;/span&gt;, &lt;span class="re0"&gt;$msg&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="re0"&gt;$msg&lt;/span&gt; &amp;gt; &lt;span class="re0"&gt;$last_max&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$max&lt;/span&gt; &amp;gt;= &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw3"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;CONFFILE, &lt;span class="st0"&gt;&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$conffile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Error opening $conffile for writing!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
        &lt;span class="kw3"&gt;print&lt;/span&gt; CONFFILE &lt;span class="st0"&gt;&amp;quot;last_max_uid = &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$max&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
        &lt;span class="kw3"&gt;close&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;CONFFILE&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$last_max&lt;/span&gt; &amp;gt;= &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw3"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;OSDC, &lt;span class="st0"&gt;&amp;quot;| osd_cat -c green -p middle -A center -s 2 -l 5 -f &lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;-bitstream-bitstream vera serif-*-*-*-*-17-*-*-*-*-*-*-*&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
        &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$m&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@over&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$hashref&lt;/span&gt; = &lt;span class="re0"&gt;$client&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;parse_headers&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$m&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;From&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
                &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Could not parse_headers: $@&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
            &lt;span class="kw3"&gt;print&lt;/span&gt; OSDC &lt;span class="st0"&gt;&amp;quot;New mail from &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$hashref&lt;/span&gt;-&amp;gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;From&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;-&amp;gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
        &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
        &lt;span class="kw3"&gt;close&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;OSDC&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class="re0"&gt;$client&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;logout&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw3"&gt;sleep&lt;/span&gt; &lt;span class="re0"&gt;$sleeptime&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=J0-t2dmpAu4:dWUPAP5Mi2Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=J0-t2dmpAu4:dWUPAP5Mi2Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=J0-t2dmpAu4:dWUPAP5Mi2Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=J0-t2dmpAu4:dWUPAP5Mi2Q:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=J0-t2dmpAu4:dWUPAP5Mi2Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=J0-t2dmpAu4:dWUPAP5Mi2Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=J0-t2dmpAu4:dWUPAP5Mi2Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/J0-t2dmpAu4" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Mail_notifier</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Awaiting_death</id>
		<title>Awaiting death</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/X5fHA32sWwo/Blog:Awaiting_death" />
				<updated>2009-06-06T17:25:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I've been running a number of experiments recently that require a lot of computing time.  "A lot" in this case being on the order of days.  It would therefore be nice to have a script that would automatically E-mail me when my experiments finish so I know to check the results.  I fully expected there to be some magic shell script out there somewhere dedicated to this very purpose: sending out an E-mail when a specified process dies.  Something like this:
&lt;/p&gt;
&lt;pre&gt;
$ ./run_experiments&amp;amp;
[1] 1337
$ emailwhendone 1337
Awaiting process 1337's death...
&lt;/pre&gt;
&lt;p&gt;As far as I can tell, however, there is no such script/program.  So, as usual, I took it upon myself to write my own.  The E-mailing part turned out to be a bit trickier than I had expected.
&lt;/p&gt;&lt;p&gt;I didn't want my script to be dependent on the existence of a local mail server; therefore, I first tried using &lt;a href="http://www.linux.com/archive/feature/132006" class="external text" title="http://www.linux.com/archive/feature/132006" rel="nofollow"&gt;sSMTP&lt;/a&gt;.  It turns out that sSMTP requires one to hard-code the remote SMTP server address in a &lt;code&gt;.conf&lt;/code&gt; file, so that approach was out.
&lt;/p&gt;&lt;p&gt;Next I tried &lt;a href="http://alma.ch/perl/Mail-Sendmail-FAQ.html" class="external text" title="http://alma.ch/perl/Mail-Sendmail-FAQ.html" rel="nofollow"&gt;&lt;code&gt;Mail::Sendmail&lt;/code&gt;&lt;/a&gt;, however, that module's support for authentication is poor at best.  That module also doesn't support SSL, so emailing through servers like Google Mail is out.
&lt;/p&gt;&lt;p&gt;Therefore, I finally settled on using &lt;code&gt;Net::SMTP::SSL&lt;/code&gt;, which unfortunately has four dependencies.  Luckily for me, those dependencies are all easily installable on Gentoo:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; dev-perl/Authen-SASL
&lt;/li&gt;&lt;li&gt; dev-perl/IO-Socket-SSL
&lt;/li&gt;&lt;li&gt; dev-perl/Net-SSLeay
&lt;/li&gt;&lt;li&gt; dev-perl/Net-SMTP-SSL
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;I call my script &lt;code&gt;emailwhendone&lt;/code&gt; because, well, that's exactly what it does.  The code follows at the end of this post.
&lt;/p&gt;&lt;p&gt;&lt;b&gt;Disclaimer:&lt;/b&gt; I blatantly cribbed some of my code from &lt;a href="http://robertmaldon.blogspot.com/2006/10/sending-email-through-google-smtp-from.html" class="external text" title="http://robertmaldon.blogspot.com/2006/10/sending-email-through-google-smtp-from.html" rel="nofollow"&gt;Robert Maldon&lt;/a&gt; (for the MTA stuff) and &lt;a href="http://www.mail-archive.com/perl-unix-users@listserv.activestate.com/msg02509.html" class="external text" title="http://www.mail-archive.com/perl-unix-users@listserv.activestate.com/msg02509.html" rel="nofollow"&gt;Bill Luebkert&lt;/a&gt; (for the password input).
&lt;/p&gt;&lt;p&gt;The script can be given one of two parameters: either the PID of the process for which to wait or the unique name of the process (if there are multiple processes with the same name you will need to use the PID).  Right now I have the recipient E-mail address hard-coded; it should be fairly self evident from the code how to customize this.  Here's an example:
&lt;/p&gt;
&lt;pre&gt;
$ ./run_experiments&amp;amp;
[1] 1337
$ emailwhendone 1337
Password for youremail@domain.com: *******************
Waiting for process 1337 (run_experiments) to finish...
The process finished!
Sending an email to youremail@domain.com...
$
&lt;/pre&gt;
&lt;p&gt;Here's the code:
&lt;/p&gt;
&lt;div dir="ltr" style="text-align: left;"&gt;&lt;pre class="source-perl"&gt;&lt;span class="co1"&gt;#!/usr/bin/perl -w&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw2"&gt;use&lt;/span&gt; Net::&lt;span class="me2"&gt;SMTP&lt;/span&gt;::&lt;span class="me2"&gt;SSL&lt;/span&gt;;
&lt;span class="kw2"&gt;use&lt;/span&gt; Term::&lt;span class="me2"&gt;ReadKey&lt;/span&gt;;	END &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt; ReadMode &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'restore'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;	&lt;span class="co1"&gt;# just in case&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$destination&lt;/span&gt; = &lt;span class="st0"&gt;'youremail@domain.com'&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$server&lt;/span&gt; = &lt;span class="st0"&gt;'smtp.domain.com'&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$port&lt;/span&gt; = &lt;span class="nu0"&gt;465&lt;/span&gt;;
&amp;nbsp;
&lt;span class="co1"&gt;#####################################&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw2"&gt;sub&lt;/span&gt; usage &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot; Usage: emailwhendone [PID|PROCESS_NAME]&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$pid&lt;/span&gt; = &lt;span class="re0"&gt;$ARGV&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt; &amp;amp;usage&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$hostname&lt;/span&gt; = `hostname`;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$pidmatch&lt;/span&gt; = &lt;span class="nu0"&gt;-1&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$processmatch&lt;/span&gt; = &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;@pidmatches&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw3"&gt;open&lt;/span&gt; PRO, &lt;span class="st0"&gt;&amp;quot;/bin/ps axo pid,comm |&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;'Failed to open pipe to `ps`'&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw1"&gt;while&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re4"&gt;&amp;lt;PRO&amp;gt;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$_&lt;/span&gt; =~ &lt;span class="kw3"&gt;m&lt;/span&gt;/^\&lt;span class="kw3"&gt;s&lt;/span&gt;*&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;\d+&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;\&lt;span class="kw3"&gt;s&lt;/span&gt;+&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;.+&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;$/&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$matchpid&lt;/span&gt; = $&lt;span class="nu0"&gt;1&lt;/span&gt;;
        &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$matchprocess&lt;/span&gt; = $&lt;span class="nu0"&gt;2&lt;/span&gt;;
        &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$matchpid&lt;/span&gt; eq &lt;span class="re0"&gt;$pid&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="re0"&gt;$pidmatch&lt;/span&gt; = &lt;span class="re0"&gt;$matchpid&lt;/span&gt;;
            &lt;span class="re0"&gt;$processmatch&lt;/span&gt; = &lt;span class="re0"&gt;$matchprocess&lt;/span&gt;;
            &lt;span class="re0"&gt;@pidmatches&lt;/span&gt; = &lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="re0"&gt;$matchpid&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;;
            &lt;span class="kw1"&gt;last&lt;/span&gt;;
        &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$pid&lt;/span&gt; =~ &lt;span class="kw3"&gt;m&lt;/span&gt;/^\&lt;span class="kw3"&gt;s&lt;/span&gt;*&lt;span class="re0"&gt;$matchprocess&lt;/span&gt;\&lt;span class="kw3"&gt;s&lt;/span&gt;*$/&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="re0"&gt;$pidmatch&lt;/span&gt; = &lt;span class="re0"&gt;$matchpid&lt;/span&gt;;
            &lt;span class="kw3"&gt;push&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@pidmatches&lt;/span&gt;, &lt;span class="re0"&gt;$matchpid&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
            &lt;span class="re0"&gt;$processmatch&lt;/span&gt; = &lt;span class="re0"&gt;$matchprocess&lt;/span&gt;;
        &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw3"&gt;close&lt;/span&gt; PRO;
&amp;nbsp;
&lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;scalar&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@pidmatches&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &amp;lt;= &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$pid&lt;/span&gt; =~ &lt;span class="kw3"&gt;m&lt;/span&gt;/^\&lt;span class="kw3"&gt;s&lt;/span&gt;*\d+\&lt;span class="kw3"&gt;s&lt;/span&gt;*$/&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Error: no process with ID &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$pid&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Error: no process named &lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$pid&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="kw3"&gt;exit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;elsif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;scalar&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@pidmatches&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &amp;gt; &lt;span class="nu0"&gt;1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;There are multiple PIDs that match this process name!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$match&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@pidmatches&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="re0"&gt;$match&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\t&lt;/span&gt;&amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$pid&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="kw3"&gt;exit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;2&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw2"&gt;sub&lt;/span&gt; get_passwd &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="co1"&gt;# legal clear passwd chrs (26+26+10+24=86): &amp;quot;a-zA-Z0-9!#$%&amp;amp;()*+,-./:;&amp;lt;=&amp;gt;&amp;nbsp;?@[\]^&amp;quot;;&lt;/span&gt;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;@legal_clear&lt;/span&gt; = &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'a'&lt;/span&gt;..&lt;span class="st0"&gt;'z'&lt;/span&gt;, &lt;span class="st0"&gt;'A'&lt;/span&gt;..&lt;span class="st0"&gt;'Z'&lt;/span&gt;, &lt;span class="st0"&gt;'0'&lt;/span&gt;..&lt;span class="st0"&gt;'9'&lt;/span&gt;, &lt;span class="kw3"&gt;split&lt;/span&gt; //,
                       &lt;span class="st0"&gt;'!#$%&amp;amp;()*+,-./:;&amp;lt;=&amp;gt;&amp;nbsp;?@[\]^'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;%legal_clear&lt;/span&gt;; &lt;span class="kw1"&gt;foreach&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;@legal_clear&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt; &lt;span class="re0"&gt;$legal_clear&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="re0"&gt;$_&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; = &lt;span class="nu0"&gt;1&lt;/span&gt;; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    $| = &lt;span class="nu0"&gt;1&lt;/span&gt;;	&lt;span class="co1"&gt;# unbuffer stdout to force unterminated line out&lt;/span&gt;
    ReadMode &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'cbreak'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$ch&lt;/span&gt; = &lt;span class="st0"&gt;''&lt;/span&gt;;
    &lt;span class="kw1"&gt;while&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;defined&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$ch&lt;/span&gt; = ReadKey &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
	&lt;span class="kw1"&gt;last&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="re0"&gt;$ch&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\x&lt;/span&gt;0D&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="re0"&gt;$ch&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\x&lt;/span&gt;0A&amp;quot;&lt;/span&gt;;
	&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$ch&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\x&lt;/span&gt;08&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;	&lt;span class="co1"&gt;# backspace&lt;/span&gt;
            &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\b&lt;/span&gt; &lt;span class="es0"&gt;\b&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;;	&lt;span class="co1"&gt;# back up 1&lt;/span&gt;
            &lt;span class="kw3"&gt;chop&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;;
            &lt;span class="kw1"&gt;next&lt;/span&gt;;
	&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
	&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$ch&lt;/span&gt; eq &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\x&lt;/span&gt;15&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;	&lt;span class="co1"&gt;# ^U&lt;/span&gt;
            &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\b&lt;/span&gt; &lt;span class="es0"&gt;\b&lt;/span&gt;&amp;quot;&lt;/span&gt; x &lt;span class="kw3"&gt;length&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;;	&lt;span class="co1"&gt;# back 1 for each char&lt;/span&gt;
            &lt;span class="re0"&gt;$passwd&lt;/span&gt; = &lt;span class="st0"&gt;''&lt;/span&gt;;
            &lt;span class="kw1"&gt;next&lt;/span&gt;;
	&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
	&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="kw3"&gt;exists&lt;/span&gt; &lt;span class="re0"&gt;$legal_clear&lt;/span&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="re0"&gt;$ch&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;'$ch' not a legal password character&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
            &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;'Password: '&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;*&amp;quot;&lt;/span&gt; x &lt;span class="kw3"&gt;length&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;; &lt;span class="co1"&gt;# retype *'s&lt;/span&gt;
            &lt;span class="kw1"&gt;next&lt;/span&gt;;
	&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
	&lt;span class="re0"&gt;$passwd&lt;/span&gt; .= &lt;span class="re0"&gt;$ch&lt;/span&gt;;
	&lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;'*'&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    ReadMode &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'restore'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw3"&gt;return&lt;/span&gt; &lt;span class="re0"&gt;$passwd&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Password for &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$destination&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;: &amp;quot;&lt;/span&gt;;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$password&lt;/span&gt; = get_passwd&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw2"&gt;sub&lt;/span&gt; send_mail &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$subject&lt;/span&gt; = &lt;span class="re0"&gt;$_&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$body&lt;/span&gt; = &lt;span class="re0"&gt;$_&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="nu0"&gt;1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$smtp&lt;/span&gt;;
&amp;nbsp;
    &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="re0"&gt;$smtp&lt;/span&gt; = Net::&lt;span class="me2"&gt;SMTP&lt;/span&gt;::&lt;span class="me2"&gt;SSL&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;new&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$server&lt;/span&gt;,
                                        Port =&amp;gt; &lt;span class="re0"&gt;$port&lt;/span&gt;,
                                        Debug =&amp;gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Could not connect to server.&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;auth&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$destination&lt;/span&gt;, &lt;span class="re0"&gt;$password&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        || &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Authentication failed!&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;mail&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$destination&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;to&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$destination&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;data&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;datasend&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;From: &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$destination&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;datasend&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;To: &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$destination&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;datasend&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Subject: &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$subject&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;datasend&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;datasend&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$body&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;dataend&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="re0"&gt;$smtp&lt;/span&gt;-&amp;gt;&lt;span class="me1"&gt;quit&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Waiting for process &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$pidmatch&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot; (&amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$processmatch&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;) to finish...&amp;quot;&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw1"&gt;my&lt;/span&gt; &lt;span class="re0"&gt;$done&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;;
&lt;span class="kw1"&gt;do&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
    &lt;span class="re0"&gt;$done&lt;/span&gt; = &lt;span class="nu0"&gt;1&lt;/span&gt;;
    &lt;span class="kw3"&gt;open&lt;/span&gt; PRO, &lt;span class="st0"&gt;&amp;quot;/bin/ps axo pid |&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; &lt;span class="kw3"&gt;die&lt;/span&gt; &lt;span class="st0"&gt;'Failed to open pipe to `ps`'&lt;/span&gt;;
    &lt;span class="kw1"&gt;while&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re4"&gt;&amp;lt;PRO&amp;gt;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
        &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$_&lt;/span&gt; =~ &lt;span class="kw3"&gt;m&lt;/span&gt;/^\&lt;span class="kw3"&gt;s&lt;/span&gt;*&lt;span class="re0"&gt;$pidmatch&lt;/span&gt;\&lt;span class="kw3"&gt;s&lt;/span&gt;*$/&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;
            &lt;span class="re0"&gt;$done&lt;/span&gt; = &lt;span class="nu0"&gt;0&lt;/span&gt;;
            &lt;span class="kw1"&gt;last&lt;/span&gt;;
        &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    &lt;span class="kw3"&gt;close&lt;/span&gt; PRO;
    &lt;span class="kw3"&gt;sleep&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt; &lt;span class="kw1"&gt;while&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;!&lt;span class="re0"&gt;$done&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;The process finished!&lt;span class="es0"&gt;\n&lt;/span&gt;Sending an email to &amp;quot;&lt;/span&gt; . &lt;span class="re0"&gt;$destination&lt;/span&gt; . &lt;span class="st0"&gt;&amp;quot;...&amp;quot;&lt;/span&gt;;
&amp;nbsp;
&amp;amp;send_mail&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;'Process '&lt;/span&gt; . &lt;span class="re0"&gt;$pidmatch&lt;/span&gt; . &lt;span class="st0"&gt;' ('&lt;/span&gt; . &lt;span class="re0"&gt;$processmatch&lt;/span&gt; . &lt;span class="st0"&gt;') on '&lt;/span&gt; . &lt;span class="re0"&gt;$hostname&lt;/span&gt; . &lt;span class="st0"&gt;' finished!'&lt;/span&gt;, &lt;span class="st0"&gt;'It&lt;span class="es0"&gt;\'&lt;/span&gt;s done!'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class="kw3"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=X5fHA32sWwo:qp8mr4q_Lkw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=X5fHA32sWwo:qp8mr4q_Lkw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=X5fHA32sWwo:qp8mr4q_Lkw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=X5fHA32sWwo:qp8mr4q_Lkw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=X5fHA32sWwo:qp8mr4q_Lkw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=X5fHA32sWwo:qp8mr4q_Lkw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=X5fHA32sWwo:qp8mr4q_Lkw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/X5fHA32sWwo" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Awaiting_death</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Visualizing_Twitter</id>
		<title>Visualizing Twitter</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/lztZ3FSi6dQ/Blog:Visualizing_Twitter" />
				<updated>2009-05-04T02:10:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Alternate title: &lt;b&gt;Journey to the Center of the Twittersphere&lt;/b&gt;
&lt;/p&gt;&lt;p&gt;I've now been &lt;a href="http://www.sultanik.com/Twitter" title="Twitter"&gt;using Twitter&lt;/a&gt; for about six months.  While Twitter's minimalism is no doubt responsible for much of its success, I often pine for some additional social networking features.  High up on that list is a simple way of representing my closest neighbors—perhaps through a visualization—without having to manually navigate individual users' following/followers pages.  A well designed representation could be useful in a number of ways:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; It could expose previously unknown mutual relationships (&lt;i&gt;i.e.&lt;/i&gt;, "Wow, I didn't know &lt;b&gt;X&lt;/b&gt; and &lt;b&gt;Y&lt;/b&gt; knew each other!);
&lt;/li&gt;&lt;li&gt; It could reveal mutual acquaintances whom one did not know were on Twitter; and
&lt;/li&gt;&lt;li&gt; Metrics on the social network could be aggregated (&lt;i&gt;e.g.&lt;/i&gt;, degrees of separation).
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;This afternoon I spent an hour or so hacking together a Python script, which I have dubbed &lt;i&gt;TwitterGraph&lt;/i&gt;, to accomplish this.  Here is an example of the ~100 people nearest to me in the network:
&lt;/p&gt;&lt;p&gt;&lt;small&gt;You should be able to view the slides directly from your web browser below (thanks to &lt;a href="http://www.sultanik.com/Vuzit_MediaWiki_extension" title="Vuzit MediaWiki extension"&gt;Vuzit&lt;/a&gt;).  If you are viewing this from &lt;a href="http://feeds2.feedburner.com/EvanSultanik" class="external text" title="http://feeds2.feedburner.com/EvanSultanik" rel="nofollow"&gt;my RSS feed&lt;/a&gt;, however, you may need to &lt;a href="http://www.sultanik.com/Blog:Visualizing_Twitter" title="Blog:Visualizing Twitter"&gt;go to the actual page&lt;/a&gt; for it to work, or you can just &lt;a href="http://www.sultanik.com/images/4/4c/TwitterGraph.pdf" class="internal" title="TwitterGraph.pdf"&gt;download the PDF&lt;/a&gt;.  You will also need to download the PDF to zoom in all of the way.&lt;/small&gt;
&lt;/p&gt;
&lt;center&gt;&lt;iframe type="text/html" width="700px" height="400px" src="http://vuzit.com/view/?url=http://www.sultanik.com/images/4/4c/TwitterGraph.pdf&amp;amp;output=embed&amp;amp;z=0&amp;amp;key=a40472c0-0603-3551-bef8-e71794b65af5" frameborder="0" &gt;&lt;/iframe&gt;&lt;/center&gt;
&lt;p&gt;The code for TwitterGraph follows at the end of this post.  The code depends on the &lt;a href="http://pypi.python.org/pypi/simplejson/" class="external text" title="http://pypi.python.org/pypi/simplejson/" rel="nofollow"&gt;simplejson module&lt;/a&gt; and also &lt;a href="http://www.imagemagick.org/" class="external text" title="http://www.imagemagick.org/" rel="nofollow"&gt;imagemagick&lt;/a&gt;.  It uses the &lt;a href="http://apiwiki.twitter.com/" class="external text" title="http://apiwiki.twitter.com/" rel="nofollow"&gt;Twitter API&lt;/a&gt; to construct the network graph.  You don't need to have a Twitter account for this to work; it doesn't require authentication.  Each IP is, however, limited to 100 API calls per hour, unless your IP has been &lt;a href="http://apiwiki.twitter.com/Rate-limiting" class="external text" title="http://apiwiki.twitter.com/Rate-limiting" rel="nofollow"&gt;whitelisted&lt;/a&gt;.  My script takes this into account.  Each Twitter user requires three API to download their information, so one can load about 33 users per hour before reaching the rate limit.  TwitterGraph saves its data, so successive calls will continue off where it previously left.  Finally, TwitterGraph also calculates the &lt;a href="http://en.wikipedia.org/wiki/Stationary_distribution" class="external text" title="http://en.wikipedia.org/wiki/Stationary_distribution" rel="nofollow"&gt;stationary distribution&lt;/a&gt; of the subset of the network which it uses to rank the users (&lt;i&gt;à la&lt;/i&gt; Google's &lt;a href="http://en.wikipedia.org/wiki/PageRank" class="external text" title="http://en.wikipedia.org/wiki/PageRank" rel="nofollow"&gt;PageRank algorithm&lt;/a&gt;).
&lt;/p&gt;&lt;p&gt;Usage: paste the code below into &lt;code&gt;TwitterGraph.py&lt;/code&gt; and run the following:
&lt;/p&gt;
&lt;pre&gt;
$ chmod 755 ./TwitterGraph.py
$ ./TwitterGraph.py
You have 100 API calls remaining this hour; how many would you like to use now? 80
What is the twitter username for which you'd like to build a graph? ESultanik
Building the graph for ESultanik (output will be ESultanik.dot)...
.
.
.
$ dot -Tps ESultanik.dot -o ESultanik.ps &amp;amp;&amp;amp; epstopdf ESultanik.ps &amp;amp;&amp;amp; acroread ESultanik.pdf
$ dot -Tsvgz ESultanik.dot -o ESultanik.svgz
&lt;/pre&gt;
&lt;p&gt;There are also (unnecessary) command line options, the usage for which should be evident from the sourcecode.
&lt;/p&gt;
&lt;div dir="ltr" style="text-align: left;"&gt;&lt;pre class="source-python"&gt;&lt;span class="co1"&gt;#!/usr/bin/python&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;import&lt;/span&gt; simplejson
&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="kw3"&gt;urllib2&lt;/span&gt;
&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="kw3"&gt;urllib&lt;/span&gt;
&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="kw3"&gt;getopt&lt;/span&gt;, &lt;span class="kw3"&gt;sys&lt;/span&gt;
&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="kw3"&gt;re&lt;/span&gt;
&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="kw3"&gt;os&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;class&lt;/span&gt; TwitterError&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;Exception&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
  @&lt;span class="kw2"&gt;property&lt;/span&gt;
  &lt;span class="kw1"&gt;def&lt;/span&gt; message&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;self&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;return&lt;/span&gt; &lt;span class="kw2"&gt;self&lt;/span&gt;.&lt;span class="me1"&gt;args&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; CheckForTwitterError&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;data&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="st0"&gt;'error'&lt;/span&gt; &lt;span class="kw1"&gt;in&lt;/span&gt; data:
      &lt;span class="kw1"&gt;raise&lt;/span&gt; TwitterError&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;data&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'error'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; fetch_url&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;url&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    opener = &lt;span class="kw3"&gt;urllib2&lt;/span&gt;.&lt;span class="me1"&gt;build_opener&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    url_data = opener.&lt;span class="kw2"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;url&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;.&lt;span class="me1"&gt;read&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    opener.&lt;span class="me1"&gt;close&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;return&lt;/span&gt; url_data
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; remaining_api_hits&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    json = fetch_url&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;http://twitter.com/account/rate_limit_status.json&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    data = simplejson.&lt;span class="me1"&gt;loads&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;json&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    CheckForTwitterError&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;data&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;return&lt;/span&gt; data&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'remaining_hits'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; get_user_info&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;id&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;global&lt;/span&gt; is_username
    &lt;span class="kw1"&gt;global&lt;/span&gt; calls
    json = &lt;span class="kw2"&gt;None&lt;/span&gt;
    calls += &lt;span class="nu0"&gt;1&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt; is_username:
        json = fetch_url&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;http://twitter.com/users/show.json?screen_name=&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;id&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;else&lt;/span&gt;:
        json = fetch_url&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;http://twitter.com/users/show.json?user_id=&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;id&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    data = simplejson.&lt;span class="me1"&gt;loads&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;json&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    CheckForTwitterError&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;data&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;return&lt;/span&gt; data
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; get_friends&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;id&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;global&lt;/span&gt; calls
    calls += &lt;span class="nu0"&gt;1&lt;/span&gt;
    json = fetch_url&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;http://twitter.com/friends/ids.json?user_id=&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;id&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    data = simplejson.&lt;span class="me1"&gt;loads&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;json&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    CheckForTwitterError&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;data&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;return&lt;/span&gt; data
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; get_followers&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;id&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;global&lt;/span&gt; calls
    calls += &lt;span class="nu0"&gt;1&lt;/span&gt;
    json = fetch_url&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;http://twitter.com/followers/ids.json?user_id=&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;id&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    data = simplejson.&lt;span class="me1"&gt;loads&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;json&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    CheckForTwitterError&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;data&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;return&lt;/span&gt; data
&amp;nbsp;
last_status_msg = &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="kw1"&gt;def&lt;/span&gt; update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;message&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;global&lt;/span&gt; last_status_msg
    &lt;span class="co1"&gt;# clear the last message&lt;/span&gt;
    &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdout&lt;/span&gt;.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\r&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    p = &lt;span class="kw3"&gt;re&lt;/span&gt;.&lt;span class="kw2"&gt;compile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;r&lt;span class="st0"&gt;&amp;quot;[^&lt;span class="es0"&gt;\s&lt;/span&gt;]&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdout&lt;/span&gt;.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;p.&lt;span class="me1"&gt;sub&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;' '&lt;/span&gt;, last_status_msg&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdout&lt;/span&gt;.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\r&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdout&lt;/span&gt;.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;message&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    last_status_msg = message
    &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdout&lt;/span&gt;.&lt;span class="me1"&gt;flush&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    last_status_msg = &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; save_state&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;global&lt;/span&gt; history
    &lt;span class="kw1"&gt;global&lt;/span&gt; user_info
    &lt;span class="kw1"&gt;global&lt;/span&gt; friends
    &lt;span class="kw1"&gt;global&lt;/span&gt; followers
    &lt;span class="kw1"&gt;global&lt;/span&gt; queue
    &lt;span class="kw1"&gt;global&lt;/span&gt; username
    data = simplejson.&lt;span class="me1"&gt;dumps&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;history, user_info, friends, followers, queue&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    bakfile = &lt;span class="kw2"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;username + &lt;span class="st0"&gt;&amp;quot;.json&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    bakfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;data&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    bakfile.&lt;span class="me1"&gt;close&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;def&lt;/span&gt; build_adjacency&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;global&lt;/span&gt; friends
    idxes = &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
    adj = &lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
    idx = &lt;span class="nu0"&gt;0&lt;/span&gt;
    &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="kw3"&gt;user&lt;/span&gt; &lt;span class="kw1"&gt;in&lt;/span&gt; friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        idxes&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = idx
        idx += &lt;span class="nu0"&gt;1&lt;/span&gt;
        adj.&lt;span class="me1"&gt;append&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;*&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="kw3"&gt;user&lt;/span&gt; &lt;span class="kw1"&gt;in&lt;/span&gt; friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &amp;lt;= &lt;span class="nu0"&gt;0&lt;/span&gt;:
            &lt;span class="kw1"&gt;continue&lt;/span&gt;
        amount_to_give = &lt;span class="nu0"&gt;1.0&lt;/span&gt; / &lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;for&lt;/span&gt; f &lt;span class="kw1"&gt;in&lt;/span&gt; friends&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;:
            &lt;span class="kw1"&gt;if&lt;/span&gt; idxes.&lt;span class="me1"&gt;has_key&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;f&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
                adj&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;idxes&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;idxes&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;f&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = amount_to_give
    &lt;span class="kw1"&gt;return&lt;/span&gt; &lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;idxes, adj&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;try&lt;/span&gt;:
    opts, args = &lt;span class="kw3"&gt;getopt&lt;/span&gt;.&lt;span class="kw3"&gt;getopt&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;argv&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="nu0"&gt;1&lt;/span&gt;:&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;hu:c:r&amp;quot;&lt;/span&gt;, &lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;help&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;user=&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;calls=&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;resume&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="kw1"&gt;except&lt;/span&gt; &lt;span class="kw3"&gt;getopt&lt;/span&gt;.&lt;span class="me1"&gt;GetoptError&lt;/span&gt;, err:
    &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;err&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="co1"&gt;#usage()&lt;/span&gt;
    &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;exit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;2&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
max_calls = &lt;span class="nu0"&gt;-1&lt;/span&gt;
username = &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
load_prev = &lt;span class="kw2"&gt;None&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;for&lt;/span&gt; o, a &lt;span class="kw1"&gt;in&lt;/span&gt; opts:
    &lt;span class="kw1"&gt;if&lt;/span&gt; o &lt;span class="kw1"&gt;in&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;-h&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;--help&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class="co1"&gt;#usage()&lt;/span&gt;
        &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;exit&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;elif&lt;/span&gt; o &lt;span class="kw1"&gt;in&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;-u&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;--user&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        username = a
    &lt;span class="kw1"&gt;elif&lt;/span&gt; o &lt;span class="kw1"&gt;in&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;-c&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;--calls&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        max_calls = &lt;span class="kw2"&gt;int&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;a&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;elif&lt;/span&gt; o &lt;span class="kw1"&gt;in&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;-r&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;--resume&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        load_prev = &lt;span class="kw2"&gt;True&lt;/span&gt;
    &lt;span class="kw1"&gt;else&lt;/span&gt;:
        &lt;span class="kw1"&gt;assert&lt;/span&gt; &lt;span class="kw2"&gt;False&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;unhandled option&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;if&lt;/span&gt; max_calls&amp;nbsp;!= &lt;span class="nu0"&gt;0&lt;/span&gt;:
    &lt;span class="co1"&gt;# First, let's find out how many API calls we have left before we are rate limited:&lt;/span&gt;
    update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Contacting Twitter to see how many API calls are left on your account...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    max_hits = remaining_api_hits&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt; max_calls &amp;lt; &lt;span class="nu0"&gt;0&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; max_hits &amp;lt; max_calls:
        update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;You have &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;max_hits&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; API calls remaining this hour; how many would you like to use now? &amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        max_calls = &lt;span class="kw2"&gt;int&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdin&lt;/span&gt;.&lt;span class="kw3"&gt;readline&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;if&lt;/span&gt; max_calls &amp;gt; max_hits:
            max_calls = max_hits
&lt;span class="kw1"&gt;if&lt;/span&gt; username == &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;:
    &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;What is the twitter username for which you'd like to build a graph? &amp;quot;&lt;/span&gt;,
    username = &lt;span class="kw3"&gt;re&lt;/span&gt;.&lt;span class="kw2"&gt;compile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;r&lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;.&lt;span class="me1"&gt;sub&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdin&lt;/span&gt;.&lt;span class="kw3"&gt;readline&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Trying to open &amp;quot;&lt;/span&gt; + username + &lt;span class="st0"&gt;&amp;quot;.dot for output...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
dotfile = &lt;span class="kw2"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;username + &lt;span class="st0"&gt;&amp;quot;.dot&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Building the graph for &amp;quot;&lt;/span&gt; + username + &lt;span class="st0"&gt;&amp;quot; (output will be &amp;quot;&lt;/span&gt; + username + &lt;span class="st0"&gt;&amp;quot;.dot)...&amp;quot;&lt;/span&gt;
&amp;nbsp;
is_username = &lt;span class="kw2"&gt;True&lt;/span&gt;
history = &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
queue = &lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;username&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
calls = &lt;span class="nu0"&gt;0&lt;/span&gt;
user_info = &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
friends = &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
followers = &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class="co1"&gt;# Let's see if there's any partial data...&lt;/span&gt;
&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;path&lt;/span&gt;.&lt;span class="me1"&gt;isfile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;username + &lt;span class="st0"&gt;&amp;quot;.json&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;It appears as if you have some partial data for this user.&amp;quot;&lt;/span&gt;
    resume = &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt; load_prev&amp;nbsp;!= &lt;span class="kw2"&gt;True&lt;/span&gt;:
        &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Do you want to start off from where you last finished? (y/n) &amp;quot;&lt;/span&gt;,
        resume = &lt;span class="kw3"&gt;re&lt;/span&gt;.&lt;span class="kw2"&gt;compile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;r&lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;.&lt;span class="me1"&gt;sub&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdin&lt;/span&gt;.&lt;span class="kw3"&gt;readline&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt; load_prev == &lt;span class="kw2"&gt;True&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;y&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;Y&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;Yes&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;YES&amp;quot;&lt;/span&gt;:
        is_username = &lt;span class="kw2"&gt;False&lt;/span&gt;
        bakfile = &lt;span class="kw2"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;username + &lt;span class="st0"&gt;&amp;quot;.json&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;history, user_info, friends, followers, queue&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = simplejson.&lt;span class="me1"&gt;loads&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;bakfile.&lt;span class="me1"&gt;read&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; friends!&amp;quot;&lt;/span&gt;
        bakfile.&lt;span class="me1"&gt;close&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Loaded &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;history.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; previous Twitterers!&amp;quot;&lt;/span&gt;
        &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;The current queue size is &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;queue&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;
    &lt;span class="kw1"&gt;else&lt;/span&gt;:
        &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;You are about to overwrite the partial data; are you sure? (y/n) &amp;quot;&lt;/span&gt;,
        resume = &lt;span class="kw3"&gt;re&lt;/span&gt;.&lt;span class="kw2"&gt;compile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;r&lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;.&lt;span class="me1"&gt;sub&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdin&lt;/span&gt;.&lt;span class="kw3"&gt;readline&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;resume == &lt;span class="st0"&gt;&amp;quot;y&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;Y&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;yes&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;Yes&amp;quot;&lt;/span&gt; &lt;span class="kw1"&gt;or&lt;/span&gt; resume == &lt;span class="st0"&gt;&amp;quot;YES&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
            exit
&amp;nbsp;
&lt;span class="kw1"&gt;while&lt;/span&gt; &lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;queue&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &amp;gt; &lt;span class="nu0"&gt;0&lt;/span&gt; &lt;span class="kw1"&gt;and&lt;/span&gt; calls + &lt;span class="nu0"&gt;3&lt;/span&gt; &amp;lt;= max_calls:
    next_user = queue.&lt;span class="me1"&gt;pop&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="co1"&gt;# Let's just double-check that we haven't already processed this user!&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt; history.&lt;span class="me1"&gt;has_key&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;next_user&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class="kw1"&gt;continue&lt;/span&gt;
    update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;next_user&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\t&lt;/span&gt;(? Followers,&lt;span class="es0"&gt;\t&lt;/span&gt;? Following)&lt;span class="es0"&gt;\t&lt;/span&gt;Queue Size: &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;queue&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt; next_user &lt;span class="kw1"&gt;in&lt;/span&gt; user_info:
        info = user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;next_user&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
    &lt;span class="kw1"&gt;else&lt;/span&gt;:
        &lt;span class="kw1"&gt;try&lt;/span&gt;:
            info = get_user_info&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;next_user&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;except&lt;/span&gt; &lt;span class="kw3"&gt;urllib2&lt;/span&gt;.&lt;span class="me1"&gt;HTTPError&lt;/span&gt;:
            update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;It appears as if user &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;next_user&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;'s account has been suspended!&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
            &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
            &lt;span class="kw1"&gt;continue&lt;/span&gt;
    uid = next_user
    &lt;span class="kw1"&gt;if&lt;/span&gt; is_username:
        uid = info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'id'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
        history&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = &lt;span class="kw2"&gt;True&lt;/span&gt;
        is_username = &lt;span class="kw2"&gt;False&lt;/span&gt;
    user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = info
    update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\t&lt;/span&gt;(? Followers,&lt;span class="es0"&gt;\t&lt;/span&gt;? Following)&lt;span class="es0"&gt;\t&lt;/span&gt;Queue Size: &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;queue&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    followers&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = get_followers&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;for&lt;/span&gt; i &lt;span class="kw1"&gt;in&lt;/span&gt; followers&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;:
        &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; history.&lt;span class="me1"&gt;has_key&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
            history&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = &lt;span class="kw2"&gt;True&lt;/span&gt;
            queue.&lt;span class="me1"&gt;append&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\t&lt;/span&gt;(&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;followers&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; Followers,&lt;span class="es0"&gt;\t&lt;/span&gt;? Following)&lt;span class="es0"&gt;\t&lt;/span&gt;Queue Size: &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;queue&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    friends&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = get_friends&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;for&lt;/span&gt; i &lt;span class="kw1"&gt;in&lt;/span&gt; friends&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;:
        &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; history.&lt;span class="me1"&gt;has_key&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
            history&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = &lt;span class="kw2"&gt;True&lt;/span&gt;
            queue.&lt;span class="me1"&gt;append&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\t&lt;/span&gt;(&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;followers&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; Followers,&lt;span class="es0"&gt;\t&lt;/span&gt;&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;uid&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; Following)&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdout&lt;/span&gt;.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw3"&gt;sys&lt;/span&gt;.&lt;span class="me1"&gt;stdout&lt;/span&gt;.&lt;span class="me1"&gt;flush&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    save_state&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class="co1"&gt;# Get some extra user info if we have any API calls remaining&lt;/span&gt;
&lt;span class="co1"&gt;# Find someone in the history for whom we haven't downloaded user info&lt;/span&gt;
&lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="kw3"&gt;user&lt;/span&gt; &lt;span class="kw1"&gt;in&lt;/span&gt; history.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;if&lt;/span&gt; calls &amp;gt;= max_calls:
        &lt;span class="kw1"&gt;break&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="kw3"&gt;user&lt;/span&gt; &lt;span class="kw1"&gt;in&lt;/span&gt; user_info:
        &lt;span class="kw1"&gt;try&lt;/span&gt;:
            user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = get_user_info&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;except&lt;/span&gt; &lt;span class="kw3"&gt;urllib2&lt;/span&gt;.&lt;span class="me1"&gt;HTTPError&lt;/span&gt;:
            &lt;span class="co1"&gt;# This almost always means the user's account has been disabled!&lt;/span&gt;
            &lt;span class="kw1"&gt;continue&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;if&lt;/span&gt; calls &amp;gt; &lt;span class="nu0"&gt;0&lt;/span&gt;:
    save_state&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class="co1"&gt;# Now download any user profile pictures that we might be missing...&lt;/span&gt;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Downloading missing user profile pictures...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;path&lt;/span&gt;.&lt;span class="me1"&gt;isdir&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;username + &lt;span class="st0"&gt;&amp;quot;.images&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;mkdir&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;username + &lt;span class="st0"&gt;&amp;quot;.images&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
user_image_raw = &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&lt;span class="kw1"&gt;for&lt;/span&gt; u &lt;span class="kw1"&gt;in&lt;/span&gt; friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    _, _, filetype = user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'profile_image_url'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;.&lt;span class="me1"&gt;rpartition&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    filename = username + &lt;span class="st0"&gt;&amp;quot;.images/&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;.&amp;quot;&lt;/span&gt; + filetype
    user_image_raw&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = filename
    &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;path&lt;/span&gt;.&lt;span class="me1"&gt;isfile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;filename&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class="co1"&gt;# we need to download the file!&lt;/span&gt;
        update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Downloading missing user profile picture for &amp;quot;&lt;/span&gt; + user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw3"&gt;urllib&lt;/span&gt;.&lt;span class="me1"&gt;urlretrieve&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'profile_image_url'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;, filename&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Profile pictures are up to date!&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class="co1"&gt;# Now scale the profile pictures&lt;/span&gt;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Scaling profile pictures...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
user_image = &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
&lt;span class="kw1"&gt;for&lt;/span&gt; u &lt;span class="kw1"&gt;in&lt;/span&gt; friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    _, _, filetype = user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'profile_image_url'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;.&lt;span class="me1"&gt;rpartition&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    filename = username + &lt;span class="st0"&gt;&amp;quot;.images/&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;.scaled.&amp;quot;&lt;/span&gt; + filetype
    user_image&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = filename
    &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;path&lt;/span&gt;.&lt;span class="me1"&gt;isfile&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;filename&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        &lt;span class="co1"&gt;# we need to scale the image!&lt;/span&gt;
        update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Scaling profile picture for &amp;quot;&lt;/span&gt; + user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;system&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;convert -resize 48x48 &amp;quot;&lt;/span&gt; + user_image_raw&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + user_image&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Profile pictures are all scaled!&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Building the adjacency matrix...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;idxes, adj&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = build_adjacency&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Calculating the stationary distribution...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
iterations = &lt;span class="nu0"&gt;500&lt;/span&gt;
damping_factor = &lt;span class="nu0"&gt;0.25&lt;/span&gt;
st = &lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="nu0"&gt;1.0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;*&lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
last_percent = &lt;span class="nu0"&gt;-1&lt;/span&gt;
&lt;span class="kw1"&gt;for&lt;/span&gt; i &lt;span class="kw1"&gt;in&lt;/span&gt; &lt;span class="kw2"&gt;range&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;iterations&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    users = &lt;span class="nu0"&gt;0&lt;/span&gt;
    &lt;span class="kw1"&gt;for&lt;/span&gt; u &lt;span class="kw1"&gt;in&lt;/span&gt; friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        users += &lt;span class="nu0"&gt;1&lt;/span&gt;
        percent = &lt;span class="kw2"&gt;round&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;float&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;i * &lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + users&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; / &lt;span class="kw2"&gt;float&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;iterations * &lt;span class="kw2"&gt;len&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; * &lt;span class="nu0"&gt;100.0&lt;/span&gt;, &lt;span class="nu0"&gt;1&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;if&lt;/span&gt; percent &amp;gt; last_percent:
            last_percent = percent
            update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Calculating the stationary distribution... &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;percent&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;%&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        idx = idxes&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
        given_away = &lt;span class="nu0"&gt;0.0&lt;/span&gt;
        give_away = st&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;idx&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; * &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;1.0&lt;/span&gt; - damping_factor&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
        &lt;span class="kw1"&gt;if&lt;/span&gt; give_away &amp;lt;= &lt;span class="nu0"&gt;0.0&lt;/span&gt;:
            &lt;span class="kw1"&gt;continue&lt;/span&gt;
        &lt;span class="kw1"&gt;for&lt;/span&gt; f &lt;span class="kw1"&gt;in&lt;/span&gt; friends&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;:
            &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; friends.&lt;span class="me1"&gt;has_key&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;f&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
                &lt;span class="kw1"&gt;continue&lt;/span&gt;
            fidx = idxes&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;f&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
            ga = adj&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;idx&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;fidx&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; * give_away
            given_away += ga
            st&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;fidx&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; += ga
        st&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;idx&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; -= given_away
&lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="co1"&gt;# Now calculate the ranks of the users&lt;/span&gt;
deco = &lt;span class="br0"&gt;&amp;#91;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;st&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;idxes&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;, i, u&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;for&lt;/span&gt; i, u &lt;span class="kw1"&gt;in&lt;/span&gt; &lt;span class="kw2"&gt;enumerate&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
deco.&lt;span class="me1"&gt;sort&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
deco.&lt;span class="me1"&gt;reverse&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
rank = &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;
last_st = &lt;span class="kw2"&gt;None&lt;/span&gt;
last_rank = &lt;span class="nu0"&gt;1&lt;/span&gt;
&lt;span class="kw1"&gt;for&lt;/span&gt; st, _, u &lt;span class="kw1"&gt;in&lt;/span&gt; deco:
    &lt;span class="kw1"&gt;if&lt;/span&gt; last_st == &lt;span class="kw2"&gt;None&lt;/span&gt;:
        rank&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = &lt;span class="nu0"&gt;1&lt;/span&gt;
    &lt;span class="kw1"&gt;elif&lt;/span&gt; st == last_st:
        rank&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = last_rank
    &lt;span class="kw1"&gt;else&lt;/span&gt;:
        rank&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; = last_rank + &lt;span class="nu0"&gt;1&lt;/span&gt;
    last_rank = rank&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;
    last_st = st
    &lt;span class="kw1"&gt;print&lt;/span&gt; user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\t&lt;/span&gt;&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;rank&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;u&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
update_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Generating the .dot file...&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class="co1"&gt;# Now generate the .dot file&lt;/span&gt;
dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;digraph twitter {&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;  /* A TwitterGraph automatically generated by Evan Sultanik's Python script! */&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;  /* http://www.sultanik.com/                                                 */&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="kw3"&gt;user&lt;/span&gt; &lt;span class="kw1"&gt;in&lt;/span&gt; friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;  n&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; [label=&amp;lt; &amp;lt;table border=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;0&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;quot;&lt;/span&gt; + user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw1"&gt;not&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; == user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
        dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;lt;br/&amp;gt;(&amp;quot;&lt;/span&gt; + user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;)&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Rank: &amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;rank&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;img src=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt; + user_image&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt; scale=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;true&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;/&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;lt;/table&amp;gt; &amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class="kw1"&gt;if&lt;/span&gt; user_info&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="st0"&gt;'screen_name'&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt; == username:
        dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot; color=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;green&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt; shape=&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;doubleoctagon&lt;span class="es0"&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
    dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;];&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="kw3"&gt;user&lt;/span&gt; &lt;span class="kw1"&gt;in&lt;/span&gt; friends.&lt;span class="me1"&gt;keys&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
    &lt;span class="kw1"&gt;for&lt;/span&gt; f &lt;span class="kw1"&gt;in&lt;/span&gt; friends&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;:
        &lt;span class="kw1"&gt;if&lt;/span&gt; friends.&lt;span class="me1"&gt;has_key&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;f&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;:
            dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;  n&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; -&amp;gt; &amp;quot;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot; n&amp;quot;&lt;/span&gt; + &lt;span class="kw2"&gt;str&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;f&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; + &lt;span class="st0"&gt;&amp;quot;;&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
dotfile.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;}&lt;span class="es0"&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
dotfile.&lt;span class="me1"&gt;close&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
clear_status&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=lztZ3FSi6dQ:XyYqdNFdbZA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=lztZ3FSi6dQ:XyYqdNFdbZA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=lztZ3FSi6dQ:XyYqdNFdbZA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=lztZ3FSi6dQ:XyYqdNFdbZA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=lztZ3FSi6dQ:XyYqdNFdbZA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=lztZ3FSi6dQ:XyYqdNFdbZA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=lztZ3FSi6dQ:XyYqdNFdbZA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/lztZ3FSi6dQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Visualizing_Twitter</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:LaTeX</id>
		<title>LaTeX</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/rUUwSvxTAbw/Blog:LaTeX" />
				<updated>2009-04-20T21:18:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Earlier today, &lt;a href="http://www.sultanik.com/Joe_Kopena" class="mw-redirect" title="Joe Kopena"&gt;Joe Kopena&lt;/a&gt; and I once again presented our tag-team &lt;a href="http://www.sultanik.com/Image:LaTeX_logo.svg" class="image" title="\LaTeX"&gt;&lt;img alt="\LaTeX" src="http://www.sultanik.com/images/thumb/9/92/LaTeX_logo.svg/48px-LaTeX_logo.svg.png" width="48" height="20" border="0" /&gt;&lt;/a&gt; talk.  Not familiar with &lt;a href="http://www.sultanik.com/Image:LaTeX_logo.svg" class="image" title="\LaTeX"&gt;&lt;img alt="\LaTeX" src="http://www.sultanik.com/images/thumb/9/92/LaTeX_logo.svg/48px-LaTeX_logo.svg.png" width="48" height="20" border="0" /&gt;&lt;/a&gt;?  Why not read &lt;a href="http://en.wikipedia.org/wiki/" class="external text" title="http://en.wikipedia.org/wiki/" rel="nofollow"&gt;the Wikipedia article&lt;/a&gt;!  It's essentially a professional grade system for beautifully typesetting documents/books.  There are various books and Internet tutorials that do a fairly good job of introducing the basics, so, in our talk, Joe and I cover some more advanced topics and also general typesetting snags that novices often encounter.  We always get requests for our slides after each of our talks, so I figured I'd &lt;a href="http://www.sultanik.com/images/4/4d/KopenaSultanikTeXTalk.pdf" class="internal" title="KopenaSultanikTeXTalk.pdf"&gt;post them online&lt;/a&gt; (which is the purpose of this blog entry).
&lt;/p&gt;&lt;p&gt;Note that the entire presentation was created in &lt;a href="http://www.sultanik.com/Image:LaTeX_logo.svg" class="image" title="\LaTeX"&gt;&lt;img alt="\LaTeX" src="http://www.sultanik.com/images/thumb/9/92/LaTeX_logo.svg/48px-LaTeX_logo.svg.png" width="48" height="20" border="0" /&gt;&lt;/a&gt; using &lt;a href="http://latex-beamer.sourceforge.net/" class="external text" title="http://latex-beamer.sourceforge.net/" rel="nofollow"&gt;Beamer&lt;/a&gt;.  You may also want to read &lt;a href="http://www.sultanik.com/BibTeX" title="BibTeX"&gt;my notes on &lt;img class="tex" alt="{\mathrm{B{\scriptstyle{IB}} \! T\!_{\displaystyle E} \! X}}" src="http://www.sultanik.com/images/math/3/e/1/3e17fc2dfa41bf5be2b8a86a4e0bd0f7.png" /&gt;&lt;/a&gt;, which will eventually become a part of our talk.  You can read some of Joe's notes on LaTeX on his personal wiki, &lt;a href="http://gicl.cs.drexel.edu/people/tjkopena/wiki/pmwiki.php?q=latex&amp;amp;n=Site.Search" class="external text" title="http://gicl.cs.drexel.edu/people/tjkopena/wiki/pmwiki.php?q=latex&amp;amp;n=Site.Search" rel="nofollow"&gt;here&lt;/a&gt;.  Feel free to &lt;a href="https://mail.cs.drexel.edu/pipermail/unix-dev/" class="external text" title="https://mail.cs.drexel.edu/pipermail/unix-dev/" rel="nofollow"&gt;browse&lt;/a&gt; and/or post any of your general typesetting questions to &lt;a href="https://mail.cs.drexel.edu/mailman/listinfo/unix-dev" class="external text" title="https://mail.cs.drexel.edu/mailman/listinfo/unix-dev" rel="nofollow"&gt;this public mailing list&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;You should be able to view the slides directly from your web browser below (thanks to &lt;a href="http://www.sultanik.com/Vuzit_MediaWiki_extension" title="Vuzit MediaWiki extension"&gt;Vuzit&lt;/a&gt;).  If you are viewing this from &lt;a href="http://feeds2.feedburner.com/EvanSultanik" class="external text" title="http://feeds2.feedburner.com/EvanSultanik" rel="nofollow"&gt;my RSS feed&lt;/a&gt;, however, you may need to &lt;a href="http://www.sultanik.com/Blog:LaTeX" class="external text" title="http://www.sultanik.com/Blog:LaTeX" rel="nofollow"&gt;go to the actual page&lt;/a&gt; for it to work, or you can just &lt;a href="http://www.sultanik.com/images/4/4d/KopenaSultanikTeXTalk.pdf" class="internal" title="KopenaSultanikTeXTalk.pdf"&gt;download the PDF&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;iframe type="text/html" width="510px" height="660px" src="http://vuzit.com/view/?url=http://www.sultanik.com/images/4/4d/KopenaSultanikTeXTalk.pdf&amp;amp;output=embed&amp;amp;z=0&amp;amp;key=a40472c0-0603-3551-bef8-e71794b65af5" frameborder="0" &gt;&lt;/iframe&gt;
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=rUUwSvxTAbw:xLYTSBWsEnk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=rUUwSvxTAbw:xLYTSBWsEnk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=rUUwSvxTAbw:xLYTSBWsEnk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=rUUwSvxTAbw:xLYTSBWsEnk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=rUUwSvxTAbw:xLYTSBWsEnk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=rUUwSvxTAbw:xLYTSBWsEnk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=rUUwSvxTAbw:xLYTSBWsEnk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/rUUwSvxTAbw" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:LaTeX</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Economics_of_Education</id>
		<title>On the Economics of Higher Education</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/XUW_CRy5DI4/Blog:Economics_of_Education" />
				<updated>2009-04-15T15:10:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;There has been much "messaging on twitter" [sic] and "posting to blogs" [sic] of late regarding the economic benefit of pursuing a graduate degree in &lt;a href="http://www.sultanik.com/Blog:Computer_Science" title="Blog:Computer Science"&gt;Computer Science&lt;/a&gt;.  For example, there are claims, among other things, that a masters degree will require 10 years to earn back the income lost during study.  A Ph.D. will require a staggering 50 years. Most everything I've read cites &lt;a href="http://www.cs.ucdavis.edu/~matloff/itaa.real.html" class="external text" title="http://www.cs.ucdavis.edu/~matloff/itaa.real.html" rel="nofollow"&gt;this article&lt;/a&gt; based upon &lt;a href="http://www.cs.ucdavis.edu/people/faculty/matloff.html" class="external text" title="http://www.cs.ucdavis.edu/people/faculty/matloff.html" rel="nofollow"&gt;Dr. Norman Matloff's&lt;/a&gt; testimony to the U.S. House Judiciary Committee Subcommittee on Immigration.  Curiously, the article everyone seems to cite does not itself have a bibliography.  It does, however, credit "a highly biased pro-industry National Research Council committee" for calculating these numbers.  Five to ten minutes of "searching on Google" [sic] and I was unable to find a report from the National Research Council corroborating such a claim.  Can anyone point me to a link?
&lt;/p&gt;&lt;p&gt;I do not dispute that these numbers may be correct; the purpose of this blog entry is to point out that, at least in the case of most with whom I've matriculated, it is flat out false.
&lt;/p&gt;&lt;p&gt;Here is my (admittedly simple) mathematical model:
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="n=\frac{t ( E[s_w] + c )}{E[s_a]-E[s_w]}," src="http://www.sultanik.com/images/math/3/4/1/341d168fbceeebef83cfe84de79e4c6d.png" /&gt;&lt;/center&gt;
&lt;p&gt;where,
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; &lt;span class="texhtml"&gt;&lt;i&gt;t&lt;/i&gt;&lt;/span&gt; is the number of years spent in school;
&lt;/li&gt;&lt;li&gt; &lt;span class="texhtml"&gt;&lt;i&gt;E&lt;/i&gt;[&lt;i&gt;s&lt;/i&gt;&lt;sub&gt;&lt;i&gt;w&lt;/i&gt;&lt;/sub&gt;]&lt;/span&gt; is the expected salary one would have earned if one did not attend school;
&lt;/li&gt;&lt;li&gt; &lt;span class="texhtml"&gt;&lt;i&gt;c&lt;/i&gt;&lt;/span&gt; is the net monetary cost of attending school per year, such as tuition paid, books purchased, &lt;i&gt;&amp;amp;c.&lt;/i&gt; This value should also take into account any income earned during a school year (&lt;i&gt;e.g.&lt;/i&gt;, one's stipend) and in many cases will be a negative number;
&lt;/li&gt;&lt;li&gt; &lt;span class="texhtml"&gt;&lt;i&gt;E&lt;/i&gt;[&lt;i&gt;s&lt;/i&gt;&lt;sub&gt;&lt;i&gt;a&lt;/i&gt;&lt;/sub&gt;]&lt;/span&gt; one's expected salary after graduating school; and
&lt;/li&gt;&lt;li&gt; &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt;&lt;/span&gt; is the number of years one would have to work after graduating to make up for lost income.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Note that this model does not take attrition into account.
&lt;/p&gt;&lt;p&gt;As an example, let's say John is a Ph.D. student that, through a research assistantship, receives tuition remission and a stipend of $20,000 a year.  This is quite reasonable (and actually a bit conservative according to &lt;a href="http://chronicle.com/stats/stipends/2008/3804.htm" class="external text" title="http://chronicle.com/stats/stipends/2008/3804.htm" rel="nofollow"&gt;this study&lt;/a&gt;).  If John had not chosen to pursue a Ph.D. he would have been hired in a $65k entry level position, which is slightly on the high end.  Once he has graduated (in the quite average term of five years), he expects to receive a salary of $85k which, according to &lt;a href="http://www.cra.org/CRN/articles/may07/tables27to34.html" class="external text" title="http://www.cra.org/CRN/articles/may07/tables27to34.html" rel="nofollow"&gt;this survey&lt;/a&gt; is on the low end.  We also, however, have to account for taxes!  From my own experience and from consulting virtually every graduate student I know, John will receive a refund for virtually all of the money taxed from his income.  Without going to school, John would be in the 25% tax bracket, with a normalized income of about $52k (taking the tiered bracketing system into account).  After earning his Ph.D. John would have a normalized income of about $67k.  Plugging these values into the model we get:
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="n=\frac{5 \times ( 52 + (-20) )}{67-52} \approx 11." src="http://www.sultanik.com/images/math/5/0/b/50b4ef239a4186ad950df4f2493d9aa1.png" /&gt;&lt;/center&gt;
&lt;p&gt;Therefore, John will require about 11 years to recoup the income lost during school.  I think I was relatively conservative with my income estimates, and that's still a lot less time than 50 years!  I plugged in my own stats/estimates into the model and I project that I will need fewer than five years (and I don't even make as much as some other students I know)!  Furthermore, with a Ph.D., John has theoretically more potential for advancement/promotion.  Once the 11 years are over, he will have much more earning potential than a degreeless John (assuming the market for Ph.D.s remains strong, which I don't think is a huge assumption given the lack of domestic technical/science Ph.D.s in the US right now).
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=XUW_CRy5DI4:lOJuk52x3Uw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=XUW_CRy5DI4:lOJuk52x3Uw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=XUW_CRy5DI4:lOJuk52x3Uw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=XUW_CRy5DI4:lOJuk52x3Uw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=XUW_CRy5DI4:lOJuk52x3Uw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=XUW_CRy5DI4:lOJuk52x3Uw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=XUW_CRy5DI4:lOJuk52x3Uw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/XUW_CRy5DI4" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Economics_of_Education</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Computer_Science</id>
		<title>Computer Science: an Introduction</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/qdNvUdg-u0s/Blog:Computer_Science" />
				<updated>2009-02-25T15:07:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;People often ask me &lt;a href="http://www.sultanik.com/Research" title="Research"&gt;what I do&lt;/a&gt; or about what I am studying.  Many have certain misconceptions and stereotypes that render the simple answer of "Computer Science" insufficient.  For example, the &lt;a href="http://www.sultanik.com/Blog:Painter" title="Blog:Painter"&gt;vast majority of non-technical people with whom I've talked&lt;/a&gt; seem to think that learning new programming languages and writing programs are the primary areas of study for computer-related university majors.  That's like believing literature majors go to university to learn the intricacies of using pens and typewriters.  In the ~7 years—and counting (gasp!)—in which I've been in higher education, I haven't been taught a single programming language.
&lt;/p&gt;&lt;p&gt;The following is an attempt on my part to answer these questions, in the hopes that I can hereafter simply refer people to this page instead of having to explain this for the thousandth time.
&lt;/p&gt;
&lt;table id="toc" class="toc" summary="Contents"&gt;&lt;tr&gt;&lt;td&gt;&lt;div id="toctitle"&gt;&lt;h2&gt;Contents&lt;/h2&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class="toclevel-1"&gt;&lt;a href="http://www.sultanik.com/#Computer_Science:_an_Introduction"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Computer Science: an Introduction&lt;/span&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li class="toclevel-2"&gt;&lt;a href="http://www.sultanik.com/#What_is_Computer_Science.3F"&gt;&lt;span class="tocnumber"&gt;1.1&lt;/span&gt; &lt;span class="toctext"&gt;What is Computer Science?&lt;/span&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li class="toclevel-3"&gt;&lt;a href="http://www.sultanik.com/#Languages_and_problems"&gt;&lt;span class="tocnumber"&gt;1.1.1&lt;/span&gt; &lt;span class="toctext"&gt;Languages and problems&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class="toclevel-3"&gt;&lt;a href="http://www.sultanik.com/#Example:_Sudoku"&gt;&lt;span class="tocnumber"&gt;1.1.2&lt;/span&gt; &lt;span class="toctext"&gt;Example: Sudoku&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class="toclevel-3"&gt;&lt;a href="http://www.sultanik.com/#Polynomial_time"&gt;&lt;span class="tocnumber"&gt;1.1.3&lt;/span&gt; &lt;span class="toctext"&gt;Polynomial time&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class="toclevel-3"&gt;&lt;a href="http://www.sultanik.com/#Why_polynomial_time_matters"&gt;&lt;span class="tocnumber"&gt;1.1.4&lt;/span&gt; &lt;span class="toctext"&gt;Why polynomial time matters&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class="toclevel-2"&gt;&lt;a href="http://www.sultanik.com/#Why_Computer_Science_isn.27t_just_a_science"&gt;&lt;span class="tocnumber"&gt;1.2&lt;/span&gt; &lt;span class="toctext"&gt;Why Computer Science isn't just a science&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li class="toclevel-2"&gt;&lt;a href="http://www.sultanik.com/#References"&gt;&lt;span class="tocnumber"&gt;1.3&lt;/span&gt; &lt;span class="toctext"&gt;References&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;script type="text/javascript"&gt; if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } &lt;/script&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;a name="What_is_Computer_Science.3F"&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class="mw-headline"&gt;What is Computer Science?&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;The vast majority of people that call themselves "Computer Scientists" occupy themselves with solving &lt;i&gt;problems&lt;/i&gt;.  This begs the question: what is a &lt;i&gt;problem&lt;/i&gt;?  In this context, a problem is a &lt;i&gt;language&lt;/i&gt;.  Do I mean a language in the sense of "English," "Russian," or "Pig Latin?"  In a way, yes.  Now, let me explain.
&lt;/p&gt;
&lt;a name="Languages_and_problems"&gt;&lt;/a&gt;&lt;h3&gt; &lt;span class="mw-headline"&gt;Languages and problems&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;A language is really just a set of grammar rules and a set of words that constitute a vocabulary.  For example, everything I've written so far is a part of the English language because (1) all of the sentences conform to the English grammar, and (2) all of the words of the sentences are of the English vocabulary.  Although the sentence "Evan writing" contains two words that are both in the English vocabulary, the lack of a given verb (&lt;i&gt;i.e.&lt;/i&gt; the verb to be) means that it does not conform with the English grammar and is thereby not an English sentence.  Likewise, the sentence, "Boy ball threw," is not an English sentence because it is unclear from the word order which noun is the subject and which is the object.
&lt;/p&gt;&lt;p&gt;The majority of the work in Computer Science is concerned with &lt;i&gt;automatically&lt;/i&gt; and &lt;i&gt;efficiently&lt;/i&gt; testing whether a given sentence conforms to a given language.
&lt;/p&gt;
&lt;a name="Example:_Sudoku"&gt;&lt;/a&gt;&lt;h3&gt; &lt;span class="mw-headline"&gt;Example: Sudoku&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;For example, let's consider the popular game of &lt;a href="http://en.wikipedia.org/wiki/Sudoku" class="external text" title="http://en.wikipedia.org/wiki/Sudoku" rel="nofollow"&gt;Sudoku&lt;/a&gt;.  A "language" for Sudoku might consist of:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; &lt;b&gt;Vocabulary&lt;/b&gt;: 1, 2, 3, 4, 5, 6, 7, 8, 9
&lt;/li&gt;&lt;li&gt; &lt;b&gt;Grammar&lt;/b&gt;: The set of all sentences that are exactly &lt;img class="tex" alt="9 \times 9 = 81" src="http://www.sultanik.com/images/math/e/9/f/e9f3dd18e393e2c54b2d64dd0c09a05f.png" /&gt; characters long (representing the 81 Sudoku squares) and that conform to the Sudoku property.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;It's relatively easy to test whether a given sentence conforms to the Sudoku grammar; all we have to do is make sure that the Sudoku property holds (&lt;i&gt;i.e.&lt;/i&gt; there are no repeats in the columns, rows, or boxes).  This can be done relatively quickly by a human, and almost instantaneously by a computer.  A computer scientist, however, might try and solve the following problem: "Given a partially complete sentence, either complete the sentence such that it conforms to the Sudoku grammar or prove that such a completion does not exist."  Such a problem is much harder to solve.
&lt;/p&gt;&lt;p&gt;The majority of computer science consists of creating automated algorithms that can solve such problems.  The question is: how &lt;i&gt;expensive&lt;/i&gt; is the &lt;i&gt;algorithm&lt;/i&gt;?  Since testing whether a sentence is in the grammar is easy, one might just enumerate all of the possible Sudoku grid layouts and find the first one that is a part of the grammar.  The problem is that, in the worst case, there will be on the order of &lt;span class="texhtml"&gt;9&lt;sup&gt;81&lt;/sup&gt; = 196,627,050,475,552,913,618,075,908,526,912,116,283,103,450,944,214,766,927,315,415,537,966,391,196,809&lt;/span&gt; (&lt;i&gt;i.e.&lt;/i&gt; about one &lt;a href="http://en.wikipedia.org/wiki/Names_of_large_numbers#Extensions_of_the_standard_dictionary_numbers" class="external text" title="http://en.wikipedia.org/wiki/Names_of_large_numbers#Extensions_of_the_standard_dictionary_numbers" rel="nofollow"&gt;Quinquavigintillion&lt;/a&gt;) possibilities to test!  Even if a computer could test a trillion sentences per second, such an algorithm would take about 6 octodecillion years to finish (that's 6 with 57 zeros afterward)!  What we really want are what are called &lt;i&gt;polynomial time algorithms&lt;/i&gt;.
&lt;/p&gt;
&lt;a name="Polynomial_time"&gt;&lt;/a&gt;&lt;h3&gt; &lt;span class="mw-headline"&gt;Polynomial time&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Let's say a given problem is of size &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt;&lt;/span&gt;.  For example, our Sudoku problem would be of size &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt; = 3&lt;/span&gt; because the grid is composed of nine 3-by-3 sub-squares.  Now let's say we devise an algorithm (&lt;i&gt;i.e.&lt;/i&gt; solution method) that allows us to solve any given Sudoku problem in no more than 1000 steps.  That's pretty quick!  Using this algorithm a computer could solve any &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt; = 3&lt;/span&gt; Sudoku problem almost instantaneously.  Now, let's say we get bored with &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt; = 3&lt;/span&gt; Sudokus (since they're so easy to solve now) and we now want to solve Sudoku problems on larger grids—say a &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt; = 4&lt;/span&gt; Sudoku (&lt;i&gt;i.e.&lt;/i&gt; a grid of sixteen 4-by-4 sub-squares).  As I mentioned before, the number of possibilities for &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt; = 9&lt;/span&gt; was about &lt;span class="texhtml"&gt;9&lt;sup&gt;81&lt;/sup&gt;&lt;/span&gt;; for &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt; = 10&lt;/span&gt; there are on the order of &lt;img class="tex" alt="16^{16\times 16} = 16^{256} \approx 10\ \mbox{with 308 zeros afterward}" src="http://www.sultanik.com/images/math/2/6/4/2648e792337f124117a9f9bb9ba65cb8.png" /&gt; possibilities!  By most estimates that's over three times the number of atoms in the universe!  The question is: given that our algorithm is so efficient at solving problems where &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt; = 3&lt;/span&gt;, how fast will it be able to solve problems when we just increase &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt;&lt;/span&gt; by 1?
&lt;/p&gt;&lt;p&gt;If for each increase in &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt;&lt;/span&gt; it turns out that the amount of time the algorithm needs to solve the problem increases by at most a linear amount, then we say the algorithm runs in &lt;i&gt;polynomial time&lt;/i&gt;.  This means that if we have a problem of size &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt;&lt;/span&gt; then a polynomial time algorithm for that problem will run in at most roughly &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt;&lt;sup&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sup&gt;&lt;/span&gt; steps, where &lt;span class="texhtml"&gt;&lt;i&gt;c&lt;/i&gt;&lt;/span&gt; is some constant.
&lt;/p&gt;
&lt;a name="Why_polynomial_time_matters"&gt;&lt;/a&gt;&lt;h3&gt; &lt;span class="mw-headline"&gt;Why polynomial time matters&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Moore%27s_law" class="external text" title="http://en.wikipedia.org/wiki/Moore%27s_law" rel="nofollow"&gt;Moore's law&lt;/a&gt; states that processor speed doubles every two years&lt;!-- CUSTOM_FEEDS page_title="Main_Page" --&gt;
&lt;sup id="cite_ref-0" class="reference"&gt;&lt;a href="http://www.sultanik.com/#cite_note-0" title=""&gt;[1]&lt;/a&gt;&lt;/sup&gt;.  This means that if we have a polynomial time algorithm that is able to quickly solve a problem of size &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt;&lt;/span&gt; on current hardware, we will only have to wait about &lt;img class="tex" alt="\log_2\left(\frac{n+1}{n}\right) c" src="http://www.sultanik.com/images/math/1/0/e/10eea0dd60ee6eb27021ee55b3743b36.png" /&gt; years until computer hardware becomes fast enough to solve a problem of size &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt; + 1&lt;/span&gt;.  For most values of &lt;span class="texhtml"&gt;&lt;i&gt;n&lt;/i&gt;&lt;/span&gt; and &lt;span class="texhtml"&gt;&lt;i&gt;c&lt;/i&gt;&lt;/span&gt;, that's a very short time!
&lt;/p&gt;
&lt;a name="Why_Computer_Science_isn.27t_just_a_science"&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class="mw-headline"&gt;Why Computer Science isn't just a science&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Depending on one's discipline, Computer Science is really an amalgam of mathematics, science, and engineering.  One way of thinking about the various computing disciplines is in what types of problems they aim to solve.  There is a whole field of "Computer Science" concerned with discovering new efficient (&lt;i&gt;e.g.&lt;/i&gt; polynomial time) algorithms; this field is rooted in pure mathematics.  Once can devise an algorithm and formally prove its computational efficiency; no "experimentation" is required.
&lt;/p&gt;&lt;p&gt;It turns out, however, that there are some classes of languages/problems that are &lt;a href="http://en.wikipedia.org/wiki/NP-hard" class="external text" title="http://en.wikipedia.org/wiki/NP-hard" rel="nofollow"&gt;so hard that it is probably impossible to devise a polynomial time algorithm to solve them&lt;/a&gt;!  Sudoku is actually one such problem.  There is therefore an entire discipline within Computer Science concerned with finding algorithms that give an &lt;a href="http://en.wikipedia.org/wiki/Approximation_algorithm" class="external text" title="http://en.wikipedia.org/wiki/Approximation_algorithm" rel="nofollow"&gt;&lt;i&gt;approximate&lt;/i&gt;&lt;/a&gt; solution whose quality is not necessarily optimal but within a close range of optimal.  This field is also rooted in pure mathematics.
&lt;/p&gt;&lt;p&gt;Then there are problems that are so complex that either no approximation can be found or, perhaps, one doesn't even know the grammar for the problem's language.  For example, consider the game of poker.  Since poker is both non-deterministic (&lt;i&gt;i.e.&lt;/i&gt; there is chance involved) and unobservable (&lt;i&gt;i.e.&lt;/i&gt; one doesn't necessarily know what is going on in other players' hands/heads), an optimal poker-playing algorithm/strategy will be a function of the other players' strategies.  How can one prove that one's poker playing algorithm is not only efficient, but &lt;i&gt;optimal&lt;/i&gt;?  How does one know that it will always play well, regardless of the opponents' strategies?  Creating the algorithm may require building &lt;a href="http://en.wikipedia.org/wiki/Heuristics" class="external text" title="http://en.wikipedia.org/wiki/Heuristics" rel="nofollow"&gt;heuristics&lt;/a&gt;, which is engineering.  Evaluating the algorithm requires experimentation: playing one's algorithm against a number of opponents over a number of games and observing the outcome, which is science.
&lt;/p&gt;&lt;p&gt;The latter field generally falls under the term "Artificial Intelligence" (AI), the definition for which I usually give being, "The creation of systems capable of finding solutions to arbitrarily difficult problems."  The practitioners of AI generally fall into two camps: the &lt;i&gt;neats&lt;/i&gt; and the &lt;i&gt;scruffies&lt;/i&gt;.  The neats like to design systems using formal logic and mathematics; since such methods are infallible, once a method is produced then the work is done.  The scruffies, on the other hand, like to engineer systems that tend to get a job done and then, retrospectively, examine the system to figure out why it worked.
&lt;/p&gt;&lt;p&gt;I study AI and I generally fall into the "neat" camp.
&lt;/p&gt;
&lt;a name="References"&gt;&lt;/a&gt;&lt;h2&gt; &lt;span class="mw-headline"&gt;References&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=qdNvUdg-u0s:HGGHh6zDtIo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=qdNvUdg-u0s:HGGHh6zDtIo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=qdNvUdg-u0s:HGGHh6zDtIo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=qdNvUdg-u0s:HGGHh6zDtIo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=qdNvUdg-u0s:HGGHh6zDtIo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?i=qdNvUdg-u0s:HGGHh6zDtIo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EvanSultanik?a=qdNvUdg-u0s:HGGHh6zDtIo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EvanSultanik?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/qdNvUdg-u0s" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Computer_Science</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Wireless_remote_control</id>
		<title>Wireless remote control</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/6uuDSeINYag/Blog:Wireless_remote_control" />
				<updated>2009-02-05T18:07:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Yesterday I overheard &lt;a href="http://www.cs.drexel.edu/~jsalvage/" class="external text" title="http://www.cs.drexel.edu/~jsalvage/" rel="nofollow"&gt;Jeff Salvage&lt;/a&gt; trying to set up his mobile phone to be a wireless remote control for advancing slides in a presentation he was to give.  This entailed linking his phone to his laptop over bluetooth, a task which is apparently quite counter intuitive in Windows Vista.  In the ~10 minutes it took him to figure it out, I wrote my own tool to do the exact same thing.  My tool, however, works on Linux and can be controlled by any computer on the same network with a web browser.  In other words, I can now use my iPhone as a remote control for giving presentations in Linux.  The best part is that it all works through a web page, so there's no need for installing any software on the "controller;" any smart phone or networked PDA will do.  For a further explanation and my code, see &lt;a href="http://www.sultanik.com/Wireless_remote_control" title="Wireless remote control"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;center&gt;&lt;a href="http://www.sultanik.com/Image:Remote_control_screenshot.jpg" class="image" title="Remote control screenshot.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/9/9f/Remote_control_screenshot.jpg/150px-Remote_control_screenshot.jpg" width="150" height="225" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=XhZ6KLVS"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=neYIEJSE"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=neYIEJSE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=AsHsgg9S"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=6GQdoczR"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=6GQdoczR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=4IbwoVah"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/6uuDSeINYag" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Wireless_remote_control</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:RSS</id>
		<title>RSS Feed</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/cn-mUK7nvsg/Blog:RSS" />
				<updated>2009-02-04T17:23:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;After a year of sporadic hacking, I've finally finished re-writing &lt;a href="http://www.mediawiki.org/" class="external text" title="http://www.mediawiki.org/" rel="nofollow"&gt;MediaWiki&lt;/a&gt;'s RSS feed mechanism.  You can now follow all of my bloggings via &lt;a href="http://feeds2.feedburner.com/EvanSultanik" class="external text" title="http://feeds2.feedburner.com/EvanSultanik" rel="nofollow"&gt;this feed&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=gPa4KSg2"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=4rZ5zsUn"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=4rZ5zsUn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=9VHO0l2a"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=cKB1PFtZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=cKB1PFtZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=s8AlK4JC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/cn-mUK7nvsg" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:RSS</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Poe</id>
		<title>Celebrating 200 Poetic Years</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/9cA04eAHEDQ/Blog:Poe" />
				<updated>2009-01-22T16:59:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Rob_Lass" title="Rob Lass"&gt;Rob Lass&lt;/a&gt; and I have shared many an adventure.  We have embarked on a &lt;a href="http://www.sultanik.com/Blog:Ride_to_Reston" title="Blog:Ride to Reston"&gt;number&lt;/a&gt; of multi-day &lt;a href="http://www.sultanik.com/Cycle_junkie_shirt" title="Cycle junkie shirt"&gt;cycling&lt;/a&gt; trips.  He accompanied me on a crazy U-Haul road trip to the Canadian border to retrieve a 1.5 tonne pallet of IBM servers I had acquired.  We have masqueraded as lawyerly fat-cats at whiskey festivals.  We both share an unnatural fascination with the life and works of &lt;a href="http://en.wikipedia.org/wiki/Leslie_Lamport" class="external text" title="http://en.wikipedia.org/wiki/Leslie_Lamport" rel="nofollow"&gt;Leslie Lamport&lt;/a&gt;.  We were once collectively mooned and subsequently chided by &lt;a href="http://en.wikipedia.org/wiki/Jello_Biafra" class="external text" title="http://en.wikipedia.org/wiki/Jello_Biafra" rel="nofollow"&gt;Jello Biafra&lt;/a&gt;.  Yet another time we shared drinks in the hotel bar of a Holiday Inn in Monmouth, NJ, sitting next to &lt;a href="http://en.wikipedia.org/wiki/Ron_Jeremy" class="external text" title="http://en.wikipedia.org/wiki/Ron_Jeremy" rel="nofollow"&gt;Ron Jeremy&lt;/a&gt;.  We have also shared a number of moments in close proximity to &lt;a href="http://en.wikipedia.org/wiki/Richard_Stallman" class="external text" title="http://en.wikipedia.org/wiki/Richard_Stallman" rel="nofollow"&gt;RMS&lt;/a&gt; (an activity which, incidentally, I recommend only in moderation).
&lt;/p&gt;&lt;p&gt;I was not in the least surprised, then, when Rob approached me about going down to Baltimore for the &lt;a href="http://poebicentennial.com/" class="external text" title="http://poebicentennial.com/" rel="nofollow"&gt;bicentennial anniversary of Edgar Allan Poe's birth&lt;/a&gt;, followed by a stakeout of Poe's grave to catch the &lt;a href="http://en.wikipedia.org/wiki/Poe_Toaster" class="external text" title="http://en.wikipedia.org/wiki/Poe_Toaster" rel="nofollow"&gt;Poe Toaster&lt;/a&gt;.  The intervening hours were to be filled at &lt;i&gt;The Horse You Came In On Saloon&lt;/i&gt;, which, as a favorite hangout, is said to be the last place Poe was seen before his death.  I heartily endorsed this plan.
&lt;/p&gt;&lt;p&gt;The first matter of business was to make our two hour road trip as pleasant as possible.  This obviously entailed gratuitous electronics.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:HowWeRoll.jpg" class="image" title="HowWeRoll.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/0/03/HowWeRoll.jpg/150px-HowWeRoll.jpg" width="150" height="200" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Upon our arrival at &lt;a href="http://www.westminsterhall.org/" class="external text" title="http://www.westminsterhall.org/" rel="nofollow"&gt;Westminster Hall&lt;/a&gt; (the location of the bicentennial ceremony), we first set out to examine Poe's grave in what remained of the daylight.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:Evan_and_Rob_at_Poe_grave.jpg" class="image" title="Evan and Rob at Poe grave.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/0/07/Evan_and_Rob_at_Poe_grave.jpg/300px-Evan_and_Rob_at_Poe_grave.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Please ignore the two fops and focus your attention on the fence in the background: this is the one over which we suspect the toaster makes his entrance.  The building behind the fence is the Law Library of the University of Maryland.  The courtyard between the fence and the building is secured and only accessible from either the interior of the library or by scaling two consecutive fences in an adjacent alley (more on this below).
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.charmcitycakes.com/" class="external text" title="http://www.charmcitycakes.com/" rel="nofollow"&gt;Charm City Cakes&lt;/a&gt; (of &lt;a href="http://www.foodnetwork.com/ace-of-cakes/index.html" class="external text" title="http://www.foodnetwork.com/ace-of-cakes/index.html" rel="nofollow"&gt;Ace of Cakes&lt;/a&gt; fame) created a cake for the event.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:Charm_City_Poe_cake.jpg" class="image" title="Charm City Poe cake.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/5/59/Charm_City_Poe_cake.jpg/150px-Charm_City_Poe_cake.jpg" width="150" height="200" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The cake was raffled off to the guests, but I am sorry to report that neither of us won.
&lt;/p&gt;&lt;p&gt;I'd also like to report that many Poe fans are certified weirdos.  Others have extreme dedication.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:Poe_dedication.jpg" class="image" title="Poe dedication.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/6/62/Poe_dedication.jpg/150px-Poe_dedication.jpg" width="150" height="200" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In this particular case, however, to what the dedication is I am not sure (the ceremony overlapped with the Baltimore Ravens' unsuccessful bid at the Super Bowl).
&lt;/p&gt;&lt;p&gt;The celebration as a whole, however, was quite fun, including a number of very good performances.  Rob and I also got to get to know &lt;a href="http://en.wikipedia.org/wiki/John_Astin" class="external text" title="http://en.wikipedia.org/wiki/John_Astin" rel="nofollow"&gt;John Astin&lt;/a&gt;, which turned out to be somewhat of a letdown.  But he's ancient, so it's okay.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:Poe_Bicentennial.jpg" class="image" title="Poe Bicentennial.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/c/cc/Poe_Bicentennial.jpg/300px-Poe_Bicentennial.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Afterward we got a bite to eat and caught the tail end of said Ravens game at The Horse You Came In On.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:Horse_You_Came_In_On.jpg" class="image" title="Horse You Came In On.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/0/06/Horse_You_Came_In_On.jpg/150px-Horse_You_Came_In_On.jpg" width="150" height="200" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I learned four things from this experience:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; &lt;a href="http://www.yuengling.com/" class="external text" title="http://www.yuengling.com/" rel="nofollow"&gt;Yuengling&lt;/a&gt; seems to be as popular in Baltimore as it is in Philly;
&lt;/li&gt;&lt;li&gt; in Baltimore Yuengling is &lt;i&gt;not&lt;/i&gt; pronounced "lager;"
&lt;/li&gt;&lt;li&gt; despite the fact that Baltimore lost to the Pittsburgh Steelers and my car has a PA license plate, no one mistook my car for that of a Steelers fan and flipped it over in a riot (as would undoubtedly have been the case if Baltimore were populated by Philadelphia sports fans); and
&lt;/li&gt;&lt;li&gt; the "frat" scene seems to descend on The Horse You Came In On immediately after the completion of sports games.
&lt;/li&gt;&lt;/ol&gt;
&lt;div class="thumb tright"&gt;&lt;div class="thumbinner" style="width:152px;"&gt;&lt;a href="http://www.sultanik.com/Image:Poe_grave_front.jpg" class="image" title="The gate closest to the monument."&gt;&lt;img alt="The gate closest to the monument." src="http://www.sultanik.com/images/thumb/7/71/Poe_grave_front.jpg/150px-Poe_grave_front.jpg" width="150" height="113" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:Poe_grave_front.jpg" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;The gate closest to the monument.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;We got back to the graveyard around 00:30 on the 19th to find a crowd of about 60 people.  We really didn't know what to expect; apparently neither did anyone else, as wild rumors started to fly.  One rumor claimed that the toaster often made rounds to the fences surrounding the graveyard to say hi (and undoubtedly sign countless autographs and pose for pictures).  Another rumor claimed that the toaster was none other than Poe House curator Jeff Jerome himself.  This is all complicated by the fact that Poe actually has two graves (he was exhumed in the late 19&lt;sup&gt;th&lt;/sup&gt; century to make way for his monument and re-buried in the back of the graveyard—a location not visible from the sidewalk/gates).  The grave in the back is the one in which Rob and I were photoed above.  Some people thought the toaster visited the monument (which is visible from the street), while others thought that he visited the grave in the back.  There were therefore two groups of people each clustered around the gate closest to one of the graves.  The "monument" group seemed to be a mix of the aforementioned weirdos with a healthy dose of hipsters.  They spent their time reading poetry.  The group at the other gate (closest to the back grave) was decidedly more hardcore; spirits flowed from many a hip flask.
&lt;div class="thumb tright"&gt;&lt;div class="thumbinner" style="width:152px;"&gt;&lt;a href="http://www.sultanik.com/Image:Poe_grave_back.jpg" class="image" title="The gate closest to the rear grave (where the toaster usually goes)."&gt;&lt;img alt="The gate closest to the rear grave (where the toaster usually goes)." src="http://www.sultanik.com/images/thumb/e/e9/Poe_grave_back.jpg/150px-Poe_grave_back.jpg" width="150" height="113" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:Poe_grave_back.jpg" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;The gate closest to the rear grave (where the toaster usually goes).&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;At this latter gate, Rob and I met up with a guy who had actually attended this thing before; in fact, he claimed to have attended every year since 1983.  He and his son (a teenager) come every year to try and get a picture of the toaster, most likely to sell to a magazine (there is only one known photo of the toaster from a 1990 issue of Life magazine reproduced &lt;a href="http://www.thedatadude.com/pages/eapoe_and_superbowl2001.html" class="external text" title="http://www.thedatadude.com/pages/eapoe_and_superbowl2001.html" rel="nofollow"&gt;here&lt;/a&gt;).  He said that the toaster almost always goes to the back grave.  The toaster gets no cooperation from any authorities; neither the Westminster Burial Grounds nor the UMD Law Library provide him with any assistance.  Jeff Jerome camps out in the church every year to simply confirm that the toaster is the same person as the year before (&lt;i&gt;i.e.&lt;/i&gt; there is not an impostor) and also to ensure the identity of the toaster remains secret (because if his identity were ever revealed the magic of the tradition might be lost).  Jerome does not know who exactly the toaster is, however, and he does not want to know.  Once the toaster arrives, does is toast, and makes his exit, Jerome goes into the graveyard, collects the bottle of liquor, flowers, and any notes the toaster may have left, puts them in the church, and leaves.  It is Jerome's exit that cues the hordes of weirdos, hipsters, alcoholics, and amateur journalists that the toaster has come and done his deed.
&lt;/p&gt;
&lt;div class="thumb tright"&gt;&lt;div class="thumbinner" style="width:152px;"&gt;&lt;a href="http://www.sultanik.com/Image:Poe_graveyard_alley.jpg" class="image" title="The alley next to the graveyard."&gt;&lt;img alt="The alley next to the graveyard." src="http://www.sultanik.com/images/thumb/a/a2/Poe_graveyard_alley.jpg/150px-Poe_graveyard_alley.jpg" width="150" height="200" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:Poe_graveyard_alley.jpg" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;The alley next to the graveyard.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;At around 01:30, the man's teenage son came up to his father saying that he had been surveiling the alley adjacent to the graveyard that I mentioned above.  Three guys had gone in, but he only saw two of them come out.  Rob immediately walked down to the alley and I followed close behind.  Rob got there first and apparently saw two guys on the other side of the two fences (one fence of which was about 10 feet tall).  One fellow jumped over the brick wall to the graveyard.  The other hid behind a small half wall, peeked his head out to look at Rob, and then sprinted over the wall to follow his companion.  About five minutes later, camera flashes could be seen reflecting off of the walls of the law library, seeming to emanate from the area of the back grave.  We assumed this was the Poe Toaster having pictures taken for his own record.  We waited for another hour or so but nothing happened.  It was cold, and the toaster had likely already come and gone, so we drove home.
&lt;/p&gt;&lt;p&gt;All in all, it was an awesome adventure.
&lt;/p&gt;&lt;p&gt;You can read Rob's account of it &lt;a href="http://www.robtheguy.org/blog/2009/01/22/the-poe-toaster-is-plural/" class="external text" title="http://www.robtheguy.org/blog/2009/01/22/the-poe-toaster-is-plural/" rel="nofollow"&gt;here&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=snPlJfow"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=1p6zqM8v"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=1p6zqM8v" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=7OGdoOw7"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=WLoaARp1"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=WLoaARp1" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=bJjDiYxr"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/9cA04eAHEDQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Poe</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Horizons</id>
		<title>Walking to the horizon</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/gXn0xuPKlN4/Blog:Horizons" />
				<updated>2009-01-21T16:33:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I am subscribed to &lt;a href="http://www.davidhorvitz.com/" class="external text" title="http://www.davidhorvitz.com/" rel="nofollow"&gt;David Horvitz's&lt;/a&gt; new project entitled &lt;a href="http://www.davidhorvitz.com/2009/" class="external text" title="http://www.davidhorvitz.com/2009/" rel="nofollow"&gt;&lt;i&gt;IDEA SUBSCRIPTION&lt;/i&gt;&lt;/a&gt; in which he posts almost-daily simple instructions.  &lt;a href="http://davidhorvitz.tumblr.com/post/71969440" class="external text" title="http://davidhorvitz.tumblr.com/post/71969440" rel="nofollow"&gt;Yesterday's instructions&lt;/a&gt; read as follows:
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; CALCULATE HOW FAR THE HORIZON IS FROM YOU.  THIS CAN BE DONE BY THE FOLLOWING: DETERMINE THE HEIGHT OF YOUR EYES FROM THE GROUND (IN FEET).  MULTIPLY THIS BY 1.5.  FIND THE SQUARE ROOT OF THIS NUMBER.  THE FINAL NUMBER IS THE DISTANCE IN MILES TO THE HORIZON SPECIFICALLY FROM YOU.  NOW WALK THIS EXACT DISTANCE.  AS YOU DO THIS THINK ABOUT HOW YOU ARE WALKING THE ENTIRE RANGE OF WHAT IS VISIBLE FROM WHERE YOU STARTED.  AT THE END TAKE ONE LAST STEP AND ENTER OVER THE HORIZON, INTO DISAPPEARANCE.  NOW WALK BACK.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;Now, I do not profess to have spent much time researching this in the past, but I had never heard of this approximation before.  The approximation is so concise that I was curious as to its error.  The approximation is obviously incorrect for very tall heights since it is unbounded:
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="\lim_{h \rightarrow \infty} \sqrt{1.5 h} = \infty," src="http://www.sultanik.com/images/math/b/c/8/bc82eca1d04f42c4a812e7a12ff1bfbc.png" /&gt;&lt;/center&gt;
&lt;p&gt;however, in actuality an enormously tall person (whose eyes were almost an infinite distance away from the surface of the Earth) would only be able to see a quarter of the Earth's circumference in front!
&lt;/p&gt;&lt;p&gt;I therefore spent the last 5 minutes formalizing a bound on the error of this approximation.  The results, which follow, were quite surprising.
&lt;/p&gt;&lt;p&gt;First I had to find a more exact approximation for the distance one would have to walk to get to the horizon (making the assumption that the surface of the Earth is smooth and of uniform altitude).  This turned out to be a relatively simple geometric exercise.  Let's say the point on the earth at which the person is standing is &lt;span class="texhtml"&gt;&lt;i&gt;p&lt;/i&gt;&lt;/span&gt; and the person's eyes are &lt;span class="texhtml"&gt;&lt;i&gt;h&lt;/i&gt;&lt;/span&gt; feet above the ground.  The radius of the Earth at point &lt;span class="texhtml"&gt;&lt;i&gt;p&lt;/i&gt;&lt;/span&gt; is &lt;span class="texhtml"&gt;&lt;i&gt;r&lt;/i&gt;&lt;/span&gt;, therefore making his/her eyes &lt;span class="texhtml"&gt;&lt;i&gt;r&lt;/i&gt; + &lt;i&gt;h&lt;/i&gt;&lt;/span&gt; feet away from the center of the Earth.  Now imagine a ray emanating from the person's eyes; that ray will be tangent to the surface of the Earth at the horizon.  Let's call that horizon point &lt;span class="texhtml"&gt;&lt;i&gt;q&lt;/i&gt;&lt;/span&gt;.  The distance from &lt;span class="texhtml"&gt;&lt;i&gt;q&lt;/i&gt;&lt;/span&gt; to the center of the Earth will be &lt;span class="texhtml"&gt;&lt;i&gt;r&lt;/i&gt;&lt;/span&gt;.  Since the ray from the eyes to &lt;span class="texhtml"&gt;&lt;i&gt;q&lt;/i&gt;&lt;/span&gt; is tangent to the Earth, it meets the radius of the Earth at a 90 degree angle.  We can therefore draw a right triangle between the eyes, &lt;span class="texhtml"&gt;&lt;i&gt;q&lt;/i&gt;&lt;/span&gt;, and the center of the Earth, with one side of length &lt;span class="texhtml"&gt;&lt;i&gt;r&lt;/i&gt;&lt;/span&gt; and the hypotenuse of length &lt;span class="texhtml"&gt;&lt;i&gt;r&lt;/i&gt; + &lt;i&gt;h&lt;/i&gt;&lt;/span&gt;.  The angle between the hypotenuse and the side, &lt;span class="texhtml"&gt;&amp;alpha;&lt;/span&gt;, is therefore
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="\alpha = \cos^{-1}\left(\frac{r}{r+h}\right)." src="http://www.sultanik.com/images/math/f/0/d/f0d53c4ed1091a8046c0732f99bbe0d7.png" /&gt;&lt;/center&gt;
&lt;p&gt;The ratio of &lt;span class="texhtml"&gt;&amp;alpha;&lt;/span&gt; to 360 degrees should tell us the percentage of the Earth's circumference that is visible:
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="d = \frac{\alpha}{2\pi} 2 \pi r = r \cos^{-1}\left(\frac{r}{r+h}\right)." src="http://www.sultanik.com/images/math/c/d/a/cda08f228d510302f8ddba2e427e4a61.png" /&gt;&lt;/center&gt;
&lt;p&gt;&lt;span class="texhtml"&gt;&lt;i&gt;d&lt;/i&gt;&lt;/span&gt; will therefore be a good approximation of the distance, in feet, to the horizon.
&lt;/p&gt;&lt;p&gt;&lt;span class="texhtml"&gt;&lt;i&gt;d&lt;/i&gt;&lt;/span&gt; can be made even more accurate, however, by taking into account the fact that the radius of the Earth, &lt;span class="texhtml"&gt;&lt;i&gt;r&lt;/i&gt;&lt;/span&gt;, is not in fact a constant; in reality, the Earth is &lt;i&gt;not&lt;/i&gt; perfectly spherical.  The radius at the Equator is ~6378137 meters, whereas the radius at the poles is ~6356752.3 meters.  In order to take this into account, we need to define the radius as a function of the latitude of the point at which the person is standing
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="r&amp;nbsp;: [-\pi, \pi] \rightarrow [6356752.3\mbox{m}, 6378137\mbox{m}]." src="http://www.sultanik.com/images/math/d/a/2/da2dbff6a5a49195604de2a241976765.png" /&gt;&lt;/center&gt;
&lt;p&gt;I approximated this thus:
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="r(lat) \mapsto \sqrt{\frac{(a^2\cos(lat))^2 + (b^2\sin(lat))^2}{(a\cos(lat))^2 + (b\sin(lat))^2}}," src="http://www.sultanik.com/images/math/3/f/a/3fa1e5873bf4c8c43f1837eca1f98662.png" /&gt;&lt;/center&gt;
&lt;p&gt;where &lt;span class="texhtml"&gt;&lt;i&gt;a&lt;/i&gt;&lt;/span&gt; is the polar radius and &lt;span class="texhtml"&gt;&lt;i&gt;b&lt;/i&gt;&lt;/span&gt; is the equatorial radius (converted to feet, of course).
&lt;/p&gt;&lt;p&gt;Substituting the new &lt;span class="texhtml"&gt;&lt;i&gt;r&lt;/i&gt;&lt;/span&gt; function into the original equation for &lt;span class="texhtml"&gt;&lt;i&gt;d&lt;/i&gt;&lt;/span&gt; gives the approximation up with which I ended.  The error in the original (supposedly faulty) approximation is therefore
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="\delta(h, lat) \mapsto \left|r(lat) \cos^{-1}\left(\frac{r(lat)}{r(lat)+h}\right) - f\sqrt{1.5h}\right|," src="http://www.sultanik.com/images/math/2/5/c/25c63ab5eb1774907011ae26732a55aa.png" /&gt;&lt;/center&gt;
&lt;p&gt;where &lt;span class="texhtml"&gt;&lt;i&gt;f&lt;/i&gt;&lt;/span&gt; is the number of feet in a mile.  It is important to note that this error asymptotically approaches positive infinity with respect to &lt;span class="texhtml"&gt;&lt;i&gt;h&lt;/i&gt;&lt;/span&gt;; therefore, the taller the human the more error.  We shall therefore obviously consider Bao Xishun (鲍喜顺), the tallest man alive.  For simplicity, let's say his eyes are 7.75 feet off of the ground.
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="\mathop{\arg\,\max}_{lat \in [-\pi, \pi]} \delta(7.75, lat) = 0," src="http://www.sultanik.com/images/math/a/7/5/a752b0ea9d84c77746d74082941090b3.png" /&gt;&lt;/center&gt;
&lt;p&gt;therefore, the most error will occur at the equator.  The maximum error is
&lt;/p&gt;
&lt;center&gt;&lt;img class="tex" alt="\delta(7.75, 0) \approx 21.96\ \mbox{feet}." src="http://www.sultanik.com/images/math/5/5/7/557bc54aca6ba78a2ec6b736bc940475.png" /&gt;&lt;/center&gt;
&lt;p&gt;That's very surprising to me: the relatively simple approximation has a worst case error of only ~22 feet!
&lt;/p&gt;&lt;p&gt;The error is almost zero at latitudes of ± ~60 degrees (59.33623821 to be exact), so if you want the the simple approximation to work best you'll need to go to Stockholm.
&lt;/p&gt;&lt;p&gt;The entrance to &lt;a href="http://www.saluhallen.com/" class="external text" title="http://www.saluhallen.com/" rel="nofollow"&gt;Östermalms Saluhall‎&lt;/a&gt; would be a delicious place to start (just remember to walk either due East or due West):
&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=59.33623821,+18.0783&amp;amp;sll=59.336254,18.064957&amp;amp;sspn=0.046312,0.09922&amp;amp;ie=UTF8&amp;amp;ll=59.332577,18.065128&amp;amp;spn=0.046317,0.09922&amp;amp;t=h&amp;amp;z=13" class="external text" title="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=59.33623821,+18.0783&amp;amp;sll=59.336254,18.064957&amp;amp;sspn=0.046312,0.09922&amp;amp;ie=UTF8&amp;amp;ll=59.332577,18.065128&amp;amp;spn=0.046317,0.09922&amp;amp;t=h&amp;amp;z=13" rel="nofollow"&gt;+59° 20' 10.46", +18° 4' 41.88"&lt;/a&gt;
&lt;/p&gt;
&lt;div id="map1" style="width: 600px; height: 400px; direction: ltr; "&gt;&lt;noscript&gt;&lt;img height="400" width="512" src="http://maps.google.com/staticmap?center=59.336254,18.064957&amp;amp;zoom=13&amp;amp;size=512x400&amp;amp;key=ABQIAAAA0BTQRqeBjzMconnWyeqDnxS7ctQboOQe0kxDOT3ONEZTRcxexhT-jMThfounwsmF_ja0xtbtSgVQRg&amp;amp;markers=59.33623821,18.0783,red%7C" /&gt;&lt;/noscript&gt;&lt;div id="map1_fallback" style="display: none;"&gt;&lt;img height="400" width="512" src="http://maps.google.com/staticmap?center=59.336254,18.064957&amp;amp;zoom=13&amp;amp;size=512x400&amp;amp;key=ABQIAAAA0BTQRqeBjzMconnWyeqDnxS7ctQboOQe0kxDOT3ONEZTRcxexhT-jMThfounwsmF_ja0xtbtSgVQRg&amp;amp;markers=59.33623821,18.0783,red%7C" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
      function makeMap1() {       if (!GBrowserIsCompatible()) {           document.getElementById("map1_fallback").style.display = '';           return;       }       var map = new GMap2(document.getElementById("map1"), { 'mapTypes': [G_NORMAL_MAP, G_HYBRID_MAP, G_PHYSICAL_MAP, G_SATELLITE_MAP] });       GME_DEFAULT_ICON = G_DEFAULT_ICON;       map.setCenter(new GLatLng(59.336254, 18.064957), 13, G_HYBRID_MAP);       GEvent.addListener(map, 'click', function(overlay, point) {           if (overlay) {             if (overlay.tabs) {               overlay.openInfoWindowTabsHtml(overlay.tabs);             } else if (overlay.title_link || overlay.caption || overlay.maxContent) {                 overlay.openInfoWindowHtml('&lt;div class="gmapinfowindow"&gt;'+                     (overlay.title?('&lt;b&gt;'+overlay.title_link+'&lt;/b&gt;&lt;br /&gt;'):'')+overlay.caption+'&lt;/div&gt;',                      { 'maxTitle': overlay.maxContent?overlay.title:undefined, 'maxContent': overlay.maxContent });                 if (overlay.maxContent) {                     map.getInfoWindow().enableMaximize();                 } else {                     map.getInfoWindow().disableMaximize();                 }             }            }       }); map.addControl(new GHierarchicalMapTypeControl());  map.addControl(new GSmallMapControl());  marker = new GMarker(new GLatLng(59.33623821, 18.0783), {  'icon': GME_DEFAULT_ICON,  'clickable': true }); marker.caption = ''; marker.caption += '&lt;!-- CUSTOM_FEEDS page_title=\"Main_Page\" --&gt;&lt;p&gt;&lt;a href=\"http://www.saluhallen.com/\" class=\"external text\" title=\"http://www.saluhallen.com/\" rel=\"nofollow\"&gt;Östermalms Saluhall‎&lt;/a&gt;&lt;br /&gt;Humlegårdsgatan 3, 11446 Stockholm, Sweden‎&lt;br /&gt;Start here.&lt;br /&gt; &lt;/p&gt;'; map.addOverlay(marker); GME_DEFAULT_ICON = G_DEFAULT_ICON;} addLoadEvent(makeMap1);
//]]&gt;
&lt;/script&gt;

&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=NqRTCzGf"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=9wd8v0Td"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=9wd8v0Td" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=3XpYGQry"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=K2jb0PUr"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=K2jb0PUr" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=HBqBXT02"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/gXn0xuPKlN4" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Horizons</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Only_%CF%80_more_hours_to_go%E2%80%A6</id>
		<title>Only π more hours to go…</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/4SzpzzatWHY/Blog:Only_%CF%80_more_hours_to_go%E2%80%A6" />
				<updated>2008-10-29T22:58:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;This evening I finally got around to doing some forensic data recovery from a broken (&lt;i&gt;i.e.&lt;/i&gt;, horribly clicking) hard drive.  Most of the data I had backed up, but there are a couple non-vital files for which it would be nice to recover.  That and I've never done something like this before and it's quite fun.  It's especially fun that the partition I'd like to recover was formatted in &lt;a href="http://en.wikipedia.org/wiki/Reiserfs" class="external text" title="http://en.wikipedia.org/wiki/Reiserfs" rel="nofollow"&gt;ReiserFS&lt;/a&gt;, for which no free and few commercial recovery tools exist.
&lt;/p&gt;&lt;p&gt;The first step to data recovery is making an image of the faulty disk on a healthy hard drive.  The disk image can then be repaired and diagnosed without having to worry about hardware failures (&lt;i&gt;i.e.&lt;/i&gt;, the dreaded clicking).  The tool of choice for this is &lt;a href="http://www.gnu.org/software/ddrescue/ddrescue.html" class="external text" title="http://www.gnu.org/software/ddrescue/ddrescue.html" rel="nofollow"&gt;ddrescue&lt;/a&gt;.  For those that are familiar with the *NIX command &lt;code&gt;dd&lt;/code&gt;, &lt;code&gt;ddrescue&lt;/code&gt; works similarly &lt;i&gt;except&lt;/i&gt; it skips over bad sectors.  Once all of the good sectors are copied, it then goes back to all of the bad sectors and tries to read them again (in case the hardware malfunction is stochastic).
&lt;/p&gt;&lt;p&gt;&lt;code&gt;ddrescue&lt;/code&gt; prints out a handy list of statistics, including the average transfer rate.  My rate is currently at 7120 kB/s (it's so slow because I am copying the image to my network file server over 100BaseT to a Pentium-III box running software raid).  The hard drive I am recovering is 76.8 GB in size.  I did some quick calculations to figure out how long I'd have to wait before this thing finishes.
&lt;/p&gt;
&lt;center&gt;76.8 GB / (7120 kB/s) ≈ 3.141 hours ≈ π&lt;/center&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=MyCdWZhv"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=1CpoS6ud"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=1CpoS6ud" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=FqJjNXVA"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=WECTCf4S"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=WECTCf4S" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=qAelhiyx"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/4SzpzzatWHY" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Only_%CF%80_more_hours_to_go%E2%80%A6</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Flexitarded</id>
		<title>Flexitarded</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/gyDs0kRvKPM/Blog:Flexitarded" />
				<updated>2008-10-28T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I'd like to begin with a simple analogy that expresses my feelings on the subject at hand:
&lt;/p&gt;
&lt;center&gt;
&lt;p&gt;aborted llama fœti&amp;nbsp;: Perestroika&amp;nbsp;:: &lt;a href="http://en.wikipedia.org/wiki/Flexitarianism" class="external text" title="http://en.wikipedia.org/wiki/Flexitarianism" rel="nofollow"&gt;Flexitarianism&lt;/a&gt;&amp;nbsp;: this analogy
&lt;/p&gt;
&lt;/center&gt;
&lt;p&gt;In other words, flexitarianism makes as much sense as grooming one's pubic hair with a rusty vegetable peeler.  I fail to see how flexitarianism is any different than, oh, say, &lt;i&gt;being an omnivore&lt;/i&gt;.  "I am a vegetarian… except for when consumption of animal products is required socially, nutritionally, culturally, or pragmatically."  STFU.  In other words, you're a &lt;i&gt;normal omnivore&lt;/i&gt; who cannot always stomach eating meat for some (most likely moral) reason.  I have no problem with vegetarianism, or any other diet, for that matter, as long as its practitioners do not proselytize.  I don't care if you deprive yourself of certain foods on moral, religious, or nutritional grounds.  What &lt;i&gt;does&lt;/i&gt; offend me is the addition of a new word to our vernacular that adds little or nothing semantically.  Also, it is concerning that those in moral conflict about eating meat are given a new term to legitimize their ethical limbo, thus postponing their decision about whether or not to give up being an omnivore.
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; I only drink to excess when it is socially acceptable.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="3" style="padding-top: 10px"&gt; &lt;p style="font-size:smaller;text-align: right"&gt;&lt;cite style="font-style:normal;"&gt;—The &lt;i&gt;flexiholic&lt;/i&gt;.&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; I only cheat on my spouse pragmatically.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="3" style="padding-top: 10px"&gt; &lt;p style="font-size:smaller;text-align: right"&gt;&lt;cite style="font-style:normal;"&gt;—The &lt;i&gt;flexadulterer&lt;/i&gt;.&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=SKkg8ISc"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=pnxIskG5"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=pnxIskG5" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=wFRZ7IgL"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=vd9ku3aO"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=vd9ku3aO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=W4CgYbPX"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/gyDs0kRvKPM" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Flexitarded</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Gentrification_of_Camden</id>
		<title>Gentrification of Camden</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/mLe1EE2mTQg/Blog:Gentrification_of_Camden" />
				<updated>2008-10-15T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;It appears that Camden has a new strategy for urban renewal: attract the hipsters.  How are they doing it?  Well, all they had to do was relocate the Spring Garden stop of the Market Frankford Line!
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Image:SpringGardenCamden.png" class="image" title="SpringGardenCamden.png"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/9/94/SpringGardenCamden.png/700px-SpringGardenCamden.png" width="700" height="522" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;You see!  They even demolished the old Spring Garden stop!
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Image:SpringGardenPhilly.png" class="image" title="SpringGardenPhilly.png"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/c/c1/SpringGardenPhilly.png/700px-SpringGardenPhilly.png" width="700" height="522" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;(you can click on the pictures for full resolution versions)
&lt;/p&gt;&lt;p&gt;As of Wednesday October 15th at 10:34 EDT, this still occurs on Google maps:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; Philadelphia: &lt;a href="http://maps.google.com/?ie=UTF8&amp;amp;ll=39.953339,-75.147257&amp;amp;spn=0.017436,0.041113&amp;amp;t=h&amp;amp;z=15" class="external text" title="http://maps.google.com/?ie=UTF8&amp;amp;ll=39.953339,-75.147257&amp;amp;spn=0.017436,0.041113&amp;amp;t=h&amp;amp;z=15" rel="nofollow"&gt;link&lt;/a&gt;
&lt;/li&gt;&lt;li&gt; Camden: &lt;a href="http://maps.google.com/?ie=UTF8&amp;amp;ll=39.945049,-75.09254&amp;amp;spn=0.017438,0.041113&amp;amp;t=h&amp;amp;z=15&amp;amp;iwloc=0x89c6c90c2acd8991:0x9da7bd67866e33e7" class="external text" title="http://maps.google.com/?ie=UTF8&amp;amp;ll=39.945049,-75.09254&amp;amp;spn=0.017438,0.041113&amp;amp;t=h&amp;amp;z=15&amp;amp;iwloc=0x89c6c90c2acd8991:0x9da7bd67866e33e7" rel="nofollow"&gt;link&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=QjUFSA7d"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=SsFVGYlo"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=SsFVGYlo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=ZNh4PF65"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=P1RddTIk"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=P1RddTIk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=0QvD665n"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/mLe1EE2mTQg" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Gentrification_of_Camden</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Mr._Mint</id>
		<title>Mr. Mint</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/FmchEnpHASo/Blog:Mr._Mint" />
				<updated>2008-09-16T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Alternate title: "How I bought myself a US passport."
&lt;/p&gt;&lt;p&gt;While recently writing an article on the &lt;a href="http://www.sultanik.com/AAMAS" class="mw-redirect" title="AAMAS"&gt;AAMAS&lt;/a&gt; conference, I was reminded of an incident back in 2002 that, in retrospect, is quite amusing.  Although I have publicly recited the story in the past, I have never done so on my website.  That, and enduring my incoherent scribblings of six years back makes me want to thrust unsharpened pencils into my eyes.
&lt;/p&gt;&lt;p&gt;The prologue is a rather boring and, I must say, embarrassing story, the only pertinent details of which are that I am left in need of a US passport, posthaste.
&lt;/p&gt;&lt;p&gt;It's Saturday.  My flight bound for Italy leaves Monday afternoon.
&lt;/p&gt;&lt;p&gt;Philadelphia, the city from which I was to embark, has a 24/7 passport-related toll-free telephone hotline, which conveniently plays a recorded message on a loop stating, among other things, that the only possibility of getting a passport (forget a same-day passport) is to have an appointment, and the appointments are booked at least two weeks in advance.  In order to book an appointment, there is an automated system available through a separate 1-900 (non-toll-free) number.  It stated that it was impossible to speak to a human without an appointment.
&lt;/p&gt;&lt;p&gt;Thank the lords for the Internets.  There is one company that guarantees same-day passports: &lt;a href="http://www.itseasypassport.com/" class="external text" title="http://www.itseasypassport.com/" rel="nofollow"&gt;itseasypassport.com&lt;/a&gt; (the website doesn't appear to work anymore).  I call their 1-800 24/7 emergency hotline. The number just plays me a recording telling me to call a different number, this time in the 212 area code (New York City).  I call the second number and am greeted by woman.  Mind you, she does not pick up as if she were a receptionist; she greets me as if I had called her personal residence.  Which, it turns out, I had.  I ask for &lt;i&gt;Its Easy Passports&lt;/i&gt;, to which she yells to her husband to pick up the phone.
&lt;/p&gt;&lt;p&gt;The proprietor of this well-oiled establishment picks up the phone and immediately asks me, "Do you have a valid driver's license?  If so I can get you anything."  I explain my situation and tell him that I need a passport.  "Do you want a Visa, too?"
&lt;/p&gt;&lt;p&gt;Here are the instructions he gave me:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; Go to a building in NYC at 07:00 on Monday morning (he gave me the address);
&lt;/li&gt;&lt;li&gt; Call a guy named Mr. Mint (he gave me his cell phone #);
&lt;/li&gt;&lt;li&gt; Mr. Mint will alert the guards at the entrance to the building to let me in;
&lt;/li&gt;&lt;li&gt; Go in and go directly to the 10th floor (all of the other floors are NYC police holding cells);
&lt;/li&gt;&lt;li&gt; Get out of the elevator and across the hall there will be a room with a bunch of forms and a phone;
&lt;/li&gt;&lt;li&gt; Fill out the forms and when you are done call Mr. Mint again;
&lt;/li&gt;&lt;li&gt; Mr. Mint will come in and take the forms and he will give you a ticket;
&lt;/li&gt;&lt;li&gt; Pay Mr. Mint $100 cash; and
&lt;/li&gt;&lt;li&gt; Come back at 10:30 and you will get your passport.
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;As you can imagine, at this point I am very skeptical, so I ask the mystery man how his company ensures same-day passports (without being so rude as to directly ask if the resulting passport will be a forgery).  He claimed that his company buys slots of appointments from the passport office and sells them to his customers.  I look up the address the guy (whose name turns out to be Dave) gave me and it appears to be the address of the real NYC passport office, so the story checked out.
&lt;/p&gt;&lt;p&gt;I decide to try this, as it's my only hope.  Sunday night I take the train up to NYC and stay at the Chinatown Holiday Inn. The next morning I walk to the passport office and there was already a line encircling the building.  No one in the line spoke English.  I enqueue and call Mr. Mint, but he does not answer.  Without any other option, I walk to the front of the line and tell the guard that I am here for &lt;i&gt;Its Easy Passports&lt;/i&gt;, and by this magic password he steps aside and lets me in.  I take the elevator to the 10th floor and, sure enough, Mr. Mint is waiting.  Everything went as planned and I hop on a train back down to Philly, got to the airport, and caught my flight at 17:00.
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; When did you get this?
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="3" style="padding-top: 10px"&gt; &lt;p style="font-size:smaller;text-align: right"&gt;&lt;cite style="font-style:normal;"&gt;—British Airways attendant&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; I just had it printed today.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="3" style="padding-top: 10px"&gt; &lt;p style="font-size:smaller;text-align: right"&gt;&lt;cite style="font-style:normal;"&gt;—Me&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;
&lt;b&gt;Edit (10-08-2009):&lt;/b&gt; Thanks to some &lt;a href="http://www.sultanik.com/Talk:Blog:Mr._Mint#Steve_W._said_..." title="Talk:Blog:Mr. Mint"&gt;comments from Steve W.&lt;/a&gt;, I'd like to clarify that, although It's Easy Passport seemed sketchy at first, it turns out to be a legitimate company that provides an excellent service.  I would recommend them to anyone in a similar situation to mine.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=ko9Qk7jI"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=ovuDZPPY"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=ovuDZPPY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=IShYbxZB"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=ajxUK9kq"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=ajxUK9kq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=cGxnG7fB"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/FmchEnpHASo" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Mr._Mint</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Lottery</id>
		<title>Lottery Tickets on Second Street</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/-muKrcZwjyU/Blog:Lottery" />
				<updated>2008-08-22T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;While walking to the subway this morning at ~08:30:&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Elderly black man sitting on a park bench with a couple dozen lottery tickets strewn about him on the sidewalk:
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; I don' want 'em no mo'; you can have 'em all.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;Middle-aged white man on hands and knees, to whom the first gentleman was speaking:
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; I'm just picking which numbers I want…
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=mXJxBAJn"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=ayDKbGzk"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=ayDKbGzk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Xc09gARn"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=lg7dPmVo"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=lg7dPmVo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=OZSiXX2H"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/-muKrcZwjyU" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Lottery</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Gargoyle_faces</id>
		<title>Number one suggested activity for travel in Europe</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/k1VtIXhR_AM/Blog:Gargoyle_faces" />
				<updated>2008-04-02T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I and &lt;a href="http://www.sultanik.com/Rob_Lass" title="Rob Lass"&gt;Rob Lass&lt;/a&gt; will be attending &lt;a href="http://www.sultanik.com/AAMAS" title="AAMAS"&gt;AAMAS&lt;/a&gt; this May in Portugal, and we just received our tickets in the mail from &lt;a href="http://www.raileurope.com/" class="external text" title="http://www.raileurope.com/" rel="nofollow"&gt;RailEurope&lt;/a&gt;.  This is what was on the inside of the ticket holder:
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Image:RailEurope.png" class="image" title="Image:RailEurope.png"&gt;&lt;img alt="Image:RailEurope.png" src="http://www.sultanik.com/images/1/18/RailEurope.png" width="432" height="252" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;(Emphasis (by way of blur) was added by me.)
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=2qLjP1sZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=NAdj4Sxg"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=NAdj4Sxg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=cQTiCwSO"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=6isgxl7U"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=6isgxl7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Ka0nU8U1"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/k1VtIXhR_AM" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Gargoyle_faces</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:See_the_fingers</id>
		<title>You've got to see the fingers!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/_tq_PBggEmk/Blog:See_the_fingers" />
				<updated>2006-04-30T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;My girlfriend and I attended a performance of the Philadelphia Orchestra last night at the &lt;a href="http://www.kimmelcenter.org/" class="external text" title="http://www.kimmelcenter.org/" rel="nofollow"&gt;Kimmel Center&lt;/a&gt;. The concert was lovely, but the company was not. Let me elaborate: my girlfriend sat to my left, to the left of her sat a young gentleman, to the left of whom sat a lady. All was well and good until, five minutes into the first performance, the gentleman peeled open the velcro flap of his laptop bag and produced a pair of binoculars. He immediately offered them to the lady to his left, who reluctantly accepted. He placed the strap over her head. About ten minutes later, having been returned his binoculars, he offered them to my girlfriend who kindly refused. Five minutes later, he leans over my girlfriend, taps me on the shoulder, and offers the binoculars to me. I just give him a really nasty stare, something at which I’m told I excel. One of my pet peeves is being distracted in any way during a performance. Later on, &lt;a href="http://en.wikipedia.org/wiki/Stephen_Hough" class="external text" title="http://en.wikipedia.org/wiki/Stephen_Hough" rel="nofollow"&gt;Stephen Hough&lt;/a&gt; performed as a solo pianist. Once again, we were offered the binoculars. This time, however, we were told, “You’ve gotta see the fingers!” The offer was to no avail.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=MUFV60Rb"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=rtlFiwAQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=rtlFiwAQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=LGfhyZMS"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=JTY0XNao"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=JTY0XNao" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=aLIl8HXR"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/_tq_PBggEmk" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:See_the_fingers</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Ride_to_Reston</id>
		<title>Cycling from Philadelphia, PA to Reston, VA</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/Z-aB4W6LsmE/Blog:Ride_to_Reston" />
				<updated>2006-04-05T19:04:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;A couple days ago, &lt;a href="http://www.sultanik.com/Rob_Lass" class="mw-redirect" title="Rob Lass"&gt;Rob Lass&lt;/a&gt; and I embarked on an epic journey from Philadelphia to Reston, VA (just outside of Washington, D.C.)… by bicycle. We had a business meeting in Reston, which is only about 160 miles away, so we figured we’d give cycling a shot. Deep down, neither of us thought we could make it, but neither of us were man enough to admit that, so we tried anyway. One puncture, one bike-to-bike collision, one hail storm, weird sunburn, too many bad directions, and many, many hills later, we made it there and back in one piece. Overall, it was a very positive experience for the both of us.
&lt;/p&gt;&lt;p&gt;Pictures are available &lt;a href="http://pictures.sultanik.com/v/Cycling/RideToReston/" class="external text" title="http://pictures.sultanik.com/v/Cycling/RideToReston/" rel="nofollow"&gt;here&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Lessons learned:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; For anyone that is reasonably in shape, long distance touring is 85% mental.
&lt;/li&gt;&lt;li&gt; Touring gear (&lt;i&gt;i.e.&lt;/i&gt; racks and panniers) add a lot of weight, and weight makes a huge difference. I used a rack trunk and a handlebar bag, which made my bike top heavy and made steering awkward. It also prevented me from pulling a &lt;a href="http://www.sultanik.com/Blog:Nathan_Fabian" title="Blog:Nathan Fabian"&gt;Natty Fab&lt;/a&gt;.
&lt;/li&gt;&lt;li&gt; Even if you wear sunscreen, you’ll get sunburn and tanned in the weirdest places (see the pictures linked above).
&lt;/li&gt;&lt;li&gt; Even though I used a fixed gear, I’m really glad I at least had a front brake; it was essential on the huge hills around the PA/MD border.
&lt;/li&gt;&lt;/ul&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:Ride_to_Reston_day_1.png" class="image" title="Ride to Reston day 1.png"&gt;&lt;img alt="" src="http://www.sultanik.com/images/3/35/Ride_to_Reston_day_1.png" width="600" height="167" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;&lt;li&gt; Route 1 is the best way to get from Philadelphia to Baltimore. Much of Route 1 is a four lane highway, but there’s a huge shoulder that allows for two bikes to ride abreast. It’s also legal for bikes to ride along the shoulder.
&lt;/li&gt;&lt;li&gt; There is nothing between Kenett Square and the suburbs of Baltimore. Literally. We had to make an 8 mile detour just to get some lunch.
&lt;/li&gt;&lt;li&gt; GPS is invaluable, especially for finding the nearest restaurant, hotel, or convenience store when in the middle of nowhere (&lt;i&gt;i.e.&lt;/i&gt; between Kenett Square and Baltimore).
&lt;/li&gt;&lt;li&gt; Never underestimate your appetite. All-you-can-eat places are great.
&lt;/li&gt;&lt;li&gt; You probably don’t want to ride further than White Marsh, Maryland after dark. This is coming from someone who lives in West Philly. White Marsh is really nice, though, and has a lot of great places to stay/eat, especially around to I-95.
&lt;/li&gt;&lt;li&gt; We were told that the Bike Washington cue sheet external was the best way to get from Baltimore to D.C. It was great, however, it was originally written by people going the opposite direction (&lt;i&gt;i.e.&lt;/i&gt; from D.C. to Baltimore). Therefore, some of the directions were wrong (for example, at mile 14.6 you really want to make a right onto Park Circle). Also, the warning about a big hill at mile 30.9 was really a downhill for us; we got really confused and thought we were lost because we never got to a big climb.
&lt;/li&gt;&lt;li&gt; Getting across D.C. from Union Station to the Francis Scott Key Bridge took a lot longer than expected.
&lt;/li&gt;&lt;li&gt; The Custis and W&amp;amp;OD trails are amazing.
&lt;/li&gt;&lt;li&gt; Taking a lot of turns on small roads takes a lot of time; it took us the same amount of time to get from Philly to Baltimore (~100 miles down Route 1) as it did to go from Baltimore to Reston (~65 miles on dozens of different roads).
&lt;/li&gt;&lt;li&gt; Riding through a hail storm is not fun.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=pYH5vR2z"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=o9FzsaVK"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=o9FzsaVK" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=MzHW4sGw"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=x45rhUWC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=x45rhUWC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=sQmEjaDR"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/Z-aB4W6LsmE" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Ride_to_Reston</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Nathan_Fabian</id>
		<title>Nathan Fabian</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/-R86E6OE05Y/Blog:Nathan_Fabian" />
				<updated>2006-03-15T02:21:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;For those of you who don’t know, &lt;a href="http://www.fixedgeargallery.com/" class="external text" title="http://www.fixedgeargallery.com/" rel="nofollow"&gt;Fixed Gear Gallery&lt;/a&gt; (FGG) is a daily-updated website that has a photo gallery of… you guessed it… &lt;a href="http://en.wikipedia.org/wiki/Fixed_gear" class="external text" title="http://en.wikipedia.org/wiki/Fixed_gear" rel="nofollow"&gt;fixed gear bicycles&lt;/a&gt;. Last Friday, a fellow by the name of Nathan Fabian submitted &lt;a href="http://www.fixedgeargallery.com/2006/mar/NathanFabian.htm" class="external text" title="http://www.fixedgeargallery.com/2006/mar/NathanFabian.htm" rel="nofollow"&gt;these pictures&lt;/a&gt; to the FGG. You might notice that the &lt;a href="http://www.fixedgeargallery.com/2006/mar/NathanFabian-2.jpg" class="external text" title="http://www.fixedgeargallery.com/2006/mar/NathanFabian-2.jpg" rel="nofollow"&gt;second picture&lt;/a&gt; on the page features Mr. Fabian executing a no-handed &lt;a href="http://en.wikipedia.org/wiki/Track_stand" class="external text" title="http://en.wikipedia.org/wiki/Track_stand" rel="nofollow"&gt;track stand&lt;/a&gt;, whilst making a lewd gesture at the camera. This is interesting, since the FGG discourages (and sometimes disallows) pictures of bikes’ owners. A thread on the &lt;a href="http://www.bikeforums.net/forumdisplay.php?f=178" class="external text" title="http://www.bikeforums.net/forumdisplay.php?f=178" rel="nofollow"&gt;Single Speed/Fixed Gear&lt;/a&gt; sub-forum on &lt;a href="http://www.bikeforums.net/" class="external text" title="http://www.bikeforums.net/" rel="nofollow"&gt;bikeforums.net&lt;/a&gt; was created complaining about the submission to FGG, making fun of Mr. Fabian. The thread is available &lt;a href="http://www.bikeforums.net/showthread.php?t=180023&amp;amp;page=1" class="external text" title="http://www.bikeforums.net/showthread.php?t=180023&amp;amp;page=1" rel="nofollow"&gt;here&lt;/a&gt;. Photoshopping of the original images naturally ensued. This thread now has the potential to become like the now-famously epic ~500-page-long so-called " Sherdog Guido thread" (note: the thread was deleted, but a good recap video can be found &lt;a href="http://www.youtube.com/watch?v=PbEvPuzlvHM" class="external text" title="http://www.youtube.com/watch?v=PbEvPuzlvHM" rel="nofollow"&gt;here&lt;/a&gt;). Here are some of my contributions to the Fabian thread:
&lt;/p&gt;
&lt;center&gt;&lt;a href="http://www.sultanik.com/Image:AmericasGreatestShows.jpg" class="image" title="AmericasGreatestShows.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/d/db/AmericasGreatestShows.jpg/300px-AmericasGreatestShows.jpg" width="300" height="427" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.sultanik.com/Image:ZimmyFabian.jpg" class="image" title="ZimmyFabian.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/1/18/ZimmyFabian.jpg/300px-ZimmyFabian.jpg" width="300" height="359" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.sultanik.com/Image:NathanFabianSpokeCard.jpg" class="image" title="NathanFabianSpokeCard.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/8/89/NathanFabianSpokeCard.jpg/300px-NathanFabianSpokeCard.jpg" width="300" height="400" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.sultanik.com/Image:WreckgarNathan.jpg" class="image" title="WreckgarNathan.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/0/0d/WreckgarNathan.jpg/400px-WreckgarNathan.jpg" width="400" height="301" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.sultanik.com/Image:PeterPanNathan.jpg" class="image" title="PeterPanNathan.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/e/ed/PeterPanNathan.jpg/300px-PeterPanNathan.jpg" width="300" height="362" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;
&lt;span style="font-size: 4pt; line-height: 4pt"&gt;&lt;pre&gt;
                        .J&amp;amp;&amp;amp;&amp;amp;+.
                      .+X0CwHM0+.
                     .dSrI?zWKI``
                    .WSzz+jXSv`
                  .JUz?++Jw0!`                                              ..&amp;amp;aex+.
                 J0C+`..+XC:                                 .jgggaa&amp;amp;J....JdHMNNMHkwz+.....++..
               .+UI++^.dXC!                             ...JdXMHHNN#MNmmXWHMN##NMMMNNNNNNNHNNmc`
            ..uXV1+!.JzZk&amp;amp;++                          dwXWNMMMNMH#MMNNMNMMMMM##NNMMMMMMNN##NNMk?+.
         .JJvCwv!``.?zUUWM8:                          jWMMMMMNMNNHMMMMNN###MMNNNMMMMMH#MMNNNMNNQQmo..
      .&amp;amp;XYC+JzI!..+zwwzzwwI                           dMMMMNN#NMMMMMMMMMMHMMMNMMMMNMNNNMMN#NM#H#NMNme+.
     jXC:+1wZ!`.?+OOz++1dHc                         .JdMMMMMN#NNMMNNMMN##NMMMMMNNMMN##NN#NNMMNNNMNNMMNc
   `JXI+jwZC!..+1z+!^^?+dMk.                     ..uQgMMMNHMNNNNMNNMNNNNMMNMMMMMMMHNNNNM##NNNNHMMNMHMMK.`
    JXyzXC++?+=?+.^^?+zlOWMZ.                ..JgHNMNMMMNMMM###N##MMNNNN###MM#NNMNNNNNMMMMHMMNMNN##NMMHI.
    `dHkwz+ztl=?++++zz1?+jW0.               .zXMNMMNNNMMMNNNMN#NNMN#NMNNNN#MN#HHNM#NMMNMMMMMH#NNNNNNMM0!+.
     `XHWkwwO+:;;?==zz;+zzyI`               `jMN#MNNNNNNNN#NN#HHHHHHMNNNNNMMMMmMMNMMMM#N#NMN##H#NNN#MNk+1z.
      &amp;nbsp;?WkHkOz+++++++;+zwdWC                .JM######NNMMMNNNNM#HH#NNN##NM@MMHqHM#HMM@HMNNHNMM@HNMNHHNMNHmx?+
        dHbWZZXOOz+:;?+zwwC!                .dMNMMNMMMNMMNNMMMMNN#H#NNMMHMHHWXWHHMMMMMMH#MNMNMMNNNN##NNN##NI!`
         dpyXwXXOwzz+++1w$!                .?dMMNMNNNMNNNNNNNNMNN#####MMgMWVOOOVUWKXWHMMNNMM#MMMMMMNMHMMNNN$`
         zHWuuZwzlttz?;+zZ+                 +WMMMNMMMMNMN##NNNMNNMNMMMMMHHIl=?+;+zWWwXWWMMMHMMHHWHMMMHHH#NN$.
          ZWXZZZXOttI+:;1O:                 jXMMMMN#HH#NMHMMNMMMM#H@@mHHWXZl????;+!!????UUVOz=zlrXHHN####NMR.
          &amp;nbsp;?Xyuuuzrl=;;+=z!                &amp;nbsp;?jWNNNMM#MNMMMMMMNMMM#MHH@gmHXvO=?=?;;+:`^^`+++;??=ltXWM#######HI
          ..dyyXuvrlzz?=lv                  .?WNMMMMMNNMM##NNM##NNNNNMMHHWXO=?????+:^^^:.;;;??=OvXWMNNNNN#MK:
          `XbWXuXv1zOOOwOl                  `?dMMMNNNNNNMMNMMMHM##MMNMMHXXVv???=??++::;:?;;???ztrXWMNN####NC`
          .dpSztOz+!++zOI!                   .dMMMMNMN##MMHMWHMMMMMMNMMHHSl====?++;;::^.:;;;??=lrXHMN###N##:`
         .dWHWXOz;;+++zwI                     jHMMNNN#NNMMNHM96!?OWMMHMkXZz=lzzzzzz&amp;amp;+?+;++???=zwqHMMNNHHNMD+
         .dHHbWZz;;+1OwI!                     `1XMNNMMMMNMNNNx++J+.vHMHH0z==ztrrvZwXWHHHkOzzzwWUWMNMM#MMNMk.
        &amp;nbsp;?WH@HH0z?;??zZl                      `jWNNHMNMMNNNMMNm+?+?zXgH0I???+1OXwOzzwkvzVI++dWHWHH#MMNNMMM0`
        .dMHMHWXOzzlzzI!                       jHNNMMNMM##NMMMMNs,.jXHH0l=?+;^`?OWWUUC11??+`zUVwWMMNMMMNNNl
        JXMMHSuuzrttrw0!                       `WMNMN#MMHHNMMMHMMkZ1XfWkll=+;+.^:.:!``+;;;+^+wuXMNMMNMMNMH:
       .dMMHWXvzvtrrwXk+.                      &amp;nbsp;?WMNN#MMMHH###HMMMS1dWWWw==????;;;::^.+?;?;:?zXHMNMMNNMMM6!
      .dH@HHWuzzzvrvzXHkOtOz+...                 `vMMNNNNN#M@HHHMSIzzWkWOl=??;;?;;;;;??=??+!?1XMNMMMMMMBC`
     .dMH@HHWXvrtttrvXkHZl==????+..               &amp;nbsp;?TMMMMN#NMMMMHZzz?OWkwOz??;;;??;;;++=z+++?;!?7????!`^`
     .dMMHHWXztlllltwXqRI1+?;;??;1=z+.               +??7WH9!jXWWZ???+wWkwzz?????++zz+1zwwwAdI.
    .dMMHqkfWXvrtllrwWHk=?;;???;???lOw&amp;amp;.                  `.z0rwzO=?;;+vWHkwwzz?=zZ0VOOwwwwXU:
   .dMMMqHWXuzvOlttwXWHS??;?;????+zOtwXI`                  `1=zOrI??;;??zWHkXuOzzlz??zOOwzXS!
   JdMMHkpfZuuzwtttwXpH0?;;?;???zlllwZl`                    `+1ll=??;;;??zZWWkkXwOl==lzzOXuI
 ..dHHHHpVyZuzzrrrruyWW0???????==ztOZl`                      `+????;;;;;??==ZWHHkkAz++++lOWI
 .jWMMHpVyyZuzrrrrrzZWfk?????=lllwzwv`                        `++?;;?;;;??;?zOwXWHHHkmAwXU=
 .dMMMqWZZZZuuvrtttwZWHkl=====ztwuZv`.                         `+:;;;;??;????===trwU=!
`.dMMHHWZuuuzrrrrttzZWbkOOl=ltrzXZC!`                           ``::;;??????=lttrwZ!
`?WHMHfyyZuvrtttrtrzuXbHXXOltrwXW0:``                            ``?;;;;???zztttOv
`JWHHHyyyZXrrvrtlttvvwWHWXrrrwXWC!`                                 `++;++1zOIz?!
 dMMHWVyyuuzvrttlltrvXWkHkuXwdHD!`                                   `
.dMMHpfVyuuzzrrttrrvuZVkkfWZXW6!`
 zMMHpfVyuuzzvrrrrzuuXWkHppWK0:`
 jMMHppyZuuuzzzvvvzuZyWmgHWHS+`
 JMMHbfyZzuuuuzuuuZZZWHgmHH9z`
 dMMHqWyZuuuzzzzuZyVWWmg@H0v`
`jMM@mkfVyZZuuZZyyVpbkH@H0!`
 JW@HkbpfVyyyyVyyVVpqH@M$`
 +WgmqpVyZZZZVfpfpbbHHMD`
 `dMMHbWyVyZZyVfpWWWHM$``
  +UHHWWWZZyyyVffWWH9!
  `jWHHWyXXyXWWWHM9!`
   &amp;nbsp;?vHNNNNNMMM9=!`
     &amp;nbsp;?VHMBY7?!`
&lt;/pre&gt;&lt;/span&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=8P6Uc0Nr"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=u9mL99wg"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=u9mL99wg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=3gCX4YGv"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=bjqWQOfp"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=bjqWQOfp" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=GlcrF5FK"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/-R86E6OE05Y" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Nathan_Fabian</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Great_Cat_Massacre</id>
		<title>The Great Cat Massacre</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/wXz1gSgAprg/Blog:Great_Cat_Massacre" />
				<updated>2006-03-09T21:56:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Excerpts from &lt;a href="http://www.amazon.com/gp/product/0465027008/ref=ed_oe_h/103-4204254-6484632?%5Fencoding=UTF8" class="external text" title="http://www.amazon.com/gp/product/0465027008/ref=ed_oe_h/103-4204254-6484632?%5Fencoding=UTF8" rel="nofollow"&gt;The Great Cat Massacre: and Other Episodes in French Cultural History&lt;/a&gt;  by &lt;a href="http://www.princeton.edu/~history/DarntonCV.htm" class="external text" title="http://www.princeton.edu/~history/DarntonCV.htm" rel="nofollow"&gt;Robert Darnton&lt;/a&gt;:
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; Crowds made bonfires… threw objects into them… [a] favorite object was cats—cats tied up in bags, cats suspended from ropes, or cats burned at the stake. Parisians liked to incinerate cats by the sackful, while the Courimauds (cour à miaud, or cat chasers) of Saint Chamond preferred to chase a flaming cat throughout the streets. In parts of Burgundy and Lorraine they danced around a kind of burning May pole with a cat tied to it. In the Metz region they burned a dozen cats at a time in a basket on top of a bonfire. The ceremony took place with great pomp in Metz itself, until it was abolished in 1765. The town dignitaries arrived in procession at the Place du Grand-Saulcy, lit the pyre, and a ring of riflemen from the garrison fired off volleys while the cats disappeared screaming in the flames.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=HjDilVZl"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=aEjeTXUm"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=aEjeTXUm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=siJxAm0v"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=83wJuJEV"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=83wJuJEV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=amMKZRO2"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/wXz1gSgAprg" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Great_Cat_Massacre</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Motiv_Triad_painting</id>
		<title>Painting and assembling a bike</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/7Cs4RQ2qaEo/Blog:Motiv_Triad_painting" />
				<updated>2006-03-07T20:40:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I recently finished painting and assembling a bicycle for my &lt;a href="http://www.sultanik.com/Nadya_Belov" title="Nadya Belov"&gt;lady friend&lt;/a&gt;. Painting the frame was one of those projects that I’m happy I did once, but for which I’m not sure I’d expend the effort ever again. (Click on the thumbnails for larger pictures.) Here is a “before” picture, which will hopefully motivate the necessity of re-painting:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:MotivTriadBefore.jpg" class="image" title="before painting"&gt;&lt;img alt="before painting" src="http://www.sultanik.com/images/thumb/a/af/MotivTriadBefore.jpg/300px-MotivTriadBefore.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;First I tried chemically stripping the paint using an aircraft stripper:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:MotivTriadStripping.jpg" class="image" title="chemical stripping"&gt;&lt;img alt="chemical stripping" src="http://www.sultanik.com/images/thumb/e/ed/MotivTriadStripping.jpg/300px-MotivTriadStripping.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Unfortunately, the stripper was more successful in dissolving my latex gloves than in removing the paint. I had to finish the job with a sander:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:MotivTriadSanding.jpg" class="image" title="sanding"&gt;&lt;img alt="sanding" src="http://www.sultanik.com/images/thumb/d/d0/MotivTriadSanding.jpg/300px-MotivTriadSanding.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I later got a “real” face mask. Here’s a picture after the stripping:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:MotivTriadStripped.jpg" class="image" title="fully stripped"&gt;&lt;img alt="fully stripped" src="http://www.sultanik.com/images/thumb/f/f6/MotivTriadStripped.jpg/300px-MotivTriadStripped.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;After primer and the first coat of paint:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:MotivTriadFirstCoat.jpg" class="image" title="first coat of paint"&gt;&lt;img alt="first coat of paint" src="http://www.sultanik.com/images/thumb/9/95/MotivTriadFirstCoat.jpg/300px-MotivTriadFirstCoat.jpg" width="300" height="400" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Masking and detailing the lugs:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:MotivTriadDetailing.jpg" class="image" title="detailing the lugs"&gt;&lt;img alt="detailing the lugs" src="http://www.sultanik.com/images/thumb/b/b2/MotivTriadDetailing.jpg/300px-MotivTriadDetailing.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Finished frame, after clear coat:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:MotivTriadPainted.jpg" class="image" title="finished frame"&gt;&lt;img alt="finished frame" src="http://www.sultanik.com/images/thumb/a/a2/MotivTriadPainted.jpg/300px-MotivTriadPainted.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And, finally, the fully-assembled bike:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:MotivTriadAssembled.jpg" class="image" title="assembled bike"&gt;&lt;img alt="assembled bike" src="http://www.sultanik.com/images/thumb/e/e1/MotivTriadAssembled.jpg/300px-MotivTriadAssembled.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;We still need to wrap the bars and adjust the seat and stem height.
Here are my thoughts:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; This project took three times as much time as I had originally anticipated, particularly because I had to wait a day or two before the paint had dried enough to mask out the lugs (even though the Rustoleum paint I used said it was handleable within an hour).
&lt;/li&gt;&lt;li&gt; Properly masking the lugs was a PAIN.
&lt;/li&gt;&lt;li&gt; The bike looks good from far and far from good. With that said, both my lady friend and I are very happy with the way it turned out, given the fact that it was a do-it-yourself job.
&lt;/li&gt;&lt;li&gt; A heated garage is a must when doing this in the winter.
&lt;/li&gt;&lt;li&gt; The aircraft stripper from PepBoys didn’t work as well as many people had claimed. I ended up having to make extensive use of an electric sander.
&lt;/li&gt;&lt;li&gt; Properly sanding and priming the frame is very important.
&lt;/li&gt;&lt;li&gt; Wait as long as possible between coats.
&lt;/li&gt;&lt;li&gt; It’s easier to apply multiple thin coats than to try and undo the effects of few thick coats.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=AUhQos0n"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=0sVRGmOq"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=0sVRGmOq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=OMJO5HZP"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=alZChOfy"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=alZChOfy" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=GBw17F45"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/7Cs4RQ2qaEo" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Motiv_Triad_painting</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Beaujolais</id>
		<title>'Tis the end of the season!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/1oObExDDimc/Blog:Beaujolais" />
				<updated>2006-01-03T12:43:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:BeaujolaisInSchwinn.jpg" class="image" title="BeaujolaisInSchwinn.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/6/6f/BeaujolaisInSchwinn.jpg/600px-BeaujolaisInSchwinn.jpg" width="600" height="450" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=fnPEkZiH"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=4jTh7Y7F"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=4jTh7Y7F" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=lZUlOgHH"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=n9vNHAup"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=n9vNHAup" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=7sjNlUQk"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/1oObExDDimc" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Beaujolais</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Starbucks</id>
		<title>Starbucks vs. the World</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/FRwleXm3iAI/Blog:Starbucks" />
				<updated>2005-09-21T21:48:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Earlier today, I got a cup of coffee from &lt;a href="http://restaurants.sultanik.com/lacolombe" class="external text" title="http://restaurants.sultanik.com/lacolombe" rel="nofollow"&gt;La Colombe Torrefaction&lt;/a&gt; (the best coffee brewers/roasters in the world, in my opinion). From there, I planned on heading to Rittenhouse Square to do some work. Immediately upon leaving La Colombe, a Starbucks representative handed me a free $5 gift card:
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Image:StarbucksGiftCard.jpg" class="image" title="Free $5 Starbucks gift card."&gt;&lt;img alt="Free $5 Starbucks gift card." src="http://www.sultanik.com/images/d/d1/StarbucksGiftCard.jpg" width="480" height="640" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;I thought that was pretty funny. I’ll probably use it to get some tea. Years ago, I tried Starbucks back when they were only out of Seattle. I liked it then. Now they over-roast the beans… until they burn. I’ve heard that one reason they do this is to artificially increase the caffeine content. Anyway, I can’t stand Starbucks coffee anymore, and I’d much rather support a local coffee house.
&lt;/p&gt;&lt;p&gt;On the way back to my bike, which I had parked in front of La Colombe, I was handed a second free $5 gift card. That made my day.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=dbBWwKGU"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=6cAR2dvo"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=6cAR2dvo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=a7VFCecY"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=PMzBCJDt"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=PMzBCJDt" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=S6WKJ19N"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/FRwleXm3iAI" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Starbucks</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Modern_Mathematician</id>
		<title>Modern </title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/06LAHfV9PQY/Blog:Modern_Mathematician" />
				<updated>2005-08-06T17:10:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;To be sung to the tune of Gilbert and Sullivan’s Modern Major General:
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt;&lt;p&gt;I am the very model of a genius mathematical,&lt;br /&gt;
&lt;p&gt;For I can do mechanics, both dynamical and statical,&lt;br /&gt;
Or integrate a function round a contour in the complex plane,&lt;br /&gt;
Yes, even if it goes off to infinity and back again;&lt;br /&gt;
Oh, I know when a detailed proof’s required and when a guess’ll do&lt;br /&gt;
I know about the functions of Laguerre and those of Bessel too,&lt;br /&gt;
I’ve finished every tripos question back to 1948;&lt;br /&gt;
There ain’t a function you can name that I can’t differentiate!&lt;br /&gt;
&lt;/p&gt;
There ain’t a function you can name that he can’t differentiate [Tris]&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;I’ve read the text books and I can extremely quickly tell you where&lt;br /&gt;
To look to find Green’s Theorem or the Principal of d’Alembert&lt;br /&gt;
Or I can work out Bayes’ rule when the loss is not Quadratical&lt;br /&gt;
In short I am the model of a genius mathematical!&lt;br /&gt;
For he can work out Bayes’ rule when the loss is not Quadratical&lt;br /&gt;
In short he is the model of a genius mathematical!&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Oh, I can tell in seconds if a graph is Hamiltonian,&lt;br /&gt;
And I can tell you if a proof of 4CC’s a phoney ‘un&lt;br /&gt;
I read up all the journals and I’m ready with the latest news,&lt;br /&gt;
And very good advice about the Part II lectures you should choose.&lt;br /&gt;
Oh, I can do numerical analysis without a pause,&lt;br /&gt;
Or comment on the far-reaching significance of Newton’s laws&lt;br /&gt;
I know when polynomials are soluble by radicals,&lt;br /&gt;
And I can reel off simple groups, especially sporadicals.&lt;br /&gt;
For he can reel off simple groups, especially sporadicals [Tris]&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Oh, I like relativity and know about fast moving clocks&lt;br /&gt;
And I know what you have to do to get round Russel’s paradox&lt;br /&gt;
In short, I think you’ll find concerning all things problematical&lt;br /&gt;
I am the very model of a genius mathematical!&lt;br /&gt;
In short we think you’ll find concerning all things problematical&lt;br /&gt;
He is the very model of a genius mathematical!&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Oh, I know when a matrix will be diagonalisable&lt;br /&gt;
And I can draw Greek letters so that they are recognizable&lt;br /&gt;
And I can find the inverse of a non-zero quaternion&lt;br /&gt;
I’ve made a model of a rhombicosidodecahedron;&lt;br /&gt;
Oh, I can quote the theorem of the separating hyperplane&lt;br /&gt;
I’ve read MacLane and Birkoff not to mention Birkoff and MacLane&lt;br /&gt;
My understanding of vorticity is not a hazy ‘un&lt;br /&gt;
And I know why you should (and why you shouldn’t) be a Bayesian!&lt;br /&gt;
For he knows why you should (and why you shouldn’t) be a Bayesian! [Tris]&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;I’m not deterred by residues and really I am quite at ease&lt;br /&gt;
When dealing with essential isolated singularities,&lt;br /&gt;
In fact as everyone agrees (and most are quite emphatical)&lt;br /&gt;
I am the very model of a genius mathematical!&lt;br /&gt;
In fact as everyone agrees (and most are quite emphatical)&lt;br /&gt;
He is the very model of a genius mathematical!&lt;/p&gt;
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="3" style="padding-top: 10px"&gt; &lt;p style="font-size:smaller;text-align: right"&gt;&lt;cite style="font-style:normal;"&gt;—From the CUYHA songbook, Cambridge (privately distributed), 1976&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=qMjjy8I1"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=g4YCnkyr"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=g4YCnkyr" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=1G5Si8DT"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=866vtShU"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=866vtShU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=1HdllIcS"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/06LAHfV9PQY" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Modern_Mathematician</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Koans_in_CVS</id>
		<title>Koans in CVS</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/Q5zh9w81L0A/Blog:Koans_in_CVS" />
				<updated>2005-08-05T16:18:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I maintain a personal &lt;a href="http://en.wikipedia.org/wiki/CVS" class="external text" title="http://en.wikipedia.org/wiki/CVS" rel="nofollow"&gt;CVS repository&lt;/a&gt; in which I store basically everything that is important to me. This not only includes school work; I store programs I write in my free time (&lt;i&gt;e.g.&lt;/i&gt; &lt;a href="http://www.sultanik.com/BasicPlay" title="BasicPlay"&gt;BasicPlay&lt;/a&gt;), musical compositions, and even Internet correspondence. Today, I accidentally stumbled upon one such correspondence with my friend &lt;a href="http://formunknown.deviantart.com/" class="external text" title="http://formunknown.deviantart.com/" rel="nofollow"&gt;Tom&lt;/a&gt; dating from 3 years ago (&lt;i&gt;i.e.&lt;/i&gt; 2002):
&lt;/p&gt;
&lt;table&gt;

&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:32:09) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; I am an explosive bolt going off in ur skull plate forcing ur grey matter to eject into the sea. Was I a mistake or was it deliberate? No man will ever know except the man on the inside.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #DDDDFF"&gt;
&lt;td&gt; (11:35:48) &lt;b&gt;Me:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; I am the bag man of bangladesh pushing your rickshaw spice merchant mousepads through the time rift. Do you sell indemnity?
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:38:50) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; I will attempt to derail your parcel carrier and co-opt your canker sore for intangible benefits.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:40:56) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; Work Together...&lt;br /&gt;Deliver the Best...&lt;br /&gt;Worldwide...
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:41:33) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; My spock unit is clogged
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #DDDDFF"&gt;
&lt;td&gt; (11:42:12) &lt;b&gt;Me:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; Corporate vignettes and photo spreads caress my nimble palette as i taste the coiled fruits of cologne
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:43:56) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; Slick black rubber crafts wicker dummies for dupont's thrift store vatican. God is in the vacuole.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:46:10) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; Slick disk popup ads bowdlerize my chieftain
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:46:54) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; wallace and grommet can sentence diagram that
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #DDDDFF"&gt;
&lt;td&gt; (11:46:54) &lt;b&gt;Me:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; Even absolute zero isn't cold enough to thaw my plastic slide rule. the numbers add and multiply, but they have yet to spawn intelligent mannerisms. etiquette isn't a replacement for nature.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:47:53) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; Fury blows to my head create space for rent, but no man can paint that which is red.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:50:29) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; peter jackson is not that good
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #DDDDFF"&gt;
&lt;td&gt; (11:50:29) &lt;b&gt;Me:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; taught leather lines the mast of intolerance, forcing huddled masses to gnaw on their paper shackles. headphones will lead them to enlightenment.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:51:47) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; Looking for a page count its bulk knowledge but you can't storm the castle without a key. I guard the branches from aphids. I am the egg men.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:53:09) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; I am pretty sure that if you write cryptic like people think ur smart
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="background: #FFDDDD"&gt;
&lt;td&gt; (11:53:17) &lt;b&gt;Tom:&lt;/b&gt; &lt;/td&gt;&lt;td&gt; and try to read into it
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=WvA3fzNJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=LWYRVBMw"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=LWYRVBMw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=DxiJbbzy"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=uexs22N8"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=uexs22N8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=XfkTEnPq"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/Q5zh9w81L0A" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Koans_in_CVS</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:AAMAS_2005</id>
		<title>AAMAS 2005</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/x_aMKlL_2-0/Blog:AAMAS_2005" />
				<updated>2005-07-27T01:25:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I’m still not up to the blog-update-frequency at which I’d be content, however, this is partially due to my attending another conference. I am currently in &lt;a href="http://www.utrecht.nl/" class="external text" title="http://www.utrecht.nl/" rel="nofollow"&gt;Utrecht&lt;/a&gt; in the Netherlands for &lt;a href="http://www.aamas2005.nl/" class="external text" title="http://www.aamas2005.nl/" rel="nofollow"&gt;AAMAS&lt;/a&gt;. It’s very rainy here, and pretty chilly, but I am having a great time. I’ll post some pictures in the coming days, but, in the mean time, here are some interesting quotes that were uttered during a &lt;a href="http://mabs05.di.fc.ul.pt/" class="external text" title="http://mabs05.di.fc.ul.pt/" rel="nofollow"&gt;simulation workshop&lt;/a&gt; I attended the day before yesterday (most of which can be attributed to &lt;a href="http://cfpm.org/~scott/" class="external text" title="http://cfpm.org/~scott/" rel="nofollow"&gt;Moss&lt;/a&gt; and &lt;a href="http://www.istc.cnr.it/createhtml.php?nbr=62" class="external text" title="http://www.istc.cnr.it/createhtml.php?nbr=62" rel="nofollow"&gt;Castelfranchi&lt;/a&gt;):
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; For 10 years, the agents community has struggled to do something useful.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; Formalism gives precision.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; Game theory is a failed paradigm.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; Verification does not imply Validation.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; You can have prediction without a description of process. In social science, we know the process but cannot predict.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; Parameterizing competition is not legitimate.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; In agent-based simulation, formulation does not require quantification.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; Measurement Dysfunction!
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;And my favorite…
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; The ‘Real World’ is a special case within the set of all possible worlds.
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=FjPfLhM7"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=VVJn1Y8W"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=VVJn1Y8W" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=xNVDGc8l"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=l9dlkf7W"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=l9dlkf7W" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=por8pUrZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/x_aMKlL_2-0" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:AAMAS_2005</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:AAAI_05</id>
		<title>AAAI 2005</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/HD_q5pdmiIE/Blog:AAAI_05" />
				<updated>2005-07-08T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;div id="map3" style="width: 600px; height: 400px; direction: ltr; "&gt;&lt;noscript&gt;&lt;img height="400" width="512" src="http://maps.google.com/staticmap?center=42.423457,-39.023437&amp;amp;zoom=3&amp;amp;size=512x400&amp;amp;key=ABQIAAAA0BTQRqeBjzMconnWyeqDnxS7ctQboOQe0kxDOT3ONEZTRcxexhT-jMThfounwsmF_ja0xtbtSgVQRg&amp;amp;markers=" /&gt;&lt;/noscript&gt;&lt;div id="map3_fallback" style="display: none;"&gt;&lt;img height="400" width="512" src="http://maps.google.com/staticmap?center=42.423457,-39.023437&amp;amp;zoom=3&amp;amp;size=512x400&amp;amp;key=ABQIAAAA0BTQRqeBjzMconnWyeqDnxS7ctQboOQe0kxDOT3ONEZTRcxexhT-jMThfounwsmF_ja0xtbtSgVQRg&amp;amp;markers=" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
      function makeMap3() {       if (!GBrowserIsCompatible()) {           document.getElementById("map3_fallback").style.display = '';           return;       }       var map = new GMap2(document.getElementById("map3"), { 'mapTypes': [G_NORMAL_MAP, G_HYBRID_MAP, G_PHYSICAL_MAP, G_SATELLITE_MAP] });       GME_DEFAULT_ICON = G_DEFAULT_ICON;       map.setCenter(new GLatLng(42.423457, -39.023437), 3, G_HYBRID_MAP);       GEvent.addListener(map, 'click', function(overlay, point) {           if (overlay) {             if (overlay.tabs) {               overlay.openInfoWindowTabsHtml(overlay.tabs);             } else if (overlay.title_link || overlay.caption || overlay.maxContent) {                 overlay.openInfoWindowHtml('&lt;div class="gmapinfowindow"&gt;'+                     (overlay.title?('&lt;b&gt;'+overlay.title_link+'&lt;/b&gt;&lt;br /&gt;'):'')+overlay.caption+'&lt;/div&gt;',                      { 'maxTitle': overlay.maxContent?overlay.title:undefined, 'maxContent': overlay.maxContent });                 if (overlay.maxContent) {                     map.getInfoWindow().enableMaximize();                 } else {                     map.getInfoWindow().disableMaximize();                 }             }            }       }); map.addControl(new GHierarchicalMapTypeControl());  map.addControl(new GOverviewMapControl());  map.addControl(new GLargeMapControl());   map.addOverlay(new GPolyline( [ new GLatLng(41.149968, -8.610243), new GLatLng(37.032158, -7.912903), new GLatLng(37.104479, -8.677826), new GLatLng(38.01564, -7.862091), new GLatLng(38.569643, -7.914276), new GLatLng(38.72409, -9.140625), new GLatLng(39.872858, -75.249481), new GLatLng(40.430224, -80.001068), new GLatLng(39.861263, -75.253601), new GLatLng(52.090898, 5.118942) ], '#758BC5', 6, 0.69803921568627, {'clickable': false}));  GME_DEFAULT_ICON = G_DEFAULT_ICON;} addLoadEvent(makeMap3);
//]]&gt;
&lt;/script&gt;

&lt;p&gt;I haven’t updated my blog in forever. This is mostly due to a ridiculous schedule at school, and a lot of travel. I just got back from a whirlwind trip to Portugal, and I am currently in Pittsburgh attending the &lt;a href="http://www.aaai.org/Conferences/National/2005/aaai05.html" class="external text" title="http://www.aaai.org/Conferences/National/2005/aaai05.html" rel="nofollow"&gt;Twentieth National Conference on Artificial Intelligence (AAAI)&lt;/a&gt;. In a couple weeks I will be at another conference in Utrecht, in the Netherlands. I don’t have enough time now to give a full update, but, in the mean time, you can read the continuously-updated &lt;a href="http://aaai05blog.blogspot.com/" class="external text" title="http://aaai05blog.blogspot.com/" rel="nofollow"&gt;AAAI Blog&lt;/a&gt; and &lt;a href="http://www.flickr.com/photos/aaai-05/" class="external text" title="http://www.flickr.com/photos/aaai-05/" rel="nofollow"&gt;photos&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=lSnyl1Xs"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=VuOtJPhD"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=VuOtJPhD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=9ZsEVSBx"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=oXq6Bj0h"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=oXq6Bj0h" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=BiJgyxpV"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/HD_q5pdmiIE" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:AAAI_05</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Bill_tabulation</id>
		<title>Bill tabulation, 70s style</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/x82GZmTllNg/Blog:Bill_tabulation" />
				<updated>2004-12-30T01:06:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Image:PunchKard.jpg" class="image" title="Image:PunchKard.jpg"&gt;&lt;img alt="Image:PunchKard.jpg" src="http://www.sultanik.com/images/2/2c/PunchKard.jpg" width="600" height="274" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;This is my Winter solstice gift from Joshua Shaffer. Not only can I now format my binary data in ALGOL, I can do it in COBOL and FORTRAN, too!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=A3L8nPA2"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=uktJnhTs"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=uktJnhTs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=HmYsvNZO"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=tkSjYNry"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=tkSjYNry" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=KTeTsITv"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/x82GZmTllNg" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Bill_tabulation</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Bike_lane</id>
		<title>You know it's bad when...</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/IylYLYZYrzo/Blog:Bike_lane" />
				<updated>2004-12-16T21:04:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;…you’re walking down a busy, urban street, something clicks in your brain and you suddenly ask yourself, “Why have I been walking down the bike lane?”
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=JyY7vr0P"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=IgZPkt7p"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=IgZPkt7p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=23f5OJ8C"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=RiXv3ttJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=RiXv3ttJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=S4xgwg2Z"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/IylYLYZYrzo" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Bike_lane</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:MATES</id>
		<title>The Macro Agent Transport Event-based Simulator</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/KKvRoIATgQA/Blog:MATES" />
				<updated>2004-12-03T03:40:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I’ve started a &lt;a href="http://www.sourceforge.net/" class="external text" title="http://www.sourceforge.net/" rel="nofollow"&gt;SourceForge&lt;/a&gt; project for the Macro Agent Transport Event-Based Simulator (&lt;a href="http://www.sultanik.com/MATES" class="mw-redirect" title="MATES"&gt;MATES&lt;/a&gt;), a simulator I developed in conjunction with my research. It’s still in development, but is currently usable. Check it out, &lt;a href="http://mates.sourceforge.net/" class="external text" title="http://mates.sourceforge.net/" rel="nofollow"&gt;here&lt;/a&gt;. There currently aren’t any releases, but you can download and compile the latest version directly from CVS. If you try it out, please let me know what you think!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=c8lxtvIe"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=gJ4UEcNC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=gJ4UEcNC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=3WdfQRtm"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=kYDqWyvS"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=kYDqWyvS" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=UlfUhbYj"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/KKvRoIATgQA" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:MATES</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Esperanto</id>
		<title>Esperanto</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/LEbDNzJnvt4/Blog:Esperanto" />
				<updated>2004-11-24T06:15:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;So, I’ve taken up learning &lt;a href="http://en.wikipedia.org/wiki/Esperanto" class="external text" title="http://en.wikipedia.org/wiki/Esperanto" rel="nofollow"&gt;Esperanto&lt;/a&gt;. Maybe it was the 4 years of Latin I studied at the old &lt;a href="http://www.germantownacademy.org/" class="external text" title="http://www.germantownacademy.org/" rel="nofollow"&gt;alma mater&lt;/a&gt;, or perhaps it is just Esperanto’s simple construction and declension, but I seem to be picking it up very easily. Watching old episodes of &lt;a href="http://en.wikipedia.org/wiki/Red_Dwarf" class="external text" title="http://en.wikipedia.org/wiki/Red_Dwarf" rel="nofollow"&gt;Red Dwarf&lt;/a&gt; is now even more fun, as I can now spot many of the Esperanto-isms throughout the show. My ultimate goal is to one day be able to watch &lt;a href="http://imdb.com/title/tt0059311/" class="external text" title="http://imdb.com/title/tt0059311/" rel="nofollow"&gt;this movie&lt;/a&gt; in its native tongue (note which actor has the leading role). For those of you interested in the language, an invaluable resource is &lt;a href="http://www.lernu.net/" class="external text" title="http://www.lernu.net/" rel="nofollow"&gt;Lernu&lt;/a&gt;. Ĝis!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=WFoET2uO"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=UyKmSpVs"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=UyKmSpVs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=F8Hpnpv3"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=m9bsd5qy"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=m9bsd5qy" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=gN8gNkWB"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/LEbDNzJnvt4" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Esperanto</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Painter</id>
		<title>I should have been a painter...</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/zJuuGwXrEaM/Blog:Painter" />
				<updated>2004-11-23T05:21:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;td align="right"&gt; &lt;i&gt;&lt;b&gt;Random Guy:&lt;/b&gt;&lt;/i&gt; &lt;/td&gt;&lt;td&gt; What are you studying?
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt; &lt;i&gt;&lt;b&gt;Me:&lt;/b&gt;&lt;/i&gt; &lt;/td&gt;&lt;td&gt; Mathematics and Computer Science.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt; &lt;i&gt;&lt;b&gt;Random Guy:&lt;/b&gt;&lt;/i&gt; &lt;/td&gt;&lt;td&gt; Oh! How many programming languages have you learned?
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt; &lt;i&gt;&lt;b&gt;Me:&lt;/b&gt;&lt;/i&gt; &lt;/td&gt;&lt;td&gt; That’s like asking an artist, “How many brushes do you own?” That, without even inquiring if he/she is a painter!
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=iePP87Zm"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=lqBhRvRE"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=lqBhRvRE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Jzar3IIR"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=sjinOQb3"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=sjinOQb3" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=oSn7VPMT"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/zJuuGwXrEaM" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Painter</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Eugen_Weber</id>
		<title>Eugen Weber's accent</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/fNhTPucaoho/Blog:Eugen_Weber" />
				<updated>2004-10-25T19:30:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sscnet.ucla.edu/history/weber/" class="external text" title="http://www.sscnet.ucla.edu/history/weber/" rel="nofollow"&gt;Eugen Weber&lt;/a&gt;, well known for his &lt;a href="http://www.pbs.org/" class="external text" title="http://www.pbs.org/" rel="nofollow"&gt;PBS&lt;/a&gt; series &lt;a href="http://www.pbs.org/als/west_trad/wtrddescrip.htm" class="external text" title="http://www.pbs.org/als/west_trad/wtrddescrip.htm" rel="nofollow"&gt;The Western Tradition&lt;/a&gt;, has a very unique accent. Over the past ~5 years or so I have been listening to his lectures and following his work, on and off. For that entire time I have always wondered the origin of his accent. I finally found it, &lt;a href="http://www.robertfulford.com/EugenWeber.html" class="external text" title="http://www.robertfulford.com/EugenWeber.html" rel="nofollow"&gt;here&lt;/a&gt;. Apparently, Eugen was born a Romanian and later learned British English, resulting in a beautiful accent (almost as beautiful, IMHO, as Austrian German + British English).  Does anyone have a link to his curriculum vitæ?
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=vHZRpvEy"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=7hhIWY3i"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=7hhIWY3i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=CxiEZUWK"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=SWOAU511"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=SWOAU511" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=HA3uwmeW"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/fNhTPucaoho" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Eugen_Weber</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Schwinn</id>
		<title>Finally finished my Schwinn!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/kxYLNqGGQmc/Blog:Schwinn" />
				<updated>2004-10-15T06:50:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;A couple months ago I found a Schwinn Sprint in the trash. The story on how I found it is available &lt;a href="http://www.bikeforums.net/showthread.php?t=64094" class="external text" title="http://www.bikeforums.net/showthread.php?t=64094" rel="nofollow"&gt;here&lt;/a&gt;. Since then, I have stripped it of all its unnecessary parts and converted it to a fixed gear. I now use it as a rain/beater bike when I don’t want to use my IRO Mark V. Here’s a “before” picture:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:SchwinnBefore.jpg" class="image" title="The Schwinn, before."&gt;&lt;img alt="The Schwinn, before." src="http://www.sultanik.com/images/thumb/5/58/SchwinnBefore.jpg/500px-SchwinnBefore.jpg" width="500" height="375" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;and here’s an “after” picture:
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:SchwinnAfter.jpg" class="image" title="The Schwinn, after."&gt;&lt;img alt="The Schwinn, after." src="http://www.sultanik.com/images/thumb/c/c4/SchwinnAfter.jpg/500px-SchwinnAfter.jpg" width="500" height="375" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You can click on each of the pictures to see higher resolution versions, in addition to other pictures. Today I was riding the Schwinn, since it was raining all day. This morning I was in the middle of a skid when, abruptly, the right toe strap broke! This caused my foot to fly off the pedal, something that is pretty bad on a fixed gear bike, not to mention during a skid. Luckily I had some room to slow down and come to a stop. Here’s a picture of the broken strap:
&lt;/p&gt;
&lt;div class="floatleft"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:BrokenStrap.jpg" class="image" title="The broken strap."&gt;&lt;img alt="The broken strap." src="http://www.sultanik.com/images/thumb/7/79/BrokenStrap.jpg/300px-BrokenStrap.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="floatright"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:BrokenStrapClose.jpg" class="image" title="Closeup of the broken strap."&gt;&lt;img alt="Closeup of the broken strap." src="http://www.sultanik.com/images/thumb/8/8b/BrokenStrapClose.jpg/300px-BrokenStrapClose.jpg" width="300" height="225" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=aQULswhQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=AcVYubEM"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=AcVYubEM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=iGbNnTUZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=E68kFOGp"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=E68kFOGp" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=CIt4BaTQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/kxYLNqGGQmc" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Schwinn</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Euro_shoes</id>
		<title>European shoes</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/6jn13siwzuI/Blog:Euro_shoes" />
				<updated>2004-10-10T02:50:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Europeans walk much more than Americans; that’s a fact (although I have no statistics to prove it). Thus, it makes sense that European shoes would be much more comfortable than U.S. Brands.  I’ve therefore vowed never to buy another American-made shoe, and I urge you to do the same (*by "American-made" I really mean "produced by an US company," because most of such shoes actually aren't even manufactured in the US). Once you’ve felt the comfort of brands like &lt;a href="http://www.camper.com/" class="external text" title="http://www.camper.com/" rel="nofollow"&gt;Camper&lt;/a&gt;, you’ll never go back. Check out my current collection of shoes &lt;a href="http://pictures.sultanik.com/shoes" class="external text" title="http://pictures.sultanik.com/shoes" rel="nofollow"&gt;here&lt;/a&gt;.&lt;span style="border: thin dotted red; background-color: pink; padding: 2pt"&gt;&lt;b&gt;&lt;a href="http://www.sultanik.com/Category:Articles_with_ToDo_items" title="Category:Articles with ToDo items"&gt;ToDo&lt;/a&gt;:&lt;/b&gt; Fix the link to the pictures, once they're uploaded.&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;&lt;i&gt;Update in 2007:&lt;/i&gt; It appears that, over the past year or so, Camper has started outsourcing the majority of their manufacturing from Europe to China and quality has suffered.  Other of my favorites like Ecco seem to be doing the same.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=mO1ooepD"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=7p7Sd4HF"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=7p7Sd4HF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=wvnTwlM0"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=8oefmga0"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=8oefmga0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=bF4ns5Tu"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/6jn13siwzuI" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Euro_shoes</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Block_the_box</id>
		<title>Don't Block the Box!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/vAT_VchiSqs/Blog:Block_the_box" />
				<updated>2004-10-10T02:50:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="floatnone"&gt;&lt;span&gt;&lt;a href="http://www.sultanik.com/Image:DontBlockTheBox.jpg" class="image" title="Don&amp;#39;t Block the Box!"&gt;&lt;img alt="Don&amp;#39;t Block the Box!" src="http://www.sultanik.com/images/thumb/8/8e/DontBlockTheBox.jpg/600px-DontBlockTheBox.jpg" width="600" height="450" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=y6sjzr4b"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=pIKK0Kk9"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=pIKK0Kk9" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=CV6HQN6H"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=mEiX3WjE"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=mEiX3WjE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=09UErVMV"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/vAT_VchiSqs" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Block_the_box</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:BasicPlay</id>
		<title>BasicPlay</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/A3cM333R_ls/Blog:BasicPlay" />
				<updated>2004-09-26T20:38:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Remember programming in &lt;a href="http://en.wikipedia.org/wiki/BASIC" class="external text" title="http://en.wikipedia.org/wiki/BASIC" rel="nofollow"&gt;BASIC&lt;/a&gt;? Remember the “PLAY” statement? If you’re anything like me you’ve got some old songs written that you haven’t listened to for a while. I was feeling nostalgic a couple months ago and wanted to listen to some of my songs. I didn’t have a computer running Windows available to run my BASIC programs (in QBASIC/PDS), and I couldn’t trivially find a good BASIC interpreter for Linux that supported the PLAY statement. Therefore… I wrote my own PLAY statement interpreter, called BasicPlay! Source code is available (licensed under the GPL) &lt;a href="http://www.sultanik.com/BasicPlay" title="BasicPlay"&gt;here&lt;/a&gt;. BasicPlay supports conversion of the PLAY statement to &lt;a href="http://www.newtonlabs.com/ic/" class="external text" title="http://www.newtonlabs.com/ic/" rel="nofollow"&gt;Interactive C&lt;/a&gt; code (for upload to a device such as a &lt;a href="http://www.handyboard.com/" class="external text" title="http://www.handyboard.com/" rel="nofollow"&gt;Handyboard&lt;/a&gt;). BasicPlay can also render PLAY statements to WAVE sound files. Let me know what you think!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=28cdjnN3"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=4QRoSoFI"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=4QRoSoFI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=gXb4mpca"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=m39TT2hl"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=m39TT2hl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=N51LUYCz"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/A3cM333R_ls" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:BasicPlay</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:OQO_Caterham</id>
		<title>Women need fast roadsters and small computers!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/obWve9CxUak/Blog:OQO_Caterham" />
				<updated>2004-09-01T02:04:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Image:CaterhamOQO.jpg" class="image" title="Image:CaterhamOQO.jpg"&gt;&lt;img alt="Image:CaterhamOQO.jpg" src="http://www.sultanik.com/images/4/4d/CaterhamOQO.jpg" width="516" height="260" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;Can anyone tell me why the businesswoman in the &lt;a href="http://www.transmeta.com/" class="external text" title="http://www.transmeta.com/" rel="nofollow"&gt;Transmeta&lt;/a&gt;/&lt;a href="http://www.oqo.com/" class="external text" title="http://www.oqo.com/" rel="nofollow"&gt;OQO&lt;/a&gt; promotional photo (pictured above) is driving a &lt;a href="http://www.lotus7club.co.uk/" class="external text" title="http://www.lotus7club.co.uk/" rel="nofollow"&gt;Lotus/Caterham 7&lt;/a&gt;?
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Image:Caterham_7_Roadsport_SV.jpg" class="image" title="Caterham 7 Roadsport SV.jpg"&gt;&lt;img alt="" src="http://www.sultanik.com/images/thumb/7/7b/Caterham_7_Roadsport_SV.jpg/600px-Caterham_7_Roadsport_SV.jpg" width="600" height="450" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=fgjQvTWs"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=E13xqdg5"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=E13xqdg5" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=FVN6ZpcJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=4D506WFk"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=4D506WFk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=l6Mnbmdm"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/obWve9CxUak" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:OQO_Caterham</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:AAAI_2004</id>
		<title>AAAI 2004</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/QyTKhpfFXqU/Blog:AAAI_2004" />
				<updated>2004-08-30T23:46:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;div id="map2" style="width: 300px; height: 200px; direction: ltr; "&gt;&lt;noscript&gt;&lt;img height="200" width="300" src="http://maps.google.com/staticmap?center=37.328161,-121.889877&amp;amp;zoom=15&amp;amp;size=300x200&amp;amp;key=ABQIAAAA0BTQRqeBjzMconnWyeqDnxS7ctQboOQe0kxDOT3ONEZTRcxexhT-jMThfounwsmF_ja0xtbtSgVQRg&amp;amp;markers=37.327895,-121.890014,red%7C" /&gt;&lt;/noscript&gt;&lt;div id="map2_fallback" style="display: none;"&gt;&lt;img height="200" width="300" src="http://maps.google.com/staticmap?center=37.328161,-121.889877&amp;amp;zoom=15&amp;amp;size=300x200&amp;amp;key=ABQIAAAA0BTQRqeBjzMconnWyeqDnxS7ctQboOQe0kxDOT3ONEZTRcxexhT-jMThfounwsmF_ja0xtbtSgVQRg&amp;amp;markers=37.327895,-121.890014,red%7C" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
      function makeMap2() {       if (!GBrowserIsCompatible()) {           document.getElementById("map2_fallback").style.display = '';           return;       }       var map = new GMap2(document.getElementById("map2"), { 'mapTypes': [G_NORMAL_MAP, G_HYBRID_MAP, G_PHYSICAL_MAP, G_SATELLITE_MAP] });       GME_DEFAULT_ICON = G_DEFAULT_ICON;       map.setCenter(new GLatLng(37.328161, -121.889877), 15, G_HYBRID_MAP);       GEvent.addListener(map, 'click', function(overlay, point) {           if (overlay) {             if (overlay.tabs) {               overlay.openInfoWindowTabsHtml(overlay.tabs);             } else if (overlay.title_link || overlay.caption || overlay.maxContent) {                 overlay.openInfoWindowHtml('&lt;div class="gmapinfowindow"&gt;'+                     (overlay.title?('&lt;b&gt;'+overlay.title_link+'&lt;/b&gt;&lt;br /&gt;'):'')+overlay.caption+'&lt;/div&gt;',                      { 'maxTitle': overlay.maxContent?overlay.title:undefined, 'maxContent': overlay.maxContent });                 if (overlay.maxContent) {                     map.getInfoWindow().enableMaximize();                 } else {                     map.getInfoWindow().disableMaximize();                 }             }            }       }); map.addControl(new GHierarchicalMapTypeControl());  map.addControl(new GSmallMapControl());  marker = new GMarker(new GLatLng(37.327895, -121.890014), {  'icon': GME_DEFAULT_ICON,  'clickable': true }); marker.caption = ''; marker.caption += '&lt;!-- CUSTOM_FEEDS page_title=\"Main_Page\" --&gt;&lt;p&gt;San Jose Convention Center&lt;br /&gt; &lt;/p&gt;'; map.addOverlay(marker); GME_DEFAULT_ICON = G_DEFAULT_ICON;} addLoadEvent(makeMap2);
//]]&gt;
&lt;/script&gt;

&lt;p&gt;As &lt;a href="http://www.sultanik.com/Andrew_Mroczkowski" title="Andrew Mroczkowski"&gt;Merz&lt;/a&gt; &lt;a href="http://www.takecover.net/blog/archives/000145.html" class="external text" title="http://www.takecover.net/blog/archives/000145.html" rel="nofollow"&gt;said&lt;/a&gt;, we recently attended the &lt;a href="http://www.aaai.org/Conferences/National/2004/aaai04.html" class="external text" title="http://www.aaai.org/Conferences/National/2004/aaai04.html" rel="nofollow"&gt;Nineteenth National Conference on Artificial Intelligence&lt;/a&gt; in San Jose California. I just finished uploading the final set of my pictures, which can be found &lt;a href="http://pictures.sultanik.com/v/conferences/aaai04/" class="external text" title="http://pictures.sultanik.com/v/conferences/aaai04/" rel="nofollow"&gt;here&lt;/a&gt;. There you will even find pictures from inside Google Labs (we “snuck in”).
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=PbjMoKyR"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=OSe12YJC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=OSe12YJC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=1L3v7wPH"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=jEGJlb82"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=jEGJlb82" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=bKoZ7Nc3"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/QyTKhpfFXqU" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:AAAI_2004</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Spammers</id>
		<title>Spammers are getting smart!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/2hRM3nmWmkE/Blog:Spammers" />
				<updated>2004-08-23T22:05:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I received my first &lt;a href="http://www.captcha.net/" class="external text" title="http://www.captcha.net/" rel="nofollow"&gt;CAPTCHA&lt;/a&gt; spam today! It was basically a blank e-mail with an attached JPEG image. The image was altered such that it could not be read by any current optical text recognition (OCR) software. By stochastically altering the modifications to the image for each piece of spam that is sent, no two pieces of spam will look alike. Furthermore, the content is still human-readable, but, as mentioned above, is not yet discernible by any spam filtering software. The content of the image read as follows:
&lt;/p&gt;
&lt;pre&gt;Профессиональные E-mail рассылки!
Тел: (095) 968-76-23
Более 4-x лет на рыенке рекламы!&lt;/pre&gt;
&lt;p&gt;Basically, they are advertising a professional E-mail distribution service that’s been around for more than 4 years! I find it mildly amusing that they are advertising a phone number rather than an e-mail address or website.
&lt;/p&gt;&lt;p&gt;Note: they misspelled “рыенке;” it should really be “рынке.”
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=VAAVbsHh"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=uYebfgah"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=uYebfgah" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=KruvkDiP"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=pZIvqAJW"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=pZIvqAJW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=pjmHp2AM"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/2hRM3nmWmkE" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Spammers</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Kids_Show</id>
		<title>Kids Show</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/lB4IG_4p8ds/Blog:Kids_Show" />
				<updated>2004-08-17T16:34:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;This is old news, but it is so incredibly amazing you must see it. Apparently, the pilot for the TV show “Kids Show” was sold to MTV for a six-episode contract.  You can download the pilot &lt;a href="http://waxy.org/archive/2003/10/30/kids_sho.shtml#001594" class="external text" title="http://waxy.org/archive/2003/10/30/kids_sho.shtml#001594" rel="nofollow"&gt;here&lt;/a&gt;.  Be aware that parts of this show are very graphic (it will probably have a “TV-MA” rating if the censors ever let it on the air).
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=kw9mlYKC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Myq0kJxK"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=Myq0kJxK" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=5WpGJRCb"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=FjHTxziO"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=FjHTxziO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=olxbjehB"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/lB4IG_4p8ds" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Kids_Show</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:WMaker</id>
		<title>Efficient window management with WindowMaker</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/hj-zK4xt0Hk/Blog:WMaker" />
				<updated>2004-08-17T05:57:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;It’s been a while since I decided to write/update a tutorial, so I figured I’d do so (even though I have absolutely no free time this term and I really should be doing something more school/work related).  Therefore, I wrote a tutorial on “Efficient Window Management with WindowMaker”; basically an extension to my previous rant on the subject of graphical user interfaces and window managers. The tutorial is available &lt;a href="http://www.sultanik.com/index.php?title=Efficient_window_management_with_WindowMaker&amp;amp;action=edit&amp;amp;redlink=1" class="new" title="Efficient window management with WindowMaker (not yet written)"&gt;here&lt;/a&gt;; let me know what you think.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=oE3lzSmY"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=6vQrgkwJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=6vQrgkwJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=C2UM8ruC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=nVhgOwK9"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=nVhgOwK9" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=K2FMQnkk"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/hj-zK4xt0Hk" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:WMaker</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Bikes_and_bums</id>
		<title>Bikes and bums</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/r6bJi4TV-yI/Blog:Bikes_and_bums" />
				<updated>2004-08-10T05:49:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sultanik.com/Andrew_Mroczkowski" title="Andrew Mroczkowski"&gt;Merz&lt;/a&gt; and I went on &lt;a href="http://www.takecover.net/blog/archives/000148.html" class="external text" title="http://www.takecover.net/blog/archives/000148.html" rel="nofollow"&gt;another&lt;/a&gt; midnight bike picture ride today. Even though I have a 09:30 class tomorrow, it was worth it because it is such a beautiful night.
&lt;/p&gt;&lt;p&gt;There’s something about bikes, both motorized and pedal, that gives me the sensation and fulfillment of wanderlust. A bike seems to give one the ability to go wherever he or she wants, unrestricted by roads, faster than one could do so on foot. I haven’t felt the way I do riding at night in Philadelphia since riding a 150cc Honda through the streets of Florence and the Tuscan countryside. Before that, I did not feel this way since riding my bike at night in sub-rural Pennsylvania as a child. I love the feeling of weaving through cars and going places that I know no other vehicle could navigate. I love sprinting through the streets at night, covering ten times the area of the city I would be able to on foot in the same amount of time. I love riding.
&lt;/p&gt;&lt;p&gt;Okay, back to the story. Merz wanted to stop by a &lt;a href="http://www.wawa.com/" class="external text" title="http://www.wawa.com/" rel="nofollow"&gt;Wawa&lt;/a&gt; to make a few purchases.  I stood post outside watching the bikes.  When Merz returned, a bum approached and started a conversation. Now, the number one rule when being confronted by a bum is to keep on walking, as it is very socially awkward to abort a conversation when stationary.  We were standing at that time, as we had yet to mount our &lt;strike&gt;stallions&lt;/strike&gt; bikes.  Seeing no exit, I started talking to him, as it is can often be fun to do so.  I had absolutely no money on me, however.  Therefore, after a lengthy conversation regarding his hatred of republicans, his belief that we were afraid of him due to his being black, his insistence on having seen Merz at the Rotunda, and his being HIV+, he inevitably asked me for some change, to which I truthfully replied that I had none.  Merz and I therefore leave you with the following question: is it ethical to have a conversation with a bum, thus raising his/her hopes, only to refuse him/her money?
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=mbQqXOYs"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=XtqAwmgB"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=XtqAwmgB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=4tsyDFz6"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=JEEDw6BJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=JEEDw6BJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=0V5IzgnA"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/r6bJi4TV-yI" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Bikes_and_bums</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Canine_Atkins</id>
		<title>Canine Atkins</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/lrCnnPdyX6U/Blog:Canine_Atkins" />
				<updated>2004-08-08T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Dogs can now cut carbs, too! &lt;a href="http://www.pedigree.com/Pedigree/USA/Products/Dry/PEDIGREE+WEIGHT+LOSS+FORMULA/PEDIGREE+WEIGHT+LOSS+FORMULA+Dry.htm?FILTER=overweight" class="external text" title="http://www.pedigree.com/Pedigree/USA/Products/Dry/PEDIGREE+WEIGHT+LOSS+FORMULA/PEDIGREE+WEIGHT+LOSS+FORMULA+Dry.htm?FILTER=overweight" rel="nofollow"&gt;Check it out&lt;/a&gt;!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=gZcDLerz"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=huoKEPeH"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=huoKEPeH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=D6fU9lMq"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=QwJRUs3p"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=QwJRUs3p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Lizz6dQN"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/lrCnnPdyX6U" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Canine_Atkins</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:National_television_debut</id>
		<title>National television debut</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/fCvGo4sDuYc/Blog:National_television_debut" />
				<updated>2004-08-02T23:55:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I made my national television debut on August 1st 2004 at 22:30 EST.  My parents finished building their dream house a year or so ago; they bought a barn up in Allentown and had it moved, re-assembled, and modernized.  They, my sister, and myself were interviewed for House &amp;amp; Garden TV.  Pretty exciting, but it's not exactly the way one dreams of making his or her mass media debut.  On the bright side, the host of the show, Troy Norton, appeared in the movie &lt;i&gt;Hoodwinked!&lt;/i&gt; with Andy Dick, who appeared in &lt;i&gt;Road Trip&lt;/i&gt; with Rachel Blanchard, who appeared in &lt;i&gt;Where the Truth Lies&lt;/i&gt; with Kevin Bacon, giving me a finite &lt;a href="http://en.wikipedia.org/wiki/Bacon_number" class="external text" title="http://en.wikipedia.org/wiki/Bacon_number" rel="nofollow"&gt;Bacon Number&lt;/a&gt; of 4.  This combines with my &lt;a href="http://en.wikipedia.org/wiki/Erdős_number" class="external text" title="http://en.wikipedia.org/wiki/Erdős_number" rel="nofollow"&gt;Erdős Number&lt;/a&gt; of 4 to give me a finite &lt;a href="http://en.wikipedia.org/wiki/Erdős–Bacon_number" class="external text" title="http://en.wikipedia.org/wiki/Erdős–Bacon_number" rel="nofollow"&gt;Erdős–Bacon number&lt;/a&gt; of 8.  Eat your heart out, Carl Sagan, for I am the master of inane metrics!
&lt;/p&gt;&lt;p&gt;Speaking of mass media, I was lucky enough to sit in on a recording of &lt;a href="http://www.whyy.org/freshair/" class="external text" title="http://www.whyy.org/freshair/" rel="nofollow"&gt;Fresh Air&lt;/a&gt; a couple weeks ago.  Did you know they still record it on reel-to-reel?
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=yDUGyJQ8"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=9OYF3zsj"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=9OYF3zsj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=YNhNsVZh"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=RVR1Jvwh"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=RVR1Jvwh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=FP5PQO68"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/fCvGo4sDuYc" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:National_television_debut</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Kompressor_for_President</id>
		<title>KOMPRESSOR KRUSH EXECUTIVE GOVERNMENT BRANCH</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/z0Mon-HVGW0/Blog:Kompressor_for_President" />
				<updated>2004-07-19T02:22:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.kompressormusic.com/" class="external text" title="http://www.kompressormusic.com/" rel="nofollow"&gt;Kompressor&lt;/a&gt;, made popular by his industrial musik beat, is &lt;a href="http://www.kompressorforpresident.com/" class="external text" title="http://www.kompressorforpresident.com/" rel="nofollow"&gt;running for president&lt;/a&gt;.  I guess no one told him that one needs to be born in the USA to be president. Oh well, at least he’d be marginally more entertaining than Dubya.  Kompressor also would promote &lt;a href="http://artists.iuma.com/site-bin/mp3gen/75646/IUMA/Bands/kompressormusic/audio/kompressormusic_-_BRUSH_YOUR_TEETH.mp3" class="external text" title="http://artists.iuma.com/site-bin/mp3gen/75646/IUMA/Bands/kompressormusic/audio/kompressormusic_-_BRUSH_YOUR_TEETH.mp3" rel="nofollow"&gt;dental hygiene&lt;/a&gt;, &lt;a href="http://artists.iuma.com/site-bin/mp3gen/75646/IUMA/Bands/kompressormusic/audio/kompressormusic_-_VITAMINS_ARE_GOOD.mp3" class="external text" title="http://artists.iuma.com/site-bin/mp3gen/75646/IUMA/Bands/kompressormusic/audio/kompressormusic_-_VITAMINS_ARE_GOOD.mp3" rel="nofollow"&gt;vitamin use&lt;/a&gt;, and &lt;a href="http://artists.iuma.com/site-bin/mp3gen/75646/IUMA/Bands/kompressormusic/audio/kompressormusic_-_ADDING_UP_NUMBERS.mp3" class="external text" title="http://artists.iuma.com/site-bin/mp3gen/75646/IUMA/Bands/kompressormusic/audio/kompressormusic_-_ADDING_UP_NUMBERS.mp3" rel="nofollow"&gt;mathematics&lt;/a&gt;. Thanks to my “&lt;a href="http://www.chancellery.us/" class="external text" title="http://www.chancellery.us/" rel="nofollow"&gt;partner in crime&lt;/a&gt;” Joshua Shaffer for pointing this out.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=yPSSfH7x"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=DidFODEv"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=DidFODEv" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=HU9rz9Lz"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=hynld3wr"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=hynld3wr" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=O4eICkq3"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/z0Mon-HVGW0" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Kompressor_for_President</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Commute</id>
		<title>What a Commute!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/ZUFfQUKNvtA/Blog:Commute" />
				<updated>2004-06-16T00:55:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I’ve been postponing updating my blog for a while now, partially because I have been waiting on getting a digital camera so I can post some pictures. I have finally decided on a digital camera, although it has yet to arrive (I’ll post a lot more once it arrives, in a few days).  In the mean time, however, I have to recount my ride home from work today. But first, some background…
&lt;/p&gt;&lt;p&gt;I’ve started commuting from &lt;a href="http://www.historiclandmarks.com/landmarks/philadelphia/universitycity/oldquaker/" class="external text" title="http://www.historiclandmarks.com/landmarks/philadelphia/universitycity/oldquaker/" rel="nofollow"&gt;West Philadelphia&lt;/a&gt; to my job in &lt;a href="http://www.acincenter.org/" class="external text" title="http://www.acincenter.org/" rel="nofollow"&gt;Camden&lt;/a&gt; (~8km each way) on a “&lt;a href="http://www.sheldonbrown.com/fixed.html" class="external text" title="http://www.sheldonbrown.com/fixed.html" rel="nofollow"&gt;Fixed Gear&lt;/a&gt;” bicycle. What does that mean? Basically (if you don't want to follow the link), it means I can’t coast; my pedals move whichever way the rear wheel is moving. Yes, I got a “fixie,” as they are often called, and it is &lt;a href="http://www.fixedgeargallery.com/" class="external text" title="http://www.fixedgeargallery.com/" rel="nofollow"&gt;beautiful&lt;/a&gt;. I’ll post pictures and a more lengthy description of my specific bike once my digital camera comes in (see above).
&lt;/p&gt;&lt;p&gt;Fixies let one do cool things like &lt;a href="http://www.63xc.com/gregg/101_12.htm" class="external text" title="http://www.63xc.com/gregg/101_12.htm" rel="nofollow"&gt;track stands&lt;/a&gt;. Also, since one is able to backpedal, brakes aren’t required since one can simply resist pedaling to slow down. I’d recommend using a break, though, unless you are crazy like &lt;a href="http://www.livejournal.com/users/crucialxedge/" class="external text" title="http://www.livejournal.com/users/crucialxedge/" rel="nofollow"&gt;Klint&lt;/a&gt; and want your collar bone broken… again. If I don’t hit any exceedingly long red lights on the way, I can get the entire way from West Philly to Camden without putting a foot down and without using my brake.
&lt;/p&gt;&lt;p&gt;Okay, back to the story. So I am riding home from Camden, and I just got off the Ben Franklin bridge. I had waited until 17:30 to leave work, because the weather forecasts predicted rain between 16:00 and 17:00. Boy, were they wrong. It hadn’t rained yet, and I wanted to leave because the bridge closes at 19:00 (and sometimes, randomly, earlier). I started riding up Spring Garden, when it started to drizzle. It was very clear that the storm was over North Philly, so I decided to play it safe and head back down to arch street where the sky looked less gray. While waiting at a red light, a man driving a blinged-out, huge Ford F-150 (possibly Harley Davidson Edition), blaring rap music over a system while talking on his cell phone, yells to me, “Hey! Is that a fixed gear?” This was very surprising to me, because he was about as far from the stereotypical fixed gear (posenger (bike messenger poser)) rider possible. I said yes, and asked if he did too. He informed me that fixies look awesome, but he currently rides a Canondale road bike that he had &lt;a href="http://bicycletherapy.com/" class="external text" title="http://bicycletherapy.com/" rel="nofollow"&gt;Bicycle Therapy&lt;/a&gt; build for him. Very weird conversation.
&lt;/p&gt;&lt;p&gt;By the time I got to the Ben Franklin Parkway, the skies opened and it instantly started pouring. It was one of the worst downpours I have ever experienced (at least while on a two wheeled vehicle). This was my first time in the rain on a fixie, and it was amazing; I felt so connected to the ground, even as my rear tire skidded/hydroplaned all over the place. It really gave me a lot more control. I found some government building off of vine street that had an overhang, and sat there for the next ~30 minutes while I waited for the deluge to pass.
&lt;/p&gt;&lt;p&gt;As I was sitting, out of the rain, I observed a van drive up next to a park across the street, open its trunk, and some people take some bags out of it. They brought the bags to a nearby bench, and a large group of people gathered. Apparently this was to be some sort of picnic, because they started handing out hot dogs and such. This went on for a good 20 minutes or so, as they all got thoroughly soaked. I still haven’t figured out what this picnic was for, because they all seemed to be of different races, some of different nationalities, and none of them seemed to know but one or two of the others. Finally, as the rain started to die down, they all realized that they too could come and sit in dryitude, where I was. And they did. By that point, the “hosts” wanted to get rid of the rest of the food, so they started pushing hot dogs to everyone there. A bunch of people just took handfulls of dogs and stuffed them in their pockets, for what I assume would be a later meal. One man had a plastic bag that he filled with no less than 10 hot dogs. Another man, standing next to the dog-hogger, turned and said the following:
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; I know you ain’t gonna eat all those! What you do’n?! You be so greedy! You just be’n greedy do’n dat!
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;Only in America…
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=nGpoRukH"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Z9tJbP0C"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=Z9tJbP0C" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=dnT6El1A"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=9wMFF0bJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=9wMFF0bJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=A8sT1Mf6"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/ZUFfQUKNvtA" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Commute</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Zip4Tweens</id>
		<title />
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/96DPkD2ukPQ/Blog:Zip4Tweens" />
				<updated>2004-05-13T02:40:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;For those of you who used to live at &lt;a href="http://www.cool-2b-real.com/" class="external text" title="http://www.cool-2b-real.com/" rel="nofollow"&gt;cool-2b-real&lt;/a&gt;, you probably know that it has moved to &lt;a href="http://www.zip4tweens.com/" class="external free" title="http://www.zip4tweens.com/" rel="nofollow"&gt;http://www.zip4tweens.com/&lt;/a&gt;.  Not to be outdone by the &lt;a href="http://www.beef.org/" class="external text" title="http://www.beef.org/" rel="nofollow"&gt;National Cattlemen’s Beef Association&lt;/a&gt;, however, &lt;a href="http://www.porkboard.org/" class="external text" title="http://www.porkboard.org/" rel="nofollow"&gt;the other white meat&lt;/a&gt; has made its own bid at infecting the minds of our nation’s youth: &lt;a href="http://www.pork4kids.com/" class="external text" title="http://www.pork4kids.com/" rel="nofollow"&gt;Pork4Kids&lt;/a&gt;! Thanks to my ex-co-worker, cohort, and West-coast representative Donovan Artz for pointing this out.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=YMlxdiEC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=GZAvyvly"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=GZAvyvly" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=QTAqgvhg"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=dXkjmBVm"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=dXkjmBVm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=6qJbFKes"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/96DPkD2ukPQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Zip4Tweens</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Kitchen_Stories</id>
		<title>I never thought one could sleep with a movie...</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/6yOD3v1SHYk/Blog:Kitchen_Stories" />
				<updated>2004-05-01T05:25:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;…until today. This evening started off with another great meal at &lt;a href="http://restaurants.sultanik.com/fork" class="external text" title="http://restaurants.sultanik.com/fork" rel="nofollow"&gt;Fork&lt;/a&gt;.  Afterward, we retired to a viewing of &lt;a href="http://www.imdb.com/title/tt0323872/" class="external text" title="http://www.imdb.com/title/tt0323872/" rel="nofollow"&gt;Salmer Fra Kjøkkenet&lt;/a&gt; at the &lt;a href="http://www.ritzfilmbill.com" class="external text" title="http://www.ritzfilmbill.com" rel="nofollow"&gt;Ritz&lt;/a&gt;. After buying the tickets, the next man in line asked the following question of the ticketer: 
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; Does the movie ‘Kitchen Stories’ only have men in it?
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt; Hilarity ensued (at least in my mind).
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=fqayg560"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=H2QlHGex"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=H2QlHGex" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=idp7VWLu"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=8QgPo9l7"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=8QgPo9l7" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=jxcideYJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/6yOD3v1SHYk" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Kitchen_Stories</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Pet_peeve</id>
		<title>Pet peeve</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/dhHhrzNGUNI/Blog:Pet_peeve" />
				<updated>2004-04-24T17:42:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.riedelcrystal.com/" class="external text" title="http://www.riedelcrystal.com/" rel="nofollow"&gt;Stemware&lt;/a&gt; have stems for a &lt;a href="http://www.winespectator.com/Wine/Wine_Basics/Wine_Basics_Template/0,1199,26,00.html" class="external text" title="http://www.winespectator.com/Wine/Wine_Basics/Wine_Basics_Template/0,1199,26,00.html" rel="nofollow"&gt;reason&lt;/a&gt;; keep that in mind.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=ERIxKwMX"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=8sthXELV"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=8sthXELV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=7FA2bNRl"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=XVhtxk7C"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=XVhtxk7C" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=K6cN0icC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/dhHhrzNGUNI" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Pet_peeve</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Yuengling</id>
		<title>Best $14 Yuengling Ever!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/174aUy2Ttxo/Blog:Yuengling" />
				<updated>2004-04-18T05:30:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I usually don’t like recounting my day here, as that seems more LiveJournal than blog, however, I’ll make an exception for this evening.  The evening started off with a great meal at &lt;a href="http://restaurants.sultanik.com/cubalibre" class="external text" title="http://restaurants.sultanik.com/cubalibre" rel="nofollow"&gt;Cuba Libre&lt;/a&gt;, then a movie (&lt;a href="http://www.imdb.com/title/tt0329388/" class="external text" title="http://www.imdb.com/title/tt0329388/" rel="nofollow"&gt;Monsieur Ibrahim et les fleurs du Coran&lt;/a&gt;) at the &lt;a href="http://www.ritzfilmbill.com/" class="external text" title="http://www.ritzfilmbill.com/" rel="nofollow"&gt;Ritz&lt;/a&gt;, and then some drinks. Rewind back to Cuba Libre. The only reservation they had was at 18:00, so the restaurant was fairly empty; we got a seat right on the outside terrace (it was a beautiful evening today). A lady walking by stopped in her tracks and asked my girlfriend if what she was eating was salmon. Then she asked me if my main dish was a steak. Then she asked how much they cost, “$15?” She then noticed a menu sitting on the edge of our table, and proceed to snatch it. I had to inform her that what she was about to steal was actually the wine list, and not the food menu. I told her that the food menu was posted outside the door, and she promptly left.
&lt;/p&gt;&lt;p&gt;This reminded me of an experience I had last fall in Paris. We were eating at an excellent gem of a restaurant located right next to Notre Dame. One would think that such a place would be a tourist trap, but this was not; excellent French haute cuisine. Their house special is the beef bourguignon, which was excellent. In Paris, as most of Europe, it is perfectly acceptable to sit down at any open table outside for lunch, and then be served; no reservations or seating necessary. Therefore, we simply sat down at an open table outside. Two tables down from us was an elderly Parisian woman who was enjoying her meal. It is also perfectly acceptable to place one’s accessories on an empty adjacent table, as long as one removes them when the table is needed by another couple. Therefore, like the elderly Parisian lady, we set our bags on the table in between. While starting our appetizer (we ordered a full three-course lunch, as is expected at a nice Parisian restaurant), an elderly American couple walked by. The husband stopped in his tracks when he smelled the Parisian lady’s beef bourguinon. He immediately asked her what it was, to which she was startled and flabbergasted. She simply shook her head and pointed at the menu posted on the wall behind her. The American man simply exclaimed, “That smells really good,” and walked off! Ten minutes later, the couple returned and tried entering the restaurant. They were promptly shuffled out of the inside, as they neither had a reservation nor were dressed properly. The hostess suggested that the couple find a table outside and sit down. They exclaimed that there were no free tables, because they did not realize that the table in between us and the Parisian lady was free (with all of our bags on it). At that point, the Parisian lady was enjoying a cigarette with her coffee. The American couple then asked if there was a non-smoking section. They promptly left, and the hostess apologized to the Parisian lady for the Americans’ rudeness. 15 minutes later, after the Parisian lady had left, the American couple returned, sitting at another open table at the other end of the restaurant. First, the husband asked for butter with his bread. He was given an entire block of butter, which must have been stolen from the chef. The man then ordered a coke to wash it down, followed by his coveted beef bourguignon. Throughout the whole meal he had a map of the city unfolded on the table in front of him. It’s no wonder everyone hates the U.S.!
&lt;/p&gt;&lt;p&gt;Okay, so back to the original story: this evening/night. After the bar, we met up with my friend and &lt;a href="http://www.chancellery.us" class="external text" title="http://www.chancellery.us" rel="nofollow"&gt;partner in crime&lt;/a&gt;, Tom. First, we went to the bar at &lt;a href="http://restaurants.sultanik.com/buddakan" class="external text" title="http://restaurants.sultanik.com/buddakan" rel="nofollow"&gt;Buddakan&lt;/a&gt;. While walking out of Buddakan, Mayor Street was standing outside, talking to a couple guys, and I almost walked into him.  Odd. After that, we decided to find a new bar that we’d never been to before. Leave it to Tom to bring us to some Brazillian place. $10 cover, and $4 a beer.
&lt;/p&gt;&lt;p&gt;This reminded me of a bar I went to in Acapulco. One night, we decided to try and get into the famous club “Baby O”. It was a Wednesday, and we had coupons to get in free. We got to the front of the line, and the bouncer didn’t let us in. Unfortunately, &lt;a href="http://www.sultanik.com/Andrew_Mroczkowski" title="Andrew Mroczkowski"&gt;Merz&lt;/a&gt;'s acumen for Spanish negotiation failed him, and all the bouncer said was, “No! No chicas!” Apparently, one’s party needs to be at least 50% female to get in.  That night we were randomly with a New Zealander and some guy that looked exactly like Allen Alda. The New Zealander randomly knew of a salsa bar in the area, so we decided to go. $100 peso ($10 U.S.) cover, and $4 drinks. The old, ugly, rotund and thoroughly married Mexican women were free, but not priceless.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=QniJWo0W"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=jmdWCvEA"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=jmdWCvEA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=mPvVmgZV"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Ham2NBOY"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=Ham2NBOY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=MxVsCkBp"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/174aUy2Ttxo" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Yuengling</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:PowerPoint</id>
		<title>Why not to use PowerPoint</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/whhxSHXPiqc/Blog:PowerPoint" />
				<updated>2004-04-09T21:20:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.norvig.com/" class="external text" title="http://www.norvig.com/" rel="nofollow"&gt;Peter Norvig&lt;/a&gt; (of “&lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0131038052/ref=ase_kalsey-20/104-8243345-2776741?v=glance&amp;amp;s=books" class="external text" title="http://www.amazon.com/exec/obidos/tg/detail/-/0131038052/ref=ase_kalsey-20/104-8243345-2776741?v=glance&amp;amp;s=books" rel="nofollow"&gt;Russel &amp;amp; …&lt;/a&gt;” fame) gives an example of &lt;a href="http://plan.cs.drexel.edu/~joe/other/latex/presentations.html" class="external text" title="http://plan.cs.drexel.edu/~joe/other/latex/presentations.html" rel="nofollow"&gt;why not to use PowerPoint&lt;/a&gt;. Albeit not Norvig’s point, I say this is yet another reason why everyone should switch to &lt;a href="http://plan.cs.drexel.edu/~joe/other/latex/presentations.html" class="external text" title="http://plan.cs.drexel.edu/~joe/other/latex/presentations.html" rel="nofollow"&gt;FoilTeX&lt;/a&gt;. Thanks to &lt;a href="http://www.anthonytrumbo.com/" class="external text" title="http://www.anthonytrumbo.com/" rel="nofollow"&gt;Anthony Trumbo&lt;/a&gt; for the link.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=eNyBJqak"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=KXXKi2z6"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=KXXKi2z6" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Bs9p1Cd4"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=wDpuIUOM"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=wDpuIUOM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=EKbgNZPc"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/whhxSHXPiqc" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:PowerPoint</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:PDAs</id>
		<title>PDAs and the Decline of PalmOS</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/yUInmhbcmTs/Blog:PDAs" />
				<updated>2004-03-31T17:52:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Back in the day I had a &lt;a href="http://www.the-gadgeteer.com/visor.html" class="external text" title="http://www.the-gadgeteer.com/visor.html" rel="nofollow"&gt;Handspring Visor&lt;/a&gt;.  It rocked… until… one by one… nearly half of the pixels on the screen stopped working.  By that time the case had also cracked in so many places that it was more quick-dry epoxy than plastic.  I was really hard on it, but that’s also because I used it a lot and carried it with me everywhere I went.  It was also briefly replaced by my “&lt;a href="http://www.sultanik.com/index.php?title=Wearable_Computer&amp;amp;action=edit&amp;amp;redlink=1" class="new" title="Wearable Computer (not yet written)"&gt;hobby&lt;/a&gt;,” but that’s another story. Over the past ~4 years that I have been PDA-less, many things changed, not the least of which is the pervasiveness of the Internet. Now I have wireless 802.11 access at my apartment, school, job, girlfriend’s house, and even my parents’ house.  Now I just can’t justify buying a PDA until it at least has decent 802.11 support.
&lt;/p&gt;&lt;p&gt;Last weekend I paid a visit to my parents, and was greeted by a myriad questions by my mother about her “new palm.” My mom owns and directs a nursery school, and is a member of the local school board association for directors (or something like that). Apparently she enrolled in a course they offer which aims to bring school directors and principals into the internet age. Apparently they also have a large endowment because everyone in the class was given a &lt;a href="http://www.palmone.com/" class="external text" title="http://www.palmone.com/" rel="nofollow"&gt;PalmOne&lt;/a&gt; &lt;a href="http://www.palmone.com/us/products/handhelds/#tungsten-c" class="external text" title="http://www.palmone.com/us/products/handhelds/#tungsten-c" rel="nofollow"&gt;Tungsten C&lt;/a&gt;, complete with 512MB MMC card, for a fee of only $100.  Despite my best efforts, I could not convince her to sell it to me.  The Tungsten C’s internal 802.11 card was pretty slick, and got me interested in getting another PDA.  The next day, while randomly at OfficeMax, I noticed the Sony CLIÉ &lt;a href="http://sonyelectronics.sonystyle.com/micros/clie/models/th55.html" class="external text" title="http://sonyelectronics.sonystyle.com/micros/clie/models/th55.html" rel="nofollow"&gt;PEG-TH55&lt;/a&gt; and was thoroughly impressed: built-in 802.11b, built-in 0.3 megapixel camera, a better form-factor than the Tungsten C, and no &lt;a href="http://www.sultanik.com/mirrors/jargon-4.4.2/html/N/newbie.html" class="external text" title="http://www.sultanik.com/mirrors/jargon-4.4.2/html/N/newbie.html" rel="nofollow"&gt;noobish&lt;/a&gt; keyboard (one thing that annoyed me when using my mom’s Tungsten was that there is no longer a silk screen to input graffiti; instead it is written directly on the screen, rendering clicking on buttons/text boxes an arduous task because the OS will often think you are trying to input a stroke). Even though the PEG-TH55 is available for as much as $70 less online, I bought the CLIÉ right there, fully mindful of OfficeMax’s 14-day return policy for electronics&amp;nbsp;;-)
&lt;/p&gt;&lt;p&gt;My impressions:
Sony sure know how to make sexy hardware; too bad the OS sucks (for my purposes). I am going to return the Sony as soon as possible.  If I were an &lt;a href="http://www.youtube.com/watch?v=hU-fVtY4j4E" class="external text" title="http://www.youtube.com/watch?v=hU-fVtY4j4E" rel="nofollow"&gt;average Windows user&lt;/a&gt;, this would be the hands-down winner, however, I solely use Linux (well, some OS X too) and none of the applications I’ve grown to love will work on PalmOS.  That’s not even my main gripe, though:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt; I can’t seem to find any free (let alone open-source) email clients for PalmOS that support IMAP
&lt;/li&gt;&lt;li&gt; I have to pay for an AIM client?!
&lt;/li&gt;&lt;li&gt; I try to download a PDF from the included web-browser, NetFront (which is very good, by the way), and view it in the included PDF viewer picsel (which has an amazing interface), and I get the error, “Please insert memory stick!” It appears as if I have to buy additional memory to do any sort of file transfer onto the device without HotSyncing.
&lt;/li&gt;&lt;li&gt; I found a couple SSH clients that work great, but there don’t appear to be any SCP clients!
&lt;/li&gt;&lt;li&gt; Multitasking?! I thought I heard that they implemented some rudimentary multitasking capability in PalmOS 5, but it appears not to be the case. What does this mean? If I am SSHed into a computer and need to read something from my address book, the SSH connection will close.
&lt;/li&gt;&lt;li&gt; I hate the “new” graffiti stroke input language, “Graffiti® 2.” I seem to recall reading an article about a patent dispute causing PalmOne to drop the original (and awesome) Graffiti implementation for the new “2.0” version, but I am not sure. Why is it so bad? Not all of the characters can be input with a single stroke. For example, “t”, “i”, “k”, and “x” all require multiple strokes.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The bottom line is that if one is a Windows user that just wants a PDA to do normal PDA/PIM things and also browse google news every once in a while, check his/her Yahoo mail or Hotmail account, and take random pictures while he/she is at it, this is definitely the ultimate PDA currently on the market.
&lt;/p&gt;&lt;p&gt;However, if you are like me and enjoy a hack-factor in your hardware (&lt;i&gt;i.e.&lt;/i&gt; some level of modification and control over the software on it), go with a linux-based device.
&lt;/p&gt;&lt;p&gt;I am borrowing a &lt;a href="http://www.sharpusa.com/zaurus/" class="external text" title="http://www.sharpusa.com/zaurus/" rel="nofollow"&gt;Sharp Zaurus&lt;/a&gt; from my job and will be trying it out over the next few weeks. I’ll probably make another post at that time with my impressions. I already have extensive experience running linux on the &lt;a href="http://familiar.handhelds.org/" class="external text" title="http://familiar.handhelds.org/" rel="nofollow"&gt;HP iPAQ&lt;/a&gt;, and I can already say that the iPAQ running linux is better suited to my needs than any PalmOS-based device.
&lt;/p&gt;&lt;p&gt;Update: I just saw &lt;a href="http://www.pdalive.com/showarticle.php?threadid=5897" class="external text" title="http://www.pdalive.com/showarticle.php?threadid=5897" rel="nofollow"&gt;this news article&lt;/a&gt;! I am very excited! Now I have to find some way to justify the $700 pricetag…
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Wnr6kuCS"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=bBTLhR0D"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=bBTLhR0D" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=2yxinXFo"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=GqJdxkUH"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=GqJdxkUH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=OgYm17gh"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/yUInmhbcmTs" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:PDAs</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Diet_Cherry_Coke</id>
		<title>Diet Cherry Coke</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/YCJ2Sd_aHZQ/Blog:Diet_Cherry_Coke" />
				<updated>2004-03-19T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I recently started switching to Diet Coke (mostly for health reasons).  Sure, it contains &lt;a href="http://www.lightparty.com/Health/DietCokeAspartame.html" class="external text" title="http://www.lightparty.com/Health/DietCokeAspartame.html" rel="nofollow"&gt;aspartame&lt;/a&gt;, but I think that’s the least of my worries as it also contains &lt;a href="http://www.dhmo.org/" class="external text" title="http://www.dhmo.org/" rel="nofollow"&gt;dihydrogen monoxide&lt;/a&gt;.  Today my coworker and &lt;a href="http://www.chancellery.us" class="external text" title="http://www.chancellery.us" rel="nofollow"&gt;partner in crime&lt;/a&gt;  Josh bought a Diet Coke and complained of its peculiar taste.  We all promptly ignored him, as usual. Later that day, however, I purchased a Diet Coke from the same vending machine and it tasted quite odd to me; something like a combination of Diet Coke and Cherry Coke. Very weird. I usually hate to throw out food, but this was a concoction I could not stand. Has anyone else had a similar experience?
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=FZsI3olT"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=RGW6UWXn"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=RGW6UWXn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=TzT5embH"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=DILj3GlT"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=DILj3GlT" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=3VcLPprX"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/YCJ2Sd_aHZQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Diet_Cherry_Coke</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Bite_quarter</id>
		<title>I can bite my quarter in two!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/KbLqanJvsAM/Blog:Bite_quarter" />
				<updated>2004-03-15T22:28:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Earlier today, while playing with the profuse amount of change in my pocket, I felt a rather strangely shaped coin. I pulled it out to see what appeared to be a crescent-shaped sliver of a quarter with two “humps” along the inside edge.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="thumb tnone"&gt;&lt;div class="thumbinner" style="width:302px;"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterHalf.jpg" class="image" title="Sliver of the quarter."&gt;&lt;img alt="Sliver of the quarter." src="http://www.sultanik.com/images/thumb/d/dd/QuarterHalf.jpg/300px-QuarterHalf.jpg" width="300" height="225" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterHalf.jpg" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;Sliver of the quarter.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I then proceeded to remove the rest of the change from my pocket and eventually found the other half of the quarter. Attached to the other half was a small rubber band.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="thumb tnone"&gt;&lt;div class="thumbinner" style="width:302px;"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterPieces.jpg" class="image" title="Pieces of the quarter in my hand."&gt;&lt;img alt="Pieces of the quarter in my hand." src="http://www.sultanik.com/images/thumb/e/e1/QuarterPieces.jpg/300px-QuarterPieces.jpg" width="300" height="225" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterPieces.jpg" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;Pieces of the quarter in my hand.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Upon closer inspection, I realized that the copper ring that is usually circumscribed about the quarter’s rim was missing, leaving a groove around the coin. I then tried putting the pieces together and they fit perfectly.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="thumb tnone"&gt;&lt;div class="thumbinner" style="width:302px;"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterWhole.jpg" class="image" title="Both pieces of the quarter put together."&gt;&lt;img alt="Both pieces of the quarter put together." src="http://www.sultanik.com/images/thumb/5/5b/QuarterWhole.jpg/300px-QuarterWhole.jpg" width="300" height="225" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterWhole.jpg" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;Both pieces of the quarter put together.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Furthermore, the rubber band was exactly the right size to fit in the groove and hold the two pieces together. The cut in the coin was too clean to be accidental, though, so I knew something was up. After a little bit of investigation, it appears as if I have &lt;a href="http://www.magic.org/store/product_info.php?products_id=2436" class="external text" title="http://www.magic.org/store/product_info.php?products_id=2436" rel="nofollow"&gt;this coin&lt;/a&gt;.
&lt;/p&gt;
&lt;div class="center"&gt;&lt;div class="thumb tnone"&gt;&lt;div class="thumbinner" style="width:302px;"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterBent.jpg" class="image" title="The quarter can bend in two!"&gt;&lt;img alt="The quarter can bend in two!" src="http://www.sultanik.com/images/thumb/8/8a/QuarterBent.jpg/300px-QuarterBent.jpg" width="300" height="225" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterBent.jpg" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;The quarter can bend in two!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="center"&gt;&lt;div class="thumb tnone"&gt;&lt;div class="thumbinner" style="width:302px;"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterBite.jpg" class="image" title="Me biting the quarter in two!"&gt;&lt;img alt="Me biting the quarter in two!" src="http://www.sultanik.com/images/thumb/3/3a/QuarterBite.jpg/300px-QuarterBite.jpg" width="300" height="225" border="0" class="thumbimage" /&gt;&lt;/a&gt;  &lt;div class="thumbcaption"&gt;&lt;div class="magnify"&gt;&lt;a href="http://www.sultanik.com/Image:QuarterBite.jpg" class="internal" title="Enlarge"&gt;&lt;img src="http://www.sultanik.com/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;Me biting the quarter in two!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=vIWRGiX4"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=spleEpia"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=spleEpia" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=HZCqyzuJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=TQ0C7Swd"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=TQ0C7Swd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=MKpoavdH"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/KbLqanJvsAM" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Bite_quarter</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Spam</id>
		<title>What is spam nowadays?</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/xU-dxS1iFEY/Blog:Spam" />
				<updated>2004-01-26T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;pre&gt;
From fxcxp0yo@unlimited.net Mon Jan 26 19:07:15 2004
.
.
.
Received: from 198.87.103.153.netdial.caribe.net
+(198.87.103.153.netdial.caribe.net [198.87.103.153])
by XXXX.XXXX.XXXX (8.12.10+Sun/8.12.9) with SMTP id i0R06uAL014379
for &amp;lt;XXXX@XXXX.XXXX&amp;gt;; Mon, 26 Jan 2004 19:07:02 -0500 (EST)
Received: from 116.101.152.116 by 198.87.103.153; Tue, 27 Jan 2004 03:05:40 ++0300
From: “Andrea Theresia” &amp;lt;fxcxp0yo@unlimited.net&amp;gt;
Reply-To: “Andrea Theresia” &amp;lt;fxcxp0yo@unlimited.net&amp;gt;
To: XXXX@XXXX.XXXX
Subject: miracle discovering, plaster that grow small di-ck misnomer abysmally
Date: Tue, 27 Jan 2004 03:59:40 +0400
MIME-Version: 1.0
X-MimeOLE: Produced By Microsoft MimeOLE V4.71.2014.7
Content-Type: multipart/alternative; boundary=”23413837280769382267”
Message-ID: &amp;lt;ygb2lna3veh-ircal7swr-b7kbefxcxp0yo@unlimited.net&amp;gt;
X-Scanned-By: MIMEDefang 2.39

Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

asperges vellum
december detente drugless catabolic cruciate minimally
fastbreak slanderous admiring occurrere nonechoic expect populated disservice predicator
&lt;/pre&gt;
&lt;p&gt;Is this spam?!?! I can’t tell anymore!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=rKjr7MLA"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=SYmcPvan"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=SYmcPvan" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=4zSXGU1n"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=bZQ44Xbn"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=bZQ44Xbn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=kRpL2Wu7"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/xU-dxS1iFEY" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Spam</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Lack_of_time</id>
		<title>My time (or lack thereof)</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/wOmyc7bZA-s/Blog:Lack_of_time" />
				<updated>2004-01-24T20:31:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Most of my friends have been complaining about my lack of availability all too often for the past ~6 months. That’s mostly been due to my ridiculous work schedule; I have had 4 paper deadlines in the last two months, however, now most of the deadlines have passed and I should have a bit more time on my hands. As you probably didn’t notice, in my time procrastinating I learned XHTML/CSS and redesigned my website. Furthermore, as a requirement for one of the papers I wrote, I had to make a webpage outlining the work I’ve been doing. To see to what some of my business has been put toward, check it out &lt;a href="http://gicl.cs.drexel.edu/people/evan/aaai04/" class="external text" title="http://gicl.cs.drexel.edu/people/evan/aaai04/" rel="nofollow"&gt;here&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=D5U9TRtp"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=YVnflXhF"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=YVnflXhF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=UFwtKO4k"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=TmEp0Hyv"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=TmEp0Hyv" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=MHdDtlAX"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/wOmyc7bZA-s" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Lack_of_time</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Sex_and_terrorism</id>
		<title>Sex and terrorism</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/OfyI-sqpDhs/Blog:Sex_and_terrorism" />
				<updated>2004-01-04T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; The terrorist attacks on the United States on September 11, 2001 left their mark on the sex lives of the nation…
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="3" style="padding-top: 10px"&gt; &lt;p style="font-size:smaller;text-align: right"&gt;&lt;cite style="font-style:normal;"&gt;—first sentence of chapter 1, &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0072558350/qid%3D1073265728/sr%3D11-1/ref%3Dsr%5F11%5F1/104-8737073-8248718" class="external text" title="http://www.amazon.com/exec/obidos/ASIN/0072558350/qid%3D1073265728/sr%3D11-1/ref%3Dsr%5F11%5F1/104-8737073-8248718" rel="nofollow"&gt;Sexuality Today: The Human Perspective&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=wc7gqbo3"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=dQWvrldf"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=dQWvrldf" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=G1DcNbvJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=xoY7w51e"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=xoY7w51e" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=jcaKYaNb"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/OfyI-sqpDhs" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Sex_and_terrorism</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:More</id>
		<title>Mark Osborne's ''More''</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/5KGKPmt9ZmA/Blog:More" />
				<updated>2003-12-22T20:43:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;About three years ago I saw a short film entitled &lt;a href="http://www.imdb.com/title/tt0188913/" class="external text" title="http://www.imdb.com/title/tt0188913/" rel="nofollow"&gt;More&lt;/a&gt; on the TV show &lt;a href="http://www.scifi.com/exposure/" class="external text" title="http://www.scifi.com/exposure/" rel="nofollow"&gt;Exposure&lt;/a&gt;.  More is one of the most moving short films I have seen.  About a year ago I went back to the Exposure website and was disappointed to see that their streaming video version of the movie had been taken off. I have since been unable to find hardly any mention of the movie on the Intarweb… until &lt;a href="http://slashdot.org/articles/03/12/22/1320257.shtml?tid=186&amp;amp;tid=188&amp;amp;tid=97" class="external text" title="http://slashdot.org/articles/03/12/22/1320257.shtml?tid=186&amp;amp;tid=188&amp;amp;tid=97" rel="nofollow"&gt;today&lt;/a&gt;. Not only is a higher-resolution &lt;a href="http://www.gethappy.com/watchmore.html" class="external text" title="http://www.gethappy.com/watchmore.html" rel="nofollow"&gt;download&lt;/a&gt; of the movie external available, but a &lt;a href="http://www.happyproduct.com/films.html" class="external text" title="http://www.happyproduct.com/films.html" rel="nofollow"&gt;special-edition DVD&lt;/a&gt; external is in the works for next year!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=RxKy97vs"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=EzFcKzeq"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=EzFcKzeq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=eRy7U0fA"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=nzjdkwXm"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=nzjdkwXm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=dBHDNHlv"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/5KGKPmt9ZmA" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:More</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Beginner</id>
		<title>Number one in Germany</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/7IjifwL9bi0/Blog:Beginner" />
				<updated>2003-12-16T03:31:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;
&lt;table style="margin:auto; border-collapse:collapse; border-style:none; background-color:transparent;" class="cquote"&gt;
&lt;tr&gt;
&lt;td width="20" valign="top" style="color:#B2B7F2;font-size:35px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:left;padding:10px 10px;"&gt; “
&lt;/td&gt;&lt;td valign="top" style="padding:4px 10px;"&gt; Yaw yaw! That eternally too late, which does not leave itself gladly to stresses,&lt;br /&gt;
&lt;p&gt;I do not read much, only Mopo and SMS&lt;br /&gt;
And wrong, I does to me has it eilich,&lt;br /&gt;
Beats, raps, label, I drive mehrgleisig&lt;br /&gt;
The donkey ears full with the sail and the Rhymebooks,&lt;br /&gt;
its texts you to warn are like ’ EN nebula horn&lt;br /&gt;
Are the answer Wisser, also the small Schisser,&lt;br /&gt;
Faeulen people with large joy to the leg the Pisser&lt;br /&gt;
&lt;/p&gt;
&lt;/td&gt;&lt;td width="20" valign="bottom" style="color:#B2B7F2;font-size:36px;font-family:&amp;#39;Times New Roman&amp;#39;,serif;font-weight:bold;text-align:right;padding:10px 10px;"&gt; ”
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="3" style="padding-top: 10px"&gt; &lt;p style="font-size:smaller;text-align: right"&gt;&lt;cite style="font-style:normal;"&gt;—&lt;a href="http://www.magistrix.de/lyrics/Beginner/Wer-Bist-n-Du-6898.html" class="external text" title="http://www.magistrix.de/lyrics/Beginner/Wer-Bist-n-Du-6898.html" rel="nofollow"&gt;Beginner's &lt;i&gt;Wer Bist'n Du???&lt;/i&gt;&lt;/a&gt;
, translated using Babelfish&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;center&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/6b30X3jjVCA"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/6b30X3jjVCA" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;
&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=w1MQ29yZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=5Ejm4OHb"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=5Ejm4OHb" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=bE2tjwb3"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=AmRpAp9Q"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=AmRpAp9Q" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=5VLEdRxp"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/7IjifwL9bi0" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Beginner</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Newfangled_keyboards</id>
		<title>Newfangled keyboards</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/gYMimRHD3pc/Blog:Newfangled_keyboards" />
				<updated>2003-12-15T05:00:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;Have you bought a keyboard recently?  I had an accident with mine involving lots of liquid, therefore I was immediately plunged into the market for one.  All I wanted was a simple, 101-key, PS/2 keyboard.  I also wanted a large backspace key about the same width as the Enter key; some keyboards have a shortened backspace key and increase the height of the backslash key (I hate this).  When I got to CompUSA, to my horror, almost all of the keyboards were USB-only and had no less than three adjectives tacked on their names.  "Microsoft Internet Navigator Multi-Media Wireless Natural Kitchen Sink Keyboard" didn't sound too appealing to me.  Who uses all of those "Email," "SMS," and "Shopping" buttons on top anyway?!  I especially didn't need/want them because I solely run &lt;a href="http://www.gentoo.org/" class="external text" title="http://www.gentoo.org/" rel="nofollow"&gt;Linux&lt;/a&gt; and chances are the use of those buttons requires running the keyboard through USB and having proprietary drivers.  Blah.  I ended up buying the &lt;a href="http://www.logitech.com/index.cfm?page=products/details&amp;amp;CRID=1&amp;amp;CONTENTID=6006&amp;amp;countryid=19&amp;amp;languageid=1" class="external text" title="http://www.logitech.com/index.cfm?page=products/details&amp;amp;CRID=1&amp;amp;CONTENTID=6006&amp;amp;countryid=19&amp;amp;languageid=1" rel="nofollow"&gt;Logitech Internet Navigator keyboard&lt;/a&gt; (it's both PS/2 and USB), and I am actually very happy with it.  But next time I need a new keyboard I might opt for a &lt;a href="http://moon.hanya-n.org/comp/sun/3201235-02.GIF" class="external text" title="http://moon.hanya-n.org/comp/sun/3201235-02.GIF" rel="nofollow"&gt;Sun version&lt;/a&gt; (as an &lt;a href="http://www.gnu.org/software/emacs/emacs.html" class="external text" title="http://www.gnu.org/software/emacs/emacs.html" rel="nofollow"&gt;Emacs&lt;/a&gt; user, I need to click the control key a lot, and having it where the Caps-Lock key is seems more ergonomic), or &lt;a href="http://www.kinesis-ergo.com/" class="external text" title="http://www.kinesis-ergo.com/" rel="nofollow"&gt;one of these&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=KwOb9VDL"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=5iOa3YcO"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=5iOa3YcO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Mju9xRRC"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=1NLCmho9"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=1NLCmho9" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=mDotmENY"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/gYMimRHD3pc" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Newfangled_keyboards</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Gayety</id>
		<title>Gayety</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/3YOgp8O_Xp4/Blog:Gayety" />
				<updated>2003-12-15T00:40:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I was walking into my apartment today with my girlfriend when she noticed a stack of &lt;a href="http://www.epgn.com/" class="external text" title="http://www.epgn.com/" rel="nofollow"&gt;Philadelphia Gay News&lt;/a&gt;] newspapers. I hope they were free (they weren’t addressed to anyone), as we took a copy. On the front page was a story about the ongoing controversy over gays in the &lt;a href="http://www.scouting.org/" class="external text" title="http://www.scouting.org/" rel="nofollow"&gt;Boy Scouts of America&lt;/a&gt;. This was of particular interest to me, not because I am gay (which I’m not (see girlfriend reference above (not that there’s anything wrong with being gay (don’t tell the Boy Scouts of America I said that, lest I be kicked out)))) but because I am an Eagle Scout. Earning that rank was the hardest thing I have accomplished in my life thus far, as anyone who has also earned the rank will definitely attest to. Knowing how hard it was for me to reach the rank of Eagle, it is disgusting for me to think how it would feel for that rank to be taken away from me (as it has been from several openly-gay scouts). Anyway, back to the point. The article explains how my local council, &lt;a href="http://www.colbsa.org/" class="external text" title="http://www.colbsa.org/" rel="nofollow"&gt;Cradle of Liberty&lt;/a&gt;, lost the right to use Philadelphia-owned land because its anti-gay policy is in conflict with the city’s Fair Practice Ordinance. The council, however, wishes to develop a non-discrimination policy to appease the city and regain use of Philadelphia-owned land. However, the Boy Scouts’ national headquarters has threatened that it will overturn the council’s charter if it refuses to discriminate against gays. This is one of the few times at which I am not proud to be called an Eagle Scout.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=FrAC96vS"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=oaQpMbOZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=oaQpMbOZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=5ZS8fqse"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=bD2VQa0n"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=bD2VQa0n" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=tv2otQKD"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/3YOgp8O_Xp4" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Gayety</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:God</id>
		<title>God (or lack thereof)</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/J1QVikyxugQ/Blog:God" />
				<updated>2003-12-10T21:14:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.philosophyquotes.net/cgi-bin/god_game1.cgi?num=0&amp;amp;hits=0&amp;amp;bullets=0&amp;amp;bulletcount=0&amp;amp;hitcount=0" class="external text" title="http://www.philosophyquotes.net/cgi-bin/god_game1.cgi?num=0&amp;amp;hits=0&amp;amp;bullets=0&amp;amp;bulletcount=0&amp;amp;hitcount=0" rel="nofollow"&gt;How rationally conflicted are your beliefs on morality and faith?&lt;/a&gt;  I had zero "hits" (in this case, zero is good… sorta like golf… yeah).
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=3nq4XQAr"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=X99TsLOw"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=X99TsLOw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=uWuU2PCp"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=jNeC8tVS"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=jNeC8tVS" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=BT36Kxas"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/J1QVikyxugQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:God</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Vivaldi</id>
		<title>Vivaldi</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/ADUvvXa9e3A/Blog:Vivaldi" />
				<updated>2003-12-08T21:18:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I really love baroque chamber music, specifically the works of Vivaldi and Bach.  I've been looking for some digital transcription (preferably in MIDI format) of Vivaldi's &lt;i&gt;Concerto in F for 3 Violins&lt;/i&gt;, but it seems that none exist.  If anyone has such or knows of its existence, please contact me.  Also, music and &lt;a href="http://www.tug.org/" class="external text" title="http://www.tug.org/" rel="nofollow"&gt;T&lt;sub&gt;&lt;big&gt;E&lt;/big&gt;&lt;/sub&gt;X&lt;/a&gt; lovers alike should check out the &lt;a href="http://www.gre.ac.uk/~c.walshaw/abc/" class="external text" title="http://www.gre.ac.uk/~c.walshaw/abc/" rel="nofollow"&gt;ABC musical notation package&lt;/a&gt;.  &lt;b&gt;abcm2ps&lt;/b&gt; might also be of interest, as it typesets ABC and outputs a PostScript file.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=R8dOKsUl"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=GPmkbeim"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=GPmkbeim" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=wfuLq72q"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=LMssheBy"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=LMssheBy" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=roDzXpzd"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/ADUvvXa9e3A" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Vivaldi</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Cops_and_shoes</id>
		<title>Cops and shoes</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/kmudgpX1-kA/Blog:Cops_and_shoes" />
				<updated>2003-11-25T03:41:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;On my ride home from work today (~22:00) I merged onto I-676 West after getting off of the Ben Franklin bridge.  It was dark out, and raining, so I did not see that I merged right in front of a cop.  I was going the exact speed of traffic, though: about 100kph (my speedometer is in metric).  My blow off valve gave a chirp as I shifted from 3rd gear to 4th and a couple seconds later the cop shined his spotlight at me.  A couple seconds after that he put on his flashers.  I calmly merged over to the right lane, waited for the Broad Street exit, and pulled over on the huge shoulder (I-676 has virtually no shoulder except on the ramps).  I immediately turned on my dome and map lights (I've been told that cops like it when you turn the lights on at night so they can see that you don't have a weapon).  Two cops got out of the car and came up to me.   The first cop asked for my license/registration.  Then he asked me if I knew the speed limit, to which I said that I was not sure what it was but I suspected it was 35mph or 40mph.  He said that it was 15mph (he must have been talking about the speed limit on the offramp).  He then asked me how fast I thought I was going, to which I truthfully replied "60mph."  He then walked away.  The other cop asked me why I had a roll bar and 5-point harnesses.  I quickly replied, "I &lt;a href="http://www.autox4u.com" class="external text" title="http://www.autox4u.com" rel="nofollow"&gt;autocross&lt;/a&gt; with the &lt;a href="http://www.scca.org/" class="external text" title="http://www.scca.org/" rel="nofollow"&gt;Sports Car Club of America&lt;/a&gt;."  He then walked away.  About 5 minutes later they yell on their loud speaker to, "Come back to our car."  I went back to their car, they handed me my license and registration, and they simply said, "No ticket; slow down," and drove away.
&lt;/p&gt;&lt;p&gt;When I got back to my apartment I ended up in the elevator with some random girl who lives on my floor (I hardly see anyone else that lives here).  We say nothing to each other until we are about walk away when she says, "Are your shoes &lt;a href="http://www.camper.com/" class="external text" title="http://www.camper.com/" rel="nofollow"&gt;Camper&lt;/a&gt;?"  To which I simply reply, "Yes."  Then she is just like, "Okay goodnight," and immediately walks away!
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=1GHzFesI"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=XjTTCres"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=XjTTCres" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=fBYhP95b"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=ZqIi4QfV"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=ZqIi4QfV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=gTOtnvlB"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/kmudgpX1-kA" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Cops_and_shoes</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Restaurants</id>
		<title>Restaurant reviews updated</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/stjD7HvGyhw/Blog:Restaurants" />
				<updated>2003-11-24T23:44:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I’ve migrated my &lt;a href="http://restaurants.sultanik.com" class="external text" title="http://restaurants.sultanik.com" rel="nofollow"&gt;restaurant review page&lt;/a&gt; to sultanik.com and converted it to &lt;a href="http://www.movabletype.org/" class="external text" title="http://www.movabletype.org/" rel="nofollow"&gt;MT&lt;/a&gt;. Now people will be able to leave comments on my reviews and I’ll have a lot more control over the dynamism of content.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=VLVljA6z"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=5oqNsQOD"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=5oqNsQOD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=B5AoflAh"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=fFW8nDUv"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=fFW8nDUv" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=OWkJR55G"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/stjD7HvGyhw" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Restaurants</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Mice_are_evil</id>
		<title>Mice==Evil</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/F1M_--GURyU/Blog:Mice_are_evil" />
				<updated>2003-11-21T19:17:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;A lot of people recently have been evangelizing to me the use of cascading windows, specifically in the Windows environment.  Normally I'd ignore this, however I have a particular pet peeve in which I can't stand when people claim something as fact that I know is false.  Let me make myself clear: &lt;em&gt;the use of mice is less efficient, in most general cases, than a finite (read: keyboard) alternative/equivalent&lt;/em&gt;.  As a co-worker of mine, Donovan Artz, recently pointed out,  99% of mouse use is actually a negative feedback loop:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; The brain must identify the area on the screen that needs to be clicked
&lt;/li&gt;&lt;li&gt; The brain must locate the current position of the mouse pointer on the screen and figure out which way the pointer needs to be moved to get to the area identified in 1
&lt;/li&gt;&lt;li&gt; The brain tells the hand to move the mouse in the direction determined in 2
&lt;/li&gt;&lt;li&gt; Repeat 1, 2, and 3 until the brain thinks the mouse pointer is in the correct area
&lt;/li&gt;&lt;li&gt; The brain tells the hand to click the mouse button
&lt;/li&gt;&lt;li&gt; The brain must determine if the desired effect actually happened.  If not, repeat all of the previous steps over again.
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Nearly all of these steps can be eliminated if one simply uses a keyboard shortcut (with a deterministic result).  For example, say one has multiple windows open, each partially occluding view of the other, and one wants to change focus from one window to another. One could simply use the mouse to click on the desired window, however this would cause the negative feedback loop outlined above.  Most window managers, including Windows and Mac OSX, have a facility to iterate through all of the open windows and choose to give one focus.  This is usually bound to a keyboard shortcut like META-TAB.  The META-TAB approach is almost as bad as using a mouse, though, because one does not necessarily have control over the order in which the window manager iterates through the windows.  Therefore this approach has a worst case complexity of linear time (based upon the number of windows open).  What we need is a constant time approach to changing focus between windows.
&lt;/p&gt;&lt;p&gt;My solution:
&lt;/p&gt;&lt;p&gt;&lt;b&gt;One application per workspace!&lt;/b&gt;
&lt;/p&gt;&lt;p&gt;I personally use &lt;a href="http://www.windowmaker.org/" class="external text" title="http://www.windowmaker.org/" rel="nofollow"&gt;WindowMaker&lt;/a&gt;, however I am also fond of other minimalist window managers such as &lt;a href="http://modeemi.cs.tut.fi/~tuomov/ion/" class="external text" title="http://modeemi.cs.tut.fi/~tuomov/ion/" rel="nofollow"&gt;Ion&lt;/a&gt;.  Basically, I give each of my applications their own workspace:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt; Terminal(s) (&lt;a href="http://konsole.kde.org/" class="external text" title="http://konsole.kde.org/" rel="nofollow"&gt;konsole&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt; Text Editor (&lt;a href="http://www.gnu.org/software/emacs/emacs.html" class="external text" title="http://www.gnu.org/software/emacs/emacs.html" rel="nofollow"&gt;emacs&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt; dvi/pdf/ps viewer (&lt;a href="http://math.berkeley.edu/~vojta/xdvi.html" class="external text" title="http://math.berkeley.edu/~vojta/xdvi.html" rel="nofollow"&gt;xdvi&lt;/a&gt;/&lt;a href="http://www.adobe.com/products/acrobat/readermain.html" class="external text" title="http://www.adobe.com/products/acrobat/readermain.html" rel="nofollow"&gt;acroread&lt;/a&gt;/&lt;a href="http://www.gnu.org/software/ghostview/ghostview.html" class="external text" title="http://www.gnu.org/software/ghostview/ghostview.html" rel="nofollow"&gt;gv&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt; Web Browser (&lt;a href="http://www.mozilla.org/" class="external text" title="http://www.mozilla.org/" rel="nofollow"&gt;Mozilla&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt; Instant Messager (&lt;a href="http://gaim.sourceforge.net/" class="external text" title="http://gaim.sourceforge.net/" rel="nofollow"&gt;gaim&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt; Other
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;I've found that 99% of the time these are the only programs I use.  And whenever I open another program that I don't have assigned to a workspace (like &lt;a href="http://www.gimp.org/" class="external text" title="http://www.gimp.org/" rel="nofollow"&gt;gimp&lt;/a&gt; or &lt;a href="http://www.lysator.liu.se/~alla/dia/" class="external text" title="http://www.lysator.liu.se/~alla/dia/" rel="nofollow"&gt;dia&lt;/a&gt;) they go in workspace 6.  Each of my workspaces is assigned a unique keyboard shortcut so I can immediately jump directly between any two programs.  Tabs are also my friends.  Problem solved.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=DLm13R0O"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=d9zFBubq"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=d9zFBubq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=IGPf1i6C"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=3LQb9fOt"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=3LQb9fOt" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=rWUIBBfr"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/F1M_--GURyU" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Mice_are_evil</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Chancellery</id>
		<title>The Chancellery</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/UUxGrdiLz_c/Blog:Chancellery" />
				<updated>2003-11-20T22:39:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;My friend Tom and I have been talking about starting up “The Chancellery of the United States of America” for a while now (I’ve always wanted the title “Chancellor of the Exchequer”). Last night I noticed that “.us” domain names are only ~$5 a year, so I quickly snatched “&lt;a href="http://www.chancellery.us/" class="external text" title="http://www.chancellery.us/" rel="nofollow"&gt;chancellery.us&lt;/a&gt;.” Check it out for some laughs.
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=QnHg8T9M"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Xa8WMwO9"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=Xa8WMwO9" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=kbs62fvJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=dcX5StUv"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=dcX5StUv" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=tfichY3z"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/UUxGrdiLz_c" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Chancellery</feedburner:origLink></entry>

	<entry>
		<id>http://www.sultanik.com/Blog:Website</id>
		<title>Website is up!</title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EvanSultanik/~3/5bcH_ZiOaZ0/Blog:Website" />
				<updated>2003-11-20T21:47:00Z</updated>
		
		
		<author><name>Evan Sultanik</name></author>	<content type="html">
&lt;/p&gt;&lt;p&gt;I just bought “sultanik.com” and am currently transitioning away from my &lt;a href="http://gicl.cs.drexel.edu/people/evan" class="external text" title="http://gicl.cs.drexel.edu/people/evan" rel="nofollow"&gt;old website&lt;/a&gt;. The new domain will give me a lot more freedom as to the content I post (and the dynamism thereof).
&lt;/p&gt;&lt;p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=xhFJ2VCs"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=2yp6YOL8"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=2yp6YOL8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=PF8ywRBb"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=TGiIPdcA"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?i=TGiIPdcA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EvanSultanik?a=Djd6edRt"&gt;&lt;img src="http://feeds.feedburner.com/~f/EvanSultanik?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EvanSultanik/~4/5bcH_ZiOaZ0" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.sultanik.com/Blog:Website</feedburner:origLink></entry>

	</feed>
