<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Kevin's random thoughts - tech</title>
  <id>tag:kbullock.ringworld.org,2008:mephisto/tech</id>
  <generator version="0.8.0" uri="http://mephistoblog.com">Mephisto Drax</generator>
  <link href="http://kbullock.ringworld.org/feed/tech" rel="self" type="application/atom+xml"/>
  <link href="http://kbullock.ringworld.org/tech" rel="alternate" type="text/html"/>
  <updated>2008-11-13T20:03:20Z</updated>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-11-13:856</id>
    <published>2008-11-13T20:02:00Z</published>
    <updated>2008-11-13T20:03:20Z</updated>
    <category term="tech"/>
    <category term="assume"/>
    <category term="list"/>
    <category term="rails"/>
    <category term="series"/>
    <link href="http://kbullock.ringworld.org/2008/11/13/rails-assumptions" rel="alternate" type="text/html"/>
    <title>Rails assumptions</title>
<content type="html">
            &lt;p&gt;&lt;em&gt;Second in what's now a series of &quot;list&quot; posts. First &lt;a href=&quot;/2008/11/12/2008-web-design-distinctives&quot; title=&quot;2008 Web design distinctives&quot;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Standard assumptions in the Rails community:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Working in a &lt;a href=&quot;http://37signals.com/&quot;&gt;small start-up consultancy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.apple.com/&quot;&gt;Mac laptop&lt;/a&gt; for development&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://macromates.com/&quot;&gt;TextMate&lt;/a&gt; for editing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/&quot;&gt;git&lt;/a&gt; for version control&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.mysql.com/&quot;&gt;MySQL&lt;/a&gt; for database backend&lt;/li&gt;
&lt;li&gt;Deployment on a hosted &lt;a href=&quot;http://en.wikipedia.org/wiki/Virtual_private_server&quot; title=&quot;Virtual Private Server - Wikipedia&quot;&gt;VPS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&quot;Application&quot; means &quot;&lt;strong&gt;&lt;em&gt;Web&lt;/strong&gt;&lt;/em&gt; application&quot;&lt;/li&gt;
&lt;li&gt;Any Web site you could want to develop is a Web &lt;strong&gt;&lt;em&gt;application&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://java.sun.com/&quot;&gt;Java&lt;/a&gt; background&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As &lt;a href=&quot;/2008/11/12/2008-web-design-distinctives&quot; title=&quot;2008 Web design distinctives&quot;&gt;before&lt;/a&gt;, add your own in the &lt;a href=&quot;/2008/11/12/2008-web-design-distinctives#comments&quot;&gt;comments&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-11-12:855</id>
    <published>2008-11-12T17:09:00Z</published>
    <updated>2008-11-13T20:04:38Z</updated>
    <category term="tech"/>
    <category term="2008"/>
    <category term="css"/>
    <category term="design"/>
    <category term="ems"/>
    <category term="layout"/>
    <category term="web 2.0"/>
    <category term="web design"/>
    <link href="http://kbullock.ringworld.org/2008/11/12/2008-web-design-distinctives" rel="alternate" type="text/html"/>
    <title>2008 Web design distinctives</title>
<content type="html">
            &lt;p&gt;&lt;em&gt;First in what's now a series of &quot;list&quot; posts. Next &lt;a href=&quot;/2008/11/13/rails-assumptions&quot;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gradients&lt;/li&gt;
&lt;li&gt;Georgia for headings&lt;/li&gt;
&lt;li&gt;Large-surface-area navigation tabs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/emastic/&quot; title=&quot;Emastic&quot;&gt;Design&lt;/a&gt; on a &lt;a href=&quot;http://960.gs/&quot; title=&quot;960 Grid System&quot;&gt;grid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rich but totally random stock photos&lt;/li&gt;
&lt;li&gt;Subtly patterned backgrounds&lt;/li&gt;
&lt;li&gt;Everything in &lt;a href=&quot;http://jontangerine.com/log/2007/09/the-incredible-em-and-elastic-layouts-with-css&quot; title=&quot;The Incredible Em &amp;amp; Elastic Layouts with CSS&quot;&gt;ems&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add others in comments. Preferrably with links to examples.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-11-03:851</id>
    <published>2008-11-03T17:04:00Z</published>
    <updated>2008-11-03T20:25:29Z</updated>
    <category term="tech"/>
    <category term="hg"/>
    <category term="scm"/>
    <category term="svn"/>
    <link href="http://kbullock.ringworld.org/2008/11/3/subversion-to-mercurial" rel="alternate" type="text/html"/>
    <title>Subversion to Mercurial</title>
