<?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: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-13928429</id><updated>2011-12-31T11:26:51.323-07:00</updated><title type='text'>Random bits from Mike Fisk</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13928429.post-5593806639698502731</id><published>2009-06-09T17:22:00.005-06:00</published><updated>2009-06-09T17:29:58.895-06:00</updated><title type='text'>Traveler's Manifesto</title><content type='html'>When I check in to a hotel, there are few simple (cheap) things I'm looking for:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A desk with power outlets on the desk (e.g. in the lamp) for my laptop and cell phone&lt;/li&gt;&lt;li&gt;  Decent lighting, especially near the desk&lt;/li&gt;&lt;li&gt;A shower I can stand up in&lt;/li&gt;&lt;li&gt;A shower head that is high enough to get my hair wet&lt;/li&gt;&lt;li&gt;A bed at least close to the same length as me (e.g. King only)&lt;/li&gt;&lt;/ul&gt;I just checked into a pretty new Hyatt Place "suite" that looks flashy with its 42" HDTV, media center, couch with ottoman, and granite wet bar, but it manages to fail at all of the first three items.   I thought business hotels had figured this out by now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-5593806639698502731?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/5593806639698502731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=5593806639698502731' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/5593806639698502731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/5593806639698502731'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2009/06/travelers-manifesto.html' title='Traveler&apos;s Manifesto'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-119768811834567265</id><published>2007-09-29T18:02:00.000-06:00</published><updated>2007-09-29T20:33:10.808-06:00</updated><title type='text'>Spot the Terrorist</title><content type='html'>&lt;span style="font-size:100%;"&gt;There are many definitions for "terrorist."  I like this one:  "&lt;/span&gt;&lt;span style="font-size:-1;"&gt;&lt;span style="font-size:100%;"&gt;one who utilizes the systematic use of violence and intimidation to achieve political objectives."&lt;/span&gt;&lt;span style="font-size:100%;"&gt;   But who's using intimidation and violence in these scenarios:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The dictator or the &lt;a href="http://www.thenation.com/doc/20040329/scheer"&gt;president who lies&lt;/a&gt; about the dictator's plans and &lt;a href="http://www.guardian.co.uk/Iraq/Story/0,,2170275,00.html"&gt;invades his country resulting in over a million deaths&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The &lt;a href="http://www.boston.com/news/globe/city_region/breaking_news/2007/09/mit_student_arr.html"&gt;student wearing a circuit board, or the police who threatened to kill her&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The people calling for peace or the people saying that &lt;a href="http://http://www.washingtonpost.com/wp-dyn/content/article/2006/10/30/AR2006103000530.html"&gt;terrorists will win&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The &lt;a href="http://en.wikipedia.org/wiki/2007_Boston_Mooninite_scare"&gt;people placing advertisements or the people who think they're bombs&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;If you are scared all the time, even when people aren't trying to hurt you, then you are letting the terrorists win.  Instead, hold the American ideals above all and refuse to give in to the terrorists and fear mongers.  Don't elect candidates who run on a platform of fear.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;Those Who Sacrifice Liberty For Security Deserve Neither.  --- Benjamin Franklin&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-119768811834567265?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/119768811834567265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=119768811834567265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/119768811834567265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/119768811834567265'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2007/09/spot-terrorist.html' title='Spot the Terrorist'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-7317942980790382288</id><published>2007-07-22T10:26:00.000-06:00</published><updated>2007-07-22T10:41:01.915-06:00</updated><title type='text'>How to make sure I don't buy your product</title><content type='html'>&lt;ol&gt;&lt;li&gt;Promise to sue anybody who reveals flaws in it.  &lt;a href="http://www.hidcorp.com/"&gt;HID Global&lt;/a&gt; has done this with their RFID-based proximity cards.  Knowing about vulnerabilities in your access control devices would be a real bummer.  Blissful ignorance would surely be preferable (not).  HID's catchphrase is "HID -- The Trusted Brand".  I guess in the absence of facts, your customers will just have to trust you.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When asked if you support platform X, tell me I should use a "real OS".  &lt;a href="http://www.bmc.com/"&gt;BMC&lt;/a&gt; is an enterprise software company that brought some sales engineers on site just to tell me that.  That was around 1996 and the OS was Linux.  On their website today, Linux is the third item on their "Featured Technologies" list.  Ironically, "Mainframe Management", their historical focus, is number four.   I'm glad they've caught on, but I think  I'll look for software from a company with "real vision".&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-7317942980790382288?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/7317942980790382288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=7317942980790382288' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/7317942980790382288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/7317942980790382288'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2007/07/how-to-make-sure-i-dont-buy-your.html' title='How to make sure I don&apos;t buy your product'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-4595448798228535113</id><published>2007-06-05T15:06:00.000-06:00</published><updated>2007-06-09T18:57:25.225-06:00</updated><title type='text'>Handheld AJAX</title><content type='html'>For those of us trying to provide network application services to mobile PDAs and Smart Phones these days, we have a few options for how to write and structure apps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Platform-specific client-server (BlackBerry, Palm, Windows, Symbio, etc.)&lt;/li&gt;&lt;li&gt;Synchronous browser&lt;/li&gt;&lt;li&gt;Synchronous remote display (e.g. VNC)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Java Client-server (J2ME Midlets)&lt;/li&gt;&lt;li&gt;Asynchronous browser (AJAX)&lt;/li&gt;&lt;/ol&gt;Platform-specific apps (#1) are a show-stopper for me --- there are too many platforms and they're too different.  A plain browser (#2) is ubiquitous, but the high latency and low bandwidth of a lot of mobile networks makes it pretty painful to use.   A remote display technology like VNC (#3) would suffer even more from network issues.&lt;br /&gt;&lt;br /&gt;J2ME (#4) is a pretty nice technology --- although I don't think a lot of the VM implementations are designed to run multiple non-game applications in a user-friendly way.   No offense to Java, but the world seems to like AJAX apps (#5) better, so for mobile e-mail, I'm going to try out &lt;a href="http://www.claros.org/web/showProduct.do?id=3"&gt;Claros Mini.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The other tie-breaker is that options #1 and #4 require local storage and enable offline operation.  Option #5 can optionally do that using technology like Google Gears, or it can work in a purely stateless mode to the client.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-4595448798228535113?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/4595448798228535113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=4595448798228535113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/4595448798228535113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/4595448798228535113'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2007/06/handheld-ajax.html' title='Handheld AJAX'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-8320742009359085065</id><published>2007-06-02T15:43:00.000-06:00</published><updated>2007-06-05T11:14:40.808-06:00</updated><title type='text'>Windows Mobile Redux</title><content type='html'>I finally broke down and bought a T-Mobile Dash (a branded &lt;a href="http://www.htc.com/product/03-product_s620.htm"&gt;HTC s620&lt;/a&gt;) running Windows Mobile.  It has WiFi, GPRS/EDGE, 4 bands, Bluetooth 2.0, a QWERTY keyboard, QVGA screen, Micro SD, 1.3MP camera, stereo, etc.  This device is better than the Palm I tried a few months ago and better than the Window Mobile iPaq I bought at work some time ago.   But there is still plenty of work to do:&lt;br /&gt;&lt;br /&gt;For Microsoft:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;  Upgrading the OS from 5.0 to 6.0 erases all of the files.  What kind of lame OS upgrade is that?&lt;/li&gt;&lt;li&gt;  There is no built-in functionality to backup to SD card (see above)&lt;/li&gt;&lt;li&gt;  I can route laptops via a Bluetooth Personal Area Network (PAN) using the "Internet Sharing" app, but I have to poke that app each time I bring up my laptop --- and it only supports one laptop at a time.   Better yet, I would like to bring-up the Dash's WiFi in AP mode and skip Bluetooth altogether. &lt;/li&gt;&lt;li&gt;  The "ClearVue" Microsoft Office viewer apps are only viewers.  I can't even make a simple spreadsheet.  They're copyright Westtek, LLC.  If Microsoft can't even write editors for MS office docs, it's definitely time to switch to OpenOffice.&lt;/li&gt;&lt;/ul&gt;For T-Mobile:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; T-mobile doesn't expose the upgrade download to the phone's browser -- only to full-blown browsers.&lt;/li&gt;&lt;li&gt; T-mobile still wants to sell you SMS service in addition to Internet, so they want you to use their IM client that routes all messages over SMS.  It's a good use of SMS, except that you have to pay separately for it.  AOL is all too happy to fuel this business model, so they don't advertise any mobile IM clients.  I'll take my IM over the Internet, thank you very much.   &lt;a href="http://www.octro.com/"&gt;OctroTalk&lt;/a&gt; is a free Jabber client with support for transports for AIM, etc. and works quite nicely.  I don't know how T-Mobile expects you to IM if you're in a location served only by WiFi.&lt;/li&gt;&lt;li&gt; T-mobile really wants to capitalize on their HotSpot business unit, so they really want you to pay $10/mo extra for HotSpot access.  You have to work hard to get a plan without it.&lt;/li&gt;&lt;/ul&gt;For other software authors:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Java VM that comes on the Dash (Jeodek by Esmertec AG) only runs one app at a time and doesn't let you permanently allow an app to use the network without being prompted.&lt;/li&gt;&lt;li&gt; Google provides a nice Java client for Gmail, but it doesn't alert me when I have new messages or let me download attachments.  The built-in POP/IMAP client might be nice, but Gmail doesn't support IMAP and POP would get me out of sync.   Help, Google!&lt;/li&gt;&lt;li&gt; Minimo, the Firefox variant for mobiles, doesn't even successfully start for me, although others report better luck on the same device.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The best news is that vendors are getting better about providing "over-the-air (OTA)" software installs rather than just installers for a Windows PC that is supposed to then sync the app to the mobile.  And T-Mobile EDGE service is giving me just shy of 200kb/s, which isn't too shabby for this sort of device  --- broadband for my 486 with 1024x768 screen was 128kb/s ISDN.  Although round-trip latency averages 900ms (ranges between 400ms and 2600ms), which hurts TCP and makes tty apps difficult.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-8320742009359085065?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/8320742009359085065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=8320742009359085065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/8320742009359085065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/8320742009359085065'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2007/06/windows-mobile-redux.html' title='Windows Mobile Redux'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-6961100930251446198</id><published>2007-04-20T20:41:00.000-06:00</published><updated>2007-04-20T20:59:33.169-06:00</updated><title type='text'>The Green Grid</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_HTBLELN4jTU/Ril6Bwz1BRI/AAAAAAAABQs/CU7YLXpw6SA/s1600-h/powerloss.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_HTBLELN4jTU/Ril6Bwz1BRI/AAAAAAAABQs/CU7YLXpw6SA/s320/powerloss.png" alt="" id="BLOGGER_PHOTO_ID_5055706227400836370" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;&lt;a href="http://marketplace.publicradio.org/"&gt;Marketplace&lt;/a&gt; &lt;/span&gt;had a story on a tech consortium called &lt;a href="http://www.thegreengrid.org/"&gt;&lt;span style="font-style: italic;"&gt;The Green Grid&lt;/span&gt;&lt;/a&gt;, which is creating standards for measuring and improving server-room efficiency.  The accompanying figure, which occurs in their white paper &lt;span style="font-style: italic;"&gt;The Green Grid Opportunity, &lt;/span&gt;shows how 35% of the electricity used by a server can be lost to power and head conversions.  Another rule of thumb says that cooling the machine room may double your electricity costs.&lt;br /&gt;&lt;br /&gt;And kudos to &lt;span style="font-style: italic;"&gt;Marketplace&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;/span&gt;for providing text transcripts, as well as audio, of their segments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-6961100930251446198?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/6961100930251446198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/6961100930251446198'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2007/04/green-grid.html' title='The Green Grid'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_HTBLELN4jTU/Ril6Bwz1BRI/AAAAAAAABQs/CU7YLXpw6SA/s72-c/powerloss.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-6521271835466255539</id><published>2007-02-11T21:58:00.000-07:00</published><updated>2007-02-11T22:17:21.031-07:00</updated><title type='text'>Wikanalysis</title><content type='html'>While channel surfing this weekend, I stumbled onto the documentary &lt;a style="font-style: italic;" href="http://www.worldlinktv.com/programming/programDescription.php4?code=truth1"&gt;Press for Truth&lt;/a&gt;, which is based in large part on the &lt;a href="http://www.cooperativeresearch.org/project.jsp?project=911_project"&gt;9/11 timeline&lt;/a&gt; that has been built at &lt;a href="http://www2.blogger.com/www.cooperativeresearch.org"&gt;cooperativeresearch.org&lt;/a&gt;.  The timeline is entirely based on open-source literature and every bit has a citation (usually multiple citations).  I found it more useful than PBS's &lt;a href="http://www.pbs.org/americarebuilds/"&gt;America Rebuilds&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-6521271835466255539?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/6521271835466255539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=6521271835466255539' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/6521271835466255539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/6521271835466255539'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2007/02/wikanlysis.html' title='Wikanalysis'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-1732925807763961616</id><published>2007-02-02T13:52:00.000-07:00</published><updated>2007-02-02T14:49:12.021-07:00</updated><title type='text'>How Often to Upgrade your "Enterprise Linux"</title><content type='html'>When you deploy a Linux distribution in your enterprise, you have to keep in mind that it's different than deploying just an operating system.  A good Linux distribution comes with all of the application software that you have to install and manage separately with a &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;commercial&lt;/span&gt; operating system like Windows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Office suite&lt;/li&gt;&lt;li&gt;Browser&lt;/li&gt;&lt;li&gt;E-mail client&lt;/li&gt;&lt;li&gt;&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;PDF&lt;/span&gt; viewer&lt;/li&gt;&lt;li&gt;SSH Client&lt;/li&gt;&lt;li&gt;Compilers and interpreters (C, C++, Java, Perl, Python, FORTRAN, etc)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Streaming media player&lt;/li&gt;&lt;li&gt;Desktop publishing software&lt;/li&gt;&lt;li&gt;Instant messaging software&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Diagram software&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Image editing software&lt;/li&gt;&lt;li&gt;Photo management software&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Drivers (network, printer, video, etc.)&lt;/li&gt;&lt;/ul&gt;So imagine if you installed all of the software that every user in the enterprise needed and then froze everything for a year or two.  Certainly your IT shop would enjoy not having to deploy new software all the time.  But the users and departments in many enterprises would revolt.   Inevitably some project will have a legitimate business case for using some new feature.  &lt;br /&gt;&lt;br /&gt;So don't expect to install and freeze a Linux distribution across your enterprise for very long.  The good news is that upgrading your distribution upgrades all of these applications at once and that your distribution provider should have done extensive integration testing for you.  To maximize the value you get from your distribution, you should choose one that does frequent releases, keeps pace with upstream software releases, and makes upgrades easy.  Unfortunately, some of the "enterprise" &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;Linux&lt;/span&gt; distributions like &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;RHEL&lt;/span&gt; are only released every 18 to 24 months.   &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Debian's&lt;/span&gt; "stable" releases have been just as far apart.   These "enterprise" distributions have very long-term support (7 years for &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;RHEL&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;I argue that what an enterprise needs is frequent high-quality releases that are easy to upgrade between --- not long-term support.  &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Ubuntu&lt;/span&gt; offers an excellent compromise by making a release every 6 months or so, but also by providing a "Long-Term Support" release about every 2 years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-1732925807763961616?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/1732925807763961616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=1732925807763961616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/1732925807763961616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/1732925807763961616'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2007/02/how-often-to-upgrade-your-enterprise.html' title='How Often to Upgrade your &quot;Enterprise Linux&quot;'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-116715089370962854</id><published>2006-12-26T09:34:00.001-07:00</published><updated>2007-02-02T14:56:12.717-07:00</updated><title type='text'>Not paying attention</title><content type='html'>I continue to be underwhelmed by the hardware and software engineering in the mobile device market.  A year or two ago I got a top-of-the-line hires &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;iPaq&lt;/span&gt; running Windows Mobile (or whatever they call &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;WinCE&lt;/span&gt; now).  After that, I swore off Windows Mobile.  For Christmas, my wife gave me a Palm &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;LifeDrive&lt;/span&gt;.  I haven't had a Palm since they were made by US Robotics about 10 years ago.  I'm surprised how many things they've missed:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-weight: bold;"&gt;Single-threaded blocking operation.&lt;/span&gt;&lt;/i&gt; When the web browser is partway through receiving a page,  the device is totally wedged.  You can't stop the download, scroll the screen, or switch apps.  In a few (or several) seconds, it may handle your input event.    I'm not asking for threads, just a reasonable event loop and some non-blocking functions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Memory Protection.&lt;/span&gt;&lt;/span&gt;  Palms run on ARM chips that have &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;MMUs&lt;/span&gt;, but individual apps routinely crash the whole system.  In fact, it's less reliable than my ancient Palm.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;Hardware Packaging.&lt;/span&gt;  &lt;/span&gt;My &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;LifeDrive&lt;/span&gt; is probably supposed to compete with &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;iPods&lt;/span&gt;.  But it's significantly thicker than my 2&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;nd&lt;/span&gt;-generation 30GB &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;iPod&lt;/span&gt; and an absolute brick compared to today's 30GB &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;iPods&lt;/span&gt;.  And they only put 4GB inside.  Yes, it has a much larger screen, it's a touch screen, and it has decent speakers, but I really think they could have made this device half as thick.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Standard Connectors.&lt;/span&gt;  My Motorola &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;RAZR&lt;/span&gt; phone made me realize that every gadget should use a mini-&lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;USB&lt;/span&gt; connector for DC power and data.   But Palm (and Compaq) stick with these proprietary brittle plastic  connectors and a custom &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;USB&lt;/span&gt; cable to connect to them.&lt;br /&gt;&lt;br /&gt;It won't help the hardware problems, but ACCESS (the parent company of &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;PalmSource&lt;/span&gt;, the software spin-off of Palm, Inc.) is (finally) developing a Linux-based Palm environment.  I installed a community-developed Linux on my Palm, but the &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;WiFi&lt;/span&gt; and &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Bluetooth&lt;/span&gt; aren't supported yet, so it's not all that functional.  But the &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;UI&lt;/span&gt; was much more compact and the &lt;span onclick="BLOG_clickHandler(this)" class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;PIM&lt;/span&gt; apps look just fine.&lt;br /&gt;&lt;br /&gt;Anyway, I returned the Palm because it was basically useless for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-116715089370962854?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/116715089370962854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=116715089370962854' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/116715089370962854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/116715089370962854'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/12/not-paying-attention_26.html' title='Not paying attention'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-115387679412391303</id><published>2006-07-25T19:19:00.000-06:00</published><updated>2006-07-25T19:21:55.156-06:00</updated><title type='text'>Illogic First, Security Second (or third or...)</title><content type='html'>The place that I work is supposed to be very conscientious about safety and security.  Why?  Well, because our sponsors manage based on metrics and compliance rather than harder to quantify measures of success and effectiveness, so they fixate on things like days of lost work and such.    &lt;br /&gt;&lt;br /&gt;But sometimes the place I work can't see the forest for the trees.  As a cost savings matter, they are removing the security guards that guard the entrance to where I work.  As a result, we, the technical staff, are being held responsible for enforcing physical security.  This means making sure that people don't follow other people through, and generally acting like your a bouncer.  We're not really thrilled that it's now our responsibility to be part-time security guards.  If this was just a normal office building, it might be tolerable, but we have classified information and materials in the area and our security perimeter is presumably supposed to provide some challenge to a professional military or terrorist attack.  For example, the guards that we've replaced carry pretty large guns around.&lt;br /&gt;&lt;br /&gt;To make matters worse, the cost savings from eliminating guards at our building is being drastically overwhelmed by the creation of a new "toll plaza" of guards checking vehicle traffic to make sure you don't have a Ryder truck full of fertilizer.  Of course, you'll be able to run that "toll booths" and quickly detonate your fertilizer anyway.  So in my estimation it's net loss in safety/security and an increase in cost.  &lt;br /&gt;&lt;br /&gt;After it became clear that official complaining wasn't going to fix anything, I decided to declare a "Stop Work" today.  Every employee is empowered (in fact obligated) to declare such a thing when they see unsafe or insecure behavior.  The apparent official reaction was to over-rule my "stop work" without any resolution, as far as I can tell.&lt;br /&gt;&lt;br /&gt;So what is the real safety and security culture here?  Well, on my way home tonight, the traffic backs up on the main street and one guy partially blocks the intersection (with a light) to our parking lot.  I honk  at him for breaking the law by obstructing the intersection and blocking those of us who now have a green light.  His reaction is to get irate and yell at me.  That seems to sum up my day pretty well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-115387679412391303?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/115387679412391303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=115387679412391303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/115387679412391303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/115387679412391303'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/07/illogic-first-security-second-or-third.html' title='Illogic First, Security Second (or third or...)'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-115007899739986883</id><published>2006-06-11T20:23:00.000-06:00</published><updated>2006-06-11T20:23:17.453-06:00</updated><title type='text'>Get a Second Life</title><content type='html'>It's nice that Google puts their colloquia up on the web for people to watch.  They had &lt;a href="http://video.google.com/videoplay?docid=-5182759758975402950"&gt;an interesting talk&lt;/a&gt; from the folks at &lt;a href="http://www.secondlife.com/"&gt;Second Life&lt;/a&gt;, an online VR environment that has created an actual economy of its own.  The talk made it sound pretty interesting and I've played with the Flatland environment, so I thought I'd take a look.  There's a lot of collective work that's been put into it, but to be honest, I couldn't find any of the neat things they described in the talk.  But the talk is definitely worth watching.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-115007899739986883?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/115007899739986883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=115007899739986883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/115007899739986883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/115007899739986883'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/06/get-second-life.html' title='Get a Second Life'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-114913208287963685</id><published>2006-05-31T21:21:00.000-06:00</published><updated>2006-07-25T19:34:38.226-06:00</updated><title type='text'>Battle of the Lambdas</title><content type='html'>My colleagues and I are debating the relative merits of C++ and Python for an upcoming programming project.  As an example of the "codability" of both languges, here's how  I would implement function passing to iterate over a container in a thread-safe way:&lt;br /&gt;&lt;br /&gt;Python:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class AtomicList:&lt;br /&gt;    def __init__(self):&lt;br /&gt;         _list = []&lt;br /&gt;        _lock = threading.Lock()&lt;br /&gt;&lt;br /&gt;    def append(self, x):&lt;br /&gt;         _list += x&lt;br /&gt;&lt;br /&gt;    def foreach(self, f):&lt;br /&gt;        self._lock.acquire()&lt;br /&gt;        for x in _list: f(x)  &lt;br /&gt;        self._lock.unlock()&lt;br /&gt;&lt;br /&gt;class Element:&lt;br /&gt;    def __init__(self, x):&lt;br /&gt;       self.value = x&lt;br /&gt;&lt;br /&gt;    def printer(self):&lt;br /&gt;        print self.x&lt;br /&gt;   &lt;br /&gt;MyList.append(Element(1))&lt;br /&gt;MyList.append(Element(2))&lt;br /&gt;&lt;br /&gt;MyList.foreach( lambda x: x.printer )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;C++ (with STL), the typing is static and the code really isn't any longer or more verbose.  But the biggest problem is the &lt;tt&gt;bind()&lt;/tt&gt; syntax and the fact that C++ wasn't designed to syntactically support lambdas and it's only because of templates and the type inference that a C++ compiler has to implement that you can trick it into doing these things.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;template &amp;lt;class T&amp;gt;&lt;br /&gt;class AtomicList : LockClass {&lt;br /&gt;    std::vector&amp;lt;t&amp;gt; _list;&lt;br /&gt;&lt;br /&gt;    void append(T x) {  &lt;br /&gt;        _list.push_back(x);&lt;br /&gt;    }&lt;br /&gt;    template &amp;lt;class C&amp;gt;&lt;br /&gt;    void foreach(C x) {&lt;br /&gt;        LockClass::lock();&lt;br /&gt;        std::for_each(_list-&gt;begin(), _list-&gt;end(), x);&lt;br /&gt;        LockClass::unlock()&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;template&amp;lt;class&amp;gt;&lt;br /&gt;class Element {&lt;br /&gt;  public:&lt;br /&gt;    Element (T x) : val(x) {}&lt;br /&gt;&lt;br /&gt;    void printer(int x) {&lt;br /&gt;        printf("%d\n", x);&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MyList&amp;lt;foo&amp;gt; intList;&lt;br /&gt;intList.append(Element(1));&lt;br /&gt;intList.append(Element(2));&lt;br /&gt;intList.foreach( bind(&amp;Foo::printer, _1) );&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-114913208287963685?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/114913208287963685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=114913208287963685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114913208287963685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114913208287963685'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/05/battle-of-lambdas.html' title='Battle of the Lambdas'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-114896113783836909</id><published>2006-05-29T21:52:00.000-06:00</published><updated>2006-05-29T21:52:17.880-06:00</updated><title type='text'>Higher-Order Programming and/or Dynamic Typing</title><content type='html'>What do the Cocoa, Qt, and Glib/Gtk GUI toolkits all have in common?  All three are event-driven frameworks and all three provide the capability to register callbacks and object attributes dynamically using string names.  And all three use plain C or C++ for most of their core libraries.&lt;br /&gt;&lt;br /&gt;While Qt does use C++ templates, it doesn't use them for &lt;a href="http://doc.trolltech.com/3.3/signalsandslots.html"&gt;Signals and Slots&lt;/a&gt;, their event mechanism.    Instead, Qt's &lt;a href="http://doc.trolltech.com/3.3/metaobjects.html"&gt;Meta Object System&lt;/a&gt; uses a C++ preprocessor to insert code that allows object introspection and performs a lot of type checking at runtime.  They point out that modern C++ compilers could do most or all of this with templates, but they have portability concerns.&lt;br /&gt;&lt;br /&gt;Apple's Cocoa uses the SmallTalk-like &lt;span style="font-style: italic;"&gt;messaging&lt;/span&gt; of Objective C to allow the sending of arbitrarily-named signals between objects.&lt;br /&gt;&lt;br /&gt;Glib uses a plain C runtime in which almost everything seems to be a "void *" with (hopefully) some run-time checking.  In my opinion, glib  duplicates too many things. For instance, instead of using (and defining when not provided by the system) ISO/IEC 988:1999 &lt;i&gt;stdint.h&lt;/i&gt; types, Glib defines its own "gushort" and the like.  Because there is almost no syntactic sugar (aside from a few basic macros), the Glib syntax is pretty cumbersome.&lt;br /&gt;&lt;br /&gt;Why do I care?  Well, for two reasons.  First, &lt;a href="http://smacq.sourceforge.net/"&gt;&lt;span style="font-style: italic;"&gt;smacq&lt;/span&gt;&lt;/a&gt; objects have attributes (&lt;span style="font-style: italic;"&gt;fields&lt;/span&gt; in my terminology) that are nominally described by strings, but in fact all operations in the run-time use numeric identifiers for efficiency.  Numeric identifiers are assigned at run-time in no predefined order, so modules have to explicitly lookup the number for the field(s) they want.  They are supposed to then save the numeric identifier and use it for the duration of the program.  Is the efficiency gain of numeric identifiers worth the pain of this added translation step?  I'm not sure.  Can I provide some clever syntactic sugar to make it easier to do these lookups?  Probably.&lt;br /&gt;&lt;br /&gt;Second, there are a lot of container data types in the &lt;span style="font-style: italic;"&gt;smacq&lt;/span&gt; implementation (mainly using STL classes).  To make access to these data structures thread-safe without trusting the caller to lock and unlock objects, I want to use higher-order programming where the caller provides a basic block of code to be applied to each element in the container.  In C terminology, that would be a callback function.  But I don't want to have unchecked "void *" pointers running around to encapsulate callback parameters. &lt;br /&gt;&lt;br /&gt;So instead, I'm using the Boost &lt;i&gt;&lt;a href="http://www.boost.org/doc/html/lambda.html"&gt;Lambda &lt;/a&gt;&lt;/i&gt;&lt;a href="http://www.boost.org/doc/html/lambda.html"&gt;Library&lt;/a&gt; which is pretty close to letting me pass lambda functions into my containers'  &lt;span style="font-style: italic;"&gt;foreach&lt;/span&gt; methods. &lt;br /&gt;&lt;br /&gt;One thing that's not obvious about C++ templates is that you can declare a function (not just a class and method) that is truly polymorphic --- it works on any type.  When the compiler comes across a place in the code where such a function is called, it determines whether or not the types being used with the function are adequate (e.g. provide the right methods and such).  If so, it generates an instance of the function specifically for that type.  Multiple instances may be created for different types.  Each of those instances has its own copy of the code, but at run-time there is  no type-checking or delayed binding that has to be done.&lt;br /&gt;&lt;br /&gt;As a result, a C++ compiler these days has a pretty powerful type-inference engine in order to deal with both templates and overloading.  The Boost Lambda Library makes extensive use of this.  Unfortunately, C++ still wasn't designed for lambdas and higher-order programming, so the syntax is painful and there are significant limitations.&lt;br /&gt;&lt;br /&gt;So how does this fully C++ approach compare to the dynamic approaches of the GUI toolkits.  Pretty well, I think.  They require that you have a callback function (or even a whole object) that is declared like any other function.  That's syntactically annoying for one-liners.  Type checking on the callbacks seems to be much weaker (even when including run-time checks).&lt;br /&gt;&lt;br /&gt;The only lingering question I'd like to see is a performance analysis of replicating statically typed code versus performing simple type checks or delayed binding in a smaller code base.  The prevailing wisdom seems  to be that smaller is faster.  If you look at the question of function inlining, which also increases code size, the ratio between CPU performance and memory performance seems to be wide enough (and purportedly widening) that non-trivial functions shouldn't be inlined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-114896113783836909?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/114896113783836909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=114896113783836909' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114896113783836909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114896113783836909'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/05/higher-order-programming-andor-dynamic.html' title='Higher-Order Programming and/or Dynamic Typing'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-114468502746966788</id><published>2006-04-10T10:03:00.001-06:00</published><updated>2006-04-10T10:03:47.470-06:00</updated><title type='text'>Progress and yet, no progress</title><content type='html'>Suppose you have a simple goal in mind:  You want your Mac laptop to be able to securely mount a filesystem on your home server, maybe a Linux box.  The Mac can mount all kinds of network file systems:  NFS, FTP, SMB, WebDAV.  But what if you want some strong authentication and privacy?  Well, FTP is clear-text only, SMB has some better authentication, if configured right, but I believe is subject to man-in-the-middle attacks.  NFS can use Kerberos, but you have to setup the infrastructure, which is a bit much for home.  WebDAV can use digest authentication and can use SSL certificates to avoid man-in-the-middle attacks and, uniquely, to provide privacy.&lt;br /&gt;&lt;br /&gt;Great, so I tried using WebDAV, but I can't find a WebDAV server for Linux that lets users modify files in their home directories.  Instead, it seems that the assumption is that you want WebDAV access control to be orthoginal to native filesystem permissions.&lt;br /&gt;&lt;br /&gt;So basically, there's no easy way I can export a filesystem securely to my Mac.&lt;br /&gt;&lt;br /&gt;There is the &lt;a href="http://davenport.sourceforge.net/"&gt;Davenport&lt;/a&gt; servlet that serves up SMB filesystems with WebDAV.  Combined with Samba, that might work, but is more complicated than it needs to be.  &lt;br /&gt;&lt;br /&gt;There's also the Perl Net::DAV::Server library, which purports to do this, but doesn't seem to work, at least when using the MacOS Finder as the client.&lt;br /&gt;&lt;br /&gt;Finally, I can use FTP over MindTerm SSH's transparent FTP to SFTP bridge, but that requires that I start up SSH and authenticate in advance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-114468502746966788?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/114468502746966788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=114468502746966788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114468502746966788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114468502746966788'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/04/progress-and-yet-no-progress_10.html' title='Progress and yet, no progress'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-114320849311798608</id><published>2006-03-24T06:54:00.000-07:00</published><updated>2006-03-24T06:54:53.160-07:00</updated><title type='text'>Better Co-routines in Python</title><content type='html'>The upcoming version of Python, Python 2.5, will include more full support for co-routines by enhancing Generators, which already have a &lt;i&gt;yield&lt;/i&gt; statement which allows them to yield execution to the caller.  The &lt;a href="http://www.python.org/dev/peps/pep-0342/"&gt;new additions&lt;/a&gt; allow better exception handling and, more importantly, the ability for data to be passed back and forth when a Generator yields or is resumed.&lt;br /&gt;&lt;p&gt;This is an excellent addition (although I'm not sure I like the name of the &lt;i&gt;send()&lt;/i&gt; method to resume a generator).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-114320849311798608?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/114320849311798608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=114320849311798608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114320849311798608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114320849311798608'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/03/better-co-routines-in-python.html' title='Better Co-routines in Python'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-114027887983251945</id><published>2006-02-18T09:07:00.001-07:00</published><updated>2006-02-18T09:07:59.853-07:00</updated><title type='text'>Dirty Little Secrets of SSL Certificate Authorities</title><content type='html'>There was recently an incident where a &lt;a href="http://blog.washingtonpost.com/securityfix/2006/02/the_new_face_of_phishing_1.html"&gt;Phishing scam acquired a certificate binding www.mountain-america.com to "www.mountain-america.com"&lt;/a&gt;.  That violates the intent of X.509 certs to bind a common name to  a real-world organization.  For example, the certificate for my bank binds www.lanb.com to "Los Alamos National Bank".  But apparently, in the name of making a buck and making SSL cert issuance fast and easy, CAs like GeoTrust are now issuing certs that just bind a domain name to a domain name.  That provides some protection against man-in-the-middle attacks against your site, but doesn't leave the user with any way to tell who you are.&lt;br /&gt;&lt;br /&gt;The other thing that many people don't realize is that SSL authentication in browsers is, like many things, only as strong as the weakest link.  My late-model Firefox browser has pre-loaded CA certs from 39 different organizations.  If any of those organizations issue a bad cert, it doesn't matter how good the others are.&lt;br /&gt;&lt;br /&gt;This came up many years ago when I was trying to buy a cert from Thawte, the South African company (since sold to Verisign, an implicitly trustworthy American company), for Los Alamos National Laboratory.  Some of the security folks were weary of trusting a South African company.  It was hard to explain to them, that we're not trusting anybody by having them sign our private key and issue a certificate.  It's all the users and their browsers that have to trust Thawte, but the browsers implicitly do.&lt;br /&gt;&lt;br /&gt;So practically speaking, what assumptions can you make about SSL certs these days?  About the only thing you can tell is that the domain-name in the browser's URL is really the domain name that you are talking to.  This provides some end-to-end protection against DNS attacks and other man-in-the-middle attacks.  But don't assume squat about the legal entity you're talking to.  If you actually open the cert and look at it, you should look at the Organization field  and trust it only if you trust the Organization of the Issuer (the certificate authority).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-114027887983251945?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/114027887983251945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=114027887983251945' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114027887983251945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114027887983251945'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/02/dirty-little-secrets-of-ssl_18.html' title='Dirty Little Secrets of SSL Certificate Authorities'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-114013779213235083</id><published>2006-02-16T17:56:00.000-07:00</published><updated>2006-02-16T18:08:56.096-07:00</updated><title type='text'>Cisco</title><content type='html'>I just had the displeasure of spending the day with a team of Cisco reps and engineers.  Maybe it's to be expected, but they're pretty institutionally conceited.  They're not all that current with their competitors capabilities, but are quick to dismiss them in every way.  And they're no longer a networking company.  They're like Microsoft and are in the client and software business now.  I wanted specs on their protocols and APIs for their &lt;a href="http://www.cisco.com/en/US/products/ps5923/products_administration_guide_chapter09186a008023faa0.html"&gt;Cisco Trust Agent&lt;/a&gt;, their &lt;a href="http://www.google.com/url?sa=t&amp;ct=res&amp;cd=2&amp;url=http%3A//www.cisco.com/univercd/cc/td/doc/product/access/acs_soft/csacs4nt/acs40/user/nac.pdf&amp;ei=Vh71Q8aDM4Oc4gH8w7yvAg&amp;sig2=obhex-HDnaGlX9nFyAYOuQ"&gt;RADIUS server&lt;/a&gt;, and their GAME protocol for communicating between the RADIUS server and third-party systems.  They're not interested in sharing any of those things with customers.  They describe them as "open standards", but that means that if you sign a contract and NDA as a business partner, then they'll give you access.  I asked if their APIs came with sample open-source code and started to get a lecture on how you shouldn't trust open source code for security systems.  Too bad they're not a networking company anymore.&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-114013779213235083?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/114013779213235083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=114013779213235083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114013779213235083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/114013779213235083'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/02/cisco.html' title='Cisco'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113756157878899173</id><published>2006-01-17T22:19:00.000-07:00</published><updated>2006-01-17T22:19:38.840-07:00</updated><title type='text'>Security Vendor Tidbits</title><content type='html'>&lt;a href="http://www.arbornetworks.com/"&gt;Arbor Network&lt;/a&gt;'s PeakFlow now uses agents on authentication servers to associate user identities with IP addresses for correlation with flow data.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.authenex.com/"&gt;Authenex&lt;/a&gt; has joined the token market with a USB fob that includes reader-less smart card support, AES encryption, and sequence-based one-time passwords, and an online challenge-response protocol.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113756157878899173?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113756157878899173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113756157878899173' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113756157878899173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113756157878899173'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/01/security-vendor-tidbits.html' title='Security Vendor Tidbits'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113742658928462964</id><published>2006-01-16T08:49:00.000-07:00</published><updated>2006-01-16T08:49:51.420-07:00</updated><title type='text'>U.S. Customs Opening International Mail</title><content type='html'>For those of you keeping track of your diminishing civil liberties, here's another:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.schneier.com/blog/archives/2006/01/us_customs_open.html"&gt;U.S. Customs Opening International Mail&lt;/a&gt;: "Reuters is reporting that Customs and Border Protection is opening international mail coming into the U.S. without warrant. "&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113742658928462964?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113742658928462964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113742658928462964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113742658928462964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113742658928462964'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2006/01/us-customs-opening-international-mail.html' title='U.S. Customs Opening International Mail'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113606727604397951</id><published>2005-12-31T15:14:00.000-07:00</published><updated>2005-12-31T17:11:32.503-07:00</updated><title type='text'>Experiments in social aggregation</title><content type='html'>I spent some time today playing with some of the new news/blog aggregation services (e.g. search engines) on the web.  &lt;a href="http://tailrank.com/"&gt;TailRank&lt;/a&gt; is a "weblog indexing zeitgeist".  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://topix.net"&gt;Topix.net&lt;/a&gt; and &lt;a href="http://findory.com"&gt;Findory.com&lt;/a&gt; takes a Google News approach to things, but with more locality features and the ability to look only at Blogs, Gadgets, and some other categories that Google doesn't have.  &lt;a href="http://memeorandum.com/"&gt;MemeoRandom&lt;/a&gt; only has categories for &lt;a href="http://memeorandum.com"&gt;Politics&lt;/a&gt; and &lt;a href="http://tech.memeorandum.com"&gt;Tech&lt;/a&gt; but does a nice job at combining mainstream articles and Blog entries.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://digg.com"&gt;Digg&lt;/a&gt; takes a manual, but distributed, approach where user voting is used to rank stories in their single list of stories.  Basically it's a popularity-based Slashdot (rather than a strictly chronological one).&lt;br /&gt;&lt;br /&gt;Tag-based sites rely on people categorizing their own links using freeform category names.  Sites like &lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt;, &lt;a href="http://Furl.net/"&gt;Furl&lt;/a&gt;, and &lt;a href="http://blinklist.com/"&gt;BlinkList&lt;/a&gt; depend on people storing their bookmarks online, while &lt;a href="http://technorati.com/"&gt;Technorati&lt;/a&gt; uses tags embedded in Blogs all over the web.&lt;br /&gt;&lt;br /&gt;Frankly, I don't find the notion of categorizing my bookmarks as very interesting.  But I do like Technorati's approach of harvesting additional meta-data from Blogs and other "news" sites.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113606727604397951?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113606727604397951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113606727604397951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113606727604397951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113606727604397951'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/12/experiments-in-social-aggregation.html' title='Experiments in social aggregation'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113578669516109490</id><published>2005-12-28T09:18:00.000-07:00</published><updated>2005-12-28T10:29:17.416-07:00</updated><title type='text'>On the separation of software stack and operating system</title><content type='html'>Modern Linux distributions are popular because they provide a good &lt;i&gt;operating system&lt;/i&gt; and &lt;i&gt;applications&lt;/i&gt; bundled together.  In fact, a lot of us switched from operating systems like Solaris which did not provide a good bundle of &lt;i&gt;applications&lt;/i&gt;.  But what if we decoupled OS and application again?  What if I want to run OpenSolaris or OS/X as my operating system because of support for specific hardware platforms?  Or what if I have to run a specific release of RHEL because that is the only thing what my hosting service provides?  Or what if for some strange reason, I need to run on Windows?&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In each of those cases, what I need is an &lt;i&gt;application stack&lt;/i&gt; that is&lt;br /&gt;independently supported and regression tested and agnostic to underlying operating system.  Open-source application stacks now exist from &lt;a href="http://www.openpkg.org/"&gt;OpenPKG&lt;/a&gt; and &lt;a href="http://www.spikesource.com/"&gt;SpikeSource&lt;/a&gt; (based primarily on OpenPKG, but offers extensive commercial support).   &lt;a href="http://www.openlogic.com/"&gt;OpenLogic&lt;/a&gt;'s BlueGlue takes a similar approach to distributing a complete development environment for software developers.  Other companies like &lt;a href="http://www.sourcelabs.com/"&gt;SourceLabs&lt;/a&gt; focus on open-source web services environments.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113578669516109490?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113578669516109490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113578669516109490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113578669516109490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113578669516109490'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/12/on-separation-of-software-stack-and.html' title='On the separation of software stack and operating system'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113496831426478701</id><published>2005-12-18T21:58:00.000-07:00</published><updated>2005-12-18T21:58:34.270-07:00</updated><title type='text'>Amateurs and Professionals: Blogs, Open Source, and Startups</title><content type='html'>&lt;a href="http://www.itconversations.com/"&gt;IT Conversations&lt;/a&gt; has an excellent &lt;a href="http://www.itconversations.com/shows/detail657.html"&gt;talk by Paul Graham at OSCON 2005&lt;/a&gt;.  Paul compares the motivations and effectiveness of traditional, salaried "professionals" such as "software engineers" and "reporters" to individual contributors who work on open source software, blogs, and early-stage startups.  He notes that these "amateurs" buck the standards of the 20th century by working out of their garages and being incredibly productive compared to professionals based in sterile offices who coast through their days with meetings and interruptions.  Paul also points out that "&lt;a href="http://en.wikipedia.org/wiki/Amateur"&gt;amateur&lt;/a&gt;" in its original Latin and French meaning was about being motivated by passion.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113496831426478701?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113496831426478701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113496831426478701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113496831426478701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113496831426478701'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/12/amateurs-and-professionals-blogs-open.html' title='Amateurs and Professionals: Blogs, Open Source, and Startups'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113496635108994649</id><published>2005-12-18T21:25:00.000-07:00</published><updated>2005-12-18T21:25:51.133-07:00</updated><title type='text'>Windows Mobile</title><content type='html'>I have this really nice piece of hardware, an iPaq 4700 with a full 480x640 color screen.  Unfortunately, it's next to useless because it runs Windows Mobile.  (The Linux kernel boots on it, but not all of the drivers are working yet.)  Windows Mobile (formerly known as Win CE) is a real piece of work.  In the user interface department, it wastes huge amounts of screen real-estate with decorations taken directly from the Windows desktop UI.  The browser can only do one thing at a time (single window, no tabs, only one download at a time).  Even worse, pretty much all Windows Mobile software is designed to be installed on a Windows desktop and then sychronized onto the mobile device.  So much for being "mobile" if you have to be tethered to a PC with a cable.  Since the device has both WiFi and Bluetooth, it certainly doesn't need a PC for connectivity.  And even if I was willing to use a PC, I don't have a Windows PC!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113496635108994649?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113496635108994649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113496635108994649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113496635108994649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113496635108994649'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/12/windows-mobile.html' title='Windows Mobile'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113226750896129923</id><published>2005-11-17T15:45:00.000-07:00</published><updated>2005-11-17T15:45:08.966-07:00</updated><title type='text'>oneSIS</title><content type='html'>&lt;a href="onesis.org"&gt;oneSIS&lt;/a&gt; is a tool for managing shared-filesystem (e.g. NFS root) heterogeneous clusters.  The basic idea is like the old Sun install CDs --- it's a normal system image that's read-only and all of the files that are writable (e.g. /var/run) are symlinks into /tmp, which is populated at boot time.  oneSIS uses the same approach for files that need to be different on different classes of machines: the file on the server is made into a symlink to /tmp, which then gets a link to the proper file on the server.&lt;br /&gt;&lt;br /&gt;Sandia developed it and Ron Minnich's group plans to use it to manage filesystem their Linux Xcpu system. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113226750896129923?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113226750896129923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113226750896129923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113226750896129923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113226750896129923'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/11/onesis.html' title='oneSIS'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113226620739620843</id><published>2005-11-17T15:23:00.000-07:00</published><updated>2005-11-17T15:23:27.430-07:00</updated><title type='text'>Cyber Infrastructure</title><content type='html'>Cyber Infrastructure (CI) is the US name for what the UK likes to call e-Science.  It's basically the enabling technologies that let scientists get work done using networks.  Some people would call it the natural progress of the Grid, which focused more on how to run jobs and use HPC resources, but not so much on Computer Supported Cooperative Work.  I ran into a friend of mine from UCSD who is working on the &lt;a href="www.cichannel.org"&gt;CIchannel.org&lt;/a&gt;, a video archive of presentations on CI.  Neat stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113226620739620843?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113226620739620843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113226620739620843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113226620739620843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113226620739620843'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/11/cyber-infrastructure.html' title='Cyber Infrastructure'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113059795027446149</id><published>2005-10-29T08:59:00.000-06:00</published><updated>2005-11-02T21:26:53.956-07:00</updated><title type='text'>Agility</title><content type='html'>I listened to a couple of good podcasts on agile software engineering methods.  Alistair Cockburn gave a nice overview of  &lt;a href="http://www.itconversations.com/shows/detail175.html"&gt;Agile Software Development&lt;/a&gt; and Scott Ambler's "&lt;a href="http://www.itconversations.com/shows/detail355.html"&gt;Are you Agile or are you Fragile?&lt;/a&gt;" was a good follow-up. Agile methods are typically iterative. Before each iteration, the stakeholders prioritize what they want done. The implementers then bite-off some of the items from the top of the list to implement during the next iteration. Because there is not a lot of time spent doing top-down whole-project up-front designs, iterations are frequently expected to involve refactoring of existing code to support the implementation of new functionality.&lt;br /&gt;&lt;br /&gt;These concepts resonate with my experience, but I've always worked in groups that do "systems engineering" or "systems integration" rather than large-scale software development. We have all the same issues of how to allocate resources and deal with frequent requirements changes. I'd like to see more case studies in these other areas. But intuitively I agree with the wisdom that agility is competitive advantage and lack of agility means you're not satisfying your stakeholders. And in my world forecasting requirements gets harder by the day.&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=13928429&amp;amp;postID=113059795027446149"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113059795027446149?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113059795027446149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113059795027446149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113059795027446149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113059795027446149'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/10/agility.html' title='Agility'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113047100114946627</id><published>2005-10-27T21:43:00.000-06:00</published><updated>2005-10-27T21:46:56.066-06:00</updated><title type='text'>Zimbra and Client-Side Storage for JavaScript</title><content type='html'>&lt;a href="http://www.blogger.com/www.zimbra.com"&gt;Zimbra&lt;/a&gt; is an open-source (mozilla-like license) &lt;a href="http://en.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; web application suite that uses popular open-source servers in the backend.   It takes &lt;a href="http://en.wikipedia.org/wiki/Tooltip"&gt;Tooltips&lt;/a&gt; to their natural extreme. Anything that can be identified becomes hoverable: people names do directory lookups, times and dates do calendar lookups, addresses do Google Maps lookups, etc.&lt;br /&gt;&lt;br /&gt;So this is pretty cool stuff for a networked collaboration suite. But how excited should we all get about AJAX? It has some serious limitations in terms of caching data for disconnected operation. Most browsers would be hard-pressed to cache even the JavaScript itself. A heavy-weight IMAP client can store and syncronize data and JavaScript can't (yet). So what extensions would be required to securely consume client-side storage? The storage could be sandboxed from all other storage on the host computer. Access to the storage could be limited to only authorized JavaScripts.&lt;br /&gt;&lt;br /&gt;But the more natural way for a web app to store things is to a web server.  So maybe the answer is not language extenstions, but that every client should run an HTTP-based (maybe WebDAV) server that will store and/or cache web objects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113047100114946627?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113047100114946627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113047100114946627' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113047100114946627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113047100114946627'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/10/zimbra-and-client-side-storage-for.html' title='Zimbra and Client-Side Storage for JavaScript'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113038154616474219</id><published>2005-10-26T20:52:00.000-06:00</published><updated>2005-10-27T19:17:55.176-06:00</updated><title type='text'>You're next computer: $1 and a 24-month service agreement</title><content type='html'>We recently drove out to Davis, CA to pick-up some horses that Gina imported from Germany. With the better part of 4 days worth of driving, I decided to load-up the iPod. I had been buying audiobooks from &lt;a href="http://www.audible.com/"&gt;Audible.com&lt;/a&gt;, but used iTunes' relatively new support for podcasts to find some interesting non-fiction to listen to. Books and podcasts are an excellent way to keep your brain awake during hours of driving (much more effective than music). I'll blog some interesting highlights here and this is the first one:&lt;br /&gt;&lt;br /&gt;The wonderful &lt;a href="http://www.blogger.com/post-edit.g?blogID=13928429&amp;amp;postID=113038154616474219"&gt;IT Conversations&lt;/a&gt; series of Podcasts had an &lt;a href="http://www.itconversations.com/shows/detail152.html"&gt;interview with Sun's COO Jonathan Schwartz&lt;/a&gt; where he talks about Sun's business model and that of his competitors. He makes some interesting points about the role of operating systems and software as give-away technology that enables you to sell services --- the same model in which cell phones and set-top boxes are given away for free in exchange for the opportunity to sell you content and services. From a business perspective, you look at your &lt;a href="http://en.wikipedia.org/wiki/Net_present_value"&gt;Net Present Value&lt;/a&gt; rather than just looking at the sales-price of the system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113038154616474219?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113038154616474219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113038154616474219' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113038154616474219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113038154616474219'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/10/youre-next-computer-1-and-24-month.html' title='You&apos;re next computer: $1 and a 24-month service agreement'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-113037890608674111</id><published>2005-10-26T20:03:00.000-06:00</published><updated>2005-10-26T20:14:19.203-06:00</updated><title type='text'>Crapped in the Hallway</title><content type='html'>Marty Bahamonde of FEMA recently testified in front of a Senate hearing about FEMA and Hurricane Katrina.  He supplied &lt;a href="http://hsgac.senate.gov/_files/102005HrgExhibits.pdf"&gt;printed exhibits&lt;/a&gt; of pictures and correspondence while he was in New Orleans.  As &lt;a href="http://www.ledger-enquirer.com/mld/ledgerenquirer/news/politics/12953119.htm?template=contentModules/printstory.jsp"&gt;reported by the AP&lt;/a&gt;, Michael Brown's Press Secretary sent the following e-mail:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Also, it is very important that time is allowed for Mr. Brown to eat dinner. Gievn (sic) that Baton Rouge is back to normal, restaurants are getting busy. He needs much more that (sic) 20 or 30 minutes. We now have traffic to encounter to get to and from a location of his choise (sic), followed by wait service from the restaurant staff, eating, etc.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;To the coworker who forwarded the e-mail to him, Marty replied:&lt;br /&gt;&lt;blockquote&gt;OH MY GOD!!!!!!!! No won't go any further, too easy of a target. Just tell her that I just ate an MRE and crapped in the hallway of the Superdome along with 30,000 other close friends so I understand her concern about busy restaurants. Maybe tonight I will have time to move my pebbles on the parking garage floor so they don't stab me in the back while I try to sleep.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-113037890608674111?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/113037890608674111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=113037890608674111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113037890608674111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/113037890608674111'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/10/crapped-in-hallway.html' title='Crapped in the Hallway'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-112638356474502747</id><published>2005-09-10T14:19:00.000-06:00</published><updated>2005-09-10T14:19:24.753-06:00</updated><title type='text'>3D Rendering APIs</title><content type='html'>&lt;a href="http://www.lwn.net/"&gt;LWN&lt;/a&gt; references a nice survey of the current rendering infrastructure used on Linux and other X-Windows platforms: &lt;a href="http://www.freedesktop.org/~jonsmirl/graphics.html"&gt;The State of Linux Graphics&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-112638356474502747?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/112638356474502747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=112638356474502747' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112638356474502747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112638356474502747'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/09/3d-rendering-apis.html' title='3D Rendering APIs'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-112638212646960754</id><published>2005-09-10T13:08:00.000-06:00</published><updated>2005-09-14T21:39:19.756-06:00</updated><title type='text'>Operating Systems at LANL</title><content type='html'>A milestone in the rejuvenation of OS research at LANL has occurred.  I attended a talk by the &lt;a href="http://www.c3.lanl.gov/pal/"&gt;Performance &amp;amp; Architecture Lab&lt;/a&gt; that surveyed some of their postdocs' recent work on things such as &lt;a href="http://www.cs.wm.edu/~sjiang/sc05.pdf"&gt;incremental kernel-based process checkpointing&lt;/a&gt; that only checkpoints dirtied pages and &lt;a href="http://www.cs.wm.edu/hpcs/WWW/HTML/publications/abs05-3.html"&gt;page replacement algorithms to prevent thrashing&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-112638212646960754?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/112638212646960754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=112638212646960754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112638212646960754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112638212646960754'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/09/operating-systems-at-lanl.html' title='Operating Systems at LANL'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-112588622086715828</id><published>2005-09-04T20:01:00.000-06:00</published><updated>2005-09-04T21:25:08.436-06:00</updated><title type='text'>Data Models</title><content type='html'>The Unix-based open source software community is an interesting barometer.  Some say that it doesn't innovate.  I wouldn't go that far, but I would say that a lot of projects are designed to be the last project in an area.  By that, I mean that they "finish" the concept, make it efficient, make it portable, make it all-inclusive, and remove the bullshit.  So I find it interesting when hyped-up concepts show up in these projects.  &lt;br /&gt;&lt;br /&gt;I recently noticed that data models are making their way into open source projects.  Gnucash is moving towards SQL access for all data.  They have spun-off the &lt;a href="http://qof.sourceforge.net/"&gt;Query Object Framework (QOF)&lt;/a&gt; library for performing simple SQL queries on in-memory GObjects.  The goal is for QOF to transparently interface with and/or cache results from backend SQL databases.  Another related project is &lt;a href="http://dwi.sourceforge.net/"&gt;Data with Interaction (DWI)&lt;/a&gt;, which provides an &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;Object-Relational Mapping (ORM)&lt;/a&gt;.  ORM has been popularized by Java projects like JBoss.  Basically, you specify (typically in an XML markup) how your data is to be interacted with and the system builds an API (and GUI) as appropriate.  I had dismissed the JBoss approach as being too painful for the benefit.  Maybe I'm wrong.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-112588622086715828?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/112588622086715828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=112588622086715828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112588622086715828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112588622086715828'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/09/data-models.html' title='Data Models'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-112586970462965847</id><published>2005-09-04T15:32:00.000-06:00</published><updated>2005-09-05T11:44:59.880-06:00</updated><title type='text'>Asyncronous Publishing and Browsing</title><content type='html'>At &lt;a href="http://en.wikipedia.org/wiki/SIGCOMM"&gt;SIGCOMM&lt;/a&gt; this year, it was clear that there is some popularity to the idea of adding &lt;a href="http://en.wikipedia.org/wiki/Distributed_hash_table"&gt;DHT&lt;/a&gt;s to the set of is ubiquitous protocols that applications are built on.  The notion is that people don't want to just exchange packets, but that huge classes of applications want to treat the network as a giant, shared hash table.  This idea might seem comfortable for people who like programming in languages like Python, where the hash table (dictionary) is the fundamental data structure.  &lt;br /&gt;&lt;br /&gt;My first reaction was that this is a bad idea.  But a few semantics are crucial to many Internet users, but not provided by IP.  These semantics are requisite for frequently-disconnected operation (especially common for mobile devices and people) is problematic.  As Vint Cerf and Bob Kahn noted at their &lt;a href="http://beansidhe.isc-net.upenn.edu:8080/ramgen/seas/Turing.rm"&gt;Turing Award Lecture&lt;/a&gt;, the Internet was not specifically designed for disconnected operation.  Some application layers, notably e-mail, have addressed this problem.  E-mail is asynchronous with queuing at both ends and intermediate hops.  It is reliable.  It uses global addresses that are not associated with routing.  And when everything is online, it's near real-time.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Usenet"&gt;Usenet&lt;/a&gt; news is another powerful example of offline message distribution.  Messages are posted to "newsgroups" that have their own hierarchical name space.  For those of you too young to be familiar with Usenet infrastructure, basically you sent a post to your local server.  Periodically, your server would connect to a pre-defined set of other servers and exchange any messages that only one side or the other had.  Originally this was done using &lt;a href="http://en.wikipedia.org/wiki/Uucp"&gt;uucp&lt;/a&gt; messaging, which may have involved calling each of the other servers with a modem.  Periodically, servers delete old messages to free up storage.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The asynchronous web&lt;/h2&gt;&lt;br /&gt;Now what if I wanted the web to have some of these features? What if I wanted to click on something and, if I wasn't on the network, or the provider wasn't on the network, have my browser queue that request and execute it later.  The browser could keep a table of contents for these pages that have been downloaded and are ready for use.  It would probably keep the page that I clicked on to jog my memory why I downloaded the page.  Prefetching, as now implemented by Firefox and Google, would be more important in a disconnected environment.&lt;br /&gt;&lt;br /&gt;But those browser changes only implement one side of the asynchrony.  What if the client and server were never up at the same time?  Should there be some stateful network service (unlike IP packet forwarding) that can be used for message queuing?  A centralized or distributed service could provide for the storage and distribution of content, rather than having everybody on the Internet connect to your personal web server.  The best solution with the current publishing model is to register a personal domain name and then use a hosting service to serve up your content for that domain.  You can manually move your domain and content from one service to another.  If you don't purchase your own domain and use a cheaper (or free) service like Blogger.com, yahoo.com, geocities.com, then you're stuck using their name to identify your content and you don't have &lt;b&gt;identifier portability&lt;/b&gt;, you can't move your content elsewhere without renaming it (similar to the problem of having to change phone numbers if you switch to a new phone company). &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Portable Identifiers&lt;/h2&gt;&lt;br /&gt;And while we're on the subject of identifiers, there's a crusade for object identifiers (&lt;a href="http://en.wikipedia.org/wiki/Uniform_Resource_Name"&gt;URN&lt;/a&gt;s, &lt;a href="http://en.wikipedia.org/wiki/Isbn"&gt;ISBN&lt;/a&gt;s, &lt;a href="http://en.wikipedia.org/wiki/Digital_object_identifier"&gt;DOI&lt;/a&gt;s) that are permanent identifiers for documents, regardless of who is currently publishing there or where (an ISBN is the even if you get the book from your library, Amazon.com, or straight from the publisher).  These IDs could be hierarchical and memorable (like e-mail addresses), centralized (like ISBN numbers) or purely random (like MD5 hashes).  I encourage all authors to use DOI's in their citations. &lt;br /&gt;&lt;br /&gt;Many peer-to-peer system use an MD5 hash of a file as its unique identifier.  Similarly, I could post my e-mail or Blog entries as documents identified by a pseudo-random ID number (e-mail clients already assign Message-IDs) and then just send references of those documents to you.  One departure from many peer-to-peer systems, however, is the need for dynamic content.  For example, I would then like to publish a rendezvous page (e.g. what's currently at http://mikefisk.bogger.com/) that has a constant identifier --- regardless of the hash of the full document.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Publishing in the Future&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Should you have to buy a domain name and setup a hosting service in order to publish content?  This is a significant barrier to entry.  Is there an economic model for a different namespace and protocol for publishing things?  The peer-to-peer community is examining distributed services where you provide what you can, when you can, and so does everybody else.  There is a lot of evidence that for popular content, protocols like BitTorrent can make sense.  Would this scale to less-popular content?  &lt;br /&gt;&lt;br /&gt;And that brings us back to the DHT.  If I can publish content based on a pseudo-random key (such as an md5 hash of the content), maybe it is a good supporting layer for message queuing and object delivery.  Maybe my asynchronous browser would be better off using &lt;i&gt;opendht://&lt;/i&gt; URLs instead of &lt;i&gt;http://&lt;/i&gt; URLs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-112586970462965847?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/112586970462965847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=112586970462965847' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112586970462965847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112586970462965847'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/09/asyncronous-publishing-and-browsing.html' title='Asyncronous Publishing and Browsing'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-112585792211475794</id><published>2005-09-04T12:07:00.000-06:00</published><updated>2005-09-04T18:53:24.046-06:00</updated><title type='text'>Katrina</title><content type='html'>Every bozo has an opinion about the social response to &lt;a href="http://en.wikipedia.org/wiki/Hurricane_katrina"&gt;Hurricane Katrina&lt;/a&gt;, which recently hit New Orleans and other portions of the gulf coast.  Not long before this event, I happened to see a Nova documentary all about it.  In case you've been hiding under a dry rock, the problem is that New Orleans is below sea level and sinking as the swamp land that it was built on continues to dry out from being protected from &lt;a href="http://en.wikipedia.org/wiki/Lake_Pontchartrain"&gt;Lake Pontchartrain&lt;/a&gt;.  So if you overflow or break a levy, the city drowns.  That's what happened.  &lt;br /&gt;&lt;br /&gt;Federal response:  Why is that New Orleans seems to be the only place that the Bush administration was not willing to invade.  I heard one excuse that they were waiting for law enforcement to get a handle on looting before the national guard could come in and help with rescue and clean-up.  This is the &lt;a href="http://en.wikipedia.org/wiki/United_States_National_Guard"&gt;National Guard&lt;/a&gt; --- the state militia!  A disaster has been declared.  Martial law has been declared.  Just send them in already.  (By Saturday, this finally seems to have happened).&lt;br /&gt;&lt;br /&gt;Local response:  I know that it's hot and humid and that everybody is hungry, thirsty, and in many cases sick.  I also think it's okay to loot groceries under these circumstances.  Some news footage shows guys running out of stores with new clothes.  That seems over the line.  But the stories of street gangs, shots being fired, etc --- why do we seem to handle this so much more poorly than third-world countries.  My guess is that we're more spoiled and have a bigger sense of entitlement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-112585792211475794?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/112585792211475794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=112585792211475794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112585792211475794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112585792211475794'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/09/katrina.html' title='Katrina'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-112199776715580494</id><published>2005-07-21T19:47:00.000-06:00</published><updated>2005-07-21T20:02:47.160-06:00</updated><title type='text'>Woe is the Stateful Web</title><content type='html'>Today I had to deal (again) with linking to the ACID web application for viewing Snort alerts.  ACID has this nice "feature" that you can't just link to query results.  First you have to go to the blank query page and get a cookie assigned to you.   So now it's time to restate some of my issues with web developers these days:&lt;br /&gt;&lt;br /&gt;First, too many web developers have no understanding of SQL injection, shell injection, and other all-too-common vulnerabilities in their code.  I recently had to deal with the aftermath of some code written by the local instructor of a web programming course at the university.  I shudder to think about what his students have learned and not learned....&lt;br /&gt;&lt;br /&gt;Second, most web developers think that they can and should write web apps the same way you write a one-tier application that contains UI, business logic, and backend all in one tidy package.  To approximate this, they use paradigms that depend on server-side state persisting between connections.  Now I'm not a fan of cookies either, but form data (hidden or otherwise) is a perfectly valid way to preserve untrusted state in the client.  And because it's on the client, there is no storage requirement for the application provider and no need to arbitrarily expire state.  Take the ubiquitous shopping cart as an example.  If your site doesn't keep track of this across sessions (e.g. stored in a database by username), you might as well have the client keep track of it from page to page.   When the user finally asks to view their cart, you validate all of the saved input (e.g. part numbers) and display the results.    &lt;br /&gt;&lt;br /&gt;The combination of these two mis-understandings leads to a particularly common flaw that drives me nuts.  When programmers validate input on one page and then keep passing it as a trusted value in a hidden tag in subsequent forms.   Any network programmer should treat the client as a malicious --- either because it's an attacker, or just because it may have arbitrary software bugs that you need to tolerate somewhat gracefully.&lt;br /&gt;&lt;br /&gt;HTTP was designed as a stateless protocol. There are powerful benefits to stateless protocols: fault tolerance, parallelization, etc. But you have to use it right.  If you don't, you break those things and create security vulnerabilities.  The web is a different beast from traditional user interfaces and traditional programming methods shouldn't be forced down its throat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-112199776715580494?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/112199776715580494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=112199776715580494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112199776715580494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/112199776715580494'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/07/woe-is-stateful-web.html' title='Woe is the Stateful Web'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-111981822101454944</id><published>2005-06-26T13:55:00.000-06:00</published><updated>2005-06-26T14:37:01.026-06:00</updated><title type='text'>Virtual PC: as bad as the real thing</title><content type='html'>So here I am trying to do some "simple" things in Virtual PC.  Unfortunately, I'm a prisoner to my software since my version of "simple" isn't expected by Microsoft:&lt;br /&gt;&lt;br /&gt;For example, I have "shared network" enabled (think NAT) for virtual hosts.  Unfortunately, I have no way to make my Mac talk to the virtual hosts.  They're in the 192.168.131 subnet, which has no route or virtual network interface.   So packets to the virtual host go out the default route and into the ether.  But a Linux virtual host can talk to the Windows virtual host.&lt;br /&gt;&lt;br /&gt;And by the way, there appears to be no way to change the subnet used by Virtual PC's DHCP server.&lt;br /&gt;&lt;br /&gt;Virtual PC also takes over the Mac firewall in order to do its own thing --- so much for having a firewall.  What a nice "feature".&lt;br /&gt;&lt;br /&gt;How the hell do I do Alt-F2 to change a Linux virtual console?&lt;br /&gt;&lt;br /&gt;Bring on the VMware for x86 MacOS...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-111981822101454944?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/111981822101454944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=111981822101454944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/111981822101454944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/111981822101454944'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/06/virtual-pc-as-bad-as-real-thing.html' title='Virtual PC: as bad as the real thing'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-111975065856777196</id><published>2005-06-25T19:36:00.000-06:00</published><updated>2005-06-25T19:50:58.573-06:00</updated><title type='text'>Asynchonous event scheduling</title><content type='html'>I just re-read the fine paper "&lt;a href="http://www.usenix.org/events/usenix03/tech/full_papers/zeldovich/zeldovich.pdf"&gt;Multiprocessor Support for Event-Driven Programs&lt;/a&gt;" from USENIX 03.  This is a must-read for any systems person.  The paper describes the implementation of &lt;i&gt;libasync-smp&lt;/i&gt;.  A few things come to mind when relating this work to my pet project, &lt;a href="http://smacq.sf.net/"&gt;SMACQ&lt;/a&gt;:  &lt;br /&gt;&lt;br /&gt;First, both use the asychronous event-driven design pattern.  Both use two-level work queues: libasync-smp has "cpu" callbacks and "fd" callbacks, where SMACQ has "consume" callbacks and "produce" callbacks.  But the SMACQ scheduler doesn't currently have a main select() loop to determine when "produce" callbacks should be run.   Instead the focus is on consuming what you have and only then producing new data.  This implies that input file descriptors have to have sufficient buffering on their own --- something that is difficult if you're a web server accept()ing TCP connections at very high speed.&lt;br /&gt;&lt;br /&gt;Second, it is unfortunate that parallelism in SMACQ is limited both by SmacqModules, which aren't supposed to have to be thread-safe, and DtsObjects, which aren't thread-safe at the moment (but have been in the past, and easily could be in the future).  Coloring (in the paper's sense) events by SmacqModule and implementing locking in DtsObjects is sufficient for thread-safety (outside of the core).   However, affinity by DtsObject is likely to be more useful than affinity by SmacqModule since a call with a DtsObject argument is all but guaranteed to want to use that object, while not all modules have local state, and many that do have state that does not change (and is therefore easily cached).  In contrast DtsObjects get re-used and modified frequently.  Thus, a multi-threaded SMACQ scheduler should probably map events to a queue using the DtsObject (the pointer value divided by the alignment, probably) rather than the SmacqModule.   However, this means that both SmacqModules and DtsObjects need to be locked.  This is doable, but not very pleasing.&lt;br /&gt;&lt;br /&gt;The other approach to parallelism in SMACQ is closer to the SEDA work since it breaks execution graphs into sub-graphs that can be run independently with objects copied from one graph to another at the places the graph is partitioned.  This is the approach that Bill Weiss is attempting to implement with GASnet.   The advantage is that no locking is required and shared-memory isn't required.  The disadvantage is that it only takes advantage of certain, very embarassing, sorts of parallelism.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-111975065856777196?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/111975065856777196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=111975065856777196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/111975065856777196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/111975065856777196'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/06/asynchonous-event-scheduling.html' title='Asynchonous event scheduling'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13928429.post-111963342674843306</id><published>2005-06-24T12:05:00.000-06:00</published><updated>2005-09-04T22:42:32.526-06:00</updated><title type='text'>The return of the Interactive White Board</title><content type='html'>Around 1994 we covertly installed white-board material on the entire back wall of our office at the &lt;a href="http://infohost.nmt.edu/tcc/"&gt;TCC&lt;/a&gt;.  The 12 foot by 8 foot white-board became a place for semi-permanent notes like "_{\ni}" (the LaTeX syntax for a subscripted "such that"), todo lists, and random notes to us from visitors.  Shortly thereafter, I made a CGI script called the "Interactive Whiteboard", the contents of which are &lt;a href="http://web.archive.org/web/19991116071723/www.nmt.edu/~mfisk/style.cgi?whiteboard/whiteboard.cgi"&gt;archived for posterity&lt;/a&gt; by the &lt;a href="http://web.archive.org/"&gt;Way-Back Machine&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;From 1995 to 1998, I occaisonally updated a "&lt;a href="http://infohost.nmt.edu/~mfisk/happenings.html"&gt;What's Happening&lt;/a&gt;" page on my website. &lt;br /&gt;&lt;br /&gt;10 years later, I'll try this "blog" thing....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13928429-111963342674843306?l=mikefisk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mikefisk.blogspot.com/feeds/111963342674843306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13928429&amp;postID=111963342674843306' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/111963342674843306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13928429/posts/default/111963342674843306'/><link rel='alternate' type='text/html' href='http://mikefisk.blogspot.com/2005/06/return-of-interactive-white-board.html' title='The return of the Interactive White Board'/><author><name>Mike Fisk</name><uri>http://www.blogger.com/profile/02015219815806456244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://woozle.org/~mfisk/me01.jpg'/></author><thr:total>12</thr:total></entry></feed>
