<?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;CUcGSXszcSp7ImA9WxBWFk4.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401</id><updated>2010-02-08T04:43:48.589-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>86</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" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;CEcCQX86fSp7ImA9WxBWE0U.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-979952310768899084</id><published>2010-02-05T07:01:00.000-08:00</published><updated>2010-02-05T07:01:00.115-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-05T07:01:00.115-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="190" src="http://3.bp.blogspot.com/_WibILqsOlLg/S2wUuIIidPI/AAAAAAAAAnI/SoXDG60B9Rw/s320/MetaMTX.png" align="right" style="border: 0px; margin: 4px;" alt="Meta MTX 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, only that it is called META MTX and uses 16 bit RISC-ish instruction words.&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><entry gd:etag="W/&quot;DUUCQXo_eSp7ImA9WxBTFEg.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-3677124814209107701</id><published>2009-12-10T07:01:00.000-08:00</published><updated>2009-12-10T07:01:00.441-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-10T07:01:00.441-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Untouchable Code</title><content type="html">&lt;p&gt;&lt;b&gt;Behold:&lt;/b&gt; the Blaupunkt CD50.&lt;/p&gt;

&lt;center&gt;&lt;img style="padding:0px 0px 10px 0px; border:0px;" width="503" height="153" border="0" src="http://3.bp.blogspot.com/_WibILqsOlLg/Sx-pbc7A07I/AAAAAAAAAlQ/bpjZYM1jgR4/s640/cd50.jpg"&gt;&lt;/center&gt;

&lt;p&gt;Perhaps &amp;quot;behold&amp;quot; is too pretentious for a basic car stereo, but it is the topic of today's screed so I feel a dramatic introduction is called for. Let me call your attention to four buttons on the left side: RDS, AM, FM, and CD-C. They do what you might expect:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;RDS - enable decode of &lt;a href="http://en.wikipedia.org/wiki/Radio_Data_System"&gt;station and song identification&lt;/a&gt; from an FM signal. &lt;i&gt;I'm not sure why you'd ever disable this.&lt;/i&gt;&lt;/li&gt;
 &lt;li&gt;FM - switch to FM radio.&lt;/li&gt;
 &lt;li&gt;AM - switch to AM radio.&lt;/li&gt;
 &lt;li&gt;CD-C - switch to CD Changer mode. Once in CD-C mode, the RDS/FM/AM buttons have no effect until you push CD-C to get back to Radio mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes perfect sense, right? I mean really, once I'm in the &lt;i&gt;CD player mode&lt;/i&gt; I wouldn't expect the buttons from &lt;i&gt;Radio mode&lt;/i&gt; to do anything, would I? Yes, this is sarcasm. On the web. Dangerous, I know.&lt;/p&gt;

&lt;p&gt;I'd speculate that the fine engineers at Blaupunkt did not actually &lt;i&gt;want&lt;/i&gt; the user interface to be this way, and that they would have preferred the FM button to always switch to FM radio. I suspect they were presented with an existing AM/FM radio design which, for whatever reason, they could not modify. Perhaps the CD50 project had a very tight budget, or a narrow market window which didn't allow time to tweak the radio components. Less charitably, perhaps the radio design had degenerated into an unmaintainable mess and any change risked breaking the whole thing. The path of least resistance to get the product out is a mux: you're either in our new mode where we add all the shiny new goodness, or the crufty old mode where we haven't touched anything from the existing design.&lt;/p&gt;

&lt;center&gt;&lt;img style="padding:3px; border:0px;" width="411" height="220" border="0" src="http://3.bp.blogspot.com/_WibILqsOlLg/Sx-plr5EZmI/AAAAAAAAAlY/JvCPC0mh8JU/s640/mux.png"&gt;&lt;/center&gt;

&lt;p&gt;The situation of an unmaintainable portion of a system should be familiar to any software developer tasked with working on a large codebase. I suspect the natural entropic state of software is unmaintainability, requiring constant infusions of energy to stave it off a while longer.&lt;/p&gt;