<summary type="html">&lt;p&gt;I've been working on migrating at least some of my work projects from &lt;a href=&quot;http://subversion.tigris.org/&quot; title=&quot;Subversion&quot;&gt;svn&lt;/a&gt; to &lt;a href=&quot;http://www.selenic.com/mercurial/&quot; title=&quot;Mercurial&quot;&gt;hg&lt;/a&gt;. Most of my projects are relatively simple and not very branchy, so converting them was a matter of doing:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ hg convert svn://my-repo.example.com/svn/project/trunk project
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Some of my bigger projects, though, made the &lt;a href=&quot;http://www.selenic.com/mercurial/wiki/index.cgi/ConvertExtension?highlight=%28convert%29&quot; title=&quot;Mercurial: ConvertExtension&quot;&gt;convert extension&lt;/a&gt; choke on my many branches. For these I resorted to &lt;a href=&quot;http://pypi.python.org/pypi/hgsvn&quot; title=&quot;hgsvn&quot;&gt;hgsvn&lt;/a&gt;, which converts one branch at a time. For the benefit of others, here's documentation of my process. &lt;em&gt;[Ed. note: now cleaned up a bit. Let me know if it's unclear.]&lt;/em&gt;&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;I've been working on migrating at least some of my work projects from &lt;a href=&quot;http://subversion.tigris.org/&quot; title=&quot;Subversion&quot;&gt;svn&lt;/a&gt; to &lt;a href=&quot;http://www.selenic.com/mercurial/&quot; title=&quot;Mercurial&quot;&gt;hg&lt;/a&gt;. Most of my projects are relatively simple and not very branchy, so converting them was a matter of doing:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ hg convert svn://my-repo.example.com/svn/project/trunk project
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Some of my bigger projects, though, made the &lt;a href=&quot;http://www.selenic.com/mercurial/wiki/index.cgi/ConvertExtension?highlight=%28convert%29&quot; title=&quot;Mercurial: ConvertExtension&quot;&gt;convert extension&lt;/a&gt; choke on my many branches. For these I resorted to &lt;a href=&quot;http://pypi.python.org/pypi/hgsvn&quot; title=&quot;hgsvn&quot;&gt;hgsvn&lt;/a&gt;, which converts one branch at a time. For the benefit of others, here's documentation of my process. &lt;em&gt;[Ed. note: now cleaned up a bit. Let me know if it's unclear.]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;First, create a clean directory to hold all of the converted trees. Then use hgsvn to convert the trunk:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;~ $ mkdir project &amp;amp;&amp;amp; cd project
~/project $ hgimportsvn svn://my-repo.example.com/svn/project/trunk
...
~/project $ (cd trunk &amp;amp;&amp;amp; hgpullsvn)
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now do the same to convert each branch:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;~/project $ mkdir branch-1 &amp;amp;&amp;amp; cd branch-1
~/project $ hgimportsvn svn://my-repo.example.com/svn/project/branches/branch-1
...
~/project $ (cd branch-1 &amp;amp;&amp;amp; hgpullsvn)
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Once you've got all the branches converted, you can merge them into one big named-branch repository (if you roll that way). Since hgsvn preserves the ancestry of your branches from where they split from trunk, it's a sensible operation to merge them all together. This is optional though; if you want to keep each branch as a separate directory, you can.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;~/project $ hg clone trunk whole-project
~/project $ cd whole-project
~/project/whole-project $ hg pull ../branch-1
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Repeat the pull for each branch. Note that the logs might appear a bit out-of-order afterward compared to the svn log. The logs for each branch will be brought in as a chunk, not interleaved with other branches' logs in commit-date order.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-09-09:814</id>
    <published>2008-09-09T18:01:00Z</published>
    <updated>2008-09-09T18:01:44Z</updated>
    <category term="tech"/>
    <category term="monkey patching"/>
    <category term="ruby"/>
    <category term="syntax"/>
    <link href="http://kbullock.ringworld.org/2008/9/9/too-much-cleverness" rel="alternate" type="text/html"/>
    <title>Too much cleverness</title>
<content type="html">
            &lt;p&gt;&lt;a href=&quot;http://www.datamapper.org/&quot; title=&quot;DataMapper&quot;&gt;DataMapper&lt;/a&gt; is, in general, pretty cool, but like most Ruby developers lately, its developers seem to have seen all the &quot;syntactic&quot; fun you can have with the language and just taken it too far (&quot;syntactic&quot; in quotes because Ruby's syntax is actually fixed). Here's how DataMapper expects conditions to queries:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;exhibitions = Exhibition.all(:run_time.gt =&amp;gt; 2, :run_time.lt =&amp;gt; 5)
# =&amp;gt; SQL conditions: 'run_time &amp;gt; 1 AND run_time &amp;lt; 5'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And it does the same thing for &lt;code&gt;ORDER BY&lt;/code&gt; clauses:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@zoos_by_tiger_count = Zoo.all(:order =&amp;gt; [:tiger_count.desc])
# in SQL =&amp;gt;  select * from zoos ORDER BY tiger_count DESC
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;They actually defined methods on the Symbol class called &lt;code&gt;lt&lt;/code&gt;, &lt;code&gt;gt&lt;/code&gt;, &lt;code&gt;like&lt;/code&gt;, &lt;code&gt;not&lt;/code&gt;, &lt;code&gt;in&lt;/code&gt;, etc. This is &lt;a href=&quot;http://en.wikipedia.org/wiki/Monkey_patch&quot;&gt;monkey patching&lt;/a&gt; almost at its worst. What use, in any Ruby code outside of an argument hash to DataMapper model, is being able to say &lt;code&gt;:foobar.like(:a_duck)&lt;/code&gt; ?&lt;/p&gt;

