<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>

		<title>jtolds.com</title>
		<link>http://www.jtolds.com/</link>
		<description>JT Olds' RSS Feed</description>

		<language>en-us</language>
		<copyright>Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License</copyright>

<item>
	<title><![CDATA[2011 in pictures]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2012/1/4/2011-in-pictures]]></link>

	<guid>1325649451</guid>
	<pubDate>Wed, 4 Jan 2012 03:57:31 +0000</pubDate>
	<description><![CDATA[<p><img src="/static/newsletter/images/2011/00.jpg"/></p>
<p><img src="/static/newsletter/images/2011/01.png"/></p>
<p><img src="/static/newsletter/images/2011/02.png"/></p>
<p><img src="/static/newsletter/images/2011/03.jpg"/></p>
<p><img src="/static/newsletter/images/2011/04.jpg"/></p>
<p><img src="/static/newsletter/images/2011/05.jpg"/></p>
<p><img src="/static/newsletter/images/2011/06.jpg"/></p>
<p><img src="/static/newsletter/images/2011/07.jpg"/></p>
<p><img src="/static/newsletter/images/2011/08.jpg"/></p>
<p><img src="/static/newsletter/images/2011/09.jpg"/></p>
<p><img src="/static/newsletter/images/2011/10.jpg"/></p>
<p><img src="/static/newsletter/images/2011/11.jpg"/></p>
<p><img src="/static/newsletter/images/2011/12.jpg"/></p>
<p><img src="/static/newsletter/images/2011/13.png"/></p>
<p><img src="/static/newsletter/images/2011/14.png"/></p>
<p><img src="/static/newsletter/images/2011/15.jpg"/></p>
<p><img src="/static/newsletter/images/2011/16.jpg"/></p>
<p><img src="/static/newsletter/images/2011/17.jpg"/></p>
<p><img src="/static/newsletter/images/2011/18.jpg"/></p>
<p><img src="/static/newsletter/images/2011/19.jpg"/></p>
<p><img src="/static/newsletter/images/2011/20.png"/></p>
<p><img src="/static/newsletter/images/2011/21.jpg"/></p>
<p><img src="/static/newsletter/images/2011/22.png"/></p>
<p><img src="/static/newsletter/images/2011/24.png"/></p>
<p><img src="/static/newsletter/images/2011/23.png"/></p>
<p><img src="/static/newsletter/images/2011/25.jpg"/></p>
<p><img src="/static/newsletter/images/2011/26.jpg"/></p>
<p><img src="/static/newsletter/images/2011/27.jpg"/></p>
<p><img src="/static/newsletter/images/2011/28.jpg"/></p>
<p><img src="/static/newsletter/images/2011/29.jpg"/></p>
<p><img src="/static/newsletter/images/2011/30.jpg"/></p>
<p><img src="/static/newsletter/images/2011/31.jpg"/></p>
<p><img src="/static/newsletter/images/2011/32.jpg"/></p>
<p><img src="/static/newsletter/images/2011/33.jpg"/></p>
<p><img src="/static/newsletter/images/2011/34.jpg"/></p>
<p><img src="/static/newsletter/images/2011/35.jpg"/></p>

<p>To everyone who made my year the amazing and wonderful year it was, thank you so much!</p>]]></description>
</item>

<item>
	<title><![CDATA[Mozy Code Launch]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2010/10/21/mozy-code-launch]]></link>

	<guid>1287691125</guid>
	<pubDate>Thu, 21 Oct 2010 19:58:45 +0000</pubDate>
	<description><![CDATA[<p>I've been working on this for what feels like years, but we finally got through all our internal hurdles.</p>
<p>Check out my post on the <a href="http://mozy.com/blog/announcements/open-source-and-mozy-the-debut-of-mozy-code/">Mozy Blog</a>.</p>]]></description>
</item>