&lt;p&gt;So what can we do to ensure systems remain maintainable? Unit testing is frequently suggested as an answer, though I've never been a fan of extensive unit testing. If the target platform is very different from the build system, structuring the code to be able to run unit tests is a non-trivial amount of extra work. However I've recently started working in an environment where development testing is strongly encouraged, and I have to admit it does help in keeping code maintainable as developers come and go. The lowest level unit tests are not terribly useful in this regard; even code in a complete mess will have unit tests. On the other hand, a functional testbench for a module where the interfaces to the rest of the system are mocked out is very helpful. You have a much firmer grasp of how changes you make in the module are going to impact the rest of the system. You also have more hope of being able to reimplement the module, as its interfaces are described by the mock framework. If other portions of the system reach in to the internals of the module without using the interfaces... then the cancer has already metastasized and you're probably doomed.&lt;/p&gt;

&lt;p&gt;People say that refactoring early and often will keep code maintainable, but that requires agreement from management to spend development time paying off technical debt without an increase in marketable features. In a product environment I rarely win that argument. However, I've now worked on a complete re-implementation of two different systems where the bug load had simply become impossible due to indecipherable engineering. I suppose that is an extreme form of refactoring: extract the best bits of the old system, and throw out the rest.&lt;/p&gt;

&lt;p&gt;&lt;img style="padding:0px 5px 0px 0px; border:0px;" align="right" width="100" height="22" border="0" src="http://3.bp.blogspot.com/_WibILqsOlLg/Sx_M8dtHPjI/AAAAAAAAAlg/eikjWWzKbp0/s320/disqus.png"&gt;Do you have tips for keeping code maintainable across multiple generations of products? This site uses &lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt; for comments. You can comment anonymously if you wish, or use an existing identity like &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, &lt;a href="http://facebook.com/"&gt;Facebook&lt;/a&gt;, or any &lt;a href="http://openid.net/"&gt;OpenID&lt;/a&gt; provider.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-3677124814209107701?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=9JOR0G_Vd1s:s2V7-gK65bk:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=9JOR0G_Vd1s:s2V7-gK65bk:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=9JOR0G_Vd1s:s2V7-gK65bk:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=9JOR0G_Vd1s:s2V7-gK65bk:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=9JOR0G_Vd1s:s2V7-gK65bk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=9JOR0G_Vd1s:s2V7-gK65bk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=9JOR0G_Vd1s:s2V7-gK65bk:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=9JOR0G_Vd1s:s2V7-gK65bk:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/9JOR0G_Vd1s" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=3677124814209107701" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/3677124814209107701?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/3677124814209107701?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/untouchable-code.html" title="Untouchable Code" /><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/Sx-pbc7A07I/AAAAAAAAAlQ/bpjZYM1jgR4/s72-c/cd50.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;AkcCQXszeyp7ImA9WxBTEUQ.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-5294223846037757780</id><published>2009-12-07T07:01:00.000-08:00</published><updated>2009-12-07T07:01:00.583-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-07T07:01:00.583-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Ruminations on Nickels and Dimes</title><content type="html">&lt;p&gt;&lt;img align="right" alt="Nickels &amp; Dimes" border="0" width="200" height="198" src="http://4.bp.blogspot.com/_WibILqsOlLg/SxASBqAkhgI/AAAAAAAAAks/h1NLSCIeCWE/s320/nickelsDimes.jpg" style="border: 0px; margin: 0px 0px 0px 5px;" title="Nickels should be worth more." /&gt;In 1st grade I could not see how a dime could possibly be worth more than a nickel. The nickel was &lt;i&gt;bigger,&lt;/i&gt; after all; it should obviously be worth more.&lt;/p&gt;

&lt;p&gt;By 5th grade I realized the dime was more valuable because it was made of a more valuable metal. So even though it was smaller, its total worth was greater than the nickel.&lt;/p&gt;