&lt;p&gt;One example of &lt;em&gt;good&lt;/em&gt; monkey patching was (I think) introduced by Rails: the method &lt;code&gt;Object#blank?&lt;/code&gt;, defined (basically) thus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Object
  def blank?
    nil? or (respond_to?(:empty?) and empty?)
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So it returns &lt;code&gt;true&lt;/code&gt; on &lt;code&gt;''&lt;/code&gt; (an empty String), &lt;code&gt;[]&lt;/code&gt; (an empty Array), and &lt;code&gt;nil&lt;/code&gt;, and &lt;code&gt;false&lt;/code&gt; on just about anything else (including objects that don't have an &lt;code&gt;empty?&lt;/code&gt; method). (The Rails implementation might also return &lt;code&gt;true&lt;/code&gt; if you call &lt;code&gt;false.empty?&lt;/code&gt;, as a special case. This might make sense; I haven't thought the semantics through fully.) &lt;code&gt;Object#blank?&lt;/code&gt; is a well-behaved monkey because it doesn't modify existing, expected behavior, &lt;em&gt;and&lt;/em&gt; it's globally useful (throughout the Ruby language). It's something that could be added to Ruby's core without breaking things.&lt;/p&gt;

&lt;p&gt;DataMapper's &lt;code&gt;Symbol&lt;/code&gt; extensions probably wouldn't break other libraries, but the semantics are senseless. If a &lt;code&gt;Symbol&lt;/code&gt; had a meaningful 'less-than' comparison to another symbol, it would just implement &lt;code&gt;&amp;lt;=&amp;gt;&lt;/code&gt; and mix in &lt;code&gt;Comparable&lt;/code&gt;. What the line&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;exhibitions = Exhibition.all(:run_time.gt =&amp;gt; 2, :run_time.lt =&amp;gt; 5)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;really means is that the &lt;em&gt;column&lt;/em&gt; called 'run_time', which isn't a Ruby quantity at all, should be between 2 and 5. A better way to say it would be:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;exhibitions = Exhibition.all(:run_time =&amp;gt; [:&amp;gt;, 2], :run_time =&amp;gt; [:&amp;lt;, 5])
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;or just&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;exhibitions = Exhibition.all(&quot;run_time BETWEEN 2 AND 5&quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;which is basically how ActiveRecord does it. Using a global monkey patch to &lt;code&gt;Symbol&lt;/code&gt; to implement a syntactic translation of Ruby to SQL just muddies the semantics of Ruby without providing any extra clarity.&lt;/p&gt;

&lt;p&gt;It's a back door (through method definitions on symbols) into the kind of &lt;em&gt;real&lt;/em&gt; syntax translations you can write as macros in Lisp (which don't rely on the function invocation mechanism). You could define a macro &lt;code&gt;conditions&lt;/code&gt; to be used as an argument to the finder method, which could then be invoked like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(find-all-exhibitions (conditions (run-time &amp;gt; 2)
                                  (run-time &amp;lt; 5)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The difference is that the syntax you define only exists within the &lt;code&gt;conditions&lt;/code&gt; macro.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-08-21:807</id>
    <published>2008-08-21T19:36:00Z</published>
    <updated>2008-08-21T20:02:57Z</updated>
    <category term="tech"/>
    <category term="apple"/>
    <category term="mac"/>
    <category term="math"/>
    <link href="http://kbullock.ringworld.org/2008/8/21/doing-the-math-cont-d" rel="alternate" type="text/html"/>
    <title>Doing the math, cont'd</title>
<content type="html">
            &lt;p&gt;Not sure if &lt;a href=&quot;http://daringfireball.net/&quot; title=&quot;Daring Fireball&quot;&gt;John Gruber&lt;/a&gt; noted &lt;a href=&quot;http://arstechnica.com/journals/hardware.ars/2008/08/07/apple-asps-2x-higher-than-rest-of-market&quot;&gt;this jackassery&lt;/a&gt; or not. Writing on ars technica, Joel Hruska manages to stop just short of a Jackass-of-the-Week award, but nonetheless veers deep into irrational anti-&lt;a href=&quot;http://www.crazyapplerumors.com/?p=664&quot;&gt;Artie-MacStrawman&lt;/a&gt;-ism.&lt;/p&gt;

&lt;p&gt;Hruska's analysis of the fact that Apple's average selling prices are higher than the rest of the market starts off well enough:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Desktop PC average selling prices (ASPs) have scarcely changed in the past two years, while laptop ASPs have fallen 21 percent, probably in part thanks to rising demand and steeper competition among vendors. Mac desktop ASPs, on the other hand, have actually gone up by 7.7 percent, while laptop ASPs have dropped by just 3.8 percent. Apple, in other words, is bucking conventional wisdom, and selling computers that are significantly more expensive than the average unit shipped by the likes of Dell, HP, or Lenovo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;...and turns back from the brink for a moment of insight...&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;This would normally be the point at which any Mac vs. PC discussion veers off into a heated debate over hardware specs, manufacturer build quality, and acerbic commentary on the more dubious characters in one's family history. I'm rather explicitly not going there. Instead, I'd like to draw attention to a different facet of the situation. ... Apple is clearly picking up steam without significantly reducing its ASPs. It's even happening while PC ASPs, particularly notebook ASPs, are dropping.&lt;/p&gt;
    
    &lt;p&gt;The current situation implies that Apple may be drawing high-end notebook sales that would have otherwise gone to Dell, HP, Lenovo, or the other major players in this space.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;...before veering off into warrantless-conclusion-land:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Apple has clearly created a value proposition that customers are willing to &lt;em&gt;pay a substantial premium&lt;/em&gt; in order to possess. &lt;em&gt;[emphasis added]&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think he's right that Apple is drawing high&lt;em&gt;er&lt;/em&gt;-end (not just top-end, but mid-range too) notebook sales away from other makers, which makes his conclusion all the more senseless. As has been &lt;a href=&quot;http://kbullock.ringworld.org/2008/8/18/doing-the-math&quot;&gt;demonstrated already&lt;/a&gt;, &lt;em&gt;comparably equipped&lt;/em&gt; Macs sell in the same price range as their Windows-preinstalled counterparts. If it's true that Apple's sales are coming from customers who would have otherwise bought $1000+ Dell or hp laptops, those buying Macs &lt;strong&gt;&lt;em&gt;are not paying a premium.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-08-19:802</id>
    <published>2008-08-19T22:26:00Z</published>
    <updated>2008-08-20T12:55:46Z</updated>
    <category term="tech"/>
    <category term="expression"/>
    <category term="one-liner"/>
    <category term="perl"/>
    <category term="ruby"/>
    <link href="http://kbullock.ringworld.org/2008/8/19/no-really-everything-is-an-expression" rel="alternate" type="text/html"/>
    <title>No, really, everything is an expression</title>
<content type="html">
            &lt;p&gt;I just had a realization about Ruby that others coming from C, Perl, Javascript, PHP, etc. may not have quite grasped yet: In Ruby, since everything is an expression, &lt;strong&gt;semicolons are allowed within parentheses.&lt;/strong&gt; That means parentheses effectively create a &lt;a href=&quot;http://en.wikipedia.org/wiki/Statement_block&quot; title=&quot;Statement block - Wikipedia, the free encyclopedia&quot;&gt;statement block&lt;/a&gt; (though not a new &lt;a href=&quot;http://en.wikipedia.org/wiki/Scope_%28programming%29&quot; title=&quot;Scope (programming) - Wikipedia, the free encyclopedia&quot;&gt;scope&lt;/a&gt;, and not a block in the Ruby sense of a first-class procedure object).&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; (&quot;foo&quot;; 42; :coolness)
=&amp;gt; :coolness
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The above evaluates the values &lt;code&gt;&quot;foo&quot;&lt;/code&gt; (a String), &lt;code&gt;42&lt;/code&gt; (a Fixnum), and &lt;code&gt;:final&lt;/code&gt; (a Symbol) in that order, and returns the last one. In Lisp, this would be a &lt;code&gt;progn&lt;/code&gt; (Common Lisp) or &lt;code&gt;begin&lt;/code&gt; (Scheme).&lt;/p&gt;

&lt;p&gt;I've made use of this behavior before, I think, without really realizing the implications of it. In Perl, for example, you can use a bare block to group statements together. But you can't even apply a &lt;a href=&quot;http://www.rubycentral.com/book/intro.html#S4&quot; title=&quot;Control Structures - Programming Ruby: The Pragmatic Programmer's Guide&quot;&gt;statement modifier&lt;/a&gt; to such a grouping. The following is a syntax error:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{             
  print &quot;foo\n&quot;;
  exit(254);
} unless open(FOO, &quot;foo.txt&quot;;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;...leading to such idioms as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;print &quot;foo\n&quot; &amp;amp;&amp;amp; exit(254) unless open(FOO, &quot;foo.txt&quot;);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In Ruby, since everything is an expression, you can use statement modifiers on a parenthesized expression, like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; (f = open(&quot;hello.c&quot;); f.read) if File.exist? &quot;hello.c&quot;
=&amp;gt; # contents of hello.c
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You could even use a compound expression as a conditional test (in a statement modifier!):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; &quot;non-empty file&quot; if (f = open(&quot;hello.c&quot;); !f.eof?)
=&amp;gt; &quot;non-empty file&quot;
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-08-18:801</id>
    <published>2008-08-18T18:13:00Z</published>
    <updated>2008-08-18T18:14:15Z</updated>
    <category term="tech"/>
    <category term="apple"/>
    <category term="cost"/>
    <category term="dell"/>
    <category term="mac"/>
    <link href="http://kbullock.ringworld.org/2008/8/18/doing-the-math" rel="alternate" type="text/html"/>
    <title>Doing the math</title>
<content type="html">
            &lt;p&gt;Someone out there did &lt;a href=&quot;http://technologizer.com/2008/08/14/are-macs-more-expensive-lets-do-the-math-once-and-for-all/&quot;&gt;an extensive price comparison&lt;/a&gt; between the MacBook and comparably-equipped laptops from Dell, hp, and Sony (h/t &lt;a href=&quot;http://daringfireball.net/linked/2008/08/16/mccracken&quot;&gt;daring fireball&lt;/a&gt;). I thought I'd post here a similar comparison I did between comparably-equipped desktop machines from Apple and Dell back in 2002 (originally &lt;a href=&quot;http://slashdot.org/comments.pl?sid=26185&amp;amp;amp;cid=2846173&quot;&gt;posted to a slashdot comment&lt;/a&gt;). These numbers were drawn directly from the respective companies' online stores at the time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dell Dimension 8200&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pentium 4 1.7GHz&lt;/li&gt;
&lt;li&gt;256MB RAM&lt;/li&gt;
&lt;li&gt;40GB HD (no 60GB available)&lt;/li&gt;
&lt;li&gt;3yr ltd warranty/service plan&lt;/li&gt;
&lt;li&gt;Windows XP Home&lt;/li&gt;
&lt;li&gt;15in flat panel LCD (analog connector)&lt;/li&gt;
&lt;li&gt;64MB Geforce2 MX&lt;/li&gt;
&lt;li&gt;DVD-R/CD-RW drive&lt;/li&gt;
&lt;li&gt;Dell Jukebox, Image Expert 2000, Standard Dell Movie Studio bundle&lt;/li&gt;
&lt;li&gt;Microsoft Works 2002&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Price: $2,209&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Apple iMac SuperDrive&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;G4 800MHz&lt;/li&gt;
&lt;li&gt;256MB RAM&lt;/li&gt;
&lt;li&gt;60GB HD (no 40GB available)&lt;/li&gt;
&lt;li&gt;3yr AppleCare Protection Plan [apple.com]&lt;/li&gt;
&lt;li&gt;Mac OS X and OS 9&lt;/li&gt;
&lt;li&gt;15in flat panel LCD (digitally connected)&lt;/li&gt;
&lt;li&gt;32MB Geforce2 MX&lt;/li&gt;
&lt;li&gt;DVD-R/CD-RW SuperDrive&lt;/li&gt;
&lt;li&gt;iTunes, iPhoto, iMovie, iDVD&lt;/li&gt;
&lt;li&gt;AppleWorks 6.2
&lt;strong&gt;Price: $1,948&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Difference: $261&lt;/strong&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-04-09:791</id>
    <published>2008-04-09T19:52:00Z</published>
    <updated>2008-04-10T00:59:18Z</updated>
    <category term="tech"/>
    <link href="http://kbullock.ringworld.org/2008/4/9/apache" rel="alternate" type="text/html"/>
    <title>Apache's trailing slash and proxying to RESTful apps</title>
<content type="html">
            &lt;p&gt;I have a somewhat odd case with the Web app I just deployed today (no, not &lt;a href=&quot;http://www.rubyonrails.com/&quot;&gt;Rails&lt;/a&gt;, it's &lt;a href=&quot;http://www.merbivore.com/&quot;&gt;Merb&lt;/a&gt;!). I have a RESTful Documents controller which needs to receive POST requests on /documents. I also have a documents directory in the public document root. The whole thing is hosted behind Apache with mod_proxy_balancer, and mod_rewrite to let Apache serve static files (all as &lt;a href=&quot;http://mongrel.rubyforge.org/wiki/Apache&quot;&gt;described&lt;/a&gt; on the &lt;a href=&quot;http://mongrel.rubyforge.org/&quot;&gt;Mongrel&lt;/a&gt; site).&lt;/p&gt;

&lt;p&gt;So when I would POST to /documents, Apache in its (normally quite useful) wisdom decided to rewrite it to /documents/ and (worse) to change the request to a GET. This is because of &lt;a href=&quot;http://httpd.apache.org/docs/2.2/mod/mod_dir.html&quot;&gt;mod_dir&lt;/a&gt;, which provides the &lt;code&gt;DirectoryIndex&lt;/code&gt; directive and the (less well-known) &lt;code&gt;DirectorySlash&lt;/code&gt; directive, which defaults to &lt;code&gt;On&lt;/code&gt;. So to fix it, I just set &lt;code&gt;DirectorySlash&lt;/code&gt; to &lt;code&gt;Off&lt;/code&gt; for the documents directory, and bingo, it works.&lt;/p&gt;

&lt;p&gt;Now, if I needed directory indexes on the subdirectories of the public/documents/ directory, I'd have to work around, but this is fine for my current setup.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2008-01-15:524</id>
    <published>2008-01-15T21:23:00Z</published>
    <updated>2008-01-15T21:39:21Z</updated>
    <category term="tech"/>
    <link href="http://kbullock.ringworld.org/2008/1/15/textutil" rel="alternate" type="text/html"/>
    <title>textutil: OS X command-line tool of the week</title>
<summary type="html">&lt;pre&gt;&lt;code&gt;$ textutil -convert rtf 'Business Plan.doc'
$ ls
Business Plan.doc  Business Plan.rtf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;omg d00d! Command-line conversion between proprietary and open-source formats!&lt;/p&gt;</summary><content type="html">
            &lt;pre&gt;&lt;code&gt;$ textutil -convert rtf 'Business Plan.doc'
$ ls
Business Plan.doc  Business Plan.rtf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;omg d00d! Command-line conversion between proprietary and open-source formats!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ textutil -convert doc 'Live Free Or Die.odt'
$ ls
Live Free Or Die.doc  Live Free Or Die.odt
$ file Live\ Free\ Or\ Die.doc
Live Free Or Die.doc: Microsoft Office Document
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;man textutil&lt;/code&gt; for more details. Other supported formats (besides the demonstrated RTF, MS Word, and OpenOffice) include plain text and HTML. It can also display document metadata (including of Word documents) and convert documents from one text encoding (UTF-8, ASCII, KOI-8, ...) to another. Whee!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2007-11-21:224</id>
    <published>2007-11-21T20:55:00Z</published>
    <updated>2007-11-23T15:48:50Z</updated>
    <category term="politics"/>
    <category term="tech"/>
    <category term="pundits monkeys DRM jackass"/>
    <link href="http://kbullock.ringworld.org/2007/11/21/i-hated-drm-before-it-was-cool" rel="alternate" type="text/html"/>
    <title>I hated DRM before it was cool</title>
<summary type="html">&lt;p&gt;&lt;a href=&quot;http://blogs.zdnet.com/Berlind/?p=897&amp;amp;amp;tag=nl.e622&quot;&gt;From some random ZDNet-employed tech pundit&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Apple goes to great lengths &amp;mdash; usually through its digital rights management technologies (what I 
    call C.R.A.P.) &amp;mdash; to tightly control the relationship between its software, its hardware, and, in the 
    case of the iPhone, the relationship of both to carriers and the Internet (God forbid you should 
    attempt to acquire new audio online for your iPhone &amp;mdash; music, ringtones, etc &amp;mdash; through anything 
    but the iTunes Music Store).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just the latest in a &lt;a href=&quot;http://www.informationweek.com/shared/printableArticle.jhtml?articleID=191000408&quot;&gt;long&lt;/a&gt; &lt;a href=&quot;http://www.engadget.com/2007/04/02/apple-and-emi-ditching-drm-is-good-but-its-not-good-enough/&quot;&gt;string&lt;/a&gt; of Apple hatred (and now &lt;a href=&quot;http://www.windowsitpro.com/Article/ArticleID/94761/94761.html?Ad=1&quot;&gt;litigation&lt;/a&gt;) based on their &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/FairPlay&quot;&gt;FairPlay&lt;/a&gt;&quot; DRM system. Apple can't be exonerated of their complicity in the foisting of DRM on us consumers, but let's review the facts.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;&lt;a href=&quot;http://blogs.zdnet.com/Berlind/?p=897&amp;amp;amp;tag=nl.e622&quot;&gt;From some random ZDNet-employed tech pundit&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;Apple goes to great lengths &amp;mdash; usually through its digital rights management technologies (what I 
    call C.R.A.P.) &amp;mdash; to tightly control the relationship between its software, its hardware, and, in the 
    case of the iPhone, the relationship of both to carriers and the Internet (God forbid you should 
    attempt to acquire new audio online for your iPhone &amp;mdash; music, ringtones, etc &amp;mdash; through anything 
    but the iTunes Music Store).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just the latest in a &lt;a href=&quot;http://www.informationweek.com/shared/printableArticle.jhtml?articleID=191000408&quot;&gt;long&lt;/a&gt; &lt;a href=&quot;http://www.engadget.com/2007/04/02/apple-and-emi-ditching-drm-is-good-but-its-not-good-enough/&quot;&gt;string&lt;/a&gt; of Apple hatred (and now &lt;a href=&quot;http://www.windowsitpro.com/Article/ArticleID/94761/94761.html?Ad=1&quot;&gt;litigation&lt;/a&gt;) based on their &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/FairPlay&quot;&gt;FairPlay&lt;/a&gt;&quot; DRM system. Apple can't be exonerated of their complicity in the foisting of DRM on us consumers, but let's review the facts.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Apple &lt;strong&gt;&lt;em&gt;does not force you&lt;/strong&gt;&lt;/em&gt; to use DRM-crippled music either in iTunes or on the iPod. In fact &lt;em&gt;both&lt;/em&gt; products were capable of using the de facto industry standard (though unfortunately patent-encumbered) MP3 format &lt;strong&gt;&lt;em&gt;before FairPlay existed&lt;/strong&gt;&lt;/em&gt; in the market&amp;mdash;i.e., before the opening of the iTunes Music Store.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apple themselves sell non-DRM-crippled tracks through their own music store.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apple is neither the only, nor the &lt;a href=&quot;http://en.wikipedia.org/wiki/Sony_rootkit&quot;&gt;worst&lt;/a&gt; company to use DRM.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I happily use an iPod and iTunes (and a Mac). I have never paid money for a single DRM-encumbered track from the iTunes Store (though I do own a few such tracks via gift cards and Pepsi caps). I've been an &lt;a href=&quot;http://www.emusic.com/&quot;&gt;eMusic&lt;/a&gt; subscriber since their plans included unlimited downloads. I find it unconscionable that the RIAA could &lt;a href=&quot;http://blog.wired.com/27bstroke6/2007/10/riaa-jury-finds.html&quot;&gt;sue a family into oblivion&lt;/a&gt; for simply depriving them of &lt;em&gt;potential&lt;/em&gt; (that means &lt;em&gt;neither real nor certain&lt;/em&gt;) revenue to which they (and the courts) think they have a right.&lt;/p&gt;

&lt;p&gt;But why is it suddenly cool to hate Apple for using DRM (based on utter fabrications), and not actually support &lt;a href=&quot;http://defectivebydesign.org/&quot;&gt;ditching it entirely&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;And if you hated &lt;em&gt;Bush&lt;/em&gt; before it was cool, &lt;a href=&quot;http://www.onehorseshy.com/political/i_hated_bush_before_it_was_cool/&quot;&gt;see here&lt;/a&gt;.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2007-11-09:134</id>
    <published>2007-11-09T22:42:00Z</published>
    <updated>2007-11-09T22:42:45Z</updated>
    <category term="tech"/>
    <link href="http://kbullock.ringworld.org/2007/11/9/mac-command-line-niceties" rel="alternate" type="text/html"/>
    <title>Mac command line niceties</title>
<summary type="html">&lt;p&gt;I've made some additions to my &lt;code&gt;.bashrc&lt;/code&gt; today based on &lt;a href=&quot;http://www.srhaber.com/2007/11/04/quick-look-from-the-command-line/&quot;&gt;this article&lt;/a&gt;. First, the usage:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2007/11/9/ql-waiting.png&quot; alt=&quot;Screenshot of Quick Look invoked from the command line, waiting for a key press&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Then I press any key (Return, Esc, Space, whatever), and...&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2007/11/9/ql-done.png&quot; alt=&quot;Screenshot of command line after Quick Look exits&quot; /&gt;&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;I've made some additions to my &lt;code&gt;.bashrc&lt;/code&gt; today based on &lt;a href=&quot;http://www.srhaber.com/2007/11/04/quick-look-from-the-command-line/&quot;&gt;this article&lt;/a&gt;. First, the usage:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2007/11/9/ql-waiting.png&quot; alt=&quot;Screenshot of Quick Look invoked from the command line, waiting for a key press&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Then I press any key (Return, Esc, Space, whatever), and...&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2007/11/9/ql-done.png&quot; alt=&quot;Screenshot of command line after Quick Look exits&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I can also do this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/2007/11/9/open.png&quot; alt=&quot;Screenshot of a Finder window opened from the command line for the shell's current working directory&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That is, I can open a finder window in the current directory just by typing &lt;code&gt;open&lt;/code&gt;&amp;mdash;no need to explicitly specify &lt;code&gt;'.'&lt;/code&gt; as the argument.&lt;/p&gt;

&lt;p&gt;Here's the code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function ql () {
  (qlmanage -p &quot;$@&quot; &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;
    local qlmanage_pid=$!
    read -sn 1
    kill ${qlmanage_pid}) &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
}