<item>
	<title><![CDATA[Thoughts on Go]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2010/9/3/thoughts-on-go]]></link>

	<guid>1283477196</guid>
	<pubDate>Fri, 3 Sep 2010 01:26:36 +0000</pubDate>
	<description><![CDATA[<p>This is the first post of a new newsletter category entitled <a href="http://www.jtolds.com/newsletter/category/research">Research</a>. I aim to update Thursdays with what will likely end up being only mild regularity.</p>

<p>I'm looking at <a href="http://golang.org/">Go</a> to see what people are currently doing with programming languages to try and make parallel computing easier. I've only spent two days with Go, but here are my most salient impressions.</p>

<ul>
<li>This isn't news, but Go is warty. It feels incredibly inconsistent across almost all aspects of the language. It kinda seems like the language design strategy was to respond to problems with tweaks instead of reconsidering the design. I read countless posts about this initial reaction when Go was first launched, so I won't belabor the point.</li>
<li>Goroutines are a nice idea, but as far as I can tell are simply lightweight threads, maybe more like fibers (who knows if they swap around). They have this explanation saying "goroutines are different than all these other things like coroutines and threads!" but their argument wasn't compelling. The <code>go</code> keyword seems to be equivalent to forking a command to the background in bash (like with &amp;, admittedly in the same address space), but with no job control. You can't say you want to rejoin, wait, block, nothing. To provide constructs to mimic that, Go gives you:</li>
<li>Channels. First-order channels are actually a pretty sweet idea, and certainly the thing I was most excited about (message-passing FTW!). Certainly they got stuff right: any type can be passed across a channel, including other channels. That's pretty sweet. And they do the obvious thing where writing to a channel blocks your goroutine until there's space in the buffer, and reading from a channel blocks until there's stuff to read; but there's a huge caveat that just sort of kills it for me: channels are forever. Once you make a channel, as long as you have any reference to it, it is assumed to be open. Even if no one is writing to the channel you're reading from, your read will block indefinitely. So, that sucks. My suggestion for fixing this problem in a minute.</li>
<li>The <code>defer</code> keyword is pretty cool. I'm not sure I'm sold on its complete replacement of destructors, but I do like the idea. Basically - you can schedule an operation to run at the end of a function call, LIFO. Because this gives you most of the features people typically use destructors for, objects in Go don't have destructors.</li>
<li>The thing I'm far and away most sold on is Go's implementation of interfaces. Go does not have class hierarchies; instead, Go does what amounts to static duck typing. You provide an interface, which is a list of object methods, and if the object you have has implementations of all of the same method signatures, it is considered an object that implements that interface. So, that's pretty sweet for dependency injection and flexibility, without having to worry about inheritance trees (or even multiple inheritance) or any other complications class hierarchies give you, to much the same end.</li>
<li>Now, this is just speculation from my light reading, but it appears you can add methods to library objects in your own code. That's something the Scala designers have always been proud of: basically unsealed method sets on an object. The syntax for adding an object method is done after the object's definition much like a regular function, and a few of the code examples even have code that adds new methods to built-in types. It's unclear to me if you have to typedef the built-in type to some new typename to make use of this behavior though. Either way, if I understand correctly, that's pretty sweet. Being able to add your own methods to objects of some other package definitely eases friction between library developers and library users.</li>
<li>It appears you can assign variables of many types the nil value. This is terrible and gross. Unfortunately, this means that object methods need to check to make sure the object they were called on is not nil it seems (much of the tutorial code involves nil checks in method definitions).</p>
</ul>

<p>So, let's talk about how to fix the channel issue I mentioned up above. I think the knee-jerk reaction to the idea of a channel is to make channels full duplex. This makes some sense in an IPC context (certainly TCP), but the more I think about it, the less sense I think it makes inside of a process. Most of the channel idioms I've seen so far in Go code don't use the bidirectional nature of channels. Channels seem to be used to either write only or read only. So, if we exploit that, then we can very naturally introduce the concept of closing a channel. Instead of <code>make(chan int)</code> (or equivalent) returning just the new channel, it should instead return the input side and the output side of the channel separately. Then, specific sides of the channel can be force-closed or closed when garbage collected, and the other side of the channel can then throw an error. Note that while I realize you can close any single direction of a channel without requiring the two objects instead of one, having a specific channel-in object and a channel-out object allows most of this channel closing maintenance to be handled by the garbage collector.</p>
<p>Allowing for closing channels, or signaling that a channel is over ("I've generated all the data I can, cap'n!") allows for idioms that indefinitely compute some string of values, but only until it's no longer needed. Conversely, you could make channels that return a limited amount of data, and the reader could easily ascertain that the data stream has ended. Right now, if you create a goroutine that continuously fills or reads from a channel, it will do so until the program ends, at which point it is forcibly terminated. Of course, it is currently possible to work around this by providing another control channel to the goroutine, but that seems (like much of the rest of the language) kind of hacky. If they did this right you could simulate lazy lists or delayed computations in a nicely abstracted and parallel way.</p>
<p>I suppose the suggestion of a channel that you're reading from or writing to closing and throwing an error brings up the whole issue of exceptions. Go doesn't have exceptions, and instead sticks with the C idiom of return values indicating error status. Luckily, Go provides multiple return value support so you can do things like <code>rv, ok = call()</code>, and then check the value of <code>ok</code> for success; however, I really think exception throwing would be useful here, mainly in simplifying boiler-plate code. It's not like you can't implement exceptions with goroutines or something.</p>
<p>Anyway, that's my impression. I really wish Go wasn't so warty, because it seems like it could be real cool. On the other hand, I appreciate how much work it leaves to do in this field :).</p>]]></description>
</item>

