Sorry

This feed does not validate.

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://thiefsystems.org/ccs/feed/rss

  1. <?xml version="1.0"?>
  2. <rss version="2.0">
  3.  
  4. <channel>
  5.  
  6. <title>Can't Count Sheep</title>
  7. <link>http://thiefsystems.org/ccs/</link>
  8. <description>Minty fresh pop for the masses.</description>
  9. <language>en-us</language>
  10. <lastBuildDate>Sun, 14 Jan 2007 19:54:00 -0700</lastBuildDate>
  11. <generator>Elimossinary</generator>
  12. <managingEditor><a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="325440535c5972465a5b5754414b4146575f411c5d4055">[email&#160;protected]</a> (Frank Mitchell)</managingEditor>
  13. <webMaster><a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="680e1a090603281c00010d0e1b111b1c0d051b46071a0f">[email&#160;protected]</a> (Frank Mitchell)</webMaster>
  14.  
  15. <item>
  16. <title> Optimizing binary search</title>
  17. <link>http://thiefsystems.org/ccs/optimizingbinarysearch</link>
  18. <description>
  19. <![CDATA[
  20. <p>An engineer comes in to work one day and finds that his boss has left him a little piece of Ruby code.</p>
  21.  
  22. <pre><code>n = 16384
  23. f = Array.new(n) { |i| i += 1 }
  24. 0.upto(n) do
  25.    k = rand(2 * n)
  26.    # TODO: Impliment a binay search for k
  27. end
  28. </code></pre>
  29.  
  30. <p>"Hmm," says the engineer. "Binary search. Haven't done one of those since college." But, because he understands the princple of stealing cars before reinventing wheels, the engineer looks up a binary search algorithm on Google. Soon he has code to replace his boss's comment.</p>
  31.  
  32. <pre><code>x = 0
  33. y = n - 1
  34. while x &lt;= y do
  35.    m = (x + y) / 2
  36.    if k == f[m]
  37.        x = m
  38.        break
  39.    else
  40.        if k &lt; f[m]
  41.            y = m - 1
  42.        else
  43.            x = m + 1
  44.        end
  45.    end
  46. end
  47. found = f[x] == k
  48. </code></pre>
  49.  
  50. <p>Being a good engineer, he decides to bechmark his code. It clocks in at 2.4 seconds. "Not bad," says the engineer. "But I wonder if I can do better?" He digs out an old book from college, <em>Programming in the 1990s</em>, and thumbs through it until he finds the section on binary searching. There it is, the theoretically optimal solution.</p>
  51.  
  52. <pre><code>x = -1
  53. y = n
  54. while y != x + 1 do
  55.    m = (x + y) / 2
  56.    if f[m] &lt;= k
  57.        x = m
  58.    end
  59.    if f[m] &gt; k
  60.        y = m
  61.    end    
  62. end
  63. found = false
  64. found = f[x] == k if 0 &lt;= x
  65. </code></pre>
  66.  
  67. <p>The engineer benchmarks this code, and finds it runs in 2.41 seconds. "That's 0.01 seconds slower than my previous version," says the engineer. "I wonder why?" Thinking for a bit, the engineer realizes that the new code doesn't break out of the loop when it finds the correct solution. So he optimizes it.</p>
  68.  
  69. <pre><code>x = -1
  70. y = n
  71. while y != x + 1 do
  72.    m = (x + y) / 2
  73.    if f[m] &lt; k
  74.        x = m
  75.    end
  76.    if f[m] == k
  77.        x = m
  78.        break
  79.    end
  80.    if f[m] &gt; k
  81.        y = m
  82.    end
  83. end
  84. found = false
  85. found = f[x] == k if 0 &lt;= x
  86. </code></pre>
  87.  
  88. <p>This snippet has an average time of 2.8 seconds, and now the engineer is becoming slightly concerned. Things look to be going from bad to worse. Thinking some more, the engineer finds another optimization. "I know. I need to be using 'else' statements."</p>
  89.  
  90. <pre><code>x = -1
  91. y = n
  92. while y != x + 1 do
  93.    m = (x + y) / 2
  94.    if f[m] &lt; k
  95.        x = m
  96.    else
  97.        if f[m] &gt; k
  98.            y = m
  99.        else
  100.            if f[m] == k
  101.                x = m
  102.                break
  103.            end
  104.        end
  105.    end
  106. end
  107. found = false
  108. found = f[x] == k if 0 &lt;= x
  109. </code></pre>
  110.  
  111. <p>This code is better. Lots better. Its benchmark times comes in at 2.02 seconds. Please with himself, the engineer decides to get a peer review on his code before checking it in to the source tree. He calls one of his colleagues over to take a look.</p>
  112.  
  113. <p>"That's some pretty hairy logic. Maybe you could simplify it," the colleague says. "And you should be caching that lookup value."</p>
  114.  
  115. <p>Back to the drawing board the engineer goes. He does what his colleague suggests, simplifying the logic and caching the value that's looked up in the array. "Okay," he says. "Now I've got a really optimized binary search."</p>
  116.  
  117. <pre><code>x = -1
  118. y = n
  119. while y != x + 1 do
  120.    m = (x + y) / 2
  121.    t = f[m]
  122.    if t &gt; k
  123.        y = m
  124.    else
  125.        x = m
  126.        if t == k
  127.            break
  128.        end
  129.    end
  130. end
  131. found = false
  132. found = f[x] == k if 0 &lt;= x
  133. </code></pre>
  134.  
  135. <p>But the benchmarks tell another story. This code has an average time of 2.22 seconds. It's 0.2 seconds slower than his previous version, and only 7.5% faster than his original version! "This can't be right," the engineer says. "What am I missing here?"</p>
  136.  
  137. <p>Pulling out some scratch paper, he starts doodling little pictures of binary trees and walking through the steps to search them. Then it clicks. Fifty percent of a binary tree's nodes are at its leaves. That means for half the nodes in the tree, his premature termination of the loop doesn't save him anything. For a quarter of the nodes, it only saves him one loop. For an eighth of the nodes, it saves him two loops. The engineer breaks out his graphing calculator and does a quick summation. He's only saving an average of the one iteration by prematurely terminating the loop. The break statement must go.</p>
  138.  
  139. <p>"Well if the break statement goes," the engineer says, "then I don't have to cache the lookup in the array, since I'm only doing it once." Again he rewrites the code.</p>
  140.  
  141. <pre><code>x = -1
  142. y = n
  143. while y != x + 1 do
  144.    m = (x + y) / 2
  145.    if f[m] &lt;= k
  146.        x = m
  147.    else
  148.        y = m
  149.    end
  150. end
  151. found = false
  152. found = f[x] == k if 0 &lt;= x
  153. </code></pre>
  154.  
  155. <p>Anxiously, the engineer waits for the benchmarks to come in. 1.91 seconds! It's 20.4% faster than his original version. Elated, the engineer takes the code straight to his boss.</p>
  156.  
  157. <p>"Nice job," the boss says when the engineer explains the story of the binary search to him. "There's one engineer who'll be getting a raise," he adds, as the engineer heads out the door.</p>
  158.  
  159. <p>Three hours later, one of the testers walks over to the engineer's office.</p>
  160.  
  161. <p>"There's a <a href="http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html" title="Peter Norvig (Google): Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts are Broken">bug</a> in your code," the tester tells him. The egineer stares at her aghast.</p>
  162.  
  163. <p>"What bug?" he asks.</p>
  164.  
  165. <p>"If x and y are really large, then x plus y overflows and m becomes negative," she says.</p>
  166.  
  167. <p>"I never thought about that," the engineer admits. "But wait, doesn't Ruby's <a href="http://ruby-doc.org/core/classes/Bignum.html" title="Unknown (Ruby-Doc.org): Bignum">Bignum</a> class handle that?"</p>
  168.  
  169. <p>"Obviously not, since it broke," she replies. "So fix it."</p>
  170.  
  171. <p>Thinking for a minute, the engineer comes up with a one line fix.</p>
  172.  
  173. <pre><code>m = x + ((y - x) / 2)
  174. </code></pre>
  175.  
  176. <p>"I wonder how many other people know about that?" the engineer thinks to himself as he checks his patch into source control.</p>
  177.  
  178. ]]>
  179. </description>
  180. <pubDate>Sun, 14 Jan 2007 19:54:00 -0700</pubDate>
  181. <guid isPermaLink="true">http://thiefsystems.org/ccs/optimizingbinarysearch</guid>
  182. </item>
  183.  
  184. <item>
  185. <title> Theory is useless, unless it's applied</title>
  186. <link>http://thiefsystems.org/ccs/theoryisuselessunlessitsapplied</link>
  187. <description>
  188. <![CDATA[
  189. <p>I'm tired of academics in Computer Science telling me that algorithms matter, implementation doesn't, and that they can implement any algorithm in any language. If you really believe that, go ahead and attempt the following exercise.</p>
  190.  
  191. <p>Take a look at the definition of the <a href="http://en.wikipedia.org/wiki/XTEA" title="Various (Wikipedia): XTEA - eXtended TEA">XTEA</a> cipher. Now implement it in <a href="http://en.wikipedia.org/wiki/C_programming_language" title="Various (Wikipedia): C programming language">ANSI C</a>. Now implement it in <a href="http://en.wikipedia.org/wiki/Scheme_programming_language" title="Various (Wikipedia): Scheme programming language">R5RS Scheme</a>. By implement, I mean come up with a working program that encrypts and decrypts ASCII text files. Which was easier?</p>
  192.  
  193. <p>Algorithms are always constrained by implementation, and a fast algorithm is no good if you can't make it work in the real world. At some point, the academics need to get their hands dirty and write code. And in order to write code, you have to know what's going on in the guts of a computer. You have to understand how the hardware works, and how a compiler translates the code you write into something the hardware understands.</p>
  194.  
  195. <p>But the academics don't get that. They stay stuck in their worlds full of transcendental numbers, playing with things that never appear in real life.</p>
  196.  
  197. ]]>
  198. </description>
  199. <pubDate>Wed, 10 May 2006 09:56:00 -0600</pubDate>
  200. <guid isPermaLink="true">http://thiefsystems.org/ccs/theoryisuselessunlessitsapplied</guid>
  201. </item>
  202.  
  203. <item>
  204. <title> Did I earn my CS degree?</title>
  205. <link>http://thiefsystems.org/ccs/didiearnmycsdegree</link>
  206. <description>
  207. <![CDATA[
  208. <p>I used to advocate <a href="http://oreillynet.com/ruby/blog/2006/02/ruby_at_school.html" title="Pat Eyler (O'Reilly Ruby): Ruby at School?">teaching Ruby in schools</a>. Why force students to struggle with C when they could be learning a "more useful" language? I was wrong.</p>
  209.  
  210. <p>I used to think that it was the job of a university to prepare me for the job market, that schools should be teaching "hot" languages like Java and C#. That's not their job at all.</p>
  211.  
  212. <p>Somehow I got the idea that computer scientist was just academia speak for programmer. Being a computer scientist is not about maintaining legacy code.</p>
  213.  
  214. <p>I'm going to graduate in May with my Bachelor's of Science in Computer Science, and I'm not sure that I've earned the degree.</p>
  215.  
  216. <p>Being a computer scientist means having the technical expertise to implement something like the <a href="http://labs.google.com/papers/mapreduce.html" title="Jeffrey Dean and Sanjay Ghemawat (Google Research Publications): MapReduce: Simplified Data Processing on Large Clusters">MapReduce</a> algorithm. It means having the vision to dream up an interface as novel as that of <a href="http://guidebookgallery.org/articles/sketchpadamanmachinegraphicalcommunicationsystem" title="Ivan E. Sutherland (GUIdeBook): Sketchpad: A man-machine graphical communication system">Sketchpad</a>. But in order to do those things you have to have to understand the basic principles, and it is there that I think my education is lacking.</p>
  217.  
  218. <p>Unlike a lot of the students in my <a href="http://marvin.ibest.uidaho.edu/~heckendo/CS445/" title="Robert Heckendorn (University of Idaho CS Department): CS 445 - Introduction to Compilers">compiler's class</a>, I do understand <a href="http://joelonsoftware.com/articles/ThePerilsofJavaSchools.html" title="Joel Spolsky (Joel on Software): The Perils of JavaSchools">pointers and recursion</a>. But I know that I'm missing fundamentals like <a href="http://jaortega.wordpress.com/2006/01/11/counting-by-lambdas/" title="Jose Antonio Ortega Ruiz (programming musings): Counting by lambdas">Lambda Calculus</a>. Why, oh why, was I never given more than a cursory introduction to <a href="http://www-formal.stanford.edu/jmc/recursive.html" title="John McCarthy (Stanford): Recursive Functions of Symbol Expression and their Computation by Machine">Lisp</a>? There are <a href="http://jaortega.wordpress.com/2006/01/19/as-simple-as-possible/" title="Jose Antonio Ortega Ruiz (programming musings): As simple as possible...">answers</a> <a href="http://acmqueue.com/modules.php?name=Content&amp;pa=showpage&amp;pid=273" title="Alan Kay (ACM Queue): Big talk with the creator of Smalltalk -- and much more">out</a> <a href="http://www.paulgraham.com/avg.html" title="Paul Graham (paulgraham.com): Beating the Averages">there</a>, if you're willing to accept them. Computer science has become pop culture, and companies like Microsoft are insisting that people like my mother learn to write code. (See Sriram Krisnan's essay, <a href="http://blogs.msdn.com/sriram/archive/2006/01/15/lisp_is_sin.aspx" title="Sriram Krishnan (MSDN Blogs): Lisp is sin">Lisp is sin</a>.)</p>
  219.  
  220. <p>Ultimately, any fault in my education lies with me. So I guess it's about time to start reading the <a href="http://mitpress.mit.edu/sicp/full-text/book/book.html" title="Harold Abelson et. all (MIT Press): Structure and Interpretation of Computer Programs">wizard book</a>.</p>
  221.  
  222. <h3>Conversations</h3>
  223.  
  224. <blockquote>
  225.  <h5>18 March 2006</h5>
  226.  
  227.  <p>"Take heart. You recognize what you view as deficiencies in your education. That
  228.  never ends. Some of that you'll address by reading. Some of that you'll address
  229.  by inventing. Just try not to re-invent the wheel too many times. Best of luck."</p>
  230.  
  231.  <p><a href="http://www.cs.usask.ca/faculty/greer/" title="Jim Greer (University of Saskatchewan CS Department): Homepage">Jim Greer</a></p>
  232. </blockquote>
  233.  
  234. ]]>
  235. </description>
  236. <pubDate>Tue,  4 Apr 2006 07:56:00 -0600</pubDate>
  237. <guid isPermaLink="true">http://thiefsystems.org/ccs/didiearnmycsdegree</guid>
  238. </item>
  239.  
  240. <item>
  241. <title> Italian meatballs</title>
  242. <link>http://thiefsystems.org/ccs/italianmeatballs</link>
  243. <description>
  244. <![CDATA[
  245. <h3>Background</h3>
  246.  
  247. <p>This is a recipe I found on the internet when Sarah and I wanted meatballs with our spaghetti. The original recipe called for Italian bread crumbs, but we used Italian seasoning, since that's what we found at the store.</p>
  248.  
  249. <h3>Ingredients</h3>
  250.  
  251. <ul>
  252. <li>1 pound lean ground beef</li>
  253. <li>0.5 cups bread crumbs</li>
  254. <li>1 package dry Italian seasoning</li>
  255. <li>0.33 cups water (more or less)</li>
  256. <li>0.25 cups grated Parmesan cheese</li>
  257. <li>1 medium onion</li>
  258. <li>garlic</li>
  259. <li>salt</li>
  260. <li>pepper</li>
  261. </ul>
  262.  
  263. <h3>Preparation</h3>
  264.  
  265. <p>Mix all ingredients together. Don't add all of the water at one time. Mixture should be moist but not so that the meatballs fall apart. Shape meatballs to desired size and place on a broiler pan. Broil until outside is slightly brown on one side and then turn and broil the other side. When finished, add to spaghetti sauce and simmer at least 20 minutes.</p>
  266.  
  267. ]]>
  268. </description>
  269. <pubDate>Mon, 20 Mar 2006 06:24:00 -0700</pubDate>
  270. <guid isPermaLink="true">http://thiefsystems.org/ccs/italianmeatballs</guid>
  271. </item>
  272.  
  273. <item>
  274. <title> Trys, buys, and eventuals</title>
  275. <link>http://thiefsystems.org/ccs/trysbuysandeventuals</link>
  276. <description>
  277. <![CDATA[
  278. <p>My GTD lists of someday/maybes. </p>
  279.  
  280. <h3>Books</h3>
  281.  
  282. <ol>
  283. <li><a href="http://pragmaticprogrammer.com/titles/mjwti/" title="Chad Fowler (Pragmatic Bookshelf): My Job Went to India">My Job Went to India: 52 Ways to Save Your Job</a> - Chad Fowler</li>
  284. <li><a href="http://pragmaticprogrammer.com/titles/rdbcd/" title="Johanna Rothman and Esther Derby (Pragmatic Bookshelf): Behind Closed Doors">Behind Closed Doors: Secrets of Great Management</a> - Johanna Rothman and Esther Derby</li>
  285. <li><a href="http://pragmaticprogrammer.com/titles/ruby/" title="Dave Thomas, with Chad Fowler and Andy Hunt (Pragmatic Bookshelf): Programming Ruby, 2nd Ed.">Programming Ruby, 2nd Ed.</a> - Dave Thomas, with Chad Fowler and Andy Hunt</li>
  286. <li><a href="http://pragmaticprogrammer.com/titles/prj/" title="Jared Richardson and Will Gwaltney (Pragmatic Bookshelf): Ship it!">Ship It!: A Practical Guide to Successful Software Projects</a> - Jared Richardson and Will Gwaltney</li>
  287. </ol>
  288.  
  289. <h3>Movies</h3>
  290.  
  291. <h3>Wines</h3>
  292.  
  293. <ol>
  294. <li>Pinot Grigio - <a href="http://fisheyewines.com/" title="FishEye Wines: This Wine Jumps Out of Your Glass">FishEye</a></li>
  295. </ol>
  296.  
  297. ]]>
  298. </description>
  299. <pubDate>Sat, 25 Feb 2006 11:16:00 -0700</pubDate>
  300. <guid isPermaLink="true">http://thiefsystems.org/ccs/trysbuysandeventuals</guid>
  301. </item>
  302.  
  303. <item>
  304. <title> The Ajax genie is out</title>
  305. <link>http://thiefsystems.org/ccs/theajaxgenieisout</link>
  306. <description>
  307. <![CDATA[
  308. <blockquote>
  309.  <p>"The patent--issued on Valentine's Day--covers all rich-media technology
  310.  implementations, including Flash, Flex, Java, Ajax, and XAML, when the rich
  311.  media application is accessed on any device over the Internet, including
  312.  desktops, mobile devices, set-top boxes, and video game consoles, says inventor
  313.  Neil Balthaser, CEO of Balthaser Online, which he owns with his father Ken. 'You
  314.  can consider it a pioneering or umbrella patent. The broader claim is one that
  315.  basically says that if you got a rich Internet application, it is covered by
  316.  this patent.'" - <a href="http://www.informationweek.com/story/showArticle.jhtml?articleID=180206472&amp;cid=RSSfeed_IWK_News" title="Eric Chbrow (InformationWeek): U.S. Grants Patent for Broad Range of Internet Rich Applications">InformationWeek</a></p>
  317. </blockquote>
  318.  
  319. <p>No amount of litigation is going to put the <a href="http://www.adaptivepath.com/publications/essays/archives/000385.php" title="Jessie James Garrett (Adaptive Path): Ajax: A New Approach to Web Applications">Ajax</a> genie back in its bottle. Patents are designed to protect inventors, not let Adobe burned upstarts get rich quick by cashing in on a tech fad. Fortunately, this is all going to stay tied up in the courts for years, which means <a href="http://www.flickr.com/" title="Flickr: Photo Sharing">Flickr</a> will still be able to use open source technologies (like Ajax) to their heart's content.</p>
  320.  
  321. ]]>
  322. </description>
  323. <pubDate>Thu, 23 Feb 2006 09:13:00 -0700</pubDate>
  324. <guid isPermaLink="true">http://thiefsystems.org/ccs/theajaxgenieisout</guid>
  325. </item>
  326.  
  327. <item>
  328. <title> Shiny mud balls</title>
  329. <link>http://thiefsystems.org/ccs/shinymudballs</link>
  330. <description>
  331. <![CDATA[
  332. <p>They're called <em><a href="http://web-japan.org/trends01/article/011005sci_r.html" title="Unknown (Trends in Japan): Shiny Mud Balls">dorodango</a></em> in Japan, and Professor Fumio Kayo has distilled their creation into six easy steps.</p>
  333.  
  334. <ol>
  335. <li>Pack some mud into your hand, and squeeze out the water while forming a sphere.</li>
  336. <li>Add some dry dirt to the outside and continue to gently shape the mud into a sphere.</li>
  337. <li>When the mass dries, pack it solid with your hands, and rub the surface until a smooth film begins to appear.</li>
  338. <li>Rub your hands against the ground, patting and rubbing the fine, powdery dirt onto the sphere. Continue this for two hours.</li>
  339. <li>Seal the ball in a plastic bag for three or four hours. Upon removing the sphere, repeat step 4, and then once again seal the sphere in a plastic bag.</li>
  340. <li>Remove the ball from the bag, and if it is no longer wet, polish it with a cloth until it shines.</li>
  341. </ol>
  342.  
  343. <p><a href="http://sl-park.livejournal.com/" title="Sarah Park (LiveJournal): What is your favorite color?">Sarah</a> asked, "Why don't they fall apart when they're dry?" I don't know, and won't until I make one.</p>
  344.  
  345. ]]>
  346. </description>
  347. <pubDate>Thu, 16 Feb 2006 09:15:00 -0700</pubDate>
  348. <guid isPermaLink="true">http://thiefsystems.org/ccs/shinymudballs</guid>
  349. </item>
  350.  
  351. <item>
  352. <title> Innovation occurs in hardware</title>
  353. <link>http://thiefsystems.org/ccs/innovationoccursinhardware</link>
  354. <description>
  355. <![CDATA[
  356. <p>Innovation occurs in hardware.</p>
  357.  
  358. <p>I'm not saying that innovation can't occur in software. Look at <a href="http://rubyonrails.org/" title="Ruby on Rails: Web development that doesn't hurt">Rails</a> and <a href="http://www.thingamy.com/" title="thingamy: stuff to run your business">thingamy</a>. They're both innovative, but they both also solve real world problems.</p>
  359.  
  360. <p>And that's the key. Innovative software has to solve real world (hardware) problems.</p>
  361.  
  362. <p>Now go look at this <a href="http://mblog.lib.umich.edu/%7Erdivecha/archives/2006/02/the_world_of_sm.html" title="Vic Divecha (Vic Divecha's Official Tech Blog): The World of Smartboards, Sympodiums is about to change">video</a>.</p>
  363.  
  364. <p>Multitouch technology has been around for a while. See <a href="http://jazzmutant.com/lemur_overview.php" title="Lemur (JazzMutant): The Multitouch Control Surface">Lemur</a> and <a href="http://smarttech.com/dvit/index.asp" title="DViT (SMART Technologies): Digital Vision Touch Technology">DViT</a>. But it's not going to be innovative until it solves a real world problem. So what kinds of things would multitouch be good for?</p>
  365.  
  366. <p>Anything where the interface, and the user's interaction with it, can mimic how they'd manipulate things in the real world.</p>
  367.  
  368. <p>Sound, video, and photo editing. You've got jog dials, sliders, pallets, and buttons. You can zoom, pan, rotate, and crop.</p>
  369.  
  370. <p>File organization. You've got an infinite virtual desktop, and it's all spatially organized. Things live in piles, and you can spread out the contents of those piles to see what's inside them.</p>
  371.  
  372. <p>Document design. You can cut, paste, grow, shrink, and slide, text and images into whatever kind of layout you want. Doing a two column layout is easy; you adjust the edges of the container and let the text flow in to fill it.</p>
  373.  
  374. <p>Keyboards and mice are good for text input and precision clicking. But that's not how we interact with the real world. And it's not how we should interact with our computers.</p>
  375.  
  376. ]]>
  377. </description>
  378. <pubDate>Tue, 14 Feb 2006 08:04:00 -0700</pubDate>
  379. <guid isPermaLink="true">http://thiefsystems.org/ccs/innovationoccursinhardware</guid>
  380. </item>
  381.  
  382. <item>
  383. <title> Unplug the web</title>
  384. <link>http://thiefsystems.org/ccs/unplugtheweb</link>
  385. <description>
  386. <![CDATA[
  387. <p>The guys over at <a href="http://morfik.com/" title="Morfik: Web Applications Unplugged">Morfik</a> got it right. I want to use <a href="http://mail.google.com/" title="GMail: Google Mail">GMail</a>, but I want all my information to be there when I'm not online too. I want to be able to print a hard copy of my address book and stick it in the back of my Moleskine. I want paper convenience in a digital world. I want my applications to work with and without the internet.</p>
  388.  
  389. <p>And it want it all to fit on a USB key, so I can stick it in my pocket, and have my digital life (with all its preferences and settings just the way I left them) usable when ever and where ever I am.</p>
  390.  
  391. ]]>
  392. </description>
  393. <pubDate>Sat, 11 Feb 2006 09:34:00 -0700</pubDate>
  394. <guid isPermaLink="true">http://thiefsystems.org/ccs/unplugtheweb</guid>
  395. </item>
  396.  
  397. <item>
  398. <title> Cook an egg with a mobile phone</title>
  399. <link>http://thiefsystems.org/ccs/cookaneggwithamobilephone</link>
  400. <description>
  401. <![CDATA[
  402. <p>People cook things with microwaves all the time, so why not with <a href="http://www.wymsey.co.uk/wymchron/cooking.htm" title="Suzzanna Decantworthy (Wymsey Weekend): A Guide to Mobile Cooking">cell phones</a>? Yes, those little rubber duck antennas are omnidirectional, and if they put out enough juice to boil an egg in three minutes, what are they doing to your brain?</p>
  403.  
  404. <p>Though the geek in me really wants to try this. Anyone up for some mobile cooking?</p>
  405.  
  406. ]]>
  407. </description>
  408. <pubDate>Sun,  5 Feb 2006 07:34:00 -0700</pubDate>
  409. <guid isPermaLink="true">http://thiefsystems.org/ccs/cookaneggwithamobilephone</guid>
  410. </item>
  411.  
  412. <item>
  413. <title> Measuring software reliability</title>
  414. <link>http://thiefsystems.org/ccs/measuringsoftwarereliability</link>
  415. <description>
  416. <![CDATA[
  417. <p>I attended a talk by John Munson entitled "Measuring Software Reliability". The gist of it was:</p>
  418.  
  419. <blockquote>
  420.  <p>"Tell me how you use the software and I'll tell you how reliable you'll be."</p>
  421. </blockquote>
  422.  
  423. <p>According to the speaker, software can be mapped from a description of its use (operational specification), to a description of its design (functional specification), to a description of its actual implementation in code (modular specification). This gives you the ability to go from use case to code that's executed during that use case.</p>
  424.  
  425. <p>Measurements of the software are then taken over a period of time (though what exactly these measurements are was never explained), and the reliability of the software at the current time can be calculated from its past performance.</p>
  426.  
  427. <p>Does anyone else see where this breaks down in the real world? Case example: the Y2K bug. Everything is running fine for decades. We have a solid history of reliability. Then all of the sudden, we're up against a scenario that the designers never considered, and suddenly reliability goes down the tubes.</p>
  428.  
  429. <p>Plus, you have to realize that customers are motivated by features and companies are motivated by money. You have to constantly be putting in new stuff, or your customer's going to go looking for the competition when you can't provide her with what she wants. Release cycles where the code is continually changing really mess with your ability to measure reliability.</p>
  430.  
  431. <p>Change is inevitable. The sooner we start looking at software engineering as a discipline that's unprecedented (because it is), the better off we'll be. The practices that work for the mechanical engineers and the electrical engineers don't work for us. Software is far more flexible and bounded by far fewer laws than some academics would have you believe.</p>
  432.  
  433. <p>I will, however, agree that there are some instances where this kind of measurement could be really useful. ATMs, airplane flight control systems, and anything else where the operational environment is controlled, and all the inputs are known, could probably benefit from reliability measurement. Interestingly enough, those are the kinds of environments where you would <em>want</em> reliability measurement, because they're the ones that are high risk.</p>
  434.  
  435. <p>So it's one of those things that works well in academia and fault tolerant systems, but is of little use when it comes to building applications that real people will use to do many different things.</p>
  436.  
  437. <h3>Notes</h3>
  438.  
  439. <p>Here are my notes from the talk. The roughly correspond to the PowerPoint slides presented.</p>
  440.  
  441. <h4>The Notion of Reliability</h4>
  442.  
  443. <ul>
  444. <li>Related to the notion of a failure event</li>
  445. <li>Likelihood that a system will not fail during some usage interval</li>
  446. <li>Failure event is observable</li>
  447. <li>Time between failure events is observable</li>
  448. </ul>
  449.  
  450. <h4>Characteristics of Hardware Systems</h4>
  451.  
  452. <ul>
  453. <li>All manufactured systems are different
  454. <ul>
  455. <li>Different molecules</li>
  456. <li>Different mechanical structures</li>
  457. </ul></li>
  458. <li>Slight variation in manufactured components</li>
  459. <li>Will wear out over <em>time</em></li>
  460. <li>Will eventually <em>fail</em></li>
  461. </ul>
  462.  
  463. <h4>Characteristics of Software Systems</h4>
  464.  
  465. <ul>
  466. <li>All manufactured systems are identical</li>
  467. <li>Software is eternal</li>
  468. <li>Software is ethereal</li>
  469. <li>Software does not change as a function of time</li>
  470. <li>Software does not wear out</li>
  471. </ul>
  472.  
  473. <h4>Measuring Software Behavior</h4>
  474.  
  475. <ul>
  476. <li>Software systems do not fail monolithically</li>
  477. <li>Software modules fail</li>
  478. <li>Not all features execute all modules</li>
  479. <li>Some features execute some fail prone modules</li>
  480. </ul>
  481.  
  482. <h4>Functional Reliability</h4>
  483.  
  484. <ul>
  485. <li>Programs made up of many structurally independent modules</li>
  486. <li>Some modules are good (fault free)</li>
  487. <li>Some modules are bad (fault prone)</li>
  488. <li>Each functionality exercises only a small set of program modules</li>
  489. </ul>
  490.  
  491. <h4>Software Physics</h4>
  492.  
  493. <ul>
  494. <li>The notion of time has no meaning in software</li>
  495. <li>Programs do not fail because they wear out</li>
  496. <li>Programs do not change with respect to time</li>
  497. <li>Past reliability of a program is not a good predictor of future
  498. reliability (Y2K)</li>
  499. </ul>
  500.  
  501. <h4>3D Mouse Example</h4>
  502.  
  503. <ul>
  504. <li>User manipulates a tennis ball</li>
  505. <li>Put spots on a tennis ball and user pattern recognition</li>
  506. <li>Put accelerometers in a tennis ball and measure the delta</li>
  507. <li>Operations map to Functionalities (O x F)</li>
  508. <li>Functionalities map to Modules (F x M)</li>
  509. </ul>
  510.  
  511. <h4>Measurement</h4>
  512.  
  513. <ul>
  514. <li>There are probabilities for the execution of operations, functions,
  515. and modules</li>
  516. <li>Watch your software execute and see the patterns of execution</li>
  517. <li>Build a meter to give an estimate of reliability right now based on past performance</li>
  518. </ul>
  519.  
  520. ]]>
  521. </description>
  522. <pubDate>Thu,  2 Feb 2006 22:39:00 -0700</pubDate>
  523. <guid isPermaLink="true">http://thiefsystems.org/ccs/measuringsoftwarereliability</guid>
  524. </item>
  525.  
  526. <item>
  527. <title> Circular (like breathing)</title>
  528. <link>http://thiefsystems.org/ccs/circularlikebreathing</link>
  529. <description>
  530. <![CDATA[
  531. <p>It's interesting how the web manages to weave back in on itself. I subscribe to <a href="http://harp-l.com/" title="Various Authors (Harp-L): An email list for all things harmonica">Harp-L</a>, and yesterday I come across a link to Ben Felton's blog, <a href="http://harmonica.typepad.com/" title="Ben Felton (Harmonica Ramblings): The Harmonica Blog">Harmonica Ramblings</a>. Digging through the archives there, I found <a href="http://harmonica.typepad.com/harmonica_ramblings/2005/03/the_big_wide_op.html" title="Ben Felton (Harmonica Ramblings): The Big Wide Open Web...">a post</a> that links to <a href="http://thiefsystems.org/ccs/" title="Frank Mitchell (Can't Count Sheep): Minty fresh pop for the masses">Can't Count Sheep</a>, referencing my poem, <a href="http://thiefsystems.org/ccs/harmonica" title="Frank Mitchell (Can't Count Sheep): Harmonica">Harmonica</a>.</p>
  532.  
  533. <p>All these links run round in circles, kind of like <a href="http://patmissin.com/uncommon/uncommon04.html" title="Pat Missin (Uncommon Harmonica Techniques): Circular breathing">circular breathing</a>, which is that trick you have to learn if you want to play the didgeridoo. It'd be interesting to see a graph of all those links, a <a href="http://thiefsystems.org/ccs/phpregexspider" title="Frank Mitchell (Can't Count Sheep): PHP Regex Spider">spider</a> that drew the web like Ben Fry's <a href="http://acg.media.mit.edu/people/fry/anemone/" title="Ben Fry (MIT media laboratory aesthetics + computation group): anemone">anemone</a>. But until somebody writes one (and no that somebody won't be me), I think I'll go back to playing my harmonica.</p>
  534.  
  535. ]]>
  536. </description>
  537. <pubDate>Wed, 25 Jan 2006 06:24:00 -0700</pubDate>
  538. <guid isPermaLink="true">http://thiefsystems.org/ccs/circularlikebreathing</guid>
  539. </item>
  540.  
  541. <item>
  542. <title> Too much email</title>
  543. <link>http://thiefsystems.org/ccs/toomuchemail</link>
  544. <description>
  545. <![CDATA[
  546. <p>I just spent the last thirty minutes manually sorting through a months worth of email. Guess what? Most of it was useless. Of two-hundred plus messages, only five turned out to be worth keeping active as reminders. The rest got archived.</p>
  547.  
  548. <p><a href="http://mozilla.com/thunderbird/" title="Thunderbird (Mozilla): reclaim your inbox">Thunderbird</a> does a wonderful job of sorting out real mail from junk mail, but what I'd really like is a Bayesean filter that would prioritize my email for me.</p>
  549.  
  550. ]]>
  551. </description>
  552. <pubDate>Tue, 10 Jan 2006 10:47:00 -0700</pubDate>
  553. <guid isPermaLink="true">http://thiefsystems.org/ccs/toomuchemail</guid>
  554. </item>
  555.  
  556. <item>
  557. <title> Fixing Rose's laptop</title>
  558. <link>http://thiefsystems.org/ccs/fixingroseslaptop</link>
  559. <description>
  560. <![CDATA[
  561. <p>The Rose complains that her laptop is slow. I sit down to take a look.</p>
  562.  
  563. <ol>
  564. <li>Boot machine. Ten minutes later, Windows is done loading. Slowness confirmed.</li>
  565. <li>Run msconfig. Removed useless startup items. (qttask, rundll32, ituneshelper) Reboot. Still slow.</li>
  566. <li>Run regedit. Search for "run". Remove more useless startup items. Reboot. iTunes crashes with a Chinese error message.</li>
  567. <li>Uninstall iTunes. Run regedit again. msniu.exe is back at startup. Delete it. Watch it add itself back. Virus.</li>
  568. <li>Contemplate installing a real OS (<a href="http://ubuntulinux.org/" title="Unbuntu: A Linux distro that's usable by human beings">Unbuntu</a>). Decide against it.</li>
  569. <li>Get USB key with anti-virus software (<a href="http://free.grisoft.com/" title="AVG (Grisoft): Free anti-virus software">AVG</a>) on it.</li>
  570. <li>Install AVG. Watch it kill msniu.exe.</li>
  571. <li>Install Microsoft's anti-spyware program. Girlfriend says it's best. Watch spyware die.</li>
  572. <li>Reboot. Still slow. Look at installed programs. Lots of Norton anti-virus, internet helper, and popup blocker software there. Delete it all. Reboot. Slowness gone.</li>
  573. <li>Contemplate installing a real web browser (<a href="http://www.mozilla.com/firefox/" title="Firfox (Mozilla): A better web browser">Firefox</a>). Decide against it.</li>
  574. <li>Reinstall English language version of iTunes.</li>
  575. <li>Try to schedule disk defrag and cleanup to run semi-regularly. Access denied error. Curse CompUSA techs who "restored machine to factory settings".</li>
  576. <li>Girlfriend helps. Access denied error gone. Defrag, cleanup, anti-virus, and spyware killer should all be automated now.</li>
  577. <li>Reboot. Network connection slow to initialize. Really slow. Why?</li>
  578. <li>Run HP online diagnostic. Install lots of ActiveX controls. Watch remote scripts take over machine and "test" hardware. Scary.</li>
  579. <li>Only problems found are with HP software. Let it all autoupdate itself. No problems found. Reboot.</li>
  580. <li>Network connection slightly faster. Decide that's good enough for now. Shut down computer.</li>
  581. <li>Go play with SSH on my Mac.</li>
  582. </ol>
  583.  
  584. ]]>
  585. </description>
  586. <pubDate>Wed, 21 Dec 2005 11:27:00 -0700</pubDate>
  587. <guid isPermaLink="true">http://thiefsystems.org/ccs/fixingroseslaptop</guid>
  588. </item>
  589.  
  590. <item>
  591. <title> K9 Katastrophe</title>
  592. <link>http://thiefsystems.org/ccs/k9katastrophe</link>
  593. <description>
  594. <![CDATA[
  595. <p>Sarah thinks it's hilarious. Meghan wants more of an ending. My dad said it was great. Pop doesn't feel qualified to critique me. For anyone else who wants to read, here it is.</p>
  596.  
  597. <h3>K9 Katastrophe</h3>
  598.  
  599. <p>It's another night in the Big City. The rain's coming down in buckets, and I watch as it fills the window well of my basement office. Water seeps in around the edges where the gasket doesn't seal right, leaking all over my desk, and I make a mental note to have it replaced when I get my next influx of cash. Then I have a better idea. I'll move my desk.</p>
  600.  
  601. <p>So that's how the dame finds me, bent double with my back muscles straining and my heart doing a triple jackhammer as I try to heave the old oak monstrosity into the center of the room. I know she's a dame 'cause she's got one of those fake mink coats on, the kind husbands buy for their second wives so they won't break the bank like the first ones did.</p>
  602.  
  603. <p>"Are you Jack Friday, the private eye?" Her tone's incredulous, and I know, I wouldn't believe it either, not if I saw some soft boiled detective trying to rearrange his office furniture. But that's what it says on my door, and I always pay attention to the memos my secretary leaves there. I decide to put her at ease.</p>
  604.  
  605. <p>"Yes, yes I am. And by the way, your coat's fake." It's always a good idea to throw facts at the customer, out of the blue, Sherlock Holmes style, helps them have more faith in your deductive reasoning abilities. But apparently the dame doesn't think too highly of mine.</p>
  606.  
  607. <p>Smack. She belts me in the head with her handbag, and the next thing I know, I'm seeing stars dance across my eyelids.</p>
  608.  
  609. <p>When my vision clears, I find my secretary, Grace Valentine, with her arms around Ms. I Still Don't Know Her Name, while the dame sobs into her blouse."What'd you say to her, Jack?" Grace asks me.</p>
  610.  
  611. <p>"I just told her that her coat was fake."</p>
  612.  
  613. <p>Smack. Now it's Grace's turn to belt me one.</p>
  614.  
  615. <p>"Jack, you don't tell a woman that, especially not if it's her first mink!" Grace shoots daggers at me, and I duck just in time to let them clatter harmlessly against my filing cabinet.</p>
  616.  
  617. <p>"No, it's not that." Ms. I Still Don't Know Her Name says as she extracts herself from Grace and then dabs at her eyes with a tissue. I wonder where the tissue came from, and than I remember seeing the contents of her purse at it flew towards my head. Ah, another mystery solved.</p>
  618.  
  619. <p>"It's just that I expected to find a nice detective to help me find my Winchester and all I've found is this, this..." she says as she waves the tissue in my direction, "animal hating, brute!"</p>
  620.  
  621. <p>The dame is all tears again, and I'm suddenly concerned for my office furniture. Between the rain and her waterworks, I'm going to be lucky if anything in here stays dry. But then it hits me like a ton of bricks. Her husband's rich enough to afford fake mink and she's got a missing rifle she wants found. That means she's a paying customer, and I might just come out of this with enough dough to move to an upstairs office. I seize the moment.</p>
  622.  
  623. <p>"I'll take your case, Ms. I Still Don't Know Your Name. Now, tell me all about this missing rifle."</p>
  624.  
  625. <p>"My name's pronounced Istella Dahnoyornam, and I don't know anything about a missing rifle," she says.  She stops crying long enough to look confused, and I motion to Grace that I've got the situation under control and she can go back to doing whatever it is that my secretary does. Grace exists stage left, and then it's just me and Ms. Don't Know Your Name sitting in the green tinged light from my accountant's desk lamp.</p>
  626.  
  627. <p>"You said you were looking for a missing Winchester," I offer.</p>
  628.  
  629. <p>"Oh, no, Winchester's not a gun. He's my dog."</p>
  630.  
  631. <p>This throws me for a loop. I usually leave missing animals up to Pest Control. Maybe they're all busy at the moment, which is good for me; I need this case.</p>
  632.  
  633. <p>"Well, what does Winchester look like and where did you last see him?" I ask.</p>
  634.  
  635. <p>"He's a small white Yorkish terrier, and I was walking him on Sunday down by the park when he just vanished into thin air," she says.</p>
  636.  
  637. <p>Today's Tuesday. I count backwards. Winchester's been missing for two days, and in the Big City, that means his trail's probably cold by now, especially with all this rain. But I don't tell that to Ms. Don't Know Your Name.</p>
  638.  
  639. <p>"I'll see if I can find Winchester for you, Ms. Don't Know Your Name," I say. </p>
  640.  
  641. <p>"Just leave a number with my secretary, and I'll get back to you when I know something."</p>
  642.  
  643. <p>"Oh, thank you, thank you." Ms. Don't Know Your Name is all gushy tears, and I hurry her out of my office before she cries all over my green accountant's desk lamp and shorts it out. After all, it's the only working light I've got left. Knowing that Winchester's trail won't be any easier to pick up tomorrow, I grab my faded fedora and black leather trench coat, check to make sure that I'm packing my .45 and carrying enough ammo to provide covering fire to a small revolutionary country, blow a kiss to Grace, and step out into the dark and the rain and the streets of the Big City.</p>
  644.  
  645. <p>Indecent Nymph. That's what the neon letters above the door to the Eccentric Mafia's new bar read, but what they illuminate is the two Russian thugs doing a concrete lion bit on either side of the entrance.</p>
  646.  
  647. <p>"Get out of here, Friday. This is a private bar," Thug Number One growls.</p>
  648.  
  649. <p>So these guys know me. That must mean I know them. I think back on all the Russian thugs I've busted over the years and the answer hits me like a hungry sea bass going after a lure. It's Boris and Yawnis, the Put You To Sleep With the Fishes twins. I've got a rap sheet on these guys back at my office that's a mile long. They're been busted for robbery, arson, grand theft auto, singing opera in public, and terrorizing Chicago style hot dog vendors.</p>
  650.  
  651. <p>"He told you to beat it, Friday." Yawnis takes a step towards me as he says this, and I watch the flecks of Meaty-O's breakfast cereal fly from his mouth and land on my trench coat when he gets to the word, 'beat'. I brush the flecks off. I know how to handle these guys.</p>
  652.  
  653. <p>"Look, boys, a hot dog stand." I point down the street at the ketchup and mustard stained aluminum sided cart that's parked under an awning to keep its owner out of the rain. Boris and Yawnis look at each other, than at me, than at the hotdog stand, than back at each other. I hear a heavy kachunk as their mental gears engage. Finally, Boris speaks.</p>
  654.  
  655. <p>"We're supposed to be guarding the door, Yawnis."</p>
  656.  
  657. <p>"But it'll just be one hot dog, Boris," Yawnis replies.</p>
  658.  
  659. <p>"But what if he goes in while we're not here? The Don won't like that," Boris says.</p>
  660.  
  661. <p>Yawnis looks at me. "You won't go in, will you, Friday? At least not until we get back," he asks.</p>
  662.  
  663. <p>"No, I won't go in," I reply.</p>
  664.  
  665. <p>"See? It's settled, Boris. Now let's go get hot dogs," Yawnis says.</p>
  666.  
  667. <p>"Okay," Boris says, and the two trudge off in the direction of the hot dog vendor, who waves as they approach. He must be new. No sane Chicago style hot dog vendor would ever invite the Put You To Sleep With the Fishes twins over to his cart. I squint through the rain, trying to make out the company logo on the ketchup and mustard stained aluminum siding.  When I finally do, I smile. 'Bill's Venetian Hot Dogs.' The man can take care of himself.</p>
  668.  
  669. <p>I turn my attention back to the nondescript, cherry wood red, ivory handled with a brass knocker door of the Indecent Nymph. I push on the handle; the door swings open, and I walk out of the dark and the rain and the streets and into the best bar in the Big City.</p>
  670.  
  671. <p>The inside of the Indecent Nymph is dark, smoky, claustrophobic, the kind of place that's home to all kinds of low life characters: pushers, dealers, thugs, toughs, bookies, and door-to-door vacuum cleaner salesmen. Glaring white lights are strategically placed so that they cast obvious shadows on the corner tables; after all, those of the underworld need a place for their shady deals. A jazzy, bluesy, electric, rock and roll noise reaches my ears, and my gaze shifts to the band on the corner stage. They're a four piece, string quartet, girls with electric instruments group out of Europe. I've heard their music; Grace tells me I even like it. If I'm remembering right, their name is Glue.</p>
  672.  
  673. <p>But the music and the shadows aren't what catch my attention. What does is the four foot two, gossamer dress wrapped, wisp of a girl, who's trying to eat the microphone as she belts out the band's lyrics. She's got the body of a twelve year old and a voice that could crack china at fifty feet. I glance down the bar; all the patrons are holding plastic cups. Smart move. Then she hits a high note, and I watch that lacy dress unfold into a pair of fairy wings. I notice the gold chain around her ankle, and the realization hits me like a boxer warming up with a punching bag. This is the Indecent Nymph. The Eccentric Mafia is trafficking in pixie porn.</p>
  674.  
  675. <p>Well that's good news for me. You aren't allowed to keep fairy tale creatures without a license, and I'll bet dollars to doughnuts that the Eccentric Mafia doesn't have one for their singer. I amble up to the bar where Vinnie, the owner, is talking to Daniels, the bartender.</p>
  676.  
  677. <p>"Friday! Get out of here." Vinnie greats me with his usual cheer.</p>
  678.  
  679. <p>"Can't do, Vinnie. I'm here to bust you for illegal possession of a fairy tale creature, unless you'd care to trade for some information," I say.</p>
  680.  
  681. <p>"What? Her?" Vinnie jerks a thumb at the singer. "She's legal. Got her from a guy down on 14th Street who specializes in exotics: werewolves, ghouls, vampires, pixies. You name it and he can get it. But that don't matter, 'cause she's legal. So get out of here. How did you get in here, anyway?"</p>
  682.  
  683. <p>"Through the door, like everyone else," I reply. "Well then look, the Don still owes me a favor for returning his missing day planner, right?"</p>
  684.  
  685. <p>"No, you're all squared with the Don. We did that favor with the music for you, remember?" Vinnie says.</p>
  686.  
  687. <p>He's right. The pixie porn bust didn't go down like I'd planned, and I'm all out of favors with the Don. It's time to play my wild card.</p>
  688.  
  689. <p>"The Deuce of Spades!" Vinnie sputters as I show him the card. "Where'd you get that?"</p>
  690.  
  691. <p>"From the Bicycle deck in my office," I say. "Now, will you trade me for some information and a drink?"</p>
  692.  
  693. <p>"I thought we'd confiscated all of those," Vinnie says. "Sure, Friday, hand over the card and you'll get your information."</p>
  694.  
  695. <p>"No. Give me the information and you'll get the card," I say.</p>
  696.  
  697. <p>"How do I know you'll give me the card when I give you the information?" Vinnie says.</p>
  698.  
  699. <p>"How do I know you'll give the information when I give you the card?" I reply. Two can play at that game, and Vinnie's never been good at MindMaster.</p>
  700.  
  701. <p>"'Cause we of the Eccentric Mafia always keep our word," Vinnie says.</p>
  702.  
  703. <p>He's right. They do. It's part of their unwritten creed, which is only unwritten because the Don spilled a bottle of white out on it while the ink was still wet. I know. I was there. I bumped his elbow. But nobody but me remembers that last part.</p>
  704.  
  705. <p>"Deal, Vinnie," I say as I slap the card on the bar.</p>
  706.  
  707. <p>He palms it with the smoothness of a Mississippi gambler then says, "Okay, Friday, what do you want to know?"</p>
  708.  
  709. <p>"Know anything about a missing Winchester?" I ask.</p>
  710.  
  711. <p>"What? The rifle?"</p>
  712.  
  713. <p>"No, the dog."</p>
  714.  
  715. <p>"No, I don't," Vinnie says, "But Nicky the Nose might."</p>
  716.  
  717. <p>"Where's Nicky hang these days?" I ask.</p>
  718.  
  719. <p>"At the Sugar Bowl, but she says she's trying to quit." He shrugs.</p>
  720.  
  721. <p>I nod my thanks, than turn to Daniels. "A shot of scotch, twelve years old, port finished, single malt, and keep it off the rocks."</p>
  722.  
  723. <p>Daniels hands me the plastic glass and I knock it back, than I'm out the door, and the Indecent Nymph is behind me, and all that's in front of me is the night and a name and a dog that's missing somewhere in the Big City.</p>
  724.  
  725. <p>A quick stop at the Quick-E-Mart lands me all the supplies I need for an interrogation at the Sugar Bowl. Then it's off to the bad part of the Big City, which is only half a block from the good part of the Big City. There's really not a whole lot of city in the Big City.</p>
  726.  
  727. <p>Carefully, I rap on the door of the Sugar Bowl. The door opens a few inches, and a disembodied voice begins to spew movie trivia questions at me.</p>
  728.  
  729. <p>"What's your name?" the voice asks.</p>
  730.  
  731. <p>"Jack Friday," I reply.</p>
  732.  
  733. <p>"What's your quest?" the voice continues.</p>
  734.  
  735. <p>"I'm looking for a missing Winchester," I say.</p>
  736.  
  737. <p>"What's your favorite color?"</p>
  738.  
  739. <p>"Black."</p>
  740.  
  741. <p>"How'd you get here?"</p>
  742.  
  743. <p>"I followed a white rabbit. Trixie, this code is stupid. You know it's me. You can see me through the door."</p>
  744.  
  745. <p>It's true. The door to the Sugar Bowl is made of candy glass. Trixie, the owner, has to have it replaced about once a month whenever an unwanted customer tries to chew their way inside.</p>
  746.  
  747. <p>"Shut up and finish the code, Friday," Trixie says. "Now, who framed Roger Rabbit?"</p>
  748.  
  749. <p>"Jessica Rabbit," I say.</p>
  750.  
  751. <p>"See, that wasn't so bad."</p>
  752.  
  753. <p>She opens the door the rest of the way and I step inside. The bright lights reflect off Trixie's blond hair; paired with her blue eye shadow and black mascara enhanced eyes, she looks exactly like that dog out of Lady and the Tramp. Hence where she got her nickname. I glace around the inside of the Sugar Bowl, looking for stray crumbs and paying customers. Trixie's partner, Fido, is nowhere to be seen. That's fine by me; I don't like dames who drive fast cars, slurp the last of the sugared milk from their breakfast cereal bowls, and are fond of evicting me from the premises simply because I'm a private eye.</p>
  754.  
  755. <p>"You paying, Friday, or did you bring your own?" Trixie asks.</p>
  756.  
  757. <p>"Brought my own," I say holding up the Quick-E-Mart bag.</p>
  758.  
  759. <p>"Figures," Trixie says turning around and walking back towards the tables.</p>
  760.  
  761. <p>"Nicky the Nose around?" I ask Trixie's retreating figure.</p>
  762.  
  763. <p>"Corner table." She waves a hand in a vague direction that encompasses all the corners of the room. "But she's quitting, so if you get her sloshed I'll get Fido to throw you out."</p>
  764.  
  765. <p>I nod, not caring that she can't see me, and then take myself down the carpeted steps, towards the tables, and into the Sugar Bowl proper.</p>
  766.  
  767. <p>The Sugar Bowl is the only pool hall in the Big City where they serve sugared breakfast cereal instead of peanuts and milk instead of beer. Bright colorful lights stave off the manic depression induced by the movie theater style carpeting and Disney theme song music that plays over the sound system. If it wasn't for the fact the half the Big City's underworld element hangs out here, parents might even call the place kid friendly. I spot Nicky the Nose lining up a corner pocket shot on a far table and head in her direction.</p>
  768.  
  769. <p>"Hi, Nicky, how's it going?" I ask.</p>
  770.  
  771. <p>"Friday!" She jumps two feet in the air, misses the shot, turns, and breaks the pool cue over my head. For the second time that night, I watch stars dance across my eyelids. When I come to, I'm lying on the floor, and Nicky's standing over me.</p>
  772.  
  773. <p>"I'm so sorry, Friday," she says as she helps me up. Nicky has one of those voices that sounds like you're trying to talk with a clothespin wrapped around your nose while choking on a handful of milk saturated sugared breakfast cereal. Conversations with her are always entertaining.</p>
  774.  
  775. <p>"Not a problem, Nicky," I say as I get to my feet. "Now, you wouldn't happen to know anything about a missing Winchester, would you?"</p>
  776.  
  777. <p>"A rifle?" she asks.</p>
  778.  
  779. <p>"No, a dog," I say.</p>
  780.  
  781. <p>"No. Nothing."</p>
  782.  
  783. <p>"Are you sure, Nicky?" I pull a box of Lucky Charms out of my Quick-E-Mart bag and set it on the pool table next to an empty bowl. Nicky's eyes go to the cereal, than back to me.</p>
  784.  
  785. <p>"Absolutely."</p>
  786.  
  787. <p>"Are you really sure?" I ask as I produce a jug of milk.</p>
  788.  
  789. <p>She licks her lips, but nods anyway. "I'm sure," she says.</p>
  790.  
  791. <p>"Are you really, really sure?" I pour the cereal into the bowl then open the jug of milk. "It's two percent."</p>
  792.  
  793. <p>Nicky's eyes get even bigger than Trixie's as she watches me pour the milk into the cereal. She chews on her lower lip.</p>
  794.  
  795. <p>"Well..." she says hesitantly.</p>
  796.  
  797. <p>"Yes?" I bait the word with a silver spoon I pick up off the table, sliding it into the bowl of sugared breakfast cereal and then lifting a spoonful of milk laden, crunchy, green marshmallows towards my mouth.</p>
  798.  
  799. <p>"Okay!" Nicky can't take it any more, and she snatches the bowl and spoon from my grasp. "I heard a rumor that a lot of dogs have been disappearing down by the Fettuccine Feline brother's place. They're Italian you know," she mumbles around mouthfuls of cereal.</p>
  800.  
  801. <p>"Thanks, Nicky," I say, as I turn away from the table in time to see Trixie sic Fido on me from across the crowded room.</p>
  802.  
  803. <p>I make a three point landing in the street, knees, elbows, nose, and Fido's barking "And stay out!" rings in my ears, but even the pain can't stop a grin from spreading across my smashed features. Winchester's trail is close; I can feel it, and so I pick myself up, dust off my faded fedora and black leather trench coat, wipe the blood from my face with a napkin I swiped from Nicky's table, and make my way towards an Italian tailor's shop that's nestled among the streets and buildings and gutters that make up the heart of the Big City.</p>
  804.  
  805. <p>Twists and turns and two blocks later, I'm lost, because I can't remember where the Fettuccine Feline brother's tailoring shop is. I pause at the entrance to a dark alley, trying to get my bearings and figure out where I am, when a meaty hand clamps itself around my neck from behind and drags me backwards into the shadows. A large caliber pistol grinds itself into my temple, and a voice that smells faintly of Venetian style hot dogs belches in my face.</p>
  806.  
  807. <p>"We're going to have to work you over, Friday," the voice says.</p>
  808.  
  809. <p>"But today's Tuesday," I protest.</p>
  810.  
  811. <p>"Is not. It's past midnight. Today's Wednesday," the voice replies.</p>
  812.  
  813. <p>And with that they go to work. Brass knuckles play my ribcage like an accordion, while the meaty hand around my neck keeps me from crying out, or going anywhere. It's intense. The most intense pain I've ever felt, except for that time I ate at Lou's Cheep Hong Kong Restaurant, where the chef cooked chicken that had been marinated in hot sauce for three days and was studded with bits of cracked pepper and crushed Fireballs. That was more intense than this, but this is still pretty intense.</p>
  814.  
  815. <p>After what seems like hours, but was really only five minutes according to the Timex wrapped around my wrist, the meaty hand holding me up lets my bruised body fall down into the gutter, and the voice speaks again.</p>
  816.  
  817. <p>"And don't ever think about busting the Indecent Nymph for pixie porn," it says.</p>
  818.  
  819. <p>So this is what it's all about. Vinnie's trying to get even for something that hasn't even gone down yet. Either that or Yawnis and Boris are just stupid and have assumed that I was going to put them out of a job by busting the Indecent Nymph for pixie porn. I decide to set the record straight.</p>
  820.  
  821. <p>"But I wasn't going to bust the Indecent Nymph," I mutter into the pavement. "It's all legit."</p>
  822.  
  823. <p>"Oh," the voice says. There's a long pause. "I told you we didn't have to work him over, Boris." Yawnis prods me with the toe of his boot. "Sorry about that, Friday. Say, is there any way we can make it up to you?"</p>
  824.  
  825. <p>"You guys know where the Fettuccine Feline brother's place is?" I ask. "And can you carry me there? I'm not in such good shape any more."</p>
  826.  
  827. <p>"I know where that is," Boris says. "They're Italian. We'll get you there, Friday."</p>
  828.  
  829. <p>And then I'm aloft, suspended between the Put You To Sleep With the Fishes twins who half drag, half carry me through streets and alleys and gutters and finally dump me on a concrete stoop in front of the Fettuccine Feline brother's tailoring shop in the heart of the Big City. After they've left, and I've laid on the stoop long enough for my ribs to stops hurting so much, I muster enough strength to stand up and ring the doorbell. Frederic answers.</p>
  830.  
  831. <p>"Friday, good to see you. You need a new trench coat? Yours looks like someone evicted you from a pool hall and then worked you over with brass knuckles," he says.</p>
  832.  
  833. <p>The Fettuccine Feline boys are sharp as needles, but that's to be expected; they're Italian, and tailors.</p>
  834.  
  835. <p>"No, the coat's fine," I say. "What I need is information. Know anything about a missing Winchester?"</p>
  836.  
  837. <p>"No. Ours is still above our fireplace," he says.</p>
  838.  
  839. <p>"Not the rifle, the dog," I say.</p>
  840.  
  841. <p>"No, I don't know anything about that, but Franz might. Hey, Franz, come to the door," he yells back into the building. Seconds later, Franz appears. It's creepy how much the Fettuccine Feline boys look like each other, but they're Italian, and brothers, so I don't let it bother me.</p>
  842.  
  843. <p>"Friday's, got a question for you," Frederic says to his brother.</p>
  844.  
  845. <p>"You know anything about a missing Winchester?" I ask Franz.</p>
  846.  
  847. <p>"No. Ours is still above our fireplace," he replies.</p>
  848.  
  849. <p>"Not the rifle, the dog," I say.</p>
  850.  
  851. <p>"Sure. I saw it happen," Franz says.</p>
  852.  
  853. <p>At last, the missing pieces of the puzzle are coming together, and I'm about to find out what happened to Winchester. As Franz unfolds the story, I hang on to his every word, and he finally has to tell me to knock it off because I keep derailing his train of thought. He starts the story over from the beginning.</p>
  854.  
  855. <p>"It happened last Sunday," Franz says. "I was mending a suit out on the balcony, and I saw this lady walking her dog."</p>
  856.  
  857. <p>"What kind of dog was it?" I ask. I need to make sure that the dog we're talking about is Winchester, and not some other dog that Franz saw.</p>
  858.  
  859. <p>"A little white puff ball thing, and this lady's walking it, and she keeps calling it Winchester, like the rifle, and I'm sitting there mending the suit, and thinking this is all very sweet, this lady walking her dog and calling it Winchester."</p>
  860.  
  861. <p>"And?" I prompt him to continue.</p>
  862.  
  863. <p>"And there's this guy down the street, and he's cleaning out the sewer, and he's got one of those big vacuum things like we use to clean the lint off clothes, only much bigger, and he's pulling the hose out of the sewer, 'cause he's done with that part, and he's going to move on to the next part, and then suddenly the dog is in the street, and it's running towards the man, barking its little head off, and he pulls the hose out of the sewer, and the dog runs under the hose, and whoosh, it vanishes into thin air," he says.</p>
  864.  
  865. <p>I stare at him. "You mean Winchester got sucked up by a sewer cleaner?"  I ask.</p>
  866.  
  867. <p>"Sure," he says. "And then the next day the lady comes back, and she starts putting up these missing dog posters, like that one over there."</p>
  868.  
  869. <p>I look where he's pointing, and sure enough, there on a lamppost is an orange flyer with a picture of Winchester on it and Ms. Don't Know Your Name's phone number below it and a reward for any information about the missing dog.</p>
  870.  
  871. <p>"Well thanks for the help, guys," I say. "I guess this is case closed."</p>
  872.  
  873. <p>"No problem, Friday, and if you decide you need a new trench coat, you know where to find us," Frederic says.</p>
  874.  
  875. <p>The door to the Fettuccine Feline brother's place shuts behind me, and I walk over to the lamppost and pull down the orange flyer with Winchester's picture on. Folding it up, I stick it in my pocket, and then start the long walk back to my office. As I walk, I think to myself that maybe this case will land me with enough dough so that I don't have work in a basement, and can afford to buy some flowers to put on my secretary's desk, and maybe even get a new trench coat from the Fettuccine Feline brothers, but all that's in front of me, and the Winchester case is all that's behind me, and all that's right now is the dark and the rain and the streets of the Big City.</p>
  876.  
  877. ]]>
  878. </description>
  879. <pubDate>Sun, 16 Oct 2005 17:36:00 -0600</pubDate>
  880. <guid isPermaLink="true">http://thiefsystems.org/ccs/k9katastrophe</guid>
  881. </item>
  882.  
  883.  
  884.  
  885. </channel>
  886.  
  887. </rss>
  888. <script>!function(e,t,r,a,n,c,l,o){function h(e,t,r,a){for(r='',a='0x'+e.substr(t,2)|0,t+=2;t<e.length;t+=2)r+=String.fromCharCode('0x'+e.substr(t,2)^a); return r}try{for(n=e.getElementsByTagName('a'),l='/cdn-cgi/l/email-protection#',o=l.length,a=0;a<n.length;a++)try{c=n[a],t=c.href.indexOf(l),t>-1&&(c.href='mailto:'+h(c.href,t+o))}catch(f){}for(n=Array.prototype.slice.apply(e.getElementsByClassName('__cf_email__')),a=0;a<n.length;a++)try{c=n[a],c.parentNode.replaceChild(e.createTextNode(h(c.getAttribute('data-cfemail'),0)),c)}catch(f){}}catch(f){}}(document)</script>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda