<?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:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0UHRXg7cSp7ImA9WhRVFkQ.&quot;"><id>tag:blogger.com,1999:blog-6694184</id><updated>2012-01-16T01:27:14.609-05:00</updated><category term="space" /><category term="cape cod" /><category term="technology" /><category term="cryptography" /><category term="threads" /><category term="gadgets" /><category term="movies and film" /><category term="security" /><category term="somerville" /><category term="politics" /><category term="postfix" /><category term="music" /><category term="advertising" /><category term="robots" /><category term="nature" /><category term="privacy" /><category term="newrelic" /><category term="art" /><category term="poll" /><category term="flashpolicyd" /><category term="complaint" /><category term="wishlist" /><category term="housing" /><category term="energy" /><category term="cartography" /><category term="git" /><category term="hacks" /><category term="adsense" /><category term="futurism" /><category term="religion" /><category term="davis square" /><category term="design" /><category term="cycling" /><category term="radex" /><category term="tv" /><category term="code" /><category term="tivoli" /><category term="myspace" /><category term="productivity" /><category term="nin" /><category term="fear" /><category term="varnish" /><category term="blogs" /><category term="computing" /><category term="google" /><category term="humor" /><title>jelder'd</title><subtitle type="html">Why is my blog called &lt;em&gt;jelder'd&lt;/em&gt;? My normal username is jelder, and I recently &lt;a href="http://books.google.com/books?id=f8QRAAAAIAAJ&amp;amp;pg=PA601&amp;amp;lpg=PA601&amp;amp;dq=jelder&amp;amp;source=web&amp;amp;ots=IJKlBpuUFe&amp;amp;sig=f9u8ZKzGr0K2QFLs3hm1mN7AWTE"&gt;discovered&lt;/a&gt; that &lt;em&gt;jelder'd&lt;/em&gt; is an obsolete past-participle adjective meaning &lt;em&gt;severely bruised&lt;/em&gt;.&lt;p&gt;I've taken that to mean that I am or will become either a time traveler or an immortal badass.&lt;/p&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.jacobelder.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.jacobelder.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>168</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jelder" /><feedburner:info uri="jelder" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0EFSHozcCp7ImA9Wx5TE0s.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-879856422990823714</id><published>2010-07-16T17:48:00.007-04:00</published><updated>2010-07-28T21:06:59.488-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-28T21:06:59.488-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="newrelic" /><category scheme="http://www.blogger.com/atom/ns#" term="varnish" /><title>Tracking request queue time on New Relic RPM with Varnish</title><content type="html">&lt;p&gt;The nice folks at New Relic have added an under-hyped &lt;a href="http://support.newrelic.com/faqs/docs/queue-time"&gt;feature&lt;/a&gt; to RPM which allows for the tracking of the time a given request spent in the server's work queue before processing began. This information in crucial in determining when you need to add more workers. It only requires that your front-end add an &lt;code&gt;X-Request-Start&lt;/code&gt; header containing the epoch time in microseconds when the request was received. They offer a patch for NginX and a one-line config change for Apache.&lt;/p&gt;

&lt;p&gt;But what about the new hotness, Varnish?&lt;/p&gt;

&lt;script src="http://gist.github.com/494265.js"&gt; &lt;/script&gt;

&lt;p&gt;&lt;em&gt;That's&lt;/em&gt; what. Save this to &lt;code&gt;/etc/varnish/newrelic.h&lt;/code&gt; and include it in your &lt;code&gt;vcl_recv&lt;/code&gt; declaration.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-879856422990823714?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/uLS8ARimbcc" height="1" width="1"/&gt;</content><link rel="related" href="http://support.newrelic.com/faqs/docs/queue-time" title="Tracking request queue time on New Relic RPM with Varnish" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=879856422990823714" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/879856422990823714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/879856422990823714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/uLS8ARimbcc/tracking-request-queue-time-on-new.html" title="Tracking request queue time on New Relic RPM with Varnish" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2010/07/tracking-request-queue-time-on-new.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04GRHc7fyp7ImA9Wx5TE0w.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-2947023501958266999</id><published>2010-07-16T17:30:00.002-04:00</published><updated>2010-07-28T08:25:25.907-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-28T08:25:25.907-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="varnish" /><title>Serving static files from Varnish</title><content type="html">&lt;p&gt;At &lt;a href="http://locamoda.com"&gt;LocaModa&lt;/a&gt;, most of our APIs are eventually consumed by ActionScript 3 applications run on large outdoor screens or in users' web browsers. Flash's cross-domain request protection incurres some round-trip latency, which essentially means wasted screen time, which is money, and I'd like to share one way we optimize for this.&lt;/p&gt;

&lt;p&gt;We use the excellent Varnish HTTP accelerator in front of our application servers. True, we could easily be serving crossdomain.xml from Tomcat, or Apache, or NginX, but Varnish is the only part of the infrastructure I'm really happy with for the long-term. This is why I decided to serve a static file from Varnish which, officially, doesn't do this.&lt;/p&gt;

&lt;script src="http://gist.github.com/494303.js?file=crossdomain.vcl"&gt;&lt;/script&gt;

&lt;p&gt;"Error 843? What the hell is that?" &lt;code&gt;vcl_recv&lt;/code&gt; is intercepting requests for crossdomain.xml and returning an illegal, non-standard, stupid error. 843 is meaningful to those familiar with Flash socket connections as the TCP port number for socket policy requests. (I wrote a &lt;a href="http://github.com/jelder/flashpolicyd/"&gt;server&lt;/a&gt; for this a while ago.)&lt;/p&gt;