function open () {
  if [ -z &quot;$*&quot; ]; then
    /usr/bin/open .
  else
    /usr/bin/open &quot;$@&quot;
  fi
}
&lt;/code&gt;&lt;/pre&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2007-10-30:103</id>
    <published>2007-10-30T20:56:00Z</published>
    <updated>2007-10-30T20:58:06Z</updated>
    <category term="random"/>
    <category term="tech"/>
    <category term="geek nerd dork"/>
    <link href="http://kbullock.ringworld.org/2007/10/30/geeks-nerds-and-dorks" rel="alternate" type="text/html"/>
    <title>Geeks, nerds, and dorks</title>
<content type="html">
            &lt;p&gt;If you've ever wondered what the difference is between a geek, a nerd, and a dork, or if you never realized there was one, here it is:&lt;/p&gt;

&lt;p&gt;The Mac is made for dorks.&lt;br /&gt;
Linux is made for geeks.&lt;br /&gt;
Windows is made for nerds.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2007-09-12:99</id>
    <published>2007-09-12T15:19:00Z</published>
    <updated>2007-09-13T19:21:07Z</updated>
    <category term="tech"/>
    <category term="apple"/>
    <category term="ipod"/>
    <category term="notes"/>
    <link href="http://kbullock.ringworld.org/2007/9/12/further-notes-on-apple-s-releases-today" rel="alternate" type="text/html"/>
    <title>Further notes on Apple's recent releases</title>
