<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.geekhold.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;CUUCQXg_fCp7ImA9WxBbEk4.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401</id><updated>2010-03-10T07:01:00.644-08:00</updated><title>Coding Relic</title><subtitle type="html">Random musings on software in an embedded world.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://codingrelic.geekhold.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>93</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.geekhold.com/CodingRelic" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="codingrelic" /><entry gd:etag="W/&quot;CUUCQXg-eCp7ImA9WxBbEk4.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-663486703530857465</id><published>2010-03-10T07:01:00.000-08:00</published><updated>2010-03-10T07:01:00.650-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-10T07:01:00.650-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C Programming" /><title>Code Snippet: SIOCGIFCONF</title><content type="html">&lt;p&gt;A little while ago in this space we discussed &lt;a href="http://codingrelic.geekhold.com/2009/10/code-snippet-sobindtodevice.html"&gt;SO_BINDTODEVICE&lt;/a&gt;, the socket option to control which physical interface will be used for packet ingress/egress. Recently in the comments of that post a question was posed: if you know the IP address of the interface, how do you programmatically find its name?&lt;/p&gt;

&lt;p&gt;If there is a direct way to pass in an IP address and get back the interface name, I don't know it. The mechanism I know of is to retrieve the interface list from the kernel and walk through it until you find the IP address you're looking for. The code snippet below demonstrates the technique: the first use of SIOCGIFCONF determines the amount of memory we need, the second retrieves the interface list.&lt;/p&gt;

&lt;pre style="font-family: monospace; font-size: small; line-height: 1.2em; margin-left: 2em;"&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;sys/socket.h&amp;gt;
#include &amp;lt;sys/ioctl.h&amp;gt;
#include &amp;lt;linux/if.h&amp;gt;
#include &amp;lt;netinet/in.h&amp;gt;
#include &amp;lt;arpa/inet.h&amp;gt;