In &lt;code&gt;vcl_error&lt;/code&gt;, we catch 843's and synthesize a response. The response has a far-future expiration and a 200 response code. These requests are served even faster than Varnish's already blindingly fast cache hits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-2947023501958266999?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/Ksb3NAbSjbA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=2947023501958266999" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/2947023501958266999?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/2947023501958266999?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/Ksb3NAbSjbA/serving-static-files-from-varnish.html" title="Serving static files from Varnish" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.jacobelder.com/2010/07/serving-static-files-from-varnish.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4GRH88eyp7ImA9WxNRFEs.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-6970748084932761871</id><published>2009-08-25T15:59:00.016-04:00</published><updated>2009-09-08T22:38:45.173-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-08T22:38:45.173-04:00</app:edited><title>Fun with SSL</title><content type="html">&lt;p&gt;I'm sure you love renewing SSL certificates almost as much as I do. Nothing beats the satisfaction of... slogging through a bunch of complicated commands you haven't typed in years just to maintain status quo. Right.&lt;/p&gt;
&lt;p&gt;Having had an opportunity to take better notes on this process for my employer, I present to you a few brief commands to make renewing your SSL certificates almost painless.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First, check your expiration date.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;openssl s_client -connect host01.example.com:443 &amp;lt; /dev/null 2&amp;gt; /dev/null |\
   sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' |\
   openssl x509 -enddate

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Renewal time is an great opportunity to rotate your key. This is technically optional but it's good practice:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;openssl genrsa -out example_com.key 1024
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;You'll need both the key and the about-to-expire certificate in the current directory for the next step. This will create a new CSR with all of the same parameters you used last time. Take this over to your preferred certificate authority and begin their renewal process.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;openssl x509 \
    -x509toreq \
    -signkey example_com.key \
    -in example_com.crt
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
If you only need the key and certificate pair for your application (eg, Apache, NginX, slapd... most applications), you're done. However, if you need to use this certificate with Java servers as well, keep reading (wildcard certificates for the win). This procedure is recommended for ActiveMQ but should be directly applicable to Tomcat et al.
&lt;br /&gt;
&lt;ol start="4"&gt;
&lt;li&gt;
The Java &lt;code&gt;keytool&lt;/code&gt; command doesn't offer any way to import an x.509 key by itself. The workaround is to first merge the x.509 certificate and key to a new PKCS12.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;openssl pkcs12 \
    -export \
    -in example_com.crt \
    -inkey example_com.key \
    -out example_com.p12
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
Now use &lt;code&gt;keytool&lt;/code&gt; to convert that PKCS12 file into a Java keystore file. 
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;keytool \
    -importkeystore \
    -deststorepass changeme \
    -destkeypass changeme \
    -destkeystore keystore.jks \
    -srckeystore example_com.p12 \
    -srcstoretype PKCS12 \
    -srcstorepass changeme \
    -alias 1
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
That's it. Like I said, I highly recommend wildcard certificates if you can afford the initial expense. I hate having to justify the expense and effort buying a new certificate each time I bring up a new service. Keeping your certificates in a git repository also takes away some of the stress here: no fears of screwing something up and deleting a file that cost you hundreds of dollars to generate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-6970748084932761871?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/sG6gA9vJimk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=6970748084932761871" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6970748084932761871?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6970748084932761871?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/sG6gA9vJimk/fun-with-ssl.html" title="Fun with SSL" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/08/fun-with-ssl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQCQHw6fCp7ImA9WxVaEkw.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-308609739592264698</id><published>2009-04-08T15:13:00.004-04:00</published><updated>2009-04-08T15:19:21.214-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-08T15:19:21.214-04:00</app:edited><title>Getting busy with INFORMATION_SCHEMA</title><content type="html">&lt;p&gt;I've been wanting to use this trick forever. Here's how to quickly, effortlessly, and I should add, destructively, convert all tables in a given database to UTF8.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
mysql --batch information_schema -e "select concat('ALTER TABLE ', TABLE_NAME,' ONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') as '--' from TABLES where TABLE_SCHEMA='somedb' and TABLE_COLLATION not like '%utf8%'" | mysql somedb
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The addition of INFORMATION_SCHEMA combined with CONCAT makes it possible to do arbitrarily cool things with MySQL. Love it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-308609739592264698?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/IB7jlrHXcCM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=308609739592264698" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/308609739592264698?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/308609739592264698?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/IB7jlrHXcCM/getting-busy-with-informationschema.html" title="Getting busy with INFORMATION_SCHEMA" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/04/getting-busy-with-informationschema.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QHR3w4eip7ImA9WxVWGUs.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-7481827571140001462</id><published>2009-03-01T22:37:00.003-05:00</published><updated>2009-03-01T22:42:16.232-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-01T22:42:16.232-05:00</app:edited><title>In all your travels...</title><content type="html">&lt;p&gt;I can't tell you how much time I've spent fantasizing about this concept. Battlestar Galactica presents us with a great way to discuss it.&lt;/p&gt;

