<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6076131</id><updated>2024-09-10T06:04:59.755-07:00</updated><title type='text'>Ramblings</title><subtitle type='html'>Stuff that&#39;s on my mind...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6076131.post-3476109530571260585</id><published>2007-07-27T00:42:00.000-07:00</published><updated>2007-07-27T00:44:09.389-07:00</updated><title type='text'>We&#39;ve moved</title><content type='html'>I&#39;ve moved my blog to my own domain, go to &lt;a href=&quot;http://blog.oscarbonilla.com/&quot;&gt;http://blog.oscarbonilla.com/&lt;/a&gt; and BEHOLD, the beauty of.., uh, the same stuff... only different. Well, not really. But go there anyways. I won&#39;t be posting to this one any more. Cheers.</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/3476109530571260585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/3476109530571260585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/3476109530571260585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/3476109530571260585'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2007/07/weve-moved.html' title='We&#39;ve moved'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-116664138693570251</id><published>2006-12-20T11:02:00.000-08:00</published><updated>2006-12-22T10:15:31.951-08:00</updated><title type='text'>Code Tells You How, Revision History Tells You Why</title><content type='html'>I had a little rant on commenting style and it seems that Jeff Atwood has &lt;a href=&quot;http://www.codinghorror.com/blog/archives/000749.html&quot; title=&quot;Code Tells You How, Comments Tell You Why&quot;&gt;beat me to it&lt;/a&gt;. Well, here&#39;s my rant anyway.&lt;br /&gt;&lt;br /&gt;There are three different components I care about when reading code: &quot;The How&quot;, &quot;The Why&quot;, and &quot;The What&quot;.&lt;br /&gt;&lt;br /&gt;&quot;The How&quot; is the code. The very essence of code is to tell the computer how to do something. It&#39;s not &#39;what&#39; to do, because that is open to interpretation, you might be trying to do something (what) and telling the computer to do something else (how). I don&#39;t need comments for the how, I can read the code. An example of a bad &quot;how&quot; comment is:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/* assign 0 to all flags */&lt;br /&gt;for (i = 0; i &amp;lt; length; i++) things[i]-&amp;gt;flag = 0;&lt;br /&gt;&lt;/pre&gt;I can see you&#39;re setting all flags to zero. Thanks for the non-information.&lt;br /&gt;&lt;br /&gt;&quot;The What&quot;. This is the interpretation of &quot;The How&quot;. Basically, it&#39;s what that code is trying to accomplish. For instance:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/* clear all flags */&lt;br /&gt;for (i = 0; i &amp;lt; length; i++) things[i]-&amp;gt;flags = 0;&lt;br /&gt;&lt;/pre&gt;At least now I know what zero means. But it still doesn&#39;t tell me a lot. As a matter of fact, it&#39;s rare when I need to know &quot;The What&quot;. If I need comments to know &quot;The What&quot;, the code is probably poorly written. I should be able to infer &quot;The What&quot; from &quot;The How&quot;.&lt;br /&gt;&lt;br /&gt;&quot;The Why&quot;. This is what I really care about. Why is this piece of code like this? Why not some other way? What was in the programmer&#39;s mind when he wrote that piece of code? What alternatives were considered and discarded? Why were they discarded?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/* We&#39;re on a deadline and I don&#39;t understand why the flags&lt;br /&gt; * array is getting corrupted. Clearing all flags seems to&lt;br /&gt; * fix it, but there is a deeper issue here that needs&lt;br /&gt; * investigating&lt;br /&gt; */&lt;br /&gt;for (i = 0; i &amp;lt; length; i++) things[i]-&amp;gt;flags = 0;&lt;br /&gt;&lt;/pre&gt;Ah, much better now. I&#39;ve gained some insight into the programmer&#39;s mind, so later when I&#39;m working on the code I can make sense of this line. Basically, I can answer the question: &quot;Why was this added?&quot;&lt;br /&gt;&lt;br /&gt;But wait, there are problems with this approach.&lt;br /&gt;&lt;br /&gt;First of all, you&#39;re using up 5 lines of comments for 1 line of code. That&#39;s verbose, but not the worst of the problems.&lt;br /&gt;&lt;br /&gt;What&#39;s worse is that if I&#39;m just skimming the code because I&#39;m trying to solve some other problem for which I don&#39;t really care about this particular line, you&#39;re going to make me stumble. I&#39;m going to read that comment, remember that I once knew of a way in which the flags could get corrupted and spend the next 1/2 day chasing an issue that has a workaround. Your nice comments are on my face when I don&#39;t need them.&lt;br /&gt;&lt;br /&gt;Even worse, this style also leads to comments needing maintenance. The code will change, and the comment won&#39;t be updated with the change. You&#39;ll get&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/* We&#39;re on a deadline and I don&#39;t understand why the flags&lt;br /&gt; * array is getting corrupted. Clearing all flags seems to&lt;br /&gt; * fix it, but there is a deeper issue here that needs&lt;br /&gt; * investigating&lt;br /&gt; */&lt;br /&gt;for (i = 0; i &amp;lt; length; i++) {&lt;br /&gt; if (things[i]-&amp;gt;flags &amp;#38; FLAG_INIT) things[i]-&amp;gt;flags = 0;&lt;br /&gt;}&lt;/pre&gt;Whoa there buddy! You&#39;re saying that flags were getting corrupted and now you&#39;re using them? How can you trust them? Either the comment is wrong or the code is wrong.&lt;br /&gt;&lt;br /&gt;What probably happened was that some programmer didn&#39;t read the comment (or read it but forgot to change it) and found a convenient place for putting his change. Now understanding this piece of code has been made harder than it should be.&lt;br /&gt;&lt;br /&gt;And all of this is just looking at code statically. Code is organic, it grows, it changes, it evolves.&lt;br /&gt;&lt;br /&gt;There aren&#39;t a lot of comments in the BitKeeper source base because we rely heavily on the Source Control system to answer the &quot;Why&quot; questions. So you&#39;ll see the above code as:&lt;br /&gt;&lt;pre&gt;for (i = 0; i &amp;lt; length; i++) things[i]-&amp;gt;flags = 0;&lt;br /&gt;&lt;/pre&gt;No comments whatsoever. However, if you need to understand what was going on, you can get the annotated version:&lt;br /&gt;&lt;pre&gt;ob 1.123.21: for (i = 0; i &amp;lt; length; i++) things[i]-&amp;gt;flags = 0;&lt;br /&gt;&lt;/pre&gt;and see the comments for the ChangeSet 1.123.21:&lt;br /&gt;&lt;pre&gt;ChangeSet@1.123.21, 2006-07-21 10:45:34-07:00, ob@bitmover.com +1 -0&lt;br /&gt;  Fix bug 2004-10-21: app crashes when restarting&lt;br /&gt;src/main.c@1.23, 2006-06-29 19:40:46-07:00, ob@bitmover.com +1 -0&lt;br /&gt;  We&#39;re on a deadline and I don&#39;t understand why the flags&lt;br /&gt;  array is getting corrupted. Clearing all flags seems to&lt;br /&gt;  fix it, but there is a deeper issue here that needs&lt;br /&gt;  investigating&lt;br /&gt;&lt;/pre&gt;Now the information is there, but it&#39;s not in my face unless I need it.&lt;br /&gt;&lt;br /&gt;Note that when looking at code this way, the question &quot;What changed?&quot; is trivially answered by the diffs and therefore doesn&#39;t need to be answered by the comments. E.g. the following are really bad comments:&lt;br /&gt;&lt;pre&gt;src/main.c@1.23, 2006-06-29 19:40:46-07:00, ob@bitmover.com +1 -0&lt;br /&gt;  Add code to clear the flags&lt;br /&gt;&lt;/pre&gt;Well, duh! I can see that from the diffs!&lt;br /&gt;&lt;pre&gt;@@ -274,6 +278,7 @@&lt;br /&gt;  things = getThings(x, y, z);&lt;br /&gt;  length = getLenght(things);&lt;br /&gt;+ for (i = 0; i &amp;lt; length; i++) things-&amp;gt;flags = 0;&lt;br /&gt;  doStuff(things);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;I can see that you added code to clear the flags, why did you do it? That&#39;s the interesting bit.&lt;br /&gt;&lt;br /&gt;&lt;!-- technorati tags start --&gt;&lt;p style=&quot;text-align:right;font-size:10px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://www.technorati.com/tag/BitKeeper&quot; rel=&quot;tag&quot;&gt;BitKeeper&lt;/a&gt;, &lt;a href=&quot;http://www.technorati.com/tag/Programming&quot; rel=&quot;tag&quot;&gt;Programming&lt;/a&gt;&lt;/p&gt;&lt;!-- technorati tags end --&gt;</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/116664138693570251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/116664138693570251' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/116664138693570251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/116664138693570251'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2006/12/code-tells-you-how-revision-history.html' title='Code Tells You How, Revision History Tells You Why'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-115021985102096806</id><published>2006-06-13T10:27:00.000-07:00</published><updated>2006-06-13T10:30:51.130-07:00</updated><title type='text'>Spotlight (part deux)</title><content type='html'>After reading some comments about how Spotlight just works for other people, and talking with some friends that have Spotlight turned on, I started doubting that it was so bad. It turns out that when I got the MacBook Pro, I transfered about 40 GB of stuff from my old laptop, and apparently it also transfered a corrupt Spotlight Index.&lt;br /&gt;&lt;br /&gt;So after running:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# mdutil -E /&lt;br /&gt;&lt;/pre&gt;and turning Spotlight back on, I&#39;m no longer seeing the performance problems I had. All thanks to the comments. And I didn&#39;t think anybody read this blog :)</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/115021985102096806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/115021985102096806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/115021985102096806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/115021985102096806'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2006/06/spotlight-part-deux.html' title='Spotlight (part deux)'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-114919519165235836</id><published>2006-06-01T13:50:00.000-07:00</published><updated>2006-06-01T13:54:23.620-07:00</updated><title type='text'>Spotlight must die (or get its act straight)</title><content type='html'>I just got a new &lt;a href=&quot;http://www.apple.com/macbookpro/&quot;&gt;MacBook Pro&lt;/a&gt;, and had it for about a week. What I discovered was that the machine wasn&#39;t as snappy as I thought it would be. It&#39;s a CORE DUO for Christ&#39;s sake, it has not one, but TWO cores, it has 2 GB of freaking RAM! It should be the fastest box around! But no, it&#39;s slow and every once in a while it just locks up for about 5 seconds.&lt;br /&gt;&lt;br /&gt;After some fun with fs_usage trying to figure out what was going on, I found the culprit: Spotlight. See, spotlight interacts VERY VERY badly with the file system cache, and since Mac OS X has a unified cache, with the VM cache. This means that while the OS is trying really hard to keep your working set in memory, spotlight (a.k.a. &lt;a href=&quot;http://developer.apple.com/documentation/Darwin/Reference/Manpages/man1/mdimport.1.html&quot;&gt;mdimport&lt;/a&gt;) is indexing stuff and therefore causing unnecessary flushes of the cache.&lt;br /&gt;&lt;br /&gt;The solution? Turn it off. Just run &#39;mdutil -i off /&#39; and edit /etc/hostconfig to set &quot;SPOTLIGHT=-NO-&quot; and be done with it. Or if you don&#39;t want to even type that, get &lt;a href=&quot;http://www.apple.com/downloads/macosx/system_disk_utilities/spotless.html&quot;&gt;Spotless&lt;/a&gt; and click away. Go ahead, I&#39;ll wait.&lt;br /&gt;&lt;br /&gt;The problems? Mail no longer searches, and no easy and quick way to launch applications. I installed &lt;a href=&quot;http://quicksilver.blacktree.com/&quot;&gt;QuickSilver&lt;/a&gt; for the application launching part, and will figure out if I can find an alternative for searching mail. But it&#39;s worth it.&lt;br /&gt;&lt;br /&gt;My machine is SUPER FAST now, and the disk is quiet all the time. Processors are mostly idle if I&#39;m not doing anything, ah the sound of a high performance machine...&lt;br /&gt;&lt;br /&gt;How badly does Google Desktop Search hinder performance under Windows?&lt;br /&gt;&lt;br /&gt;&lt;!-- technorati tags start --&gt;&lt;p style=&quot;text-align:right;font-size:10px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://www.technorati.com/tag/macos x&quot; rel=&quot;tag&quot;&gt;macos x&lt;/a&gt;&lt;/p&gt;&lt;!-- technorati tags end --&gt;</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/114919519165235836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/114919519165235836' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/114919519165235836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/114919519165235836'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2006/06/spotlight-must-die-or-get-its-act.html' title='Spotlight must die (or get its act straight)'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-113026138508273802</id><published>2005-10-25T10:29:00.000-07:00</published><updated>2005-10-25T10:29:45.153-07:00</updated><title type='text'>I Believe, I Believe...</title><content type='html'>&lt;a href=&quot;http://www.devoted1.com/&quot;&gt;devoted1.com&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://img.engadget.com/common/images/3060000000050756.JPG?0.8980590714974607&quot; onclick=&quot;window.open(&#39;http://img.engadget.com/common/images/3060000000050756.JPG?0.8980590714974607&#39;,&#39;popup&#39;,&#39;width=425,height=284,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;img src=&quot;http://img.engadget.com/common/images/3060000000050756.JPG?0.8980590714974607&quot; height=&quot;100&quot; width=&quot;149&quot; border=&quot;1&quot; hspace=&quot;4&quot; vspace=&quot;4&quot; alt=&quot;3060000000050756.Jpg?0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;And on the seventh day He said, &quot;Oh, one more thing...&quot;&lt;/blockquote&gt;&lt;blockquote&gt;-Jobs 3:15&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/113026138508273802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/113026138508273802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/113026138508273802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/113026138508273802'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/10/i-believe-i-believe.html' title='I Believe, I Believe...'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112918418642344024</id><published>2005-10-12T23:16:00.000-07:00</published><updated>2005-10-12T23:17:22.696-07:00</updated><title type='text'>A nerdish way to spend an evening</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;Get a laptop&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;Install &lt;/span&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;&lt;a href=&quot;http://stellarium.sourceforge.net&quot;&gt;stellarium&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;Go outside and bring:&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;binoculars or a telescope if you have one&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;a bottle of wine (or beer)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;cheese&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;a blanket&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Try a spot where there are no lights. It&#39;s hard if you&#39;re in the city, but it&#39;s really nice when there is darkness around.&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:monospace;font-size:11pt;&quot;&gt;&lt;br /&gt;Launch stellarium, see the sky. Enjoy.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112918418642344024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112918418642344024' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112918418642344024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112918418642344024'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/10/nerdish-way-to-spend-evening.html' title='A nerdish way to spend an evening'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112918349963472607</id><published>2005-10-12T12:04:00.000-07:00</published><updated>2005-10-12T23:04:59.676-07:00</updated><title type='text'>I&#39;m human, so sue me</title><content type='html'>&lt;a href=&quot;http://news.zdnet.co.uk/software/developer/0,39020387,39228663,00.htm&quot;&gt;Developers &#39;should be liable&#39; for security holes - ZDNet UK News&lt;/a&gt;:&lt;br /&gt;Making developers liable for security exploits is a stupid idea. The first problem with it is, who do we blame? Most of the security bugs nowadays are not your typical &lt;a href=&quot;http://en.wikipedia.org/wiki/Buffer_overflow&quot;&gt;buffer overflow&lt;/a&gt; kind, which could have been prevented with careful programming. Most of the security bugs today have to do with interactions between system components. Let me explain.&lt;br /&gt;&lt;br /&gt;There are two kinds of bugs, security or otherwise. Bugs that reflect the programmers lack of knowledge of a well established coding practice or API usage, and bugs that unless you have actually written the same code before in the same circumstances, you could not have predicted would occur.&lt;br /&gt;&lt;br /&gt;If a web programmer takes a string from a user in a web form, and then passes that string unquoted to a shell, that programmer shouldn&#39;t be allowed within 15 feet of a web app. If a programmer writes a piece of code that interacts with other pieces of code, and the resulting interaction has a bug (which might be exploitable), we have an interaction bug. It&#39;s one of those &quot;How could I have known?&quot; moments we&#39;ve all had. And if you sit and think about all the possible interactions before writing any code, you never get anything done.&lt;br /&gt;&lt;br /&gt;What about liability? Assuming you have a sensible version control system in place, you can ask  the question &quot;Who wrote this pice of crap?&quot; and get an answer. But who do you blame when the security bug is a result of a combination of changing APIs, implementing new features, fixing old bugs, etc. The answer to  &quot;Who wrote this piece of crap?&quot; is &quot;a group of programmers working at different times&quot;. For the web app example, some of the code might have been written when it wasn&#39;t a web app at all. There is human history in the code. It was written by humans.&lt;br /&gt;&lt;br /&gt;And humans make mistakes. There is no way to avoid that. We just screw up every once in a while. Depending on how much you have to pay for your mistakes, you might be afraid of doing anything daring again. For instance, if I write a little application (single author, so all the bugs are mine), and get sued because it has a security bug, guess how many more applications I&#39;ll be writing. None. The cost of making a mistake is too expensive. &lt;br /&gt;&lt;br /&gt;If companies are liable, you&#39;re just moving the problem to management. Companies get sued, so they are hesitant to put new applications out there. Applications that are not being used are not being debugged, and are thus less secure.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.ranum.com/&quot;&gt;Markus Ranum&lt;/a&gt; wrote a great piece about this subject called &lt;a href=&quot;http://www.ranum.com/security/computer_security/editorials/lawyers/&quot;&gt;Inviting Cockroaches to the Feast&lt;/a&gt;. It&#39;s a very good read.</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112918349963472607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112918349963472607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112918349963472607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112918349963472607'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/10/im-human-so-sue-me.html' title='I&#39;m human, so sue me'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112883393102774852</id><published>2005-10-08T21:58:00.000-07:00</published><updated>2005-10-08T23:44:58.236-07:00</updated><title type='text'>First BitMover Regatta</title><content type='html'>Last week we had the First &lt;a href=&quot;http://www.bitkeeper.com&quot;&gt;BitMover&lt;/a&gt; Regatta. On Tuesday, BitMover rented a bunch of sailboats, and a group of employees raced across the San Francisco Bay. It was my first time on a sailboat, and I had an excellent time. I had been on a Yacht before, deep sea fishing, but sailboats are an entirely different experience. Now I understand why &lt;a href=&quot;http://www.cs.colorado.edu/~evi/Home.html&quot;&gt;Evi&lt;/a&gt; is &lt;a href=&quot;http://www.cs.colorado.edu/~evi/sailing.html&quot;&gt;sailing across the world&lt;/a&gt;. &lt;a href=&quot;http://en.wikipedia.org/wiki/Sailing&quot;&gt;Sailing&lt;/a&gt; is too cool.&lt;br /&gt;&lt;br /&gt;At around noon, we drove to Sausalito, where the sailboats were waiting for us in the dock. We divided in 3-person teams, and each team got a sailboat and a skipper. The skipper&#39;s role was giving us directions and basically taking care of us since not many &lt;img align=&quot;left&quot; alt=&quot;49729020_e9551acccb_m_d.jpg&quot; border=&quot;1&quot; height=&quot;180&quot; hspace=&quot;8&quot; src=&quot;http://static.flickr.com/27/49729020_e9551acccb_m_d.jpg&quot; title=&quot;49729020_e9551acccb_m_d.jpg&quot; vspace=&quot;8&quot; width=&quot;240&quot;/&gt;people had sailed before. At the dock, we found our sailboat,  a 42-foot &lt;a href=&quot;http://www.beneteauusa.com/&quot;&gt;B&amp;#275;n&amp;#275;teau&lt;/a&gt; &lt;a href=&quot;http://www.beneteauusa.com/sail/current/bene/423_intro.php&quot;&gt;423&lt;/a&gt;. The B&amp;#275;n&amp;#275;teau 423 was one of the &lt;a href=&quot;http://www.sailmag.com/Boats/Beneteau/&quot;&gt;top 10&lt;/a&gt; sailboats of 2003 according to &lt;a href=&quot;http://www.sailmag.com&quot;&gt;Sail Magazine&lt;/a&gt;, and it&#39;s price is around $165,000. Not bad at all! Upon boarding the sailboat, we met Stan, our skipper, who had been in the Coast Guard for 20 years before becoming a sailing instructor for the &lt;a href=&quot;http://modernsailing.com&quot;&gt;Modern Sailing Academy&lt;/a&gt; in Sausalito. He explained all the boat terminology (&lt;a href=&quot;http://en.wikipedia.org/wiki/Port_%28nautical%29&quot;&gt;port&lt;/a&gt; is left, &lt;a href=&quot;http://en.wikipedia.org/wiki/Starboard&quot;&gt;starboard&lt;/a&gt; is right when facing the ship&#39;s front, or rather, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Bow_%28ship%29&quot;&gt;bow&lt;/a&gt;). And taught us how to work the sails. We used the motor to get out of the docks, hung around the start line until the race started, and set sail towards San Francisco.&lt;br /&gt;&lt;br /&gt;Stan asked for a volunteer to take the helm (steering wheel) and I immediately stepped forward (knowing that working the helm would be easier than pulling all the&lt;img align=&quot;right&quot; alt=&quot;49729012 0845F124D8 M D&quot; border=&quot;1&quot; height=&quot;180&quot; hspace=&quot;8&quot; src=&quot;http://static.flickr.com/32/49729012_0845f124d8_m_d.jpg&quot; vspace=&quot;8&quot; width=&quot;240&quot;/&gt;  ropes). Since I had never been in a sailboat, I didn&#39;t expect it to lean that much. It&#39;s a little scary at first, but I was assured by Stan that they don&#39;t tip over under normal conditions (i.e. not in a hurricane). Driving that thing was fun, but it required a lot of attention. Basically if you let your attention drift for 10 seconds, you would slightly change course and lose the lift. If you lose the lift often enough, your skipper can order a &lt;a href=&quot;http://en.wikipedia.org/wiki/Keelhauling&quot;&gt;Keelhauling&lt;/a&gt;, which I&#39;ve been told is not pleasant. I must have done allright because we were going at about 3 knots towards San Francisco.&lt;br /&gt;&lt;img align=&quot;left&quot; alt=&quot;49728995 3537Ee9792 M D&quot; border=&quot;1&quot; height=&quot;180&quot; hspace=&quot;8&quot; src=&quot;http://static.flickr.com/32/49728995_3537ee9792_m_d.jpg&quot; vspace=&quot;8&quot; width=&quot;240&quot;/&gt;&lt;br /&gt;It took us a while to find the buoy where we were supposed to turn, but after a while, we found it and headed towards the bay bridge. We were going with the wind, which is really cool because you can go really, really fast. The course took us around &lt;a href=&quot;http://www.nps.gov/alcatraz/&quot;&gt;Alcatraz&lt;/a&gt;, the famous prison where &lt;a href=&quot;http://www.crimelibrary.com/capone/caponemain.htm&quot;&gt;Al Capone&lt;/a&gt; was an inmate.&lt;br /&gt;&lt;p style=&quot;text-align:right;&quot;&gt;&lt;img align=&quot;right&quot; alt=&quot;Alcatraz&quot; border=&quot;1&quot; height=&quot;180&quot; hspace=&quot;8&quot; src=&quot;http://static.flickr.com/26/49729005_f21be2af5c_m_d.jpg&quot; title=&quot;Alcatraz&quot; vspace=&quot;8&quot; width=&quot;240&quot;/&gt;Seeing Alcatraz up close was quite a thrill. I have wanted to go to Alcatraz since 1994, when I first visited San Francisco, but because of various reasons, I have never taken a tour of &quot;The Rock&quot;. After we went around Alcatraz, we headed back towards Sausalito, and the finish line. During that last segment, even though we were going more or less against the wind, we did a pretty good time. We won the race, crossing the finish line 7 minutes before the next sailboat.&lt;/p&gt;We didn&#39;t have to return the boat until 5:00 pm, and we crossed the finish line at around 4:00 pm. What could we do in an hour? Well, that wasn&#39;t a hard decision, we convinced our skipper to take us to the other side of the Golden Gate Bridge. We set sail and managed to go&lt;br /&gt;&lt;img align=&quot;left&quot; alt=&quot;Golden Gate Bridge&quot; border=&quot;1&quot; height=&quot;240&quot; hspace=&quot;8&quot; src=&quot;http://static.flickr.com/26/49728974_8c15a959bb_m_d.jpg&quot; title=&quot;Golden Gate Bridge&quot; vspace=&quot;8&quot; width=&quot;180&quot;/&gt; to the other side. It was amazing being under the bridge. We got a little taste of the ocean too, with a slightly rougher sea than what the bay had been. After a quick turn, we got back to the dock, returned the sailboat and called it a day.&lt;br /&gt;Once we were in the land again, we were tired and hungry. We headed to the &lt;a href=&quot;http://www.buckeyeroadhouse.com/&quot;&gt;Buckeye Roadhouse&lt;/a&gt; in Mill Valley for dinner, and what a dinner we had! If you ever go to the Buckeye, try the Ahi tuna appetizer. It&#39;s unbelievably good.&lt;br /&gt;&lt;br /&gt;After this first taste of sailing, I&#39;m left wanting to learn how to sail. Who knows, maybe when I retire, I&#39;ll buy a sailboat and follow Evi&#39;s course around the World.&lt;br /&gt;&lt;br /&gt;&lt;!-- technorati tags start --&gt;&lt;p style=&quot;text-align:right;font-size:10px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://www.technorati.com/tag/BitKeeper&quot; rel=&quot;tag&quot;&gt;BitKeeper&lt;/a&gt;, &lt;a href=&quot;http://www.technorati.com/tag/BitMover&quot; rel=&quot;tag&quot;&gt;BitMover&lt;/a&gt;, &lt;a href=&quot;http://www.technorati.com/tag/Sailing&quot; rel=&quot;tag&quot;&gt;Sailing&lt;/a&gt;, &lt;a href=&quot;http://www.technorati.com/tag/San Francisco&quot; rel=&quot;tag&quot;&gt;San Francisco&lt;/a&gt;&lt;/p&gt;&lt;!-- technorati tags end --&gt;</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112883393102774852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112883393102774852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112883393102774852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112883393102774852'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/10/first-bitmover-regatta.html' title='First BitMover Regatta'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112832077016417125</id><published>2005-10-02T23:26:00.000-07:00</published><updated>2005-10-02T23:26:10.203-07:00</updated><title type='text'>Yet Another Stupid Idea</title><content type='html'>&lt;a href=&quot;http://www.cinematical.com/2005/10/02/microsoft-kills-blockbuster-for-good/&quot;&gt;Single-play DVDs&lt;/a&gt; will never work, at least not for the rental market. Not only because they require new players, and &lt;em&gt;of course&lt;/em&gt; the first thing I will do is get a new DVD player so that I can watch the new rentals only once. But because they don&#39;t interact well with how people watch movies. I often fall asleep while watching a movie, how would I see the ending? How about that phone call, or little emergency right in the middle of the movie? Or when I don&#39;t have 2 hours to watch the entire movie, but I&#39;m willing to see 30 minutes now and the rest later? &lt;br /&gt;&lt;br /&gt;People rent because it&#39;s more flexible than going to the movies. Taking away from people the flexibility of renting without giving them any of the advantages of movie theaters is not going to fly.</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112832077016417125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112832077016417125' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112832077016417125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112832077016417125'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/10/yet-another-stupid-idea.html' title='Yet Another Stupid Idea'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112827305192528233</id><published>2005-10-02T10:10:00.000-07:00</published><updated>2005-10-02T10:10:51.970-07:00</updated><title type='text'>Unix died in 1982</title><content type='html'>If you look at &lt;a href=&quot;http://www.levenez.com/unix/history.html&quot;&gt;this time history of Unix&lt;/a&gt;, you can see how after 1982 Unix became practically impossible to support. I mean, who was going to worry about compatibility between so many different flavors of Unix. I&#39;m glad the list is short again in 2005.  Now if only the GUIs had a standard ;-)</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112827305192528233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112827305192528233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112827305192528233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112827305192528233'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/10/unix-died-in-1982.html' title='Unix died in 1982'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112814630675539912</id><published>2005-09-30T22:56:00.000-07:00</published><updated>2005-10-01T08:16:13.740-07:00</updated><title type='text'>Judge this Book by its Cover</title><content type='html'>Or, how I learned the history of the computing industry and Unix by looking at the cover of a book.&lt;br /&gt;&lt;br /&gt;Here&#39;s the deal. For reasons best left unexplained, I have every edition of the Unix System Administration Handbook by Evi Nemeth, et al. I even have the Linux System Administration Handbook. Since every book&#39;s edition is a different color, my daughter likes to play with them. The other day, while putting them back on the shelf, I noticed that the cover of the book reflects the history of the computer industry, the history of Unix, and a little history about Evi. So without further ado, here&#39;s my explanation of what it all means. You&#39;ll have to excuse the quality of the images, but I don&#39;t have a scanner so I took digital pictures.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Unix System Administration Handbook, 1st Edition&lt;br /&gt;&lt;/strong&gt;&lt;p style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;http://static.flickr.com/31/48185913_fbf4a7f6c5_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/31/48185913_fbf4a7f6c5_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=600,height=800,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;img align=&quot;middle&quot; alt=&quot;usah1ed&quot; border=&quot;1&quot; height=&quot;400&quot; hspace=&quot;4&quot; src=&quot;http://static.flickr.com/31/48185913_fbf4a7f6c5_o_d.jpg&quot; title=&quot;usah1ed&quot; vspace=&quot;4&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;a href=&quot;http://static.flickr.com/31/48185913_fbf4a7f6c5_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/31/48185913_fbf4a7f6c5_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=600,height=800,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;This book was published in 1989. We see that UNIX system administration is a difficult topic. There is a Unix system administrator driving his car towards a cliff. I don&#39;t know what the reference to &lt;em&gt;cranberry blogs&lt;/em&gt; is about, but let&#39;s focus on the colorful characters.&lt;br /&gt;&lt;br /&gt;Starting rom the left, we have &lt;a href=&quot;http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/biff.1.html&quot;&gt;a dog named biff&lt;/a&gt;, which is a reference to the &lt;a href=&quot;http://www.catb.org/~esr/jargon/html/B/biff.html&quot;&gt;biff(1) command&lt;/a&gt; in Unix that prints a message to your terminal when you have new mail. In the center is a &lt;a href=&quot;http://www.catb.org/~esr/jargon/html/D/daemon.html&quot;&gt;daemon&lt;/a&gt;, a Unix process that runs in the background. Since the daemon is showing us his watch, maybe it&#39;s the &lt;a href=&quot;http://www.ntp.org/&quot;&gt;NTP daemon&lt;/a&gt;? At the right of the daemon, you can see the &lt;a href=&quot;http://www.catb.org/~esr/jargon/html/F/finger.html&quot;&gt;finger(1) &lt;/a&gt;command, used to find information about a user and made famous by the &lt;a href=&quot;http://www.catb.org/~esr/jargon/html/G/Great-Worm.html&quot;&gt;Great Worm of &#39;88&lt;/a&gt;. I don&#39;t know what the other two characters (the owl, and the cat, or is it perhaps a lady daemon?) are about. If anyone knows, or has a guess, let me know.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Unix System Administration Handbook, 2nd Edition&lt;br /&gt;&lt;/strong&gt;&lt;p style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;http://static.flickr.com/24/48185900_2be1e29082_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/24/48185900_2be1e29082_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=600,height=800,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;img align=&quot;middle&quot; alt=&quot;usah2ed&quot; border=&quot;1&quot; height=&quot;400&quot; hspace=&quot;4&quot; src=&quot;http://static.flickr.com/24/48185900_2be1e29082_o_d.jpg&quot; title=&quot;usah2ed&quot; vspace=&quot;4&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;a href=&quot;http://static.flickr.com/24/48185900_2be1e29082_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/24/48185900_2be1e29082_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=600,height=800,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;In the second edition, published in 1995, biff is dead (you can see the gravestone that says &quot;R.I.P biff R.I.P&quot;), probably replaced by &lt;a href=&quot;http://en.wikipedia.org/wiki/Post_Office_Protocol&quot;&gt;POP&lt;/a&gt;. The cross behind reads &quot;USL&quot; and is a reference to the Unix System Laboratory at AT&amp;#38;T, the group responsible for System V, which had been sold to Novell in 1993.&lt;br /&gt;&lt;br /&gt;In the front of biff&#39;s grave, it says &quot;Here lies the entire Berkeley CSRG&quot;. That means the Computer Science Research Group, which was responsible for the development of the Berkeley version of Unix, called &lt;a href=&quot;http://en.wikipedia.org/wiki/Berkeley_Software_Distribution&quot;&gt;BSD&lt;/a&gt;, at the University of California and was disbanded in 1994.&lt;br /&gt;&lt;br /&gt;The first edition of the book is being held by the paw of a cat. We can tell it&#39;s the first version because it&#39;s yellow, and it says &quot;USAH&quot;, short for Unix System Administration Handbook.&lt;br /&gt;&lt;br /&gt;The dog, Biff, is now gone from the front row. He&#39;s dead, remember? And has been substituted by a Monkey, a spider, and a Web. I don&#39;t know what the monkey has to do with anything, but the web is clearly a reference to the &lt;a href=&quot;http://www.w3.org/&quot;&gt;World Wide Web&lt;/a&gt;, which was invented in 1993. The spider is clearly a reference to the &lt;a href=&quot;http://www.catb.org/~esr/jargon/html/S/spider.html&quot;&gt;web spiders&lt;/a&gt;, or bots that search engines use to index web sites. We can still see the daemon, the finger, and a new character, Dr. SNTPd, a reference to the &lt;a href=&quot;http://net-snmp.sourceforge.net/docs/man/snmpd.html&quot;&gt;Simple Network Management Protocol&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Note that the car is more modern, and it has the word &quot;Unix&quot; written on the front. Also the System Administrator behind the wheel appears to be a woman. Could this be a reference to more women in system administration?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Unix System Administration Handbook, 3rd Edition&lt;br /&gt;&lt;/strong&gt;&lt;p style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;http://static.flickr.com/26/48185891_b9e684f945_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/26/48185891_b9e684f945_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=600,height=800,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;img align=&quot;middle&quot; alt=&quot;usah3ed&quot; border=&quot;1&quot; height=&quot;400&quot; hspace=&quot;4&quot; src=&quot;http://static.flickr.com/26/48185891_b9e684f945_o_d.jpg&quot; title=&quot;usah3ed&quot; vspace=&quot;4&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;a href=&quot;http://static.flickr.com/26/48185891_b9e684f945_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/26/48185891_b9e684f945_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=600,height=800,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;The third edition, published in 2001, has many of the same symbols as the second edition. In this edition, however, there&#39;s a new tomb. The &lt;a href=&quot;http://en.wikipedia.org/wiki/UUCP&quot;&gt;Unix to Unix Copy Protoco&lt;/a&gt;l, or UUCP, has died because most people use &lt;a href=&quot;http://en.wikipedia.org/wiki/Point-to-Point_Protocol&quot;&gt;PPP&lt;/a&gt; by now. We can also see the second edition coming out of the grave being held by a tentacle.&lt;br /&gt;&lt;br /&gt;Two more things should be noted. First, this is the first edition of the book to cover &lt;a href=&quot;http://kernel.org/&quot;&gt;Linux&lt;/a&gt;, a newcomer to the Unix world, and you can see the &lt;a href=&quot;http://www.isc.tamu.edu/~lewing/linux/&quot;&gt;Penguin&lt;/a&gt; in the co-pilot seat of the car. Also, the spider now has handcuffs, which might be a metaphor for the restrictions many sites started putting in place to prevent search engines from finding them.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Linux System Administration Handbook&lt;br /&gt;&lt;/strong&gt;&lt;p style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;http://static.flickr.com/32/48185876_de3e8981af_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/32/48185876_de3e8981af_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=600,height=800,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;img align=&quot;middle&quot; alt=&quot;lsah&quot; border=&quot;1&quot; height=&quot;400&quot; hspace=&quot;4&quot; src=&quot;http://static.flickr.com/32/48185876_de3e8981af_o_d.jpg&quot; title=&quot;lsah&quot; vspace=&quot;4&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;&lt;a href=&quot;http://static.flickr.com/32/48185876_de3e8981af_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/32/48185876_de3e8981af_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=600,height=800,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;This book came out in 2002, and was made specifically for Linux, which had by then surpassed in popularity all of the other Unix distributions. You can see the Linux Penguin driving now, and the sys admin as the co-pillot.&lt;br /&gt;&lt;br /&gt;The spider&#39;s handcuffs have been replaced by a shackle, meaning the restrictions on spiders are greater now. The other books are gone, as Linux has been declared the only winner.&lt;br /&gt;&lt;br /&gt;You can also see that the sign that used to read &quot;Beware! Vendor Gratuitous Changes Ahead!&quot; has been replaced by one that has Unix somewhat deviated, but still going up, Linux going straight up, and XP (a reference to &lt;a href=&quot;http://www.microsoft.com/windowsxp/default.mspx&quot;&gt;Windows XP&lt;/a&gt;) going down. The helicopter that is crashing also has XP written on it. The authors have no love for Microsoft&#39;s Operating System.&lt;br /&gt;&lt;br /&gt;There is also a penguin skiing on the mountain. I have no idea what that means.&lt;br /&gt;&lt;br /&gt;The last interesting bit is that there is a sailboat in the back. Let&#39;s take a closer look at that sailboat.&lt;br /&gt;&lt;p style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;http://static.flickr.com/32/48185870_8fa211670c_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/32/48185870_8fa211670c_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=434,height=398,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;img align=&quot;middle&quot; alt=&quot;evi-boat&quot; border=&quot;1&quot; height=&quot;220&quot; hspace=&quot;4&quot; src=&quot;http://static.flickr.com/32/48185870_8fa211670c_o_d.jpg&quot; title=&quot;evi-boat&quot; vspace=&quot;4&quot; width=&quot;240&quot;/&gt;&lt;/a&gt;&lt;a href=&quot;http://static.flickr.com/32/48185870_8fa211670c_o_d.jpg&quot; onclick=&quot;window.open(&#39;http://static.flickr.com/32/48185870_8fa211670c_o_d.jpg&#39;,&#39;popup&#39;,&#39;width=434,height=398,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0&#39;);return false&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;See the name on the boat? It&#39;s the name of the main author of all the books, &lt;a href=&quot;http://www.cs.colorado.edu/~evi/Home.html&quot;&gt;Evi Nemeth&lt;/a&gt;, who is now retired and &lt;a href=&quot;http://www.cs.colorado.edu/~evi/sailing.html&quot;&gt;sailing across the world&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cool, isn&#39;t it? &lt;a href=&quot;http://www.randomhouse.com/doubleday/davinci/robertlangdon/&quot;&gt;Robert Langdon&lt;/a&gt; isn&#39;t the only one that can find &lt;a href=&quot;http://digg.com/links/Mystery_behind_numbers_in_Lost_solved_&quot;&gt;hidden symbols&lt;/a&gt; everywhere.&lt;br /&gt;&lt;br /&gt;These are really good books by the way. You should probably &lt;a href=&quot;http://www.amazon.com/exec/obidos/tg/detail/-/0130084662&quot;&gt;get a copy&lt;/a&gt; of the Linux version.</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112814630675539912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112814630675539912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112814630675539912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112814630675539912'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/09/judge-this-book-by-its-cover.html' title='Judge this Book by its Cover'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112788760724816441</id><published>2005-09-27T22:19:00.000-07:00</published><updated>2005-09-27T23:06:47.270-07:00</updated><title type='text'>The Lennon Syndrome</title><content type='html'>I have to confess that I&#39;m a &lt;a href=&quot;http://en.wikipedia.org/wiki/Beatlemania&quot;&gt;beatlemaniac&lt;/a&gt;. I have every single recording from &lt;a href=&quot;http://www.beatles.com/&quot;&gt;The Beatles&lt;/a&gt;, I have almost all &lt;a href=&quot;http://www.thebeatleshk.com/Filmography/&quot;&gt;the movies&lt;/a&gt;, I have &lt;a href=&quot;http://www.amazon.com/exec/obidos/tg/detail/-/B00008GKEG&quot;&gt;documentaries&lt;/a&gt;, I have t-shirts that draw people&#39;s attention and makes them strike conversation when I&#39;m wearing them, I know most of the &lt;a href=&quot;http://www.geocities.com/SunsetStrip/Limo/3518/&quot;&gt;lyrics&lt;/a&gt; to most of their &lt;a href=&quot;http://www.geocities.com/dsmurashev.geo/songs/&quot;&gt;songs&lt;/a&gt;, I can even &lt;a href=&quot;http://www.geocities.com/SunsetStrip/Lounge/7109/&quot;&gt;play&lt;/a&gt; some songs on the &lt;a href=&quot;http://www.gibson.com/Products/GibsonElectric/Gibson%20Electric%20Guitars/LesPaul/Standards/Standard&quot;&gt;guitar&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anyway, I&#39;ve noticed an interesting phenomenon about &lt;a href=&quot;http://www.bagism.com/&quot;&gt;John Lennon&lt;/a&gt;&#39;s life. When he was married to &lt;a href=&quot;http://cynthialennon.tripod.com/&quot;&gt;Cynthia&lt;/a&gt;, he was basically a good guy. I mean, he was a little crazy, but Cynthia, being very moderate and conservative, sort of kept him under control. On the other hand, when he was married to &lt;a href=&quot;http://www.instantkarma.com/yokomenu.html&quot;&gt;Yoko&lt;/a&gt;, he was out of control. He already had the tendency to do crazy stuff, but Yoko, instead of being the voice of sanity, encouraged him to be even crazier.&lt;br /&gt;&lt;br /&gt;I&#39;ve noticed that I have friends like this. Some of them get together with Yokos and it&#39;s all downhill from there. Some others get together with Cynthias and they do pretty well. I guess it&#39;s only human nature.&lt;br /&gt;&lt;br /&gt;By the way, there are &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;lr=&amp;amp;safe=off&amp;amp;c2coff=1&amp;amp;client=safari&amp;amp;rls=en&amp;amp;q=%22Lennon+syndrome%22&amp;amp;btnG=Search&quot;&gt;many other definitions&lt;/a&gt; of &quot;the Lennon syndrome&quot;.&lt;br /&gt;&lt;br /&gt;&lt;!-- technorati tags start --&gt;&lt;p style=&quot;text-align:right;font-size:10px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://www.technorati.com/tag/beatles&quot; rel=&quot;tag&quot;&gt;beatles&lt;/a&gt;, &lt;a href=&quot;http://www.technorati.com/tag/lennon&quot; rel=&quot;tag&quot;&gt;lennon&lt;/a&gt;&lt;/p&gt;&lt;!-- technorati tags end --&gt;</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112788760724816441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112788760724816441' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112788760724816441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112788760724816441'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/09/lennon-syndrome.html' title='The Lennon Syndrome'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112656475989194117</id><published>2005-09-12T15:35:00.000-07:00</published><updated>2005-09-26T22:23:02.543-07:00</updated><title type='text'>Windows 2000: got pid?</title><content type='html'>&lt;div&gt;If you get that joke, we want to hire you. We spent the entire last month working out various Windows 2000 problems in &lt;a href=&quot;http://www.bitkeeper.com&quot;&gt;BitKeeper&lt;/a&gt;, most of them related to the agressive reuse of PIDs that Windows 2000 does.&lt;br /&gt;&lt;br /&gt;BitKeeper uses &lt;a href=&quot;http://www.msys.org&quot;&gt;MSYS&#39;s&lt;/a&gt; bash as a shell. it turns out that bash does not like PIDs to be reused. Here&#39;s the scenario. Bash launches processes &lt;em&gt;A&lt;/em&gt;, &lt;em&gt;B&lt;/em&gt;, and &lt;em&gt;C&lt;/em&gt;. Due to the PID recycling of Windows 2000, both &lt;em&gt;A&lt;/em&gt; and &lt;em&gt;C&lt;/em&gt; get the same PID. This is possible because PIDs are guaranteed to be unique only while the process is running. If &lt;em&gt;A&lt;/em&gt; finishes before &lt;em&gt;C&lt;/em&gt; is started, &lt;em&gt;C&lt;/em&gt; can, and will, get the same PID as &lt;em&gt;A&lt;/em&gt;. The problem is that whenever bash waits for a process, it records whether it has already waited on it or not. When bash needs to wait for &lt;em&gt;C&lt;/em&gt;, it sees in its table that it has already waited for that PID (because of &lt;em&gt;A&lt;/em&gt;) and decides not to wait.&lt;br /&gt;&lt;br /&gt;What are the symptoms? Well, to sum it up in one phrase: &lt;strong&gt;unintended parallelism&lt;/strong&gt;. Needless to say, this wrecks havoc in every shell script ever written. It&#39;s like the system randomly adding an ampersand (&amp;#38;) at the end of every line of the script. Not very nice.&lt;br /&gt;&lt;br /&gt;Microsoft seems to have fixed the problem of PID recycling in later versions of Windows. Neither XP nor 2003 reuse PIDs like Windows 2000.&lt;br /&gt;&lt;br /&gt;I back-ported a patch to bash 2.05b into bash 2.04 that fixes this issue. I&#39;ll post it to the MSYS mailing list later this week.&lt;br /&gt;&lt;br /&gt;By the way, I think that a cool idea for a T-Shirt would be the title of this post: &quot;Windows 2000: got PID?&quot;&lt;/div&gt;&lt;br /&gt;&lt;!-- technorati tags start --&gt;&lt;p style=&quot;text-align:right;font-size:10px;&quot;&gt;Technorati Tags: &lt;a href=&quot;http://www.technorati.com/tag/windows&quot; rel=&quot;tag&quot;&gt;windows&lt;/a&gt;&lt;/p&gt;&lt;!-- technorati tags end --&gt;</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112656475989194117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112656475989194117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112656475989194117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112656475989194117'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/09/windows-2000-got-pid.html' title='Windows 2000: got pid?'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112623911079892671</id><published>2005-09-08T21:06:00.000-07:00</published><updated>2005-09-09T10:02:16.990-07:00</updated><title type='text'>Apple&#39;s CoreData</title><content type='html'>I&#39;m sitting here at the &lt;a href=&quot;http://www.cocoaheads.org/&quot;&gt;Cocoa Heads&lt;/a&gt; meeting at Apple&#39;s headquarters in Cupertino, and &lt;a href=&quot;http://theocacao.com/&quot;&gt;Scott Stevenson&lt;/a&gt; is talking about &lt;a href=&quot;http://www.cocoadevcentral.com/articles/000086.php&quot;&gt;CoreData&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;There are a couple of Apple employees here in the room answering questions, and from what I&#39;m hearing, here&#39;s my assessment of CoreData: stay the hell away from it. At least for a couple of years. &lt;br /&gt;&lt;br /&gt;I&#39;m surprised that people are still looking for the holy grail of data-driven applications: create them without programming. The problem is that this works for trivial applications. If you have any application that&#39;s big enough, or popular enough that has to be maintained, &lt;b&gt;these tools just don&#39;t work&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;I have yet to hear from an application built this way that&#39;s easily maintainable...&lt;br /&gt;&lt;br /&gt;Oh, by the way, CoreData&#39;s NSPredicate class doesn&#39;t support Outer Joins.</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112623911079892671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112623911079892671' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112623911079892671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112623911079892671'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/09/apples-coredata.html' title='Apple&#39;s CoreData'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112619852217488130</id><published>2005-09-08T09:52:00.000-07:00</published><updated>2005-09-08T09:55:22.180-07:00</updated><title type='text'>Flame Wars Galore</title><content type='html'>Now this is just stupid... two secretaries get into a flame war over a ham sandwich and they get sacked?&lt;br /&gt;&lt;br /&gt;Talk about extreme disciplinary action! If I were their boss I would have just bought them both ham sandwiches and let them cool off...&lt;br /&gt;&lt;br /&gt;I don&#39;t know how people expect to have employees &quot;not use email for personal purposes&quot;. The whole idea about employee retention is that you want them to be as personal to the company as they possibly can. If they feel like they belong to the company, they will get personal.</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112619852217488130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112619852217488130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112619852217488130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112619852217488130'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/09/flame-wars-galore.html' title='Flame Wars Galore'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-112026768111058792</id><published>2005-07-01T17:52:00.000-07:00</published><updated>2005-07-05T23:12:59.696-07:00</updated><title type='text'>I know how to program in...</title><content type='html'>I&#39;ve been reviewing a number of resumes for programming positions because &lt;a href=&quot;http://www.bitkeeper.com/Jobs.html&quot;&gt;we&#39;re hiring programmers&lt;/a&gt; and I&#39;ve started wondering what it means to know a programing language.&lt;br /&gt;&lt;br /&gt;For some people it seems it means &quot;I can write hello world in it&quot;, and they list dozens of programing languages. From a resume reviewer point of view, this makes it very difficult to see at what level the candidate knows a language. It&#39;d be much better to list only a few and give examples of the programs built on those.&lt;br /&gt;&lt;br /&gt;What I&#39;m looking for in a programer basically boils down to this: &quot;can they come up with general purpose abstractions that give the program a self-consistent architecture or do they copy and paste blobs of code to get the job done?&quot;.</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/112026768111058792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/112026768111058792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112026768111058792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/112026768111058792'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/07/i-know-how-to-program-in.html' title='I know how to program in...'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-111843758355354095</id><published>2005-06-10T14:03:00.000-07:00</published><updated>2005-07-01T17:51:41.873-07:00</updated><title type='text'>Sun NVRAM Madness</title><content type='html'>A few weeks ago I had to troubleshoot a Sun Ultra-10 system. Oh, the memories of working for a Sun Microsystems reseller and learning how to program in Forth. Anyway, as part of my debugging, I usually turn the diag-switch? to true in the OpenBoot prompt. What I&#39;m saying is, I press &lt;code&gt;Stop-a&lt;/code&gt; and at the OpenBoot prompt type:&lt;br /&gt;&lt;br /&gt;&lt;p id=&quot;xcodebox&quot;&gt;&lt;code&gt;ok? setenv diag-switch? true&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Now for the catch. When you turn the diag-switch? on the output is printed in the &lt;strong&gt;serial console&lt;/strong&gt;. This means the first serial port. If you don&#39;t have a serial console, and you&#39;re using the system with a monitor and keyboard, you&#39;ll find yourself staring at a dark screen for a couple of minutes while the diagnostics run. &lt;br /&gt;&lt;br /&gt;It&#39;s really easy to think the machine is busted if you don&#39;t know what&#39;s going on. And that is precisely what happened to me. &lt;br /&gt;&lt;br /&gt;Now for the punchline. Apple&#39;s computers also use Open Firmware, the incantation is &lt;code&gt;Option-Command-o-f&lt;/code&gt;. Once you&#39;re in Apple&#39;s OpenFirmware prompt, you can also turn diag-switch? on. Guess what happens... yup, a few minutes staring at a dark screen thinking the machine had died. Only Apple computers don&#39;t really have a serial port.</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/111843758355354095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/111843758355354095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/111843758355354095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/111843758355354095'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/06/sun-nvram-madness.html' title='Sun NVRAM Madness'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6076131.post-111345333416892389</id><published>2005-04-13T21:20:00.000-07:00</published><updated>2005-09-09T10:06:28.146-07:00</updated><title type='text'>Why a free BitKeeper clone was a bad idea (which time had come)</title><content type='html'>I&#39;ve been reading &lt;a href=&quot;http://developers.slashdot.org/article.pl?sid=05/04/06/140202&amp;tid=163&quot;&gt;all&lt;/a&gt; &lt;a href=&quot;http://linux.slashdot.org/article.pl?sid=05/04/09/2136247&amp;amp;tid=106&quot;&gt;the &lt;/a&gt;&lt;a href=&quot;http://linux.slashdot.org/article.pl?sid=05/04/11/1413232&amp;tid=99&amp;amp;tid=106&quot;&gt;comments &lt;/a&gt;about the &lt;a href=&quot;http://www.bitkeeper.com/press/2005-04-05.html&quot;&gt;end-of-life&lt;/a&gt; of &lt;a href=&quot;http://www.bitkeeper.com/&quot;&gt;BitKeeper&lt;/a&gt;, the source control management system used by the Linux kernel developers. After plodding through hundreds of comments I began to understand how little the general public knows about the operation of BitKeeper and why having a free (as in speech) BitKeeper clone from anyone besides BitMover was a bad idea. Let me explain.&lt;br /&gt;&lt;br /&gt;First, lets establish some context. According &lt;a href=&quot;http://os.newsforge.com/article.pl?sid=05/04/11/118211&amp;tid=2&amp;amp;tid=25&amp;tid=3&quot;&gt;to this article&lt;/a&gt;, Larry McVoy had two reasons for dropping the free (as in beer) BitKeeper program: (1) Corruption, and (2) IP Loss. He goes on to explain how repository corruption would have caused major problems and how his IP would have been compromised by the free clone. Not many people bought it. To be sincere, I didn&#39;t buy it at first, but after thinking about it and thinking about BitKeeper&#39;s mode of operation, I decided that Larry McVoy is completely right. Let me explain.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Corruption&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is Larry McVoy&#39;s explanation of corruption:&lt;br /&gt;&lt;span style=&quot;&quot;&gt;&lt;blockquote&gt;BK is a complicated system, there are &gt;10,000 replicas of the BK database holding Linux floating around. If a problem starts moving through those there is no way to fix them all by hand. This happened once before, a user tweaked the ChangeSet file, and it costs $35,000 plus a custom release to fix it.&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;Many people deemed this problem as a simple bug in the BitKeeper server. Others saw it as bad design. Few people understood that it was neither, and the corruption would have been inevitable.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Working with distributed systems is different than working in a client-server environment.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Client-server environments have a well defined protocol (or an API) used to pass data between the client and the server. There is a layer of abstraction between the data files the server uses to represent the data, and the data exchange that takes place. It should not be possible to corrupt the server&#39;s data by using (or abusing) the protocol. Most of us feel really comfortable with this model. Most of the software in the world behaves this way.&lt;br /&gt;&lt;br /&gt;Distributed systems (and peer to peer systems) behave slightly different. There is no server, and there is no client. Instead, a collection of peers interact by passing data between themselves. There is usually a protocol for transferring the data, and that protocol should have the same properties of a client-server protocol, but there is a slight difference. Each peer has a copy of the data files that in the client-server model belong only to the server. This is an important difference.&lt;br /&gt;&lt;br /&gt;BitKeeper belongs to the second class of systems. A BitKeeper repository consists of not only the data (source code), but also all the metadata needed for revision control. Each user has a full copy of the repository, including all the history. There are two ways in which users can exchange data in BitKeeper: (1) clones, which amount to no more than creating a tarball of the entire repository and transferring it to the requesting peer (using, say HTTP), and (2) push/pull, which have some proprietary protocol for transferring ChangeSets between the peers. Note that these repositories contain all the internal data files that BitKeeper uses to manage the changes.&lt;br /&gt;&lt;br /&gt;Now imagine a free BitKeeper program, let&#39;s call it FreeBK (FBK). It is reasonable to assume that FBK will corrupt repositories. After all, it&#39;s dealing with proprietary data file formats and its authors are learning, by reverse-engineering the data files, what are the invariants that BitKeeper maintains.&lt;br /&gt;&lt;br /&gt;Now imagine a developer with access to both BK and FBK. This developer can clone repositories using either tool. BK will notice corrupt repositories and warn him. FBK however, still lacks the ability to detect certain kinds of corruption. If he chooses to &lt;span style=&quot;font-style: italic;&quot;&gt;clone&lt;/span&gt; a repository with FBK, the corruption has already spread. Working on top of this bad repository is fraught with danger. Work might be lost, bad ChangeSets could be spread (using either BK or FBK, as the corruption is now hidden under new ChangeSets), and information obtained from this repository can no longer be trusted (diffs and such).&lt;br /&gt;&lt;br /&gt;If said developer has a commercial BitKeeper license, he will certainly call BitMover support and expect them to fix his corrupt repository and help him recover his work. In order to be able to do this, BitMover would have to track FreeBK and be aware of the ways in which it can cause corruption. This is clearly a very big support load for BitMover.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Loss of intellectual Property&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The other reason Larry McVoy has for not wanting a Free BitKeeper program is loss of IP. The best way I can explain how this is a real problem is by comparing it to the PalmPilot.&lt;br /&gt;&lt;br /&gt;When USRobotics came up with the PalmPilot, they had a very simple, but very important, insight: &lt;span style=&quot;font-style: italic;&quot;&gt;computers sucked at recognizing handwriting, but people are very good at learning how to draw new symbols&lt;/span&gt;. The Apple Newton had been a big failure, mainly because it never recognized what users wrote. The PalmPilot required users to learn a new simple alphabet, and that simplified the problem of handwriting recognition the point where the PalmPilot got it correct 99.9% of the time. This idea was very hard to come up with, and very expensive to develop, but once you have seen it done, it is obvious and very easily copied.&lt;br /&gt;&lt;br /&gt;How is this related to BitKeeper? Well, anyone who has used BitKeeper knows that there are some ideas in it that are as simple as the handwriting recognition in the PalmPilot. Once you have seen them, they become obvious. Now, BitMover has already paid a big price for coming up with this ideas, and another big sum for developing them, but they are trivial to copy. You can see how it would not be in BitMover&#39;s best interest to have developers of competing source control management systems using BitKeeper.&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;A BitKeeper Free Linux&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Overall, I think having BitKeeper was really good for both the Linux kernel and BitMover. It gave BitMover much needed visibility when it was a small company, and it gave the Linux kernel developers a much needed tool when they needed it the most.&lt;br /&gt;&lt;br /&gt;Like every relationship, there has to be about equal giving from both sides in order to continue. In this case, I think the breakup was inevitable as BitMover was giving more to Linux than it was receiving from it. I mostly feel sorry for all the small Open Source projects that used BitKeeper for managing their source. Also for those of us that used it for keeping personal files in single-user mode. We have lost a very powerful free (gratis) tool.&lt;br /&gt;&lt;br /&gt;On the other hand, I feel projects like monotone, darcs, arch, etc. will get a much needed push by the community to produce better tools. It will probably take them a couple of years to be as good as the BitKeeper of today, and by then BitMover might have come up with a new and improved BitKeeper. But by then the open source community will have very good tools and people with money will be able to buy state-of-the-art tools. Isn&#39;t that the way the world works?</content><link rel='replies' type='application/atom+xml' href='http://obonilla.blogspot.com/feeds/111345333416892389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6076131/111345333416892389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/111345333416892389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6076131/posts/default/111345333416892389'/><link rel='alternate' type='text/html' href='http://obonilla.blogspot.com/2005/04/why-free-bitkeeper-clone-was-bad-idea.html' title='Why a free BitKeeper clone was a bad idea (which time had come)'/><author><name>Oscar Bonilla</name><uri>http://www.blogger.com/profile/14612545365214391754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://static.flickr.com/28/47355803_aeb57fc3a6_m.jpg'/></author><thr:total>0</thr:total></entry></feed>