<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:joel</id>
  <title>Joel Franusic</title>
  <subtitle>Joel Franusic</subtitle>
  <author>
    <name>Joel Franusic</name>
  </author>
  <link rel="alternate" type="text/html" href="http://joel.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom"/>
  <updated>2009-08-23T23:13:45Z</updated>
  <lj:journal userid="2362150" username="joel" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://joel.livejournal.com/data/atom" title="Joel Franusic"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:57686</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/57686.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=57686"/>
    <title>Mystery Company #1</title>
    <published>2009-03-18T15:16:12Z</published>
    <updated>2009-03-18T15:16:12Z</updated>
    <content type="html">Two months ago I hit the ground running at a new job with a company called &lt;a href="http://netbooks.com/"&gt;NetBooks&lt;/a&gt;. They make accounting software for tiny businesses (not tiny computers or online book readers).&lt;br /&gt;&lt;br /&gt;I'm having a great time getting to learn new technologies and learning from some very sharp people.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:57586</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/57586.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=57586"/>
    <title>Ozymandias</title>
    <published>2009-02-22T19:16:33Z</published>
    <updated>2009-02-22T19:17:04Z</updated>
    <content type="html">I met a traveller from an antique land&lt;br /&gt;Who said: Two vast and trunkless legs of stone&lt;br /&gt;Stand in the desert. Near them on the sand,&lt;br /&gt;Half sunk, a shatter'd visage lies, whose frown&lt;br /&gt;And wrinkled lip and sneer of cold command&lt;br /&gt;Tell that its sculptor well those passions read&lt;br /&gt;Which yet survive, stamp'd on these lifeless things,&lt;br /&gt;The hand that mock'd them and the heart that fed.&lt;br /&gt;And on the pedestal these words appear:&lt;br /&gt;"My name is Ozymandias, king of kings:&lt;br /&gt;Look on my works, ye Mighty, and despair!"&lt;br /&gt;Nothing beside remains: round the decay&lt;br /&gt;Of that colossal wreck, boundless and bare,&lt;br /&gt;The lone and level sands stretch far away.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:57122</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/57122.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=57122"/>
    <title>Equal pay for equal work?</title>
    <published>2009-02-21T18:44:34Z</published>
    <updated>2009-02-21T18:44:34Z</updated>
    <content type="html">Earlier this year, I learned that my friends Mike and Kristina were expecting a second child...&lt;br /&gt;&lt;br /&gt;&lt;table bgcolor="white"&gt;