&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JK3TCHViQUA&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JK3TCHViQUA&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;p&gt;This is the closest I've ever seen teledramas come to doing real, honest, hard science fiction. So very well done, and such a tragedy that there are only three episodes remaining for this singular series.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-7481827571140001462?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/RRSPtnSmIoA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=7481827571140001462" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/7481827571140001462?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/7481827571140001462?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/RRSPtnSmIoA/in-all-your-travels.html" title="In all your travels..." /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/03/in-all-your-travels.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4BRHc4cCp7ImA9WxVRFUw.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-6538161216802368425</id><published>2009-01-20T23:56:00.002-05:00</published><updated>2009-01-20T23:59:15.938-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T23:59:15.938-05:00</app:edited><title>Mushrooms tell us "the internet was inevitable" and something about fractal supertrees</title><content type="html">&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/PaulStamets_2008-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/PaulStamets-2008.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=258" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/PaulStamets_2008-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/PaulStamets-2008.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=258"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/RichardPreston_2008-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/RichardPreston-2008.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=409" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/RichardPreston_2008-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/RichardPreston-2008.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=409"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-6538161216802368425?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/A_hiZ-DP1G4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=6538161216802368425" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6538161216802368425?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6538161216802368425?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/A_hiZ-DP1G4/mushrooms-tell-us-internet-was.html" title="Mushrooms tell us &quot;the internet was inevitable&quot; and something about fractal supertrees" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/mushrooms-tell-us-internet-was.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMFQ3k6fSp7ImA9WxVRFUw.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-864228454522154995</id><published>2009-01-20T23:30:00.006-05:00</published><updated>2009-01-20T23:50:12.715-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T23:50:12.715-05:00</app:edited><title>Imogen Heap is proof that the future worked</title><content type="html">&lt;p&gt;I was promised the future. By that I mean, yes, it went almost without question (statistically) that I would still be alive in 2009. The future was something more; something with a recognizable taste. As a child I knew without question that as I grew up, even more so could the world I may inherit. I mean something more than just years when I say &lt;em&gt;the future&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Superman, The Jetsons, James Kirk and a black and white TV told me things, beautiful things. Adventure and possibility beyond imagination. Perfect worldwide peace without disease or poverty. Ubiquitous, effortless flight. Probably, a black president with a stage presence like Morgan Freeman. Above all, I expected to see the limitless reach of human exploration and expression. I want to talk about that last point for a second.&lt;/p&gt;&lt;p&gt;Imogen Heap confirms for me that the future has not only already arrived, but has delivered fully on one promise. Here we see a young woman controlling a fantastic array of electronic equipment. Any single component, if presented to NASA's best engineers in 1969, would have seemed impossibly sophisticated. She, alone on stage, uses this future artifact not to explore space or design pharmaceuticals, but to project without restraint her imagination onto our consciousness.&lt;/p&gt;&lt;p&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dHk2lLaDzlM&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/dHk2lLaDzlM&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;That's the highest quality recording I can find on YouTube. I strongly suggest you go support this artist in any way you can, and with that being said, here's my favorite rendition of &lt;a href="http://jelder.s3.amazonaws.com/Hide%20and%20Seek.mp3"&gt;Hide and Seek&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-864228454522154995?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/kyTdcXz7PiM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=864228454522154995" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/864228454522154995?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/864228454522154995?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/kyTdcXz7PiM/imogen-heap-is-proof-that-future-worked.html" title="Imogen Heap is proof that the future worked" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/imogen-heap-is-proof-that-future-worked.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAGRH0-eSp7ImA9WxVRFU0.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-7284797571849579489</id><published>2009-01-20T21:56:00.010-05:00</published><updated>2009-01-20T22:15:25.351-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T22:15:25.351-05:00</app:edited><title>Female Vocalists on YouTube</title><content type="html">&lt;p&gt;I've had a post on female vocalists brewing for a while and this isn't it. However, you really should take a listen to &lt;a href="http://www.youtube.com/user/natalydawn"&gt;Nataly Dawn&lt;/a&gt;. She has that timeless, ethereal sort of sound which I find mesmerizing, and I won't lie; when she makes eye contact with the camera I fall apart a little.&lt;/p&gt;