&lt;p&gt;It took until high school to figure out that both the dime and nickel are made of completely worthless metals. The dime is worth more because the US Treasury &lt;i&gt;says&lt;/i&gt; it is worth more.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-5294223846037757780?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=v76BRHrK9r0:wclz0krsG0Y:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=v76BRHrK9r0:wclz0krsG0Y:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=v76BRHrK9r0:wclz0krsG0Y:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=v76BRHrK9r0:wclz0krsG0Y:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=v76BRHrK9r0:wclz0krsG0Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=v76BRHrK9r0:wclz0krsG0Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=v76BRHrK9r0:wclz0krsG0Y:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=v76BRHrK9r0:wclz0krsG0Y:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/v76BRHrK9r0" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=5294223846037757780" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/5294223846037757780?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/5294223846037757780?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/ruminations-on-nickels-and-dimes.html" title="Ruminations on Nickels and Dimes" /><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/SxASBqAkhgI/AAAAAAAAAks/h1NLSCIeCWE/s72-c/nickelsDimes.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;CEMCQX86fip7ImA9WxNaGEg.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-5132268964549190870</id><published>2009-12-03T07:01:00.000-08:00</published><updated>2009-12-03T07:01:00.116-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T07:01:00.116-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Memory Matters</title><content type="html">&lt;p&gt;&lt;img align="right" alt="PowerPC" border="0" width="191" height="185" src="http://4.bp.blogspot.com/_WibILqsOlLg/SxPeLDvP7BI/AAAAAAAAAk4/j1rMdTMNMn8/s320/powerpc.jpg" style="border: 0px; margin: 0px 0px 0px 5px;" title="This is the CPU from an old PPC Mac of mine, not the embedded system in question." /&gt;I once worked on a system where one module was developed outside using Linux/x86 systems, brought in-house, and compiled for Linux/PowerPC. We thought we had been careful in the specifications: avoid endianness assumptions, limit memory footprint, and assume a hefty derating for the slower PowerPC used in the real system. Things looked good in initial testing, but when we started internal dogfooding the PowerPC performance dropped off the proverbial cliff. An operation that took 100 msec on the x86 development system and 300 msec during initial PowerPC testing regressed to an astonishing 45 seconds in the dogfood deployment.&lt;/p&gt;

&lt;p&gt;The cause of this disparity was the data cache. For reasons unclear this code iterated through its configuration many, many times. On x86 the various levels of D$ comprise several megabytes, but the PowerPC had only 16K. As the dogfooding progressed and the config grew it resulted in unbelievable cache thrashing and a 2.5 order of magnitude performance drop.&lt;/p&gt;

&lt;p&gt;Several years ago Ulrich Drepper wrote an excellent paper about all things related to memory in modern system architectures, especially x86 but relevant everywhere. It is a long read, but very worthwhile. The &lt;a href="http://people.redhat.com/drepper/cpumemory.pdf"&gt;complete paper&lt;/a&gt; is available as a PDF from his site, and it was also serialized in articles on &lt;a href="http://lwn.net/"&gt;LWN&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/250967/"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/252125/"&gt;CPU caches&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/253361/"&gt;Virtual memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/254445/"&gt;NUMA systems&lt;/a&gt; - local versus remote references&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/255364/"&gt;What programmers can do - cache optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/256433/"&gt;What programmers can do - multi-threaded optimizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/257209/"&gt;Memory performance tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/258154/"&gt;Future technologies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lwn.net/Articles/258188/"&gt;Appendices and bibliography&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I downloaded the &lt;a href="http://people.redhat.com/drepper/cpumemory.pdf"&gt;PDF&lt;/a&gt; and read it over the course of a few weeks. I strongly recommend this paper, the information content is very high.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-5132268964549190870?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=AJ7BqIBsGJ0:5Vs1_FEVhlQ:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=AJ7BqIBsGJ0:5Vs1_FEVhlQ:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=AJ7BqIBsGJ0:5Vs1_FEVhlQ:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=AJ7BqIBsGJ0:5Vs1_FEVhlQ:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=AJ7BqIBsGJ0:5Vs1_FEVhlQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=AJ7BqIBsGJ0:5Vs1_FEVhlQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=AJ7BqIBsGJ0:5Vs1_FEVhlQ:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=AJ7BqIBsGJ0:5Vs1_FEVhlQ:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/AJ7BqIBsGJ0" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=5132268964549190870" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/5132268964549190870?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/5132268964549190870?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/memory-matters.html" title="Memory Matters" /><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/SxPeLDvP7BI/AAAAAAAAAk4/j1rMdTMNMn8/s72-c/powerpc.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;A0ECQX85eCp7ImA9WxNaFko.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-2559038061678337500</id><published>2009-12-01T07:01:00.000-08:00</published><updated>2009-12-01T07:01:00.120-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T07:01:00.120-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>USPS and Red Tape</title><content type="html">&lt;p&gt;I recently mailed a package using a &lt;a href="http://www.pb.com"&gt;Pitney Bowes&lt;/a&gt; postage meter. After calculating the postage there is a screen listing restrictions of items which can not be mailed through the US postal system. I suspect most people just click through without reading it, which is a shame. It is a fascinating read, and is reproduced here for your edification and bemusement.&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; font-weight: bold;"&gt;
&lt;div style="margin-bottom: 0.3em;"&gt;Harmful matter includes, but is not limited to:&lt;/div&gt;
&lt;div style="margin-bottom: 0.3em; margin-left: 1em;"&gt;a. All types and classes of poisons, including controlled substances.&lt;/div&gt;
&lt;div style="margin-bottom: 0.3em; margin-left: 1em;"&gt;b. All poisonous animals except scorpions mailed for medical research purposes or for the manufacture of antivenom; all poisonous insects; all poisonous reptiles; and all types of snakes, turtles, and spiders.&lt;/div&gt;
&lt;div style="margin-bottom: 0.3em; margin-left: 1em;"&gt;c. All disease germs or scabs.&lt;/div&gt;
&lt;div style="margin-bottom: 0.3em; margin-left: 1em;"&gt;d. All explosives, flammable material, infernal machines, and mechanical, chemical, or other devices or compositions that may ignite or explode.&lt;/div&gt;