<content type="html">
            &lt;p&gt;On iTunes 7.4:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Having to pay &lt;em&gt;twice&lt;/em&gt; for a song just to excerpt it for use as a ringtone is wrong. I'll keep using &lt;a href=&quot;http://audacity.sourceforge.net/&quot; title=&quot;Audacity: Free Audio Editor and Recorder&quot;&gt;Audacity&lt;/a&gt; (and &lt;a href=&quot;http://www.rogueamoeba.com/audiohijack/&quot; title=&quot;Audio Hijack: Record any audio on Mac OS X&quot;&gt;AudioHijack&lt;/a&gt; where necessary) to excerpt songs to put on my phone as MP3s.&lt;/p&gt;

&lt;p&gt;I don't own an iPhone, so this won't affect me anyway, but it's perfectly within the bounds of &lt;a href=&quot;http://www.eff.org/IP/fairuse/&quot; title=&quot;Fair Use at EFF.org&quot;&gt;fair use&lt;/a&gt; to excerpt a song for use as a ringtone. It's hard to tell if Apple was forced to do this by the music industry, or if they're just hedging their bets, but in either case, I'm disappointed.&lt;/p&gt;

&lt;p&gt;&lt;del&gt;The open question, though, is whether it will be free to make a ringtone from your non-DRM-crippled (ripped from CD to MP3 or other formats) music.&lt;/del&gt; &lt;ins&gt;It &lt;a href=&quot;http://daringfireball.net/2007/09/weird_rude_buggy&quot;&gt;looks like&lt;/a&gt; it's not only not free, but actually &lt;em&gt;impossible&lt;/em&gt; to create ringtones from your non-DRM-encumbered music.&lt;/ins&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the new third-generation nano:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The screen pixel density (204ppi) is &lt;em&gt;even higher than that of the iPhone.&lt;/em&gt; I expected it to be the same, but they've leapfrogged it.&lt;/p&gt;