&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/OvYZMqQffQE&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/OvYZMqQffQE&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;/p&gt;On a somewhat related note, seeing Barack Obama's &lt;a href="http://www.whitehouse.gov/assets/presidents/896x504/44bo_header2.jpg"&gt;face&lt;/a&gt; on the new &lt;a href="http://whitehouse.gov"&gt;WhiteHouse.gov&lt;/a&gt; is like watching boobs bounce in slow motion.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-7284797571849579489?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/pHbeOHzuWy4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=7284797571849579489" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/7284797571849579489?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/7284797571849579489?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/pHbeOHzuWy4/female-vocalists-on-youtube.html" title="Female Vocalists on YouTube" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/female-vocalists-on-youtube.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4CQ3o9cCp7ImA9WxVRFUk.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-3164789498256448730</id><published>2009-01-18T16:30:00.007-05:00</published><updated>2009-01-21T09:09:22.468-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-21T09:09:22.468-05:00</app:edited><title>Huygens' Titan descent telemetry, visualized</title><content type="html">&lt;img src="http://www.nasa.gov/images/content/148082main_PIA08117-516.jpg" /&gt;&lt;blockquote&gt;This movie, built with data collected during the European Space Agency's Huygens probe on Jan. 14, 2005, shows the operation of the Descent Imager/Spectral Radiometer camera during its descent and after touchdown. The camera was funded by NASA. &lt;/blockquote&gt;&lt;p&gt;The article doesn't do justice to how much beauty exists in this visualization of data. The brief and glorious life of the Huygens lander, dropped from the Cassini probe into the atmosphere of Titan, is compressed from 4 hours to just a few minutes. A unique chime as if from a child's xylophone accompanies each sensor reading. As Huygens' last meters close, the final intrusion of poetry into science is utterly disarming.&lt;/p&gt;&lt;p&gt;If anyone can find a higher resolution form of this video it would be greatly appreciated.&lt;/p&gt;
&lt;a href="http://www.nasa.gov/mission_pages/cassini/multimedia/pia08117.html"&gt;Link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-3164789498256448730?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/S7rTbQQZGQk" height="1" width="1"/&gt;</content><link rel="related" href="http://www.nasa.gov/mission_pages/cassini/multimedia/pia08117.html" title="Huygens' Titan descent telemetry, visualized" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=3164789498256448730" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/3164789498256448730?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/3164789498256448730?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/S7rTbQQZGQk/huygens-titan-descent-telemetry.html" title="Huygens' Titan descent telemetry, visualized" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/huygens-titan-descent-telemetry.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUENQH45eip7ImA9WxVRFUw.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-2187290701490833463</id><published>2009-01-18T16:00:00.004-05:00</published><updated>2009-01-20T23:54:51.022-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T23:54:51.022-05:00</app:edited><title>Life imitating art: WALL•M</title><content type="html">&lt;img style="margin: 0pt 0pt 10px 10px; float: right; width: 180px; height: 166px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Sojourner_on_Mars_PIA01122.jpg/180px-Sojourner_on_Mars_PIA01122.jpg" alt="" border="0" /&gt;
Meanwhile, at the Carl Sagan Memorial Station (née Pathfinder) on Mars:&lt;blockquote&gt;&lt;p&gt;Unlike Spirit and Opportunity, Sojourner could not directly communicate with Earth and had to rely on the lander to transmit messages about its health and travels. So when contact with the lander, which was designed to last one month, was lost after three months, ground controllers were not sure what became of Sojourner.&lt;/p&gt;&lt;p&gt;Now, it seems the rover kept moving, apparently trying to reach its companion. "The rover was programmed so that if it didn't get commands from the lander, it would assume it somehow got out of radio contact behind a ridge or rock," Parker told New Scientist. "So it would drive to the lander as best it could and keep trying to re-establish contact", circling it as it got close, he says.&lt;/p&gt;&lt;p&gt;When it was last seen, the rover was 13 metres away from the Pathfinder lander. Now, it appears to be about 6 metres away, according to the new MRO images. "I think the simplest explanation is it started to drive back, got about half way, and stopped for whatever reason - it may have thought it got there," says Parker. "The other possibility is it &lt;em&gt;drove around and around for who knows how long and simply failed at that location&lt;/em&gt;."&lt;/p&gt;&lt;/blockquote&gt;
Emphasis mine. &lt;a href="http://www.newscientist.com/article/dn10945"&gt;Full article at New Scientist.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-2187290701490833463?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/YNev88_KC8M" height="1" width="1"/&gt;</content><link rel="related" href="http://www.newscientist.com/article/dn10945" title="Life imitating art: WALL•M" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=2187290701490833463" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/2187290701490833463?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/2187290701490833463?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/YNev88_KC8M/life-immitating-art-wallm.html" title="Life imitating art: WALL•M" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/life-immitating-art-wallm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUICQHk5eCp7ImA9WxVSGUU.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-6722361248335203035</id><published>2009-01-14T20:34:00.004-05:00</published><updated>2009-01-14T20:39:21.720-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-14T20:39:21.720-05:00</app:edited><title>Why art abhors censorship</title><content type="html">&lt;p&gt;Perhaps I'm being generous here, but just watch. It gets really great around 1:10 in.&lt;/p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2ycAwhR3oEg&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/2ycAwhR3oEg&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;It's not just that they say "fuck." They say nothing &lt;i&gt;except&lt;/i&gt; fuck for over 3 three minutes, and it's still a very compelling and expressive bit of dialog.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-6722361248335203035?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/2yopR1xhdpw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=6722361248335203035" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6722361248335203035?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6722361248335203035?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/2yopR1xhdpw/why-art-abhors-censorship.html" title="Why art abhors censorship" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/why-art-abhors-censorship.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEDQH48cCp7ImA9WxVSFkk.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-976395239702940118</id><published>2009-01-10T23:03:00.000-05:00</published><updated>2009-01-10T23:04:31.078-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-10T23:04:31.078-05:00</app:edited><title>Shackleton Crater and the "shit knife"</title><content type="html">&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/BillStone_2007-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/BillStone-2007.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=141" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/BillStone_2007-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/BillStone-2007.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=141"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;object width="446" height="326"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt; &lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/WadeDavis_2003-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/WadeDavis-2003.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=69" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/WadeDavis_2003-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/WadeDavis-2003.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=69"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-976395239702940118?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/J8hbpRFZ4BU" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=976395239702940118" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/976395239702940118?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/976395239702940118?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/J8hbpRFZ4BU/shackleton-crater-and-shit-knife.html" title="Shackleton Crater and the &quot;shit knife&quot;" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/shackleton-crater-and-shit-knife.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUBSXo9fyp7ImA9WxVSFUs.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-183092360493975434</id><published>2009-01-09T23:36:00.001-05:00</published><updated>2009-01-09T23:37:38.467-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-09T23:37:38.467-05:00</app:edited><title>Here's something for the before-you-die list</title><content type="html">Of course, it would be wise to put this at the very end of the list.
&lt;object width="400" height="219"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1778399&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=1778399&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="219"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/1778399"&gt;wingsuit base jumping&lt;/a&gt; from &lt;a href="http://vimeo.com/thedoctor"&gt;Ali&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-183092360493975434?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/6AFub2iwGWY" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=183092360493975434" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/183092360493975434?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/183092360493975434?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/6AFub2iwGWY/heres-something-for-before-you-die-list.html" title="Here's something for the before-you-die list" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/heres-something-for-before-you-die-list.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFRn48eyp7ImA9WxVSE0g.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-4062645405399808614</id><published>2009-01-07T13:36:00.004-05:00</published><updated>2009-01-07T13:48:37.073-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-07T13:48:37.073-05:00</app:edited><title>Unofficial Git &amp; GitNub for MacOS Leopard</title><content type="html">&lt;p&gt;I have made available a completely unofficial but functional MacOS Leopard build of git and the excellent &lt;a href="http://wiki.github.com/Caged/gitnub"&gt;GitNub&lt;/a&gt; viewer. To install, pretend I'm a trustworthy individual and run:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;curl http://jelder.s3.amazonaws.com/git-1.6.1-leopard.tar.gz | sudo tar xvzf - -C /&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This will put git in /usr/local/bin/git (with other support files in /usr/local/libexec and /usr/local/share). The nub script in /usr/local/bin/nub will launch GitNub from the current directory.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-4062645405399808614?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/dYUsp-Civ9s" height="1" width="1"/&gt;</content><link rel="related" href="http://jelder.s3.amazonaws.com/git-1.6.1-leopard.tar.gz" title="Unofficial Git &amp; GitNub for MacOS Leopard" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=4062645405399808614" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/4062645405399808614?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/4062645405399808614?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/dYUsp-Civ9s/unofficial-git-gitnub-for-macos-leopard.html" title="Unofficial Git &amp; GitNub for MacOS Leopard" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/unofficial-git-gitnub-for-macos-leopard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8GQHoycCp7ImA9WxVTGUQ.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-4175122107659497791</id><published>2009-01-03T10:30:00.002-05:00</published><updated>2009-01-03T10:33:41.498-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-03T10:33:41.498-05:00</app:edited><title>Mint needs a better workflow</title><content type="html">Just posted this to the Mint.com user forums.
&lt;blockquote&gt;&lt;p&gt;Most of my Mint's value for us users comes from knowing how our money is getting spent, but one critical part of that use case is missing: a workflow for rapid categorization.&lt;/p&gt;&lt;p&gt;Mint needs a really slick way to let me sit down once a month and quickly categorize all of my uncatagorized transactions. I should be presented with a queue of transactions from unknown merchants and some method for applying labels, splitting bills, etc. Ideally, I should be able to keep my hands on the keyboard for this, and it should take like 5 minutes a month or less.&lt;/p&gt;&lt;p&gt;This can be done manually now, of course, but it's far from efficient. The ajax stuff in the transactions tab has improved but it's still too chunky and slow on a modern MacBook Pro and Firefox 3.0. The experience should be less hunt-pick-wait and more next-next-next.&lt;/p&gt;&lt;p&gt;With more complete vendor preference profiles for each user, Mint should be able to monetize via more focused opportunities. Good luck guys! Mint is great but it's not complete!&lt;/blockquote&gt;
The thread is &lt;a href="http://forums.mint.com/showthread.php?t=5990"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-4175122107659497791?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/Ml22pPI4zmo" height="1" width="1"/&gt;</content><link rel="related" href="http://forums.mint.com/showthread.php?t=5990" title="Mint needs a better workflow" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=4175122107659497791" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/4175122107659497791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/4175122107659497791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/Ml22pPI4zmo/mint-needs-better-workflow.html" title="Mint needs a better workflow" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2009/01/mint-needs-better-workflow.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YNRng_fip7ImA9WxVTF0g.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-5690583323595179818</id><published>2008-12-29T17:44:00.006-05:00</published><updated>2008-12-31T14:19:57.646-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-31T14:19:57.646-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title>Git is Exquisite</title><content type="html">&lt;p&gt;Possibly the best thing about git is that you can &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-init.html"&gt;start from an existing directory&lt;/a&gt;. This makes it amazing for tracking configuration files.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;cd /etc/ldap ; git init ; git add . ; git commit -m "got some config religion"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Too bad one can't use &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt; for this, but remote backups and batch config changes get really elegant with kind of setup.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-5690583323595179818?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/rpJ5Ho_MObs" height="1" width="1"/&gt;</content><link rel="related" href="http://git.or.cz/" title="Git is Exquisite" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=5690583323595179818" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/5690583323595179818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/5690583323595179818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/rpJ5Ho_MObs/git-is-exquisite.html" title="Git is Exquisite" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/12/git-is-exquisite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YBSHw-fyp7ImA9WxVTF0g.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-3251354551166107376</id><published>2008-12-27T14:40:00.007-05:00</published><updated>2008-12-31T14:19:19.257-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-31T14:19:19.257-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="flashpolicyd" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>flashpolicyd; Making myself use Git</title><content type="html">&lt;p&gt;People who work with me know I treat version control like a sacrament. "If it's not in Subversion, it never happened." My desktop is a Subversion checkout. It has tags.&lt;/p&gt;&lt;p&gt;But Subversion, despite having a superior name, is losing favor to &lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt;. I really like some of Git's philosophical decisions, so I'm diving in. I have one open source side project these days (&lt;a href="http://jelder.blogspot.com/2008/11/fun-with-flash.html"&gt;flashpolicyd&lt;/a&gt;) and I have just migrated it to &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://github.com/jelder/flashpolicyd/"&gt;http://github.com/jelder/flashpolicyd/&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;Here we go...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-3251354551166107376?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/tTbx5qEOwA0" height="1" width="1"/&gt;</content><link rel="related" href="http://github.com/jelder/flashpolicyd/" title="flashpolicyd; Making myself use Git" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=3251354551166107376" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/3251354551166107376?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/3251354551166107376?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/tTbx5qEOwA0/flashpolicyd-making-myself-use-git.html" title="flashpolicyd; Making myself use Git" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/12/flashpolicyd-making-myself-use-git.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUAQH8-eyp7ImA9WxVVEEQ.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-6750008288802490846</id><published>2008-12-27T13:16:00.010-05:00</published><updated>2009-03-03T10:30:41.153-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-03T10:30:41.153-05:00</app:edited><title>Passwords are so 1997</title><content type="html">&lt;p&gt;It's practically 2009 and too many of us still use a jumble of letters and numbers as passwords. A New Year's resolution to keep: here's an ultra-short tutorial on never typing your password into a remote host again. First, the MacOS client version.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a key and encrypt the private side with a strong passphrase: &lt;tt&gt;ssh-keygen -t dsa&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;Add it to your Keychain: &lt;tt&gt;ssh-add -K .ssh/id_dsa
&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;Establish trust: &lt;tt&gt;cat .ssh/id_dsa.pub | ssh some.remote.net tee -a .ssh/authorized_keys&lt;/tt&gt; (or email that file to someone who can do this for you)&lt;/li&gt;&lt;li&gt;Now go disable passwords for SSH on that remote server by adding &lt;tt&gt;PasswordAuthentication no&lt;/tt&gt; to &lt;tt&gt;/etc/sshd_config&lt;/tt&gt; and restarting the SSH server. You are now immune to SSH brute force attacks.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Repeat steps 3 and 4 for every remote machine you use, but make sure you have a secure backup of that private key!&lt;/p&gt;&lt;p&gt;I practically never use Linux from the console any more, so I won't contribute a tutorial for that today. PuTTY and Pagent make this &lt;a href="http://the.earth.li/%7Esgtatham/putty/0.60/htmldoc/Chapter9.html#pageant"&gt;pretty damn easy&lt;/a&gt; on Windows. No more excuses!&lt;/p&gt;&lt;p&gt;That solves the shell session password issue. For the rest, the solution isn't so neat and tidy. &lt;span style="font-family:courier new;"&gt;sudo apt-get install pwgen&lt;/span&gt; to create super strong  (but somewhat memorable) passwords for local accounts and websites. Turn on FileVault or FireFox's master password and &lt;em&gt;let software deal with authentication for you&lt;/em&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-6750008288802490846?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/sJjvbSgrazs" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=6750008288802490846" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6750008288802490846?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6750008288802490846?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/sJjvbSgrazs/passwords-are-so-1997.html" title="Passwords are so 1997" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/12/passwords-are-so-1997.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUINQHk9eip7ImA9WxRbEUo.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-735132739540608009</id><published>2008-11-29T14:18:00.004-05:00</published><updated>2008-12-01T19:26:31.762-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-01T19:26:31.762-05:00</app:edited><title>"Fun" with Flash</title><content type="html">Here's a high performance Flash policy server I wrote over the long weekend. Just something to stay sharp between the ample meals. I was able to sustain 33,000 requests per minute on my MacBook Pro from localhost with minimal load. Tested on and functional but not quite as fast on OpenBSD (not sure why yet). My Linux test box gave me well over 145,000 requests per minute. This is probably several orders of magnitude faster than anyone needs, but here ya go. GPL, of course.
&lt;ul&gt;&lt;li&gt;&lt;a href="http://jelder.s3.amazonaws.com/flashpolicyd"&gt;flashpolicyd&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jelder.s3.amazonaws.com/flashpolicy-benchmark"&gt;flashpolicy-benchmark&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; I just posted a new version which will drop privileges after opening 843.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-735132739540608009?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/VHRHgSpnUIc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=735132739540608009" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/735132739540608009?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/735132739540608009?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/VHRHgSpnUIc/fun-with-flash.html" title="&quot;Fun&quot; with Flash" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/11/fun-with-flash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8NRnczcSp7ImA9WxRVGEU.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-1266180149871955547</id><published>2008-11-16T16:55:00.006-05:00</published><updated>2008-11-16T20:04:57.989-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-16T20:04:57.989-05:00</app:edited><title>Rainy Sunday, iPhone, Making Ringtones</title><content type="html">&lt;p&gt;I've gotten some compliments on my Mad World custom iPhone ringtone. It always puts me in a calm mood before dealing with whomever is calling, so I thought I'd share it and a few others I made.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://jelder.s3.amazonaws.com/Mad+World.m4r"&gt;Mad World&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jelder.s3.amazonaws.com/Amok Time.m4r"&gt;Amok Time&lt;/a&gt; (All unironic use is prohibited)&lt;/li&gt;&lt;li&gt;&lt;a href="http://jelder.s3.amazonaws.com/MGMT+-+Kids.m4r"&gt;MGMT - Kids&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jelder.s3.amazonaws.com/MGMT+-+Time+to+Pretend.m4r"&gt;MGMT - Time to Pretend&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; The proper name for that track is probably "&lt;a href="http://en.wikipedia.org/wiki/Amok_Time"&gt;Amok Time&lt;/a&gt;," nerds.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-1266180149871955547?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/EvmCz-_Yei4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=1266180149871955547" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/1266180149871955547?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/1266180149871955547?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/EvmCz-_Yei4/rainy-sunday-iphone-making-ringtones.html" title="Rainy Sunday, iPhone, Making Ringtones" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/11/rainy-sunday-iphone-making-ringtones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8FSX4ycSp7ImA9WxdTEUU.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-881218550247296257</id><published>2008-05-06T10:58:00.006-04:00</published><updated>2008-05-07T13:20:18.099-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-07T13:20:18.099-04:00</app:edited><title>Miscellaneous discoveries</title><content type="html">&lt;p&gt;Two problems which have been bothering me forever have finally been solved. One (and this should have been obvious) is revealing the total system memory on BSD-like systems from the command line. There is no equivalent of Linux's &lt;code&gt;free -m&lt;/code&gt;. The closest approximation is &lt;code&gt;sysctl hw.physmem&lt;/code&gt;. This lead to a revelation that one of my OpenBSD firewalls had been provisioned with several gigabytes more than it would ever, ever need. Yay!&lt;/p&gt;