<item>
	<title><![CDATA[Another crazy dream]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2010/1/10/another-crazy-dream]]></link>

	<guid>1263088452</guid>
	<pubDate>Sun, 10 Jan 2010 01:54:12 +0000</pubDate>
	<description><![CDATA[<p><i>I found the following story on my phone this morning. Thank heavens I have a full keyboard on my phone I guess. I've slightly edited it for clarity.</i></p>

<p>I have to write this down before I forget more of it.</p>

<p>I just woke up from watching this amazing Michael Bay/Christopher Guest collaborative summer blockbuster. The only bit of background I remember is that there are these aliens living among us disguised as humans. The main character of the show was this one who looked like one of my professors from the University of Minnesota named Jeremy Rose. Most of the dream has completely faded by now, but I remember some of the final scene. </p>

<p>The Jeremy Rose alien, who I guess was named George Lazlo, just narrowly avoided being destroyed by the evil alien who was hunting him. He did this by turning his 1960s car into a large robot suit and throwing the evil alien somewhere. I don't really remember what happened to the evil alien. Anyway, the Jeremy Rose looking alien is standing there and is negotiating a peace treaty with the local authorities and decides to turn himself in because he has just discovered he is both the last of his kind and the last of the Methodists. So he says, "I, George Lazlo, as the last [some crazy alien race name] and the last Methodist, resolve to live peacefully hence forward," and then he works out details for returning the scrappy band of college friends he made to their familes.</p>

<p>The movie closed with him living in a field with his dog looking at the sky.</p>

<p>I woke up thinking, "this is a fantastic movie! I love how he was so dedicated to being a Methodist," and then it all started to fade and I realized in horror that it wasn't a real movie.</p>

<p>Dear Christopher Guest and Michael Bay, please figure out the rest of the movie as I dreamed it and make it. Please. <i>The Last Methodist</i>. Instant summer blockbuster.</p>]]></description>
</item>