&lt;div style="margin-bottom: 0.3em;"&gt;Hazardous items includes materials such as caustic poisons (acids and alkalies), oxidizers, or highly flammable liquids, gases, or solids; or materials that are likely, under conditions incident to transportation, to cause fires through friction, absorption of moisture, or spontaneous chemical changes or from retained heat from manufacturing or processing, including explosives or containers previously used for shipping high explosives with a liquid ingredient (such as dynamite), ammunition, fireworks, radioactive materials, matches, or articles emitting obnoxious odors.&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This is great stuff. I have several observations.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/ma-trix/314837802/"&gt;&lt;img border="0" width="83" height="85" align=right src="http://2.bp.blogspot.com/_WibILqsOlLg/SuL6z5van0I/AAAAAAAAAhc/nr-c29hJz7w/s320/hellraiser.jpg" style="border: 0px; padding: 3px;" alt="Cube from the movie Hellraiser" title="Do not mail this! FedEx has the exclusive contract for these things."&gt;&lt;/a&gt;Note the &amp;quot;infernal machines&amp;quot; phrase in section (d). What is an infernal machine? The Pitney-Bowes restrictions appear to come directly from the US Postal Service &lt;a href="http://pe.usps.gov/archive/html/dmmarchive1209/C021.htm"&gt;Domestic Mail Manual C021&lt;/a&gt;, but the phrase is not subsequently defined there. Is it something like the puzzle boxes from &lt;a href="http://en.wikipedia.org/wiki/Hellraiser"&gt;Hellraiser&lt;/a&gt;? I can see why we might not want those to be spread around...&lt;/p&gt;

&lt;p&gt;I had no idea the scorpion industry lobby was so powerful. In fact, I had no idea that there was a scorpion industry nor that they had a lobbyist, but they scored their own exception in section (b). Poisonous snakes need not apply, only scorpions can be mailed for medical research purposes.&lt;/p&gt;

&lt;p&gt;In the final paragraph it explains that you're not allowed to ship explosives under any circumstances. Also, you need to ensure that containers which you &lt;i&gt;previously used to ship dynamite&lt;/i&gt; have been cleaned of any residue. I'm sure how you could possibly have containers which were previously used to ship dynamite, if you're never allowed to ship dynamite.&lt;/p&gt;