&lt;p&gt;The second was, how the heck do I get Dell service tag of an ill server without actually going to the datacenter? &lt;code&gt;sudo dmidecode -s system-serial-number&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Yay again. Definitely time to get myself some outside time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update: &lt;/strong&gt;Need the service tag off your OpenBSD box? &lt;code&gt;sysctl hw.serialno&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-881218550247296257?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/wA6HfAaA7IA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=881218550247296257" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/881218550247296257?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/881218550247296257?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/wA6HfAaA7IA/miscellaneous-discoveries.html" title="Miscellaneous discoveries" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/05/miscellaneous-discoveries.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08GSXw8fip7ImA9WxZaE0k.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-6772394419787772914</id><published>2008-04-27T20:11:00.010-04:00</published><updated>2008-04-27T21:23:48.276-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-27T21:23:48.276-04:00</app:edited><title>Take Back Your Keyboard!</title><content type="html">&lt;p&gt;A good friend of mine has gone to great lengths in refining the pathway between his brain and his computer. That is to say, he's &lt;a href="http://www.interloper.net/keyboard/"&gt;serious about keyboard design&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'm not quite ready to invest in an ergonomic (and scary looking) keyboard-as-cereal-bowl, or the ultimate extreme, hacking up my own Dvorak variant.What I am willing to do, however, is repurpose  my utterly useless Caps Lock.&lt;/p&gt;
&lt;p&gt;Thanks to inspiration from Bill in 2006 and lots of experiments since, I am now able to publish my findings on the subject. &lt;a href="http://www.vim.org/"&gt;VIM&lt;/a&gt; users' most frequently used key is probably Escape. For me that means moving my ring finger about three inches diagonally away from the home row, maybe a few hundred times an hour. Plus, the top row is frequently smaller than the other rows. It's actually designed to be hard to hit without effort. Caps Lock, meanwhile, is both enormous and well within pinky range on the home row.&lt;/p&gt;
&lt;p&gt;For Windows, it's a registry hack &lt;a href="http://jelder.blogspot.com/2007/03/vi-fun.html"&gt;which I've written about before&lt;/a&gt;. Create a file called &lt;code&gt;CapsLockEscape.reg&lt;/code&gt; and paste this text into it, save it, and double-click. You'll have to log out and log back in (or reboot) for it to take affect.
&lt;pre&gt;
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;For the Debian and Ubuntu consoles, add this line to &lt;code&gt;/etc/console-tools/remap&lt;/code&gt;, then either run &lt;code&gt;/etc/init.d/console-screen.sh&lt;/code&gt; or reboot.&lt;pre&gt;
s/keycode  58 = Caps_Lock/keycode  58 = Escape/;
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;For X11, create a file called &lt;code&gt;~/.capslockescape&lt;/code&gt; with the following contents, then run &lt;code&gt;xmodmap ~/.capslockescape&lt;/code&gt; to try it out. Add that command to your &lt;code&gt;~/.xinitrc&lt;/code&gt; to make it permanent.&lt;pre&gt;
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;The hard part was Mac OS X Leopard. I went so far as to open a RentACoder.com auction for someone willing to write the appropriate keyboard driver. I opened the bidding at $100, and offered it to everyone who had written keyboard macro software for the Mac. One &lt;a href="http://www.pqrs.org/tekezo/"&gt;Takayama Fumihiko&lt;/a&gt; declined the offer but linked me to something he had already written, &lt;a href="http://www.pqrs.org/tekezo/macosx/keyremap4macbook/extra.html"&gt;PCKeyboardHack&lt;/a&gt;.
The magic number is &lt;strong&gt;53&lt;/strong&gt;.&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_3yeNfUX_EU8/SBUmoPYaBBI/AAAAAAAAAF8/-YvOEjGqTLc/s1600-h/PCKeyboardHack.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_3yeNfUX_EU8/SBUmoPYaBBI/AAAAAAAAAF8/-YvOEjGqTLc/s320/PCKeyboardHack.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5194100218007258130" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-6772394419787772914?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/iDaxaDZDsL8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=6772394419787772914" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6772394419787772914?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/6772394419787772914?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/iDaxaDZDsL8/take-back-your-keyboard.html" title="Take Back Your Keyboard!" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp1.blogger.com/_3yeNfUX_EU8/SBUmoPYaBBI/AAAAAAAAAF8/-YvOEjGqTLc/s72-c/PCKeyboardHack.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/04/take-back-your-keyboard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MAQXg6fCp7ImA9WxZaFE4.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-8986635983515148773</id><published>2008-04-27T05:50:00.015-04:00</published><updated>2008-04-28T21:10:40.614-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-28T21:10:40.614-04:00</app:edited><title>Ubuntu Site-to-Site SSH VPN</title><content type="html">&lt;p&gt;Weekend Project time. Here's how to build a VPN using just SSH and two Ubuntu machines. At least one of these machines should have a static IP or DNS, and they should both be the default gateway for their respective sites.&lt;/p&gt;