&lt;tr&gt;&lt;td&gt;&lt;img src="http://img.skitch.com/20090221-mcgn77d87q4hac3dpjkare4n52.png" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;img src="http://img.skitch.com/20090221-g97gjx5scityu16npriye7pq2b.png" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:56999</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/56999.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=56999"/>
    <title>Some data storage solutions that have inspired me</title>
    <published>2009-02-20T10:07:07Z</published>
    <updated>2009-02-20T10:07:07Z</updated>
    <category term="photos"/>
    <category term="salt mine"/>
    <category term="stainless steel"/>
    <category term="clay tablets"/>
    <category term="storage"/>
    <category term="ibm 1360"/>
    <content type="html">In the course of my long term data storage research, I've run across some very neat storage solutions. While none of them meet my needs exactly, I've found all of the things listed below to be very inspirational in my quest to find or create a simple long term data storage solution.&lt;br /&gt;&lt;br /&gt;Let's take a look at some of my favorites!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Clay tablets&lt;/b&gt;. The oldest known &lt;a href="http://en.wikipedia.org/wiki/Clay_tablet"&gt;Clay tablets&lt;/a&gt; are over 6,000 years old. The Epic of Gilgamesh was written on clay tablets, the earliest versions of the epic date from &lt;a href="http://en.wikipedia.org/wiki/Epic_of_Gilgamesh#History"&gt;2150-2000 BCE&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.computer-history.info/Page4.dir/pages/Photostore.dir/index.html"&gt;&lt;img src="http://www.computer-history.info/Page4.dir/pages/Photostore.dir/thumbnails/photostore2.jpg" alt="Image of a &amp;#39;chip&amp;#39; from an IBM Photostore machine" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;"Photos"&lt;/b&gt;. In the late 1950's IBM developed a few "&lt;a href="http://en.wikipedia.org/wiki/IBM_1360"&gt;Photostore&lt;/a&gt;" machines that would store data on photographs. Data was stored on "chips" like the one pictured above. Each chip was approximately 2.75 x 1.38 inches and could store about a half a megabyte of data. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Golden records&lt;/b&gt;. Probably the most famous of all golden records is the one that was launched into space as part of the &lt;a href="http://en.wikipedia.org/wiki/Voyager_Golden_Record"&gt;Voyager spacecraft&lt;/a&gt;. It had controversial cartoon depictions of naked humans, and some &lt;a href="http://goldenrecord.org/"&gt;great music&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Stainless steel tablets&lt;/b&gt;. When Scientologists return to earth from the distant future, &lt;a href="http://en.wikipedia.org/wiki/Trementina_Base"&gt;Trementina Base&lt;/a&gt; will be there for them. Trementina houses the complete collection of L. Ron Hubbard's creative output, engraved on stainless steel tablets, stored in titanium capsules. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Salt mines&lt;/b&gt;. Naturally temperature and humidity stable, salt mines are perfect places to &lt;a href="http://www.rileycountyks.gov/index.asp?NID=425"&gt;archive film and paper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As I search for a simple long term storage solution, it has really helped to remember these methods of storage. I want to build on the past as much as possible. These solutions have also been extremely inspirational: The clay tablets for their longevity, the Voyager Golden Record for it's carefully selected contents, Trementina Base for its long term thinking, and the salt mines because they are a simple, elegant and non-obvious way to store human artifacts for very long periods of time.&lt;br /&gt;&lt;br /&gt;But the most inspirational of all the things I've listed here is the IBM 1360 - the "Photostore". Much of my thinking regarding archiving data to paper has been inspired or influenced by the little know about this system. It does a lot of things that just make a lot of sense to me: "write once, read many", storage of data on non-electronic, non-magnetic, almost inert media, the ability to remove media from a running system for long term storage, the ability for a running system to request the re-insertion of media that is in long term storage. &lt;br /&gt;&lt;br /&gt;As I look for ways to help people store data for long periods of time with little or no effort, it has been very encouraging to find similar things others have done in the past. I can't help but wonder what other technologies exist, hiding in the whispers of the past, that can help me find a solution.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:56439</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/56439.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=56439"/>
    <title>The cop-out blog post</title>
    <published>2009-02-18T07:30:38Z</published>
    <updated>2009-02-18T07:30:38Z</updated>
    <content type="html">I'm exhausted, need to sleep. &lt;br /&gt;&lt;br /&gt;Did you know you can use your computer to travel back in time? It's true! Visit Russia from &lt;a href="http://www.loc.gov/exhibits/empire/"&gt;100 years ago, in color&lt;/a&gt;.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:56115</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/56115.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=56115"/>
    <title>On being an extra in a movie</title>
    <published>2009-02-17T08:42:45Z</published>
    <updated>2009-02-17T08:44:43Z</updated>
    <content type="html">Being an extra isn't as fun or interesting as I thought it would be. From what I can tell, filming a movie is actually pretty tedious. &lt;br /&gt;&lt;br /&gt;Here is the summary: The more scrappy the movie is, the more fun you'll have. Avoid being an extra unless you get paid to do so.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;I've been an extra in a total of three films: a shoestring budget, student film for a buddy when I was in high-school; a big budget &lt;a href="http://en.wikipedia.org/wiki/Shooting_Dogs"&gt;feature film&lt;/a&gt; for  BBC Films; and an &lt;a href="http://areyouexpendable.com/a/"&gt;independent film&lt;/a&gt; for a &lt;a href="http://wondermark.com/"&gt;web comic&lt;/a&gt;ist named David Malki.&lt;br /&gt;&lt;br /&gt;Of the three, the one where I had the most fun was the student film for my high-school buddy Joshua. As I remember it, it was a lot of goofing around with friends, with a few film takes here and there. (Joshua is still making &lt;a href="http://www.newrenaissanceonline.com/"&gt;movies&lt;/a&gt;, this makes me happy.)&lt;br /&gt;&lt;br /&gt;Next is the David Malki movie, "&lt;a href="http://areyouexpendable.com/a/"&gt;Expendable&lt;/a&gt;". This was actually a lot of fun, probably due to the fact that I spent only a little bit of time as an extra. The rest of the time was spent as a &lt;a href="http://en.wikipedia.org/wiki/Grip_(job)"&gt;grip&lt;/a&gt; assistant, and later a &lt;a href="http://en.wikipedia.org/wiki/Production_designer"&gt;production design&lt;/a&gt; assistant  - I'm listed in &lt;a href="http://www.imdb.com/name/nm2921735/"&gt;IMDB&lt;/a&gt; for this. I actually really enjoyed helping with production design, it's a busy job with tangible, immediate results. I list this second mainly because it was ... a job. Not a particularly hard job, but not a relaxing way to spend a weekend. One great plus of helping with this film was being able to explore an abandoned marine base!&lt;br /&gt;&lt;br /&gt;Lastly is the big budget film. I was in this movie because I'm white and was in Rwanda at the time of the filming, we didn't look to be in this movie, they sought us out. The first few times were very fun, mostly because of the novelty. We got to dress in &lt;a href="http://sargo.com/joel/_images/P1010031_405x300.JPG"&gt;military uniform&lt;/a&gt; and walk around with &lt;a href="http://en.wikipedia.org/wiki/FN_FAL"&gt;rifles&lt;/a&gt; of questionable origin. After the first couple of times however, the only real reason to go was because we got paid, and for the food. They had &lt;i&gt;amazing&lt;/i&gt; gourmet catered food on the set. Oh, and they gave us live ammunition to cary around.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:55608</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/55608.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=55608"/>
    <title>Just like grandma used to make</title>
    <published>2009-02-16T05:05:34Z</published>
    <updated>2009-02-16T05:05:34Z</updated>
    <content type="html">My favorite kind of burrito is the kind that my grandmother used to make:&lt;br /&gt;&lt;br /&gt;"Un burrito de papas y huevos con chorizo"&lt;br /&gt;&lt;br /&gt;This is one of those cases where using a foreign language allows one to be more precise and terse, in English the same thing would be "a burrito with Mexican diced and friend potatoes made with Mexican chorizo"&lt;br /&gt;&lt;br /&gt;The nice thing about being fairly fluent in Spanish is that I can order this in most Mexican restaurants without getting any strange looks and get exactly what I want.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:55482</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/55482.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=55482"/>
    <title>How I started programming</title>
    <published>2009-02-15T09:27:14Z</published>
    <updated>2009-02-15T09:27:14Z</updated>
    <content type="html">&lt;span style="font-size: xx-small; "&gt;(As some of you have noticed, I've been posting a lot lately. There is a reason for that. I'm part of a &lt;/span&gt;&lt;a href="http://www.egometry.com/bloodpact/"&gt;&lt;span style="font-size: xx-small; "&gt;group of about 12 people&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: xx-small; "&gt; who have made a &amp;quot;bloodpact&amp;quot; to write once a day for a month.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;quot;How did you get started with programming?&amp;quot; - I casually asked this question once while hanging out with my hacker friends. I expected that their answers would be short and fall into a small number of distinct categories. It came as a surprise then, that their answers to this question were neither short, nor easily categorizable. &lt;br /&gt;&lt;br /&gt;My own story is below. I encourage you to write a blog post of your own, telling your story.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;I learned how to program from my Dad over the course of many years. The events below are the most memorable.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Compaq_Portable"&gt;&lt;img alt="a picture of the Compaq Portable computer" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/Compaq_portable.jpg/250px-Compaq_portable.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The earliest memory I have of a specific computer was the Compaq Portable that my Dad had. I remember walking past my parents bedroom on my way back from a trip to the bathroom. It was very late at night, my Dad was awake and watching the computer give out results from a  simulation that it was running. &lt;br /&gt;&lt;br /&gt;For the next few years, the only thing I would use that computer for was to play &lt;a href="http://muppet.wikia.com/wiki/Ernie&amp;#39;s_Big_Splash"&gt;Ernie's Big Splash&lt;/a&gt;. I think that this is also the computer that Dad used to teach me how to use the text editor that was part of of &lt;a href="http://en.wikipedia.org/wiki/QuickC"&gt;Microsoft QuickC&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0131103628?ie=UTF8&amp;amp;tag=joelfran-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0131103628"&gt;&lt;img border="0" alt="" src="http://sargo.com/joel/_images/215sRDdVOuL._SL160_.jpg" /&gt;&lt;/a&gt;&lt;img width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=joelfran-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0131103628" /&gt;&lt;br /&gt;&lt;br /&gt;My Dad eventually got a 386 &amp;quot;portable computer&amp;quot; from Dell. It is on this computer that I started learning how to program in C out of &amp;quot;K&amp;amp;R&amp;quot;. It takes me a long time to finally feel like I understand C, from what I can tell my progress in mathematics correlated with my progress in learning C.&lt;br /&gt;&lt;br /&gt;Time passes. I play a lot of Super Mario World with my brother on our SNES.&lt;br /&gt;&lt;br /&gt;More time passes. My family moves to Austin, Texas. I spent practically 6 straight months learning DOS 6 from a book my dad bought for me, writing batch scripts on the Dell. &lt;br /&gt;&lt;br /&gt;More time passes, my family moves to Sunnyvale, California. I figure out just enough BASIC to make new QBasic Nibbles levels for my cousin. My dad buys a 486 and we install RedHat Linux (kernel 1.2.13) on it. I start learning bash scripting.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0596101058?ie=UTF8&amp;amp;tag=joelfran-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0596101058"&gt;&lt;img border="0" src="http://sargo.com/joel/_images/51aQjAkB5UL._SL160_.jpg"&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=joelfran-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596101058" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;br /&gt;My friend Chris wants to sell some of his SW:CCG cards online. eBay isn't out yet, so I decide to write an auction system for him. I try writing it using CGI and sed/awk. Luckily I find the &amp;quot;Learning Perl&amp;quot; book in the Mountain View public library and everything falls into place. I finish the project and Chris successfully uses the code to complete one auction. eBay comes on the scene. I lose track of the auction source code along with all the other digital artifacts I created in that time.&lt;br /&gt;&lt;br /&gt;Finishing that auction script was a defining moment for me. From that time forward, it became easier and easier to move on to other platforms, languages and projects.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:55164</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/55164.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=55164"/>
    <title>There is still much work to be done</title>
    <published>2009-02-14T09:25:03Z</published>
    <updated>2009-02-14T09:25:03Z</updated>
    <category term="&amp;quot;free software&amp;quot;"/>
    <category term="osx"/>
    <category term="microsoft"/>
    <category term="linux"/>
    <content type="html">I never thought that this day would come: Microsoft is no longer relevant.&lt;br /&gt;&lt;br /&gt;These changes didn't happen suddenly, it was an almost imperceptible change. One day I just realized that an overwhelming majority of my friends and peers use a variant of Unix on a daily basis. Many have not used Windows in years. &lt;br /&gt;&lt;br /&gt;Linux users once felt like they needed to &lt;a href="http://counter.li.org/"&gt;count themselves&lt;/a&gt; to prove that Linux mattered, now people are &lt;a href="http://www.wkowtv.com/Global/story.asp?S=9667184"&gt;unaware they are running Linux&lt;/a&gt;. Eleven years ago, people were predicting the doom of Apple as their stock hit the bottom and Microsoft invested $150 million in them, today Microsoft is running advertisements attempting to save face from Apple's iconic &amp;quot;I'm a PC&amp;quot; advertisements. It's all pretty unbelievable when I stop and think about it.&lt;br /&gt;&lt;br /&gt;So what changed? I'm not sure that I care about the &amp;quot;how&amp;quot; of the matter, I'll leave it up to the historians to figure that one out. I like where things are, I'm even more excited about where they are going.&lt;br /&gt;&lt;br /&gt;Nobody has &amp;quot;won&amp;quot;, not even close, there is still much work to be done. I get the distinct impression that the Free Software community has just finished laying down the groundwork upon which true innovation can be built - innovation born in the 1970's held hostage by incompetence until now ... that is a topic for another day.&lt;br /&gt;&lt;br /&gt;There are still plenty of things to argue about in this area, there always will be. I just don't care to argue anymore, I don't have to. And there lies the crux of the matter: Free Software stands on its own merit.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:54825</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/54825.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=54825"/>
    <title>Improving the fire alarm.</title>
    <published>2009-02-13T08:24:19Z</published>
    <updated>2009-02-13T08:24:19Z</updated>
    <category term="disco"/>
    <category term="fire"/>
    <content type="html">Modern fire alarms are so stark, so robotic, so inhuman. I propose a better fire alarm. Ladies and Gentlemen. I introduce to you:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The Disco Fire Alarm&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/danielgreene/3091693490/"&gt;&lt;img alt="Disco inferno" title="Photo by Flickr user Daniel Greene" src="http://farm4.static.flickr.com/3247/3091693490_7f66b9ae62_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Why settle for the shirl and jarring beeping of an alarm, when you can have the shrill, jarring sounds of The Bee Gees:&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id="1" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Picture this, your house it filled with smoke, maybe it's just your next door neighbor barbecuing at midnight &lt;i&gt;again&lt;/i&gt;, perhaps your roomate forgot to remove the plastic wrap from the pizza. Just as you are about to roll over and hope it all goes away, a disco ball drops from the fire alarm in your ceiling the lights turn on, &amp;quot;Staying Alive&amp;quot; starts to play and it's the 70's all over again. &lt;br /&gt;&lt;br /&gt;This is not a drill: It's time to get out of your house as fast as you can, away from the smoke and fire, but more importantly, away from the disco.&lt;br /&gt;&lt;br /&gt;&lt;img title="Because the last thing you want to do is relive the 70&amp;#39;s" alt="Disco dancer" width="100" height="181" src="http://ecx.images-amazon.com/images/I/31pea2-%2BRIL._LAMESSI_.jpg" /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:54718</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/54718.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=54718"/>
    <title>Why I want to store data on paper</title>
    <published>2009-02-12T08:55:24Z</published>
    <updated>2009-02-12T08:55:24Z</updated>
    <category term="storage"/>
    <category term="par"/>
    <category term="paper"/>
    <content type="html">In my continuing quest to find long term storage solutions, one medium keeps coming up: paper.&lt;br /&gt;&lt;br /&gt;Why? With any new technology we can only make statistical guesses at the lifespan of that technology.&lt;br /&gt;&lt;br /&gt;With paper, we have over 500 years of experience printing and &lt;a href="http://www.google.com/search?q=document+storage"&gt;storing&lt;/a&gt; it. Considering all that experience, and that there are &lt;a href="http://en.wikipedia.org/wiki/Gutenberg_Bible#Existing_copies_of_the_Gutenberg_Bible"&gt;48 remaining copies of the original Gutenberg Bible&lt;/a&gt;, I don't think it is unfair to assume that there is a lot of research and guidelines for the long term preservation of paper.&lt;br /&gt;&lt;br /&gt;With this in mind, what I'd like to have are two tools:  The first tool would use existing research to simulate all the various types of ways in which paper can be damaged: rips, tears, fire damage, heat damage, water damage, and so on. The second tool would build off of the first, it would print and scan arbitrary binary data to and from paper using error correction sufficient to survive the common types of damage that paper experiences.&lt;br /&gt;&lt;br /&gt;I can't say I've searched very hard for software to fill the role of the first tool, as such, I don't know of anything that fits in that domain.&lt;br /&gt;&lt;br /&gt;As far as the second tool goes, Xerox has &lt;a href="http://www.parc.com/research/projects/dataglyphs/"&gt;DataGlyphs&lt;/a&gt;, but that technology is proprietary and presumably expensive, Microsoft recently came out with a technology recently, but whatever. The only software Open Source software I've been able to find is one program &lt;a href="http://www.ollydbg.de/Paperbak/index.html"&gt;Paperback&lt;/a&gt; - and it seems to be something of a joke. It seems like public domain &lt;a href="http://en.wikipedia.org/wiki/PDF417"&gt;PDF417&lt;/a&gt; standard might be the closest existing solution in this area, if nothing else, it's probably a good place to start.&lt;br /&gt;&lt;br /&gt;Since it seems that both of these tools are rather domain specific and ... esoteric. It looks like I'll be writing them myself.&lt;br /&gt;&lt;br /&gt;I already have a name for the second tool. I'm going to call it &amp;quot;par&amp;quot;. &lt;br /&gt;&lt;br /&gt;Time to get hacking.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:54368</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/54368.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=54368"/>
    <title>On Containerization</title>
    <published>2009-02-11T06:54:56Z</published>
    <updated>2009-02-11T06:55:49Z</updated>
    <content type="html">One of the things I love about infrastructure is how it is practically invisible. When you go to get a glass of water, you don't need to understand anything about the complexities of the water supply network - the sources, dams, aqueducts, canals, pipelines, treatment plants, and so on - all you need to know is to turn the faucet. &lt;a href="http://en.wikipedia.org/wiki/Containerization"&gt;Containerization&lt;/a&gt; is one of those things.&lt;br /&gt;&lt;br /&gt;In the last 50 years, our world has gone from a system that used ad-hoc containers to one that uses standard sizes (ISO 668). As a result, the prices of shipping have changed dramatically:  &amp;quot;In 1956, most cargo was loaded and unloaded by hand by longshoremen. Hand loading a ship cost $5.86 a ton at that time. Using containers, it cost only 16 cents a ton to load a ship, a 36-fold savings.&amp;quot; (&lt;a href="http://en.wikipedia.org/wiki/Malcolm_McLean"&gt;source&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Additionally, because of the standardized sizes, every modern mode of transport is capable of handling ISO 668 shipping containers: Ships, Trains, Trucks. This is known as &lt;a href="http://en.wikipedia.org/wiki/Intermodal_freight_transport"&gt;Intermodal freight transport&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This all basically constitutes a packet switched network for physical objects. A network which, if you don't care about latency, can be used for a &lt;a href="http://www.sun.com/blackbox"&gt;high bandwidth link&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Keep your eye out for shipping containers, they're &lt;a href="http://news.bbc.co.uk/2/hi/in_depth/business/2008/the_box/default.stm"&gt;everywhere&lt;/a&gt;.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:54155</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/54155.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=54155"/>
    <title>Unixtime version control</title>
    <published>2009-02-10T08:01:46Z</published>
    <updated>2009-02-10T08:01:46Z</updated>
    <content type="html">&lt;span style="font-size: large; "&gt;Or: &amp;quot;How typing 10 characters can save you heartache&amp;quot;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right now, it is &amp;quot;Mon Feb  9 23:21:07 PST 2009&amp;quot; or &amp;quot;1234250467&amp;quot; seconds since the &lt;a href="http://en.wikipedia.org/wiki/Unix_time"&gt;Unix epoch&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;When represented in base ten, the number of seconds since the epoch (&amp;quot;unixtime&amp;quot; henceforth) takes 11 code points &lt;sup&gt;(1)&lt;/sup&gt; to represent, possibly the most efficient way to represent time with second granularity (If we represented the time in another base, we could save even more code points). &lt;br /&gt;&lt;br /&gt;How hard is it to find the current unixtime? Easy, use the command: &lt;br /&gt;&lt;tt&gt;$ date +%s&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;This command should work on any system where date(1) makes use of a POSIX compliant strftime(3) implementation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large; "&gt;So what's the big deal?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I use unixtime frequently to avoid making mistakes. For example, I use this command to &amp;quot;delete&amp;quot; a file instead of rm(1):&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;$ mv $file $file.`date +%s`&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;I also use it when I want to run a command several times and easily find the differences between each invocation:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;$ some_command &amp;gt; output.`date +%s`&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;And finally: I frequently come across files on systems where, for whatever reason, using a real version control system is impractical or impossible. In these cases, the &lt;tt&gt;`date +%s`&lt;/tt&gt; command comes in very handy as a super ghetto version control system. Some examples:&lt;br /&gt;&lt;br /&gt;To do a &amp;quot;checkin&amp;quot;&lt;br /&gt;&lt;tt&gt;$ cp $file $file`date +%s`&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;To compare an old &amp;quot;revision&amp;quot; with &amp;quot;HEAD&amp;quot;&lt;br /&gt;&lt;tt&gt;$ diff -u $file.$old_unixtime $file&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;To take a &amp;quot;snapshot&amp;quot; of your &amp;quot;repository&amp;quot;&lt;br /&gt;&lt;tt&gt;$ tar -cf utvc.`date +%s`.tar ./*&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;At my last job, I had a button mapped to type `date +%s` when it was pressed, I&amp;nbsp;miss that button.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: smaller; "&gt;Footnotes:&lt;br /&gt;1: Until 2038, when it'll change to 12 code points. I use the term &amp;quot;code point&amp;quot; because I'm internationalized, yo.&lt;/span&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:54014</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/54014.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=54014"/>
    <title>Tools to help you survive data loss in the short term without thinking about it.</title>
    <published>2009-02-09T09:24:24Z</published>
    <updated>2009-02-09T21:55:42Z</updated>
    <category term="&amp;quot;jungle disk&amp;quot;"/>
    <category term="storage"/>
    <category term="vsafe"/>
    <category term="drobo"/>
    <category term="mozy"/>
    <category term="&amp;quot;time machine&amp;quot;"/>
    <content type="html">Before I delve into my vision for a future of effortless backups, I'd like to cover some relatively inexpensive solutions that anybody can use &lt;i&gt;right now&lt;/i&gt; to avoid dealing with accidental or unexpected data loss in the short term, which I'm defining as &amp;quot;less than 5 years&amp;quot;.&lt;br /&gt;&lt;br /&gt;I'm choosing my words and scope carefully, there are many ways to lose data . What I mean by &amp;quot;accidental or unexpected data loss&amp;quot; is what I think is the base case for most people: Those files you spent a lot of time creating are gone. Also known as: &amp;quot;I accidently ... the whole computer&amp;quot;, &amp;quot;Why is my hard drive making grinding noises and where are my files?&amp;quot;, etc. As I see the issue, this is the first step in keeping your data around for a long time. There are other things to consider, I'm going to try and cover them later.&lt;br /&gt;&lt;br /&gt;In the course of my research, the following solutions have really stood out:&lt;ul&gt;&lt;li&gt;&amp;quot;Drobo&amp;quot; by Data Robotics&lt;/li&gt;&lt;li&gt;&amp;quot;Time Machine&amp;quot; by Apple Mac OS X 10.5 and above.&lt;/li&gt;&lt;li&gt;&amp;quot;Mozy&amp;quot; by Decho (an EMC company)&lt;/li&gt;&lt;li&gt;Jungle Disk, powered by Amazon's S3 service.&lt;/li&gt;&lt;li&gt;&amp;quot;vSafe&amp;quot; by Wells Fargo&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I only have a passing knowledge of these tools, so please take these as suggestions for the start of your own investigation rather than concrete advice. I'm not an expert. Not yet.&lt;br /&gt;&lt;br /&gt;Let me cover each of these solutions briefly, discussing why each one interests me.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: larger; "&gt;&amp;quot;Drobo&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary:&lt;/b&gt; Put two or more drives in the Drobo, put your data on the Drobo, replace the drives when they fail.&lt;br /&gt;&lt;br /&gt;What impresses me about the Drobo is its simplicity of design. I like how it doesn't require any special configuration for it to work, just plug in the drives and go. I like how you don't need to use any special software to administer the Drobo: when the light changes next to a drive, just replace the drive. I like that it isn't using RAID - more on RAID later.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: larger; "&gt;&amp;quot;Time Machine&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary:&lt;/b&gt; Free automatic backup software built in to Mac OS X. I pity the fool who doesn't use it.&lt;br /&gt;&lt;br /&gt;Unlike a lot of other backups solutions that I've read about, the internals of Time Machine are truly impressive. It keeps track of what files to backup by taking advantage of the indexing service already built into Mac OS X, it uses &lt;i&gt;directory&lt;/i&gt; hard links to make compact, full disk backups. And finally, the Mac OS X install disks give you the option to restore your system from a Time Machine backup.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: larger; "&gt;&amp;quot;Mozy&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary:&lt;/b&gt; Online backup that &amp;quot;just works&amp;quot; backed by one the storage giants.&lt;br /&gt;&lt;br /&gt;Mozy is an online backup service backed by EMC (EMC purchased the company the created Mozy in 2007). EMC is one of the storage heavyweights, they are such a big company that I feel safe saying that the &amp;quot;No one ever got fired for choosing &lt;i&gt;x&lt;/i&gt;&amp;quot; snowclone applies to them.&lt;br /&gt;&lt;br /&gt;Because of the EMC backing, dual platform support, and awesome pricing ($5 per month per computer, &amp;quot;unlimited&amp;quot; storage), I think that Mozy stands out above the rest.&lt;br /&gt;&lt;br /&gt;I'm also really impressed and amused by the &amp;quot;Alternatives to MozyHome&amp;quot; that are listed on the &lt;a href="http://mozy.com/home"&gt;MozyHome page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: larger; "&gt;&amp;quot;Jungle Disk&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary:&lt;/b&gt; Software that makes it easy to backup your data your Amazon S3 data store.&lt;br /&gt;&lt;br /&gt;Jungle Disk is software that automatically backs up your data to your personal Amazon S3 &amp;quot;bucket&amp;quot;. Their software costs $20, Amazon charges you $0.15 per Gigabyte per month for storage. My personal &lt;i&gt;issue&lt;/i&gt; with Jungle Disk, is that every time I look at it, I convince myself not to buy it because &amp;quot;I could code it myself&amp;quot;, and then nothing happens.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: larger; "&gt;&amp;quot;vSafe&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary:&lt;/b&gt; Woah, online backup from a bank. What?&lt;br /&gt;&lt;br /&gt;A &amp;quot;digital safe deposit box&amp;quot; from Wells Fargo. This offering is impressive only because it is offered by a bank. One would assume, and hope, that they are good at keeping data around and secure for more than a decade.&lt;br /&gt;&lt;br /&gt;This offering is the most expensive of all the others, their pricing starts at $5 per Gigabyte per month.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Final thoughts: There are a &lt;i&gt;lot&lt;/i&gt; of options for storage out there, most of them are unappealing to me for various reasons (which I'd be happy to discuss). All the solutions above either give you full control of your data or are backed by organizations that are unlikely to disappear overnight.&lt;br /&gt;&lt;br /&gt;Remember kids: &amp;quot;&lt;a href="http://blogs.sun.com/jonathan/entry/brutal_efficiency_virtualization_by_another"&gt;there are only two types of disk drives: those that have failed, and those that are about to do so&lt;/a&gt;&amp;quot;.&lt;br /&gt;&lt;br /&gt;EDIT: Changed title.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:53742</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/53742.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=53742"/>
    <title>Why I'm obsessed with long term data storage.</title>
    <published>2009-02-08T10:28:37Z</published>
    <updated>2009-02-08T10:28:37Z</updated>
    <category term="data"/>
    <category term="storage"/>
    <category term="long now"/>
    <content type="html">It all started with a question from a photo instructor at Cuesta College to me and my boss:&amp;nbsp;&amp;quot;How do I keep my digital family photos around?&amp;quot;.&lt;br /&gt;&lt;br /&gt;The answer we ended up giving was along the lines of &amp;quot;you can't&amp;quot;, &amp;quot;it's hard&amp;quot;, or some combination of the two. This answer went against my intuition:&amp;nbsp;How could that be?&amp;nbsp;Digital data is pure, its &amp;quot;essence&amp;quot; isn't reduced, damaged, or reduced by copying. So why is it easier to keep a meatspace artifact around longer than a digital one? Or to put the question succinctly: Why is it so hard to keep data around for a long time?&amp;nbsp;&lt;br /&gt;&lt;br /&gt;I started looking for an answer, There had to be a better answer than constantly tending over backups. There had to be some sort of way to store arbitrary binary data for very long periods of time with little or no human intervention. I'm convinced there is an answer out there, but so far I haven't been able to find one answer.&lt;br /&gt;&lt;br /&gt;As I talked about my search for a long term data solution with other people, I found that I had hit something of a raw nerve with them. It seems like everybody that I've talked to has a story of traumatic data loss. While I admit that I knew better, and that the reason why I have traumatic data loss stories of my own is due to negligence on my part, I don't think that it is reasonable or fair to place this blame on a non-technical person.&amp;nbsp;With all of the progress that we've made in computing, long term storage of data for &amp;quot;anybody&amp;quot; should be a trivial and Solved problem.&lt;br /&gt;&lt;br /&gt;My obsession has a goal:&amp;nbsp;Find a way to trivially store arbitrary binary data for 10,000 years.&lt;br /&gt;&lt;br /&gt;More on that later.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:53439</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/53439.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=53439"/>
    <title>Towards an ideal bash environment.</title>
    <published>2009-02-07T09:34:15Z</published>
    <updated>2009-02-07T09:34:15Z</updated>
    <category term="bash"/>
    <category term="unix"/>
    <category term="linux"/>
    <content type="html">I've been using Linux for over 10 years, however it wasn't until I started getting paid to use Linux on a daily basis that I saw the value in keeping &amp;quot;dot files&amp;quot;. &lt;br /&gt;&lt;br /&gt;What I want is not a fancy prompt or tweaks to make a self-consistent system. I want to customize my environment so I can do more with less.&lt;br /&gt;&lt;br /&gt;I'm still in the idealized design phase of this ideal environment. The core principles that I am going for are as follows:&lt;ul&gt;&lt;li&gt;The environment should work on any system with at least SSH and bash.&lt;/li&gt;&lt;li&gt;If part of my environment depends on an external tool, the environment should be able to attempt to get that tool onto the system.&lt;/li&gt;&lt;li&gt;If it is not possible to bring in an external tool, degrade gracefully.&lt;/li&gt;&lt;li&gt;Include as many custom configurations as possible.&lt;/li&gt;&lt;/ul&gt;One element of this environment that I'm excited about is an &amp;quot;infect&amp;quot;&amp;nbsp;command. Given a remote host, username and password, this command will SSH to the remote host, install my SSH keys and then set up my environment. Part of this setup will be searching for external tool dependencies, if there are dependencies missing, I'm considering having the &amp;quot;infect&amp;quot; command attempt to compile the dependency on the remote host.&lt;br /&gt;&lt;br /&gt;My end goal is this: No matter what host I am connected to, I want the following:&lt;ul&gt;&lt;li&gt;The name of the host I am on to be clear.&lt;/li&gt;&lt;li&gt;A core set of my commonly used tools.&lt;/li&gt;&lt;li&gt;Personal configurations for as many tools as possible.&lt;/li&gt;&lt;/ul&gt;The results of the idealized design I have done on this system so far are on my wiki:&amp;nbsp;http://joel.franusic.com/Ideal-bash-environment</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:53062</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/53062.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=53062"/>
    <title>I'm tired but I'm working, yeah.</title>
    <published>2009-01-20T02:59:16Z</published>
    <updated>2009-01-20T03:05:39Z</updated>
    <content type="html">Wednesday January 14th, 2009 approximately 10h20 PST: "T minus 0"&lt;br /&gt;&lt;br /&gt;T  minus 0hrs - I am laid off&lt;br /&gt;T  plus 3hrs - Post to Twitter and Facebook: "Laid off from PBwiki and looking for my next adventure! &lt;a href="http://sargo.com/joel/resume.pdf"&gt;http://sargo.com/joel/resume.pdf&lt;/a&gt;"&lt;br /&gt;&lt;i&gt;I start getting phone calls and email from friends, old colleagues and acquaintances.&lt;/i&gt;&lt;br /&gt;T  plus 4hrs - I get a lead from an old colleague.&lt;br /&gt;T  plus 5hrs - I have an interview scheduled with Mystery Company #1.&lt;br /&gt;T  plus 24hrs - Mystery Company #2 contacts me for an interview.&lt;br /&gt;T  plus 25hrs - I interview at Mystery Company #1.&lt;br /&gt;T  plus 28hrs - I finish the interview with Mystery Company #1 and the lunch afterwards with my buddy.&lt;br /&gt;T  plus 31hrs - I get a phone call from the CTO of Mystery Company #1, we negotiate salary, he informs me that he intends to make me an offer.&lt;br /&gt;T  plus 46hrs - I have a phone interview with Mystery Company #2&lt;br /&gt;T  plus 49hrs - More interviews with Mystery Company #2&lt;br /&gt;T  plus 55hrs - I receive the offer letter from Mystery Company #1&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I discuss my options and the results of the interviews with my family, mentors and advisors. I start working towards a decision.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;T  plus 101hrs - After much consideration, I accept the job offer with Mystery Company #1</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:52968</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/52968.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=52968"/>
    <title>SF Open Studios</title>
    <published>2008-10-20T04:12:26Z</published>
    <updated>2008-10-20T04:12:26Z</updated>
    <content type="html">I visited a bunch of art studios that were part of the SF Open Studios event with Corrie today. Much of San Francisco's art talent seems to be in The Mission.&lt;br /&gt;&lt;br /&gt;It was a very inspiring event overall. I'm now thinking about doing some art of my own... e-ink + context free perhaps?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:52562</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/52562.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=52562"/>
    <title>Scaling</title>
    <published>2008-09-08T23:15:55Z</published>
    <updated>2008-09-08T23:15:55Z</updated>
    <content type="html">I often need to explain to people why the network at their home is better than at the office.&lt;br /&gt;&lt;br /&gt;Here's an analogy I just came up with:&lt;br /&gt;&lt;br /&gt;"It's like baking a cake, it's easy to do at home, but difficult for 2000 people"</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:52237</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/52237.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=52237"/>
    <title>I have a sign in my cube</title>
    <published>2008-09-04T22:29:07Z</published>
    <updated>2008-09-04T22:29:07Z</updated>
    <content type="html">This sign comes up quite often.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sargo.com/joel/_images/NO_META.pdf"&gt;This is the sign&lt;/a&gt;.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:52171</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/52171.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=52171"/>
    <title>Meow, MEOW, meow! Truck.</title>
    <published>2008-09-01T00:47:10Z</published>
    <updated>2008-09-01T00:47:10Z</updated>
    <category term="truck"/>
    <category term="perl"/>
    <category term="meow"/>
    <content type="html">"&lt;b&gt;meow.pl&lt;/b&gt;":&lt;br /&gt;&lt;pre&gt;
#!/usr/bin/perl
# Runs from Mac OS X

my $n = 1;
my @voices = qw(bruce alex fred kathy vicki victoria);

$| = 1;


do {
    $voice = $voices[int(rand($#voices+1))];
    $out = "meow";
    $out =~ s/e/ee/ if (rand() &amp;lt; 0.2);
    $out .= '!' if (rand() &amp;lt; 0.4);
    $out = 'Truck' if (rand() &amp;lt; 0.05) &amp;&amp; ($n &amp;gt; 3);
    system('/usr/bin/say', '-v', $voice, $out);
    $n++;
} while($n &amp;lt; 20);

system('/usr/bin/say', '-v', $voice, 'Truck');
&lt;/pre&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:51939</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/51939.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=51939"/>
    <title>How to print to a DYMO LaserWriter Twin Turbo from a Mac when you only have 2 hours to figure it out</title>
    <published>2008-08-30T23:26:21Z</published>
    <updated>2009-08-23T23:13:45Z</updated>
    <category term="postscript"/>
    <category term="server"/>
    <category term="shdh"/>
    <category term="enscript"/>
    <category term="dymo"/>
    <category term="python"/>
    <content type="html">UPDATE: I've made lots of little updates to this.&lt;br /&gt;&lt;br /&gt;I'm at SHDH26 right now. We now have a fancy login system that prints out name tags for you!&lt;br /&gt;&lt;br /&gt;Tom Harrison, Ernesto S., and David S. had most of the system working last night, with the exception of the automatic label printer. This morning rndmcnlly and I got the printer working in about 2 hours!&lt;br /&gt;&lt;br /&gt;Here is how we did it:&lt;br /&gt;&lt;br /&gt;First we had to get the printer working on a Mac, this was pretty easy. We downloaded the drivers and set up the printer though the normal means.&lt;br /&gt;&lt;br /&gt;After that we wrote the following two files:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;&amp;quot;&lt;b&gt;~/.enscriptrc&lt;/b&gt;&amp;quot;:&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;Media: Label 162 288 10 10 152 278&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Use the command &lt;tt&gt;enscript --list-media&lt;/tt&gt; to make sure that your .enscriptrc is being parsed.&lt;/li&gt;&lt;li&gt;Use &lt;tt&gt;man enscript&lt;/tt&gt; for more info&lt;/li&gt;&lt;li&gt;The numbers are in Postscript points!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;&amp;quot;&lt;b&gt;~/printer_server.py&lt;/b&gt;&amp;quot;:&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;pre&gt;

from twisted.web.resource import Resource
from twisted.web import server
from twisted.internet import reactor

from subprocess import *

class Launcher(Resource):
        isLeaf = True
        def render_POST(self, request):
                names = ['first_name', 'last_name']
                items = map((lambda l: request.args[l][0]), names)
                page = &amp;quot;\n&amp;quot;.join(items)
                p = Popen([&amp;quot;enscript&amp;quot;, &amp;quot;-r&amp;quot;, &amp;quot;-B&amp;quot;, &amp;quot;-f&amp;quot;, &amp;quot;Helvetica35&amp;quot;, &amp;quot;-MLabel&amp;quot;],stdin=PIPE)
                p.stdin.write(page)
                p.stdin.close()
                return page



reactor.listenTCP(1080, server.Site(Launcher()))
reactor.run()
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(&lt;span class='ljuser  ljuser-name_rndmcnlly' lj:user='rndmcnlly' style='white-space: nowrap;'&gt;&lt;a href='http://rndmcnlly.livejournal.com/profile'&gt;&lt;img src='http://l-stat.livejournal.com/img/userinfo.gif' alt='[info]' width='17' height='17' style='vertical-align: bottom; border: 0; padding-right: 1px;' /&gt;&lt;/a&gt;&lt;a href='http://rndmcnlly.livejournal.com/'&gt;&lt;b&gt;rndmcnlly&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp; wrote all the python, I just figured out the enscript syntax)&lt;br /&gt;&lt;br /&gt;Once the files were written, we ran the printer server using the &amp;quot;&lt;tt&gt;python printer_server.py&lt;/tt&gt; command.&lt;br /&gt;&lt;br /&gt;The printer server above listens on port TCP 1080, we had to change the port number because Comcast sucks and blocks that port.&lt;br /&gt;&lt;br /&gt;The server listens on port 1080 for a HTTP POST and prints the value &amp;quot;first_name&amp;quot; on the first line and &amp;quot;last_name&amp;quot; on the second line.&lt;br /&gt;&lt;br /&gt;Labels are printed by the web application sending a HTTP POST to the port of the computer connected to the printer - we had to set up port forwarding to get this working.&lt;br /&gt;&lt;br /&gt;Unfortunately we didn't have time to implement &lt;a href="http://en.wikipedia.org/wiki/Lee_Felsenstein"&gt;Lee Felsenstein&lt;/a&gt;'s suggestion to let people &amp;quot;tag&amp;quot; themselves. We'll have that working by the next SHDH - maybe even just let people go freeform on their tags.&lt;br /&gt;&lt;br /&gt;Tom's end goal for this is to eventually have a &amp;quot;DevHouse Appliance&amp;quot; that other people could easily set up to do the same thing!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:51388</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/51388.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=51388"/>
    <title>Seattle: Day 1</title>
    <published>2008-08-07T22:46:24Z</published>
    <updated>2008-08-07T22:46:24Z</updated>
    <content type="html">Woke up at 05h45, left my apartment at 06h00.&lt;br /&gt;&lt;br /&gt;Arrived at SFO at approximately 07h15, not bad considering that the N Judah was delayed on the way to Civic Center station.&lt;br /&gt;&lt;br /&gt;After clearing the checkpoint, I took some photographs of the brave men and women of the Department of Homeland Security. These men and women put their lives on the line every day to preserve our freedoms and protect America! As I was taking a few pictures, an officer informed me that taking pictures was not allowed, she walked up and tried to grab my camera. It's no wonder that these brave men and women are unappreciated, how can they be appreciated if we can't take pictures of them in action?&lt;br /&gt;&lt;br /&gt;My flight was the first time I've flown Virgin America. What a fantastic airline! It doesn't really get better than playing video games while in flight.&lt;br /&gt;&lt;br /&gt;I took a bus from SEA to Pioneer Square in Downtown Seattle. The &lt;a href="http://www.seattletunnel.org/"&gt;Seattle Transit Tunnel&lt;/a&gt; is quite impressive! I didn't really know where I was or have any plans about what to do - I was reminded of my arrival in Paris, except I could read the signs.&lt;br /&gt;&lt;br /&gt;I eventually found my way to &lt;a href="http://www.trabantcoffee.com/"&gt;Trabant Coffee&lt;/a&gt;, I was lured inside because of a sign outside that was advertising iced coffee made from a Clover coffee machine, I was intregued because of the &lt;a href="http://www.wired.com/gadgets/miscellaneous/magazine/16-08/mf_clover"&gt;article in Wired magazine about the Clover&lt;/a&gt;. The iced coffee didn't taste espically good, but I really appreciated being able to sit down and use the WiFi to plan out my day. &lt;br /&gt;&lt;br /&gt;I was able to figure out that I was only a couple of blocks from the Seattle Underground and the Smith Tower. I also &lt;a href="http://twitter.com/tommusic/statuses/879521047"&gt;surprised to find&lt;/a&gt; that my friend Tom Music was only a few blocks away at a co-working space.&lt;br /&gt;&lt;br /&gt;I decided to just show up at &lt;a href="http://www.giraffelabs.com/"&gt;Giraffe Labs&lt;/a&gt; to visit Tom Music. Tom wasn't there when I arrived, but I did meet Anders Conbere, Theodore Nordsieck and Nathan Kaiser who are all very cool people. Even though I was in a new city and kept thinking that I should probably be doing some sightseeing, I ended up spending several hours at Giraffe Labs - it's the most comfortable co-working space I've been to yet. &lt;br /&gt;&lt;br /&gt;I went to a local cafe that I found on Yelp called &lt;a href="http://zeitgeistcoffee.com/"&gt;Zeitgeist&lt;/a&gt;. I had a fantastic sandwich, ran into Theo again, met up with Adam and Kathleen and went to the Seattle Underground tour.&lt;br /&gt;&lt;br /&gt;The tour was far better than I had imagined. I was expecting the usual tacky tour used to push merchandising. Instead, we had a man named &lt;a href="http://seattlepi.nwsource.com/local/333070_chiefseattle26.html"&gt;Rick Boetel&lt;/a&gt; as our tour guide. Rick had an astonishing working knowledge of the history of the underground that made the tour very intriguing. He was very open to questions and used them as excuses to delve into fascinating side stories.&lt;br /&gt;&lt;br /&gt;After the tour was over, Tom, Adam, Kathleen and I went back to the Trabant cafe to sit around and talk. When we got to the cafe, we found that they were closed. One of their employees, a barista named Alex was preparing for a barista competition. However, instead of turning us away, we were invited into Trabant to sample the drinks that Alex was making. As Alex made drinks, we chatted with a friendly lady named Tatiana. It wasn't until after we left that I realized that &lt;a href="http://www.thestranger.com/seattle/Content?oid=32308"&gt;Tatiana owns Trabant with her husband&lt;/a&gt; - I just assumed she was a co-worker who was sticking around to help Alex.&lt;br /&gt;&lt;br /&gt;While Alex was making drinks, Tatiana gave us all a behind the counter demonstration of how their Clover worked. I had a hot coffee this time, it could be the hype, but it was one of the best cups of coffee I've ever tasted.&lt;br /&gt;&lt;br /&gt;Tatiana and Alex were so friendly and amicable that we ended up spending over an hour chatting with them and tasting Alex's drinks - he had a specialty drink that was amazing, flavors like I've never tasted before.&lt;br /&gt;&lt;br /&gt;After leaving Trabant, we walked Tom back to his car. Adam, Kathleen and I then went to an indian resturant for dinner then took a cab back to the house where Adam and Kathleen live.&lt;br /&gt;&lt;br /&gt;I met the roommates, a cool group of people. I had a great time talking to one of the roommates named Aaron who is a &lt;a href="http://www.spinnakerlabs.com/"&gt;Hadoop expert&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Adam and I were up until about 2am discussing Big Ideas.&lt;br /&gt;&lt;br /&gt;It's far to late in the day, it's time for me to leave the house now.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:50857</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/50857.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=50857"/>
    <title>joel @ 2008-07-23T16:59:00</title>
    <published>2008-07-24T00:00:00Z</published>
    <updated>2008-07-24T00:00:00Z</updated>
    <lj:music>Katy Perry - I kissed a girl</lj:music>
    <content type="html">Now playing on the PBwiki office radio</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:joel:50587</id>
    <link rel="alternate" type="text/html" href="http://joel.livejournal.com/50587.html"/>
    <link rel="self" type="text/xml" href="http://joel.livejournal.com/data/atom/?itemid=50587"/>
    <title>A reducer for uniq -c</title>
    <published>2008-07-03T23:39:39Z</published>
    <updated>2008-07-03T23:39:39Z</updated>
    <category term="sort"/>
    <category term="map"/>
    <category term="reduce"/>
    <category term="uniq"/>
    <content type="html">If you think of "grep | sort | uniq -c" as a "map" operation, then I wrote a "reducer" for that. I do enough counting with grep | sort | uniq -c on really large files that I finally broke down and wrote a simple perl script that in some cases can dramatically speed up a query. For example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Compare this:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;$ time zcat /tmp/29M_of_logfiles | cut -d ' ' -f 1 | sort | uniq -c&lt;br /&gt;[results here]&lt;br /&gt;&lt;br /&gt;real	1m36.721s&lt;br /&gt;user	1m38.942s&lt;br /&gt;sys	0m1.600s&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;To this:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;$ time zcat /tmp/29M_of_logfiles | cut -d ' ' -f 1 | uniq -c | perl uniq_sum.pl &lt;br /&gt;[exact same results here]&lt;br /&gt;&lt;br /&gt;real	0m17.146s&lt;br /&gt;user	0m15.437s&lt;br /&gt;sys	0m0.980s&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Here's the source code, I wrote it at PBwiki, but I'm putting it online with permission from David Weekly.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;# uniq_sum.pl: a "reducer" for 'uniq -c'&lt;br /&gt;# &lt;br /&gt;# for example: you could do this:&lt;br /&gt;# $ grep THING * | sort | uniq -c&lt;br /&gt;#&lt;br /&gt;# but this would be faster (because you don't need to sort lots of lines);&lt;br /&gt;# $ (for file in *; do grep THING $file | uniq -c; done) | perl uniq_sum.pl&lt;br /&gt;#&lt;br /&gt;# Copyright 2008 PBwiki, Inc&lt;br /&gt;#&lt;br /&gt;# Author: Joel Franusic&lt;br /&gt;&lt;br /&gt;my $field_length = 0;&lt;br /&gt;my %hash;&lt;br /&gt;&lt;br /&gt;while(&amp;lt;&amp;gt;) {&lt;br /&gt;  chomp;&lt;br /&gt;  next unless($_ =~ /^(\s+\d+)\s(\S.+)$/);&lt;br /&gt;  my @field = split '', $1;&lt;br /&gt;  $field_length = $#field if($#field &amp;gt; $field_length);&lt;br /&gt;  $hash{$2} += $1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;foreach my $key (sort keys %hash) {&lt;br /&gt;  printf("%*d %s\n", $field_length, $hash{$key}, $key);&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;</content>
  </entry>
</feed>