&lt;p&gt;Finally, in addition to the rules against shipping materials which could kill or maim note that you're not allowed to ship anything smelly or stinky. That would be gross.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-2559038061678337500?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=mMWn7JQZ8fs:gLIWacy75wc:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=mMWn7JQZ8fs:gLIWacy75wc:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=mMWn7JQZ8fs:gLIWacy75wc:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=mMWn7JQZ8fs:gLIWacy75wc:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=mMWn7JQZ8fs:gLIWacy75wc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=mMWn7JQZ8fs:gLIWacy75wc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=mMWn7JQZ8fs:gLIWacy75wc:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=mMWn7JQZ8fs:gLIWacy75wc:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/mMWn7JQZ8fs" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=2559038061678337500" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/2559038061678337500?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/2559038061678337500?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/12/usps-and-red-tape.html" title="USPS and Red Tape" /><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/SuL6z5van0I/AAAAAAAAAhc/nr-c29hJz7w/s72-c/hellraiser.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;A04ERHw-cSp7ImA9WxBSFEw.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-1121287944849096729</id><published>2009-11-25T17:49:00.000-08:00</published><updated>2009-12-21T10:25:05.259-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-21T10:25:05.259-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><title>The Kindle Firmware Hero</title><content type="html">&lt;p&gt;&lt;img align="right" alt="Kindle" border="0" height="135" src="http://3.bp.blogspot.com/_WibILqsOlLg/Sw3bc34jfBI/AAAAAAAAAkI/xhHacHTFSw8/s320/kindle.jpg" style="border: 0px; margin: 0px 0px 0px 0px;" title="Yet another shiny gadget which I dont have." width="80" /&gt;Amazon's &lt;a href="http://www.amazon.com/gp/help/customer/display.html?tag=kwab-20&amp;nodeId=200324680"&gt;Kindle software version 2.3&lt;/a&gt; increased battery life from 4 days to 7 days; quite an improvement. Only the &lt;a target="_blank"  href="http://www.amazon.com/Kindle-Wireless-Reading-Display-Generation/dp/B0015T963C?ie=UTF8&amp;tag=codin-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969"&gt;Kindle 2&lt;/a&gt;&lt;span style="font-size: xx-small; color: #666;"&gt;(*)&lt;/span&gt; model using HSDPA saw this improvement, the Kindle DX uses an EVDO radio and still lists a 4 day battery life.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;It seems likely that the Kindle 2 shipped with incomplete radio power management to meet its shipment deadline, and this update represents the completed work. Nonetheless its fun to instead contemplate the moment when some firmware engineer poring over register settings utters a prodigious &lt;b&gt;&lt;i&gt;"WTF!?!"&lt;/i&gt;&lt;/b&gt; upon finding something completely bogus. A few keystrokes later and &lt;i&gt;voila,&lt;/i&gt; huge battery life improvements...&lt;/p&gt;&lt;br /&gt;
&lt;p style="font-size: x-small; color: #666;"&gt;&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=B0015T963C" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;(*) Amazon Associates link&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-1121287944849096729?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=oq7l7PYKREo:2hTo9j-Z-JA:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=oq7l7PYKREo:2hTo9j-Z-JA:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=oq7l7PYKREo:2hTo9j-Z-JA:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=oq7l7PYKREo:2hTo9j-Z-JA:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=oq7l7PYKREo:2hTo9j-Z-JA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=oq7l7PYKREo:2hTo9j-Z-JA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=oq7l7PYKREo:2hTo9j-Z-JA:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=oq7l7PYKREo:2hTo9j-Z-JA:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/oq7l7PYKREo" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=1121287944849096729" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1121287944849096729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/1121287944849096729?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/11/kindle-firmware-hero.html" title="The Kindle Firmware Hero" /><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/Sw3bc34jfBI/AAAAAAAAAkI/xhHacHTFSw8/s72-c/kindle.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;Dk8CQXo4fCp7ImA9WxNaEEo.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-3772640862709457929</id><published>2009-11-24T07:01:00.000-08:00</published><updated>2009-11-24T07:01:00.434-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-24T07:01:00.434-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="websites" /><title>Mayor For Life on Foursquare</title><content type="html">&lt;p&gt;&lt;a href="http://foursquare.com/"&gt;&lt;img border="0" width="146" height="49" src="http://2.bp.blogspot.com/_WibILqsOlLg/SwgLWsM8KbI/AAAAAAAAAj0/K1IXGEQV7Zg/s320/foursquare.png" style="border: 0px; margin: 0px 1em 0px 0px;" alt="foursquare.com" align="left" title="No dodgeball is involved." /&gt;foursquare&lt;/a&gt; is one of the early entrants in a coming wave of location-based web services. Foursquare catalogs a huge list of venues in &lt;a href="http://mashable.com/2009/11/19/foursquare-50-more-cities/"&gt;100 cities&lt;/a&gt; around the globe: restaurants, movie theaters, museums, bars, etc. You checkin with the service as you visit these places, and the system tells you tips that other foursquare users have suggested about that location. It also (optionally) broadcasts your checkin to your friends, so you can arrange meetups or just learn about new spots by watching their activities. Currently you set up your friend lists on the foursquare web site, though it does provide a way to check whether any of your &lt;a href="http://twitter.com"&gt;twitter&lt;/a&gt;, &lt;a href="http://facebook.com"&gt;facebook&lt;/a&gt;, or &lt;a href="http://mail.google.com/"&gt;GMail&lt;/a&gt; contacts are using foursquare.&lt;/p&gt;