&lt;p&gt;MachineA is the originator and has a local network on NetworkA/24. MachineB has a static name on the Internet and a local network called NetworkB/24. Our point-to-point network is 10.0.0.0/24, with MachineA at 10.0.0.0.1 and MachineB a 10.0.0.2. I will assume for brevity that you have already established an SSH trust relationship between root@MachineA and root@MachineB.&lt;/p&gt;

MachineA:/etc/interfaces:
&lt;pre&gt;
auto tun0
iface tun0 inet static
      pre-up ssh -f -w 0:0 MachineB "ifdown tun0 ; ifup tun0"
      pre-up sleep 5
      address 10.0.0.2
      pointopoint 10.0.0.1
      netmask 255.255.255.0
      up ip route add NetworkB/24 via 10.0.0.1
      down ip route del NetworkB/24 via 10.0.0.1
&lt;/pre&gt;

MachineB:/etc/network/interfaces:
&lt;pre&gt;
iface tun0 inet static
      address 10.0.0.1
      pointopoint 10.0.0.2
      netmask 255.255.255.0
      up ip route add NetworkA/24 via 10.0.0.2
      down ip route del NetworkA/24 via 10.0.0.2
&lt;/pre&gt;

&lt;p&gt;(Note that MachineA's interface is set to auto, but MachineB's is not.)&lt;/p&gt;

