<?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-5418053</id><updated>2011-08-15T13:47:44.108-04:00</updated><category term='antitampering'/><category term='C++'/><category term='performance'/><category term='Perl'/><category term='debugging'/><category term='unix'/><category term='security'/><category term='C'/><category term='programming'/><category term='hashes'/><title type='text'>Mike's Blog</title><subtitle type='html'>My random thoughts, mental wanderings, and rantings.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5418053.post-3591776271087840916</id><published>2010-11-17T10:42:00.000-05:00</published><updated>2010-11-17T10:42:31.040-05:00</updated><title type='text'>Ampersands and the Fortune 500</title><content type='html'>Trivia contests in bars keep on growing in popularity in the Boston area. I've been to a couple, but they've never managed to live up to the excitement and intensity of the "quick recall" competitions I took part in during high school.&lt;br /&gt;&lt;br /&gt;A coworker of mine recently attended a trivia night at the Oberon in Cambridge, put on by an outfit from New York named &lt;a href="http://bigquizthing.com/"&gt;Big Quiz Thing&lt;/a&gt;. One of the final questions was: "What's the only company in the Fortune 500 that has an ampersand in its name?" My coworker named the first company that came into his head - Procter &amp;amp; Gamble (not surprising, since we sell analytics software for consumer goods companies). He was informed he was wrong - the correct answer was supposed to be AT&amp;amp;T.&lt;br /&gt;&lt;br /&gt;Because I'm that guy, I have a copy of this year's Fortune 500 in my office. I gave it to him to flip through at work the next day, and he verified that Proctor &amp;amp; Gamble does indeed have the ampersand in its name on the list (as well as on the side of their headquarters in Cincinatti).&lt;br /&gt;&lt;br /&gt;I read through the full 2010 Fortune 500 list and came up with a pretty long list of companies with ampersands in the name:&lt;br /&gt;&lt;br /&gt;7. AT&amp;amp;T&lt;br /&gt;22. Procter &amp;amp; Gamble&lt;br /&gt;33. Johnson &amp;amp; Johnson&lt;br /&gt;173. PG&amp;amp;E Corp&lt;br /&gt;217. BB&amp;amp;T Corp&lt;br /&gt;221. Marsh &amp;amp; McLennan&lt;br /&gt;240. R.R. Donnelly &amp;amp; Sons&lt;br /&gt;273. Air Products&amp;nbsp;&amp;amp; Chemicals&lt;br /&gt;283. Owens &amp;amp; Minor&lt;br /&gt;314. Bed Bath &amp;amp; Beyond&lt;br /&gt;372. Barnes &amp;amp; Noble&lt;br /&gt;394. Reliance Steel &amp;amp; Aluminum&lt;br /&gt;416. Telephone &amp;amp; Data Systems&lt;br /&gt;420. Western &amp;amp; Southern Financial Group&lt;br /&gt;435. Black &amp;amp; Decker&lt;br /&gt;493. H&amp;amp;R Block&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-3591776271087840916?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/3591776271087840916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=3591776271087840916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/3591776271087840916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/3591776271087840916'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2010/11/ampersands-and-fortune-500.html' title='Ampersands and the Fortune 500'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-4991764536755770646</id><published>2010-04-13T17:47:00.006-04:00</published><updated>2010-04-13T18:19:25.272-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Disabling UNIX core Dumps In C</title><content type='html'>When a UNIX program crashes, the operating system writes everything it held in memory out to disk. The resulting file, known as a core file, is pretty handy if you're a programmer trying to figure out what went wrong. You can pull the core file into a debugger like GDB or DBX to figure out what the program was doing when it crashed, and hopefully fix the problem.&lt;br /&gt;&lt;br /&gt;As you'd expect, programmers love core files. The problem is, security guys hate them for the same reason programmers love them: they write out the contents of memory to disk. That means if somebody gets their hands on a core file, they can read any sensitive data the program was holding in memory such as passwords and security keys. It's not difficult to force a program to "crash" and create a core file - the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;gcore&lt;/span&gt; tool is designed to do exactly that.&lt;br /&gt;&lt;br /&gt;If you're writing an application that handles secure data or operates in a secure environment, you can turn off core file creation in the (unlikely, of course) event that your program crashes. UNIX maintains a set of system resource limits for every process on the system: one of those limits is the maximum size of a core file. If we set the maximum size of a core file to 0, core files won't be created for processes that crash.&lt;br /&gt;&lt;br /&gt;Below is a simple C function that uses&amp;nbsp;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;setrlimit()&lt;/span&gt; to set the maximum size of core files to 0:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;sys types.h=""&gt;&lt;sys types.h=""&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;#include &amp;lt;sys/resource.h&amp;gt;&lt;sys resource.h=""&gt;&lt;sys resource.h=""&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;void disableCores() &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&amp;nbsp; struct rlimit rl;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&amp;nbsp; rl.rlim_cur = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&amp;nbsp; rl.rlim_max = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;&amp;nbsp; setrlimit(RLIMIT_CORE, &amp;amp;rl);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you feel you need to disable core files in your program, do it as soon in your program's application as you can. Keep in mind that turning off core files means you're going to have a heck of a time trying to debug real crashes - you might want to use preprocessor directives to only turn off core files when the program isn't running in debug mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-4991764536755770646?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/4991764536755770646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=4991764536755770646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/4991764536755770646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/4991764536755770646'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2010/04/disabling-unix-core-dumps-in-c.html' title='Disabling UNIX core Dumps In C'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-278515614905050271</id><published>2010-04-06T18:42:00.014-04:00</published><updated>2010-04-07T11:47:43.219-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='antitampering'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Detecting &amp; Disabling UNIX Debuggers</title><content type='html'>If you write security or licensing software targeting UNIX/Linux platforms, it's usually just a matter of time until somebody with not-so-good intentions tries to pull apart your software to figure out how to circumvent it. UNIX is definitely a programmer's operating system - a standard debugger like GDB is all you need to trace through any program's execution path.&lt;br /&gt;&lt;br /&gt;Luckily, all UNIX debuggers are easy to detect if you know how they work. The key is that they use the &lt;span style="font-family: courier new;"&gt;ptrace&lt;/span&gt; system service, which provides an interface into the operating system kernel's control structures. ptrace is immensely powerful, but it won't allow a process that's currently being traced to call &lt;span style="font-family: courier new;"&gt;ptrace&lt;/span&gt; on itself or another process. Allowing that has the very real potential to lead to a race condition, which would result in a kernel panic.&lt;br /&gt;&lt;br /&gt;If we want to see if our program is being traced by a debugger, all we have to do is try to start a trace ourselves on a child process. If we aren't being traced, the call to &lt;span style="font-family: courier new;"&gt;ptrace&lt;/span&gt; will succeed. If we are being traced, the call will fail.&lt;br /&gt;&lt;br /&gt;Why a child process? You &lt;em&gt;could&lt;/em&gt; use any process in theory, but we can't guarantee that our process will have the privileges required to start a trace on any process except a fresh child process. (For obvious reasons, the UNIX security model won't let a user call &lt;span style="font-family: courier new;"&gt;ptrace&lt;/span&gt; against a process they don't own unless they're root.)&lt;br /&gt;&lt;br /&gt;The below code snippet implements a &lt;span style="font-family: courier new;"&gt;detect_debugger()&lt;/span&gt; function that returns 1 if a debugger is detected, and 0 if one is not. You can use this function (or one like it) immediately before executing sensitive code. If a debugger is detected, best practices would dictate halting with an error message. If your program has elevated privileges and you feel like being a bit snarky, you can get a system process list and issue a &lt;span style="font-family: courier new;"&gt;SIGTERM&lt;/span&gt; to anything that resembles a debugger.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Courier New, Courier, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/ptrace.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int detect_debugger(void)&lt;br /&gt;{&lt;br /&gt;int status, waitrc;&lt;br /&gt;pid_t child, parent;&lt;br /&gt;&lt;br /&gt;parent = getpid();&lt;br /&gt;&lt;br /&gt;//everything inside this if statement is the child process&lt;br /&gt;if (!(child = fork()))&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if (ptrace(PT_ATTACH, parent, 0, 0))&lt;br /&gt;exit(1);&lt;br /&gt;&lt;br /&gt;waitrc = -1;&lt;br /&gt;while ((waitrc == -1) &amp;amp;&amp;amp; (errno == EINTR))&lt;br /&gt;waitrc = waitpid(parent, &amp;amp;status, 0);&lt;br /&gt;&lt;br /&gt;ptrace(PT_DETACH, parent, (caddr_t)1, SIGCONT);&lt;br /&gt;exit(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (child == -1)&lt;br /&gt;return -1;&lt;br /&gt;&lt;br /&gt;waitrc = -1;&lt;br /&gt;while ((waitrc == -1) &amp;amp;&amp;amp; (errno == EINTR))&lt;br /&gt;waitrc = waitpid(child, &amp;amp;status, 0);&lt;br /&gt;&lt;br /&gt;return WEXITSTATUS(status);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-278515614905050271?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/278515614905050271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=278515614905050271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/278515614905050271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/278515614905050271'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2010/04/detecting-disabling-unix-debuggers.html' title='Detecting &amp; Disabling UNIX Debuggers'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-257346422895820879</id><published>2010-04-05T11:54:00.005-04:00</published><updated>2010-04-07T15:38:12.374-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='hashes'/><title type='text'>Perl: Adding Hash Elements</title><content type='html'>Adding elements to a hash in Perl is a simple exercise, since Perl doesn't force you to do lots of setup work to pre-allocate hash table space and set up a hashing scheme like other programming languages. Just assign your value to your key:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Courier New, Courier, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;$HASH{$key} = $value;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;For example, if you wanted to create a hash containing your favorite MLB baseball teams and their locations you could use code like:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Courier New, Courier, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;$TEAMS{Red Sox} = "Boston";&lt;br /&gt;$TEAMS{Pirates} = "Pittsburgh";&lt;br /&gt;$TEAMS{Orioles} "Baltimore";&lt;br /&gt;$TEAMS{Cubs} = "Chicago";&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;If you're bulk-loading a hash with hardcoded values like the above example, you can also use Perl's list syntax:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Courier New, Courier, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;%TEAMS = (&lt;br /&gt;"Red Sox" =&amp;gt; "Boston",&lt;br /&gt;"Pirates" =&amp;gt; "Pittsburgh",&lt;br /&gt;"Orioles" =&amp;gt; "Baltimore",&lt;br /&gt;"Cubs" =&amp;gt; "Chicago");&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Note that it's a good idea to zero-out the hash structure before you start using it with undef:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Courier New, Courier, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;undef(%TEAMS);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I like to capitalize the names of hashes because I think it makes the code more readable, but that's the sort of thing that can start very long arguments at Perlmonger meetings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-257346422895820879?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/257346422895820879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=257346422895820879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/257346422895820879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/257346422895820879'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2010/04/perl-adding-hash-elements.html' title='Perl: Adding Hash Elements'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-4098185462294929107</id><published>2010-04-02T12:39:00.000-04:00</published><updated>2010-04-07T13:03:58.295-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='hashes'/><title type='text'>Perl: Presizing Hashes</title><content type='html'>If you're a lazy programmer (and why shouldn't you be?), Perl hashes are great because they automatically grow to handle any amount of key/value combinations you want to put in them. At least until you run out of memory, that is.&lt;br /&gt;&lt;br /&gt;This works because Perl keeps track of how much "free" space is available in a hash table, and automatically grows it when it starts to get full. If you're adding a little bit to a hash now and then, or your hash isn't going to be very big, this isn't much of a performance problem. But Perl only grows the hash by the standard memory page size on your system - usually 8KB. If you're bulk-loading a 25MB hash, that means Perl is going to make around 3200 memory allocation calls. &lt;br /&gt;&lt;br /&gt;Memory allocation is relatively lightweight on most modern operating systems, but it's still a heck of a lot more efficient to make a couple calls to obtain large blocks of memory than a lot of calls to obtain small blocks. Perl lets you specify the number of keys you expect to have in your hash before you begin work so it can optimize its memory allocation scheme. For example, if you expected your hash to have 1,000 keys you would call:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border-bottom: #999999 1px dashed; border-left: #999999 1px dashed; border-right: #999999 1px dashed; border-top: #999999 1px dashed; color: black; font-family: Courier New, Courier, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;keys(%ENTRIES) = 1024;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Notice that I used 1024 instead of 1000 - Perl requires your presizing selection to be a power-of-2. With that said, Perl's smart enough to automatically choose the first power-of-2 larger than the value you specify. If I'd specified 1000, Perl would have automatically used 1024.&lt;br /&gt;&lt;br /&gt;Doing this&amp;nbsp;has a nice side-effect: if the system is going to run out of memory and force your program to halt, you'll know it before you do a lot of processing work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-4098185462294929107?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/4098185462294929107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=4098185462294929107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/4098185462294929107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/4098185462294929107'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2010/04/perl-presizing-hashes.html' title='Perl: Presizing Hashes'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-7505644607133618671</id><published>2007-05-09T20:17:00.000-04:00</published><updated>2007-05-09T21:06:23.480-04:00</updated><title type='text'>Notes From San Francisco</title><content type='html'>Ah, San Francisco in May. The weather is perfect - cool and crisp so the &lt;a href="http://blaggblogg.blogspot.com/2005/08/ill-drink-starbucks-if-i-want-you.html"&gt;first cup of Starbucks&lt;/a&gt; smells that much better (and the homeless people don't smell too bad), the fog never makes it any further than the Marin headlands, and I'm here for a trade show so I don't even have to pay for dinner. A couple interesting observations:&lt;br /&gt;&lt;br /&gt;1. Booking a hotel on Powell Street near Union Square seemed like an incredibly good idea when I was sitting in Boston a month ago. After being kept up half the night by the cable cars screeching by, it seems a little less so. (Lest you think I'm some whiny hick from the sticks, I live right next to the Green Line trolleys in Boston. I'm immune to the screeching they make, which can be pretty considerable.)&lt;br /&gt;&lt;br /&gt;2. Note to family members who express concern whenever they learn I'm here: this isn't the 60s or 70s - downtown SF isn't exactly a dangerous place. My hotel is next to Tiffany's, Saks, Cartier, and Armani. Now, the block around the corner is a little sketchy - they only have mid-level retail like Levis and Victoria's Secret. I hear rumors that there's even a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Walgreens&lt;/span&gt; 3 blocks away, but I'm too afraid to walk in a neighborhood like that.&lt;br /&gt;&lt;br /&gt;3. Speaking of bad neighborhoods, what happened to all of the crazy/colorful homeless people? On previous trips I've seen people actually wearing foil helmets while screaming to a light post about CIA mind control, a quasi-naked homeless guy with dread locked pubic hair, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;tranny&lt;/span&gt; hookers harassing tourists in front of the convention center. They all seem to be gone - did Giuliani ship them all down to Santa Monica?&lt;br /&gt;&lt;br /&gt;4. Despite being a major business center and ground-zero for uppity tech companies who are too good for the Valley, hotels (even those that cater to business travelers) are pretty business-unfriendly. I have to get down on my hands and knees and scrabble around behind the bed to find an outlet to plug my laptop into, and the outlet is old enough to make me worried about electrical fires. The wireless Internet connection only works when everybody else is asleep (luckily I'm still on EDT, so I get 3 hours of decent usage every morning). My room didn't have an office chair for the desk, and it took me 2 days to explain to the hotel staff what an office chair was (and finally breaking down and asking a friend how you say "office chair" in Mandarin) to get one. (Just as an FYI to &lt;a href="http://www.sirfrancisdrake.com/"&gt;the hotel in question &lt;/a&gt;- when you show nice office chairs in all of the rooms on your website, it's not crazy for me to want one when the only chair in my room is some art-deco armchair monstrosity that's a foot too short to reach the desk.)&lt;br /&gt;&lt;br /&gt;5. If you've never been to America before and you're in SF for a conference, three quick tips on how to avoid being the subject of stares and verbal abuse:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When you're given a free T-shirt as part of your conference package, you don't immediately strip down to the waist and put it on in the middle of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Moscone&lt;/span&gt; convention center. The proper response is to look at it, and either say "F---! Why can't you people get shirts in any size other than XL?" if you're a web designer or say "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Frack&lt;/span&gt;! Why is XL the smallest size you guys have?" if you're a programmer. &lt;/li&gt;&lt;li&gt;When the convention center is serving the world's worst lasagna, you don't jostle your way to the front of the line causing everyone to spill lasagna on their non-conference-issued shirts. I'll get over you staining my button-down shirt from the discount rack at Macy's, but a couple of us almost had to physically restrain the guy next to me when you got lasagna all over his &lt;a href="http://en.wikipedia.org/wiki/James_Gosling"&gt;James Gosling&lt;/a&gt;-autographed &lt;a href="http://www.java.com/en/dukeszone/"&gt;Duke&lt;/a&gt; t-shirt.&lt;/li&gt;&lt;li&gt;When you're eating a bag of potato chips, don't carefully pull the bag apart at the seams, lay it down flat on a table, and then start licking up the chips like a dog. Use those awesome &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;opposable&lt;/span&gt; thumbs we all have, regardless of where we live.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;6. Reebok's current ad campaign appears to universally suck. The slogan is "run easy", accompanied by reasons why you should run slowly and lose races. They splattered Boston with them 2 days &lt;em&gt;after&lt;/em&gt; the Boston Marathon, and everybody jeers at them. They're all over SF too, and I've overheard several locals mock them as they walked down the sidewalk.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-7505644607133618671?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/7505644607133618671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=7505644607133618671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/7505644607133618671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/7505644607133618671'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2007/05/notes-from-san-francisco.html' title='Notes From San Francisco'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-6663666263272502850</id><published>2007-04-04T15:41:00.000-04:00</published><updated>2007-04-04T15:46:50.423-04:00</updated><title type='text'>April Snow</title><content type='html'>&lt;a href="http://i139.photobucket.com/albums/q282/lamonml/blog/april_snow.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand" alt="" src="http://i139.photobucket.com/albums/q282/lamonml/blog/april_snow.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;At first glance, you might look at this photo and think to yourself, "Wow.  Mike really sucks as a photographer."  And you'd be right.  But my lack of shutter skill isn't the cause of the streaks and blurring in the photo.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The white stuff on the ground isn't sand from the beach - it's snow.  And there's a lot more of it falling from the sky.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;I realize that this is Boston, but still.  Snow on April 4th - that's freakin' ridiculous.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-6663666263272502850?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/6663666263272502850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=6663666263272502850' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/6663666263272502850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/6663666263272502850'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2007/04/april-snow.html' title='April Snow'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i139.photobucket.com/albums/q282/lamonml/blog/th_april_snow.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-423147204491758341</id><published>2007-03-08T14:36:00.000-05:00</published><updated>2007-03-08T15:14:41.852-05:00</updated><title type='text'>Bummer Nation</title><content type='html'>No, this isn't a lame post about how America sucks and we should impeach Bush.  (All of the other motards out in the blogosphere have wasted enough gigabytes of disk space and bandwidth with that crap.)  Instead, I'm talking about Pontiac's new marketing campaign for their Solstice and G6 convertibles, at &lt;a href="http://www.pontiac.com/convertible"&gt;http://www.pontiac.com/convertible&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I factory ordered a Solstice GXP a month or so ago, which means I've somehow ended up on a GM mailing list.  Now while I wait at least 3 months for the guys in Wilmington to assemble my car, they like to remind me that I don't have it yet with these emails.  (Not that I'm missing it much right now - it's been in the single digits up here this week.)&lt;br /&gt;&lt;br /&gt;Before I go any further, everything you've ever heard about car salesmen is true.  I was sitting in the demo car at the dealership, and the guy spent 10 minutes showing me the cup holders and "auxiliary power point" (we called them cigarette lighters in my day, although anyone who even thinks of lighting up a piece of cancer candy in my car is going to get their hand slammed in the door).  I'm not aware of anyone who has even remotely thought of purchasing a 2-seat convertible who cares about cup holders.  No mention of the direct-injection engine technology, dual-scroll turbocharger, or the hydroformed steel body.  I'm not expecting the guy to be able to show me where obscure components are in the engine compartment, but come on.  At least talk about how fast it is - even the marketing folks at GM can apparently handle that: "It's faster than a Porsche!  We swear!  Please believe us!"&lt;br /&gt;&lt;br /&gt;Anyhow, back to "Bummer Nation".  The marketing gimmick is a little Flash presentation that has caricatures of people who are supposedly going to tell you not to buy a convertible, and the reasons they're wrong.  There's "Wet Blanket Mom", who thinks they're unsafe because fun and safety are mutually exclusive.  Her little quote is: "Oh, you need a convertible, fancy pants, like I need a belly shirt."  And then if you click it, there's a little pop-up explaining how safe the Pontiac convertibles are.  (I have my doubts about surviving a high-speed roll in a Solstice like the one James Bond did in his Vanquish, but I'm definitely not putting that thought in &lt;em&gt;my&lt;/em&gt; mom's head.)&lt;br /&gt;&lt;br /&gt;Then there's "The Hibernator", obviously modeled on someone I work with.  His quote: "Good gravy, there's a dusting of snow out there, driving will be absolute mayhem!"  In fact, the guy I work with is so much like this caricature that he started ticking off all the reasons I was dumb for buying a rear-wheel drive car in Boston when he learned I'd put down a deposit.  I'd have pointed out that I learned to drive in snow in a staggeringly vast rear-wheel drive car (an '84 Impala) without the advantages of ABS and stability control, but he was having too much fun telling me how dumb I was.  I didn't want to ruin it for him.&lt;br /&gt;&lt;br /&gt;And my personal favorite: "Hair-Obsessed Semi-Hottie".  Her description: "After hours of trowel and putty work getting her face on, nothing is going to mess it up - least of all your convertible."  When you click her, you're informed "The only mirror you should be checking this chick out in - the rearview."  Ironically, I couldn't make the Pontiac sales guy understand why I didn't want to pay an extra $1K for air conditioning I'd never use.  My rationale was "If it's hot enough for AC, it's hot enough to put the top down."  (Of course, I always forget that people up here freak out when it's over 85 degrees.  Where I'm from, that's a mild summer day.)  He used about 20 variations on the "what about your girlfriend's hair?" gambit, to which my response was a polite version of "if she doesn't like it, I'm sure I can find a new one."&lt;br /&gt;&lt;br /&gt;There's several others including "Smug Import Guy" and "The Vise", but you can check them out on your own time if you care.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-423147204491758341?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/423147204491758341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=423147204491758341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/423147204491758341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/423147204491758341'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2007/03/bummer-nation.html' title='Bummer Nation'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-4225837621649428609</id><published>2006-12-09T07:48:00.000-05:00</published><updated>2006-12-09T08:05:31.589-05:00</updated><title type='text'>Science in New Jersey</title><content type='html'>While sipping coffee this Saturday morning and flipping through some email, I had the TV on in the background.  Instead of the news, some Saturday morning kids' show called "Beakman's World" was on.  It's a psuedo-science-educational show that seems targeted towards the 3-10 age range.&lt;br /&gt;&lt;br /&gt;As I was listening to it, something jumped out at me.  Everyone on the show - Beakman, the chick in the weird outfit who is somehow managing to wear 5 hair scrunchies at the same time, and the guy dressed up as a rat - all had the most outrageous New Jersey accents you've ever heard.  I had to pop in a Sopranos DVD for comparison.  Yep - Beakman and friends make the Sopranos characters sound like they're from Illinois.  And the Sopranos actors are &lt;em&gt;trying&lt;/em&gt; to ham up a New Jersey accent.  I always thought kids shows were like the national network news shows - everyone tries to have as flat a "modern American" accent as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-4225837621649428609?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/4225837621649428609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=4225837621649428609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/4225837621649428609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/4225837621649428609'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2006/12/science-in-new-jersey.html' title='Science in New Jersey'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-116256348387666300</id><published>2006-11-03T08:59:00.001-05:00</published><updated>2006-11-16T13:04:41.128-05:00</updated><title type='text'>KFed Gets Tagged</title><content type='html'>Ah, the joy of tagging.  Judging by this link, my fellow Amazon users know the joy of tagging.  Judging by this same link, Kevin Federline does not.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Playing-Fire-Kevin-Federline/dp/tags-on-product/B000IU3YLY/ref=tag_dp_ct_sa/002-3394238-1285634"&gt;http://www.amazon.com/Playing-Fire-Kevin-Federline/dp/tags-on-product/B000IU3YLY/ref=tag_dp_ct_sa/002-3394238-1285634&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just in case someone from Amazon decides to clean it up, the tags on this particular page include (but are not limited to):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;talentless &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;garbage &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;laughable &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;idiot&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;crap&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;loser&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;poser&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;torture &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;trash &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;wannabe &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;asshat &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;cause for suicide &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;causes diarrhea &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;gave me the runs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;made me sterile &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;magically craptastic&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;no talent assclown&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;rich wife&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;would rather eat a turd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;abominable agony&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;appalling&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;atrocity&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;audible hemmorage&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;auditory jihad&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;aural assault&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;dead-beat&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;ear bleach&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;eats his own poop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;excrutiating dreck&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;four horsemen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;heinous&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;horrifying &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;talentless wannabe clown&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;killed my cat&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;loathsome&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;makes baby jesus cry&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;makes cancer look fun &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000000;"&gt;no talent&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are others that are even more fun, but this is a classy blog and we don't use that kind of language here.&lt;br /&gt;&lt;br /&gt;(Just in case you're wondering, I wasn't actually conducting a search for KFed on Amazon.  I was clicking on random tags while drinking my first cup of coffee to see where it would take me.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-116256348387666300?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/116256348387666300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=116256348387666300' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/116256348387666300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/116256348387666300'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2006/11/kfed-gets-tagged_03.html' title='KFed Gets Tagged'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5418053.post-116238943341398241</id><published>2006-11-01T08:38:00.000-05:00</published><updated>2006-11-16T13:04:40.869-05:00</updated><title type='text'>And you thought you were having a bad morning...</title><content type='html'>There was a small traffic jam on the Mass Pike on the way into work this morning. On its own that's nothing unusual, but the cause was.&lt;br /&gt;&lt;br /&gt;Everybody headed westbound was stopping to rubberneck an interesting tableau on the eastbound lanes. There were three state police cruisers on the shoulder, with all of their lights flashing. They were arranged like the police cars at the end of a high-speed chase in California, with a late-model Jeep in the middle. (Yes, I admit to being morbidly fascinated by high-speed chases. I lost the tiny smidgen of respect I might have had for OJ when he drove 30 mph &lt;em&gt;below&lt;/em&gt; the speed limit while running from the po-po.) If you're not familiar with the giant traffic jam known as the Pike eastbound during morning rush hour, OJ still drove about 30 mph faster than it's possible to drive on the Pike in the morning. That makes the whole post-high-speed chase scene even more interesting. Did the guy refuse to stop while driving so slow that the cops could have gotten out of their cars and kept up with him by running? Were the cops really pissed off because Dunkin Donuts ran out of Boston creams? (I know I am when that happens.)&lt;br /&gt;&lt;br /&gt;One cruiser had its nose in the ditch at an angle in front of the Jeep. (Driving very fast at an angle in front of the car being chased is supposed to force them to stop or hit the police car and stop. Now that I've shamefully admitted to watching high-speed chases on TV, I can say with certainty that this never actually works except for Dirty Harry, Magnum PI, Starsky, Hutch, and Nash Bridges. If you're already running from the cops, you apparently don't have much to lose by hitting one of their cars.) The remaining two cruisers were parked side-by-side about 30 feet behind the car.&lt;br /&gt;&lt;br /&gt;The guy in the Jeep (who looked surprisingly more like a clean-cut 40-something white guy dressed in business-casual attire on his way to work at the phone company than your stereotypical perp) was being smashed up against the back of the Jeep by one cop, who was attempting to simultaneously frisk him and keep him smashed up against the car. The second cop was standing about 4 feet away with his gun drawn and pointed at the guy's head, while the third cop was standing back by the cars talking on a walkie-talkie.&lt;br /&gt;&lt;br /&gt;I have no idea what this guy did, but I'm assuming he had a kilo of blow on the dash board and a backseat full of illegal guns from Georgia to elicit this kind of response. It felt nice to know that no matter what happens in the next 4 hours, at least one guy had a much worse morning than I could possibly have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5418053-116238943341398241?l=lamonml.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lamonml.blogspot.com/feeds/116238943341398241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5418053&amp;postID=116238943341398241' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/116238943341398241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5418053/posts/default/116238943341398241'/><link rel='alternate' type='text/html' href='http://lamonml.blogspot.com/2006/11/and-you-thought-you-were-having-bad.html' title='And you thought you were having a bad morning...'/><author><name>Michael</name><uri>http://www.blogger.com/profile/18108431106188173993</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