<item>
	<title><![CDATA[Cognitive Dissonance]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2009/4/19/cognitive-dissonance]]></link>

	<guid>1240182618</guid>
	<pubDate>Sun, 19 Apr 2009 23:10:18 +0000</pubDate>
	<description><![CDATA[<p>I just got an email from a friend with the following quote. I'm going to leave the things she bolded as-is.</p>

<p>"Let us consider persons at one extreme end of the range of tolerance for dissonance, that is, persons for whom dissonance is especially painful. One might expect that in such extreme instances a person would act so as to avoid the occurrence of dissonance. Thus, for example, he would undoubtedly have experienced the unpleasantness that exists following a decision since there is almost always dissonance. If such a person, for whom dissonance is extremely painful, attempts to avoid the occurrence of dissonance, <b>one would expect to observe that he tried to avoid making decisions or even becomes incapable of making decisions.</b> At this extreme, of course, it becomes a pathological affair...One would also expect that such a person would react very vigorously to the introduction of dissonance into his cognition. This must follow if, indeed, the inability to make decisions is a reaction to fear of dissonance. There is at least one kind of situation where a person cannot avoid dissonance unless he <b>makes an absolute recluse out of himself</b>. That is, occasionally people discuss things, have disagreements, and voice their disagreements. Since the knowledge that someone like oneself holds one opinion is dissonant with holding a contrary opinion, a person for whom dissonance is extremely unpleasant would be expected to react very vigorously to the expression of disagreement from others. <b>He might argue vigorously, be dogmatic, be stubborn, and the like.</b> This syndrome of inability to make decisions, of being very 'decided' and 'one-sided' about issues, and of reacting vigorously in the face of disagreement from others, is one which would be consistent with an interpretation that the person has such low tolerance for dissonance that he has learned to react in anticipation of it...There are other, milder ways of reacting in anticipation of dissonance in order to avoid it. There are persons who, <b>in avoiding post-decision dissonance, make decisions without making them.</b> This can be done sometimes by <b>assuming a passive role</b> with respect to the environment so that, at least in some instances, <b>decisions get made because the ground, so to speak, has moved under one's feet. Thus the decision is made but the person is not responsible for it</b>...such avoidance of dissonance should exist only for persons who have very low tolerance for dissonance coupled with relatively inefficient mechanisms for reducing dissonance once it occurs."</p>

<p>From <a href="http://books.google.com/books?id=voeQ-8CASacC"><i>A Theory of Cognitive Dissonance</i></a> by Leon Festinger.</p>

<p>I don't know <i>anyone</i> like that. That sounds completely unusual.</p>]]></description>
</item>

<item>
	<title><![CDATA[Cellular Automata Presentation]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2009/4/16/cellular-automata-presentation]]></link>

	<guid>1239914633</guid>
	<pubDate>Thu, 16 Apr 2009 20:43:53 +0000</pubDate>
	<description><![CDATA[<p>I'm presenting very introductory Cellular Automata in <a href="http://www.eng.utah.edu/~cs6100/">CS6100</a> today.</p>

<p>I'm posting my slide deck <a href="http://files.getdropbox.com/u/129990/googlepages/pres.pdf">here</a>.</p>

<p><b>Update:</b> the <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Game of Life</a> simulator I used for the examples was called <a href="http://golly.sourceforge.net/">Golly</a> (<a href="http://packages.ubuntu.com/intrepid/golly">packaged</a> with <a href="http://www.ubuntu.com/">Ubuntu</a> 8.10), and comes with many of the sample patterns I showed. The basic patterns I showed can be found on the Game of Life's <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Wikipedia page</a> and <a href="http://mathworld.wolfram.com/Life.html">Mathworld entry</a>.</p>

<p>The Turing machine pattern came with Golly, but is fully described by its author, Paul Rendell, <a href="http://rendell-attic.org/gol/tm.htm">on his website</a>. Additionally, <a href="http://www.igblan.free-online.co.uk/igblan/ca/index.html">a similar page</a> can be found for Paul Chapman's Universal Minsky Register Machine (with Golly-supported pattern files).</p>

<p>The Wikipedia is also quite thorough with its discussion of <a href="http://en.wikipedia.org/wiki/Rule_110">Rule 110</a> <a href="http://en.wikipedia.org/wiki/Rule_110#The_proof_of_universality">universality</a>, though <a href="http://www.wolframscience.com/nksonline/toc.html">NKS</a> may have a potentially <a href="http://www.wolframscience.com/nksonline/section-11.8">more accessible discussion</a> (<a href="http://www.amazon.com/review/RUGSCP3XBNBUV/ref=cm_cr_rdp_perm">if</a> <a href="http://www.amazon.com/review/R4IW30RUCAVBK/ref=cm_cr_rdp_perm">you</a> <a href="http://www.amazon.com/review/R6B8KO2M32P8G/ref=cm_cr_rdp_perm">can handle it</a>).</p>]]></description>
</item>

<item>
	<title><![CDATA[I finally figured out Twitter]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2009/3/28/i-finally-figured-out-twitter]]></link>

	<guid>1238210811</guid>
	<pubDate>Sat, 28 Mar 2009 03:26:51 +0000</pubDate>
	<description><![CDATA[<p><b>Update:</b> oh man: <a href="http://code.google.com/p/tircd/">http://code.google.com/p/tircd/</a></p>

<p>Initially, I was planning on delaying posting this article until I wrote the tool I describe near the bottom. Then I realized that neither would ever happen, and so I decided I should cut my losses and just post the article.</p>

<p>If you're like me, you keep hearing about <a href="http://www.twitter.com/">Twitter</a>. Also, if you're like me, you're reading this and thinking "oh, no, not another thing to read about Twitter." Even more, if you're like how I was earlier this week, you'd be thinking "great, JT has sold out now, too."</p>

<p>It's true, I think I've figured it out. And it involved a paradigm shift in how I think about it.</p>

<p>For the entire history of Twitter, my attitude has been "stay off my lawn!" Here's a product that is solely devoted to 140 character <i>status updates</i>? Worthless. And they can't keep it running? Freaking amateur hour. What a joke. Like, I don't get it. The status that I have up there already is my status. Why would I want to change it? There is this huge psychological barrier preventing me from changing my status. It's my status, it didn't change. It's how I'm feeling. Furthermore, what a bunch of noise following other people's statuses. I just didn't get why this is cool. Why in the world would I want <i>my</i> status to be a "retweet" of someone else's?</p>

<p>Well, this week, I decided this was no longer something to take lightly. Since my job is dependent on my ability to learn new technology and adapt quickly, I started to get concerned about how I was just not getting it, and I needed to figure it out. I've had a Twitter account since April 2007. I've had 7 updates since then. It just wasn't interesting to me. But that's two years of me not getting an (evidently) groundbreaking new communication medium. Uh oh. Is this just a personality thing? I mean, clearly I'm not getting something; <a href="http://www.telegraph.co.uk/scienceandtechnology/technology/twitter/5038203/Jennifer-Aniston-ended-relationship-with-John-Mayer-because-of-his-Twitter-obsession.html">John Mayer chose Twitter over Jennifer Aniston</a>.<sup>1</sup> Somehow some engineer figured out the magical, albeit totally confusing, formula to appeal to the rest of the social world? Maybe extroverts like updating their status? Maybe the impermanence of the Twitter status has some allure to others that I find lacking?</p>

<p>It turns out, the trick is that Twitter is <i>not</i> a status update website. I mean, it may have been initially, but it's been co-opted for something altogether entirely different.</p>

<p>Twitter is the world's largest chatroom.</p>

<p>Imagine for a minute that you have a chatroom interface. On the bottom is where you type your messages. The main area is where you can see things you've said, and what others have said. Pretty standard. On the right, though, is traditionally a list of users in the room, and you can see the messages that any of them type in your main message box. This does not scale to the size of the internet. Imagine being in a crowded room and everyone had a microphone connected to the speaker system. Yeah, that doesn't work with auditoriums full of people. Or internets.</p>

<p>Instead, in large rooms, typically there is a sphere of communication to which you are privy. Loud people you can hear from far away, and most of your friends are all sort of clustered around you. You can hear things some other people say, and some people can hear what you say. But not everyone can hear everyone.</p>

<p>This is Twitter. Same chat room interface, but instead of just a list of everyone in the room, there's two lists: people you can hear, and people who can hear you. Want to take something you heard and make sure everyone who can hear you heard it? That's a retweet. The things you say? Those are your twitter statuses. Your followers? People who can hear you. The people you follow? People you can hear. It's a perfect analogy, and the perfect way to design a large scale chatroom.</p>

<p>Except Twitter isn't perfect. They designed it for what I initially thought it was for, though everyone uses it for this other thing. So it's slow. It gets overwhelmed. There's much higher latency than a typical chatroom. And, as far as I know, no one has actually made the interface I've described.</p>

<p>So, I think my next project will be this Twitter interface, and who knows, maybe I'll start using Twitter. It shouldn't be too hard, just some Javascript on top of Twitter APIs. Further down the road, a better idea would be to design a better-Twitter: an internet scale chatroom like the one Twitter is being used for, only designed for that purpose.</p>

<p>So, now that I <i>get it</i>, I might not be so crusty and curmudgeonly about current uses of Twitter. Yay.</p>

<p><sup>1.</sup> Not entirely true. I mean, it looked over anyway. John wasn't interested.</p>]]></description>
</item>

<item>
	<title><![CDATA[Back the F:\ up!]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2008/12/2/back-the-f-up]]></link>

	<guid>1228238784</guid>
	<pubDate>Tue, 2 Dec 2008 17:26:24 +0000</pubDate>
	<description><![CDATA[<p><b>Hard drive primer</b></p>

<p>First, a bit about how hard drives work.</p>

<p>A hard drive is simply a circular disk (or a collection of them), kind of like a CD, except the data is stored magnetically instead of optically. To read the magnetic data, a little arm with a magnet on the end sticks out over the disk while the disk spins. The little arm reads data off the disk as the disk spin past.</p>

<p>The disk is moving <i>very</i> fast (common disks spin at 7,200 rpm, or about 86 miles per hour at the edge of a 3.5" disk). The arm is also <i>very</i> close to the disk (the head of the arm is 3-7 millionths of an inch away from the disk in modern drives, floating on a pocket of air). Scaled up, hard drives move at speeds similar to an airplane traveling nearly 16 times the speed of sound (mach 16) a width of a human hair (18 micrometers) above the ground!</p>

<p>So, as you can imagine, the worst thing that could possibly happen to a hard drive is for this drive head to crash into the disk, <i>destroying</i> your ability to read the data and scratching up the disk platter. I suppose it's worse if you shoot the drive with a shotgun.</p>

<p><i>But only barely.</i></p>

<p>It's very hard for hard drive manufacturers to make disks that don't crash when they're dropped while spinning. They try, but it's just hard to do. Recent laptop drives have gone as far as putting motion detection in so the drive head can be locked away from the disk platter if the drive detects that it's falling. Laptop makers generally recommend that you keep your laptop off (thereby locking the disk head) during any traveling. I sort of think that's silly though. What's the point of a laptop?</p>

<p><b>Calamity!</b></p>

<p>So, this week, my sister's laptop suffered an untimely and completely accidental calamity. As the laptop hit the ground, I thought, "boy, it's a good thing it's off."</p>

<p>It wasn't.</p>

<p>Then I thought, "boy, it's a good thing her brother <a href="http://www.mozy.com/">works for a backup company</a> and backed up all her homework for her."</p>

<p>I didn't.</p>

<p>I mean, I work for <a href="http://www.mozy.com/">Mozy</a>, but I'm one of those crazy <a href="http://en.wikipedia.org/wiki/Linux">Linux</a> guys, and Mozy currently doesn't have a Linux client. As a result, I don't use Mozy on my own laptop, and therefore often forget to recommend it to others. I'm a big fan of the adage "practice what you preach;" in this case, I argue software companies should eat their own dogfood and use their own products. Whoops! I guess I'm the odd man out here. I am totally practicing some of the things I'm preaching already: building incredibly distributed, fault tolerant, relational metadata management systems to increase performance for Mozy's backend is fun! But I haven't been practicing or preaching "<a href="http://backthefup.net/">Back the F:\ up!</a>".</p>

<p>Well, this week, that changed. Be safe, use <a href="http://www.mozy.com/">Mozy</a>.</p>]]></description>
</item>

<item>
	<title><![CDATA[Crazy Dream]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2008/11/21/crazy-dream]]></link>

	<guid>1227250421</guid>
	<pubDate>Fri, 21 Nov 2008 06:53:41 +0000</pubDate>
	<description><![CDATA[<p>I just wanted to quickly share a book cover from a dream I had a few nights ago that I attempted to reconstruct as best I could. All I can say is that, evidently, the war in Iraq had a pretty seriously good reason: dinosaurs aren't extinct and it's been a massive government cover-up. Or so I tell myself while sleeping.</p>

<p><img src="/newsletter/images/spontaneous_raptors.jpg" alt="Dr. Andrew Weil's Spontaneous Raptor Attacks"/><br/>Yes, I seriously dreamed this.</p>

<p>Dr. Weil's advice was to wear white, not to avoid the raptors, but to assist doctors in quickly locating the inevitable flesh wounds.</p>]]></description>
</item>

<item>
	<title><![CDATA[Retrospect]]></title>
	<author>JT Olds</author>

	<link><![CDATA[http://www.jtolds.com/newsletter/2008/8/24/retrospect]]></link>

	<guid>1219549590</guid>
	<pubDate>Sun, 24 Aug 2008 03:46:30 +0000</pubDate>
	<description><![CDATA[In retrospect, I think <a href="http://politics.slashdot.org/comments.pl?sid=221768&cid=17970082">this</a> joke is even more funny.<br/>
<br/>
I wish Slashdot allowed replies to old comments.]]></description>
</item>

	</channel>
</rss>