int main()
{
   struct ifreq *ifr;
   struct ifconf ifc;
   int s, i;
   int numif;

   // find number of interfaces.
   memset(&amp;amp;ifc, 0, sizeof(ifc));
   ifc.ifc_ifcu.ifcu_req = NULL;
   ifc.ifc_len = 0;

   if ((s = socket(AF_INET, SOCK_DGRAM, 0)) &amp;lt; 0) {
     perror("socket");
     exit(1);
   }

   if (ioctl(s, SIOCGIFCONF, &amp;amp;ifc) &amp;lt; 0) {
     perror("ioctl");
     exit(2);
   }

   if ((ifr = malloc(ifc.ifc_len)) == NULL) {
     perror("malloc");
     exit(3);
   }
   ifc.ifc_ifcu.ifcu_req = ifr;

   if (ioctl(s, SIOCGIFCONF, &amp;amp;ifc) &amp;lt; 0) {
     perror("ioctl2");
     exit(4);
   }
   close(s);

   numif = ifc.ifc_len / sizeof(struct ifreq);
   for (i = 0; i &amp;lt; numif; i++) {
     struct ifreq *r = &amp;amp;ifr[i];
     struct sockaddr_in *sin = (struct sockaddr_in *)&amp;amp;r-&amp;gt;ifr_addr;

     printf("%-8s : %s\n", r-&amp;gt;ifr_name, inet_ntoa(sin-&amp;gt;sin_addr));
   }

   free(ifr);
   exit(0);
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-663486703530857465?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=j2QUOtsSesg:8r53xpgn4ks:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=j2QUOtsSesg:8r53xpgn4ks:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=j2QUOtsSesg:8r53xpgn4ks:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=j2QUOtsSesg:8r53xpgn4ks:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=j2QUOtsSesg:8r53xpgn4ks:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=j2QUOtsSesg:8r53xpgn4ks:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=j2QUOtsSesg:8r53xpgn4ks:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=j2QUOtsSesg:8r53xpgn4ks:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/j2QUOtsSesg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=663486703530857465" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/663486703530857465?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/663486703530857465?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/03/code-snippet-siocgifconf.html" title="Code Snippet: SIOCGIFCONF" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CkMCQX08cCp7ImA9WxBbEEs.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-6413876876658359231</id><published>2010-03-08T07:01:00.000-08:00</published><updated>2010-03-08T07:01:00.378-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-08T07:01:00.378-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Recursive Login Error</title><content type="html">&lt;center&gt;&lt;img border="0" width="453" height="151" src="http://4.bp.blogspot.com/_WibILqsOlLg/S3gGkwVUJmI/AAAAAAAAAoA/fE4mwe_ITec/s640/login.png" style="border: solid grey 1px; margin: 4px;" alt="Error dialog reads: Sorry, you have to be logged in to download this item. You are already logged in." title="Web site identity concealed, to protect the guilty." /&gt;&lt;/center&gt;

&lt;p&gt;If I log in, won't I end up here again?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-6413876876658359231?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0-LOj3NjLQ4:R-yF6WgeUNY:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0-LOj3NjLQ4:R-yF6WgeUNY:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0-LOj3NjLQ4:R-yF6WgeUNY:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0-LOj3NjLQ4:R-yF6WgeUNY:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0-LOj3NjLQ4:R-yF6WgeUNY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0-LOj3NjLQ4:R-yF6WgeUNY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0-LOj3NjLQ4:R-yF6WgeUNY:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0-LOj3NjLQ4:R-yF6WgeUNY:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/0-LOj3NjLQ4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=6413876876658359231" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/6413876876658359231?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/6413876876658359231?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/03/recursive-login-error.html" title="Recursive Login Error" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_WibILqsOlLg/S3gGkwVUJmI/AAAAAAAAAoA/fE4mwe_ITec/s72-c/login.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C0UCQX8zcSp7ImA9WxBUGE0.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-771274636664253324</id><published>2010-03-05T07:01:00.000-08:00</published><updated>2010-03-05T07:01:00.189-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-05T07:01:00.189-08:00</app:edited><title>Two Bots Enter, One Bot Leaves</title><content type="html">&lt;p&gt;Let me share part of an email I recently received:&lt;/p&gt;

&lt;div style="font-family: monospace; margin: 2em; padding: 1em; border-width: 1px; border-color: #999999; border-style: solid; background-color: #cccccc; text-align: left; width: 70%;"&gt;I just discovered Coding Relic, which is a really great resource.  I really enjoyed your article from last November on Foursquare.&lt;br/&gt;&amp;nbsp;&lt;br/&gt;
&lt;i&gt;&amp;lt;Redacted&amp;gt;&lt;/i&gt; is a client of our communications firm, and the topics discussed on your blog are well-matched with the themes of ...&lt;/div&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/chaunceydavis/3314624949/"&gt;&lt;img border="0" align="right" width="64" height="96" src="http://2.bp.blogspot.com/_WibILqsOlLg/S5EI9Ve9m4I/AAAAAAAAAp4/qjWV6qgwqSw/s320/cylon.jpg" style="border: 0px; margin: 0px;" alt="Cylon Centurion" title="Image by chaunceydavis, licensed under Creative Commons." /&gt;&lt;/a&gt;Etc, etc. The rest of the email suggested that I write a post about the client. Unfortunately the truth is he did not just discover this blog, in reality he has &lt;i&gt;no idea&lt;/i&gt; of its existence. He supplied a list of keywords to an automated tool which searches &lt;a href="http://www.technorati.com/"&gt;Technorati&lt;/a&gt;/&lt;a href="http://www.icerocket.com/"&gt;IceRocket&lt;/a&gt;/&lt;a href="http://blogsearch.google.com/"&gt;BlogSearch&lt;/a&gt;/etc to send an email to those with contact information available. One of the keywords was &amp;quot;foursquare,&amp;quot; and it found the one solitary article I wrote which matched.&lt;/p&gt;

&lt;p&gt;This email was generated by a bot. It is given an initial direction, which it uses to autonomously pursue a goal. The goal in this case is to generate blog posts about the client. I've chosen not to write a blog post about the client as it is not related to the topics I'm interested in. Instead, I'm going to write about the bot.&lt;/p&gt;


&lt;br/&gt;&amp;nbsp;&lt;br/&gt;
&lt;span style="font-weight: bold; font-size: 115%;"&gt;Warning: Sports Analogies Approaching&lt;/span&gt;
&lt;p&gt;This bot plays offense, in that it takes action to achieve a goal for the person who unleashed it upon the net. There are many similar bots which play on offense:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;Email spam bots should top the list: harvest addresses, send spam email, repeat.&lt;/li&gt;
 &lt;li&gt;Twitter bots will follow, wait a few days for reciprocation, then unfollow in an attempt to build a large follower count. If you do follow back they generate a generic &amp;quot;Welcome and thanks for following my tweets!&amp;quot; message.&lt;/li&gt;
 &lt;li&gt;Hype generation bots, which retweet &lt;a href="http://twitter.com/WebDesignFltr/statuses/9598409105"&gt;anything&lt;/a&gt; &lt;a href="http://twitter.com/socialmediafltr/statuses/9504965662"&gt;containing&lt;/a&gt; &lt;a href="http://twitter.com/iServiceAgentur/statuses/9773546885"&gt;a&lt;/a&gt; &lt;a href="http://twitter.com/socialmediafltr/statuses/9768019965"&gt;keyword&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.google.com/alerts"&gt;Google Alerts&lt;/a&gt;, which inform you when a site matching specified keywords is crawled by Googlebot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're in the middle of an arms race between the bots on offense versus the bots playing defense. Some examples of bots playing defense:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;Email spam filters like &lt;a href="http://spamassassin.apache.org/"&gt;spamassassin&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;The ubiquitous anti-virus software.&lt;/li&gt;
 &lt;li&gt;Services like &lt;a href="http://socialtoo.com"&gt;socialtoo&lt;/a&gt; block dangerous tweets, such as those containing a link to malware or a phishing site.&lt;/li&gt;
 &lt;li&gt;Services like &lt;a href="http://googlevoiceblog.blogspot.com/2009/03/helping-you-fight-phone-spam.html"&gt;Google Voice&lt;/a&gt; block spam callers, like the &amp;quot;&lt;a href="http://msmvps.com/blogs/harrywaldron/archive/2009/01/16/cell-phone-scam-this-is-the-second-notice-that-the-factory-warranty-on-your-vehicle-is-expiring.aspx"&gt;your warranty is expiring&lt;/a&gt;&amp;quot; robo-call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're still in the early days of networked bots vying for and against our interests. The attacking bots so far have been mostly unfocussed, broadcasted out widely in hopes of catching someone. We're just starting to see the rise of targeted malware, coded with information about the &lt;a href="http://isc.sans.org/diary.html?storyid=5662"&gt;specific person(s)&lt;/a&gt; it is trying to reach. The offense is learning tactics and strategy. The defense needs to step up its game. Defensive bots now are specific to particular communications media, monitoring twitter &lt;i&gt;or&lt;/i&gt; email &lt;i&gt;or&lt;/i&gt; telephone. We're moving to a world where your online presence actively monitors communications channels you use, actively defending your interests.&lt;/p&gt;



&lt;br/&gt;&amp;nbsp;&lt;br/&gt;
&lt;span style="font-weight: bold; font-size: 115%;"&gt;Playing Offense&lt;/span&gt;
&lt;p&gt;There is another good bit of advice from the world of sports: You can't win by playing defense. Many useful tools to actively monitor things you are interested in are free, and easily available. Anyone can use them, not just marketing and PR firms. One which I use is &lt;a href="http://www.google.com/alerts"&gt;Google Alerts&lt;/a&gt;, a service by Google to monitor the web index for search terms you specify and email any new results. You can choose to be notified immediately, or to batch results together for a full day or week. You can also choose whether to monitor the entire index, or only specific venues like videos or blog search.&lt;/p&gt;

&lt;p&gt;I use Google Alerts to keep track of my online presence, I want to know what the search results for my name will be. &amp;quot;You never get a second chance to make a first impression&amp;quot; is as true now as it ever was, but now the first impression is often formed via a web search for someone's name.&lt;/p&gt;

&lt;br/&gt;
&lt;center&gt;&lt;img border="0" width="555" height="281" src="http://2.bp.blogspot.com/_WibILqsOlLg/S5EJIJtjMXI/AAAAAAAAAp8/cIZr9ba6C60/s640/googlealerts.png" style="border: solid grey 1px; margin: 0px;" alt="Google Alerts" title="Actually yes, I do have an alert set up to watch for unicorns." /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-771274636664253324?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=fKgQ4rugCOI:ohNsCZ3BN08:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=fKgQ4rugCOI:ohNsCZ3BN08:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=fKgQ4rugCOI:ohNsCZ3BN08:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=fKgQ4rugCOI:ohNsCZ3BN08:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=fKgQ4rugCOI:ohNsCZ3BN08:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=fKgQ4rugCOI:ohNsCZ3BN08:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=fKgQ4rugCOI:ohNsCZ3BN08:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=fKgQ4rugCOI:ohNsCZ3BN08:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/fKgQ4rugCOI" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=771274636664253324" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/771274636664253324?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/771274636664253324?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/03/two-bots-enter-one-bot-leaves.html" title="Two Bots Enter, One Bot Leaves" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_WibILqsOlLg/S5EI9Ve9m4I/AAAAAAAAAp4/qjWV6qgwqSw/s72-c/cylon.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;D0ECQX4_cSp7ImA9WxBUFEg.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-8571740822895813077</id><published>2010-03-01T07:01:00.000-08:00</published><updated>2010-03-01T07:01:00.049-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-01T07:01:00.049-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Brand Control Rage</title><content type="html">&lt;center&gt;&lt;img border="0" width="348" height="103" src="http://4.bp.blogspot.com/_WibILqsOlLg/S4u-No4iphI/AAAAAAAAAow/yi13mhxFkmw/s640/WinPho7Ser.jpg" style="border: 0px; margin: 0px;" alt="Ad for Windows Phone 7 podcast." /&gt;&lt;/center&gt;

&lt;br/&gt;
&lt;p&gt;I wonder if some brand manager at Microsoft is lying awake at night, fuming:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;It's Windows Phone 7 &lt;u&gt;Series&lt;/u&gt;. The &amp;quot;Series&amp;quot; evokes future promise, the outline of an evolutionary path to reassure the possessor that their investment in Micosoft technology will accrue benefits for years to come. Calling it &amp;quot;Windows Phone 7&amp;quot; cheapens it into just another product, flaring oh-so-briefly briefly before it is trodden into the mud by Windows Phone 8. Curse you, Mary-Jo! Curse you!&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.windowsphone7series.com/"&gt;Windows Phone 7 Series&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-8571740822895813077?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=XS-u-fGRmHs:Migfa67Gx7A:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=XS-u-fGRmHs:Migfa67Gx7A:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=XS-u-fGRmHs:Migfa67Gx7A:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=XS-u-fGRmHs:Migfa67Gx7A:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=XS-u-fGRmHs:Migfa67Gx7A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=XS-u-fGRmHs:Migfa67Gx7A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=XS-u-fGRmHs:Migfa67Gx7A:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=XS-u-fGRmHs:Migfa67Gx7A:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/XS-u-fGRmHs" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=8571740822895813077" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/8571740822895813077?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/8571740822895813077?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/03/brand-control-rage.html" title="Brand Control Rage" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_WibILqsOlLg/S4u-No4iphI/AAAAAAAAAow/yi13mhxFkmw/s72-c/WinPho7Ser.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;AkcHSXw5fip7ImA9WxBVGUk.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-1664660491852065190</id><published>2010-02-23T07:01:00.000-08:00</published><updated>2010-02-23T10:00:38.226-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-23T10:00:38.226-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Thatsa Lottabytes</title><content type="html">&lt;p&gt;There is a &lt;a href="http://www.facebook.com/pages/The-Official-Petition-to-Establish-Hella-as-the-SI-Prefix-for-1027/277479937276"&gt;Facebook fan page&lt;/a&gt; to establish &lt;i&gt;hella-&lt;/i&gt; as the official SI prefix
for 10&lt;sup&gt;24&lt;/sup&gt;. This is good, but I don't think it goes far enough. I propose that  &lt;i&gt;lotta&lt;/i&gt; be designated to mean &amp;quot;several orders of magnitude larger than currently achievable.&amp;quot;&lt;/p&gt;

&lt;p&gt;In 2010 &lt;i&gt;lotta&lt;/i&gt; would be defined as 10&lt;sup&gt;18.3&lt;/sup&gt;, as having exabytes of storage seems comfortably out of reach. Each year it would be redefined, marching slowly to infinity (and beyond).&lt;/p&gt;

&lt;img border="0" width="472" height="175" src="http://3.bp.blogspot.com/_WibILqsOlLg/S4PU5brVYhI/AAAAAAAAAos/l2Y60rK-Upk/s640/lottabytes.png" style="border: 0px; margin: 0;" align="right" alt="Graphic depiction of kilo, mega, giga, tera, peta, exa, zeta, yotta, hella, and lotta."  title="SI is just so stifling. We need fuzzy units." /&gt;

&lt;table columns="3" style="padding: 4px; width: auto; border: 1px solid grey; font-size: 14px; font-family: sans-serif; margin-left: 2em; margin-right: 5px; margin-top: 2em; margin-bottom: 1em;"&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;kilo&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;10&lt;sup&gt;3&lt;/sup&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;mega&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;10&lt;sup&gt;6&lt;/sup&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;giga&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;10&lt;sup&gt;9&lt;/sup&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;tera&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;10&lt;sup&gt;12&lt;/sup&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;peta&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;10&lt;sup&gt;15&lt;/sup&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;exa&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;10&lt;sup&gt;18&lt;/sup&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;zetta&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;10&lt;sup&gt;21&lt;/sup&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;yotta&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;10&lt;sup&gt;24&lt;/sup&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;i&gt;hella&lt;/i&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;i&gt;10&lt;sup&gt;27&lt;/sup&gt;&lt;/i&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;a href="http://www.facebook.com/pages/The-Official-Petition-to-Establish-Hella-as-the-SI-Prefix-for-1027/277479937276"&gt;&lt;i&gt;(proposed)&lt;/i&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;i&gt;lotta&lt;/i&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;i&gt;&amp;gt; 10&lt;sup&gt;18&lt;/sup&gt;&lt;/i&gt;&lt;/td&gt;
  &lt;td style="border: 1px solid grey; padding: 3px;"&gt;&lt;i&gt;(my proposal)&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-1664660491852065190?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=v39yaCaYj70:G4DiD43-zAE:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=v39yaCaYj70:G4DiD43-zAE:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=v39yaCaYj70:G4DiD43-zAE:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=v39yaCaYj70:G4DiD43-zAE:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=v39yaCaYj70:G4DiD43-zAE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=v39yaCaYj70:G4DiD43-zAE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=v39yaCaYj70:G4DiD43-zAE:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=v39yaCaYj70:G4DiD43-zAE:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/v39yaCaYj70" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=1664660491852065190" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1664660491852065190?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1664660491852065190?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/02/thatsa-lottabytes.html" title="Thatsa Lottabytes" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_WibILqsOlLg/S4PU5brVYhI/AAAAAAAAAos/l2Y60rK-Upk/s72-c/lottabytes.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;D0UCQX44fCp7ImA9WxBVFU0.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-3014410817212692852</id><published>2010-02-18T07:01:00.000-08:00</published><updated>2010-02-18T07:01:00.034-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-18T07:01:00.034-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Email Contact Virii</title><content type="html">&lt;p&gt;&lt;img border="0" width="142" height="83" src="http://2.bp.blogspot.com/_WibILqsOlLg/S3v9fWhNZVI/AAAAAAAAAoc/UUDCG26He4Y/s320/matrix.jpg" align="right" style="border: 0px; margin-left: 4px;" alt="The Matrix image" title="This is from a screensaver installed on my Mac. Yes, I am _that_ lame." /&gt;We're all familiar with computer viruses: bits of code which attempt to transmit themselves to another system, from which they look for yet more systems to infect. The key point is that the virus must transmit &lt;i&gt;code&lt;/i&gt; to infect another system.&lt;/p&gt;

&lt;p&gt;Very occasionally there are more obscure examples of viral behavior, of data alone unaccompanied by code. Certainly, there &lt;i&gt;is&lt;/i&gt; code involved, but it is the normal code of the system which performs a useful function and is not intended to spread data virally.&lt;/p&gt;

&lt;p&gt;&lt;img border="0" width="112" height="211" src="http://4.bp.blogspot.com/_WibILqsOlLg/S3v9rzgV56I/AAAAAAAAAog/q3qL7aLsv6k/s320/smallworld.png" align="left" style="border: 0px; margin-right: 4px; margin-bottom: 4px;" alt="The contacts viral spread" title="I am reading Here Comes Everybody by Clay Shirky. I see the Small World pattern... everywhere." /&gt;For example: people usually refer to me by the nickname Denny. My personal email address is denny@geekhold.com &lt;span style="font-size: 9px;"&gt;(1)&lt;/span&gt; but my work address is not &amp;quot;denny&amp;quot;. One person had my personal email address. Shortly after I started he sent an email to a few team members. He typed "Denny," and GMail helpfully auto-completed my personal account from his contacts. When another member of the team responded to that email, the address was automatically added to &lt;i&gt;his&lt;/i&gt; contacts. When he later sent an email to another set of coworkers... the Contact virus spread further.&lt;/p&gt;

&lt;p&gt;The trouble with data-driven viral behavior is that there are few tools to stamp it out. With code viruses, a huge ecosystem of tools and malware signatures has been created. There are few tools to deal with an annoying bit of data spreading through the system, just manual exhortations to not respond to the email containing the external address.&lt;/p&gt;

&lt;p&gt;Do people know of other instances of a viral spread of data, unaccompanied by code? There are certainly instances of poor auto-complete behavior, such as a mistyped URL leading to the browser forevermore suggesting the bogus site, but none I can think of which spread  from one person to another. I suspect the root cause is a poor model for how auto-complete is supposed to work: the developer wants it to be completely automatic and not something the user should have to adjust. &lt;/p&gt;

&lt;br clear="left"/&gt;

&lt;center&gt;&lt;hr width="20%"&gt;&lt;/center&gt;

&lt;br/&gt;
&lt;p&gt;&lt;b&gt;(1)&lt;/b&gt;: I long ago gave up keeping my email address off of spam lists. As I've used this address since 1996, I am wholly reliant on good filtering.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-3014410817212692852?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=4UwGGgXXmNM:y4qbme5nB_8:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=4UwGGgXXmNM:y4qbme5nB_8:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=4UwGGgXXmNM:y4qbme5nB_8:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=4UwGGgXXmNM:y4qbme5nB_8:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=4UwGGgXXmNM:y4qbme5nB_8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=4UwGGgXXmNM:y4qbme5nB_8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=4UwGGgXXmNM:y4qbme5nB_8:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=4UwGGgXXmNM:y4qbme5nB_8:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/4UwGGgXXmNM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=3014410817212692852" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/3014410817212692852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/3014410817212692852?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/02/email-contact-virii.html" title="Email Contact Virii" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_WibILqsOlLg/S3v9fWhNZVI/AAAAAAAAAoc/UUDCG26He4Y/s72-c/matrix.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEMCQXw4cCp7ImA9WxBVE04.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-6948905343414782212</id><published>2010-02-16T07:01:00.000-08:00</published><updated>2010-02-16T07:01:00.238-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-16T07:01:00.238-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Resource Leak</title><content type="html">&lt;center&gt;&lt;img border="0" width="512" height="384" src="http://2.bp.blogspot.com/__-p4Q9V0omk/S0IMDMD1SGI/AAAAAAAAABk/NIXO-vNhz6U/s640/resourceleak.jpg" style="border: 0px; margin: 8px 0px 8px 0px;" alt="Copper sewage pipe with corroded hole" title="Oh, crappit." /&gt;&lt;/center&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Resource leak located after extensive debugging. This portion of the system required significant refactoring to resolve the leak.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-6948905343414782212?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=xU8ILti_OVM:V3wNTucC1x8:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=xU8ILti_OVM:V3wNTucC1x8:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=xU8ILti_OVM:V3wNTucC1x8:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=xU8ILti_OVM:V3wNTucC1x8:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=xU8ILti_OVM:V3wNTucC1x8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=xU8ILti_OVM:V3wNTucC1x8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=xU8ILti_OVM:V3wNTucC1x8:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=xU8ILti_OVM:V3wNTucC1x8:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/xU8ILti_OVM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=6948905343414782212" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/6948905343414782212?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/6948905343414782212?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/02/resource-leak.html" title="Resource Leak" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/00823531138589760740</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02976563323965743576" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/__-p4Q9V0omk/S0IMDMD1SGI/AAAAAAAAABk/NIXO-vNhz6U/s72-c/resourceleak.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;AkIAQ347eip7ImA9WxBWGUU.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-979952310768899084</id><published>2010-02-05T07:01:00.000-08:00</published><updated>2010-02-12T07:29:02.002-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-12T07:29:02.002-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><category scheme="http://www.blogger.com/atom/ns#" term="CPU" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="Product Development" /><title>Apple == A, Plus Four More Letters</title><content type="html">&lt;p&gt;What the web needs right now is another blog post about the iPad.&lt;/p&gt;

&lt;p&gt;&lt;img border="0" width="122" height="88" src="http://3.bp.blogspot.com/_WibILqsOlLg/S2wUisbFYmI/AAAAAAAAAnE/IzKWiS-Gc8w/s320/AppleA4.jpg" align="right" style="border: 0px; margin: 4px;" alt="Apple A4 chip" title="Image from Apple web site." /&gt;No, don't run away! This will be different, I promise. We'll focus on Apple's A4, a custom CPU first used in the iPad. It has been widely assumed that A4 uses a licensed &lt;a href="http://www.arm.com/products/CPUs/ARM_Cortex-A8.html"&gt;ARM Cortex A8&lt;/a&gt; core. I have no reason to dispute this assertion, it seems like a fine choice. It has also been asserted that because the same core is used in parts from Samsung, TI, and Qualcomm, Apple should not have bothered making its own chip. Today, Gentle Reader, we'll explore that notion a bit.&lt;/p&gt;

&lt;br/&gt;&lt;hr width="80%"&gt;&lt;br/&gt;

&lt;h4&gt;Apple ASIC Expertise&lt;/h4&gt;
&lt;p&gt;Apple has a long history of ASIC design. Apple produced custom silicon for various Macintosh models since at least the late 1980s, when they designed the audio chips used in the Quadra 700 and 900 (a chip called &amp;quot;Batman&amp;quot;). Later, Apple designed entire chipsets to interface with the PowerPC 60x bus. Apple licensed a gigabit Ethernet MAC design from Sun, and used it plus IDE controller and other peripherals in chipsets for several Powermac models. With the switch to x86, Apple's efforts became much more constrained. The x86 bus interface is difficult to license, and Intel's own chipsets are quite reasonable. So far as I know, x86 Macintoshes no longer use custom Apple ASICs.&lt;/p&gt;

&lt;div style="padding-top: 15px; padding-bottom: 15px; border-width: 1px; border-color: #999999; border-style: solid; background-color: #cccccc; width: 60%; margin: 15px auto 2em auto; text-align: center;"&gt;Custom chip design isn't a radical departure for Apple.&lt;/div&gt;

&lt;p&gt;With that as background, what might Apple have done in the A4 chip? I have absolutely no inside information about the iPad or A4 processor, I'm going to make stuff up because its fun to speculate.&lt;/p&gt;

&lt;br/&gt;&lt;hr width="80%"&gt;&lt;br/&gt;

&lt;h4&gt;Graphics &amp;amp; OpenCL&lt;/h4&gt;
&lt;p&gt;&lt;img border="0" width="300" height="182" src="http://3.bp.blogspot.com/_WibILqsOlLg/S3VyXsHaGXI/AAAAAAAAAn8/oF7crs0A2fY/s320/POWERVRSGX.png" align="right" style="border: 0px; margin: 4px;" alt="PowerVR SGX CPU Overview" title="Image from Imagination Technologies web site." /&gt;Apple holds a &lt;a href="http://arstechnica.com/apple/news/2009/06/apple-ups-ante-in-powervr-maker-imagination-technologies.ars"&gt;nearly 10% stake&lt;/a&gt; in &lt;a href="http://www.imgtec.com/"&gt;Imagination Technologies Group&lt;/a&gt;, which designs the PowerVR graphics accelerator and other IP relating to massively threaded processing. Apple uses their &lt;a href="http://www.macrumors.com/2009/06/25/iphone-3gs-has-more-powerful-powervr-sgx-535-gpu/"&gt;PowerVR SGX 535&lt;/a&gt; in iPhone 3GS, and used various PowerVR graphics in earlier iPhone models. The A4 chip will certainly integrate a graphics core from PowerVR. As with essentially all GPU designs today, the PowerVR makes use of &lt;a href="http://www.imgtec.com/meta/meta-technology.asp"&gt;multiple, specialized CPU cores&lt;/a&gt;. There is relatively little information about its instruction set on the web, &lt;strike&gt;only that it is called META MTX and uses 16 bit RISC-ish instruction words&lt;/strike&gt;. Update: PowerVR SGX does not use the META architecture, it has a distinct &lt;a href="http://www.imgtec.com/powervr/sgx_series5.asp"&gt;architecture&lt;/a&gt; of its own. Additional information can be &lt;a href="http://www.imgtec.com/downloads.asp"&gt;downloaded&lt;/a&gt; after registration.&lt;/p&gt;

&lt;p&gt;Apple has also invested heavily in two relevant technologies: &lt;a href="http://en.wikipedia.org/wiki/OpenCL"&gt;OpenCL&lt;/a&gt; and &lt;a href="http://llvm.org"&gt;LLVM&lt;/a&gt;.
&lt;ul&gt;
 &lt;li&gt;OpenCL allows processing to be distributed across multiple CPUs in the system, even if they have different instruction sets. OpenCL algorithms are written in a language with syntax very similar to C99, and the framework handles the rest.&lt;/li&gt;
 &lt;li&gt;LLVM is a compiler toolkit, one aspect of which is a machine independent instruction set. Source code can be compiled to the LLVM virtual machine, and from there be translated into the equivalent opcodes for the target CPU. The compilation can be done statically before running it, or by a Just-In-Time compiler while interpreting the LLVM bytecodes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;iPhone applications are compiled to ARM instructions, but it is not much of a stretch to imagine support for sections of LLVM bytecodes as well. If the hardware has sufficient GPU power, the bytecode could be translated to the GPU instruction set and offloaded. Devices with less sophisticated GPUs would use the ARM instead. Apple does not allow iPhone apps to include their own virtual machine in this way, but would be free to provide the VM function as part of the OS.&lt;/p&gt;

&lt;p&gt;I suspect this is the most compelling reason for Apple to build its own chip as opposed to buying off the shelf. The rest of the mobile industry is satisfied to offload 3D graphics and video decoding to the GPU. Apple has greater ambitions, and could make use of significantly more GPU pipelines. By controlling the complete platform from CPU to software, Apple can make tradeoffs which are not practical for the rest of the market. For example: a very large GPU plus very fast ARM would generate more heat than can be dissipated in a small form factor like a phone. Apple has the option to dynamically throttle the ARM clock speed in order to open up more thermal envelope for the GPUs, if sufficient OpenCL workload is ready to run. When the GPUs are less busy, the ARM clock speed can be brought back up.&lt;/p&gt;

&lt;br/&gt;&lt;hr width="80%"&gt;&lt;br/&gt;

&lt;h4&gt;Multi Package Modules&lt;/h4&gt;
&lt;p&gt;&lt;img border="0" width="150" height="49" src="http://3.bp.blogspot.com/_WibILqsOlLg/S2wU7HSd1TI/AAAAAAAAAnM/fJd5DDXLoDA/s320/mpm.png" align="right" style="border: 0px; margin: 4px;" alt="Multi Package Module" title="The whole assembly stands on the back of the World Turtle." /&gt;The CPU in the iPhone 3GS is a &lt;a href="http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;partnum=S5PC100"&gt;Samsung S5PC100&lt;/a&gt;. This is a multi package module with CPU, I/O chip, and SDRAM sandwiched tightly together. Multi &lt;i&gt;chip&lt;/i&gt; modules have been around for a long time, where multiple dies wired together in one big package. The amount of testing which can be done on a raw die is rather limited, so MCM yields suffer as one bad die ruins the whole assembly.&lt;/p&gt;

&lt;p&gt;Multi &lt;i&gt;package&lt;/i&gt; modules are relatively new: each chip is in its own package, but use very tight pin spacings and do not have a heat spreader. They are soldered together on a small PCB, which in turn has a Ball Grid Array on the bottom with normal pin spacings. Because each chip is packaged separately a full suite of test vectors can be run before the final assembly is put together, improving the yield considerably and lowering the cost of the final product.&lt;/p&gt;

&lt;p&gt;If we examine the &lt;a href="http://www.phonewreck.com/2009/06/19/iphone-3gs-teardown-and-analysis/"&gt;main board&lt;/a&gt; of an iPhone 3GS, the largest component is not the Samsung processor - it is the Flash memory, an MPM containing a number of flash chips. The Samsung CPU in the iPhone 3GS comes in a close second in size, and is also a multi package module with CPU, I/O chip, and SDRAM.&lt;/p&gt;

&lt;p&gt;With the A4, Apple will probably have one die containing both CPU and I/O. Samsung uses different I/O chips to tailor their offering to many market segments, which is not a goal for Apple. By arranging the pinout carefully, Apple might be able to make an MPM containing CPU, SDRAM, and &lt;i&gt;Flash,&lt;/i&gt; reducing the total board area. Different Flash capacities could be offered by not stuffing portions of the MPM. The iPad itself might not need such an MPM as it is a much larger device, but future iPhones would benefit more.&lt;/p&gt;

&lt;p&gt;To be clear: assembling an MPM is not something you can easily do when buying merchant silicon. The pins on one package have to be arranged so as to be easy to route to the pins on the other packages within the MPM.&lt;/p&gt;

&lt;br/&gt;&lt;hr width="80%"&gt;&lt;br/&gt;

&lt;h4&gt;Wrapping up&lt;/h4&gt;
&lt;p&gt;I'll say it again: I made this all up. I have no information on the specifics of the A4,  just speculation. In the unlikely event that anyone reads this (instead of running away from yet another iPad blog post), don't copy it into Wikipedia as though it were verified information.&lt;/p&gt;

&lt;p&gt;What about future iterations? Its tempting to consider a single chip containing the entire iPhone feature set, including radio and wireless networking. The A4 itself clearly doesn't do this, as GSM support is optional in the iPad. I suspect that even in future chips, Apple won't pull in the baseband radio. The front end portions of that chip are rather sensitive to noise, and generally don't work well when integrated in the corner of a gigantic ASIC. Also integrating the radio functionality would make it that much harder to keep up with advancements in wireless networks.&lt;/p&gt;

&lt;p&gt;Another future possibility is to use this chip in Apple's other small form factor products, like the Airport Base Stations, Time Capsule, and AppleTV. This is certainly possible, but aside from obvious additional peripherals like SATA I'm not sure it adds many requirements to the chip.&lt;/p&gt;

&lt;p&gt;Other articles about A4 you might find interesting:&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://www.nytimes.com/2010/02/02/technology/business-computing/02chip.html"&gt;The New York Times&lt;/a&gt; writes about the history of the A4 design team.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://blog.louisgray.com/2010/02/apples-growing-chip-design-team-giant.html"&gt;Louis Gray&lt;/a&gt; writes about Apple's heavy recruiting push to staff up their ASIC team.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Apple_A4"&gt;Wikipedia&lt;/a&gt; already has an article, which will improve over time as more details emerge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;P.S.: While we're at it, the title of this post is a guess about the origins of the &amp;quot;A4&amp;quot; nomenclature: &amp;quot;Apple&amp;quot; is a capital A followed by four more letters.&lt;/p&gt;

&lt;br/&gt;&lt;hr width="80%"&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-979952310768899084?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0nMOG2G-OUo:NeN40Q0fSQs:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0nMOG2G-OUo:NeN40Q0fSQs:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0nMOG2G-OUo:NeN40Q0fSQs:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0nMOG2G-OUo:NeN40Q0fSQs:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0nMOG2G-OUo:NeN40Q0fSQs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0nMOG2G-OUo:NeN40Q0fSQs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0nMOG2G-OUo:NeN40Q0fSQs:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0nMOG2G-OUo:NeN40Q0fSQs:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/0nMOG2G-OUo" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=979952310768899084" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/979952310768899084?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/979952310768899084?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/02/apple-plus-four-more-letters.html" title="Apple == A, Plus Four More Letters" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_WibILqsOlLg/S2wUisbFYmI/AAAAAAAAAnE/IzKWiS-Gc8w/s72-c/AppleA4.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CUcMQHg7eSp7ImA9WxBWEU8.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-2668552164833831473</id><published>2010-02-02T07:01:00.000-08:00</published><updated>2010-02-02T07:04:41.601-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-02T07:04:41.601-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Odd Calendar Behavior</title><content type="html">&lt;center&gt;&lt;img border="0" width="900" height="74" src="http://1.bp.blogspot.com/_WibILqsOlLg/S2ggDY41UPI/AAAAAAAAAnA/b3b1fwu9e6c/s1600/groundhogday.jpg" style="border: 0px; margin: 8px 0px 8px 0px;" alt="Google Calendar with repeating Groundhog Day"  title="I have seen the future, and it is just like the present only longer." /&gt;&lt;/center&gt;

&lt;p&gt;I wonder what that means...&lt;/p&gt;

&lt;br/&gt;&amp;nbsp;&lt;br/&gt;&amp;nbsp;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-2668552164833831473?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0B0tLzu6fbM:sHyJg0_v9A4:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0B0tLzu6fbM:sHyJg0_v9A4:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0B0tLzu6fbM:sHyJg0_v9A4:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0B0tLzu6fbM:sHyJg0_v9A4:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0B0tLzu6fbM:sHyJg0_v9A4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0B0tLzu6fbM:sHyJg0_v9A4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=0B0tLzu6fbM:sHyJg0_v9A4:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=0B0tLzu6fbM:sHyJg0_v9A4:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/0B0tLzu6fbM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=2668552164833831473" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/2668552164833831473?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/2668552164833831473?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/02/odd-calendar-behavior.html" title="Odd Calendar Behavior" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_WibILqsOlLg/S2ggDY41UPI/AAAAAAAAAnA/b3b1fwu9e6c/s72-c/groundhogday.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DEMCQXs4fyp7ImA9WxBWEE4.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-730606310242078056</id><published>2010-02-01T07:01:00.000-08:00</published><updated>2010-02-01T07:01:00.537-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-01T07:01:00.537-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Fuzzy Dice</title><content type="html">&lt;center&gt;&lt;img border="0" width="488" height="651" src="http://1.bp.blogspot.com/_WibILqsOlLg/SzpcZ6y_CiI/AAAAAAAAAmI/zQ3ygiELVJ8/s1024/fuzzydice.jpg" style="border: 0px; margin: 8px 0px 8px 0px;" alt="Electric vehicle with fuzzy dice"  title="I have seen the future, and it is just like the present only longer." /&gt;&lt;/center&gt;

&lt;p&gt;Even electric vehicles can be made cooler with a simple application of fuzzy dice.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-730606310242078056?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=jdvdCTOyy80:wqWiiBSJiQ4:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=jdvdCTOyy80:wqWiiBSJiQ4:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=jdvdCTOyy80:wqWiiBSJiQ4:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=jdvdCTOyy80:wqWiiBSJiQ4:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=jdvdCTOyy80:wqWiiBSJiQ4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=jdvdCTOyy80:wqWiiBSJiQ4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=jdvdCTOyy80:wqWiiBSJiQ4:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=jdvdCTOyy80:wqWiiBSJiQ4:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/jdvdCTOyy80" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=730606310242078056" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/730606310242078056?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/730606310242078056?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/02/fuzzy-dice.html" title="Fuzzy Dice" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_WibILqsOlLg/SzpcZ6y_CiI/AAAAAAAAAmI/zQ3ygiELVJ8/s72-c/fuzzydice.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DkAERnc7fip7ImA9WxBXFk0.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-5642310590869859982</id><published>2010-01-27T07:01:00.000-08:00</published><updated>2010-01-27T07:05:07.906-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-27T07:05:07.906-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><title>On the Ancestry of Consumer Electronics</title><content type="html">&lt;p&gt;Writing about the &lt;a href="http://codingrelic.geekhold.com/2010/01/big-day-for-mobile-technology.html"&gt;Newtpocalypse&lt;/a&gt; the other day inspired me to get my MessagePad 120 working again. In the comments of that post, &lt;a href="http://splorp.com/"&gt;Grant Hutchinson&lt;/a&gt; pointed out that my MP120 would not be affected and should still work. Indeed, it does! The backup lithium battery still had a little charge left, so my files are still present. The Newton pre-dates Flash memory, and stores all files in battery backed SRAM. The battery faithfully kept the SRAM powered for the last 13 years sitting in my garage, patiently waiting for me to use it again.&lt;/p&gt;

&lt;br/&gt;
&lt;center&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/H0Eg-qd4ejM&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/H0Eg-qd4ejM&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;
&lt;br/&gt;

&lt;p&gt;This morning Kara Swisher &lt;a href="http://kara.allthingsd.com/20100127/before-the-tablet-apples-steve-jobs-in-2004-talks-about-not-doing-another-newton-video/"&gt;republished a Steve Jobs interview&lt;/a&gt; from 2004, talking about the products which Apple chooses to pursue and not to pursue. Its an interesting perspective on the eve of Apple's media event today. As she notes, in some respects Apple's new device will be &amp;quot;the Newton’s great-grandson.&amp;quot;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-5642310590869859982?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=ys5ktGVRDEg:bLWx0G4UhdM:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=ys5ktGVRDEg:bLWx0G4UhdM:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=ys5ktGVRDEg:bLWx0G4UhdM:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=ys5ktGVRDEg:bLWx0G4UhdM:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=ys5ktGVRDEg:bLWx0G4UhdM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=ys5ktGVRDEg:bLWx0G4UhdM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=ys5ktGVRDEg:bLWx0G4UhdM:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=ys5ktGVRDEg:bLWx0G4UhdM:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/ys5ktGVRDEg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=5642310590869859982" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/5642310590869859982?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/5642310590869859982?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/on-ancestry-of-consumer-electronics.html" title="On the Ancestry of Consumer Electronics" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;C0ECQX88eSp7ImA9WxBXFE4.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-7531546686348755124</id><published>2010-01-25T07:01:00.000-08:00</published><updated>2010-01-25T07:01:00.171-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-25T07:01:00.171-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Important Safety Announcement About Hot Air</title><content type="html">&lt;p&gt;We interrupt these random musings to bring you an important safety announcement:&lt;/p&gt;
&lt;br/&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
 &lt;div style="width: 450px; margin: 0px 1em 0px 2em;"&gt; &lt;img border="0" width="450" height="335" src="http://2.bp.blogspot.com/__-p4Q9V0omk/S1hTDc6lKNI/AAAAAAAAAB0/1gILTvKaZ40/s640/macbookmelted.jpg" style="border: 0px;" alt="MacBook with 9 keys melted."  title="My laptop has been to Hell and back." /&gt;&lt;br /&gt;
 &lt;p style="font-size: 16px; font-weight: bold; text-align: center;"&gt;When a very small person spills juice in your laptop, a hairdryer is not the right tool for the job.&lt;/p&gt; &lt;/div&gt;&lt;/center&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br/&gt;
&lt;br /&gt;
&lt;p&gt;It still won't power on, and now nine of the key caps are mangled. I think I've simply disfigured its corpse.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-7531546686348755124?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=Q2oCPhXT-Ck:podakSYoauA:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=Q2oCPhXT-Ck:podakSYoauA:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=Q2oCPhXT-Ck:podakSYoauA:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=Q2oCPhXT-Ck:podakSYoauA:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=Q2oCPhXT-Ck:podakSYoauA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=Q2oCPhXT-Ck:podakSYoauA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=Q2oCPhXT-Ck:podakSYoauA:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=Q2oCPhXT-Ck:podakSYoauA:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/Q2oCPhXT-Ck" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=7531546686348755124" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/7531546686348755124?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/7531546686348755124?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/important-safety-announcement-about-hot.html" title="Important Safety Announcement About Hot Air" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/00823531138589760740</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02976563323965743576" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/__-p4Q9V0omk/S1hTDc6lKNI/AAAAAAAAAB0/1gILTvKaZ40/s72-c/macbookmelted.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEMCQXo8fyp7ImA9WxBXEUo.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-4001993992695825479</id><published>2010-01-22T07:01:00.000-08:00</published><updated>2010-01-22T07:01:00.477-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-22T07:01:00.477-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Administrivia" /><title>Sun Microsystems, 1982-2010</title><content type="html">&lt;p&gt;I was a summer intern at &lt;a href="http://www.sun.com/"&gt;Sun Microsystems&lt;/a&gt; in 1991, working on Verilog test cases for a 155 Mbps &lt;a href="http://en.wikipedia.org/wiki/Asynchronous_Transfer_Mode"&gt;ATM&lt;/a&gt; adaptor. I still have the T-Shirt, shown here. Only after we had the shirts made did the intern coordinator really look at it and notice the Sun logo was orange instead of purple, a bit of a gaffe. On the back are shown the companies who we, the interns, perceived as competitors. I've no idea why Apple is there while SGI is not, chalk it up to the exuberant misinformation of youth.&lt;/p&gt;

&lt;center&gt;&lt;img border="0" width="704" height="361" src="http://4.bp.blogspot.com/_WibILqsOlLg/S1mnjsj79KI/AAAAAAAAAmY/NCW1i0v5svY/s1600/Internshirt.jpg" style="border: 0px;" alt="Sun Microsystems intern T-shirt 1991."  title="I do not know why the Sun building has big plate glass windows on the ground floor for shops." /&gt;&lt;/center&gt;

&lt;p&gt;I returned to Sun as an ASIC designer (eventually transitioning into software) and worked there from 1992-2000. The first few years in that span were rough for Sun: the market was just beginning its transition from Unix-based CAD and graphical workstations to Windows NT on x86. Sun managed the transition pretty well, moving the bulk of its business into large SMP servers which the Intel boxes of the time did not scale to. Then came the dotCom boom, which were heady days for Sun.&lt;/p&gt;

&lt;p&gt;Sun had a tradition of elaborate April Fools jokes. One year a complete hole of miniature golf was constructed in Scott McNealy's office. Another year a platform was built submerged 1&amp;quot; under the surface of the campus lake, with Andy Bechtolsheim's Ferrari parked upon it. I have the T-Shirt from the 1993 joke: the SHARCStation with superSHARC processor. A complete workstation was submerged at the bottom of a pool, with a scuba diver operating it. I don't remember whether it worked while underwater, but given the culture of Sun at the time I suspect they had come up with a way to waterproof it. Amusingly, I just searched for superSHARC: its now the name of a real processor, a DSP from Analog Devices.&lt;/p&gt;

&lt;center&gt;&lt;img border="0" width="561" height="447" src="http://4.bp.blogspot.com/_WibILqsOlLg/S1mnwX7WcWI/AAAAAAAAAmc/hhupq6cdeaY/s1600/SuperSHARC.jpg" style="border: 0px;" alt="Sun Microsystems April Fools T-Shirt SuperSHARC 1993."  title="I believe that is Andy Bechtolsheims Ferrari." /&gt;&lt;/center&gt;

&lt;p&gt;I left Sun 10 years ago... but I've missed it. In the mid 1990s it was a heady place, a company at the top of its game with extensive resources to push the industry along. Its corporate culture valued engineers highly, which showed up in lots of little ways but one big one: enclosed offices. Sun would use cubicles if necessary, but the corporate preference was an office with a door. MTS level positions would be doubled up in an office, Staff Engineers and above were allocated a single office.&lt;/p&gt;

&lt;p&gt;After the dotCom bust, Sun's fortunes changed considerably. The way is &lt;a href="http://europa.eu/rapid/pressReleasesAction.do?reference=IP/10/40"&gt;now clear&lt;/a&gt; for Sun to be purchased by Oracle. Rest in Peace, Sun. These last few years have not been kind.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-4001993992695825479?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=f_MJ69gNLBs:zXFm_BkMI5Y:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=f_MJ69gNLBs:zXFm_BkMI5Y:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=f_MJ69gNLBs:zXFm_BkMI5Y:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=f_MJ69gNLBs:zXFm_BkMI5Y:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=f_MJ69gNLBs:zXFm_BkMI5Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=f_MJ69gNLBs:zXFm_BkMI5Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=f_MJ69gNLBs:zXFm_BkMI5Y:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=f_MJ69gNLBs:zXFm_BkMI5Y:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/f_MJ69gNLBs" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=4001993992695825479" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/4001993992695825479?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/4001993992695825479?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/sun-microsystems-1982-2010.html" title="Sun Microsystems, 1982-2010" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_WibILqsOlLg/S1mnjsj79KI/AAAAAAAAAmY/NCW1i0v5svY/s72-c/Internshirt.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;A0MHQXs4fip7ImA9WxBXEEU.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-555911886175210204</id><published>2010-01-21T07:01:00.000-08:00</published><updated>2010-01-21T07:57:10.536-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-21T07:57:10.536-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Colloquialisms in Code</title><content type="html">&lt;script language="JavaScript"&gt;
&lt;!--
function hidetext(id) {
 if (document.getElementById) {
  document.getElementById(id).style.color = 'white';
 } else {
  if (document.layers) {
   document.id.color = 'white';
  } else {
   document.all.id.style.color = 'white';
  }
 }
}

function showtext(id) {
 if (document.getElementById) {
  document.getElementById(id).style.color = 'grey';
 } else {
  if (document.layers) {
   document.id.color = 'grey';
  } else {
   document.all.id.style.color = 'grey';
  }
 }
}
--&gt;
&lt;/script&gt;

&lt;p&gt;Both of my parents are from Tennessee. Per capita, Tennessee has the highest density of  colloquialisms than any other place in the western hemisphere. So ... lets code them up. You can mouse over each item to show the original phrase it purports to represent. Note: the Javascript rollovers don't work in the RSS feed, only on the web page. So far as I know, its all akin to voodoo.&lt;/p&gt;

&lt;br/&gt;

&lt;div style="font-family: monospace; line-height: 1.4em;"&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col1')" onMouseOut="hidetext('col1')"&gt;
justification = my_ass.pull();
&lt;/pre&gt;
&lt;div id="col1" style="color: white; font-family: sans-serif;"&gt;
 I pulled the justification out of my ass.
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col2')" onMouseOut="hidetext('col2')"&gt;
Drawer = Set(["knife1", "knife2"])
if not "sharpest" in Drawer:
&lt;/pre&gt;
&lt;div id="col2" style="color: white; font-family: sans-serif;"&gt;
 Not the sharpest knife in the drawer.
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col3')" onMouseOut="hidetext('col3')"&gt;
if not (hand[left].find(his_ass) ||
        hand[right].find(his_ass) ||
        flashlight.find(his_ass)):
&lt;/pre&gt;
&lt;div id="col3" style="color: white; font-family: sans-serif;"&gt;
 He couldn't find his ass with both hands and a flashlight
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col4')" onMouseOut="hidetext('col4')"&gt;
ASSERT(dead.val() &gt; doornail.val());
&lt;/pre&gt;
&lt;div id="col4" style="color: white; font-family: sans-serif;"&gt;
 Dead'er than a doornail.
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col5')" onMouseOut="hidetext('col5')"&gt;
if (them.fitness == fiddle.fitness):
&lt;/pre&gt;
&lt;div id="col5" style="color: white; font-family: sans-serif;"&gt;
 Fit as a fiddle.
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col6')" onMouseOut="hidetext('col6')"&gt;
CHECK(!(water[FISH_CONSTANT]));
&lt;/pre&gt;
&lt;div id="col6" style="color: white; font-family: sans-serif;"&gt;
 Like a fish out of water.
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col7')" onMouseOut="hidetext('col7')"&gt;
&lt;b&gt;error: prototype for 'Silk_Purse(Cows_Ear)' does not match any in class 'Silk_Purse'&lt;/b&gt;
&lt;/pre&gt;
&lt;div id="col7" style="color: white; font-family: sans-serif;"&gt;
 You can't make a silk purse out of a sow's ear.
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col8')" onMouseOut="hidetext('col8')"&gt;
interface Wagon {
  public:
    void Wheels();
}
class Grandma implements Wagon {
&lt;/pre&gt;
&lt;div id="col8" style="color: white; font-family: sans-serif;"&gt;
 If Grandma had wheels, she'd be a wagon.
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col9')" onMouseOut="hidetext('col9')"&gt;
Bricks[LOAD - 2];
&lt;/pre&gt;
&lt;div id="col9" style="color: white; font-family: sans-serif;"&gt;
 Two bricks shy of a load.
&lt;/div&gt;

&lt;p&gt;--------&lt;/p&gt;&lt;br/&gt;

&lt;pre onMouseOver="showtext('col10')" onMouseOut="hidetext('col10')"&gt;
class Shadow {
 public:
  Shadow(Shadow); // copy constructor
}
class Person {
 public:
  Shadow Stand();
}

Person Skinny;
Shadow S(2 * Skinny.Stand())
&lt;/pre&gt;
&lt;div id="col10" style="color: white; font-family: sans-serif;"&gt;
 So skinny they have to stand up twice to make a shadow.
&lt;/div&gt;

&lt;br/&gt;

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-555911886175210204?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=n0FiyNqITnk:V-gSmX5GbKs:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=n0FiyNqITnk:V-gSmX5GbKs:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=n0FiyNqITnk:V-gSmX5GbKs:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=n0FiyNqITnk:V-gSmX5GbKs:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=n0FiyNqITnk:V-gSmX5GbKs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=n0FiyNqITnk:V-gSmX5GbKs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=n0FiyNqITnk:V-gSmX5GbKs:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=n0FiyNqITnk:V-gSmX5GbKs:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/n0FiyNqITnk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=555911886175210204" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/555911886175210204?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/555911886175210204?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/colloquialisms-in-code.html" title="Colloquialisms in Code" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/00823531138589760740</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02976563323965743576" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CUUCQXo-fSp7ImA9WxBQGUw.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-7889981969761145446</id><published>2010-01-19T07:01:00.000-08:00</published><updated>2010-01-19T07:01:00.455-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-19T07:01:00.455-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Recollecting The Calculus</title><content type="html">&lt;p&gt;Allow me to summarize my recollections of The Calculus:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One must always refer to it as &amp;quot;The Calculus,&amp;quot; never just &amp;quot;calculus.&amp;quot;
&lt;li&gt;The first derivative is the instantaneous rate of change, i.e. the velocity.&lt;/li&gt;
&lt;li&gt;The second derivative is the instantaneous rate of change in the velocity, i.e. accelleration. Etc, etc.&lt;/li&gt;
&lt;li&gt;Laplace transforms are a much easier way to compute derivatives.&lt;/li&gt;
&lt;li&gt;I have no recollection of how to use the Laplace transform.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thats pretty much it, in a nutshell. I suspect that had the modern web existed back then, my calculus classes would have been different but my retention of the material decades later would be about the same.&lt;/p&gt;

&lt;center&gt;&lt;img border="0" width="593" height="568" src="http://2.bp.blogspot.com/_WibILqsOlLg/SxfPfQhHA0I/AAAAAAAAAk8/j7GC2LoTD84/s640/derivative.png" style="border: 1px; border-style: solid; border-color: #555;  margin: 0px 0px 0px 0px;" alt="Wolfram Alpha computing a derivative"  title="I, for one, welcome our new machine overlords." /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-7889981969761145446?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=ksY5Kz6K4yU:TOkEfGH7D4Y:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=ksY5Kz6K4yU:TOkEfGH7D4Y:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=ksY5Kz6K4yU:TOkEfGH7D4Y:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=ksY5Kz6K4yU:TOkEfGH7D4Y:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=ksY5Kz6K4yU:TOkEfGH7D4Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=ksY5Kz6K4yU:TOkEfGH7D4Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=ksY5Kz6K4yU:TOkEfGH7D4Y:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=ksY5Kz6K4yU:TOkEfGH7D4Y:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/ksY5Kz6K4yU" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=7889981969761145446" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/7889981969761145446?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/7889981969761145446?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/recollecting-calculus.html" title="Recollecting The Calculus" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_WibILqsOlLg/SxfPfQhHA0I/AAAAAAAAAk8/j7GC2LoTD84/s72-c/derivative.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DUYEQHg_cCp7ImA9WxBQFUQ.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-1420222800485893897</id><published>2010-01-15T15:01:00.000-08:00</published><updated>2010-01-15T15:11:41.648-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-15T15:11:41.648-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><category scheme="http://www.blogger.com/atom/ns#" term="CPU" /><title>Intel Acquiring FPGA Vendor?</title><content type="html">&lt;p&gt;&lt;a href="http://www.eetimes.com/news/latest/showArticle.jhtml?articleID=222300806"&gt;EE Times reports&lt;/a&gt; on a JP Morgan Analyst prediction that Intel will acquire an FPGA vendor. The purported reason: to expand its competitiveness in embedded systems and system-on-chip. The two obvious market leaders in that category are &lt;a href="http://www.altera.com/"&gt;Altera&lt;/a&gt; and &lt;a href="http://www.xilinx.com/"&gt;Xilinx&lt;/a&gt;, though there are several smaller vendors like &lt;a href="http://www.actel.com/"&gt;Actel&lt;/a&gt; and &lt;a href="http://www.latticesemi.com/"&gt;Lattice&lt;/a&gt; as well. &lt;/p&gt;

&lt;img border="0" width="250" height="152" src="http://4.bp.blogspot.com/_WibILqsOlLg/S1D1SQoL4vI/AAAAAAAAAmU/iKh4O6Z2458/s320/x86_FPGAs.jpg" align="right" style="border: 0px; margin: 8px 0px 8px 0px;" alt="Fake Intel x86 with FPGAs" title="Not a real x86 die. I photoshopped it. Really." /&gt;
&lt;p&gt;The SoC angle is interesting, in terms of the disruptive change it might allow. Freescale carries a huge variety of part numbers with various combinations of PowerPC core plus networking, USB, CAN-BUS, encryption, etc. Some of the functionality is implemented via an independant communications processor (a 68k descendant) alongside the PowerPC, to try to make each chip more flexible and able to serve different markets. Nonetheless, its still a very large collection of chips. Intel could be aiming for just a few different parts, with embedded FPGA blocks of various sizes and I/O pinouts. Need CAN-BUS? Buy a part with the right type of pins bonded out, with a license for soft logic IP to load into it. More sophisticated customers could load their own design logic into the FPGA blocks.&lt;/p&gt;

&lt;p&gt;At one time Xilinx offered parts with hard logic PowerPC cores, but the CPU performance was modest and did not remain competitive over time. Xilinx and Altera both now emphasize soft logic CPU cores instead. These certainly work... but implementing a CPU in FPGA gates is an awfully expensive way to get your software to run. If Intel were to enter this space it would come from the opposite direction: a modern CPU core paired with a modest amount of FPGA logic.&lt;/p&gt;

&lt;p&gt;EETimes published a subsequent &lt;a href="http://www.eetimes.com/showArticle.jhtml?articleID=222300984"&gt;rebuttal&lt;/a&gt; of the acquisition rumor, throwing around big numbers about the premium to be paid for Altera or Xilinx. The numbers make my head hurt, but its worth a read if you're interested in the topic.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-1420222800485893897?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=VXEqO5DvA6U:RR4bNUSCutE:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=VXEqO5DvA6U:RR4bNUSCutE:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=VXEqO5DvA6U:RR4bNUSCutE:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=VXEqO5DvA6U:RR4bNUSCutE:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=VXEqO5DvA6U:RR4bNUSCutE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=VXEqO5DvA6U:RR4bNUSCutE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=VXEqO5DvA6U:RR4bNUSCutE:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=VXEqO5DvA6U:RR4bNUSCutE:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/VXEqO5DvA6U" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=1420222800485893897" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1420222800485893897?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1420222800485893897?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/intel-acquiring-fpga-vendor.html" title="Intel Acquiring FPGA Vendor?" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_WibILqsOlLg/S1D1SQoL4vI/AAAAAAAAAmU/iKh4O6Z2458/s72-c/x86_FPGAs.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEcCQX4zfip7ImA9WxBQEk8.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-1718772931043535061</id><published>2010-01-11T07:01:00.000-08:00</published><updated>2010-01-11T07:01:00.086-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-11T07:01:00.086-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Long Hidden Easter Eggs</title><content type="html">&lt;p&gt;As we have a 4 year old daughter, computer games have become part of the background noise in our household. One of the popular games at the moment is &lt;a target="_blank" title="This is my Amazon affiliate link" href="http://www.amazon.com/PAJAMA-SAM-2-THUNDER-LIGHTING/dp/B0002BQQYQ?ie=UTF8&amp;tag=codin-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969"&gt;Pajama Sam 2&lt;/a&gt;. It was published in 1998, and we'll see in a moment why that is relevant.&lt;/p&gt;

&lt;center&gt;&lt;img border="0" width="480" height="337" src="http://1.bp.blogspot.com/_WibILqsOlLg/Sw0pH65HmAI/AAAAAAAAAkE/rShbgzmA2sI/s640/boardroom.jpg" style="border: 0px; margin: 8px 0px 8px 0px;" alt="Pajama Sam Boardroom scene"  title="Sam needs to retrieve the executive washroom key in the foreground, so of course he must join the Board of Directors... So thats what I've been doing wrong..." /&gt;&lt;/center&gt;

&lt;p&gt;One scene in the game involves the Chairman of the Board brainstorming who should fill the empty board seat with the other board members. As it is a kids game the Chairman is an overstuffed seat, and the board members are anthropomorphic lumber. Of course. The dialog is complete filler, chosen at random from a small set of snippets:&lt;/p&gt;

&lt;table style="padding: 4px; border-collapse: collapse;" columns="2"&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Board Member:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;quot;Did I suggest Bernie from Research?&amp;quot;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Chairman:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;quot;Yes.&amp;quot;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;&lt;b&gt;Board Member:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;quot;Did I already mention Bill, the Security guy?&amp;quot;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Chairman:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;quot;Yes.&amp;quot;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;&lt;b&gt;Board Member:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;quot;Did somebody suggest the supply clerk?&amp;quot;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Chairman:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;quot;Yes.&amp;quot;&lt;/td&gt;&lt;/tr&gt;

&lt;!--
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Board Member:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;quot;When can we talk about getting something for the rest of us to sit on?&amp;quot;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Chairman:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;quot;In due time, Splinter. In due time.&amp;quot;&lt;/td&gt;&lt;/tr&gt;
--&gt;
&lt;/table&gt;

&lt;br/&gt;
&lt;p&gt;There is one more snippet, weighted to be played with very low probability. I only happened to hear it once, when the game was left running for an hour. The developers had a little joke.&lt;/p&gt;
&lt;br/&gt;

&lt;table style="padding: 4px; border-collapse: collapse;" columns="2"&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Board Member:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;"Maybe we could get Gil Amelio to be on the board."&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Chairman:&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;"I'd prefer an internal candidate."&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Gil_Amelio"&gt;Gil Amelio&lt;/a&gt; was the CEO of Apple at the time. Pajama Sam ran on both Windows and Macintosh, which was rather unusual for 1998. That was the deepest part of the &amp;quot;beleaguered Apple&amp;quot;  period, where the death and dismemberment of the company was predicted daily.&lt;/p&gt;


&lt;p&gt;This is funny for the parents, of course, because a corporate Board is &lt;span style="color: #222"&gt;&lt;i&gt;supposed&lt;/i&gt; to&lt;/span&gt; &lt;span style="color: #444"&gt;consist mainly&lt;/span&gt; &lt;span style="color: #666"&gt;of outside&lt;/span&gt; &lt;span style="color: #777"&gt;directors&lt;/span&gt; &lt;span style="color: #888"&gt;to prevent&lt;/span&gt; &lt;span style="color: #999"&gt;excessive&lt;/span&gt; &lt;span style="color: #aaa"&gt;inward&lt;/span&gt; &lt;span style="color: #bbb"&gt;focus and&lt;/span&gt; &lt;span style="color: #ccc"&gt;make the&lt;/span&gt; &lt;span style="color: #ddd"&gt;company more&lt;/span&gt; &lt;span style="color: #bbb"&gt;Oh, nevermind.&lt;/span&gt;&lt;/p&gt;


&lt;p style="color: #999;"&gt;(*) Amazon affiliate link&lt;img src="http://www.assoc-amazon.com/e/ir?t=codin-20&amp;l=btl&amp;camp=213689&amp;creative=392969&amp;o=1&amp;a=B0002BQQYQ" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-1718772931043535061?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=WcohNLH6cyc:dJXODs7k9MI:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=WcohNLH6cyc:dJXODs7k9MI:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=WcohNLH6cyc:dJXODs7k9MI:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=WcohNLH6cyc:dJXODs7k9MI:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=WcohNLH6cyc:dJXODs7k9MI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=WcohNLH6cyc:dJXODs7k9MI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=WcohNLH6cyc:dJXODs7k9MI:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=WcohNLH6cyc:dJXODs7k9MI:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/WcohNLH6cyc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=1718772931043535061" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1718772931043535061?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1718772931043535061?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/long-hidden-easter-eggs.html" title="Long Hidden Easter Eggs" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_WibILqsOlLg/Sw0pH65HmAI/AAAAAAAAAkE/rShbgzmA2sI/s72-c/boardroom.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CU8BSX4yeSp7ImA9WxBRF0Q.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-2642980901490067800</id><published>2010-01-06T08:01:00.000-08:00</published><updated>2010-01-06T08:04:18.091-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-06T08:04:18.091-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Y2.01K</title><content type="html">&lt;img border="0" width="179" height="243" src="http://4.bp.blogspot.com/_WibILqsOlLg/S0S0BvzzsiI/AAAAAAAAAmQ/NQ0o-kfrZC0/s320/y2kbug.jpg" align="right" style="border: 0px; margin: 8px 0px 8px 0px;" alt="Crash the Y2K bug" title="Get it? A Y2K bug?" /&gt;

&lt;p&gt;Y2K was a big deal. A huge amount of money was spent updating older software which stored dates using only two digits. A common solution at the time was to treat dates of 00-09 as post-Y2K, and 10-99 as pre-Y2K. Effectively this only delayed the problem for ten years - our ten years ran out a few days ago. Some examples of failures experienced since Jan 1, 2010:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.linuxtoday.com/news_story.php3?ltsn=2010-01-04-026-35-NW-SW"&gt;SpamAssassin&lt;/a&gt; rejects mail with a 20XX date.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/"&gt;Symantec Endpoint Protection Manager&lt;/a&gt; rejects all updates dated after Dec 31, 2009. As a workaround before a fix is ready, they are releasing updates with a 2009 date.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.theregister.co.uk/2010/01/06/year_2010_payment_card_bug/"&gt;30 million German debit cards&lt;/a&gt; stopped working on January 1.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.basissap.com/2010/01/sap-spool-issue-affects-all-releases/"&gt;SAP Spool queue entries&lt;/a&gt; are not automatically cleaned up if they expire after 12/31/2009, eventually filling up the disk.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.theregister.co.uk/2010/01/05/windows_mobe_bug/"&gt;Some Windows Mobile handsets&lt;/a&gt; and &lt;a href="http://www.theregister.co.uk/2010/01/04/bank_queensland/"&gt;various Point-of-Sale&lt;/a&gt; terminals insist that it is actually 2016. This is an odd symptom, and may not be related to a Y2K fix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A huge amount of money and effort was expended in the 1990s to upgrade systems for Y2K. When Jan 1 rolled around and civilization did not end, there was much criticism that the whole thing had been hyped by vendors eager to sell new gear. Quite likely we overspent... but I believe the consequences of underspending would have been more expensive to clean up afterwards.&lt;/p&gt;

&lt;p&gt;Fortunately, it appears that magic pixie dust is available to fix all Y2.01K problems, according to a press release from &lt;a href="http://www.prlog.org/10467712-bogustech-protects-customers-from-y201k-outages.html"&gt;BogusTech&lt;/a&gt;. Obviously a spoof, its very funny and well worth reading.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-2642980901490067800?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=geMrm5SVA5E:N9Ja_fBFzfE:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=geMrm5SVA5E:N9Ja_fBFzfE:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=geMrm5SVA5E:N9Ja_fBFzfE:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=geMrm5SVA5E:N9Ja_fBFzfE:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=geMrm5SVA5E:N9Ja_fBFzfE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=geMrm5SVA5E:N9Ja_fBFzfE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=geMrm5SVA5E:N9Ja_fBFzfE:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=geMrm5SVA5E:N9Ja_fBFzfE:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/geMrm5SVA5E" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=2642980901490067800" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/2642980901490067800?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/2642980901490067800?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/y201k.html" title="Y2.01K" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_WibILqsOlLg/S0S0BvzzsiI/AAAAAAAAAmQ/NQ0o-kfrZC0/s72-c/y2kbug.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CkYHQ3w5eyp7ImA9WxBRF00.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-8868046208350927180</id><published>2010-01-05T06:02:00.000-08:00</published><updated>2010-01-05T06:02:12.223-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-05T06:02:12.223-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><title>A Big Day for Mobile Technology</title><content type="html">&lt;img border="0" width="155" height="256" src="http://2.bp.blogspot.com/_WibILqsOlLg/S0NEfnwvlAI/AAAAAAAAAmM/TWMTc-ZyqJU/s320/NewtonMP120.jpg" align="right" style="border: 0px; margin: 8px 0px 8px 0px;" alt="Newton MessagePad 120" title="Guess what I used to take this picture..." /&gt;
&lt;p&gt;Today, January 5, 2010, will be a big day in the history of mobile technology. A huge day. Any tech news site worthy of your attention should devote many resources to the events of today.&lt;/p&gt;

&lt;p style="padding: 1em 5em 1em 5em;"&gt;I am, of course, referring to the impending &lt;a style="color: red; font-weight: bold;" href="http://newtonpoetry.com/2009/12/28/newtpocalypse-the-final-countdown/"&gt;Newtpocalypse&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;The &lt;a href="http://en.wikipedia.org/wiki/Newton_(platform)"&gt;Apple Newton&lt;/a&gt; was a groundbreaking device. The picture accompanying this post is &lt;i&gt;my&lt;/i&gt; much-beloved Newton MP120.&lt;/p&gt;

&lt;p&gt;NewtonScript tracks time intervals using a &lt;a href="http://www.drissman.com/avi/newton/Fix2010/readme.html"&gt;30 bit signed integer&lt;/a&gt;, with an epoch of 1993. 2&lt;sup&gt;29&lt;/sup&gt; bits from 1993 is January 5, 2010, at 6:48:31 pm. &lt;u&gt;Tonight&lt;/u&gt;. When the NetwonScript time overflows into bit 30 it becomes a negative number, and Bad Things Happen. &lt;a href="http://40hz.org/Pages/Newton%20Year%202010%20Solution"&gt;Fixes&lt;/a&gt; have been developed, but only for the later model Newtons. My beloved MP120 will stop working tonight. &lt;i&gt;Sniff.&lt;/i&gt; Of course, it hasn't been charged since 1999 so its effective behavior will be unchanged.&lt;/p&gt;

&lt;p&gt;PS: in addition to being the Newtpocalypse, I think Google has &lt;a href="http://digitaldaily.allthingsd.com/20091229/google-announces-jan-5-android-event/"&gt;some kind of announcement&lt;/a&gt; today relating to mobile tech.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-8868046208350927180?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=u0pGB2Rz7sc:eMjZqbsb2KQ:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=u0pGB2Rz7sc:eMjZqbsb2KQ:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=u0pGB2Rz7sc:eMjZqbsb2KQ:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=u0pGB2Rz7sc:eMjZqbsb2KQ:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=u0pGB2Rz7sc:eMjZqbsb2KQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=u0pGB2Rz7sc:eMjZqbsb2KQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=u0pGB2Rz7sc:eMjZqbsb2KQ:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=u0pGB2Rz7sc:eMjZqbsb2KQ:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/u0pGB2Rz7sc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=8868046208350927180" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/8868046208350927180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/8868046208350927180?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/big-day-for-mobile-technology.html" title="A Big Day for Mobile Technology" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_WibILqsOlLg/S0NEfnwvlAI/AAAAAAAAAmM/TWMTc-ZyqJU/s72-c/NewtonMP120.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DUUCQXg8eyp7ImA9WxBRFkw.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-6511298051471451157</id><published>2010-01-04T07:01:00.000-08:00</published><updated>2010-01-04T07:01:00.673-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-04T07:01:00.673-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Access Hatches</title><content type="html">&lt;p&gt;&lt;a rel="cc:attributionURL" href="http://www.flickr.com/photos/argonne/"&gt;&lt;img align="right" alt="Underground lab" border="0" width="152" height="200" src="http://1.bp.blogspot.com/_WibILqsOlLg/SxAQhHAiXEI/AAAAAAAAAkk/gMzGeBoL3dk/s320/undergroundlab.jpg" style="border: 0px; margin: 0px 0px 0px 5px;" title="Image from the Argonne National Laboratory, licensed under Creative Commons." /&gt;&lt;/a&gt;Yes, the rumors are true. Google has constructed a series of secret underground labs connected by high pressure pipes, to synthesize and transport &lt;a href="http://www.c2.com/cgi/wiki?GoogleJuice"&gt;Google Juice&lt;/a&gt; around the planet. Google Juice is devilishly difficult to generate and must be infused into a website quickly before it begins to destabilize, though once absorbed by the server it is remarkably stable.&lt;/p&gt;

&lt;br clear=right /&gt;
&lt;p&gt;The apparatus which powers this system requires constant supervision and maintenance, and if you watch carefully you might spot the access hatches scattered here and there.&lt;/p&gt;

&lt;center&gt;&lt;img alt="Google manhole cover" border="0" width="301" height="300" src="http://1.bp.blogspot.com/_WibILqsOlLg/SxAQlMhQ_3I/AAAAAAAAAko/SlLzY_UpSOQ/s640/manhole.jpg" style="border: 0px; margin: 0px 0px 0px 0px;" title="Seen in Mountain View on the Google campus" /&gt;&lt;/center&gt;

&lt;p&gt;&lt;font size="-1"&gt;&lt;i&gt;(Kidding. Really. Nothing to see, please move on.)&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-6511298051471451157?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=W6hym4AqBz4:rN73NYLRog8:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=W6hym4AqBz4:rN73NYLRog8:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=W6hym4AqBz4:rN73NYLRog8:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=W6hym4AqBz4:rN73NYLRog8:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=W6hym4AqBz4:rN73NYLRog8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=W6hym4AqBz4:rN73NYLRog8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=W6hym4AqBz4:rN73NYLRog8:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=W6hym4AqBz4:rN73NYLRog8:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/W6hym4AqBz4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=6511298051471451157" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/6511298051471451157?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/6511298051471451157?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2010/01/access-hatches.html" title="Access Hatches" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_WibILqsOlLg/SxAQhHAiXEI/AAAAAAAAAkk/gMzGeBoL3dk/s72-c/undergroundlab.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CEMCQXo-fyp7ImA9WxBREEw.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-8072283213106611864</id><published>2009-12-28T07:01:00.000-08:00</published><updated>2009-12-28T07:01:00.457-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-28T07:01:00.457-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Crowdsourcing Backup</title><content type="html">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jon_a_ross/1482849745/"&gt;&lt;img align="right" alt="Broken hard drive" border="0" width="203" height="267" src="http://1.bp.blogspot.com/__-p4Q9V0omk/SzgPDPsJ3mI/AAAAAAAAABc/yrRXz8ppx6A/s320/smashed_hard_drive.jpg" style="border: 0px; margin: 4px;" title="Photo by Jon A Ross, licensed under Creative Commons." /&gt;&lt;/a&gt;Jeff Atwood recently suffered a &lt;a href="http://www.codinghorror.com/blog/archives/001315.html"&gt;catastrophic loss of data&lt;/a&gt; of his long-running blog &lt;a href="http://www.codinghorror.com/"&gt;Coding Horror&lt;/a&gt;. The site was running on a virtual machine, and apparently VM backups at the hosting provider had been routinely failing for years without anybody noticing. Jeff maintained his own backups... within the VM itself, which were lost when the VM was lost. Jeff's story has a happy ending as one of his readers, &lt;a href="http://twitter.com/darmine/"&gt;Carmine Paolino&lt;/a&gt;, had a complete archive.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Obviously the happenstance of somebody on the Internet having a complete copy of data important to us does not constitute a practical backup strategy, but it got me to thinking about the idea of crowdsourcing backups. Everybody should have offsite backups, but practically nobody does it. Could a system be designed where each participant wanting to back up their most important data would in return offer a chunk of local disk space to use for storing data for other people?&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;With terabyte drives becoming common, it seems like many systems have an abundance of disk space which could be better taken advantage of. Perhaps the data you want to be backed up can be broken into chunks and stored in the free space of a number of other backup users, while your drive simultaneously stores their data.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Your data would have to be encrypted, as it will be stored on media controlled by random and potentially untrustworthy people.&lt;/li&gt;
&lt;li&gt;A large amount of redundancy would have to be baked in, as people could drop out of the system at any time and take a chunk of stored information away. Many copies of each chunk would be stored in multiple places.&lt;/li&gt;
&lt;li&gt;Forward Error Correction would also be good, to further improve survivability in the face of missing data. Recovering &lt;i&gt;most&lt;/i&gt; of the chunks would be sufficient to reconstruct the rest.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;The practicality of the details aside, with &lt;a href="https://s3.amazonaws.com/"&gt;Amazon&lt;/a&gt;, &lt;a href="http://www.rackspace.com/online_file_storage"&gt;RackSpace&lt;/a&gt; and others offering cloud storage options, would it even be worthwhile to construct such a crowdsourced system? In 2010, I'm not sure that it is. I suspect this is an idea whose time has come... and gone.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-8072283213106611864?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=_RFfpxaP2lU:rsvtjTYO6DQ:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=_RFfpxaP2lU:rsvtjTYO6DQ:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=_RFfpxaP2lU:rsvtjTYO6DQ:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=_RFfpxaP2lU:rsvtjTYO6DQ:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=_RFfpxaP2lU:rsvtjTYO6DQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=_RFfpxaP2lU:rsvtjTYO6DQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=_RFfpxaP2lU:rsvtjTYO6DQ:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=_RFfpxaP2lU:rsvtjTYO6DQ:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/_RFfpxaP2lU" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=8072283213106611864" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/8072283213106611864?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/8072283213106611864?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/crowdsourcing-backup.html" title="Crowdsourcing Backup" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/00823531138589760740</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02976563323965743576" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/__-p4Q9V0omk/SzgPDPsJ3mI/AAAAAAAAABc/yrRXz8ppx6A/s72-c/smashed_hard_drive.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;Dk8ASXw7cCp7ImA9WxBSFkw.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-6594459069482296907</id><published>2009-12-23T16:26:00.000-08:00</published><updated>2009-12-23T16:34:08.208-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-23T16:34:08.208-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Satellites Should Respond to My Whims</title><content type="html">&lt;p&gt;There was a pretty &lt;a href="http://online.wsj.com/article/SB126154759895302625.html?mod=WSJ_hpp_MIDDLETopStories"&gt;spectacular accident&lt;/a&gt; in Jamaica last night, where a 737 skidded off the runway and broke into pieces. Check the picture in the linked story, I'll wait. Amazingly only two passengers were injured.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Surely I'm not the only person who immediately checked &lt;a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Kingston+Airport,+Jamaica&amp;sll=37.530591,-121.938028&amp;sspn=0.009682,0.011609&amp;ie=UTF8&amp;hq=&amp;hnear=Norman+Manley+International+Airport,+Kingston+Parish,+Jamaica&amp;t=h&amp;ll=17.930993,-76.77546&amp;spn=0.003394,0.004511&amp;z=18&amp;iwloc=A"&gt;satellite&lt;/a&gt; &lt;a href="http://www.bing.com/maps/?v=2&amp;cp=17.931352438162946~-76.77667871117592&amp;lvl=17&amp;sty=h&amp;ss=yp.Jamaica~pg.1"&gt;imagery&lt;/a&gt;, on the off chance that maybe, just maybe the periodic flyover happened to be this morning. Alas, no.&lt;/p&gt;&lt;br /&gt;
&lt;center&gt; &lt;img border="0" height="430" width="670" style="padding:3px; border:0px;" src="http://3.bp.blogspot.com/_WibILqsOlLg/SzJvh70zsZI/AAAAAAAAAlk/j2WhMTRPsZ8/s1600/KingstonAirport.jpg" /&gt; &lt;br /&gt;
&lt;small&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=embed&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Kingston+Airport,+Jamaica&amp;amp;sll=37.530591,-121.938028&amp;amp;sspn=0.009682,0.011609&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Norman+Manley+International+Airport,+Kingston+Parish,+Jamaica&amp;amp;t=h&amp;amp;ll=17.947217,-76.77495&amp;amp;spn=0.003394,0.004511&amp;amp;z=14&amp;amp;iwloc=A" style="color:#0000FF;text-align:left"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-6594459069482296907?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=DsB6RUj_DMg:nkAY8eS8l7Y:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=DsB6RUj_DMg:nkAY8eS8l7Y:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=DsB6RUj_DMg:nkAY8eS8l7Y:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=DsB6RUj_DMg:nkAY8eS8l7Y:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=DsB6RUj_DMg:nkAY8eS8l7Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=DsB6RUj_DMg:nkAY8eS8l7Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=DsB6RUj_DMg:nkAY8eS8l7Y:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=DsB6RUj_DMg:nkAY8eS8l7Y:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/DsB6RUj_DMg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=6594459069482296907" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/6594459069482296907?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/6594459069482296907?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/satellites-should-respond-to-my-whims.html" title="Satellites Should Respond to My Whims" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_WibILqsOlLg/SzJvh70zsZI/AAAAAAAAAlk/j2WhMTRPsZ8/s72-c/KingstonAirport.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DUECQH4-fip7ImA9WxBSFE0.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-1057286953275881859</id><published>2009-12-21T07:01:00.001-08:00</published><updated>2009-12-21T07:01:01.056-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-21T07:01:01.056-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>North Pole Compression Algorithm</title><content type="html">&lt;center&gt;&lt;img border="0" width="408" height="474" src="http://4.bp.blogspot.com/_WibILqsOlLg/SxPZ5lFcgvI/AAAAAAAAAk0/JTr1Qu46QQE/s640/floppy.jpg" style="border: 0px; margin: 8px 0px 8px 0px;" alt="Santa floppy disk ornament"  title="Santa shouldnt let mice leave burning candles on his disks..." /&gt;&lt;/center&gt;

&lt;p&gt;Note the lack of the &amp;quot;HD&amp;quot; logo on the dust cover? Santa must have remarkable compression technology to fit the entire 1998 naughty/nice list on an 800k disk. The prevalence of popular baby names from year to year probably helps, there is a lot of duplication.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-1057286953275881859?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=VWpLS2FaPfw:wF4ocjKjQCM:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=VWpLS2FaPfw:wF4ocjKjQCM:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=VWpLS2FaPfw:wF4ocjKjQCM:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=VWpLS2FaPfw:wF4ocjKjQCM:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=VWpLS2FaPfw:wF4ocjKjQCM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=VWpLS2FaPfw:wF4ocjKjQCM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=VWpLS2FaPfw:wF4ocjKjQCM:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=VWpLS2FaPfw:wF4ocjKjQCM:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/VWpLS2FaPfw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=1057286953275881859" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1057286953275881859?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1057286953275881859?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/north-pole-compression-algorithm.html" title="North Pole Compression Algorithm" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_WibILqsOlLg/SxPZ5lFcgvI/AAAAAAAAAk0/JTr1Qu46QQE/s72-c/floppy.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;DUUHSHY7eSp7ImA9WxBTGUU.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-4512959717954864614</id><published>2009-12-16T10:13:00.000-08:00</published><updated>2009-12-16T10:13:59.801-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-16T10:13:59.801-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Slashdenfreude</title><content type="html">&lt;p style="font-family: Times New Roman, serif;"&gt;&lt;font size="+1"&gt;&lt;b&gt;Slashdenfreude&lt;/b&gt;&lt;/font&gt; &lt;i&gt;[&lt;b&gt;slash&lt;/b&gt;-den-froi-duh] (noun)&lt;/i&gt; : To take joy in the slashdotting of others.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-4512959717954864614?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=9so06LL47jA:bjqobtJw5xU:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=9so06LL47jA:bjqobtJw5xU:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=9so06LL47jA:bjqobtJw5xU:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=9so06LL47jA:bjqobtJw5xU:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=9so06LL47jA:bjqobtJw5xU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=9so06LL47jA:bjqobtJw5xU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=9so06LL47jA:bjqobtJw5xU:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=9so06LL47jA:bjqobtJw5xU:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/9so06LL47jA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=4512959717954864614" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/4512959717954864614?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/4512959717954864614?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/slashdenfreude.html" title="Slashdenfreude" /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CE8CQXw5fyp7ImA9WxBTGE0.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-4638568934034884655</id><published>2009-12-14T07:01:00.000-08:00</published><updated>2009-12-14T07:01:00.227-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-14T07:01:00.227-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>A Coroutine, Thread, and Semaphore Walk into a Bar...</title><content type="html">&lt;p&gt;&lt;a href="http://www.theregister.co.uk/2009/12/10/verity_stob/"&gt;This article&lt;/a&gt; about multicore programming techniques is pure comedic gold.&lt;/p&gt;

&lt;div style="margin: 2em 5em 2em 5em; padding: 1em; border-width: 1px; border-color: #999999; border-style: solid; background-color: #ccccdd; font-family: sans-serif; line-height: 1.4em;"&gt;In particular, threads suffer badly from 'race conditions'. The race of despised worker threads is made to do boring, low status, 'background' tasks. Meanwhile, the high privilege 'system' threads get to party with the hardware. It's the same the whole world over.&lt;/div&gt;

&lt;p&gt;It is a great read with that peculiar British &lt;strike&gt;humor&lt;/strike&gt; humour which &lt;a href="http://www.theregister.co.uk/"&gt;The Register&lt;/a&gt; is so good at. It is also a good technical overview of techniques for taking advantage of multiple cores.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-4638568934034884655?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=a8nTQ2poNAE:R0D-9ZEsjEg:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=a8nTQ2poNAE:R0D-9ZEsjEg:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=a8nTQ2poNAE:R0D-9ZEsjEg:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=a8nTQ2poNAE:R0D-9ZEsjEg:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=a8nTQ2poNAE:R0D-9ZEsjEg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=a8nTQ2poNAE:R0D-9ZEsjEg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=a8nTQ2poNAE:R0D-9ZEsjEg:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=a8nTQ2poNAE:R0D-9ZEsjEg:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/a8nTQ2poNAE" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=4638568934034884655" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/4638568934034884655?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/4638568934034884655?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/coroutine-thread-and-semaphore-walk.html" title="A Coroutine, Thread, and Semaphore Walk into a Bar..." /><author><name>Denton Gentry</name><uri>http://www.blogger.com/profile/11782508603268183191</uri><email>denny@geekhold.com</email><gd:extendedProperty name="OpenSocialUserId" value="05410638791985846968" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry></feed>