&lt;p&gt;Since these are the gateways, we're probably running a netfilter wrapper such as Shorewall. In that case, we'll have a few more things to add. They'll be the same on both ends.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;code&gt;/etc/shorewall/zones&lt;/code&gt;, add: &lt;code&gt;vpn ipv4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;In &lt;code&gt;/etc/shorewall/interfaces&lt;/code&gt;, add: &lt;code&gt;vpn tun0 detect&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;In &lt;code&gt;/etc/shorewall/rules&lt;/code&gt;, add:&lt;br/&gt;&lt;code&gt;ACCEPT vpn loc all &lt;br/&gt;ACCEPT loc vpn all&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;And finally, in &lt;code&gt;/etc/modules&lt;/code&gt;, add &lt;code&gt;tun&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After restarting Shorewal and loading the tun device (&lt;code&gt;modprobe tun &amp;&amp; invoke-rc.d shorewall restart&lt;/code&gt;), you should now be able to run &lt;code&gt;ifup tun0&lt;/code&gt; on MachineA. Ta-da! You can now connect to your remote networks as if they were a single hop away.&lt;/p&gt;

&lt;p&gt;This solution shares some problems with all TCP-only VPNs. Each relayed packet has a reduced payload size, so you'll see more fragmentation. There are also problems related to running &lt;a href="http://en.wikipedia.org/wiki/Nagle%27s_algorithm"&gt;Nagle&lt;/a&gt; on top of Nagle. Depending on your expected traffic, you might have some luck enabling compression. See &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config"&gt;ssh_config(5)&lt;/a&gt;. There are also some problems more or less unique to SSH VPNs. If the MachineB's host key changes, MachineA won't be able to establish a connection until the old key is removed from MachineA:/root/.ssh/known_keys. This also makes failover scenarios pretty ugly. Good luck!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-8986635983515148773?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/Vy1KoTP2Ah4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=8986635983515148773" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/8986635983515148773?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/8986635983515148773?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/Vy1KoTP2Ah4/ubuntu-site-to-site-ssh-vpn.html" title="Ubuntu Site-to-Site SSH VPN" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/04/ubuntu-site-to-site-ssh-vpn.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYDRXY8fCp7ImA9WxZaEkQ.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-2207084883726941149</id><published>2008-04-26T23:18:00.004-04:00</published><updated>2008-04-27T06:29:34.874-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-27T06:29:34.874-04:00</app:edited><title>A quine is a quine, right?</title><content type="html">&lt;p&gt;A &lt;a href="http://en.wikipedia.org/wiki/Quine_%28computing%29"&gt;quine&lt;/a&gt; is a computer program which produces its own source code when executed. My brother is learning Python and we've been talking about quines a lot lately. I have a feeling that I'm cheating here, but I present for posterity my own crazy short Perl quine.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;seek DATA,0,0;print for&amp;lt;DATA&amp;gt;__END__&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-2207084883726941149?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/pT5qRt7Qry4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=2207084883726941149" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/2207084883726941149?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/2207084883726941149?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/pT5qRt7Qry4/quine-is-quine-right.html" title="A quine is a quine, right?" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/04/quine-is-quine-right.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUMRnY6eCp7ImA9WxZaEkQ.&quot;"><id>tag:blogger.com,1999:blog-6694184.post-8590204300220228936</id><published>2008-04-26T23:10:00.006-04:00</published><updated>2008-04-27T06:31:27.810-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-27T06:31:27.810-04:00</app:edited><title>Street Art</title><content type="html">&lt;p&gt;I really like this:&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_3yeNfUX_EU8/SBPunfYaA_I/AAAAAAAAAFs/2XPZ-lRcSco/s1600-h/IMG_0090.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_3yeNfUX_EU8/SBPunfYaA_I/AAAAAAAAAFs/2XPZ-lRcSco/s320/IMG_0090.JPG" alt="" id="BLOGGER_PHOTO_ID_5193757157494490098" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But this one is a WTF moment. Metrosexual Movers?&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_3yeNfUX_EU8/SBPurfYaBAI/AAAAAAAAAF0/E-z8ieH8UJA/s1600-h/IMG_0091.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_3yeNfUX_EU8/SBPurfYaBAI/AAAAAAAAAF0/E-z8ieH8UJA/s320/IMG_0091.JPG" alt="" id="BLOGGER_PHOTO_ID_5193757226213966850" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both found on Sidney Street in Cambridge (Central Square).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6694184-8590204300220228936?l=blog.jacobelder.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jelder/~4/78-7W8abnio" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6694184&amp;postID=8590204300220228936" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/8590204300220228936?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6694184/posts/default/8590204300220228936?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jelder/~3/78-7W8abnio/street-art.html" title="Street Art" /><author><name>Jacob</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp0.blogger.com/_3yeNfUX_EU8/SBPunfYaA_I/AAAAAAAAAFs/2XPZ-lRcSco/s72-c/IMG_0090.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.jacobelder.com/2008/04/street-art.html</feedburner:origLink></entry></feed>