&lt;!--  As facebook &lt;a href="http://www.techcrunch.com/2009/11/20/facebook-twitter-lists/"&gt;recently indicated&lt;/a&gt; a willingness to allow API access to friend lists, this would be an obvious next step for foursquare. --&gt;

&lt;br clear="left"/&gt;

&lt;p&gt;&lt;img border="0" width="146" height="49" src="http://2.bp.blogspot.com/_WibILqsOlLg/SwgLo1ykvfI/AAAAAAAAAj4/ztHvLGAvSSs/s320/badges.png" style="border: 0px; margin: 0px 1em 0px 0px;" alt="foursquare badges" align="left" title="Only virtual, they don't mail you a medal or anything." /&gt;An interesting aspect of foursquare is the gaming angle. &lt;!-- Points are awarded for every checkin, with bonus points for multiple checkins in one day. --&gt; Badges are awarded for a huge range of activities, for example four checkins in one day earns the &amp;quot;crunked&amp;quot; badge. It looks like a drunk happy face, though in my case no alcohol was involved: &lt;a href="http://www.cdm.org/"&gt;Children's Discovery Museum&lt;/a&gt;, a local park, Fry's Electronics, and a restaurant. As with &lt;a href="http://codingrelic.geekhold.com/2008/09/random-musings-on-stackoverflowcom.html"&gt;stackoverflow&lt;/a&gt;, badges provide a way for the developers to reward proper use of the site which doesn't cost them any money.&lt;/p&gt;

&lt;p&gt;Finally, there is Mayorship. The person who has checked in to a venue the most in the last 60 days is declared to be the Mayor. You can steal the Mayorship away from its current holder by visiting more often, which gives the site a competitive feeling. Apparently the competition for Mayorship of hot nightspots is intense, complete with accusations of cheating. An old saying about academia springs to mind: &amp;quot;On foursquare, tempers run high because the stakes are so small.&amp;quot; Nonetheless, the &lt;a href="http://www.cdm.org/"&gt;Children's Discovery Museum&lt;/a&gt; Mayorship is mine. Don't even think about trying to take it.&lt;/p&gt;

&lt;center&gt;&lt;a href="http://www.cdm.org/"&gt;&lt;img border="0" width="400" height="114" src="http://2.bp.blogspot.com/_WibILqsOlLg/SwgL0ZMIrKI/AAAAAAAAAj8/hwKSn8FDzKo/s640/mayor.png" style="border: 1px; border-color: #ccc; border-style: solid; margin: 1px 0px 5px 0px;" alt="foursquare mayor of the Childrens Discovery Museum" title="This was a hard fought contest against impossible odds...." /&gt;&lt;/a&gt;&lt;/center&gt;

&lt;p&gt;A small number of business owners offer &lt;a href="http://foursquare.com/businesses/"&gt;rewards&lt;/a&gt; to their foursquare mayor, typically on the order of a free drink. This hints at a route foursquare can take to monetize the site, by allowing businesses to reach out to patrons. The challenge will be to do this in a way that isn't creepy: a leaderboard to see how close I am to becoming Mayor would be fine, actively bugging me to visit more often would not be.&lt;/p&gt;

&lt;br/&gt;
&lt;span style="font-size: 115%; font-weight: bold;"&gt;About SMS...&lt;/span&gt;
&lt;p&gt;&lt;img border="0" width="20" height="45" src="http://2.bp.blogspot.com/_WibILqsOlLg/SwqNnpBq3OI/AAAAAAAAAkA/psmbmJ7fQxs/s320/dumbphone.jpg" style="border: 0px; margin: 0px 0px 0px 1em;" alt="SonyEricsson T616" align="right" title="No heckling from the peanut gallery." /&gt;The best experience using the service is with a GPS-enabled smartphone. There are free apps available for &lt;a href="http://itunes.com/app/foursquare"&gt;iPhone&lt;/a&gt; and &lt;a href="http://foursquare.com/android/"&gt;Android&lt;/a&gt;, and there is  a &lt;a href="http://m.foursquare.com/"&gt;mobile-optimized&lt;/a&gt; website for phones with a reasonable browser. Finally, there is SMS. As I still use an &lt;a href="http://codingrelic.geekhold.com/2009/09/motorola-mobile-meanderings.html"&gt;ancient DumbPhone&lt;/a&gt;, I use SMS. One of these years, I'll buy a new phone.&lt;/p&gt;

