<feed xmlns="http://www.w3.org/2005/Atom" updated="2018-07-12T00:00:00Z">
  <title>Kyle Conroy&#39;s Blog</title>
  <id>http://kyleconroy.com</id>
  <link href="https://kyleconroy.com"></link>
  <link rel="self" href="https://kyleconroy.com/feed.xml"></link>
  <author>
    <name>Kyle Conroy</name>
    <uri></uri>
    <email>kyle@kyleconroy.com</email>
  </author>
  <entry>
    <title>Downloading Your Twitter Data</title>
    <id>http://kyleconroy.com/your-twitter-data</id>
    <link href="https://kyleconroy.com/your-twitter-data"></link>
    <updated>2018-07-12T00:00:00Z</updated>
    <content type="html">&lt;p&gt;After the outcry from my &lt;a href=&#34;/archiving-twitter&#34;&gt;last post&lt;/a&gt; reached Jack himself,&#xA;Twitter launched a new export option that includes all your data in a machine&#xA;readable format. We did it!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Or did we?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It turns out Jack didn&#39;t read my post. I didn&#39;t get a call from the Twitter&#xA;executive team. Instead, it was &lt;a href=&#34;https://github.com/kyleconroy/grain/issues/1&#34;&gt;brought to my&#xA;attention&lt;/a&gt; that the account&#xA;export I&#39;ve been looking for already exists and has for some time.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Now, I’m not sure why Twitter has two ways to download your data, but they do.&#xA;I was using the Tweet archive, available in &lt;a href=&#34;https://twitter.com/settings/account&#34;&gt;account&#xA;settings&lt;/a&gt;. The other option, called &amp;quot;Your&#xA;Twitter Data&amp;quot;, is found on a &lt;a href=&#34;https://twitter.com/settings/your_twitter_data&#34;&gt;separate settings&#xA;page&lt;/a&gt; behind a password&#xA;confirmation dialog. Scroll down to the bottom of the page and click the&#xA;&amp;quot;Download data&amp;quot; button.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This archive contains far more information than the Tweet archive.&#xA;Uncompressed, my Tweet archive is 7MB. My data archive was 45MB. The&#xA;information contained inside is higher quality and more numerous. Ad&#xA;impressions, block lists, screen name changes, oh my! It even includes image&#xA;descriptions. The full list of files is included at the bottom of this post.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;&amp;quot;Machine&amp;quot; Readable&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;That said, the archive is not without its issues. The most glaring problem is&#xA;that the data isn&#39;t machine readable out of the box. For some reason, records&#xA;are contained in JavaScript files.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-js&#34;&gt;window.YTD.tweet.part0 = [{&#xA;   ...&#xA;}]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Other strange choices abound. Tweets are contained in &lt;code&gt;tweet.js&lt;/code&gt;. Here, all&#xA;numbers are stored as floats, serialized as strings.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-js&#34;&gt;{ &amp;quot;favorite_count&amp;quot; : &amp;quot;0.0&amp;quot; }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;I wasn&#39;t aware you could half-favorite a tweet. This scheme results in&#xA;corrupted IDs, as large numbers are stored in E-notation, which truncates&#xA;digits. Notice that the &lt;code&gt;id&lt;/code&gt; filed is missing the last digit present in the&#xA;&lt;code&gt;id_str&lt;/code&gt; field.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-js&#34;&gt;{ &amp;quot;id&amp;quot; : &amp;quot;1.01456537218219622E18&amp;quot;,&#xA;  &amp;quot;id_str&amp;quot; : &amp;quot;1014565372182196224&amp;quot; }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As I update &lt;a href=&#34;https://github.com/kyleconroy/grain&#34;&gt;Grain&lt;/a&gt; to parse the entire&#xA;archive, I&#39;m sure I&#39;ll run into more issues. I sincerely hope that talking&#xA;about these data quality problems publicly encourages Twitter and other&#xA;companies to take account exports seriously.&lt;/p&gt;&#xA;&#xA;&lt;h4&gt;Appendix: Archive Layout&lt;/h4&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;.&#xA;├── README.txt&#xA;├── account-creation-ip.js&#xA;├── account-suspension.js&#xA;├── account.js&#xA;├── ad-engagements.js&#xA;├── ad-impressions.js&#xA;├── ad-mobile-conversions-attributed.js&#xA;├── ad-mobile-conversions-unattributed.js&#xA;├── ad-online-conversions-attributed.js&#xA;├── ad-online-conversions-unattributed.js&#xA;├── ageinfo.js&#xA;├── block.js&#xA;├── connected-application.js&#xA;├── contact.js&#xA;├── direct-message-headers.js&#xA;├── direct-message.js&#xA;├── direct_message_media/&#xA;├── email-address-change.js&#xA;├── facebook-connection.js&#xA;├── follower.js&#xA;├── following.js&#xA;├── ip-audit.js&#xA;├── like.js&#xA;├── lists-created.js&#xA;├── lists-member.js&#xA;├── lists-subscribed.js&#xA;├── moment.js&#xA;├── mute.js&#xA;├── ni-devices.js&#xA;├── personalization.js&#xA;├── profile.js&#xA;├── profile_media/&#xA;├── protected-history.js&#xA;├── saved-search.js&#xA;├── screen-name-change.js&#xA;├── tweet.js&#xA;├── tweet_media/&#xA;└── verified.js&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Actually Archiving Your Entire Twitter Account</title>
    <id>http://kyleconroy.com/archiving-twitter</id>
    <link href="https://kyleconroy.com/archiving-twitter"></link>
    <updated>2018-06-30T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Most social networks give you the option of downloading an archive of all data stored in your account. If you live in the European Union, my understanding is that these services are now required to give you access to this data, thanks in part to GDPR. However, the quality of archives varies from service to service.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Your Twitter Archive&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Twitter makes it easy to download an archive of your data. After following &lt;a href=&#34;https://help.twitter.com/en/managing-your-account/how-to-download-your-twitter-archive&#34;&gt;four steps&lt;/a&gt;, a link to your archive will arrive in your inbox. The ZIP file includes an HTML view of your timeline as well as access to your tweets in CSV format.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Many services allow you to download a human-browsable archive and a machine-readable archive. This commonly looks like a static HTML site for humans and a set of JSON files for machines. Twitter includes both in its archive, but the included data is laughably incomplete.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To me, my Twitter account includes all of the following data:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;My tweets, including photos, videos, polls, etc.&lt;/li&gt;&#xA;&lt;li&gt;My favorites&lt;/li&gt;&#xA;&lt;li&gt;My public and private lists&lt;/li&gt;&#xA;&lt;li&gt;The accounts I follow&lt;/li&gt;&#xA;&lt;li&gt;The accounts that follow me&lt;/li&gt;&#xA;&lt;li&gt;My direct messages&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Of the above, Twitter&#39;s account archive only includes partial Tweet data. That&#39;s it! No favorites, no lists, no direct messages. The most surprising thing to me was that Twitter does not give you a copy of any of the photos or videos posted to your account. Instead, that data continues to live on Twitter&#39;s servers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When viewing your archive without an internet connection, avatars and images disappear. I guess Twitter hopes you didn&#39;t really want to save any of those photos after all.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;/images/archive-comparison.jpg&#34; alt=&#34;Side-by-side archive comparsion with and with internt&#34; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The Twitter archive does include a &lt;code&gt;tweets.csv&lt;/code&gt; file with all of your accounts tweets. However, this format losses much of the information returned via the Twitter API. The &lt;a href=&#34;https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/tweet-object.html&#34;&gt;documentation&lt;/a&gt; details the rich information on each tweet that the archive throws away. Why not use the schema already in use by the API? I&#39;m not sure why Twitter thought a CSV would be an easier format to consume.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Building a Better Archive&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Unhappy with my archive, I set out to build one that meets my needs. Using a combination of the Twitter API and official archive, I&#39;m able to create a new archive that contains everything I&#39;ve done on Twitter. It&#39;s called &lt;a href=&#34;https://github.com/kyleconroy/grain&#34;&gt;Grain&lt;/a&gt; and you can use it today. Your Grain archive includes the following records:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Direct messages&lt;/li&gt;&#xA;&lt;li&gt;Favorites&lt;/li&gt;&#xA;&lt;li&gt;Followers&lt;/li&gt;&#xA;&lt;li&gt;Friends&lt;/li&gt;&#xA;&lt;li&gt;Lists&lt;/li&gt;&#xA;&lt;li&gt;Tweets&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Most importantly, the archive includes all images associated with the above records. For comparison, here&#39;s the data in my official archive versus the archive built via Grain.&lt;/p&gt;&#xA;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th align=&#34;right&#34;&gt;Records&lt;/th&gt;&#xA;&lt;th align=&#34;right&#34;&gt;Twitter&lt;/th&gt;&#xA;&lt;th align=&#34;right&#34;&gt;Grain&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td align=&#34;right&#34;&gt;tweets&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;4,348&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;4,348&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&#xA;&lt;tr&gt;&#xA;&lt;td align=&#34;right&#34;&gt;favorites&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;2,281&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&#xA;&lt;tr&gt;&#xA;&lt;td align=&#34;right&#34;&gt;friends&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;105&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&#xA;&lt;tr&gt;&#xA;&lt;td align=&#34;right&#34;&gt;followers&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;640&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&#xA;&lt;tr&gt;&#xA;&lt;td align=&#34;right&#34;&gt;direct messages&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;9&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&#xA;&lt;tr&gt;&#xA;&lt;td align=&#34;right&#34;&gt;lists&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;3&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&#xA;&lt;tr&gt;&#xA;&lt;td align=&#34;right&#34;&gt;images&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;&lt;/td&gt;&#xA;&lt;td align=&#34;right&#34;&gt;1,986&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The records are stored as JSON, backed by &lt;a href=&#34;https://github.com/kyleconroy/grain/tree/master/proto/twitter&#34;&gt;protocol buffers&lt;/a&gt;. I&#39;m hoping this makes it easy to build other tools that interact with your archive.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Tweets are stored as the full object returned from the Twitter API, which includes far more information than contained in the official archive. Highlights include a fully hydrated user object and detailed display information.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A few months ago I &lt;a href=&#34;https://twitter.com/kyle_conroy/status/987812599591878656&#34;&gt;tweeted&lt;/a&gt; about Waymo testing their self-driving cars in my neighborhood.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;Waymo testing underway in Dogpatch &lt;a href=&#34;https://t.co/LaOXpQiLi3&#34;&gt;pic.twitter.com/LaOXpQiLi3&lt;/a&gt;&lt;/p&gt;&amp;amp;mdash; Kyle Conroy (@kyle_conroy) &lt;a href=&#34;https://twitter.com/kyle_conroy/status/987812599591878656?ref_src=twsrc%5Etfw&#34;&gt;April 21, 2018&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Here&#39;s the data for that tweet from the official archive (CSV converted to YAML for readability):&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-tinytxt&#34;&gt;tweet_id: 987812599591878656&#xA;in_reply_to_status_id:&#xA;in_reply_to_user_id:&#xA;timestamp: 2018-04-21 21:57:31 +0000&#xA;source: &amp;lt;a href=&amp;quot;http://tapbots.com/tweetbot&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;Tweetbot for iΟS&amp;lt;/a&amp;gt;&#xA;text: Waymo testing underway in Dogpatch https://t.co/LaOXpQiLi3&#xA;retweeted_status_id:&#xA;retweeted_status_user_id:&#xA;retweeted_status_timestamp:&#xA;expanded_urls: https://twitter.com/kyle_conroy/status/987812599591878656/photo/1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;And the same tweet in the Grain archive:&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code class=&#34;language-tinytxt&#34;&gt;{&#xA;    &amp;quot;created_at&amp;quot;: &amp;quot;Sat Apr 21 21:57:31 +0000 2018&amp;quot;,&#xA;    &amp;quot;display_text_range&amp;quot;: [&#xA;        0,&#xA;        34&#xA;    ],&#xA;    &amp;quot;entities&amp;quot;: {&#xA;        &amp;quot;hashtags&amp;quot;: [],&#xA;        &amp;quot;media&amp;quot;: [&#xA;            {&#xA;                &amp;quot;display_url&amp;quot;: &amp;quot;pic.twitter.com/LaOXpQiLi3&amp;quot;,&#xA;                &amp;quot;expanded_url&amp;quot;: &amp;quot;https://twitter.com/kyle_conroy/status/987812599591878656/photo/1&amp;quot;,&#xA;                &amp;quot;id&amp;quot;: &amp;quot;987812583188017152&amp;quot;,&#xA;                &amp;quot;indices&amp;quot;: [&#xA;                    &amp;quot;35&amp;quot;,&#xA;                    &amp;quot;58&amp;quot;&#xA;                ],&#xA;                &amp;quot;media_url&amp;quot;: &amp;quot;http://pbs.twimg.com/media/DbVqT42VMAAK4r3.jpg&amp;quot;,&#xA;                &amp;quot;media_url_https&amp;quot;: &amp;quot;https://pbs.twimg.com/media/DbVqT42VMAAK4r3.jpg&amp;quot;,&#xA;                &amp;quot;sizes&amp;quot;: {&#xA;                    &amp;quot;large&amp;quot;: {&#xA;                        &amp;quot;h&amp;quot;: 1024,&#xA;                        &amp;quot;resize&amp;quot;: &amp;quot;fit&amp;quot;,&#xA;                        &amp;quot;w&amp;quot;: 768&#xA;                    },&#xA;                    &amp;quot;medium&amp;quot;: {&#xA;                        &amp;quot;h&amp;quot;: 1024,&#xA;                        &amp;quot;resize&amp;quot;: &amp;quot;fit&amp;quot;,&#xA;                        &amp;quot;w&amp;quot;: 768&#xA;                    },&#xA;                    &amp;quot;small&amp;quot;: {&#xA;                        &amp;quot;h&amp;quot;: 680,&#xA;                        &amp;quot;resize&amp;quot;: &amp;quot;fit&amp;quot;,&#xA;                        &amp;quot;w&amp;quot;: 510&#xA;                    },&#xA;                    &amp;quot;thumb&amp;quot;: {&#xA;                        &amp;quot;h&amp;quot;: 150,&#xA;                        &amp;quot;resize&amp;quot;: &amp;quot;crop&amp;quot;,&#xA;                        &amp;quot;w&amp;quot;: 150&#xA;                    }&#xA;                },&#xA;                &amp;quot;type&amp;quot;: &amp;quot;photo&amp;quot;,&#xA;                &amp;quot;url&amp;quot;: &amp;quot;https://t.co/LaOXpQiLi3&amp;quot;&#xA;            }&#xA;        ],&#xA;        &amp;quot;urls&amp;quot;: [],&#xA;        &amp;quot;user_mentions&amp;quot;: []&#xA;    },&#xA;    &amp;quot;extended_entities&amp;quot;: {&#xA;        &amp;quot;media&amp;quot;: [&#xA;            {&#xA;                &amp;quot;display_url&amp;quot;: &amp;quot;pic.twitter.com/LaOXpQiLi3&amp;quot;,&#xA;                &amp;quot;expanded_url&amp;quot;: &amp;quot;https://twitter.com/kyle_conroy/status/987812599591878656/photo/1&amp;quot;,&#xA;                &amp;quot;id&amp;quot;: &amp;quot;987812583188017152&amp;quot;,&#xA;                &amp;quot;indices&amp;quot;: [&#xA;                    &amp;quot;35&amp;quot;,&#xA;                    &amp;quot;58&amp;quot;&#xA;                ],&#xA;                &amp;quot;media_url&amp;quot;: &amp;quot;http://pbs.twimg.com/media/DbVqT42VMAAK4r3.jpg&amp;quot;,&#xA;                &amp;quot;media_url_https&amp;quot;: &amp;quot;https://pbs.twimg.com/media/DbVqT42VMAAK4r3.jpg&amp;quot;,&#xA;                &amp;quot;sizes&amp;quot;: {&#xA;                    &amp;quot;large&amp;quot;: {&#xA;                        &amp;quot;h&amp;quot;: 1024,&#xA;                        &amp;quot;resize&amp;quot;: &amp;quot;fit&amp;quot;,&#xA;                        &amp;quot;w&amp;quot;: 768&#xA;                    },&#xA;                    &amp;quot;medium&amp;quot;: {&#xA;                        &amp;quot;h&amp;quot;: 1024,&#xA;                        &amp;quot;resize&amp;quot;: &amp;quot;fit&amp;quot;,&#xA;                        &amp;quot;w&amp;quot;: 768&#xA;                    },&#xA;                    &amp;quot;small&amp;quot;: {&#xA;                        &amp;quot;h&amp;quot;: 680,&#xA;                        &amp;quot;resize&amp;quot;: &amp;quot;fit&amp;quot;,&#xA;                        &amp;quot;w&amp;quot;: 510&#xA;                    },&#xA;                    &amp;quot;thumb&amp;quot;: {&#xA;                        &amp;quot;h&amp;quot;: 150,&#xA;                        &amp;quot;resize&amp;quot;: &amp;quot;crop&amp;quot;,&#xA;                        &amp;quot;w&amp;quot;: 150&#xA;                    }&#xA;                },&#xA;                &amp;quot;type&amp;quot;: &amp;quot;photo&amp;quot;,&#xA;                &amp;quot;url&amp;quot;: &amp;quot;https://t.co/LaOXpQiLi3&amp;quot;&#xA;            }&#xA;        ]&#xA;    },&#xA;    &amp;quot;full_text&amp;quot;: &amp;quot;Waymo testing underway in Dogpatch https://t.co/LaOXpQiLi3&amp;quot;,&#xA;    &amp;quot;id&amp;quot;: &amp;quot;987812599591878657&amp;quot;,&#xA;    &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&#xA;    &amp;quot;source&amp;quot;: &amp;quot;&amp;lt;a href=\&amp;quot;http://tapbots.com/tweetbot\&amp;quot; rel=\&amp;quot;nofollow\&amp;quot;&amp;gt;Tweetbot for i\u039fS&amp;lt;/a&amp;gt;&amp;quot;,&#xA;    &amp;quot;user&amp;quot;: {&#xA;        &amp;quot;created_at&amp;quot;: &amp;quot;Sun Jun 27 16:44:20 +0000 2010&amp;quot;,&#xA;        &amp;quot;description&amp;quot;: &amp;quot;Currently increasing GDP of the internet at @stripe. Formerly StackMachine, Twilio and UC Berkeley.&amp;quot;,&#xA;        &amp;quot;entities&amp;quot;: {&#xA;            &amp;quot;url&amp;quot;: {}&#xA;        },&#xA;        &amp;quot;favourites_count&amp;quot;: &amp;quot;2298&amp;quot;,&#xA;        &amp;quot;followers_count&amp;quot;: &amp;quot;646&amp;quot;,&#xA;        &amp;quot;friends_count&amp;quot;: &amp;quot;105&amp;quot;,&#xA;        &amp;quot;id&amp;quot;: &amp;quot;160248151&amp;quot;,&#xA;        &amp;quot;lang&amp;quot;: &amp;quot;en&amp;quot;,&#xA;        &amp;quot;listed_count&amp;quot;: &amp;quot;28&amp;quot;,&#xA;        &amp;quot;name&amp;quot;: &amp;quot;Kyle Conroy&amp;quot;,&#xA;        &amp;quot;profile_background_color&amp;quot;: &amp;quot;131516&amp;quot;,&#xA;        &amp;quot;profile_background_image_url&amp;quot;: &amp;quot;http://abs.twimg.com/images/themes/theme14/bg.gif&amp;quot;,&#xA;        &amp;quot;profile_background_image_url_https&amp;quot;: &amp;quot;https://abs.twimg.com/images/themes/theme14/bg.gif&amp;quot;,&#xA;        &amp;quot;profile_background_tile&amp;quot;: true,&#xA;        &amp;quot;profile_banner_url&amp;quot;: &amp;quot;https://pbs.twimg.com/profile_banners/160248151/1441003908&amp;quot;,&#xA;        &amp;quot;profile_image_url&amp;quot;: &amp;quot;http://pbs.twimg.com/profile_images/691734524355424256/Jsa2rYyB_normal.jpg&amp;quot;,&#xA;        &amp;quot;profile_image_url_https&amp;quot;: &amp;quot;https://pbs.twimg.com/profile_images/691734524355424256/Jsa2rYyB_normal.jpg&amp;quot;,&#xA;        &amp;quot;profile_link_color&amp;quot;: &amp;quot;009999&amp;quot;,&#xA;        &amp;quot;profile_sidebar_border_color&amp;quot;: &amp;quot;EEEEEE&amp;quot;,&#xA;        &amp;quot;profile_sidebar_fill_color&amp;quot;: &amp;quot;EFEFEF&amp;quot;,&#xA;        &amp;quot;profile_text_color&amp;quot;: &amp;quot;333333&amp;quot;,&#xA;        &amp;quot;profile_use_background_image&amp;quot;: true,&#xA;        &amp;quot;screen_name&amp;quot;: &amp;quot;kyle_conroy&amp;quot;,&#xA;        &amp;quot;statuses_count&amp;quot;: &amp;quot;4086&amp;quot;,&#xA;        &amp;quot;url&amp;quot;: &amp;quot;https://t.co/qOYJRRAPQu&amp;quot;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Sadly, it&#39;s not a perfect tool due to the limitations of the Twitter API. Direct messages older than 30 days are not available in the API. Without access to the official archive, the tool can only retrieve and store that last 2,300 tweets from your account. I have no idea why Twitter picked such a arbitrary limit.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The archive is also missing some data. I haven&#39;t figured out how to archive videos, moments, polls, or saved searches.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m hoping that my work will convince Twitter to improve its own archive and make Grain obsolete. If you feel like Twitter should provide you all your data without jumping through hoops, send a message to &lt;a href=&#34;https://twitter.com/TwitterSupport&#34;&gt;@TwitterSupport&lt;/a&gt;. If you work or worked at Twitter, please reach out if you can put me in contact with the team that owns account archives. I&#39;d love to give them my feedback directly.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Per-Test Database Isolation in Postgres</title>
    <id>http://kyleconroy.com/per-test-database-isolation-in-postgres</id>
    <link href="https://kyleconroy.com/per-test-database-isolation-in-postgres"></link>
    <updated>2017-09-20T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Over the years, I&#39;ve tried many different strategies for isolating individual tests at the database layer.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;One shared database, but all data is sharded by an account&lt;/strong&gt;: Works in the short term, but eventually you&#39;ll have global tables that aren&#39;t scoped to an account.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Creating a new database for each test&lt;/strong&gt;: Can be slow and error prone. Difficult to ensure all connections have been closed before dropping the database. Some CI providers only provide one logical test database.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Use an in-memory SQLite database:&lt;/strong&gt; Only works if your application avoids Postgres-specific features. Even then you may still run into runtime differences between database engines.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Truncating the tables between tests&lt;/strong&gt;: Test parallelization is tricky, if not impossible. No command to truncate all tables, drop all indexes, etc.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Wrap each test in a transaction&lt;/strong&gt;: Works fine as long as none of your code uses transactions or parallel queries. While Postgres can&#39;t nest transactions, some SQL layers &lt;a href=&#34;http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html#module-ActiveRecord::Transactions::ClassMethods-label-Nested+transactions&#34;&gt;simulate support&lt;/a&gt; using savepoints.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Give each test a single connection, scoped to temporary tables&lt;/strong&gt;: Supports individual transactions, but not two open transactions at once. Temporary tables can&#39;t be shared across connections.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After trying all these different solutions, I think I&#39;ve found a winning strategy. Postgres schemas and the search path allow you to isolate tests from each other while using the same logical database. You can think of a schema as a namespace for tables. From the docs:&lt;/p&gt;&#xA;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A database contains one or more named schemas, which in turn contain tables. […] The same object name can be used in different schemas without conflict; for example, both &lt;code&gt;schema1&lt;/code&gt; and &lt;code&gt;myschema&lt;/code&gt; can contain tables named &lt;code&gt;mytable&lt;/code&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are several reasons why one might want to use schemas: […] To allow many users to use one database without interfering with each other&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;Establish a connection to your database and create a new &lt;a href=&#34;https://www.postgresql.org/docs/9.6/static/ddl-schemas.html&#34;&gt;schema&lt;/a&gt;. Here I&#39;m using &lt;code&gt;foo&lt;/code&gt; as a placeholder name. In the real world, you&#39;d want to randomly generate a name for each individual test.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;CREATE SCHEMA foo&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Create a new connection pool to the database and set the &lt;a href=&#34;https://www.postgresql.org/docs/9.6/static/sql-set.html&#34;&gt;search path&lt;/a&gt; to only include the new schema.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;postgres:&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;//localhost/chalkbag?sslmode=disable&amp;amp;search_path=foo&#xA;&lt;/span&gt;&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;&lt;/span&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Now you can create as many tables, functions, enums, and indexes as you want, in complete isolation.  Once the test is finished, drop the schema. This step is optional if you&#39;re using a CI provider that destroys the database at the end of a test run.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;DROP SCHEMA foo CASCADE&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This strategy only works if you aren&#39;t using schemas for other purposes in your application. Here&#39;s an example in Go of the above steps.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;package&lt;/span&gt; main&#xA;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;import&lt;/span&gt; (&#xA;        &lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;database/sql&amp;#34;&lt;/span&gt;&#xA;&#xA;        _ &lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;github.com/lib/pq&amp;#34;&lt;/span&gt;&#xA;)&#xA;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;func&lt;/span&gt; main() {&#xA;        dburl &lt;span style=&#34;color:#555&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;postgres://localhost/db?sslmode=disable&amp;#34;&lt;/span&gt;&#xA;        db, err &lt;span style=&#34;color:#555&#34;&gt;:=&lt;/span&gt; sql.Open(&lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;postgres&amp;#34;&lt;/span&gt;, dburl)&#xA;        &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;if&lt;/span&gt; err &lt;span style=&#34;color:#555&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;nil&lt;/span&gt; {&#xA;                &lt;span style=&#34;color:#366&#34;&gt;panic&lt;/span&gt;(err)&#xA;        }&#xA;        &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;if&lt;/span&gt; err &lt;span style=&#34;color:#555&#34;&gt;:=&lt;/span&gt; provision(db); err &lt;span style=&#34;color:#555&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;nil&lt;/span&gt; {&#xA;                &lt;span style=&#34;color:#366&#34;&gt;panic&lt;/span&gt;(err)&#xA;        }&#xA;}&#xA;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;func&lt;/span&gt; provision(db &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;sql.DB) &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;error&lt;/span&gt; {&#xA;        &lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;// For each test, pick a new schema name at random.&#xA;&lt;/span&gt;&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;// `foo` is used here only as an example&#xA;&lt;/span&gt;&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;if&lt;/span&gt; _, err &lt;span style=&#34;color:#555&#34;&gt;:=&lt;/span&gt; db.Exec(&lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;CREATE SCHEMA foo&amp;#34;&lt;/span&gt;); err &lt;span style=&#34;color:#555&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;nil&lt;/span&gt; {&#xA;                &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;return&lt;/span&gt; err&#xA;        }&#xA;&#xA;        &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;func&lt;/span&gt;() {&#xA;                db.Exec(&lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;DROP SCHEMA foo CASCADE&amp;#34;&lt;/span&gt;)&#xA;        }()&#xA;&#xA;        surl &lt;span style=&#34;color:#555&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;postgres://localhost/db?sslmode=disable&amp;amp;search_path=foo&amp;#34;&lt;/span&gt;&#xA;        sdb, err &lt;span style=&#34;color:#555&#34;&gt;:=&lt;/span&gt; sql.Open(&lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;postgres&amp;#34;&lt;/span&gt;, surl)&#xA;        &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;if&lt;/span&gt; err &lt;span style=&#34;color:#555&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;nil&lt;/span&gt; {&#xA;                &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;return&lt;/span&gt; err&#xA;        }&#xA;&#xA;        &lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;// Run tests&#xA;&lt;/span&gt;&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;&lt;/span&gt;        _, err = sdb.Exec(&lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;SELECT 1&amp;#34;&lt;/span&gt;)&#xA;        &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;return&lt;/span&gt; err&#xA;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Using schemas avoids race conditions, makes clean up easy, and requires only a single logical database.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Writing API Clients in Go</title>
    <id>http://kyleconroy.com/writing-api-clients-in-go</id>
    <link href="https://kyleconroy.com/writing-api-clients-in-go"></link>
    <updated>2017-09-17T00:00:00Z</updated>
    <content type="html">&lt;p&gt;The humble API client. A deceptively simple piece of software. Make a request and parse a response. Repeat.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;With the rise of public web services, API clients have become the main integration point. However, many of the Go clients I encounter are obtuse. Here&#39;s my guide for writing boring API clients that age well.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We&#39;ll use the Dropbox Paper API as our example. First, start with a client struct.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;type&lt;/span&gt; client &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;struct&lt;/span&gt; {&#xA;    &lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;// unexported fields&#xA;&lt;/span&gt;&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;&lt;/span&gt;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Each API method should be represented as an exported method on the client. We&#39;ll use the &lt;a href=&#34;https://www.dropbox.com/developers/documentation/http/documentation#paper-docs-download&#34;&gt;document download&lt;/a&gt; method as our example.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;func&lt;/span&gt; (c &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;client) DownloadDoc() {}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;The method should have two arguments: a context and a method-specific argument struct. It may feel awkward passing around structs instead of positional arguments, but structs allow you to make additions to methods without making breaking changes to the methods signatures.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;type&lt;/span&gt; DocExport &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;struct&lt;/span&gt; {&#xA;    DocID  &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;string&lt;/span&gt;&#xA;    Format ExportFormat&#xA;}&#xA;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;func&lt;/span&gt; (c &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;client) DownloadDoc(ctx context.Context,&#xA;    in &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;DocExport) {&#xA;    &lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;// implemetation&#xA;&lt;/span&gt;&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;&lt;/span&gt;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Take special care in avoiding stringly-typed APIs. If a struct field is limited to a set of values, create a new type that encapsulates those values. In this case, the &lt;code&gt;Format&lt;/code&gt; field can only have two values: &lt;code&gt;markdown&lt;/code&gt; and &lt;code&gt;html&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;type&lt;/span&gt; ExportFormat &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;string&lt;/span&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;const&lt;/span&gt; (&#xA;    ExportFormatMarkdown ExportFormat = &lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;markdown&amp;#34;&lt;/span&gt;&#xA;    ExportFormatHTML                  = &lt;span style=&#34;color:#c30&#34;&gt;&amp;#34;html&amp;#34;&lt;/span&gt;&#xA;)&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;As an added bonus, these types work natively with the &lt;code&gt;encoding/json&lt;/code&gt; package.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The method should return two results: a method-specific return value struct and an error.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;type&lt;/span&gt; DocExportResult &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;struct&lt;/span&gt; {&#xA;    Owner    &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;string&lt;/span&gt;&#xA;    Title    &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;string&lt;/span&gt;&#xA;    Revision &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;int64&lt;/span&gt;&#xA;    MIME     &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;string&lt;/span&gt;&#xA;    Content  []&lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;byte&lt;/span&gt;&#xA;}&#xA;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;func&lt;/span&gt; (c &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;client) DownloadDoc(ctx context.Context,&#xA;    in &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;DocExport) (&lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;DocExportResult, &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;error&lt;/span&gt;) {&#xA;    &lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;// implemetation&#xA;&lt;/span&gt;&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;&lt;/span&gt;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;You may have noticed that our client struct isn&#39;t exported. Instead of exporting your concrete type, export an interface. Using an interface makes it easier for downstream consumers to mock out calls to your package.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;type&lt;/span&gt; Client &lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;interface&lt;/span&gt; {&#xA;    DownloadDoc(context.Context, &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;DocExport) (&#xA;        &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;DocExportResult, &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;error&lt;/span&gt;)&#xA;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;For increased flexibility, allow users to pass in their own &lt;code&gt;http.Client&lt;/code&gt;, as many use cases require a customized HTTP transport.&lt;/p&gt;&#xA;&lt;pre style=&#34;background-color:#f0f3f3&#34;&gt;&#xA;&lt;span style=&#34;color:#069;font-weight:bold&#34;&gt;func&lt;/span&gt; NewClient(token &lt;span style=&#34;color:#078;font-weight:bold&#34;&gt;string&lt;/span&gt;, hclient &lt;span style=&#34;color:#555&#34;&gt;*&lt;/span&gt;http.Client) Client {&#xA;    &lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;// implementation&#xA;&lt;/span&gt;&lt;span style=&#34;color:#09f;font-style:italic&#34;&gt;&lt;/span&gt;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;This isn&#39;t the only way to design API clients in Go. Have another style you like more? I&#39;d love to know about it.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Blogging on Paper</title>
    <id>http://kyleconroy.com/blogging-on-paper</id>
    <link href="https://kyleconroy.com/blogging-on-paper"></link>
    <updated>2017-08-29T00:00:00Z</updated>
    <content type="html">&lt;p&gt;I recently published my &lt;a href=&#34;http://kyleconroy.com/progressively-worse-apps&#34;&gt;first blog post of 2017&lt;/a&gt;. The fact that it was posted exactly one year after my last post was mere coincidence. Looking over the the last six years of my blog, it&#39;s hard to really call it a blog at all.&lt;/p&gt;&#xA;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Year&lt;/th&gt;&#xA;&lt;th&gt;2011&lt;/th&gt;&#xA;&lt;th&gt;2012&lt;/th&gt;&#xA;&lt;th&gt;2013&lt;/th&gt;&#xA;&lt;th&gt;2014&lt;/th&gt;&#xA;&lt;th&gt;2015&lt;/th&gt;&#xA;&lt;th&gt;2016&lt;/th&gt;&#xA;&lt;th&gt;2017&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Number of Posts&lt;/td&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;td&gt;2&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;td&gt;1&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;I think I may change the title to &amp;quot;Kyle Conroy&#39;s Personal Yearly Post&amp;quot;. I&#39;d love to pretend my posts are so meticulously researched that they take a year to write, but that&#39;s not the case. It took me more time to deploy my site than it did to write &amp;quot;&lt;a href=&#34;http://kyleconroy.com/blog-post&#34;&gt;I should write a blog post&lt;/a&gt;&amp;quot;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;One of the reasons for the slow output is my current workflow. I write posts in Markdown using vim, generate HTML using Jekyll, and serve the content via a small web app in Go on Heroku.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a few problems with this setup. Starting a new post involves firing up vim and creating a new Markdown file, a process which isn&#39;t easy to replicate on mobile. When I&#39;m finished with a draft, I can&#39;t easily get feedback from peers unless I open a PR on Github and invite them to my private repository.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;At work, we use &lt;a href=&#34;https://hackpad.com/&#34;&gt;Hackpad&lt;/a&gt; as one of our tools for collaborating on documents. Dropbox bought Hackpad, shut it down, and turned it into &lt;a href=&#34;/&#34;&gt;Dropbox Paper&lt;/a&gt;. Paper feels like Hackpad with all the bugs ironed out. Once I found out that Paper supported exporting documents in Markdown, I decided to try it out for blogging. After writing two posts in Paper, I&#39;m glad I&#39;ve switched.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I found myself in some long lines at a museum over the weekend. While I was waiting, I worked on few posts using the Paper mobile app. I&#39;m sure there are mobile apps out there for editing Markdown, but I&#39;d need to figure out how to integrate them into my workflow.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Paper also supports inline comments. I was able to ask a few friends for input on the previous post, and they could post comments inline. Many document editing platforms support comments, but I haven&#39;t used one before for blogging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My previous setup is unchanged save for an extra step at the start where I pull down posts from Paper using the API. While the API works, it was some serious short comings:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The markdown export doesn&#39;t support fenced code blocks.&lt;/li&gt;&#xA;&lt;li&gt;The API doesn&#39;t return the date a document was created or updated.&lt;/li&gt;&#xA;&lt;li&gt;Changes to Paper documents don&#39;t generate webhooks.&lt;/li&gt;&#xA;&lt;li&gt;I can&#39;t create a read-only API key.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;These are minor annoyances now, but may prove problematic in the future. I&#39;ve also open-sourced &lt;a href=&#34;https://github.com/kyleconroy/paper/&#34;&gt;my Paper API client written in Go&lt;/a&gt;. It&#39;s incomplete, but implements enough of the API to export documents.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve now written two posts within the span of a week. We&#39;ll see how long it lasts, but using Paper has made writing more enjoyable.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Progressively Worse Apps</title>
    <id>http://kyleconroy.com/progressively-worse-apps</id>
    <link href="https://kyleconroy.com/progressively-worse-apps"></link>
    <updated>2017-08-28T00:00:00Z</updated>
    <content type="html">&lt;p&gt;As &lt;a href=&#34;https://developers.google.com/web/progressive-web-apps/&#34;&gt;progress&lt;/a&gt;&lt;a href=&#34;https://developers.google.com/web/progressive-web-apps/&#34;&gt;ive web apps&lt;/a&gt; become more popular, navigation has become fraught with peril. It&#39;s common for apps to make tens of requests to render a single page. Parts of the application load one by one until the entire page is finished. Poor network connections and slow endpoints expose intermediate states to users. &lt;strong&gt;Asynchronously loaded page elements shift click targets, resulting in a usability nightmare.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Let&#39;s take a look at the how an example application, the Heroku dashboard, suffers from these issues. Here&#39;s how the applications list loads.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;/images/s_720837EE43E334638A99FF92C11432D9DA3F83171CEE7E593D7CAA4BE5F1C760_1503596154737_heroku-apps.png&#34; alt=&#34;Loading stages for application list&#34; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are four phases before the page is finished loading. I find the gray layout unnecessary. Just continue to show me the loader, as I can&#39;t interact with the page. Without the loader, I&#39;m not sure if the page is still loading.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Besides the fake grey list, the application list page works. I can interact with the page before application metrics load. Once the metrics do load, nothing on the page shifts around or changes place.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The application overview isn&#39;t as lucky.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;/images/s_720837EE43E334638A99FF92C11432D9DA3F83171CEE7E593D7CAA4BE5F1C760_1503596147789_heroku-app.png&#34; alt=&#34;Loading stages for application overview&#34; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The first problem is the application metrics pane. Like the application list view, metrics are fetched asynchronously. However, here the placeholder is the wrong size. When the metrics load, the pane grows by a small amount. While the change is minimal, it&#39;s big enough to disrupt click targets.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The second, larger problem is the add-ons pane. A Heroku application can have unlimited add-ons, making it difficult to size a placeholder element.&#xA;When the add-ons do load, the dyno pane is pushed further down the page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The inspiration for this post came from the frustration of having this happen to me. I went to select the worker dyno, but right before I clicked, the add-ons finished loading, causing me to select the web dyno instead.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There a few solutions to this problem.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;First, ask yourself if you really need a dynamically-loaded page in the first place. Static pages still work surprisingly well, not matter what Google and Facebook say.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you do decide to load parts of your page dynamically, make sure your placeholders are correctly sized, both vertically and horizontally. The container shouldn&#39;t grow or shrink after the load.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When building and testing your application, throttle your connection to simulate a slow network. This feature is built in to most modern browsers.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Don&#39;t cause users to second guess your app. Make navigation consistent under all scenarios.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Generating Code Examples</title>
    <id>http://kyleconroy.com/generating-code-examples</id>
    <link href="https://kyleconroy.com/generating-code-examples"></link>
    <updated>2016-08-28T00:00:00Z</updated>
    <content type="html">&lt;p&gt;I&#39;ve been thinking about a specific problem when writing technical&#xA;documentation: code examples. In most cases, code examples are written by hand&#xA;in a single language. If you want to add more languages, you&#39;ll need to write&#xA;more examples. As you write more examples, typos creep in. The code no longer&#xA;compiles. How can you fix this problem? I have a couple of ideas.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Requirements&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;For my purposes, I&#39;m looking to write a single code snippet and then generate&#xA;sample code in a variety of languages. Right now I&#39;m targeting Ruby, Python,&#xA;Go, Java, Node, C#, PHP, C++, C and Swift. At a minimum, I need support for:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Importing modules&lt;/li&gt;&#xA;&lt;li&gt;Control flow (if, else, while, for, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Lists and maps&lt;/li&gt;&#xA;&lt;li&gt;Calling functions and methods&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;I don&#39;t have a functional language in my list. I&#39;m not sure how you&#39;d translate&#xA;a code example written in an imperative language to one in a functional&#xA;language.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Approaches&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;These are some of the approaches I thought through.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Templates&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;The first idea that came to mind was templates. Apparently this is how&#xA;most code generators work. Note that when I say &amp;quot;code generator&amp;quot; here, I&#39;m not&#xA;talking about machine code. Instead, I&#39;m talking about projects like&#xA;&lt;a href=&#34;http://swagger.io/&#34;&gt;swagger&lt;/a&gt; or &lt;a href=&#34;https://grpc.io&#34;&gt;gRPC&lt;/a&gt;. They take some input&#xA;and generate a large amount of source code.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think templates work for these projects because the input is constrained. For&#xA;example, Swagger ingests a JSON document which describes an API. &lt;code&gt;gRPC&lt;/code&gt; and&#xA;&lt;code&gt;protoc&lt;/code&gt; ingest &lt;code&gt;.proto&lt;/code&gt; files. These inputs aren&#39;t turing-complete programming&#xA;languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;We&#39;re trying to translate one sample program into many languages.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;A DSL&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;I thought, alright, let&#39;s build a DSL. However, most DSLs I&#39;ve seen are&#xA;glorified configuration languages. Ansible uses YAML to encode a&#xA;psuedo-programming language. There are a million gems for creating DSLs in&#xA;Ruby, but I don&#39;t think those are up for the task (would love to be proven&#xA;wrong).&lt;/p&gt;&#xA;&#xA;&lt;p&gt;When writing code examples, we want to be able to use the full power of a&#xA;turing-complete programming language, but one that has features that cleanly&#xA;map to all languages we wish to support. This would be a &amp;quot;lowest-common&#xA;denominator&amp;quot; language, one that can easily be correctly transpiled into many&#xA;languages.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;It wouldn&#39;t be a particularly powerful language, but it would allow you to&#xA;write the basic code you&#39;d need. You could then include macros (or some type of&#xA;extensions) to generate specific code sections. An example would be&#xA;initializing a &lt;code&gt;gRPC&lt;/code&gt; client. Each language does it in a separate way, but you&#xA;could abstract it behind a macro.&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Use a subset of an existing language&lt;/h3&gt;&#xA;&#xA;&lt;p&gt;Instead of creating a new language, use a subset of an existing language. For&#xA;example, Go has a parser built into the standard library. I could write examples&#xA;in a subset of Go (no goroutines, no type casting, etc.) and generate my code&#xA;examples that way. The macros I mentioned above aren&#39;t super easy to implement,&#xA;but I could just hardcode them into the &amp;quot;language&amp;quot;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Wrapping up&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#39;m not particularly happy with any of these ideas.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can&#39;t be the first person to run into this issue. If you&#39;ve solved this&#xA;problem (no matter the context) I&#39;d love to hear how you did it.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>What if Last Week Tonight aired on PBS?</title>
    <id>http://kyleconroy.com/pbs-presents-last-week-tonight</id>
    <link href="https://kyleconroy.com/pbs-presents-last-week-tonight"></link>
    <updated>2016-04-24T00:00:00Z</updated>
    <content type="html">&lt;p&gt;That isn&#39;t to say that Last Week Tonight doesn&#39;t report on serious news. It&#xA;does, but every segment includes plenty of humor (and usually a dick joke).&#xA;Here&#39;s what Last Week Tonight would look like if it aired on the Public&#xA;Broadcasting Service.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a data-flickr-embed=&#34;true&#34;  href=&#34;https://www.flickr.com/photos/140518731@N02/26605211036/in/dateposted-public/&#34; title=&#34;PBS presents: Last Week Tonight&#34;&gt;&lt;img src=&#34;https://farm2.staticflickr.com/1608/26605211036_6b2f9fda56_b.jpg&#34; width=&#34;1024&#34; height=&#34;576&#34; alt=&#34;PBS presents: Last Week Tonight&#34;&gt;&lt;/a&gt;&lt;script async src=&#34;//embedr.flickr.com/assets/client-code.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;&#xA;&#xA;&lt;p class=&#34;footnote&#34;&gt;Why Flickr? YouTube marked it as stolen content. Vimeo has a weekly upload&#xA;limit of 500MB. Dropbox will disable files that get viewed too many times. It&#39;s 2016 and sharing video content is still difficult.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>I should write a blog post</title>
    <id>http://kyleconroy.com/blog-post</id>
    <link href="https://kyleconroy.com/blog-post"></link>
    <updated>2015-08-14T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Wow, I haven’t written a post in a while.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;This one will need to be really good, then.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Huh, my blog sure looks outdated.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can’t write a post with it looking like that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I need to update the design.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;How do I deploy this thing again?&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Oh, it’s a full-blown web application.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;All blogs today use static site generators.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should look up the best static site generator and switch to that.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;There are a lot of choices, I should figure out how I’m going to migrate my blog.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I’m sure other people have this problem all the time!&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I should write a blog post.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>HTML ROMs: Self-contained web applications</title>
    <id>http://kyleconroy.com/self-contained-web-apps</id>
    <link href="https://kyleconroy.com/self-contained-web-apps"></link>
    <updated>2014-11-07T00:00:00Z</updated>
    <content type="html">&lt;p&gt;About a year ago, my friends found out that I had never played Pokemon Red or&#xA;Blue. After some prodding, I agreed to play, filling a supposed void in my&#xA;childhood. I was on my way to be the best there ever was.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Thanks to &lt;a href=&#34;http://openemu.org/&#34;&gt;OpenEMU&lt;/a&gt;, playing classic video games is easier&#xA;than ever. All you need is a ROM, which are easy to find via Google. They&#39;re&#xA;even legal if you own the original game. ROMs are self-contained time-capsules.&#xA;Hours of game play, packed into less than 500k of data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;What if we took the idea of ROMs and applied it to the web? A single HTML file&#xA;containing a full application, no network connectivity required.&#xA;&lt;a href=&#34;http://gabrielecirulli.github.io/2048/&#34;&gt;2048&lt;/a&gt;, &lt;a href=&#34;http://game.notch.net/drowning/&#34;&gt;Drowning&lt;/a&gt;, and &lt;a href=&#34;http://adarkroom.doublespeakgames.com/&#34;&gt;A Dark Room&lt;/a&gt; are a few examples&#xA;that come to mind. These games are great, but how long will they be around?&#xA;Servers die, domain names expire, and files disappear. The archive team can&#39;t&#xA;always be called upon to ride in and save the day.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The answer is to turn them into single-file web applications: HTML ROMs.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;The browser as an emulator&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;HTML ROMs are self contained applications that live in a single HTML file. They&#xA;can&#39;t include any other files and must work without a network connection. A&#xA;user should be able to save the file, open it locally, and have everything Just&#xA;Work.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;To see how feasible this idea was, I took some time to make some to convert a&#xA;few HTML games into single-file applications. Behold, &lt;a href=&#34;/roms/2048.html&#34;&gt;2048&lt;/a&gt;&#xA;and &lt;a href=&#34;/roms/drowning.html&#34;&gt;Drowning&lt;/a&gt; as self-contained single-file applications,&#xA;that you can enjoy whenever and where ever you have access to a web browser.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Development considerations&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First, don&#39;t compress or minify JavaScript or CSS. This allows other people to&#xA;easily remix and change the original application. Drowning is a good example of&#xA;a game that&#39;s hard to change, as the original Dart source-code isn&#39;t available.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Images, audio, and video should be base64 encoded into data URIs. The increase&#xA;in file size is worth the increase in portability. You never need to worry&#xA;about sending or saving more than one file.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Some tooling will be required to make the above easy. A CSS preprocessor that&#xA;&lt;a href=&#34;https://github.com/heldr/datauri&#34;&gt;turns URLs into data URIs&lt;/a&gt;. A JavaScript&#xA;&lt;a href=&#34;https://github.com/esnext/es6-module-transpiler&#34;&gt;ES6 transpiler&lt;/a&gt; to compile&#xA;individual modules into one larger JavaScript file. Tie them together with your&#xA;favorite build tool, and your on your way.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Sadly, mobile browsers don&#39;t make it easy to save and load HTML files from&#xA;the file system. An application that wraps a web view with easy loading from&#xA;the file system wouldn&#39;t be too hard to right, and would ensure that mobile&#xA;users can take advantage of permanent offline access, without developers having&#xA;to worry about the &lt;a href=&#34;http://alistapart.com/article/application-cache-is-a-douchebag&#34;&gt;headache that is&#xA;AppCache&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Go forth and create&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Transform your favorite web game into an HTML ROM. Send me a link and I&#39;ll add&#xA;it to the list below:&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/roms/2048.html&#34;&gt;2048&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/roms/drowning.html&#34;&gt;Drowning&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
  </entry>
  <entry>
    <title>The Need for an Open Barcode Database</title>
    <id>http://kyleconroy.com/open-barcode-database</id>
    <link href="https://kyleconroy.com/open-barcode-database"></link>
    <updated>2014-01-06T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Next time you&#39;re in the store, grab a random product and look turn it around.&#xA;You&#39;ll probably see one of these:&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;/images/gtin.jpg&#34; alt=&#34;GTIN Code&#34; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Encoded in that bar code is the product&#39;s &lt;a href=&#34;http://en.wikipedia.org/wiki/Global_Trade_Item_Number&#34;&gt;Global Trade Item Number&#xA;(GTIN)&lt;/a&gt;.  It&#39;s 8-14 digits long and almost every product sold in the&#xA;world has one of these numbers. They are managed by the &lt;a href=&#34;http://en.wikipedia.org/wiki/GS1&#34;&gt;GS1&lt;/a&gt;, a&#xA;non-profit organization that manages standards for supply chains. GS1 provides&#xA;(and controls) the &lt;a href=&#34;http://en.wikipedia.org/wiki/GEPIR&#34;&gt;Global Electronic Party Information Registry&#xA;(GEPIR)&lt;/a&gt;, the authoritative source for GTINs. The two interfaces to&#xA;GEPIR are a web portal and a SOAP web service, both of which restrict a user to&#xA;20-30 &lt;strong&gt;daily&lt;/strong&gt; requests. There is no option to download the dataset, submit&#xA;missing item numbers, or correct inaccuracies.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Compare this to OpenStreetMaps, where I can download an entire map of the earth&#xA;with a single &lt;a href=&#34;http://planet.openstreetmap.org/&#34;&gt;click&lt;/a&gt; or add a missing building using their web-based&#xA;editor.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I&#39;m not the first person to realize how bad the situation is. There are other&#xA;options out there, but none are the open database that&#39;s needed. Most options&#xA;are just as closed as GEPIR.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.upcdatabase.com/&#34;&gt;UPC Database&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.datakick.org&#34;&gt;Datakick&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.scandit.com/product-api&#34;&gt;Scandit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://eandata.com/&#34;&gt;EANdata&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.product-open-data.com/&#34;&gt;Open Product Data (POD)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;The last service on the list, POD, is of interest. It has almost a million&#xA;indexed items and has a free dump of the data. The data is licensed under the&#xA;&lt;a href=&#34;http://opendatacommons.org/licenses/odbl/&#34;&gt;Open Data Commons Open Database License&lt;/a&gt;, which is the same license&#xA;as Open Street Maps. The only issue is that POD doesn&#39;t support the&#xA;crowd-sourcing of its data.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think OpenStreetMaps solved this problem the right way: get people&#xA;contributing data and make that data available under an open license.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;My idea is an application that let&#39;s you scan bar codes and upload GTINs. If the&#xA;product isn&#39;t in the database, just attach a photo and add a short description.&#xA;The database will be small at first, but once a few hundred people start&#xA;tagging, it will be the next &lt;a href=&#34;http://en.wikipedia.org/wiki/CueCat&#34;&gt;CueCat&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>The Website That Never Was</title>
    <id>http://kyleconroy.com/website-that-never-was</id>
    <link href="https://kyleconroy.com/website-that-never-was"></link>
    <updated>2013-04-03T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Expiring domain names make me sad. Those expiry emails are a constant reminder&#xA;that I had an idea I didn&#39;t execute on (sometimes for the better). After my&#xA;most recent expiry, I thought I&#39;d take a trip through my expired domains and&#xA;see what could have been.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;scrapebook.org&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;I&#39;ve toyed with the idea of deleting my Facebook account many times, but I&#39;m&#xA;always worried about losing the data I&#39;ve contributed. I wrote a &lt;a href=&#34;https://github.com/kyleconroy/scrapebook&#34;&gt;tool&lt;/a&gt;&#xA;to pull that data from Facebook. I discontinued the project (which was only&#xA;ever half done) once Facebook added the ability to &lt;a href=&#34;https://www.facebook.com/help/131112897028467/&#34;&gt;download your data&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;kandrandyou.org&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;After Daniel Ritchie passed, I setup a tumblr for people to submit photos of&#xA;themselves with &lt;a href=&#34;http://en.wikipedia.org/wiki/C_%28programming_language%29&#34;&gt;The C Programming Language&lt;/a&gt;. 23 people submitted images.&#xA;While I let the domain expire, the &lt;a href=&#34;http://kandrandyou.tumblr.com&#34;&gt;tumblr is still up&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;adoptarepo.org&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;This one hurts. Adopt a Repo was going to the be the best place to find&#xA;maintainers for your old, abandoned projects. It was going to look just like a&#xA;pet adoption website, complete with &lt;a href=&#34;http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=ao2A-eEIkA4&#34;&gt;funny commercials&lt;/a&gt;. You&#39;d sign in&#xA;with you Github account, identify your projects, and then the site would add a&#xA;banner to the README announcing the search for a new maintainer. I still think&#xA;there is a need for a solution to abandoned projects on Github.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;areyouresponsive.com&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Are You Responsive served as a developer tool for testing responsive websites.&#xA;It&#39;s &lt;a href=&#34;http://areyouresponsive.herokuapp.com/&#34;&gt;still alive&lt;/a&gt;, but I let the name expire due to low usage and better&#xA;tools being &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Tools/Responsive_Design_View&#34;&gt;built into browsers&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;dothingstellpeople.com&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;After reading Carl Lange&#39;s great post &lt;a href=&#34;http://carl.flax.ie/dothingstellpeople.html&#34;&gt;Do Things, Tell People&lt;/a&gt;, I&#xA;wanted to create a community based around people sharing their most recent&#xA;creations and getting feedback. Imagine Hacker News but only Show HN posts. I&#xA;decided against the idea because I didn&#39;t like the current state of online&#xA;community software. I may reboot the idea using &lt;a href=&#34;http://www.discourse.org/&#34;&gt;Discourse&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;stockorshop.com&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;After my &lt;a href=&#34;http://www.kyleconroy.com/2010/04/apple-stock&#34;&gt;Apple products or stock&lt;/a&gt; post, I thought it would be fun to&#xA;generalize the concept and do it for other products. Game consoles, laptops,&#xA;cars, and maybe even soda. Decided that I didn&#39;t want to be a one trick pony.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;anyonecancode.org&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Inspired by &lt;a href=&#34;http://www.youtube.com/watch?v=thkDWSUzQDo&#34;&gt;Anyone Can Cook&lt;/a&gt; from Pixar&#39;s &lt;a href=&#34;http://www.imdb.com/title/tt0382932/&#34;&gt;Ratatouille&lt;/a&gt;, Anyone Can&#xA;Code was going to be a website for teaching beginners how to code. Never got&#xA;past the idea phase.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;castinghawk.com&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;A site for aspiring actors managing extras work. These actors are inundated&#xA;with text messages and emails for extra work everyday, with few of these&#xA;messages relevant.  I built a prototype version, but never released it because&#xA;it relied on email forwarding. I also wanted to use machine learning (via&#xA;&lt;a href=&#34;http://scikit-learn.org/stable/&#34;&gt;scikit&lt;/a&gt;) so that when a user flagged enough job offers, we could get&#xA;an idea of what items they liked.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;codingwithfriends.com&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;When Github launched their game jam, I wanted to make a crappy social game&#xA;version of Github. You&#39;d have to buy coins to open pull requests and create&#xA;repos, and opening issues allowed you to level up as a developer.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Circles of Parity: A History</title>
    <id>http://kyleconroy.com/circles-of-parity</id>
    <link href="https://kyleconroy.com/circles-of-parity"></link>
    <updated>2011-12-03T00:00:00Z</updated>
    <content type="html">&lt;p&gt;About two weeks ago reddit user &lt;a href=&#34;http://www.reddit.com/user/AZxWildcat&#34;&gt;AZxWildcat&lt;/a&gt; submitted this awesome image to the &lt;a href=&#34;http://www.reddit.com/r/CFB/&#34;&gt;College Football subreddit&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;/images/circle.jpg&#34; alt=&#34;PAC 12 Circle of Parity&#34; /&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Instantly after seeing this, I wanted to know more. How often does this happen? What year did it happen the most? When did this first happen?&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Science Time&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;My initial hypothesis was that circles of parity occur once or twice a season. To test this statement, I needed every college football game score. Ever. Thankfully, the Internet is a wonderful place.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;James Howell, College Football Data King&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;One Google search later and I landed on &lt;a href=&#34;http://homepages.cae.wisc.edu/~dwilson/rfsc/history/howell/&#34;&gt;James Howell&#39;s College Football Scores&lt;/a&gt; page. This guy has the score of every college football game going back to 1869. Yes, 142 years of football scores. He also maintains a similar data set of conference affliations. I wrote a fabric script to save all the results locally for further processing.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Analysis&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;After downloading and transforming the data, it was time to start analyzing. For each year I had a JSON representation of the conference affiliations and a CSV file of football scores. The first step was to create a a directed graph for all the games that year. Each node in the graph is a team. Connections to another node inditcate victory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Next, for each conference, I took a subset of the overall games graph involving only the teams from that conference. In the graph, a circle of parity manifests itself as a cycle which touches every node one time. In graph theory, this is called a &lt;a href=&#34;http://en.wikipedia.org/wiki/Hamiltonian_path&#34;&gt;Hamiltonian Cycle&lt;/a&gt;. To find these cycles, I first enumerated all paths in the graph. Since I made sure to only visit a given node once within a path, a path is a Hamiltonian cycle if and only if its length is equal to the number of nodes in the graph. With just under &lt;a href=&#34;https://github.com/derferman/circle-of-parity/blob/master/analyze.py&#34;&gt;a hundred lines of Python&lt;/a&gt; my solution was complete.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Results&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It turns out my initial hypothesis was correct. A circle of parity will likely form once a season. However, after 142 years of football, there are some really interesting data points.&lt;/p&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Total circles:&lt;/strong&gt; 134 in 142 years&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Average per year:&lt;/strong&gt; 0.94&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;First circle:&lt;/strong&gt; 1869 between Rutgers and Princeton&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Conference with most circles:&lt;/strong&gt; 16 in the Big Ten&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Most in a season:&lt;/strong&gt; 6 in 2006 with Big 12, Big East, CUSA, MAC, Pac 10, SEC&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Largest circle:&lt;/strong&gt; 16 teams, WAC in 1997&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;In 1997 there was a circle of parity between all &lt;strong&gt;16 teams&lt;/strong&gt; in the WAC.&lt;/p&gt;&#xA;&#xA;&lt;table class=&#34;pretty&#34;&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;th&gt;Winner&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;th&gt;Loser&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;th&gt;Score&lt;/th&gt;&#xA;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Fresno State&lt;/td&gt; &lt;td&gt;Nevada-Las Vegas&lt;/td&gt; &lt;td&gt;46-28&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Nevada-Las Vegas&lt;/td&gt; &lt;td&gt;Texas Christian&lt;/td&gt; &lt;td&gt;21-19&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Texas Christian&lt;/td&gt; &lt;td&gt;Southern Methodist&lt;/td&gt; &lt;td&gt;21-18&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Southern Methodist&lt;/td&gt; &lt;td&gt;Wyoming&lt;/td&gt; &lt;td&gt;22-17&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Wyoming&lt;/td&gt; &lt;td&gt;San Diego State&lt;/td&gt; &lt;td&gt;41-17&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;San Diego State&lt;/td&gt; &lt;td&gt;San Jose State&lt;/td&gt; &lt;td&gt;48-21&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;San Jose State&lt;/td&gt; &lt;td&gt;Air Force&lt;/td&gt; &lt;td&gt;25-22&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Air Force&lt;/td&gt; &lt;td&gt;Colorado State&lt;/td&gt; &lt;td&gt;24-0&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Colorado State&lt;/td&gt; &lt;td&gt;Tulsa&lt;/td&gt; &lt;td&gt;44-8&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Tulsa&lt;/td&gt; &lt;td&gt;Utah&lt;/td&gt; &lt;td&gt;21-13&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Utah&lt;/td&gt; &lt;td&gt;Rice&lt;/td&gt; &lt;td&gt;31-14&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Rice&lt;/td&gt; &lt;td&gt;New Mexico&lt;/td&gt; &lt;td&gt;35-23&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;New Mexico&lt;/td&gt; &lt;td&gt;Texas-El Paso&lt;/td&gt; &lt;td&gt;38-20&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Texas-El Paso&lt;/td&gt; &lt;td&gt;Brigham Young&lt;/td&gt; &lt;td&gt;14-3&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Brigham Young&lt;/td&gt; &lt;td&gt;Hawaii&lt;/td&gt; &lt;td&gt;17-3&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&#x9;&lt;tr&gt; &lt;td&gt;Hawaii&lt;/td&gt; &lt;td&gt;Fresno State&lt;/td&gt; &lt;td&gt;28-16&lt;/td&gt; &lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;p&gt;Absolutely insane.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;If you&#39;re interested, the &lt;a href=&#34;https://raw.github.com/derferman/circle-of-parity/master/report.txt&#34;&gt;full report&lt;/a&gt; lists all 134 circles.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Making it Faster&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;It turns out that finding Hamiltonian cycles is hard. Not just hard, NP-complete hard. Thankfully, my graphs are very limited in size so the report only takes about a minute to generate on my laptop.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Even so, I thought I would give &lt;a href=&#34;http://pypy.org/&#34;&gt;PyPy&lt;/a&gt; a chance to work its magic. PyPy is a &amp;quot;fast, compliant alternative implementation of Python&amp;quot; written in Python itself. They aren&#39;t lying when they say its fast.&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;$ time python analyze.py&#xA;&#xA;real        0m52.537s&#xA;user        0m51.050s&#xA;sys         0m0.066s&#xA;&#xA;$ time pypy analyze.py&#xA;&#xA;real        0m22.758s&#xA;user        0m18.952s&#xA;sys         0m0.131s&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;Without changing a line of code, my code saw a &lt;strong&gt;56.6%&lt;/strong&gt; percent improvement in running time. If you haven&#39;t checked out PyPy yet, I suggest you head over the homepage right now and get reading.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Wrapping Up&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;All my data and code can be found in the &lt;a href=&#34;https://github.com/derferman/circle-of-parity&#34;&gt;circle-of-parity&lt;/a&gt; Github repo. Another huge thanks to AZxWildcat, James Howell, and the website where I got some of the cycle detection code (which I have now forgotton).&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Blocking that Annoying Bar on Websites</title>
    <id>http://kyleconroy.com/annoying-bar</id>
    <link href="https://kyleconroy.com/annoying-bar"></link>
    <updated>2010-09-20T00:00:00Z</updated>
    <content type="html">&lt;p&gt;More and more websites are popping up toolbars when you scroll down a certain distance on a page.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;/images/apture/slashfilm.jpg&#34; alt=&#34;Apture on Slashfilm&#34;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I can&#39;t stand these annoying bars, some of which are powered by Apture.com&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;/images/apture/apture.jpg&#34; alt=&#34;Apture Logo&#34;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;I think &lt;strong&gt;Annoy.&lt;/strong&gt; should be added to that list. If you want to block the Apture bar, simply add&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;127.0.0.1 www.apture.com&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;to your hosts file (usually /etc/hosts)&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>VoiceForms 4000: Wufoo + Twilio = Serious Business</title>
    <id>http://kyleconroy.com/voiceforms-4000</id>
    <link href="https://kyleconroy.com/voiceforms-4000"></link>
    <updated>2010-08-31T00:00:00Z</updated>
    <content type="html">&lt;p&gt;Just finished up hacking on my submission for the Wufoo API contest. VoiceForms&#xA;4000 takes any existing Wufoo form and turns it into a phone survey. The app is&#xA;written in Python, runs on App Engine, and uses Twilio for all the phone magic.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://voiceforms4000.appspot.com/&#34;&gt;https://voiceforms4000.appspot.com/&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Go ahead and fill one of the sample forms and tell me what you think.&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>jQueried: A Safari 5 Extension</title>
    <id>http://kyleconroy.com/jqueried-safari-extension</id>
    <link href="https://kyleconroy.com/jqueried-safari-extension"></link>
    <updated>2010-06-08T00:00:00Z</updated>
    <content type="html">&lt;p&gt;jQueried is a Safari 5 extension in the same vein as the jQuerify bookmarklet. jQueried adds jQuery to the current webpage, a task which can be very useful for debugging.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;After finishing my first extension, simple as it is, I am impressed with the simplicity of Safari&#39;s extension API. Coupled with Firefox&#39;s Jetpack and Chrome&#39;s extension system, it looks like the future of browser extensions is all JS + CSS + HTML.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Download the extension: &lt;a href=&#34;http://dl.dropbox.com/u/40773/jqueried.safariextz&#34;&gt;http://dl.dropbox.com/u/40773/jqueried.safariextz&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Source is on github: &lt;a href=&#34;http://github.com/derferman/jqueried&#34;&gt;http://github.com/derferman/jqueried&lt;/a&gt;&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>What if I had bought Apple stock instead?</title>
    <id>http://kyleconroy.com/apple-stock</id>
    <link href="https://kyleconroy.com/apple-stock"></link>
    <updated>2010-04-24T00:00:00Z</updated>
    <content type="html">&lt;link type=&#34;text/css&#34; rel=&#34;stylesheet&#34; href=&#34;/css/table-style.css&#34; /&gt; &#xA;&lt;script type=&#34;text/javascript&#34; src=&#34;/js/jquery.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;text/javascript&#34; src=&#34;/js/jquery.tablesorter.min.js&#34;&gt;&lt;/script&gt; &#xA;&lt;script type=&#34;text/javascript&#34;&gt; &#xA;  $(document).ready(function(){&#xA;    $(&#34;#apple&#34;).tablesorter({ &#xA;      sortList: [[3,1]] &#xA;    });&#xA;  });&#xA;&lt;/script&gt;&#xA;&#xA;&lt;p&gt;&#xA;  Currently, Apple&#39;s stock is at an all time high. A share today is worth over 40 times its value seven years ago. So, how much would you have today if you purchased stock instead of an Apple product? See for yourself in the table below. A huge thanks to &lt;a href=&#34;http://www.everymac.com&#34;&gt;everymac.com&lt;/a&gt; for the original prices and release dates. All values are calculated using Apple&#39;s current stock price according to &lt;a href=&#34;http://brivierestockquotes.appspot.com/&#34;&gt;http://brivierestockquotes.appspot.com&lt;/a&gt;.&#xA;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&#xA;  I have also released the data set behind the calculations, which include Apple&#39;s stock price since 1997 as well as almost all Apple products released since 1997. Code at &lt;a href=&#34;http://www.github.com/kyleconroy/apple-stock&#34;&gt;github.com/kyleconroy/apple-stock&lt;/a&gt;.&#xA;&lt;/p&gt;&#xA; &#xA;&lt;p&gt;&#xA;  Big thanks to &lt;a href=&#34;http://news.ycombinator.com/user?id=gojomo&#34;&gt;gojomo&lt;/a&gt; at &lt;a href=&#34;http://news.ycombinator.com/item?id=1291809&#34;&gt;http://news.ycombinator.com/item?id=1291809&lt;/a&gt; for the idea.&#xA;&lt;/p&gt;&#xA;&#xA;&lt;!-- EXCERPT --&gt;&#xA;&#xA;&lt;h3&gt;Last updated April 1, 2012&lt;/h3&gt;&#xA; &#xA;&lt;table cellpadding=&#34;0&#34; cellspacing=&#34;1&#34; class=&#34;tablesorter&#34; id=&#34;apple&#34;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Product&lt;/th&gt;&lt;th&gt;Release Date&lt;/th&gt;&lt;th&gt;Original Price&lt;/th&gt;&lt;th&gt;Stock Value Today&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 233 Desktop&lt;/td&gt;&lt;td&gt;1997-11-10&lt;/td&gt;&lt;td&gt;$2400.0&lt;/td&gt;&lt;td&gt;$308119&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 233 Minitower&lt;/td&gt;&lt;td&gt;1997-11-10&lt;/td&gt;&lt;td&gt;$2400.0&lt;/td&gt;&lt;td&gt;$308119&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 266 Desktop&lt;/td&gt;&lt;td&gt;1997-11-10&lt;/td&gt;&lt;td&gt;$2400.0&lt;/td&gt;&lt;td&gt;$308119&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 266 Minitower&lt;/td&gt;&lt;td&gt;1997-11-10&lt;/td&gt;&lt;td&gt;$3000.0&lt;/td&gt;&lt;td&gt;$385149&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 300 Desktop&lt;/td&gt;&lt;td&gt;1998-03-17&lt;/td&gt;&lt;td&gt;$2750.0&lt;/td&gt;&lt;td&gt;$250191&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 300 Minitower&lt;/td&gt;&lt;td&gt;1998-03-17&lt;/td&gt;&lt;td&gt;$2399.0&lt;/td&gt;&lt;td&gt;$218258&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 333 Minitower&lt;/td&gt;&lt;td&gt;1998-08-12&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$179446&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 233 All-in-One&lt;/td&gt;&lt;td&gt;1998-03-31&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$130628&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 266 All-in-One&lt;/td&gt;&lt;td&gt;1998-03-31&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$156771&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 300 (Blue &amp;amp; White)&lt;/td&gt;&lt;td&gt;1999-01-05&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$88520&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 350 (Blue &amp;amp; White)&lt;/td&gt;&lt;td&gt;1999-01-05&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$88520&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 400 (Blue &amp;amp; White)&lt;/td&gt;&lt;td&gt;1999-01-05&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$110664&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G3 450 (Blue &amp;amp; White)&lt;/td&gt;&lt;td&gt;1999-06-01&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$160540&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G3 233 Minitower&lt;/td&gt;&lt;td&gt;1998-03-02&lt;/td&gt;&lt;td&gt;$3349.0&lt;/td&gt;&lt;td&gt;$352881&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G3 266 Minitower&lt;/td&gt;&lt;td&gt;1998-03-02&lt;/td&gt;&lt;td&gt;$4499.0&lt;/td&gt;&lt;td&gt;$474055&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G3 300 Minitower&lt;/td&gt;&lt;td&gt;1998-03-17&lt;/td&gt;&lt;td&gt;$4999.0&lt;/td&gt;&lt;td&gt;$454802&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G3 333 Minitower&lt;/td&gt;&lt;td&gt;1998-09-01&lt;/td&gt;&lt;td&gt;$4599.0&lt;/td&gt;&lt;td&gt;$323250&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G3 350 (Blue &amp;amp; White)&lt;/td&gt;&lt;td&gt;1999-01-05&lt;/td&gt;&lt;td&gt;$3299.0&lt;/td&gt;&lt;td&gt;$182633&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G3 400 (Blue &amp;amp; White)&lt;/td&gt;&lt;td&gt;1999-01-05&lt;/td&gt;&lt;td&gt;$4999.0&lt;/td&gt;&lt;td&gt;$276745&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G3 450 (Blue &amp;amp; White)&lt;/td&gt;&lt;td&gt;1999-06-01&lt;/td&gt;&lt;td&gt;$4999.0&lt;/td&gt;&lt;td&gt;$267602&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 250 (Original/Kanga/3500)&lt;/td&gt;&lt;td&gt;1997-11-10&lt;/td&gt;&lt;td&gt;$5700.0&lt;/td&gt;&lt;td&gt;$731784&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 233 (Wallstreet)&lt;/td&gt;&lt;td&gt;1998-05-06&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$181842&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 250 (Wallstreet)&lt;/td&gt;&lt;td&gt;1998-05-06&lt;/td&gt;&lt;td&gt;$2979.0&lt;/td&gt;&lt;td&gt;$235627&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 292 (Wallstreet)&lt;/td&gt;&lt;td&gt;1998-05-06&lt;/td&gt;&lt;td&gt;$4599.0&lt;/td&gt;&lt;td&gt;$363763&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 233 (PDQ - Late 1998)&lt;/td&gt;&lt;td&gt;1998-09-01&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$196733&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 266 (PDQ - Late 1998)&lt;/td&gt;&lt;td&gt;1998-09-01&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$245934&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 300 (PDQ - Late 1998)&lt;/td&gt;&lt;td&gt;1998-09-01&lt;/td&gt;&lt;td&gt;$4999.0&lt;/td&gt;&lt;td&gt;$351365&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 333 (Bronze KB/Lombard)&lt;/td&gt;&lt;td&gt;1999-05-10&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$132473&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 400 (Bronze KB/Lombard)&lt;/td&gt;&lt;td&gt;1999-05-10&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$185484&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 400 (Firewire/Pismo)&lt;/td&gt;&lt;td&gt;2000-02-16&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$52515&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G3 500 (Firewire/Pismo)&lt;/td&gt;&lt;td&gt;2000-02-16&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$73530&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 400 (PCI)&lt;/td&gt;&lt;td&gt;1999-08-31&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$58778&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 450 (AGP)&lt;/td&gt;&lt;td&gt;1999-08-31&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$91862&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 500 (AGP)&lt;/td&gt;&lt;td&gt;1999-08-31&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$128622&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 350 (PCI)&lt;/td&gt;&lt;td&gt;1999-10-13&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$59880&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 400 (AGP)&lt;/td&gt;&lt;td&gt;1999-10-13&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$93583&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 350 (AGP)&lt;/td&gt;&lt;td&gt;1999-12-02&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$34797&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 400 (Gigabit)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$36396&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 450 DP (Gigabit)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$56882&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 500 DP (Gigabit)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$3199.0&lt;/td&gt;&lt;td&gt;$72815&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 450 Cube&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$40948&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 500 Cube&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$52329&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 466 (Digital Audio)&lt;/td&gt;&lt;td&gt;2001-01-09&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$118445&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 533 (Digital Audio)&lt;/td&gt;&lt;td&gt;2001-01-09&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$153303&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 667 (Digital Audio)&lt;/td&gt;&lt;td&gt;2001-01-09&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$195132&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 733 (Digital Audio)&lt;/td&gt;&lt;td&gt;2001-01-09&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$243933&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 733 (Quicksilver)&lt;/td&gt;&lt;td&gt;2001-07-18&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$97945&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 867 (Quicksilver)&lt;/td&gt;&lt;td&gt;2001-07-18&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$144064&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 800 DP (Quicksilver)&lt;/td&gt;&lt;td&gt;2001-07-18&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$201713&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 800 (QS 2002)&lt;/td&gt;&lt;td&gt;2002-01-28&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$82360&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 933 (QS 2002)&lt;/td&gt;&lt;td&gt;2002-01-28&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$118416&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 1.0 DP (QS 2002)&lt;/td&gt;&lt;td&gt;2002-01-28&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$154471&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 867 DP (MDD)&lt;/td&gt;&lt;td&gt;2002-08-13&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$139539&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 1.0 DP (MDD)&lt;/td&gt;&lt;td&gt;2002-08-13&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$205243&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 1.25 DP (MDD)&lt;/td&gt;&lt;td&gt;2002-08-13&lt;/td&gt;&lt;td&gt;$3299.0&lt;/td&gt;&lt;td&gt;$270947&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 1.0 (FW 800)&lt;/td&gt;&lt;td&gt;2003-01-28&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$123281&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 1.25 DP (FW 800)&lt;/td&gt;&lt;td&gt;2003-01-28&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$164403&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 1.42 DP (FW 800)&lt;/td&gt;&lt;td&gt;2003-01-28&lt;/td&gt;&lt;td&gt;$2699.0&lt;/td&gt;&lt;td&gt;$221973&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G4 1.25 (MDD 2003)&lt;/td&gt;&lt;td&gt;2003-06-23&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$81722&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 350 (AGP)&lt;/td&gt;&lt;td&gt;1999-12-02&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$65264&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 400 (AGP)&lt;/td&gt;&lt;td&gt;1999-12-02&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$65264&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 450 (AGP)&lt;/td&gt;&lt;td&gt;1999-12-02&lt;/td&gt;&lt;td&gt;$3999.0&lt;/td&gt;&lt;td&gt;$87027&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 500 (AGP)&lt;/td&gt;&lt;td&gt;1999-12-02&lt;/td&gt;&lt;td&gt;$4499.0&lt;/td&gt;&lt;td&gt;$97908&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 450 DP (Gigabit)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$3999.0&lt;/td&gt;&lt;td&gt;$91025&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 500 DP (Gigabit)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$4999.0&lt;/td&gt;&lt;td&gt;$113787&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 533 (Digital Audio)&lt;/td&gt;&lt;td&gt;2001-01-09&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$209075&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 533 DP (Digital Audio)&lt;/td&gt;&lt;td&gt;2001-01-09&lt;/td&gt;&lt;td&gt;$3999.0&lt;/td&gt;&lt;td&gt;$278790&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 733 (Quicksilver)&lt;/td&gt;&lt;td&gt;2001-09-08&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$193111&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 800 DP (Quicksilver)&lt;/td&gt;&lt;td&gt;2001-09-08&lt;/td&gt;&lt;td&gt;$3799.0&lt;/td&gt;&lt;td&gt;$262104&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 933 (QS 2002)&lt;/td&gt;&lt;td&gt;2002-01-28&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$144170&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 1.0 DP (QS 2002)&lt;/td&gt;&lt;td&gt;2002-01-28&lt;/td&gt;&lt;td&gt;$3299.0&lt;/td&gt;&lt;td&gt;$169924&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 1.0 DP (MDD)&lt;/td&gt;&lt;td&gt;2002-08-27&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$241998&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Server G4 1.25 DP (MDD)&lt;/td&gt;&lt;td&gt;2002-08-27&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$282345&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 400 (Original - Ti)&lt;/td&gt;&lt;td&gt;2001-01-09&lt;/td&gt;&lt;td&gt;$2599.0&lt;/td&gt;&lt;td&gt;$181189&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 500 (Original - Ti)&lt;/td&gt;&lt;td&gt;2001-01-09&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$243933&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 550 (Gigabit - Ti)&lt;/td&gt;&lt;td&gt;2001-10-16&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$146327&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 667 (Gigabit - Ti)&lt;/td&gt;&lt;td&gt;2001-10-16&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$199561&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 667 (DVI - Ti)&lt;/td&gt;&lt;td&gt;2002-04-29&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$125064&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 800 (DVI - Ti)&lt;/td&gt;&lt;td&gt;2002-04-29&lt;/td&gt;&lt;td&gt;$3199.0&lt;/td&gt;&lt;td&gt;$160096&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 867 (Ti)&lt;/td&gt;&lt;td&gt;2002-11-06&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$160088&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.0 (Ti)&lt;/td&gt;&lt;td&gt;2002-11-06&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$208832&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 867 12&#34; (Al)&lt;/td&gt;&lt;td&gt;2003-01-07&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$145166&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.0 17&#34; (Al)&lt;/td&gt;&lt;td&gt;2003-01-07&lt;/td&gt;&lt;td&gt;$3299.0&lt;/td&gt;&lt;td&gt;$266206&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.0 12&#34; (DVI - Al)&lt;/td&gt;&lt;td&gt;2003-09-16&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$85749&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.0 15&#34; (FW800 - Al)&lt;/td&gt;&lt;td&gt;2003-09-16&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$107200&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.25 15&#34; (FW800 - Al)&lt;/td&gt;&lt;td&gt;2003-09-16&lt;/td&gt;&lt;td&gt;$2599.0&lt;/td&gt;&lt;td&gt;$139376&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.33 17&#34; (Al)&lt;/td&gt;&lt;td&gt;2003-09-16&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$160827&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.33 12&#34; (Al)&lt;/td&gt;&lt;td&gt;2004-04-19&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$67607&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.33 15&#34; (Al)&lt;/td&gt;&lt;td&gt;2004-04-19&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$84520&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.5 15&#34; (Al)&lt;/td&gt;&lt;td&gt;2004-04-19&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$105661&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.5 17&#34; (Al)&lt;/td&gt;&lt;td&gt;2004-04-19&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$118345&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.5 12&#34; (Al)&lt;/td&gt;&lt;td&gt;2005-01-31&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$23373&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.5 15&#34; (SMS/BT2 - Al)&lt;/td&gt;&lt;td&gt;2005-01-31&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$31170&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.67 15&#34; (Al)&lt;/td&gt;&lt;td&gt;2005-01-31&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$35848&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.67 17&#34; (Al)&lt;/td&gt;&lt;td&gt;2005-01-31&lt;/td&gt;&lt;td&gt;$2699.0&lt;/td&gt;&lt;td&gt;$42085&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.67 15&#34; (DLSD/HR - Al)&lt;/td&gt;&lt;td&gt;2005-10-19&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$21814&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple PowerBook G4 1.67 17&#34; (DLSD/HR - Al)&lt;/td&gt;&lt;td&gt;2005-10-19&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$27271&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 1.6 (PCI)&lt;/td&gt;&lt;td&gt;2003-06-23&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$125760&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 1.8 (PCI-X)&lt;/td&gt;&lt;td&gt;2003-06-23&lt;/td&gt;&lt;td&gt;$2399.0&lt;/td&gt;&lt;td&gt;$150925&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 2.0 DP (PCI-X)&lt;/td&gt;&lt;td&gt;2003-06-23&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$188672&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 1.8 DP (PCI-X)&lt;/td&gt;&lt;td&gt;2003-11-18&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$146889&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 1.8 DP (PCI)&lt;/td&gt;&lt;td&gt;2004-06-09&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$79370&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 2.0 DP (PCI-X 2)&lt;/td&gt;&lt;td&gt;2004-06-09&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$99223&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 2.5 DP (PCI-X)&lt;/td&gt;&lt;td&gt;2004-06-09&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$119076&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 1.8 (PCI)&lt;/td&gt;&lt;td&gt;2004-10-19&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$37904&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 2.0 DP (PCI)&lt;/td&gt;&lt;td&gt;2005-04-27&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$33337&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 2.3 DP (PCI-X)&lt;/td&gt;&lt;td&gt;2005-04-27&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$41676&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 2.7 DP (PCI-X)&lt;/td&gt;&lt;td&gt;2005-04-27&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$50015&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 Dual Core (2.0)&lt;/td&gt;&lt;td&gt;2005-10-19&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$21814&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 Dual Core (2.3)&lt;/td&gt;&lt;td&gt;2005-10-19&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$27271&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Power Macintosh G5 &#34;Quad Core&#34; (2.5)&lt;/td&gt;&lt;td&gt;2005-10-19&lt;/td&gt;&lt;td&gt;$3299.0&lt;/td&gt;&lt;td&gt;$36001&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 2.0 (Original)&lt;/td&gt;&lt;td&gt;2006-08-07&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$19616&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 2.66 (Original)&lt;/td&gt;&lt;td&gt;2006-08-07&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$22292&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 3.0 (Original)&lt;/td&gt;&lt;td&gt;2006-08-07&lt;/td&gt;&lt;td&gt;$3299.0&lt;/td&gt;&lt;td&gt;$29428&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 3.0 (2,1)&lt;/td&gt;&lt;td&gt;2007-04-04&lt;/td&gt;&lt;td&gt;$3999.0&lt;/td&gt;&lt;td&gt;$25433&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 2.8 (2008)&lt;/td&gt;&lt;td&gt;2008-01-08&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$8048&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 2.8 (2008)&lt;/td&gt;&lt;td&gt;2008-01-08&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$9799&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 3.0 (2008)&lt;/td&gt;&lt;td&gt;2008-01-08&lt;/td&gt;&lt;td&gt;$3599.0&lt;/td&gt;&lt;td&gt;$12600&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 3.2 (2008)&lt;/td&gt;&lt;td&gt;2008-01-08&lt;/td&gt;&lt;td&gt;$4399.0&lt;/td&gt;&lt;td&gt;$15400&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 2.66 (2009/Nehalem)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$16954&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 2.93 (2009/Nehalem)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$20346&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 3.33 (2009/Nehalem)&lt;/td&gt;&lt;td&gt;2009-12-04&lt;/td&gt;&lt;td&gt;$3699.0&lt;/td&gt;&lt;td&gt;$11471&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 2.26 (2009/Nehalem)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$3299.0&lt;/td&gt;&lt;td&gt;$22382&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 2.66 (2009/Nehalem)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$4699.0&lt;/td&gt;&lt;td&gt;$31880&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 2.93 (2009/Nehalem)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$5899.0&lt;/td&gt;&lt;td&gt;$40022&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 2.8 (2010/Nehalem)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$5673&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 3.2 (2010/Nehalem)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$2899.0&lt;/td&gt;&lt;td&gt;$6581&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Six Core&#34; 3.33 (2010/Westmere)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$3699.0&lt;/td&gt;&lt;td&gt;$8397&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 2.4 (2010/Westmere)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$7943&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Twelve Core&#34; 2.66 (2010/Westmere)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$4999.0&lt;/td&gt;&lt;td&gt;$11349&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Twelve Core&#34; 2.93 (2010/Westmere)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$6199.0&lt;/td&gt;&lt;td&gt;$14073&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 2.8 (Server)&lt;/td&gt;&lt;td&gt;2010-11-05&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$5669&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Quad Core&#34; 3.2 (Server)&lt;/td&gt;&lt;td&gt;2010-11-05&lt;/td&gt;&lt;td&gt;$3399.0&lt;/td&gt;&lt;td&gt;$6425&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Six Core&#34; 3.33 (Server)&lt;/td&gt;&lt;td&gt;2010-11-05&lt;/td&gt;&lt;td&gt;$4199.0&lt;/td&gt;&lt;td&gt;$7938&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Eight Core&#34; 2.4 (Server)&lt;/td&gt;&lt;td&gt;2010-11-05&lt;/td&gt;&lt;td&gt;$3774.0&lt;/td&gt;&lt;td&gt;$7134&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Twelve Core&#34; 2.66 (Server)&lt;/td&gt;&lt;td&gt;2010-11-05&lt;/td&gt;&lt;td&gt;$5274.0&lt;/td&gt;&lt;td&gt;$9970&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac Pro &#34;Twelve Core&#34; 2.93 (Server)&lt;/td&gt;&lt;td&gt;2010-11-05&lt;/td&gt;&lt;td&gt;$6474.0&lt;/td&gt;&lt;td&gt;$12239&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G4/1.0&lt;/td&gt;&lt;td&gt;2002-05-14&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$140363&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G4/1.0 DP&lt;/td&gt;&lt;td&gt;2002-05-14&lt;/td&gt;&lt;td&gt;$3999.0&lt;/td&gt;&lt;td&gt;$187166&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G4/1.33 (Slot Load)&lt;/td&gt;&lt;td&gt;2003-02-10&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$233724&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G4/1.33 DP (Slot Load)&lt;/td&gt;&lt;td&gt;2003-02-10&lt;/td&gt;&lt;td&gt;$3799.0&lt;/td&gt;&lt;td&gt;$317227&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G4/1.33 DP Cluster Node&lt;/td&gt;&lt;td&gt;2003-03-01&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$229254&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G5/2.0 (PCI-X)&lt;/td&gt;&lt;td&gt;2004-01-06&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$162719&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G5/2.0 DP (PCI-X)&lt;/td&gt;&lt;td&gt;2004-01-06&lt;/td&gt;&lt;td&gt;$3999.0&lt;/td&gt;&lt;td&gt;$216977&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G5/2.0 DP Cluster Node (PCI-X)&lt;/td&gt;&lt;td&gt;2004-01-06&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$162719&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G5/2.3 DP (PCI-X)&lt;/td&gt;&lt;td&gt;2005-01-04&lt;/td&gt;&lt;td&gt;$3999.0&lt;/td&gt;&lt;td&gt;$74995&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve G5/2.3 DP Cluster Node (PCI-X)&lt;/td&gt;&lt;td&gt;2005-01-04&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$56241&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon 2.0 &#34;Quad Core&#34; (Late 2006)&lt;/td&gt;&lt;td&gt;2006-08-07&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$26752&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon 2.66 &#34;Quad Core&#34; (Late 2006)&lt;/td&gt;&lt;td&gt;2006-08-07&lt;/td&gt;&lt;td&gt;$0.0&lt;/td&gt;&lt;td&gt;$0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon 3.0 &#34;Quad Core&#34; (Late 2006)&lt;/td&gt;&lt;td&gt;2006-08-07&lt;/td&gt;&lt;td&gt;$0.0&lt;/td&gt;&lt;td&gt;$0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon 2.8 &#34;Quad Core&#34; (Early 2008)&lt;/td&gt;&lt;td&gt;2008-01-08&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$10499&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon 2.8 &#34;Eight Core&#34; (Early 2008)&lt;/td&gt;&lt;td&gt;2008-01-08&lt;/td&gt;&lt;td&gt;$3499.0&lt;/td&gt;&lt;td&gt;$12250&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon 3.0 &#34;Eight Core&#34; (Early 2008)&lt;/td&gt;&lt;td&gt;2008-01-08&lt;/td&gt;&lt;td&gt;$4299.0&lt;/td&gt;&lt;td&gt;$15050&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon Nehalem 2.26 &#34;Quad Core&#34;&lt;/td&gt;&lt;td&gt;2009-04-07&lt;/td&gt;&lt;td&gt;$2999.0&lt;/td&gt;&lt;td&gt;$15635&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon Nehalem 2.26 &#34;Eight Core&#34;&lt;/td&gt;&lt;td&gt;2009-04-07&lt;/td&gt;&lt;td&gt;$3599.0&lt;/td&gt;&lt;td&gt;$18763&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon Nehalem 2.66 &#34;Eight Core&#34;&lt;/td&gt;&lt;td&gt;2009-04-07&lt;/td&gt;&lt;td&gt;$4999.0&lt;/td&gt;&lt;td&gt;$26062&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve Xeon Nehalem 2.93 &#34;Eight Core&#34;&lt;/td&gt;&lt;td&gt;2009-04-07&lt;/td&gt;&lt;td&gt;$6199.0&lt;/td&gt;&lt;td&gt;$32318&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve RAID&lt;/td&gt;&lt;td&gt;2003-02-10&lt;/td&gt;&lt;td&gt;$5999.0&lt;/td&gt;&lt;td&gt;$500933&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Xserve RAID (SFP)&lt;/td&gt;&lt;td&gt;2004-01-06&lt;/td&gt;&lt;td&gt;$5999.0&lt;/td&gt;&lt;td&gt;$325493&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/233 Original - Bondi (Rev. A &amp;amp; B)&lt;/td&gt;&lt;td&gt;1998-05-06&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$102746&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/266 (Fruit Colors)&lt;/td&gt;&lt;td&gt;1999-01-05&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$66376&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/333 (Fruit Colors)&lt;/td&gt;&lt;td&gt;1999-04-14&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$80952&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/350 (Slot Loading - Blueberry)&lt;/td&gt;&lt;td&gt;1999-10-05&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$35253&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/400 DV (Slot Loading - Fruit)&lt;/td&gt;&lt;td&gt;1999-10-05&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$45839&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/400 DV SE (Slot Loading)&lt;/td&gt;&lt;td&gt;1999-10-05&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$52897&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/350 (Summer 2000 - Indigo)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$18186&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/400 DV (Summer 2000 - I/R)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$22739&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/450 DV+ (Summer 2000)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$29567&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/500 DV SE (Summer 2000)&lt;/td&gt;&lt;td&gt;2000-07-19&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$34120&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/400 (Early 2001 - Indigo)&lt;/td&gt;&lt;td&gt;2001-02-22&lt;/td&gt;&lt;td&gt;$899.0&lt;/td&gt;&lt;td&gt;$57339&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/500 (Early 2001 - Flower/Blue)&lt;/td&gt;&lt;td&gt;2001-02-22&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$76474&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/600 SE (Early 2001)&lt;/td&gt;&lt;td&gt;2001-02-22&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$95609&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/500 (Summer 2001 - I/S)&lt;/td&gt;&lt;td&gt;2001-07-18&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$46061&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/600 (Summer 2001)&lt;/td&gt;&lt;td&gt;2001-07-18&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$57591&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G3/700 SE (Summer 2001)&lt;/td&gt;&lt;td&gt;2001-07-18&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$86415&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G4/700 (Flat Panel)&lt;/td&gt;&lt;td&gt;2002-01-07&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$68018&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G4/800 (Flat Panel)&lt;/td&gt;&lt;td&gt;2002-01-07&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$94200&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G4/800 17-Inch (Flat Panel)&lt;/td&gt;&lt;td&gt;2002-07-17&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$153260&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G4/800 - X Only (Flat Panel)&lt;/td&gt;&lt;td&gt;2003-02-04&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$106687&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G4/1.0 17-Inch (Flat Panel)&lt;/td&gt;&lt;td&gt;2003-02-04&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$147752&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G4/1.0 15-Inch &#34;FP&#34; (USB 2.0)&lt;/td&gt;&lt;td&gt;2003-09-08&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$68497&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G4/1.25 17-Inch &#34;FP&#34; (USB 2.0)&lt;/td&gt;&lt;td&gt;2003-09-08&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$94862&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G4/1.25 20-Inch &#34;FP&#34; (USB 2.0)&lt;/td&gt;&lt;td&gt;2003-11-18&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$129255&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G5/1.6 17-Inch&lt;/td&gt;&lt;td&gt;2004-08-31&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$45148&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G5/1.8 17-Inch&lt;/td&gt;&lt;td&gt;2004-08-31&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$52100&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G5/1.8 20-Inch&lt;/td&gt;&lt;td&gt;2004-08-31&lt;/td&gt;&lt;td&gt;$1899.0&lt;/td&gt;&lt;td&gt;$66002&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G5/1.8 17-Inch (ALS)&lt;/td&gt;&lt;td&gt;2005-05-03&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$21508&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G5/2.0 17-Inch (ALS)&lt;/td&gt;&lt;td&gt;2005-05-03&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$24819&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G5/2.0 20-Inch (ALS)&lt;/td&gt;&lt;td&gt;2005-05-03&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$29787&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G5/1.9 17-Inch (iSight)&lt;/td&gt;&lt;td&gt;2005-10-12&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$15813&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac G5/2.1 20-Inch (iSight)&lt;/td&gt;&lt;td&gt;2005-10-12&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$20682&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core Duo&#34; 1.83 17-Inch&lt;/td&gt;&lt;td&gt;2006-01-10&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$9631&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core Duo&#34; 2.0 20-Inch&lt;/td&gt;&lt;td&gt;2006-01-10&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$12597&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core Duo&#34; 1.83 17-Inch (IG)&lt;/td&gt;&lt;td&gt;2006-07-05&lt;/td&gt;&lt;td&gt;$899.0&lt;/td&gt;&lt;td&gt;$9456&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 1.83 17-Inch (IG)&lt;/td&gt;&lt;td&gt;2006-09-06&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$8552&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.0 17-Inch&lt;/td&gt;&lt;td&gt;2006-09-06&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$10265&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.16 17-Inch&lt;/td&gt;&lt;td&gt;2006-09-06&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$11121&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.16 20-Inch&lt;/td&gt;&lt;td&gt;2006-09-06&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$12833&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.33 20-Inch&lt;/td&gt;&lt;td&gt;2006-09-06&lt;/td&gt;&lt;td&gt;$1749.0&lt;/td&gt;&lt;td&gt;$14973&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.16 24-Inch&lt;/td&gt;&lt;td&gt;2006-09-06&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$17114&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.33 24-Inch&lt;/td&gt;&lt;td&gt;2006-09-06&lt;/td&gt;&lt;td&gt;$2249.0&lt;/td&gt;&lt;td&gt;$19254&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.0 20-Inch (Al)&lt;/td&gt;&lt;td&gt;2007-08-07&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$5323&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.4 20-Inch (Al)&lt;/td&gt;&lt;td&gt;2007-08-07&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$6655&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.4 24-Inch (Al)&lt;/td&gt;&lt;td&gt;2007-08-07&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$7987&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Extreme&#34; 2.8 24-Inch (Al)&lt;/td&gt;&lt;td&gt;2007-08-07&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$10207&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.4 20-Inch (Early 2008)&lt;/td&gt;&lt;td&gt;2008-04-28&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$4173&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.66 20-Inch (Early 2008)&lt;/td&gt;&lt;td&gt;2008-04-28&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$5217&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.8 24-Inch (Early 2008)&lt;/td&gt;&lt;td&gt;2008-04-28&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$6262&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 3.06 24-Inch (Early 2008)&lt;/td&gt;&lt;td&gt;2008-04-28&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$7654&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.66 20-Inch (Early 2009)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$8134&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.66 24-Inch (Early 2009)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$10170&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.93 24-Inch (Early 2009)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$12205&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 3.06 24-Inch (Early 2009)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$14919&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.0 20-Inch (Mid-2009)&lt;/td&gt;&lt;td&gt;2009-04-07&lt;/td&gt;&lt;td&gt;$899.0&lt;/td&gt;&lt;td&gt;$4686&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 2.26 20-Inch (Mid-2009)&lt;/td&gt;&lt;td&gt;2010-03-04&lt;/td&gt;&lt;td&gt;$899.0&lt;/td&gt;&lt;td&gt;$2557&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 3.06 21.5-Inch (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$3616&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 3.33 21.5-Inch (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$1399.0&lt;/td&gt;&lt;td&gt;$4220&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 3.06 27-Inch (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$5124&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core 2 Duo&#34; 3.33 27-Inch (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$1899.0&lt;/td&gt;&lt;td&gt;$5728&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i5&#34; 2.66 27-Inch (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$6029&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i7&#34; 2.8 27-Inch (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$6633&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i3&#34; 3.06 21.5-Inch (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$2722&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i3&#34; 3.2 21.5-Inch (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$3403&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i5&#34; 3.6 21.5-Inch (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$3857&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i3&#34; 3.2 27-Inch (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$3857&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i5&#34; 2.8 27-Inch (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$4538&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i5&#34; 3.6 27-Inch (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$1899.0&lt;/td&gt;&lt;td&gt;$4311&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i7&#34; 2.93 27-Inch (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-07-27&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$4992&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i5&#34; 2.5 21.5-Inch (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-05-03&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$2064&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i5&#34; 2.7 21.5-Inch (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-05-03&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$2581&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i7&#34; 2.8 21.5-Inch (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-05-03&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$2925&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i5&#34; 2.7 27-Inch (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-05-03&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$2925&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i5&#34; 3.1 27-Inch (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-05-03&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$3441&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i7&#34; 3.4 27-Inch (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-05-03&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$3786&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iMac &#34;Core i3&#34; 3.1 21.5-Inch (Late 2011)&lt;/td&gt;&lt;td&gt;2011-08-08&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$1695&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple eMac G4/700&lt;/td&gt;&lt;td&gt;2002-04-29&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$49995&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple eMac G4/800&lt;/td&gt;&lt;td&gt;2002-08-13&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$123113&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple eMac G4/800 (ATI)&lt;/td&gt;&lt;td&gt;2003-05-06&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$54747&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple eMac G4/1.0 (ATI)&lt;/td&gt;&lt;td&gt;2003-05-06&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$68451&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple eMac G4/1.25 (USB 2.0)&lt;/td&gt;&lt;td&gt;2004-04-13&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$35563&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple eMac G4/1.42 (2005)&lt;/td&gt;&lt;td&gt;2005-05-03&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$13229&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini G4/1.25&lt;/td&gt;&lt;td&gt;2005-01-11&lt;/td&gt;&lt;td&gt;$499.0&lt;/td&gt;&lt;td&gt;$9268&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini G4/1.42&lt;/td&gt;&lt;td&gt;2005-01-11&lt;/td&gt;&lt;td&gt;$599.0&lt;/td&gt;&lt;td&gt;$11125&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini G4/1.33&lt;/td&gt;&lt;td&gt;2005-09-27&lt;/td&gt;&lt;td&gt;$499.0&lt;/td&gt;&lt;td&gt;$5598&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini G4/1.5&lt;/td&gt;&lt;td&gt;2005-09-27&lt;/td&gt;&lt;td&gt;$599.0&lt;/td&gt;&lt;td&gt;$6720&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core Solo&#34; 1.5&lt;/td&gt;&lt;td&gt;2006-02-28&lt;/td&gt;&lt;td&gt;$599.0&lt;/td&gt;&lt;td&gt;$5243&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core Duo&#34; 1.66&lt;/td&gt;&lt;td&gt;2006-02-28&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$6994&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core Duo&#34; 1.83&lt;/td&gt;&lt;td&gt;2006-09-06&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$6840&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 1.83&lt;/td&gt;&lt;td&gt;2007-08-07&lt;/td&gt;&lt;td&gt;$599.0&lt;/td&gt;&lt;td&gt;$2659&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.0&lt;/td&gt;&lt;td&gt;2007-08-07&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$3547&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.0 (Early 2009)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$599.0&lt;/td&gt;&lt;td&gt;$4063&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.26 (Early 2009)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$749.0&lt;/td&gt;&lt;td&gt;$5081&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.26 (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$599.0&lt;/td&gt;&lt;td&gt;$1806&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.53 (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$2410&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.66 (Late 2009)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$849.0&lt;/td&gt;&lt;td&gt;$2560&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.53 (Server)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$3013&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.4 (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-06-15&lt;/td&gt;&lt;td&gt;$699.0&lt;/td&gt;&lt;td&gt;$1613&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.66 (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-06-15&lt;/td&gt;&lt;td&gt;$849.0&lt;/td&gt;&lt;td&gt;$1960&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core 2 Duo&#34; 2.66 (Server)&lt;/td&gt;&lt;td&gt;2010-06-15&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$2306&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core i5&#34; 2.3 (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-07-20&lt;/td&gt;&lt;td&gt;$599.0&lt;/td&gt;&lt;td&gt;$928&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core i5&#34; 2.5 (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-07-20&lt;/td&gt;&lt;td&gt;$799.0&lt;/td&gt;&lt;td&gt;$1238&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core i7&#34; 2.7 (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-07-20&lt;/td&gt;&lt;td&gt;$899.0&lt;/td&gt;&lt;td&gt;$1393&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple Mac mini &#34;Core i7&#34; 2.0 (Mid-2011/Server)&lt;/td&gt;&lt;td&gt;2011-07-20&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$1548&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/300 (Original/Clamshell)&lt;/td&gt;&lt;td&gt;1999-07-21&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$70908&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/366 SE (Original/Clamshell)&lt;/td&gt;&lt;td&gt;2000-02-16&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$37805&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/366 (Firewire/Clamshell)&lt;/td&gt;&lt;td&gt;2000-09-13&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$30990&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/466 SE (Firewire/Clamshell)&lt;/td&gt;&lt;td&gt;2000-09-13&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$37192&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/500 (Dual USB - Tr)&lt;/td&gt;&lt;td&gt;2001-05-01&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$60047&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/500 (Late 2001 - Tr)&lt;/td&gt;&lt;td&gt;2001-10-16&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$79784&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/600 (Late 2001 - Tr)&lt;/td&gt;&lt;td&gt;2001-10-16&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$99747&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/600 14-Inch (Early 2002 - Tr)&lt;/td&gt;&lt;td&gt;2002-01-07&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$94200&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/600 (16 VRAM - Tr)&lt;/td&gt;&lt;td&gt;2002-05-20&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$58113&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/700 (16 VRAM - Tr)&lt;/td&gt;&lt;td&gt;2002-05-20&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$72653&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/700 14-Inch (16 VRAM - Tr)&lt;/td&gt;&lt;td&gt;2002-05-20&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$87194&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/700 (16 VRAM - Op)&lt;/td&gt;&lt;td&gt;2002-11-06&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$69564&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/800 (32 VRAM - Tr)&lt;/td&gt;&lt;td&gt;2002-11-06&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$90454&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/800 14-Inch (32 VRAM - Tr)&lt;/td&gt;&lt;td&gt;2002-11-06&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$111345&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/800 (Early 2003 - Op)&lt;/td&gt;&lt;td&gt;2003-04-22&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$88602&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/900 (Early 2003 - Op)&lt;/td&gt;&lt;td&gt;2003-04-22&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$115209&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G3/900 14-Inch (Early 2003 - Op)&lt;/td&gt;&lt;td&gt;2003-04-22&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$132947&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/800 12-Inch (Original - Op)&lt;/td&gt;&lt;td&gt;2003-10-22&lt;/td&gt;&lt;td&gt;$1099.0&lt;/td&gt;&lt;td&gt;$57900&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/933 14-Inch (Original - Op)&lt;/td&gt;&lt;td&gt;2003-10-22&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$68437&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/1.0 14-Inch (Original - Op)&lt;/td&gt;&lt;td&gt;2003-10-22&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$78974&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/1.0 12-Inch (Early 2004 - Op)&lt;/td&gt;&lt;td&gt;2004-04-19&lt;/td&gt;&lt;td&gt;$1099.0&lt;/td&gt;&lt;td&gt;$46467&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/1.0 14-Inch (Early 2004 - Op)&lt;/td&gt;&lt;td&gt;2004-04-19&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$54923&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/1.2 14-Inch (Early 2004 - Op)&lt;/td&gt;&lt;td&gt;2004-04-19&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$63379&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/1.2 12-Inch (Late 2004 - Op)&lt;/td&gt;&lt;td&gt;2004-10-19&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$25261&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/1.33 14-Inch (Late 2004 - Op)&lt;/td&gt;&lt;td&gt;2004-10-19&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$32847&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/1.33 12-Inch (Mid-2005 - Op)&lt;/td&gt;&lt;td&gt;2005-07-26&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$13727&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iBook G4/1.42 14-Inch (Mid-2005 - Op)&lt;/td&gt;&lt;td&gt;2005-07-26&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$17850&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core Duo&#34; 1.83 13&#34;&lt;/td&gt;&lt;td&gt;2006-05-16&lt;/td&gt;&lt;td&gt;$1099.0&lt;/td&gt;&lt;td&gt;$10140&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core Duo&#34; 2.0 13&#34; (White)&lt;/td&gt;&lt;td&gt;2006-05-16&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$11985&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core Duo&#34; 2.0 13&#34; (Black)&lt;/td&gt;&lt;td&gt;2006-05-16&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$13830&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 1.83 13&#34;&lt;/td&gt;&lt;td&gt;2006-11-08&lt;/td&gt;&lt;td&gt;$1099.0&lt;/td&gt;&lt;td&gt;$7991&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.0 13&#34; (White/06)&lt;/td&gt;&lt;td&gt;2006-11-08&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$9445&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.0 13&#34; (Black)&lt;/td&gt;&lt;td&gt;2006-11-08&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$10900&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.0 13&#34; (White/07)&lt;/td&gt;&lt;td&gt;2007-05-15&lt;/td&gt;&lt;td&gt;$1099.0&lt;/td&gt;&lt;td&gt;$6128&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.16 13&#34; (White)&lt;/td&gt;&lt;td&gt;2007-05-15&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$7243&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.16 13&#34; (Black)&lt;/td&gt;&lt;td&gt;2007-05-15&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$8358&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.0 13&#34; (White-SR)&lt;/td&gt;&lt;td&gt;2007-11-01&lt;/td&gt;&lt;td&gt;$1099.0&lt;/td&gt;&lt;td&gt;$3515&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.2 13&#34; (White-SR)&lt;/td&gt;&lt;td&gt;2007-11-01&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$4155&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.2 13&#34; (Black-SR)&lt;/td&gt;&lt;td&gt;2007-11-01&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$4794&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.1 13&#34; (White-08)&lt;/td&gt;&lt;td&gt;2008-02-26&lt;/td&gt;&lt;td&gt;$1099.0&lt;/td&gt;&lt;td&gt;$5530&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.4 13&#34; (White-08)&lt;/td&gt;&lt;td&gt;2008-02-26&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$6536&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.4 13&#34; (Black-08)&lt;/td&gt;&lt;td&gt;2008-02-26&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$7542&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.0 13&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2008-10-14&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$7482&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.4 13&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2008-10-14&lt;/td&gt;&lt;td&gt;$1599.0&lt;/td&gt;&lt;td&gt;$9210&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.0 13&#34; (White-09)&lt;/td&gt;&lt;td&gt;2009-01-20&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$7659&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.13 13&#34; (White-09)&lt;/td&gt;&lt;td&gt;2009-05-27&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$4501&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.26 13&#34; (Uni/Late 09)&lt;/td&gt;&lt;td&gt;2009-10-20&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$3013&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook &#34;Core 2 Duo&#34; 2.4 13&#34; (Mid-2010)&lt;/td&gt;&lt;td&gt;2010-05-18&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$2373&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core Duo&#34; 1.67 15&#34;&lt;/td&gt;&lt;td&gt;2006-01-10&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$14821&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core Duo&#34; 1.83 15&#34;&lt;/td&gt;&lt;td&gt;2006-01-10&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$18529&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core Duo&#34; 2.0 15&#34;&lt;/td&gt;&lt;td&gt;2006-02-14&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$22150&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core Duo&#34; 2.16 15&#34;&lt;/td&gt;&lt;td&gt;2006-02-14&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$24809&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core Duo&#34; 2.16 17&#34;&lt;/td&gt;&lt;td&gt;2006-04-24&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$25523&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.16 15&#34;&lt;/td&gt;&lt;td&gt;2006-10-24&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$14787&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.33 15&#34;&lt;/td&gt;&lt;td&gt;2006-10-24&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$18485&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.33 17&#34;&lt;/td&gt;&lt;td&gt;2006-10-24&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$20705&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.2 15&#34; (SR)&lt;/td&gt;&lt;td&gt;2007-06-05&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$9770&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.4 15&#34; (SR)&lt;/td&gt;&lt;td&gt;2007-06-05&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$12213&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.6 15&#34; (SR)&lt;/td&gt;&lt;td&gt;2007-11-01&lt;/td&gt;&lt;td&gt;$2749.0&lt;/td&gt;&lt;td&gt;$8793&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.4 17&#34; (SR)&lt;/td&gt;&lt;td&gt;2007-06-05&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$13680&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.6 17&#34; (SR)&lt;/td&gt;&lt;td&gt;2007-11-01&lt;/td&gt;&lt;td&gt;$3049.0&lt;/td&gt;&lt;td&gt;$9752&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.4 15&#34; (08)&lt;/td&gt;&lt;td&gt;2008-02-26&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$10058&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.5 15&#34; (08)&lt;/td&gt;&lt;td&gt;2008-02-26&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$12574&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.6 15&#34; (08)&lt;/td&gt;&lt;td&gt;2008-02-26&lt;/td&gt;&lt;td&gt;$2749.0&lt;/td&gt;&lt;td&gt;$13832&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.5 17&#34; (08)&lt;/td&gt;&lt;td&gt;2008-02-26&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$14084&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.6 17&#34; (08)&lt;/td&gt;&lt;td&gt;2008-02-26&lt;/td&gt;&lt;td&gt;$3049.0&lt;/td&gt;&lt;td&gt;$15342&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.4 15&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2008-10-14&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$11515&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.53 15&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2008-10-14&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$14395&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.8 15&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2008-10-14&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$16123&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.66 17&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2009-01-06&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$18040&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.93 17&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2009-01-06&lt;/td&gt;&lt;td&gt;$3099.0&lt;/td&gt;&lt;td&gt;$19974&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.66 15&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$16954&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.93 15&#34; (Unibody)&lt;/td&gt;&lt;td&gt;2009-03-03&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$18989&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.26 13&#34; (SD/FW)&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$4997&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.53 13&#34; (SD/FW)&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$6247&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.53 15&#34; (SD)&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$7081&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.66 15&#34; (SD)&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$8331&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.8 15&#34; (SD)&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$9581&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 3.06 15&#34; (SD)&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$2599.0&lt;/td&gt;&lt;td&gt;$10832&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.8 17&#34; Mid-2009&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$10415&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 3.06 17&#34; Mid-2009&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$2799.0&lt;/td&gt;&lt;td&gt;$11665&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.4 13&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-04-13&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$2965&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core 2 Duo&#34; 2.66 13&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-04-13&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$3707&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i5&#34; 2.4 15&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-04-13&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$4449&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i5&#34; 2.53 15&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-04-13&lt;/td&gt;&lt;td&gt;$1999.0&lt;/td&gt;&lt;td&gt;$4943&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.66 15&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-04-13&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$5438&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.8 15&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-10-20&lt;/td&gt;&lt;td&gt;$2399.0&lt;/td&gt;&lt;td&gt;$4631&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i5&#34; 2.53 17&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-04-13&lt;/td&gt;&lt;td&gt;$2299.0&lt;/td&gt;&lt;td&gt;$5685&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.66 17&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-04-13&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$6180&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.8 17&#34; Mid-2010&lt;/td&gt;&lt;td&gt;2010-10-20&lt;/td&gt;&lt;td&gt;$2699.0&lt;/td&gt;&lt;td&gt;$5211&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i5&#34; 2.3 13&#34; Early 2011&lt;/td&gt;&lt;td&gt;2011-02-24&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$2096&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.7 13&#34; Early 2011&lt;/td&gt;&lt;td&gt;2011-02-24&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$2621&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.0 15&#34; Early 2011&lt;/td&gt;&lt;td&gt;2011-02-24&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$3145&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.2 15&#34; Early 2011&lt;/td&gt;&lt;td&gt;2011-02-24&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$3845&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.3 15&#34; Early 2011&lt;/td&gt;&lt;td&gt;2011-02-24&lt;/td&gt;&lt;td&gt;$2449.0&lt;/td&gt;&lt;td&gt;$4282&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.2 17&#34; Early 2011&lt;/td&gt;&lt;td&gt;2011-02-24&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$4369&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.3 17&#34; Early 2011&lt;/td&gt;&lt;td&gt;2011-02-24&lt;/td&gt;&lt;td&gt;$2749.0&lt;/td&gt;&lt;td&gt;$4806&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i5&#34; 2.4 13&#34; Late 2011&lt;/td&gt;&lt;td&gt;2011-10-24&lt;/td&gt;&lt;td&gt;$1199.0&lt;/td&gt;&lt;td&gt;$1771&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.8 13&#34; Late 2011&lt;/td&gt;&lt;td&gt;2011-10-24&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$2214&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.2 15&#34; Late 2011&lt;/td&gt;&lt;td&gt;2011-10-24&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$2658&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.4 15&#34; Late 2011&lt;/td&gt;&lt;td&gt;2011-10-24&lt;/td&gt;&lt;td&gt;$2199.0&lt;/td&gt;&lt;td&gt;$3249&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.5 15&#34; Late 2011&lt;/td&gt;&lt;td&gt;2011-10-24&lt;/td&gt;&lt;td&gt;$2449.0&lt;/td&gt;&lt;td&gt;$3618&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.4 17&#34; Late 2011&lt;/td&gt;&lt;td&gt;2011-10-24&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$3692&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Pro &#34;Core i7&#34; 2.5 17&#34; Late 2011&lt;/td&gt;&lt;td&gt;2011-10-24&lt;/td&gt;&lt;td&gt;$2749.0&lt;/td&gt;&lt;td&gt;$4061&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 1.6 13&#34; (Original)&lt;/td&gt;&lt;td&gt;2008-01-15&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$6380&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 1.8 13&#34; (Original)&lt;/td&gt;&lt;td&gt;2008-01-15&lt;/td&gt;&lt;td&gt;$3098.0&lt;/td&gt;&lt;td&gt;$10987&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 1.6 13&#34; (NVIDIA)&lt;/td&gt;&lt;td&gt;2008-10-14&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$10363&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 1.86 13&#34; (NVIDIA)&lt;/td&gt;&lt;td&gt;2008-10-14&lt;/td&gt;&lt;td&gt;$2499.0&lt;/td&gt;&lt;td&gt;$14395&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 1.86 13&#34; (Mid-09)&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$1499.0&lt;/td&gt;&lt;td&gt;$6247&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 2.13 13&#34; (Mid-09)&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$1799.0&lt;/td&gt;&lt;td&gt;$7498&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 1.4 11&#34; (Late &#39;10)&lt;/td&gt;&lt;td&gt;2010-10-20&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$1928&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 1.6 11&#34; (Late &#39;10)&lt;/td&gt;&lt;td&gt;2010-10-20&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$2508&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 1.86 13&#34; (Late &#39;10)&lt;/td&gt;&lt;td&gt;2010-10-20&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$2508&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core 2 Duo&#34; 2.13 13&#34; (Late &#39;10)&lt;/td&gt;&lt;td&gt;2010-10-20&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$3280&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core i5&#34; 1.6 11&#34; (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-07-20&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$1548&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core i7&#34; 1.8 11&#34; (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-07-20&lt;/td&gt;&lt;td&gt;$1349.0&lt;/td&gt;&lt;td&gt;$2090&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core i5&#34; 1.7 13&#34; (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-07-20&lt;/td&gt;&lt;td&gt;$1299.0&lt;/td&gt;&lt;td&gt;$2012&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core i7&#34; 1.8 13&#34; (Mid-2011)&lt;/td&gt;&lt;td&gt;2011-07-20&lt;/td&gt;&lt;td&gt;$1699.0&lt;/td&gt;&lt;td&gt;$2632&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple MacBook Air &#34;Core i5&#34; 1.6 13&#34; (Early 2012)&lt;/td&gt;&lt;td&gt;2012-02-10&lt;/td&gt;&lt;td&gt;$999.0&lt;/td&gt;&lt;td&gt;$1213&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod (Original/Scroll) 5 GB, 10 GB&lt;/td&gt;&lt;td&gt;2001-10-23&lt;/td&gt;&lt;td&gt;$399.0&lt;/td&gt;&lt;td&gt;$26374&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod 2nd Gen (Touch Wheel) 5, 10, 20 GB&lt;/td&gt;&lt;td&gt;2002-03-21&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$14766&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod 3rd Gen (10/15/30) 10, 15, 30 GB&lt;/td&gt;&lt;td&gt;2003-04-28&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$25868&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod 3rd Gen (10/20/40) 10, 20, 40 GB&lt;/td&gt;&lt;td&gt;2003-09-08&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$15766&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod 3rd Gen (15/20/40) 15, 20, 40 GB&lt;/td&gt;&lt;td&gt;2004-01-06&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$16223&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod 4th Gen (ClickWheel) 20 GB, 40 GB&lt;/td&gt;&lt;td&gt;2004-07-19&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$11218&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod U2 Edition (4th Gen) 20 GB&lt;/td&gt;&lt;td&gt;2004-10-26&lt;/td&gt;&lt;td&gt;$349.0&lt;/td&gt;&lt;td&gt;$8722&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod photo (30) 30 GB&lt;/td&gt;&lt;td&gt;2005-02-23&lt;/td&gt;&lt;td&gt;$349.0&lt;/td&gt;&lt;td&gt;$4742&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod photo (40/60) 40 GB, 60 GB&lt;/td&gt;&lt;td&gt;2004-10-26&lt;/td&gt;&lt;td&gt;$499.0&lt;/td&gt;&lt;td&gt;$12470&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod Color Display 20 GB, 60 GB&lt;/td&gt;&lt;td&gt;2005-06-28&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$4804&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod U2 Edition (Color) 20 GB&lt;/td&gt;&lt;td&gt;2005-06-28&lt;/td&gt;&lt;td&gt;$329.0&lt;/td&gt;&lt;td&gt;$5286&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod 5th Gen (with Video) 30 GB, 60 GB&lt;/td&gt;&lt;td&gt;2005-10-12&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$3639&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod U2 Edition 5th Gen 30 GB&lt;/td&gt;&lt;td&gt;2006-06-06&lt;/td&gt;&lt;td&gt;$329.0&lt;/td&gt;&lt;td&gt;$3302&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod 5th Gen - Enhanced 30 GB, 80 GB&lt;/td&gt;&lt;td&gt;2006-09-12&lt;/td&gt;&lt;td&gt;$249.0&lt;/td&gt;&lt;td&gt;$2055&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod U2 Edition 5th Gen Enhanced 30 GB&lt;/td&gt;&lt;td&gt;2006-09-12&lt;/td&gt;&lt;td&gt;$279.0&lt;/td&gt;&lt;td&gt;$2303&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod classic (&#34;Original&#34;/6th Gen) 80 GB, 160 GB&lt;/td&gt;&lt;td&gt;2007-09-05&lt;/td&gt;&lt;td&gt;$249.0&lt;/td&gt;&lt;td&gt;$1091&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod classic (Late 2008/7th Gen) 120 GB, 160 GB&lt;/td&gt;&lt;td&gt;2008-09-09&lt;/td&gt;&lt;td&gt;$249.0&lt;/td&gt;&lt;td&gt;$984&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod mini 4 GB&lt;/td&gt;&lt;td&gt;2004-01-06&lt;/td&gt;&lt;td&gt;$249.0&lt;/td&gt;&lt;td&gt;$13510&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod mini (2nd Gen) 4 GB, 6 GB&lt;/td&gt;&lt;td&gt;2005-02-23&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$2704&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod nano 1 GB, 2 GB, 4 GB&lt;/td&gt;&lt;td&gt;2005-09-07&lt;/td&gt;&lt;td&gt;$149.0&lt;/td&gt;&lt;td&gt;$1835&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod nano (2nd Gen) 2 GB, 4 GB, 8 GB&lt;/td&gt;&lt;td&gt;2006-09-12&lt;/td&gt;&lt;td&gt;$149.0&lt;/td&gt;&lt;td&gt;$1229&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod nano 2nd Gen (RED) 4 GB, 8 GB&lt;/td&gt;&lt;td&gt;2006-10-13&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$1590&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod nano (3rd Gen/Fat) 4 GB, 8 GB&lt;/td&gt;&lt;td&gt;2007-09-05&lt;/td&gt;&lt;td&gt;$149.0&lt;/td&gt;&lt;td&gt;$653&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod nano (4th Gen) 8 GB, 16 GB*&lt;/td&gt;&lt;td&gt;2008-09-09&lt;/td&gt;&lt;td&gt;$149.0&lt;/td&gt;&lt;td&gt;$588&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod nano (5th Gen/Camera) 8 GB, 16 GB&lt;/td&gt;&lt;td&gt;2009-09-09&lt;/td&gt;&lt;td&gt;$149.0&lt;/td&gt;&lt;td&gt;$521&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod nano (6th Gen/Multitouch) 8 GB, 16 GB&lt;/td&gt;&lt;td&gt;2010-09-01&lt;/td&gt;&lt;td&gt;$149.0&lt;/td&gt;&lt;td&gt;$356&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod shuffle (White) 512 MB, 1 GB&lt;/td&gt;&lt;td&gt;2005-01-11&lt;/td&gt;&lt;td&gt;$99.0&lt;/td&gt;&lt;td&gt;$1838&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod shuffle 2nd Gen (Silver) 1 GB&lt;/td&gt;&lt;td&gt;2006-09-12&lt;/td&gt;&lt;td&gt;$79.0&lt;/td&gt;&lt;td&gt;$652&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod shuffle 2nd Gen (Colors/Early 2007) 1 GB&lt;/td&gt;&lt;td&gt;2007-01-30&lt;/td&gt;&lt;td&gt;$79.0&lt;/td&gt;&lt;td&gt;$553&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod shuffle 2nd Gen (Late 2007) 1 GB, 2 GB&lt;/td&gt;&lt;td&gt;2007-09-05&lt;/td&gt;&lt;td&gt;$79.0&lt;/td&gt;&lt;td&gt;$346&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod shuffle 2nd Gen (Late 2008) 1 GB, 2 GB&lt;/td&gt;&lt;td&gt;2008-09-09&lt;/td&gt;&lt;td&gt;$49.0&lt;/td&gt;&lt;td&gt;$193&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod shuffle 3rd Gen 4 GB&lt;/td&gt;&lt;td&gt;2009-03-11&lt;/td&gt;&lt;td&gt;$79.0&lt;/td&gt;&lt;td&gt;$511&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod shuffle 3rd Gen (Colors) 2 GB, 4 GB&lt;/td&gt;&lt;td&gt;2009-09-09&lt;/td&gt;&lt;td&gt;$59.0&lt;/td&gt;&lt;td&gt;$206&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod shuffle 4th Gen (Wheel/VoiceOver) 2 GB&lt;/td&gt;&lt;td&gt;2010-09-01&lt;/td&gt;&lt;td&gt;$49.0&lt;/td&gt;&lt;td&gt;$117&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod touch (Original) 8, 16, 32 GB&lt;/td&gt;&lt;td&gt;2007-09-05&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$1310&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod touch (2nd Gen) 8, 16, 32 GB&lt;/td&gt;&lt;td&gt;2008-09-09&lt;/td&gt;&lt;td&gt;$229.0&lt;/td&gt;&lt;td&gt;$905&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod touch (3rd Gen/8 GB) 8 GB&lt;/td&gt;&lt;td&gt;2009-09-09&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$697&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod touch (3rd Gen/32 &amp;amp; 64 GB) 32, 64 GB&lt;/td&gt;&lt;td&gt;2009-09-09&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$1047&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod touch (4th Gen/FaceTime) 8, 32, 64 GB&lt;/td&gt;&lt;td&gt;2010-09-01&lt;/td&gt;&lt;td&gt;$229.0&lt;/td&gt;&lt;td&gt;$548&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPod touch (4.5/5th Gen/White) 8, 32, 64 GB&lt;/td&gt;&lt;td&gt;2011-10-04&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$320&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple TV (Original)&lt;/td&gt;&lt;td&gt;2007-01-09&lt;/td&gt;&lt;td&gt;$299.0&lt;/td&gt;&lt;td&gt;$1936&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple TV (2nd Generation)&lt;/td&gt;&lt;td&gt;2010-09-01&lt;/td&gt;&lt;td&gt;$99.0&lt;/td&gt;&lt;td&gt;$237&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple TV (3rd Generation)&lt;/td&gt;&lt;td&gt;2012-03-07&lt;/td&gt;&lt;td&gt;$99.0&lt;/td&gt;&lt;td&gt;$111&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPhone (Original/EDGE) 4, 8, 16 GB&lt;/td&gt;&lt;td&gt;2007-01-09&lt;/td&gt;&lt;td&gt;$499.0&lt;/td&gt;&lt;td&gt;$3231&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPhone 3G 8, 16 GB&lt;/td&gt;&lt;td&gt;2008-06-09&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$656&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPhone 3GS 8, 16, 32 GB*&lt;/td&gt;&lt;td&gt;2009-06-08&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$829&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPhone 3G (China/No Wi-Fi) 8 GB&lt;/td&gt;&lt;td&gt;2009-10-30&lt;/td&gt;&lt;td&gt;$0.0&lt;/td&gt;&lt;td&gt;$0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPhone 3GS (China/No Wi-Fi) 16, 32 GB&lt;/td&gt;&lt;td&gt;2009-10-30&lt;/td&gt;&lt;td&gt;$0.0&lt;/td&gt;&lt;td&gt;$0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPhone 4 (GSM) 8, 16, 32 GB&lt;/td&gt;&lt;td&gt;2010-06-07&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$475&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPhone 4 (CDMA/Verizon/Sprint) 8, 16, 32 GB&lt;/td&gt;&lt;td&gt;2011-01-11&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$349&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPhone 4S 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2011-10-04&lt;/td&gt;&lt;td&gt;$199.0&lt;/td&gt;&lt;td&gt;$320&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPad Wi-Fi (Original) 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2010-01-27&lt;/td&gt;&lt;td&gt;$499.0&lt;/td&gt;&lt;td&gt;$1439&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPad Wi-Fi/3G/GPS (Original) 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2010-01-27&lt;/td&gt;&lt;td&gt;$629.0&lt;/td&gt;&lt;td&gt;$1814&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPad 2 (Wi-Fi Only) 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2011-03-02&lt;/td&gt;&lt;td&gt;$499.0&lt;/td&gt;&lt;td&gt;$849&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPad 2 (Wi-Fi/GSM/GPS) 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2011-03-02&lt;/td&gt;&lt;td&gt;$629.0&lt;/td&gt;&lt;td&gt;$1070&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPad 2 (Wi-Fi/CDMA/GPS) 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2011-03-02&lt;/td&gt;&lt;td&gt;$629.0&lt;/td&gt;&lt;td&gt;$1070&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPad 3rd Gen (Wi-Fi Only) 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2012-03-07&lt;/td&gt;&lt;td&gt;$499.0&lt;/td&gt;&lt;td&gt;$563&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPad 3rd Gen (Wi-Fi/4G LTE AT&amp;amp;T/GPS) 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2012-03-07&lt;/td&gt;&lt;td&gt;$629.0&lt;/td&gt;&lt;td&gt;$710&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apple iPad 3rd Gen (Wi-Fi/4G LTE Verizon/GPS) 16, 32, 64 GB&lt;/td&gt;&lt;td&gt;2012-03-07&lt;/td&gt;&lt;td&gt;$629.0&lt;/td&gt;&lt;td&gt;$710&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xA;&#xA;</content>
  </entry>
  <entry>
    <title>Starfighter</title>
    <id>http://kyleconroy.com/starfighter</id>
    <link href="https://kyleconroy.com/starfighter"></link>
    <updated>2009-12-23T00:00:00Z</updated>
    <content type="html">&lt;p&gt;The objective of StarFighter is to fly and blast through asteroids&#xA;and space debris, making it to the end of the level with a high score.&#xA;The ship is controlled entirely with the mouse. Lasers are fired by clicking&#xA;the mouse button. The ship can also launch bombs by holding down the mouse&#xA;button and releasing it after at least half a second. The longer the mouse button&#xA;is held down, the further the bomb travels. Bombs are detonated by pressing the space bar.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Features&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;animation and UI using OpenGL and GLUT&lt;/li&gt;&#xA;&lt;li&gt;detailed collision detection, optimized using object-aligned bounding boxes/spheres and kd-trees&lt;/li&gt;&#xA;&lt;li&gt;ray tracing technique used to fire lasers/missiles&lt;/li&gt;&#xA;&lt;li&gt;gravity-affected, bounce-able projectile simulation with balls&lt;/li&gt;&#xA;&lt;li&gt;mouse controlled x/y thrust&lt;/li&gt;&#xA;&lt;li&gt;level input file parsing to construct world, using OBJ output of objects designed in Maya&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2&gt;Libraries Used&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eigen vector/matrix library&lt;/li&gt;&#xA;&lt;li&gt;kdtree (&lt;a class=&#34;wiki_link_ext&#34; href=&#34;http://code.google.com/p/kdtree/&#34; rel=&#34;nofollow&#34;&gt;&lt;a href=&#34;http://code.google.com/p/kdtree/&#34;&gt;http://code.google.com/p/kdtree/&lt;/a&gt;&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;FreeImage for writing images&lt;/li&gt;&#xA;&lt;li&gt;SOIL (Simple OpenGL Image Library) for texture input&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;!-- EXCERPT --&gt;&#xA;&#xA;&lt;style type=&#34;text/css&#34; media=&#34;screen&#34;&gt;&#xA;  article #images img {&#xA;    width: 145px;&#xA;    padding: 10px;&#xA;    display: inline-block;&#xA;  }&#xA;&#xA;  article object{&#xA;    margin: 5px;&#xA;  }&#xA;&#xA;&lt;/style&gt;&#xA;&#xA;&lt;h2&gt;Group:&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Long Cheng cs184-cy&lt;/li&gt;&#xA;&lt;li&gt;Kyle Conroy cs184-cz&lt;/li&gt;&#xA;&lt;li&gt;Jillian Moore cs184-cx&lt;/li&gt;&#xA;&lt;li&gt;Wei Yeh cs184-df&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;p&gt;Hosted on Github&#xA;&lt;a href=&#34;http://github.com/derferman/starfighter&#34;&gt;http://github.com/derferman/starfighter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Binary&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Snow Leopard Only: &lt;a href=&#34;/data/starfighter&#34;&gt;http://www.kyleconroy.com/data/starfighter&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Video&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;object width=&#34;400&#34; height=&#34;250&#34;&gt;&lt;param name=&#34;movie&#34; value=&#34;https://www.youtube.com/v/04mtErvEBG0&amp;hl=en_US&amp;fs=1&amp;hd=1&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowFullScreen&#34; value=&#34;true&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowscriptaccess&#34; value=&#34;always&#34;&gt;&lt;/param&gt;&lt;embed src=&#34;http://www.youtube.com/v/04mtErvEBG0&amp;hl=en_US&amp;fs=1&amp;hd=1&#34; type=&#34;application/x-shockwave-flash&#34; allowscriptaccess=&#34;always&#34; allowfullscreen=&#34;true&#34; width=&#34;400&#34; height=&#34;250&#34;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;object width=&#34;400&#34; height=&#34;250&#34;&gt;&lt;param name=&#34;movie&#34; value=&#34;https://www.youtube.com/v/ELPBt9aioNc&amp;hl=en_US&amp;fs=1&amp;hd=1&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowFullScreen&#34; value=&#34;true&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowscriptaccess&#34; value=&#34;always&#34;&gt;&lt;/param&gt;&lt;embed src=&#34;http://www.youtube.com/v/ELPBt9aioNc&amp;hl=en_US&amp;fs=1&amp;hd=1&#34; type=&#34;application/x-shockwave-flash&#34; allowscriptaccess=&#34;always&#34; allowfullscreen=&#34;true&#34; width=&#34;400&#34; height=&#34;250&#34;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;object width=&#34;400&#34; height=&#34;250&#34;&gt;&lt;param name=&#34;movie&#34; value=&#34;https://www.youtube.com/v/vjVHya7seKE&amp;hl=en_US&amp;fs=1&amp;hd=1&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowFullScreen&#34; value=&#34;true&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowscriptaccess&#34; value=&#34;always&#34;&gt;&lt;/param&gt;&lt;embed src=&#34;http://www.youtube.com/v/vjVHya7seKE&amp;hl=en_US&amp;fs=1&amp;hd=1&#34; type=&#34;application/x-shockwave-flash&#34; allowscriptaccess=&#34;always&#34; allowfullscreen=&#34;true&#34; width=&#34;400&#34; height=&#34;250&#34;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;Quicktime had some problems. It didn&#39;t record the sound effects and created some bad flashing artifacts (seen in the first video)&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Images&lt;/h2&gt;&#xA;&#xA;&lt;div id=&#34;images&#34;&gt;&#xA;&lt;a href=&#34;/images/starfighter/image-01.png&#34;&gt;&#xA;  &lt;img src=&#34;/images/starfighter/image-01.png&#34; alt=&#34;image01&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;a href=&#34;/images/starfighter/image-06.png&#34;&gt;&#xA;  &lt;img src=&#34;/images/starfighter/image-06.png&#34; alt=&#34;image01&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;a href=&#34;/images/starfighter/image-09.png&#34;&gt;&#xA;  &lt;img src=&#34;/images/starfighter/image-09.png&#34; alt=&#34;image01&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;a href=&#34;/images/starfighter/image-13.png&#34;&gt;&#xA;  &lt;img src=&#34;/images/starfighter/image-13.png&#34; alt=&#34;image01&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;a href=&#34;/images/starfighter/image-29.png&#34;&gt;&#xA;  &lt;img src=&#34;/images/starfighter/image-29.png&#34; alt=&#34;image01&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;a href=&#34;/images/starfighter/image-34.png&#34;&gt;&#xA;  &lt;img src=&#34;/images/starfighter/image-34.png&#34; alt=&#34;image01&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;a href=&#34;/images/starfighter/image-54.png&#34;&gt;&#xA;  &lt;img src=&#34;/images/starfighter/image-54.png&#34; alt=&#34;image01&#34; /&gt;&#xA;&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2&gt;Compilation&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Use &lt;code&gt;make&lt;/code&gt; resulting executable is named &lt;code&gt;starfighter&lt;/code&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Usage&lt;/h2&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;./starfighter -f levelListFile&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;h2&gt;Input File Spec&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;The input file is a level list with pairs&lt;/p&gt;&#xA;&#xA;&lt;pre&gt;&lt;code&gt;level highScore&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;separated by newlines. &amp;amp;lt;level&amp;amp;gt;.level refers to the level file in the same directory.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;A level file consists of geometry definitions and model definitions.&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Level File Spec&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;Some entries have options [option1 | option2]&lt;/p&gt;&#xA;&#xA;&lt;h3&gt;Loading a .obj mesh&lt;/h3&gt;&#xA;&#xA;&lt;pre&gt;&#xA;{&#xA;    objgeometry #&#xA;    name unique-name # must be a unique name&#xA;    path path/to/file # relative path&#xA;    bs [box | sphere] # sets the bounding shape, default is box&#xA;    boundingsphere x y z r # explicitly sets the bounding sphere&#xA;    boundingsphere x y z x y z # explicitly sets the bounding box&#xA;}&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;A sample level file can be found &lt;a href=&#34;http://github.com/derferman/starfighter/blob/master/levels/hittest.level&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Other Credits&lt;/h2&gt;&#xA;&#xA;&lt;ul&gt;&#xA;    &lt;li&gt;Ship model from sender pinarci, on TurboSquid&lt;/li&gt;&#xA;    &lt;ul&gt;&#xA;        &lt;li&gt;&lt;a  href=&#34;http://www.turbosquid.com/3d-models/sendercorp-sender-ma-free/429728&#34; rel=&#34;nofollow&#34;&gt;http://www.turbosquid.com/3d-models/sendercorp-sender-ma-free/429728&lt;/a&gt;&lt;/li&gt;&#xA;        &lt;li&gt;&lt;a href=&#34;http://www.turbosquid.com/FullPreview/Index.cfm/ID/433482&#34; rel=&#34;nofollow&#34;&gt;http://www.turbosquid.com/FullPreview/Index.cfm/ID/433482&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;/ul&gt;&#xA;    &lt;li&gt;Asteroid models from Setro on turbo squid&lt;/li&gt;&#xA;        &lt;ul&gt;&lt;li&gt;&lt;a href=&#34;http://www.turbosquid.com/3d-models/free-3ds-model-stones/497091&#34; rel=&#34;nofollow&#34;&gt;http://www.turbosquid.com/3d-models/free-3ds-model-stones/497091&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xA;    &lt;li&gt;Sound effects from &lt;a  href=&#34;http://freesound.org&#34; rel=&#34;nofollow&#34;&gt;http://freesound.org&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
  </entry>
  <entry>
    <title>Bezier Curves And The Utah Teapot</title>
    <id>http://kyleconroy.com/bezier-curves-and-the-utah-teapot</id>
    <link href="https://kyleconroy.com/bezier-curves-and-the-utah-teapot"></link>
    <updated>2009-11-14T00:00:00Z</updated>
    <content type="html">&lt;p&gt;My latest CS184 project is now complete and ready for viewing. We had to take in Bezier patches and use tessellation to create triangles using OpenGL. But I know what you really want to see: videos.&lt;/p&gt;&#xA;&#xA;&lt;!-- EXCERPT --&gt;&#xA;&#xA;&lt;p&gt;&lt;object width=&#34;480&#34; height=&#34;385&#34;&gt;&lt;param name=&#34;movie&#34; value=&#34;https://www.youtube.com/v/XJL0nQYLZ-Y?fs=1&amp;amp;hl=en_US&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowFullScreen&#34; value=&#34;true&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowscriptaccess&#34; value=&#34;always&#34;&gt;&lt;/param&gt;&lt;embed src=&#34;http://www.youtube.com/v/XJL0nQYLZ-Y?fs=1&amp;amp;hl=en_US&#34; type=&#34;application/x-shockwave-flash&#34; allowscriptaccess=&#34;always&#34; allowfullscreen=&#34;true&#34; width=&#34;480&#34; height=&#34;385&#34;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;object width=&#34;480&#34; height=&#34;385&#34;&gt;&lt;param name=&#34;movie&#34; value=&#34;https://www.youtube.com/v/DzizQn51l5A?fs=1&amp;amp;hl=en_US&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowFullScreen&#34; value=&#34;true&#34;&gt;&lt;/param&gt;&lt;param name=&#34;allowscriptaccess&#34; value=&#34;always&#34;&gt;&lt;/param&gt;&lt;embed src=&#34;http://www.youtube.com/v/DzizQn51l5A?fs=1&amp;amp;hl=en_US&#34; type=&#34;application/x-shockwave-flash&#34; allowscriptaccess=&#34;always&#34; allowfullscreen=&#34;true&#34; width=&#34;480&#34; height=&#34;385&#34;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&#xA;</content>
  </entry>
  <entry>
    <title>CS184 C++ Raytracer</title>
    <id>http://kyleconroy.com/cs184-c++-raytracer</id>
    <link href="https://kyleconroy.com/cs184-c++-raytracer"></link>
    <updated>2009-10-10T00:00:00Z</updated>
    <content type="html">&lt;p&gt;We were tasked with creating a raytracer. Images are followed by the command line which produced them, as well as the scene file describing the setup. All times were calculated using the linux time program. All images on this page were output using my raytracer.&lt;/p&gt;&#xA;&#xA;&lt;!-- EXCERPT --&gt;&#xA;&#xA;&lt;style&gt;&#xA;&#xA;.raytraced {&#xA;    width: 100%;&#xA;}&#xA;&#xA;table {&#xA;    margin: 10px;&#xA;}&#xA;&#xA;table td{&#xA;    padding: 4px;&#xA;}&#xA;&#xA;table td:first-child{&#xA;    font-weight: bold;&#xA;}&#xA;table.aa td{&#xA;&#xA;}&#xA;table.aa img{&#xA;    width: 380px;&#xA;}&#xA;pre {&#xA;    display: none;&#xA;}&#xA;&lt;/style&gt;&#xA;&#xA;&lt;h2&gt;Three spheres and a Triangle&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img class=&#34;raytraced&#34; src=&#34;/images/raytracer/spheretri.png&#34; alt=&#34;reflection&#34;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;table&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Command:&lt;/td&gt;&#xA;    &lt;td&gt;./raytrace scenes/spherestri.scene&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Time:&lt;/td&gt;&#xA;    &lt;td&gt;6.030s&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Features:&lt;/td&gt;&#xA;    &lt;td&gt;Reflections, Shadows, Phong Shading, Antialiasing&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Comments:&lt;/td&gt;&#xA;    &lt;td&gt;This photo was inspired by the Raytracing Implementation Journal. It&#xA;      shows off shadows quite well&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Scene File&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;/txt/raytracer/spherestri.scene&#34;&gt;&#xA;        spherestri.scene&lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;h2&gt;Five spheres with Reflection&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img class=&#34;raytraced&#34; src=&#34;/images/raytracer/reflection.png&#34; alt=&#34;reflection&#34;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;table&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Command:&lt;/td&gt;&#xA;    &lt;td&gt;./raytrace scenes/reflections.scene&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Time:&lt;/td&gt;&#xA;    &lt;td&gt;7.714s&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Features:&lt;/td&gt;&#xA;    &lt;td&gt;Reflections, Shadows, Phong Shading, Antialiasing&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Comments:&lt;/td&gt;&#xA;    &lt;td&gt;This photo was inspired by the Raytracing Implementation Journal&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Scene File&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;/txt/raytracer/reflections.scene&#34;&gt;&#xA;        reflections.scene&lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;h2&gt;Three Ellipsoids&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img class=&#34;raytraced&#34; src=&#34;/images/raytracer/mirrors.png&#34; alt=&#34;reflection&#34;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;table&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Command:&lt;/td&gt;&#xA;    &lt;td&gt;./raytrace scenes/mirrors.scene&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Time:&lt;/td&gt;&#xA;    &lt;td&gt;32.797s&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Features:&lt;/td&gt;&#xA;    &lt;td&gt;Linear Transformations, Reflections, Shadows&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Comments:&lt;/td&gt;&#xA;    &lt;td&gt;&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Scene File&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;/txt/raytracer/mirrors.scene&#34;&gt;&#xA;        mirrors.scene&lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;h2&gt;Five Ellipsoids&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img class=&#34;raytraced&#34; src=&#34;/images/raytracer/elipse.png&#34; alt=&#34;reflection&#34;/&gt;&lt;/p&gt;&#xA;&#xA;&lt;table&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Command:&lt;/td&gt;&#xA;    &lt;td&gt;./raytrace scenes/elipse.scene&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Time:&lt;/td&gt;&#xA;    &lt;td&gt;11.506s&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Features:&lt;/td&gt;&#xA;    &lt;td&gt;Linear Transformations, Reflections, Shadows&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Comments:&lt;/td&gt;&#xA;    &lt;td&gt;This photo was inspired by the Raytracing Implementation Journal&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Scene File&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;/txt/raytracer/elipse.scene&#34;&gt;&#xA;        elipse.scene&lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;h2&gt;Antialiasing&lt;/h2&gt;&#xA;&#xA;&lt;table class=&#34;aa&#34;&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Resolution&lt;/td&gt;&#xA;    &lt;td&gt;Time&lt;/td&gt;&#xA;    &lt;td&gt;Image&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;1&lt;/td&gt;&#xA;    &lt;td&gt;0.354s&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;img src=&#34;/images/raytracer/aa1.png&#34; alt=&#34;reflection&#34;/&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;2&lt;/td&gt;&#xA;    &lt;td&gt;1.067s&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;        &lt;img src=&#34;/images/raytracer/aa2.png&#34; alt=&#34;reflection&#34;/&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;3&lt;/td&gt;&#xA;    &lt;td&gt;2.305s&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;        &lt;img src=&#34;/images/raytracer/aa3.png&#34; alt=&#34;reflection&#34;/&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;4&lt;/td&gt;&#xA;    &lt;td&gt;4.008s&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;        &lt;img src=&#34;/images/raytracer/aa4.png&#34; alt=&#34;reflection&#34;/&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;5&lt;/td&gt;&#xA;    &lt;td&gt;6.093s&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;        &lt;img src=&#34;/images/raytracer/aa5.png&#34; alt=&#34;reflection&#34;/&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;table&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Command:&lt;/td&gt;&#xA;    &lt;td&gt;./raytrace scenes/antialias.scene&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Features:&lt;/td&gt;&#xA;    &lt;td&gt;Antialiasing&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Comments:&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      The number of rays sent out per pixel is the resolution value squared.&#xA;      As we can see in the first image, we apply a small amount of jitter&#xA;      to each ray, whih further reduces aliasing.&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Scene File&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;/txt/raytracer/antialias.scene&#34;&gt;&#xA;        antialias.scene&lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;&#xA;&lt;h2&gt;Rendering .obj&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img class=&#34;raytraced&#34; src=&#34;/images/raytracer/teapot.png&#34; alt=&#34;reflection&#34;/&gt;&#xA;&lt;table&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Time:&lt;/td&gt;&#xA;    &lt;td&gt;5m45.038s&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Command:&lt;/td&gt;&#xA;    &lt;td&gt;./raytrace scenes/teapot.scene&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Features:&lt;/td&gt;&#xA;    &lt;td&gt;Loading and rendering .obj files&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Comments:&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      My .obj parser does not support vector normals&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Scene File&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;/txt/raytracer/teapot.scene&#34;&gt;&#xA;        teapot.scene&lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2&gt;Angel&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;&lt;img class=&#34;raytraced&#34; src=&#34;/images/raytracer/angel.png&#34; alt=&#34;reflection&#34;/&gt;&#xA;&lt;table&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Time:&lt;/td&gt;&#xA;    &lt;td&gt;66m38.493s&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Command:&lt;/td&gt;&#xA;    &lt;td&gt;./raytrace scenes/angel.scene&lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Comments:&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      Rendering this file is pretty slow without acceleration&#xA;      structures&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;  &lt;tr&gt;&#xA;    &lt;td&gt;Scene File&lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;/txt/raytracer/angel.scene&#34;&gt;&#xA;        angel.scene&lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/table&gt;&lt;/p&gt;&#xA;</content>
  </entry>
</feed>