&lt;p&gt;We might see iPhones with the higher pixel density soon, but it will depend on how well the touch capability can be integrated with it. OS X (as shipped on the iPhone, and with the upcoming release of Leopard on Macs) is supposedly resolution-independent, so that makes it easier to change software to understand a different pixel density.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The game Steve demo'd is essentially 3D &lt;a href=&quot;http://en.wikipedia.org/wiki/Breakout&quot; title=&quot;Breakout on Wikipedia.org&quot;&gt;Breakout&lt;/a&gt;&amp;mdash;a nod to his early days in the computing market.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2007-09-12:101</id>
    <published>2007-09-12T15:17:00Z</published>
    <updated>2007-09-12T15:18:35Z</updated>
    <category term="tech"/>
    <category term="dpi"/>
    <category term="graphics"/>
    <category term="resizing"/>
    <link href="http://kbullock.ringworld.org/2007/9/12/graphic-resizing" rel="alternate" type="text/html"/>
    <title>Graphic resizing</title>
<content type="html">
            &lt;p&gt;This is neato! Content-aware graphic resizing (up &lt;em&gt;and&lt;/em&gt; down) by finding &quot;seams&quot; within the image.&lt;/p&gt;

&lt;p&gt;&amp;lt;object height=&quot;350&quot; width=&quot;425&quot;&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;param&gt;&amp;lt;/param&gt;&amp;lt;embed src=&quot;http://www.youtube.com/v/vIFCV2spKtg&quot; height=&quot;350&quot; width=&quot;425&quot;&gt;&amp;lt;/embed&gt;&amp;lt;/object&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://kbullock.ringworld.org/">
    <author>
      <name>kbullock</name>
    </author>
    <id>tag:kbullock.ringworld.org,2007-09-06:98</id>
    <published>2007-09-06T15:11:00Z</published>
    <updated>2007-09-06T15:16:35Z</updated>
    <category term="tech"/>
    <category term="apple"/>
    <category term="iphone"/>
    <category term="ipod"/>
    <category term="want"/>
    <link href="http://kbullock.ringworld.org/2007/9/6/want" rel="alternate" type="text/html"/>
    <title>WANT</title>
<content type="html">
            &lt;p&gt;So I noticed Software Update pop up this morning with an iTunes update:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;With iTunes 7.4, sync your favorite music and more with the &lt;em&gt;new iPod nano&lt;/em&gt; (third generation), iPod classic, and &lt;strong&gt;&lt;em&gt;iPod touch&lt;/strong&gt;&lt;/em&gt;&#8230;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bwuh? Apple released the much-rumored iPhone-like iPod?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.apple.com/ipodtouch/&quot;&gt;http://www.apple.com/ipodtouch/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;YAY! WANT! IS CAN TOUCH IPOD NOW PLZTHX&lt;/p&gt;
          </content>  </entry>
</feed>