&lt;p&gt;foursquare is clearly aimed at people with better phones. You have to type the venue name exactly, there is no fuzzy matching. If your checkin is not recognized, there is no way to correct it after the fact on the foursquare website. This can be very frustrating. &lt;a href="http://www.avc.com/a_vc/2009/07/dont-ignore-the-least-common-denominator.html"&gt;Fred Wilson wrote&lt;/a&gt; about the importance of including SMS support in mobile apps, both to allow someone to try the service without having to install an app and to have an answer for the entire market. Certainly in my case, I wouldn't otherwise be able to use it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-3772640862709457929?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=Wx2HuRlHz7g:n8mqWdwiHGk:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=Wx2HuRlHz7g:n8mqWdwiHGk:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=Wx2HuRlHz7g:n8mqWdwiHGk:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=Wx2HuRlHz7g:n8mqWdwiHGk:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=Wx2HuRlHz7g:n8mqWdwiHGk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=Wx2HuRlHz7g:n8mqWdwiHGk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=Wx2HuRlHz7g:n8mqWdwiHGk:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=Wx2HuRlHz7g:n8mqWdwiHGk:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/Wx2HuRlHz7g" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=3772640862709457929" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/3772640862709457929?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/3772640862709457929?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/11/mayor-for-life-on-foursquare.html" title="Mayor For Life on Foursquare" /><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/SwgLWsM8KbI/AAAAAAAAAj0/K1IXGEQV7Zg/s72-c/foursquare.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;AkMCQX8zeSp7ImA9WxNbGUU.&quot;"><id>tag:blogger.com,1999:blog-9151880169490356401.post-3856794904978525888</id><published>2009-11-23T07:01:00.000-08:00</published><updated>2009-11-23T07:01:00.181-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-23T07:01:00.181-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Joke" /><title>Quackulum-310</title><content type="html">&lt;p&gt;Scientists today announced the creation of a new isotope in the &amp;quot;island of stability&amp;quot; beyond Bismuth in the periodic table. It has been christened Quackulum, owing to the somewhat odd arrangement of its nucleus.&lt;/p&gt;

&lt;center&gt;&lt;img border="0" width="425" height="355" src="http://3.bp.blogspot.com/_WibILqsOlLg/SsddTDmxk7I/AAAAAAAAAdg/LL4VH66XH20/s640/quackulum.jpg" style="border: 0px; padding: 3px 15px 3px 0px;" alt="Rubber duck surrounded by electron paths"  title="This was, of course, taken using an electron microscope. It is a single atom, after all." /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9151880169490356401-3856794904978525888?l=codingrelic.geekhold.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=XJcX7gRFZtM:hDqgNWRUlz4:Pt5fc6444Es"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=XJcX7gRFZtM:hDqgNWRUlz4:Pt5fc6444Es" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=XJcX7gRFZtM:hDqgNWRUlz4:bV-q3IutASs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=XJcX7gRFZtM:hDqgNWRUlz4:bV-q3IutASs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=XJcX7gRFZtM:hDqgNWRUlz4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=XJcX7gRFZtM:hDqgNWRUlz4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.geekhold.com/~ff/CodingRelic?a=XJcX7gRFZtM:hDqgNWRUlz4:yVTNFd3iXtc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CodingRelic?i=XJcX7gRFZtM:hDqgNWRUlz4:yVTNFd3iXtc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CodingRelic/~4/XJcX7gRFZtM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=9151880169490356401&amp;postID=3856794904978525888" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/3856794904978525888?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9151880169490356401/posts/default/3856794904978525888?v=2" /><link rel="alternate" type="text/html" href="http://codingrelic.geekhold.com/2009/11/quackulum-310.html" title="Quackulum-310" /><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/SsddTDmxk7I/AAAAAAAAAdg/LL4VH66XH20/s72-c/quackulum.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry></feed>
