<?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'><id>tag:blogger.com,1999:blog-18314879</id><updated>2009-06-21T21:12:11.786-06:00</updated><title type='text'>blog.josephhall.com</title><subtitle type='html'>Computer geek gone chef and back again</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.josephhall.com/feed.xml'/><author><name>Joseph</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>398</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18314879.post-7300969572489275066</id><published>2009-05-30T22:06:00.001-06:00</published><updated>2009-06-01T10:05:15.717-06:00</updated><title type='text'>Replacing AWStats</title><content type='html'>Don't get me wrong; I've been a big fan of &lt;a href="http://awstats.sourceforge.net/"&gt;AWStats&lt;/a&gt; for years. It's great for giving me a high-level overview of how my sites are doing, traffic-wise. The day-by-day breakdown is nice, and if I don't mind looking at the big picture for my site a month at a time (which is usually good), then it's perfect. When I started working on a more complex setup than just a few low-traffic blogs, then it started to show its limitations. Let me tell you what I mean.&lt;br /&gt;&lt;br /&gt;In our current setup at work (or at least the one that we've been moving toward), we have three web servers. Each server is behind a load balancer, and serves exactly the same sites. When I started monitoring, we had 200+ sites active. We wanted to have stats for each domain on each server, plus the stats for each domain across all servers, plus the stats for all domains on each individual server.&lt;br /&gt;&lt;br /&gt;AWStats requires one separate config file per domain, per server, plus another separate config file per domain for all servers, plus a separate config for the server-wide stats. That means we're looking at 800+ separate config files. I wrote a script to automatically generate all of these for me, but they're still a pain to keep track of.&lt;br /&gt;&lt;br /&gt;Before I parse out the log files, I need to combine multiple log files into massive composite log files (domain-wide and server-wide), in chronological order so that AWStats doesn't choke. As you can imagine, this requires a considerable amount of resources.&lt;br /&gt;&lt;br /&gt;AWStats also maintains a flat data file per config file per month, all in the same directory. Assuming we keep just a year's worth of data, we're looking at 9600+ separate files in that directory. At this point, one wonders why we can't just store everything in a database.&lt;br /&gt;&lt;br /&gt;Now that you've seen the kind of management nightmare that I have to deal with, with just the features that AWStats does have, I think you can see where my frustrations begin. But I can't be content just being unhappy with existing features; I want new features too. And anybody that's ever looked at the main awstats.pl file knows how much of a beast it is to figure out just what's going on, much less change anything.&lt;br /&gt;&lt;br /&gt;I ended up adding some glue of my own to make things a little easier. Remember, not only do I have hundreds of config files and thousands of data files, I also have to pull them up in the first place. As it turns out, the script that I wrote to automate building config files also builds an HTML file with links to all of the AWStats pages in it. I even added a quick ping script to periodically hit each domain, and place a colored dot next to the domain name to indicate its active status (green is good, red is bad, blue and yellow are proprietary indicators that a site responded, but not in a normal manner). I even have other indicators set up to tell me things like whether a site has an SSL cert, today's hits so far, yesterday's hits, green up arrows to tell me if today's hits are higher then yesterdays, red down arrows if they are lower, yellow right arrows if the traffic is the same, you get the idea.&lt;br /&gt;&lt;br /&gt;Maybe I'm just selfish, but I want a stats program that can handle all of this gracefully, and for not a lot of money. Free (as in freedom, and beer) is ideal. But since I ultimately decided to write my own, it certainly wasn't free as in time. But it was fun, and I learned a lot about AWStats while I was at it.&lt;br /&gt;&lt;br /&gt;Incidentally, it turns out AWStats does support clusters kind of like our load balancer setup, but I didn't find that out until I spent a lot of time in the various parts of it. And I haven't taken the time to figure out how they do it; I already had a solution in mind anyway.&lt;br /&gt;&lt;br /&gt;I hope this post gives you an idea of why I started thinking about replacing the great AWStats, I program which I still love and respect. If you're interested in looking at my code so far, I have packed it up for public consumption. Information about its operation and shortcomings are in the README.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.josephhall.com/downloads/watchman_http_20090530.tar.bz2"&gt;Clicky!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7300969572489275066?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7300969572489275066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7300969572489275066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7300969572489275066'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/05/replacing-awstats.html' title='Replacing AWStats'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-6931994933756995451</id><published>2009-05-22T08:53:00.002-06:00</published><updated>2009-05-22T09:08:49.438-06:00</updated><title type='text'>Not So Inspirational Thoughts</title><content type='html'>I believe I've mentioned before that my primary responsibilities at work are as the systems administrator. It's something that Ive dabbled in with several previous companies, and taught a lot of classes on at my last job. Now I do it full time.&lt;br /&gt;&lt;br /&gt;I was talking to my brother about it some months ago, explaining a few of the concepts of server security that I've either learned from others before me, or have picked up on my own. We might even have talked a little bit about social engineering and corporate security. After a while, my brother said to me, "so basically, &lt;span style="font-style:italic;"&gt;good security is a fascist regime&lt;/span&gt;."&lt;br /&gt;&lt;br /&gt;I thought about it for a moment, and said, "yeah, I guess it is."&lt;br /&gt;&lt;br /&gt;Yesterday I mentioned this conversation to my boss. He laughed and said, "yeah, that makes perfect sense. In fact, &lt;span style="font-style:italic;"&gt;any mechanical process that is a democracy is a failure&lt;/span&gt;."&lt;br /&gt;&lt;br /&gt;Hope you all enjoy those thoughts as we head into the Memorial Day weekend. Me, I've got a few company servers to enforce martial law on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-6931994933756995451?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=6931994933756995451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6931994933756995451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6931994933756995451'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/05/not-so-inspirational-thoughts.html' title='Not So Inspirational Thoughts'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-7885067859322289585</id><published>2009-05-08T12:19:00.003-06:00</published><updated>2009-05-08T13:07:17.721-06:00</updated><title type='text'>Soundex</title><content type='html'>Today at work we were talking about spelling issues that have come up with phone reps, while trying to look up customer names in our database. For instance, it might sound like the customer is saying her name is Cassy, when in fact she spells it Cassie or Cassi. I used to know a guy who spelled his name Eron (instead of the more traditional Aaron).&lt;br /&gt;&lt;br /&gt;How does one deal with this problem? Some of the solutions that were coming up were pretty scary-sounding, and started to drift into areas of serious security concerns. I finally spoke up and said something to the effect of, "if I could offer a suggestion, how do you all feel about looking up records by soundex?" I suddenly had three very interested faces looking in my direction.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Soundex"&gt;Soundex&lt;/a&gt; is something that any serious genealogist is well familiar with, but for some reason it doesn't seem to be that common in the programming world. That's a real shame, because it's so useful. And fortunately for Perl and MySQL developers, tools already exist for you.&lt;br /&gt;&lt;br /&gt;First, the basics:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Take a word, and write down the first letter of that word.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Drop all of the vowels remaining in the word.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove all duplicate letters (i.e. LL becomes L).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If "H" or "W" separate two letters with the same soundex code, the consonant to the right is ignored.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Convert the remaining consonants to numbers:&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;b, f, p, v =&gt; 1&lt;/li&gt;&lt;br /&gt;&lt;li&gt;c, g, j, k, q, s, x, z =&gt; 2&lt;/li&gt;&lt;br /&gt;&lt;li&gt;d, t =&gt; 3&lt;/li&gt;&lt;br /&gt;&lt;li&gt;l =&gt; 4&lt;/li&gt;&lt;br /&gt;&lt;li&gt;m, n =&gt; 5&lt;/li&gt;&lt;br /&gt;&lt;li&gt;r =&gt; 6&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Save only the first three numbers. If you run out before you reach three digits, pad with zeros.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Using this code, the name "Joseph" would be encoded as "J100". "McAllister" would be "M242". See how easy that is?&lt;br /&gt;&lt;br /&gt;MySQL has a couple of built-in functions that utilize soundex. The first, amazingly enough, is the "&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex"&gt;SOUNDEX()&lt;/a&gt;" function. This function doesn't give a standard soundex value; it actually encodes the whole word, giving you a minimum of 4 characters, but an arbitrary maximum. For instance:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; select soundex('mcallister');&lt;br /&gt;+-----------------------+&lt;br /&gt;| soundex('mcallister') |&lt;br /&gt;+-----------------------+&lt;br /&gt;| M24236                | &lt;br /&gt;+-----------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you want it to return a standard soundex with a maximum of four characters, you can use the "SUBSTRING()" function:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; select substring(soundex('mcallister'),1,4);&lt;br /&gt;+--------------------------------------+&lt;br /&gt;| substring(soundex('mcallister'),1,4) |&lt;br /&gt;+--------------------------------------+&lt;br /&gt;| M242                                 | &lt;br /&gt;+--------------------------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;MySQL also has a built-in function called "SOUNDS LIKE" that actually performs a SOUNDEX() function in the background:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; select distinct first_name from customer where first_name sounds like 'corey' limit 10;&lt;br /&gt;+------------+&lt;br /&gt;| first_name |&lt;br /&gt;+------------+&lt;br /&gt;| Corey      | &lt;br /&gt;| cherie     | &lt;br /&gt;| Cory       | &lt;br /&gt;| Carrie     | &lt;br /&gt;| corri      | &lt;br /&gt;| cheri      | &lt;br /&gt;| cesar      | &lt;br /&gt;| CHERRY     | &lt;br /&gt;| Cierra     | &lt;br /&gt;| cora       | &lt;br /&gt;+------------+&lt;br /&gt;10 rows in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;On one hand, we got a few names that most definitely weren't "corey". But on the other hand, the query was inherently case-insenstive, and offered a lot of wiggle room.&lt;br /&gt;&lt;br /&gt;Perl also has a couple of Soundex modules available in &lt;a href="http://search.cpan.org/"&gt;CPAN&lt;/a&gt;, such as &lt;a href="http://search.cpan.org/~markm/Text-Soundex-3.03/Soundex.pm"&gt;Text::Soundex&lt;/a&gt;. This module is also pretty easy to use:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;use Text::Soundex;&lt;br /&gt;print soundex("Ashcraft"), "\n";       # prints: A226&lt;br /&gt;print soundex_nara("Ashcraft"), "\n";  # prints: A261&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That second function, "soundex_nara()", is pretty important for doing US Census work, since the National Archives and Records Administration (NARA) uses &lt;a href="http://www.archives.gov/genealogy/census/soundex.html"&gt;a slightly different encoding scheme&lt;/a&gt;. Theirs is probably the version that most genealogists are going to be familiar with.&lt;br /&gt;&lt;br /&gt;This is something that's definitely handy for looking up a lot of data, when the actual spelling is a little fuzzy. Maybe it will find its way into your database queries at some point now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7885067859322289585?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7885067859322289585' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7885067859322289585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7885067859322289585'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/05/soundex.html' title='Soundex'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-8261218621118043029</id><published>2009-04-22T07:43:00.000-06:00</published><updated>2009-04-22T09:12:29.571-06:00</updated><title type='text'>The Other Joseph Halls</title><content type='html'>I thought I'd take a moment to tell you about some of the other Joseph Halls. As it turns out, it's kind of a common name. When I was a kid, there were four Joseph Halls in the Salt Lake phone book. I don't know how many there are now, since I haven't even opened a phone book for years, but I can tell you that none of them are me (unlisted).&lt;br /&gt;&lt;br /&gt;When I was a newish Perl hacker, I came across a book called &lt;a href="http://www.amazon.com/Effective-Perl-Programming-Programs-Developers/dp/0201419750"&gt;Effective Perl Programming&lt;/a&gt;, by &lt;a href="http://effectiveperl.blogspot.com/"&gt;Joseph N Hall&lt;/a&gt;. It felt odd to have another one of me in my community, especially since the other one was published, and his co-author was the great Randal Schwartz. I ended up buying his book, mostly because I liked the reviews. The fact that I could keep a Perl book with my name on the cover at my desk was a bonus. As it turns out, it's a pretty good book. If you're into Perl and want to get better, I highly recommend it.&lt;br /&gt;&lt;br /&gt;The next Joseph Hall that I would run into was &lt;a href="http://josephhall.org/"&gt;Joseph Lorenzo Hall&lt;/a&gt;. You see, around the same time I found Joseph N Hall's book, I ended up buying josephhall.com, josephhall.net and josephhall.org. I did nothing with them for years, and eventually let the .net and .org expire. Not long after, I decided to check up on them to see if they were still available. The .org was not. But I couldn't help find the new owner of josephhall.org fascinating. He's yet another smarter me, with a PhD. I've been following &lt;a href="http://josephhall.org/nqb2/"&gt;his blog&lt;/a&gt; in my feed reader for a while, and &lt;a href="http://josephhall.org/nqb2/index.php/2009/04/21/gaimanlong"&gt;yesterday's post&lt;/a&gt; was truly interesting to me. He's a &lt;a href="http://www.neilgaiman.com/"&gt;Neil Gaiman&lt;/a&gt; fan too! I also know from his site and his blog that he's a &lt;a href="http://josephhall.org/nqb2/index.php/hacks:"&gt;computer geek&lt;/a&gt; and even a bit of a &lt;a href="http://josephhall.org/nqb2/index.php/food:"&gt;food geek&lt;/a&gt;. You should check out his blog just on principle.&lt;br /&gt;&lt;br /&gt;That of course leaves josephhall.net. A few months ago I got a call from a man wanting to buy josephhall.com from me. I told him that it was not for sale. He told me that it was for his son, another Joseph Hall, and that it didn't look like I was even using www.josephhall.com. I told him that it was because I had that redirecting to blog.josephhall.com. He looked, and found that I was indeed actively using my site. He eventually realized that it was futile to try and buy my domain, and I wished him luck in finding another solution. As I spoke with him, I ran a whois on josephhall.net and found it avaialable. Figuring he might buy that, I checked an hour later and found that his name was indeed listed. Some weeks later, I visited &lt;a href="http://josephhall.net/"&gt;the site&lt;/a&gt; and found out why this new Joseph Hall needed a site: he's apparently an up and coming Elvis impersonator. There's a part of me that thinks that's just awesome. So go check him out as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8261218621118043029?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8261218621118043029' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8261218621118043029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8261218621118043029'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/04/other-joseph-halls.html' title='The Other Joseph Halls'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-150479826283437907</id><published>2009-04-07T21:42:00.002-06:00</published><updated>2009-04-07T23:03:55.028-06:00</updated><title type='text'>Mirepoix</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/mirepoix1_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/mirepoix1_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One of the most important components of classical French cooking is mirepoix. A classic French mirepoix is composed of a 2:1:1 ratio of onions to carrots to celery, meaning that four cups of mirepoix would contain two cups of onions, one cup of carrots and one cup of celery. Some of you may also have heard of the cajun version of mirepoix, called trinity. The ratio is the same, but the carrots have been replaced with green bell peppers.&lt;br /&gt;&lt;br /&gt;Mirepoix is used as the basis of a number of dishes, not only in French cooking, but in other cuisines. The ratios may vary a little, and the name may change (or not even exist at all), but the combination of onions, carrots and celery is classic. Recently some stores have even started selling both mirepoix and "cajun-style mirepoix" in the frozen foods aisles, which is convenient. But if you're willing to take the time to cut your own mirepoix and maybe even freeze it yourself, it will likely be cheaper, plus you can have a little better control over the quality.&lt;br /&gt;&lt;br /&gt;I'm going to show you a few knife cuts here suitable for home use. You've probably seen all sorts of ways to cut these vegetables, and if you've been to cooking school, these methods are probably not what you were taught. They certainly weren't what I was taught, and if I were working for somebody like Thomas Keller, I wouldn't be using them either. But since I'm just cooking for me and my family, they will suffice.&lt;br /&gt;&lt;br /&gt;Let's start with carrots. Go ahead and wash them, but don't bother to peel them. There's no reason to waste good carrot like that. With most carrots I see in grocery stores, you should be able to chop them in half, then cut the smaller half lengthwise into four pieces, and the larger half lengthwise into six pieces.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/carrots1_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/carrots1_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Go ahead and cut up a few carrots like this. When you have enough, there's a tip you can use to save yourself some time. Spread them out in a line across your cutting board, and start working your way across with your knife, dicing them up into pieces with as uniform a size as you can manage. Remember, accuracy is more important than speed, especially considering the sharp knife that I expect you to be working with.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/carrots2_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/carrots2_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Let's turn our attention to the celery. This is actually a little more difficult to cut, because it has kind of an awkward shape to it. The key is to bring it down to the same level as the carrots. First, grab a bunch of celery and cut the end off. Don't go crazy with it, you just want to be able to separate the stalks from each other. Don't be getting all wasteful on me.&lt;br /&gt;&lt;br /&gt;When it's separated, go ahead and wash it in cold water. There were plenty of places for dirt to hide when it was together, and you need to get rid of it. With that out of the way, go ahead and lay a stalk down and slice off a piece of it length-wise.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/celery1_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/celery1_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;With that piece cut away, go ahead and make the next cut. Be careful with these! It's easy to get carried away and go too fast. I've lost track of the number of times that I started to think I was a big-shot chef with ninja knife skills, only to end up slicing myself. Remember, accuracy before speed.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/celery2_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/celery2_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now you have a bunch of long sticks of celery, ready to be diced just like the carrots. Lay 'em out the same way, and chop 'em up.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/celery3_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/celery3_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Last up, onions. These are actually very easy to cut, but they have their own dangers. You know what I'm talking about: the tears. I can give you a few tips, but when it comes down to it, you really just need to learn to suck it up. Take a step back if you start crying too hard, give it a break, then go back to it. First things first, you need to cut the stem end off.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions1_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions1_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Be careful not to cut too much of it off, because you actually need some of it to hold the onion together for a moment. Cut the flower end off too. Then go ahead and slice it in half, from end to end, so that you have two halves that are both held together at the stem.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions2_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions2_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;At this point you can go ahead and peel away the papery part and throw it away. You might even want to put the cut sides face-down on the cutting board for a few minutes. Believe it or not, this seems to help dissipate some of the sting. When you're ready, slice the onion on the side, but not all the way to the stem. You still need that holding it all together.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions3_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions3_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Keep making slices like this at an angle, working your way around the onion. What you're going for are little fingers of onions held together by the stem. Another little tip here: try not to stand directly over the onions when you're cutting them. I think everybody does it, and it just puts you in the line of fire for onion fumes. Stand back a little and you will have fewer tears.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions4_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions4_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;When you've worked your way around, it's time to actually dice the onion. Being careful not to cut your fingers, you want to slice across the cuts that you've already made. This is much easier, because that stem is still holding the onion together.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions5_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions5_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Keep going until you get almost to the stem. Feel free to cut as close to the stem as you want, but don't cut up the stem itself, I don't think you'd really like it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions6_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/onions6_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now that you have your vegetables cut up, you have a few options. If you bought way too many vegetables like I did when I was shooting these pictures, you'll probably want to freeze some of them for later use. You'll want some cookie sheets, or if you have a restaurant supply store nearby you can pick up "half-sheet pans", which are basically just commercial-grade cookie sheets.&lt;br /&gt;&lt;br /&gt;I like to lay down a sheet of parchment on each sheet pan. You don't have to, but keep this in mind: the frozen veggies will stick to the pan itself a lot easier than to a sheet of parchment. Lay out the veggies on the pan, in as thin a layer as you can get it. If you have a lot of veggies like I did, you can put a cooling rack on top of the veggies, add another pan and repeat, but I wouldn't go more than three sheet pans high. The more you stack, the longer it will take to freeze, and you really do want these veggies to freeze as quickly as possible.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/classicfrench/mirepoix2_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/classicfrench/mirepoix2_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Move the sheet pans into the freezer and leave them there for at least two or three hours. Try not to open the door for the first couple of hours; it just slows down the freezing process. When they're nice and cold, you can move the veggies into a resealable plastic bin or bag, and then directly back into the freezer (once you've written the day's date on them, of course).&lt;br /&gt;&lt;br /&gt;It's up to you whether you want to store them separately, or mix together the ratios yourself for freezer storage. Personally, I like to keep them separate. It offers me a little more freedom if I end up needing, say, a cup of carrot puree. I can't think of any reason offhand why I would need such a thing, but stranger things have happened.&lt;br /&gt;&lt;br /&gt;I have another post written that makes excellent use of this mirepoix, but I have no photos to accompany it. Stay tuned, and as soon as I have photos I will post them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-150479826283437907?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=150479826283437907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/150479826283437907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/150479826283437907'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/04/mirepoix.html' title='Mirepoix'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-4209748027461948501</id><published>2009-04-01T21:43:00.003-06:00</published><updated>2009-04-01T22:11:35.594-06:00</updated><title type='text'>Geek/Maker Calendar</title><content type='html'>I don't know if anybody else has noticed, but &lt;a href="http://www.makezine.com/"&gt;Make&lt;/a&gt; seems to be posting a lot of "Maker Birthdays" lately. I thought it might be fun to put together a calendar with as many days as possible filled with not only birthdays of makers, but also birthdays of other notable geeks, and various other noteworthy days for geeks. I know I'm stretching it on a few of these, but hopefully not too far.&lt;br /&gt;&lt;br /&gt;My list so far is not comprehensive, but I'm running low on ideas. I thought I'd open it to my geekier readers, to see if we can fill the comments on this post with other geek days. I have Wikipedia links where available, and links elsewhere otherwise. I'm trying to remain as unbiased as possible, which is why you see certain names on the list that I'm not necessarily a fan of. Please try to be unbiased too. Here's what I have so far:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Jan     1864: George Washington Carver - http://en.wikipedia.org/wiki/George_Washington_Carver&lt;br /&gt;Jan     1942: Brian Kernighan - http://en.wikipedia.org/wiki/Brian_Kernighan&lt;br /&gt;Jan  1, 1894: Satyendra Nath Bose - http://en.wikipedia.org/wiki/Bose-Einstein_condensation&lt;br /&gt;Jan  2, 1920: Isaac Asimov - http://en.wikipedia.org/wiki/Isaac_Asimov&lt;br /&gt;Jan  3, 1892: J.R.R. Tolkien - http://en.wikipedia.org/wiki/J._R._R._Tolkien&lt;br /&gt;Jan  4, 1643: Isaac Newton - http://en.wikipedia.org/wiki/Isaac_Newton&lt;br /&gt;Jan  4, 1809: Louis Braille - http://en.wikipedia.org/wiki/Louis_Braille&lt;br /&gt;Jan  5, 1940: FM Radio first demonstrated to the FCC - http://en.wikipedia.org/wiki/Jan_5&lt;br /&gt;Jan  8, 1942: Stephen Hawking - http://en.wikipedia.org/wiki/Stephen_hawking&lt;br /&gt;Jan 21, 1953: Paul Allen - http://en.wikipedia.org/wiki/Paul_Allen&lt;br /&gt;Feb  4, 1943: Ken Thompson - http://en.wikipedia.org/wiki/Ken_Thompson&lt;br /&gt;Feb  5, 1943: Nolan Bushnell - http://en.wikipedia.org/wiki/Nolan_Bushnell&lt;br /&gt;Feb  8, 1828: Jules Verne - http://en.wikipedia.org/wiki/Jules_Verne&lt;br /&gt;Feb 11, 1847: Thomas Edison - http://en.wikipedia.org/wiki/Thomas_edison&lt;br /&gt;Feb 18, 1745: Alessandro Volta - http://en.wikipedia.org/wiki/Alessandro_Volta&lt;br /&gt;Feb 24, 1955: Steve Jobs - http://en.wikipedia.org/wiki/Steve_jobs&lt;br /&gt;Mar  3, 1847: Alexander Graham Bell - http://en.wikipedia.org/wiki/Alexander_Graham_Bell&lt;br /&gt;Mar 11, 1952: Douglas Adams - http://en.wikipedia.org/wiki/Douglas_Adams&lt;br /&gt;Mar 13, 1733: Joseph Priestley - http://en.wikipedia.org/wiki/Joseph_Priestley&lt;br /&gt;Mar 14, 1879: Albert Einstein - http://en.wikipedia.org/wiki/Albert_Einstein&lt;br /&gt;Mar 14      : Pi Day&lt;br /&gt;Mar 16, 1953: Richard Stallman - http://en.wikipedia.org/wiki/Richard_Stallman&lt;br /&gt;Mar 17, 1948: William Gibson - http://en.wikipedia.org/wiki/William_Gibson&lt;br /&gt;Mar 24      : Ada Lovelace Day - http://blog.makezine.com/archive/2009/03/today_is_ada_lovelace_day_celebrati.html&lt;br /&gt;Mar 31, 1811: Robert Bunsen - http://en.wikipedia.org/wiki/Robert_Bunsen&lt;br /&gt;Apr 16, 1867: Wilbur Wright - http://en.wikipedia.org/wiki/Wright_brothers&lt;br /&gt;May 11, 1918: Richard Feynman - http://en.wikipedia.org/wiki/Richard_Feynman&lt;br /&gt;Jun  6, 1954: Tim O'Reilly - http://en.wikipedia.org/wiki/Tim_O%27Reilly&lt;br /&gt;Jun  8, 1955: Tim Berners-Lee - http://en.wikipedia.org/wiki/Tim_Berners-Lee&lt;br /&gt;Jun 19, 1623: Blaise Pascal - http://en.wikipedia.org/wiki/Blaise_Pascal&lt;br /&gt;Jun 23, 1912: Alan Turing - http://en.wikipedia.org/wiki/Alan_turing&lt;br /&gt;Jun 26, 1824: William Thomson, 1st Baron Kelvin - http://en.wikipedia.org/wiki/William_Thomson,_1st_Baron_Kelvin&lt;br /&gt;Jul 10, 1856: Nikola Tesla - http://en.wikipedia.org/wiki/Nikola_Tesla&lt;br /&gt;Jul 17, 1971: Cory Doctorow - http://en.wikipedia.org/wiki/Cory_Doctorow&lt;br /&gt;Jul 20, 1969: Apollo 11 lands on the moon&lt;br /&gt;Jul 30, 1863: Henry Ford - http://en.wikipedia.org/wiki/Henry_ford&lt;br /&gt;Jul 30, 1962: Alton Brown - http://en.wikipedia.org/wiki/Alton_brown&lt;br /&gt;Aug  8, 1901: Ernest Lawrence - http://en.wikipedia.org/wiki/E._O._Lawrence&lt;br /&gt;Aug 11, 1950: Steve Wozniak - http://en.wikipedia.org/wiki/Steve_Wozniak&lt;br /&gt;Aug 12, 1887: Erwin Schrodinger - http://en.wikipedia.org/wiki/Erwin_Schr%C3%B6dinger&lt;br /&gt;Aug 19, 1871: Orville Wright - http://en.wikipedia.org/wiki/Wright_brothers&lt;br /&gt;Aug 19, 1906: Philo Farnsworth - http://en.wikipedia.org/wiki/Philo_Farnsworth&lt;br /&gt;Aug 20, 1970: John Carmack - http://en.wikipedia.org/wiki/John_Carmack&lt;br /&gt;Sep  9, 1941: Dennis Ritchie - http://en.wikipedia.org/wiki/Dennis_Ritchie&lt;br /&gt;Sep 24, 1954: Larry Wall - http://en.wikipedia.org/wiki/Larry_Wall&lt;br /&gt;Oct  7, 1885: Niels Bohr - http://en.wikipedia.org/wiki/Niels_Bohr&lt;br /&gt;Oct 17, 1984: Randall Munroe - http://en.wikipedia.org/wiki/Randall_Munroe&lt;br /&gt;Oct 28, 1955: Bill Gates - http://en.wikipedia.org/wiki/Bill_gates&lt;br /&gt;Oct 31, 1959: Neal Stephenson - http://en.wikipedia.org/wiki/Neal_Stephenson&lt;br /&gt;Nov  7, 1867: Marie Curie - http://en.wikipedia.org/wiki/Marie_Curie&lt;br /&gt;Nov  8, 1954: Bill Joy - http://en.wikipedia.org/wiki/Bill_Joy&lt;br /&gt;Dec  9, 1906: Grace Hooper - http://en.wikipedia.org/wiki/Grace_Hopper&lt;br /&gt;Dec 10, 1815: Ada Lovelace - http://en.wikipedia.org/wiki/Ada_lovelace&lt;br /&gt;Dec 24, 1818: James Prescott Joule - http://en.wikipedia.org/wiki/James_Prescott_Joule&lt;br /&gt;Dec 26, 1791: Charles Babbage - http://en.wikipedia.org/wiki/Charles_Babbage&lt;br /&gt;Dec 26, 1937: John Conway - http://en.wikipedia.org/wiki/John_H._Conway&lt;br /&gt;Dec 27, 1822: Louis Pasteur - http://en.wikipedia.org/wiki/Louis_Pasteur&lt;br /&gt;Dec 28, 1969: Linus Torvalds - http://en.wikipedia.org/wiki/Linus_Torvalds&lt;br /&gt;Dec 29, 1800: Charles Goodyear - http://en.wikipedia.org/wiki/Charles_Goodyear&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I have a few other names that I've come up with that either I don't have birthdays for, or am not sure if they warrant being on the list.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;E.G. Kingsford (Kingsford Charcoal)&lt;br /&gt;Jul 22, 1968: Alan Cox - http://en.wikipedia.org/wiki/Alan_Cox&lt;br /&gt;Damian Conway - http://en.wikipedia.org/wiki/Damian_Conway&lt;br /&gt;Dave Bradley (CTRL-ALT-DEL) - http://en.wikipedia.org/wiki/David_Bradley_(engineer)&lt;br /&gt;JD Frazer (User Friendly) - http://en.wikipedia.org/wiki/J.D._Frazer&lt;br /&gt;Guido van Rossum - http://en.wikipedia.org/wiki/Guido_van_Rossum&lt;br /&gt;Robert Morris - http://en.wikipedia.org/wiki/Robert_H._Morris_(cryptographer)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Anyone else want to submit some names?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-4209748027461948501?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=4209748027461948501' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4209748027461948501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4209748027461948501'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/04/geekmaker-calendar.html' title='Geek/Maker Calendar'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-8164643974702146348</id><published>2009-03-30T20:56:00.003-06:00</published><updated>2009-04-08T10:50:29.983-06:00</updated><title type='text'>More Harm Than Good</title><content type='html'>I ran across &lt;a href="http://www.seanmichaelragan.com/html/%5B2009-03-26%5D_Power_use_of_white_vs_black_screens_in_LCDs_and_CRTs.shtml"&gt;an interesting item&lt;/a&gt; in my feed reader the other day. In brief, there is &lt;a href="http://www.blackle.com/"&gt;a site&lt;/a&gt; that claims to be an energy-efficient version of Google, just because it uses a black background instead of white. The problem is, black screens are actually less energy-efficient on LCD monitors than on CRTs. And since the world is trying to leave CRTs behind, Blackle is actually doing more harm than good with its black backgrounds.&lt;br /&gt;&lt;br /&gt;This reminded me of &lt;a href="http://www.petakillsanimals.com/"&gt;another site&lt;/a&gt; that I happened upon recently. The basic gist is, &amp;#112;&amp;#101;&amp;#116;&amp;#97;, an organization that claims to be saving animals, is actually killing them by the boatload. In my opinion, the problem isn't so much that they're euthanizing animals, as it is that they're trying to cover it up. But the focus of this site seems to be the other part of it: an organization that claims to be saving animals is actually killing animals. More harm than good.&lt;br /&gt;&lt;br /&gt;While I was mentioning these things to my brother, he brought up another one. Sorry, no link on this one, but I'm sure there's something out there. Ordinary indandescent bulbs are being replaced by compact flourescent bulbs everywhere. The problem is, flourescent bulbs contain mercury, a known toxin. At our house we've been systematically replacing indandescent bulbs with flourescent bulbs, as the indandescent bulbs burn out. I haven't had a flourescent bulb burn out yet (we moved in less than a year ago, and are supposed to expect many years to come), but when one does burn out we're supposed to take it to a special center or something to dispose of it, because of the mercury.&lt;br /&gt;&lt;br /&gt;I don't know about you, but I don't know where this magical, mystical place of compact flourescent bulb recycling is. And I'd be willing to bet that most of America has no clue either. In fact, I'd be surprised if the majority of Americans knew that they were screwing in little mercury capsules into all of those electrical sockets in their house.&lt;br /&gt;&lt;br /&gt;I guess there's a few lessons to take away here. I think I may have said some of them before, like don't take medical advice from me because I'm not a doctor and in fact can't even manage to open a computer without cutting myself. Also, logic that seems infallable to you might be absolutely idiotic to somebody who actually knows what they're talking about. And let's not forget that just because some big, faceless organization claims to be &lt;a href="http://www.treehugger.com/files/2006/08/walmart_to_sell.php"&gt;helping you help the environment&lt;/a&gt;, doesn't mean they're telling the whole story.&lt;br /&gt;&lt;br /&gt;Maybe it's time to start questioning things instead of taking them for granted.&lt;br /&gt;&lt;br /&gt;UPDATE: Okay, it was weird enough that so many people posted about the CFLs. But I didn't mind because some intelligent things were being said. Then somebody posted without reading the other comments, and it seemed a little less intelligent.&lt;br /&gt;&lt;br /&gt;Look, if you're that worried about the CFLs, just get an LED-based light bulb. They have no mercury, they use even less power than the CFLs, and they'll last much, much longer. They're also terribly expensive right now, but if you're that worried about both mercury and incandescent bulbs, they're really your best shot.&lt;br /&gt;&lt;br /&gt;And that's it. I'm shutting of comments on this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8164643974702146348?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8164643974702146348' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8164643974702146348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8164643974702146348'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/03/more-harm-than-good.html' title='More Harm Than Good'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-4252737901208393257</id><published>2009-03-29T20:44:00.004-06:00</published><updated>2009-03-30T13:27:51.385-06:00</updated><title type='text'>Three Cheesecakes</title><content type='html'>I did a little experimenting with cheesecakes recently. Now, when I say experimenting, I mean these probably aren't what you think of when you think of cheesecake. And you know, that's a real shame, because these really are delicious. But if you're feeling a little iffy about them, don't worry. If you remember my &lt;a href="http://blog.josephhall.com/2007/03/mini-gnome-cheesecakes.html"&gt;mini gnome cheesecakes&lt;/a&gt;, you'll know that you can make little tiny versions of the cheesecakes to sample, and if you like it then just quadruple the recipe and make a big cheesecake. That's right, these cheesecakes can be made with empty tuna cans. Let's take them one at a time, and I apologize in advance for the monotonous photos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Cheddar Apple Cheesecake&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/Cheesecake/DSCF0070_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/Cheesecake/DSCF0070_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This may seem a little strange to anyone that lives outside of New England, but cheddar and apple really do go well together. And while this is a sweet cheesecake, I didn't want it to be too sweet, so I went with a pretzel crust. The sugar is actually an attempt to make the crust hold together a little better. After a few tests both ways, I think it worked. As you can see in the photo, I added a little cinnamon on top of the cheesecakes, which I think really makes it.&lt;br /&gt;&lt;br /&gt;Crust:&lt;br /&gt;&lt;br /&gt;5 Tbsp pretzel crumbs&lt;br /&gt;1 Tbsp sugar&lt;br /&gt;1 1/2 Tbsp butter&lt;br /&gt;&lt;br /&gt;Filling:&lt;br /&gt;&lt;br /&gt;8 oz cream cheese, softened&lt;br /&gt;1/4 cup sugar&lt;br /&gt;1 large egg&lt;br /&gt;3 Tbsp unsweetened applesauce&lt;br /&gt;1/2 cup shredded cheddar&lt;br /&gt;&lt;br /&gt;Garnish:&lt;br /&gt;&lt;br /&gt;Ground cinnamon, as needed&lt;br /&gt;&lt;br /&gt;* Preheat oven to 350F.&lt;br /&gt;* Prepare 4 empty tuna cans, as per the &lt;a href="http://blog.josephhall.com/2007/03/mini-gnome-cheesecakes.html"&gt;mini Gnome cheesecake&lt;/a&gt; recipe.&lt;br /&gt;* Melt the butter, and toss with pretzel crumbs and sugar. Divide evenly among the tuna cans, about 2 Tbsp per can.&lt;br /&gt;* Press crusts into the bottom of the cans.&lt;br /&gt;* Blind-bake the crusts at 350F for 10 minutes.&lt;br /&gt;* Allow crusts to cool completely on counter, and drop the oven temperature to 275F.&lt;br /&gt;* Cream together the cream cheese and sugar.&lt;br /&gt;* Mix in the egg.&lt;br /&gt;* Mix in the apple sauce and cheddar.&lt;br /&gt;* Divide the cream cheese mixture among the tuna cans.&lt;br /&gt;* Sprinkle cinnamon on top of the cheesecakes.&lt;br /&gt;* Bake at 275F for 15 minutes.&lt;br /&gt;* Turn off the oven and leave the door open for one minute.&lt;br /&gt;* Close the door and allow the cheesecakes to cool for 45 minutes with the oven.&lt;br /&gt;* Chill overnight before serving.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Bacon and Onion Cheesecake&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/Cheesecake/DSCF0082_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/Cheesecake/DSCF0082_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm not going to lie here. Savory cheesecakes freak people out, just like you already started freaking out when you read the name of this cheesecake. I think that this kind of cheesecake is actually what the tuna can form factor is perfect for. Yes, they are kind of intense to eat on their own. No, you wouldn't ever serve it for dessert. Tell you what, instead of thinking of it as cheesecake, how about if you think about it as a dip? The only difference between this and a cheeseball is that this is flat, and tastes way better.&lt;br /&gt;&lt;br /&gt;Crust:&lt;br /&gt;&lt;br /&gt;5 Tbsp pretzel crumbs&lt;br /&gt;1 Tbsp sugar&lt;br /&gt;1 1/2 Tbsp butter&lt;br /&gt;&lt;br /&gt;Filling:&lt;br /&gt;&lt;br /&gt;4 strips bacon&lt;br /&gt;1 cup diced onion&lt;br /&gt;1/2 cup diced red bell pepper&lt;br /&gt;1/2 tsp chopped garlic&lt;br /&gt;dash Worcestershire sauce&lt;br /&gt;8 oz cream cheese, softened&lt;br /&gt;1/4 cup sour cream&lt;br /&gt;1 large egg&lt;br /&gt;2 Tbsp whole milk&lt;br /&gt;&lt;br /&gt;* Preheat oven to 350F.&lt;br /&gt;* Prepare 4 empty tuna cans, as per the &lt;a href="http://blog.josephhall.com/2007/03/mini-gnome-cheesecakes.html"&gt;mini Gnome cheesecake&lt;/a&gt; recipe.&lt;br /&gt;* Melt the butter, and toss with pretzel crumbs and sugar. Divide evenly among the tuna cans, about 2 Tbsp per can.&lt;br /&gt;* Press crusts into the bottom of the cans.&lt;br /&gt;* Blind-bake the crusts at 350F for 10 minutes.&lt;br /&gt;* Allow crusts to cool completely on counter, and drop the oven temperature to 275F.&lt;br /&gt;* Fry the bacon till nice and crispy. Remove from the pan to cool, but save the drippings.&lt;br /&gt;* Saute the onion and bell pepper in the bacon drippings until nice and browned. When the onion gets transluscent, add the garlic and Worcestershire sauce. Allow to cool completely.&lt;br /&gt;* Cream together the cream cheese and sour cream.&lt;br /&gt;* Mix in the egg.&lt;br /&gt;* Mix in the milk.&lt;br /&gt;* Crumble the bacon, and fold into the cream cheese mixture with the veggies.&lt;br /&gt;* Divide the cream cheese mixture among the tuna cans.&lt;br /&gt;* Bake at 275F for 15 minutes.&lt;br /&gt;* Turn off the oven and leave the door open for one minute.&lt;br /&gt;* Close the door and allow the cheesecakes to cool for 45 minutes with the oven.&lt;br /&gt;* Chill overnight before serving.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Chinese Five-Spice Cheesecake&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/Cheesecake/DSCF0108_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/Cheesecake/DSCF0108_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Okay, so maybe the savory cheesecake was a little weird. And this one probably seems weird too. Don't worry, this is probably the most normal of these cheesecakes. Depending on who makes it, Chinese Five-Spice tends to have ingredients like cinnamon, cloves, nutmeg, ginger, allspice, things like that. Kind of like a pumpkin pie. I even threw in a gingersnap crust, which is excellent. You'll like this one.&lt;br /&gt;&lt;br /&gt;Crust:&lt;br /&gt;&lt;br /&gt;5 Tbsp gingersnap crumbs&lt;br /&gt;1 Tbsp sugar&lt;br /&gt;1 1/2 Tbsp butter&lt;br /&gt;&lt;br /&gt;Filling:&lt;br /&gt;&lt;br /&gt;8 oz cream cheese, softened&lt;br /&gt;1/4 cup sugar&lt;br /&gt;1 large egg&lt;br /&gt;1 tsp Chinese Five-Spice powder&lt;br /&gt;&lt;br /&gt;* Preheat oven to 350F.&lt;br /&gt;* Prepare 4 empty tuna cans, as per the &lt;a href="http://blog.josephhall.com/2007/03/mini-gnome-cheesecakes.html"&gt;mini Gnome cheesecake&lt;/a&gt; recipe.&lt;br /&gt;* Melt the butter, and toss with gingersnap crumbs and sugar. Divide evenly among the tuna cans, about 2 Tbsp per can.&lt;br /&gt;* Press crusts into the bottom of the cans.&lt;br /&gt;* Blind-bake the crusts at 350F for 10 minutes.&lt;br /&gt;* Allow crusts to cool completely on counter, and drop the oven temperature to 275F.&lt;br /&gt;* Cream together the cream cheese and sugar.&lt;br /&gt;* Mix in the egg.&lt;br /&gt;* Mix in the spices.&lt;br /&gt;* Divide the cream cheese mixture among the tuna cans.&lt;br /&gt;* Bake at 275F for 15 minutes.&lt;br /&gt;* Turn off the oven and leave the door open for one minute.&lt;br /&gt;* Close the door and allow the cheesecakes to cool for 45 minutes with the oven.&lt;br /&gt;* Chill overnight before serving.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-4252737901208393257?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=4252737901208393257' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4252737901208393257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4252737901208393257'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/03/three-cheesecakes.html' title='Three Cheesecakes'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-4967127501627808063</id><published>2009-02-27T19:11:00.001-07:00</published><updated>2009-02-27T19:11:00.172-07:00</updated><title type='text'>Checking for open files</title><content type='html'>A coworker presented me with an interesting problem today. We have an SFTP server set up, where a client is uploading a series of files on a pretty regular basis. My coworker needed to process the files as soon as they were finished uploading, but he didn't know how to tell when it was finished. Since the SFTP server would be keeping the file open until it was finished writing it, all we needed to do was find out whether the file was still open.&lt;br /&gt;&lt;br /&gt;In Bash, there's an easy way to check for this. When called without any arguments, the lsof program shows a list of all open files on the system. You can also call it with the full path of the filename that you are checking, and it will show only the processes that have that file open. For example, we can look at /dev/null, which seems to pretty much always be open on my system:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ &lt;b&gt;lsof /dev/null&lt;/b&gt;&lt;br /&gt;COMMAND     PID  USER   FD   TYPE DEVICE SIZE NODE NAME&lt;br /&gt;gconfd-2   6668 jhall    0u   CHR    1,3      6663 /dev/null&lt;br /&gt;gconfd-2   6668 jhall    1u   CHR    1,3      6663 /dev/null&lt;br /&gt;gconfd-2   6668 jhall    2u   CHR    1,3      6663 /dev/null&lt;br /&gt;...snip...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The lsof program also has an exit status of 0 if it returns any information, and an exit status of 1 if it did not. Since we're only interested in that error status and not in any of the information returned, we can throw it away by redirecting STDOUT and STDERR to /dev/null with &amp;&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ &lt;b&gt;lsof /dev/null &amp;&gt; /dev/null &amp;&amp; echo "The file is open" || echo "The file is not open"&lt;/b&gt;&lt;br /&gt;The file is open&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Breaking this down a little further, if "lsof /dev/null &amp;&gt; /dev/null" was successful (returned an error status of 0), then it will run the first echo command. If not, that will make both the lsof command and the first echo command unsuccessful (error status of 1 for both) and the echo command after the pipes will run.&lt;br /&gt;&lt;br /&gt;If it's a little confusing having "/dev/null" in that command twice, try running it on a file that's likely to not be open, like /proc/cpuinfo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ &lt;b&gt;lsof /proc/cpuinfo &amp;&gt; /dev/null &amp;&amp; echo "The file is open" || echo "The file is not open"&lt;/b&gt;&lt;br /&gt;The file is not open&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Just a handy little bit of Bash Fu to brighten your day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-4967127501627808063?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=4967127501627808063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4967127501627808063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4967127501627808063'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/02/checking-for-open-files.html' title='Checking for open files'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-8904669896721433002</id><published>2009-02-25T20:41:00.005-07:00</published><updated>2009-02-25T21:51:07.802-07:00</updated><title type='text'>Ginger Beer Test #1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/drinks/dscf0049_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/drinks/dscf0049_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Those who know me well know that one of my favorite things in life is a good ginger beer. Not sugary-sweet ginger ale, but real, spicy, knock-you-off-your-feet ginger beer. I've been wanting to make it for a couple of years now, I just hadn't gotten around to it. Well, this week I finally got off my butt and gave it a try. This batch was a test run, to help me get my bearings. There will be more.&lt;br /&gt;&lt;br /&gt;But first, we need to define what exactly makes a good ginger beer. It depends on who you are really, and I'm going to guess that my definition is probably not the same as yours. My three favorite brands are, in order:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.bundaberg-brew.com.au/"&gt;Bundaberg&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.sodapopstop.com/products/detail.cfm?link=123"&gt;Cock N Bull&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Vernors"&gt;Vernors&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Okay, so Vernors is really a ginger ale, but it's still up there. There are a few properties to look for in ginger ale and ginger beer. First of all, ginger ales are generally divided into two categories: golden and dry. I've found golden to be a little darker, sweeter, and more strongly-flavored. Unfortunately, it's near-impossible to find. Dry ginger ale is lighter, and extremely common. Being a Utah boy, I grew up on Canada Dry and Schweppes, but when I lived in New Hampshire I got used to Seagrams too.&lt;br /&gt;&lt;br /&gt;But these really lack something in my opinion, and that's real ginger. I like mine spicy, but not harsh. Smoothness is also important to me, but not so much as spiciness. And that's where ginger beer comes in. It's stronger, tastes more like ginger, is often brewed, and the good stuff almost always has little fibers of real ginger in it.&lt;br /&gt;&lt;br /&gt;I've tried a lot of different kinds of ginger beer, and I've divided (most of) my favorites into two categories: Jamaican-style and Australian-style. Jamaican ginger beer is spicy, strong, and has been known to make me cough, just getting a whiff of a newly-opened bottle. Unfortunately, it generally seems to be harsh, overly-spicy, and flavored with other spices in addition to ginger. In the small, relatively unknown world of ginger beers, this seems to be the most common, and I've probably tried a good 20 or 30 different brands, but few more than once.&lt;br /&gt;&lt;br /&gt;Australian ginger beer is different. I've had a good dozen or so different types of this, and few of them miss their mark. They're strongly-flavored, spicy, but also smooth. They seem to be true to the ginger flavor, and when I get ahold of a few bottles, they don't remain full for long. It was this variety that I was looking to reproduce.&lt;br /&gt;&lt;br /&gt;The first task of course was to find some recipes. I wasn't sure yet whether I was going to make a composite recipe, I was just looking to see what I could find. Most of the recipes I came across were long and ridiculously complex. One of them had a longer list of equipment than actual ingredients. Finally, I found &lt;a href="http://www.recipezaar.com/Homebrew-Ginger-Beer-154486"&gt;a recipe on Recipezaar&lt;/a&gt; that was simple, but kind of long and very poorly-written. It seemed to be more of a Jamaican recipe, but I figured you've gotta start somewhere.&lt;br /&gt;&lt;br /&gt;I didn't use the recipe as-is of course. I made a few changes, and then took notes while I more or less followed their directions. My ingredient list was as follows:&lt;br /&gt;&lt;br /&gt;1/2 tsp yeast&lt;br /&gt;1/2 cup warm water (110F)&lt;br /&gt;1 3/4 liter water&lt;br /&gt;3/4 oz/wt freshly-grated ginger&lt;br /&gt;1/4 tsp anise&lt;br /&gt;5 whole cloves&lt;br /&gt;1/2 cup sugar&lt;br /&gt;&lt;br /&gt;I sprinkled the year in the 1/2 cup of warm water and set it aside. I then mixed together all of the other ingredients in a sauce pan, brought it to a boil, and then dropped it to a simmer for 5 minutes. I then killed then heat and let it cool on the counter to 110F (actually, 112F to be exact, but anything below 120F is fine), and then poured in the yeast/water mixture.&lt;br /&gt;&lt;br /&gt;I poured all of this (whole spices and all) into a clean 2-liter bottle, pressed in the sides a little, screwed on the cap and let it sit overnight on the counter. In the morning, the bottle was completely inflated, and you could tell by feeling it that there was a lot of pressure inside. I moved this to the fridge and let it sit until the next evening.&lt;br /&gt;&lt;br /&gt;I tasted the brew before I added the yeast, and I knew I was already in trouble. It was extremely spicy, and the anise overpowered everything. But I was determined to let it age for a couple of days so that I could get a good idea of what it would be like.&lt;br /&gt;&lt;br /&gt;When we uncorked it, there was a lot of sediment. This is to be expected with home-brewed drinks. But it's not something I would want to drink, so I poured it through a tea strainer into some cups and tasted it with my wife and her friend visiting from Wisconsin. Unfortunately, this means I also strained out the ginger fibers, but since we were just about to drink it, I figured it wouldn't be adding any more flavor anyway.&lt;br /&gt;&lt;br /&gt;First of all, the color. It was more cloudy than I expected. I'm okay with that. Next, the carbonation. It was lightly carbonated, not as much as commercial ginger beer, but still decent. Finally, the flavor. It was very spicy, but not as bad as I had feared. The anise still overpowered everything, but it still had a lot of ginger in the finish, to come back and bite you. I suspect the clove was about right (if you like that sort of thing; I'm currently undecided), but that anise just screwed it all up. It was just a little bit sweet for me, but not bad.&lt;br /&gt;&lt;br /&gt;Just a quick note on drinks carbonated with yeast. This is exactly how beer is made. When the yeast gets going, it produces lots of carbon dioxide and a little bit of alcohol. That's what makes bread rise, and makes beer fizzy. Since my brew had only a tiny amount of yeast, and was only allowed to ferment for a couple of days, the alcohol content was negligable. If that is of concern to you, this is the wrong recipe for you.&lt;br /&gt;&lt;br /&gt;I will be starting another bottle tomorrow night, when this one is used up. Now that I have my bearings, I think I have an idea of where I want to take it. I'm going to try multiple changes at first, and then fine-tune it as I get closer to what I want. The next batch will have no anise. That was just a bad idea. I will leave the cloves in there, and probably use the same amount of ginger. This time I'm thinking I may add some lemon juice, and drop the sugar down to 1/3 of a cup. I hope to post results this weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8904669896721433002?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8904669896721433002' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8904669896721433002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8904669896721433002'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/02/ginger-beer-test-1.html' title='Ginger Beer Test #1'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-3575081361240594896</id><published>2009-02-18T20:04:00.004-07:00</published><updated>2009-02-18T20:58:35.834-07:00</updated><title type='text'>Plex Cake</title><content type='html'>It's been a while since I posted, and I'm going to blame that at least partly on being busy. But I did want to share a cake with you that I made this past weekend. It was my daughter's second birthday, and she is a huge &lt;a href="http://en.wikipedia.org/wiki/Yo_Gabba_Gabba"&gt;Yo Gabba Gabba&lt;/a&gt; fan. In fact, she has been watching it almost since her first birthday, so it should come as no surprise that I've been looking forward to making this cake for several months.&lt;br /&gt;&lt;br /&gt;Plex is a robot member of the cast, and is probably one of the most popular cakes for parents to try to make for their kids. But up until this point, I have't seen one with fondant like this, so I'm going to declare myself in the lead. First, the cake:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/cake/DSCF0316_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/cake/DSCF0316_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The yellow part is a white chocolate rolled fondant recipe that I've been working on for a while. It's not quite to where I want it, but it's getting there. The cake was a chocolate cake based on &lt;a href="http://cookeatshare.com/recipes/chocolate-cloud-cake-503"&gt;a recipe I found online&lt;/a&gt;. It it filled with a chocolate mousse based on &lt;a href="http://www.foodnetwork.com/recipes/good-eats/chocolate-mousse-recipe/index.html"&gt;a recipe by Alton Brown&lt;/a&gt; and fresh raspberries. Anything you see that is covered with white fondant (except for the eyes) is molded from crispy rice treats. And the antenna is a cigar cookie wrapped in semi-sweet chocolate.&lt;br /&gt;&lt;br /&gt;The black square where his eyes are was actually about half an inch higher, but it seemed to have slipped down during transportation. I eventually gave up on trying to make the ball on the top of his antenna red, or trying to make his ears at all. And no, I never planned to attach even parts of his arms to his shoulders. Deal with it.&lt;br /&gt;&lt;br /&gt;It was kind of a fun cake to build, but like all cakes that I make like this, I was reminded repeatedly why I don't often make cakes like this. The fondant didn't want to cooperate (I think I may have added just a touch too much white chocolate to it), keeping the chocolate in temper for that antenna was a miracle (the four backup antennas that I made all lost their temper) and speaking of the antenna, when I opened the tin of cigar cookies, they were all broken. Actually, that's pretty much why I decided to wrap it in chocolate; it was actually a couple of pieces of broken cigar cookie, reinforced with chocolate.&lt;br /&gt;&lt;br /&gt;I'm going to go ahead and post my fondant recipe here, because I seem to keep losing it. It is not the easiest thing to make, and I only recommend it for those who are truly serious. I use a stand mixer for part of making this, but heed well this warning: if you try to make it from start to finish with any kind of electric mixer, &lt;span style="font-style:italic;"&gt;you &lt;span style="font-weight:bold;"&gt;will&lt;/span&gt; burn out the motor!&lt;/span&gt; And yes, this recipe is measured entirely by weight. If you're not willing to weigh the ingredients, you're not serious enough to make it.&lt;br /&gt;&lt;br /&gt;White Chocolate Rolled Fondant (still considered a test recipe)&lt;br /&gt;&lt;br /&gt;0.5 oz/wt powdered gelatin&lt;br /&gt;2.1 oz/wt cold water&lt;br /&gt;0.8 oz/wt glycerin&lt;br /&gt;9.6 oz/wt corn syrup&lt;br /&gt;10.5 oz/wt white chocolate&lt;br /&gt;2 lbs confectioners sugar + extra just in case&lt;br /&gt;&lt;br /&gt;* Bloom the gelatin in cold water for 3 minutes.&lt;br /&gt;* Start melting the white chocolate gently over a double-burner.&lt;br /&gt;* Add the glycerin and corn syrup. Heat gently to dissolve, while whisking occassionally.&lt;br /&gt;* Remove everything from the heat, and whisk in the white chocolate.&lt;br /&gt;* Add the mixture and all of the sugar to a stand mixer use the paddle to mix on low.&lt;br /&gt;* When the mixer starts to sound as if it is having trouble, turn it off and finish kneading the mixture by hand. I have found that using a bowl scraper to cut and mix the fondant helps keep your hands clean.&lt;br /&gt;* If the mixture seems to be too wet and sticky, sprinkle in some more sugar.&lt;br /&gt;* When you have formed a homogeneous ball of dough, move into an air-tight container for a couple of hours to let it rest.&lt;br /&gt;&lt;br /&gt;Like I said, I still consider this recipe in a testing stage. It clearly requires more than 2 lbs of sugar, but I'm not sure how much more. If I had to guess, I'd say it was just a couple of ounces, maybe as much as half a cup. Also, I originally went with only 10 oz of white chocolate, and the fondant seemed a little too pliable. 10.5 oz made it a little too hard. Next time around, I'm going to go with 10.25 oz of white chocolate and see how it goes. I think that the rest of the ingredients are pretty solid, it's just a matter of getting the best measurements for the sugar and the chocolate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-3575081361240594896?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=3575081361240594896' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/3575081361240594896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/3575081361240594896'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/02/plex-cake.html' title='Plex Cake'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-5073124864182727506</id><published>2009-01-22T19:50:00.002-07:00</published><updated>2009-01-22T19:50:00.346-07:00</updated><title type='text'>A Quick SNMP Primer</title><content type='html'>Just a quick disclaimer to go with my quick primer: I'm relatively new to SNMP myself. This article doesn't aim or claim to be comprehensive. It's just meant to help you get started.&lt;br /&gt;&lt;br /&gt;SNMP is the Simple Network Management Protocol. &lt;a href="http://hans.fugal.net/blog/2009/01/10/sensible-graphs-with-cacti"&gt;It has been said&lt;/a&gt; that not only is it not simple, but it's usually used for monitoring more than managing devices. I don't fully agree with this sentiment. It does have some weirdness, but once you get over that it's not so bad.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Structure of Management Information&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Before we get into practical usage, we need to talk theory. SNMP partly describes a network protocol, but it also describes an organizational structure. This structure is called the Structure of Management Information, or SMI for short. This is a tree that branches out into various nodes called Object Identidiers, or OIDs. Each level of this tree has its own set of numbers for each node. At the moment, we're only concerned with a specific path in this tree, sometimes referred to as MIB-II, or the Management Information Base. The OID for this node is 1.3.6.1.2.1.&lt;br /&gt;&lt;center&gt;&lt;img src="http://blog.josephhall.com/uploaded_images/mib-ii.png" /&gt;&lt;/center&gt;&lt;br /&gt;This node is actually the root of where our queries are performed. In fact, a lot of times this OID is just printed as mib-2. The nodes underneath this are what we will be querying.&lt;br /&gt;&lt;br /&gt;Some of the nodes that we're interested in here are system (1), interfaces (2), at (3), ip (4) and so on. For example, the OID that describes a system is mib-2.system.sysDescr.0. The long name for this is .iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0, and the numerical notation for this is .1.3.6.1.2.1.1.1.0. On my Linux box, this is often the output of the "uname -a" command.&lt;br /&gt;&lt;br /&gt;If you need some time to digest this part, go for it. I think this is the biggest thing to overcome with SNMP. When you're ready, come back for the next part.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SNMP Versions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are three main versions of SNMP that you will run into: 1, 2c and 3. Version 2c is the community version of version 2, and while it does provide a little extra information, it isn't much of an improvement over version 1.&lt;br /&gt;&lt;br /&gt;These two versions use passwords called community strings to provide access. There is a read-only community used for monitoring (reading values from the device), and a read/write community used for management (setting values on the device). The most common default community string for read-only access is "public". The most common default community string for read/write access is "private".&lt;br /&gt;&lt;br /&gt;Most SNMP-enabled devices have these as their defaults, and as we all know, most sysadmins are still too lazy to change the defaults. Fortunately, the Net-SNMP package in Linux has a little bit better default configuration. It is set to only listen to requests from the local machine. Even better, the Net-SNMP server isn't installed by default on most Linux distributions, so don't worry about your system being vulnerable like that out of the box.&lt;br /&gt;&lt;br /&gt;SNMP version 3 introduced the concept of usernames and passwords, rather than just communities. But versions 1, 2c and 3 all suffer from one major shortcoming: they send their authentication and their data in the clear. Fortunately, version 3 also supports encryption for either authentication or data transfer or both.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Setting Up SNMP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Installation is easy, but there are a couple of different packages that you want. On RHEL5 and Fedora 10:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yum install net-snmp net-snmp-utils&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;On Ubuntu:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;apt-get install snmpd snmp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For those of you who are interested, net-snmp == snmpd and net-snmp-utils == snmp.&lt;br /&gt;&lt;br /&gt;Once you have it installed, go ahead and blow away the configuration file:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The default configuration is a lot to deal with. We're going to keep it simple. Create a new /etc/snmp/snmpd.conf file with the following line:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;rocommunity yourcommunitystring&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;...where yourcommunitystring is, of course, whatever community string you want to use. This is really all the configuration you need for versions 1 and 2c, though you can add more if you like.&lt;br /&gt;&lt;br /&gt;If you want version 3 instead, the configuration is a little different. There are actually two files to edit here, and the second one probably doesn't exist by default. First, edit the /etc/snmp/snmpd.conf file and add the following line:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;rouser username&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;...where username is of course the username that you want to use. You'll also need to set up a password. Of course, we would never want to use a plaintext password if we didn't want to. Depending on your version of Net-SNMP, we have a few options available to us. We can use either MD5 or SHA for authentication, and DES (or AES in more recent versions) for data transfer. I'm going to assume that you want to use SHA and DES. Create if necessary and edit the /var/net-snmp/snmpd.conf file and add the following line:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;createUser username SHA password1 DES password2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;...where username is of course the username that you specified in the /etc/snmp/snmpd.conf file, password1 is your SHA password and password2 is your DES password. I know it seems kind of scary to leave passwords out in the open in plain text files like this, but don't worry; as soon as SNMP starts up, it will rewrite this file and encrypt the passwords. I should also note that this is the only time you will ever edit this file by hand, and the createUser line is the only line that you will ever add to it.&lt;br /&gt;&lt;br /&gt;When you're ready to start the SNMP service, type in:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;chkconfig snmpd on (RHEL/Fedora systems only)&lt;br /&gt;/etc/init.d/snmpd start&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Viewing SNMP Data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are several commands available for viewing SNMP data, but I'll start you off with just the snmpwalk and snmpget commands for now. Once you get the hang of them, you can start exploring other commands. Usage does differ slightly between versions 1 and 2c, and version 3, but only in authentication.&lt;br /&gt;&lt;br /&gt;If you added the rocommunity line to your /etc/snmp/snmpd.conf file, use the following command to take a look at your MIB-II tree:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;snmpwalk -v 2c -c yourcommunitystring localhost | less&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We're piping the output of the command to less because there can be a lot of information here. You've probably guessed that the -v option specifies the version (1 or 2c) and the -c option specifies the community string. The first line probably looks something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SNMPv2-MIB::sysDescr.0 = Linux bourdain 2.6.24-22-generic #1 SMP Mon Nov 24 18:32:42 UTC 2008 i686 GNU/Linux&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Let's make the names little more verbose. Hit 'q' to exit out of this, and try this command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;snmpwalk -v 2c -c yourcommunitystring -Of localhost | less&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For your reference, that is a capital letter O, not the number zero. When you look at the output of this command, it probably looks more like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 = Linux bourdain 2.6.24-22-generic #1 SMP Mon Nov 24 18:32:42 UTC 2008 i686 GNU/Linux&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hey, you want to really have some fun? Try out this command instead:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;snmpwalk -v 2c -c yourcommunitystring -On localhost | less&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you get the name in numerical format:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;.1.3.6.1.2.1.1.1.0 = STRING: Linux bourdain 2.6.24-22-generic #1 SMP Mon Nov 24 18:32:42 UTC 2008 i686 GNU/Linux&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The amusement never ends. Going back to the full naming format, you'll notice that the first set of lines is in the system node:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;.iso.org.dod.internet.mgmt.mib-2.system...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you scroll down a little, you'll find the interfaces node:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;.iso.org.dod.internet.mgmt.mib-2.interfaces...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We can specify to walk only one of these nodes if we like. Since we're only looking at information under the mib-2 node, we can actually just refer to it by that one group name:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;snmpwalk -v 2c -c yourcommunitystring -Of localhost system | less&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you will only see information in the system group. If you know the exact location of a value that you want to look at, you can use the snmpget command to look at it. The syntax is almost identical to snmpwalk:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;snmpget -v 2c -c yourcommunitystring -Of localhost system.sysDescr.0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now that you know how to get information using community strings, let's switch back to SNMPv3. When we specify "-v 3", we must specify the -u option with a username, instead of the -c option. We also need to let it know what passwords we're using, and how to encrypt them. Your basic snmpwalk command will look something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;snmpwalk -v 3 -u username -a SHA -A password1 -x DES -X password2 -l authNoPriv localhost | less&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you were able to follow along okay when we set these passwords, then most of this line already makes sense to you. The big things to remember now are what options go with what values, and the security level.&lt;br /&gt;&lt;br /&gt;The "-l" option can specify one of three levels: noAuthNoPriv, authNoPriv or authPriv. If for some unknown reason you decide not to use passwords, you would set this to noAuthNoPriv. Otherwise you would use authNoPriv for read-only access or authPriv for read/write access.&lt;br /&gt;&lt;br /&gt;I'm not going to bore you with the output of this command, because you've already seen it. You can use -Of or -On to modify the output, you can specify a group, you can do pretty much whatever you were doing with v1 or v2. The only real difference is authentication. And yes, the snmpget command looks pretty much the same.&lt;br /&gt;&lt;br /&gt;In fact, once you have a handle on these couple of commands, this would probably be a good time to check the man page for snmpcmd. There is not actually a command called snmpcmd, this page just shows you the options that are common to the whole suite of Net-SNMP commands.&lt;br /&gt;&lt;br /&gt;Hopefully this gives you a good foundation for playing with SNMP on your Linux box. Of course, there are volumes written on the subject, and my little artcle doesn't even attempt to cover what they will. But hopefully they will get you over any initial fears about it and get you up and running.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-5073124864182727506?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=5073124864182727506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/5073124864182727506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/5073124864182727506'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/01/quick-snmp-primer.html' title='A Quick SNMP Primer'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-7960676379976200832</id><published>2009-01-22T07:42:00.000-07:00</published><updated>2009-01-22T07:42:00.852-07:00</updated><title type='text'>That Wasn't Nice</title><content type='html'>Okay, so in retrospect, that wasn't very nice of me. I don't post for a couple of weeks, and then when I do it's a walkthrough in Cacti, a program that I've barely mentioned here before. Even worse, Cacti fits into the category of "arcane, even within the already esoteric Linux comminuty". While my walkthrough doesn't technically cover SNMP, it's almost pointless to expect somebody to understand Cacti if they don't know SNMP.&lt;br /&gt;&lt;br /&gt;What I've decided to do to make up for this (to the geek crowd, at least) is write up a brief SNMP primer. I'm still pretty new to it myself, but what I've gotten into so far has proven to be relatively simple, once I got over a few basics that are kind of rough. Expect that primer to be posted shortly.&lt;br /&gt;&lt;br /&gt;For those of you who come here for food, I'll try to post something for you soon too. I don't really know what yet. I'll figure it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7960676379976200832?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7960676379976200832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7960676379976200832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7960676379976200832'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/01/that-wasnt-nice.html' title='That Wasn&apos;t Nice'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-7453648330427496744</id><published>2009-01-21T19:06:00.002-07:00</published><updated>2009-01-21T19:06:00.469-07:00</updated><title type='text'>Monitoring Apache Processes with Cacti</title><content type='html'>I've been setting up Cacti at work to monitor our servers. Last night it occured to me that it might be useful to monitor Apache processes on our web servers. Cacti already has a graph built in for monitoring processes in general, but I just wanted those that matched "httpd". It was a simple thing that I wanted, but setting it up proved to be non-trivial, so I thought I'd share how I set it up. Keep in mind that this is on a RHEL5.2 box. Your distribution may vary.&lt;br /&gt;&lt;br /&gt;First of all, you need a script to gather the information. You already have one mostly built, so use it as a template:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;cd /var/lib/cacti/scripts/&lt;br /&gt;cp unix_processes.pl unix_apache_processes.pl&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Edit that file so that it looks like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;open(PROCESS, "ps ax | grep httpd | grep -c : |");&lt;br /&gt;$output = &lt;PROCESS&gt;;&lt;br /&gt;close(PROCESS);&lt;br /&gt;chomp($output);&lt;br /&gt;print $output;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you need to set up Cacti to use that script. Go into the Console tab in Cacti and click on "Data Input Methods". Click "Add", and use the following values:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Name: Unix - Get Apache Processes&lt;br /&gt;Input Type: Script/Command&lt;br /&gt;Input String: perl &lt;path_cacti&gt;/scripts/unix_apache_processes.pl&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Save it, then go back in and click on "Add" for "Output Fields". Use the following values:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Field [Output]: proc&lt;br /&gt;Friendly Name: Number of Apache Processes&lt;br /&gt;Update RRD File: (checked)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Go ahead and save it. Now go into "Graph Templates" and find the "Unix - Processes" template. Put a check next to it, go find the drop-down box next to "Choose an action", set it to "Duplicate" and click "go". Change the title to "Unix - Apache Processes" and save it.&lt;br /&gt;&lt;br /&gt;Go back into "Graph Templates" and click on the "Unix - Apache Processes" template that you just created. Find everything that says "Processes" and change it to say "Apache Processes", then save it.&lt;br /&gt;&lt;br /&gt;Go into "Data Templates" and find "Unix Processes". Duplicate it like you did with the Graph Template, calling the new template "Apache Processes". Then go back into it and change the "Data Input Method" drop-down to "Unix - Get Apache Processes".&lt;br /&gt;&lt;br /&gt;Go back into "Graph Templates", then "Unix - Apache Processes" again and click on "Item # 1". Change the "Data Source" drop-down to "Apache Processes - (proc)" and hit "save". Do the same for "Item # 2", "Item # 3" and "Item # 4".&lt;br /&gt;&lt;br /&gt;Now when you go into the "Devices" menu and click on one of your web servers, you should see "Unix - Apache Processes" show up on the drop-down box for "Associated Graph Templates". Go ahead and add it, then go up to the top of the device page and click "Create Graphs for this Host". Put a check next to "Unix - Apache Processes" and click "Create".&lt;br /&gt;&lt;br /&gt;Setting up this graph may be pretty straight-forward for the average Cacti user, but there are a lot of steps, and it helps to do them in the right order. This walkthrough should give you a good start for adding more complex graphs to Cacti when you need to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7453648330427496744?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7453648330427496744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7453648330427496744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7453648330427496744'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/01/monitoring-apache-processes-with-cacti.html' title='Monitoring Apache Processes with Cacti'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-382483487518666235</id><published>2009-01-03T20:24:00.002-07:00</published><updated>2009-01-03T21:20:24.636-07:00</updated><title type='text'>Pork Enchiladas</title><content type='html'>I love enchiladas. I remember my dad making them when I grew up. Of course, his were a little different than mine. For instance, he used corn tortillas. And he seemed to like cheese-only enchiladas. I kind of liked 'em like that. But I've discovered that my wife doesn't seem to like cheese-only enchiladas. And I got fed up with corn tortillas long ago. They crack when you try to roll them, they... well, they crack. Isn't that bad enough?&lt;br /&gt;&lt;br /&gt;Lately I've been playing with enchilada sauce. Really, isn't it just a thinned out tomato and chile sauce? I decided to try a little experiment: canned tomato sauce plus taco seasoning. Hey, it's actually not bad. It's a little thick, but it's very close in flavor to some of the store-bought enchilada sauces.&lt;br /&gt;&lt;br /&gt;So bearing all this in mind, let me share with you an enchilada recipe that my family has been eating on occassion lately. It's not exactly traditional, but we like it. But if you want to go back to corn tortillas or something, go for it. You won't hurt my feelings.&lt;br /&gt;&lt;br /&gt;First off, you'll need your enchilada sauce. Whether you use the "real" stuff or you do it my way, it helps to heat it up. I like to use a wide frying pan, to have enough room to dip the tortillas in later. With my version, you need a can of tomato sauce and a couple of Tablespoons of taco seasoning.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0046_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0046_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Stir it all together and heat it up to about a simmer. You don't need to boil it or anything, it just needs to be heated a little. If you want, you can thin it out with a little bit of liquid. Water would be fine, but broth would be better. Once it's ready, put it together with the rest of your ingredients and equipment.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0050_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0050_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We have cheddar cheese, chopped pork, sliced olives, red bell peppers, an 8x8 baking pan, four 8-inch flour tortillas, and a pan full of enchilada sauce. Just a note: about one enchilada in, we put the baking pan next to the enchilada sauce. Step one, coat a tortilla with sauce:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0052_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0052_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Move it to the baking pan and add a hanful of chopped pork:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0056_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0056_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Olives go in next:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0057_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0057_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Chopped red bell peppers:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0059_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0059_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And of course, some cheese:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0060_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0060_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Roll it up and repeat with the rest of the tortillas. You'll want to use all of the pork inside, but be sure to save some of the olives, peppers and cheese for the top. At some point, it's going to look kind of like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0062_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0062_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Go ahead and cover it with a bit of cheese:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0065_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0065_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Add the remaining olives:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0067_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0067_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And the remaining peppers:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0070_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0070_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Slide it into the oven at 350F, until the cheese starts to bubble. It'll probably take about 15 minutes or so.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0074_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/enchiladas0074_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Oh, so tasty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-382483487518666235?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=382483487518666235' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/382483487518666235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/382483487518666235'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/01/pork-enchiladas.html' title='Pork Enchiladas'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-8830585099447360541</id><published>2009-01-02T19:25:00.003-07:00</published><updated>2009-01-02T20:17:30.558-07:00</updated><title type='text'>Fun at Work</title><content type='html'>I'm afraid of being found out.&lt;br /&gt;&lt;br /&gt;Seriously, I don't know that I've ever had so much fun at work. Don't get me wrong, I loved working at Guru Labs, but the situation is different here. Let me explain.&lt;br /&gt;&lt;br /&gt;At Guru Labs, my bosses seemed to have very realistic expectations of me. They hired me, fully knowing that I had gaps in the technical knowledge that they needed me to have. The promise was that they would help fill those gaps, and I would be ready to teach by the time I needed to. If I was not, then they would give me the opportunity to work elsewhere.&lt;br /&gt;&lt;br /&gt;I met the challenge, and before long I was knee-deep in Linux knowledge that I never expected to obtain. There were always new things to learn, and I was always surrounded by people willing to teach me. At the same time, I got to be that person for about a couple dozen students a month. I was having a blast, and I wasn't sure I ever wanted it to end.&lt;br /&gt;&lt;br /&gt;There was just one problem. As much as there was to learn, it sometimes seemed like there was never time to learn it. There were always classes to teach, and there was course ware to write, work to be done. I was constantly surrounded by cool new technologies that often felt barely touchable. And suddenly, it was gone, and I was left to look for another job which could never hope to be as much fun.&lt;br /&gt;&lt;br /&gt;Fortunately, I had prospects in the queue. By the end of the first week I had applied at close to two dozen companies, interviewed at three of them, and had an offer from one of them. By the end of the second week I had already started work at my new company, and was still politely turning down interviews.&lt;br /&gt;&lt;br /&gt;I had actually turned down an offer from this company at the same time I originally accepted an offer from Guru Labs. I had a friend that worked there, but I still had to get hired on my own. When I started, I think the idea was for me to watch my new coworkers and get a feel for what needed to be done. They were programmers who had been doing system administration when it was called for, but it wasn't their thing. Thanks to Guru Labs, I was well-trained in system administration and I just kind of took over.&lt;br /&gt;&lt;br /&gt;This is a company who was small (maybe 20 employees) when I first interviewed, and who is now in the process of growing into a larger company (60+ employees at this location, plus the warehouse, plus the call center in Chicago, etc), but who still has the kind of server setup that one might expect at a small company. I have taken it upon myself to make the servers enterprise-grade.&lt;br /&gt;&lt;br /&gt;This means I get to play with all of the technologies that I didn't really get to play with before. Well, not all of them, but increasingly more. One of my current projects involves four &lt;a href="http://www.redhat.com/rhel/"&gt;RHEL 5.2&lt;/a&gt; virtual machines installed on my notebook using &lt;a href="http://kvm.qumranet.com/"&gt;KVM&lt;/a&gt;, which I am using to test out different &lt;a href="https://www.redhat.com/apps/isv_catalog/AppProfile.html?application_id=1619"&gt;MySQL Cluster&lt;/a&gt; configurations. This week I also started playing with &lt;a href="http://www.cacti.net/"&gt;Cacti&lt;/a&gt;, and &lt;a href="http://www.nagios.org/"&gt;Nagios&lt;/a&gt; is on the horizon.&lt;br /&gt;&lt;br /&gt;One day I looked at our current backup server and decided that it needed more hard drive space. Really we needed a brand new backup server, but I was willing to settle for a new hard drive. My boss came in to talk about it, and by the time he left I was pricing out components for a brand new backup server. This is not the first time I've had a boss that knew less than me about what I did, but it's definitely the first time a boss has not only admitted it, but taken my suggestions on what needs to be done.&lt;br /&gt;&lt;br /&gt;To be honest, I'm not used to this. I was hired based on technical merit and experience, and then given what feels like free reign to do whatever I want. I don't really have free reign, but it feels like it. My boss realizes that I know what needs to be done, and he's willing to let me do it. He doesn't have some kind of personal agenda, he's not caught up in a power struggle, there's none of that. He's trusting to me do what he hired me to do, and his only concern is that I stay focused on the best interests of the company.&lt;br /&gt;&lt;br /&gt;It's so weird. Nearly every day when I drive home from work, I am &lt;span style="font-style:italic;"&gt;elated&lt;/span&gt; about what happened that day and what's going to happen the next. Actually having my opinion listened to on such a regular basis makes me feel like a rock star. And yes, I'm a little worried that I'm going to be found out. Every so often I wonder if my boss is going to realize how much fun I'm having actually doing my job, and start charging me admission.&lt;br /&gt;&lt;br /&gt;I still miss Guru Labs. I certainly wouldn't be in the position I am now without the expert training and unparalleled opportunities that I received there. But I guess fate (if you believe in that sort of thing) decided that it was time for me to cut my teeth elsewhere. I guess it truly is bitter-sweet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8830585099447360541?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8830585099447360541' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8830585099447360541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8830585099447360541'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/01/fun-at-work.html' title='Fun at Work'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-6213813207346472497</id><published>2008-12-29T20:08:00.002-07:00</published><updated>2008-12-29T21:45:50.581-07:00</updated><title type='text'>Lasagna</title><content type='html'>One of my all-time favorite dishes is lasagna. Unfortunately, I don't get to make it very often. It's an easy dish, but to make it right can be time-consuming. It's the type of dish that really benefits from letting the flavors spend some time together. Sure, you can rush this along. Skip over a few steps, cut some corners. But once you've had the taste of a real lasagna done right, you won't go back.&lt;br /&gt;&lt;br /&gt;Before you start, make sure you have all of your ingredients together:&lt;br /&gt;&lt;br /&gt;1 lb ground beef (80% lean)&lt;br /&gt;Worcestershire sauce, to taste&lt;br /&gt;Italian seasoning, to taste&lt;br /&gt;14 oz mirepoix&lt;br /&gt;1 red bell pepper, diced&lt;br /&gt;30 oz tomato sauce&lt;br /&gt;15 oz canned diced tomatoes&lt;br /&gt;2 teaspoons garlic powder&lt;br /&gt;1 teaspoon smoked paprika&lt;br /&gt;1 lb mozzarella&lt;br /&gt;15 oz ricotta&lt;br /&gt;1 large chicken egg&lt;br /&gt;16 oz dry lasagna noodles&lt;br /&gt;Kosher salt, to taste&lt;br /&gt;freshly ground black pepper, to taste&lt;br /&gt;&lt;br /&gt;Some of you are already scoffing at me using things like (presumably store-bought) Italian seasoning and garlic powder. There is no shame in having these things handy. The Italian seasoning I used is pretty dang tasty, and already formulated. I also liked that it, and the garlic powder, were dried. That means you can add them early and have the flavors permeate the dish longer and more easily.&lt;br /&gt;&lt;br /&gt;Before you start on any of this, you'll probably want to preheat the oven to 350F, and grease up a 13x9 baking dish with cooking spray. Go ahead and set it aside for later. Our next step is to brown up about a pound of ground beef.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0110_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0110_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Season to taste with Kosher salt, pepper, Italian seasoning and Worcestershire sauce. I probably used about a Tablespoon of the Italian seasoning and maybe twice that of Worcestershire sauce. Don't cook it too long, just long enough to brown it. And make sure the seasoning is where you want it right now. Trying to compensate later for poor seasoning now isn't going to be easy.&lt;br /&gt;&lt;br /&gt;When it's all nice and browned up, spoon it onto a paper towel-lined plate and set it aside. Try to leave as much of the fat in the pan as possible, you'll need it in a moment.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0111_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0111_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Okay, who here got confused when they saw mirepoix on the ingredient list? Wow, look at all those hands. Don't worry, it's not so bad as you think. Mirepoix is a 2:1:1 ratio of onions to carrots to celery. It's a French thing that works pretty well with Italian dishes. And as it turns out, Kroger has started selling it in the freezer section in little 14 oz bags. Add that, along with the red bell pepper, to the fat and crank the heat to medium-high. We want to get some nice color on these veggies.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0119_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0119_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Did I mention to make sure these are well-seasoned? Kosher salt, pepper, Italian seasoning, Worcestershire sauce. Make sure you season each layer of this dish before moving onto the next one. Speaking of the next layer, once you have some color on your veggies, go ahead and cool down the pan a little by adding the tomato sauce and the diced tomatoes.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0125_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0125_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Time for another layer of flavor. Notice a pattern here? Same drill as before, but go ahead and add in the garlic powder and smoked paprika with the other seasonings (Kosher salt, pepper, Italian seasoning, Worcestershire sauce). Let it simmer for a bit; how long is really up to you. I went for maybe five or ten minutes. I also stole some of it at this point to spread out on the bottom of the baking dish.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0124_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0124_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is important. There are going to be a few layers of pasta in this dish, and you want to make sure you have a tomato sauce layer directly above and below every single layer of pasta. We're not going to use the pasta yet, just keep it in mind.&lt;br /&gt;&lt;br /&gt;While the sauce is simmering, you'd better get the cheese ready. You're going to put together a container of ricotta, about 3/4 lbs of shredded mozz, a single chicken egg, and maybe a Tablespoon of Italian seasoning. I didn't say this in the ingredient list because I forgot it (oops!), but you can add 1/4 cup of grated Parmesan too. Go ahead and mix it all together in a bowl and set it aside. You'll need it in a moment.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0131_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0131_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;When you think you're ready, and you have a layer of sauce in the baking dish, go ahead and add the meat into the sauce. You want to do this after you've sauced the baking dish, because you really don't want the meat stuck to the bottom. You will want a layer of dried noodles, however.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0134_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0134_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I love this part. Didja notice something about the pasta? Like the fact that we didn't blanch it first? So awesome. See, this is the beauty of lasagna: the moisture from the rest of the dish &lt;span style="font-style:italic;"&gt;cooks the noodles for you&lt;/span&gt;. Okay, yeah, it'll add another 20 minutes of cooking time or so. But that's okay; the longer it cooks, the better the flavors marry. Your chances of soggy noodles will also decrease. Next up, add a layer of sauce.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0136_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0136_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This part is actually trickier than it seems. You see, you're going to have four layers of noodles, with sauce layers on both sides. That means eight layers of sauce, and this is number two. The sauce is important: it's responsible for cooking the noodles. But as tricky as that step was, it doesn't compare to this one: add about a third of the cheese mixture. It's easiest if you dollop it in small increments and then spread it with a spatula.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0138_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0138_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Oh man. You're going to hate me right about now, because it's time to add another tomato sauce layer. And then pasta, tomato sauce, cheese, tomato sauce, etc, until you have your top layer of pasta, and it's covered with sauce. Cover that layer with the last 1/4 lb of shredded mozzarella. Don't worry if it looks a little sparse. It'll be plenty.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0144_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0144_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Go ahead and sprinkle, really lightly, some Italian seasoning on top. Remember how I forgot the Parm in the cheese mixture? It may not be a bad idea to sprinkle a couple of Tablespoons on top as well. I'll let you add that to your own ingredient list. Now, go ahead and cover it with some aluminum foil. Try not to let the foil touch any of the cheese.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0146_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0146_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Slide that guy into your 350F oven and give it about 40 minutes. If you think about it, we're really only doing a couple of things here. We're not actually cooking the dish (except for the noodles) because the ingredients are already cooked. That's important to remember with casseroles. You're not cooking them, you're reheating them. Also, we're melting the cheese. But that part really happens at the end. At about 40 minutes, remove the foil and give the lasagna another 10 minutes to melt and maybe even brown the cheese a little.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0148_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0148_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Oh man, doesn't that look good? Well, bad news. You can't touch it yet. I know it's going to be torture, but you need to recover it with foil and let it sit for another half hour. It's gotta have time to cool, and to finish cooking those noodles. If you were to serve it at this point, it would burn your tongue, and the noodles would be a little too al dente.&lt;br /&gt;&lt;br /&gt;A few more points before I let you loose on this dish on your own. First of all, I cheated more on the cheese than I let on. For some reason, Monterrey Jack sounded really good that day, so I used that instead of mozz. In the past, I've also mixed Jack and Cheddar. And one of my all-time favorite lasagnas was dubbed "pain lasagna". Instead of tomato sauce, I used hot enchilada sauce. Instead of meat, I used black beans, pinto beans and corn. I didn't mix them into the sauce, I added them as their own layer underneath the cheese layer. Speaking of cheese, I went with hot pepper Jack and habanero Cheddar that time around. It was so good, it brought tears to my eyes. Actually, the tears were mostly from the pain, but the flavor was good too.&lt;br /&gt;&lt;br /&gt;Lasagna has a lot of room for interpretation. At its most basic, it's little more than alternating layers of sauce, cheese and noodles. Beyond that, you're on your own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-6213813207346472497?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=6213813207346472497' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6213813207346472497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6213813207346472497'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/12/lasagna.html' title='Lasagna'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-3100808198444210047</id><published>2008-12-21T07:47:00.003-07:00</published><updated>2008-12-22T12:36:20.402-07:00</updated><title type='text'>Screen for Beginners</title><content type='html'>Perhaps I got spoiled at the last couple of companies I was at, but I was shocked when I discovered that my new coworkers had never heard of screen, much less used it. In the past couple of years, I have found screen to be such a valuable program that I can't imagine life without it. I use it on a regular basis both at work and at home, partly because it's so handy and partly because I'm a nerd.&lt;br /&gt;&lt;br /&gt;There are plenty of ways to use screen, but there are three things that I like to use it for:&lt;br /&gt;&lt;br /&gt;* Maintaining a perisistent shell on one computer that I can access from multiple computers.&lt;br /&gt;* Maintaining a perisistent development environment.&lt;br /&gt;* Logging into somebody else's shell to monitor them, or demonstrate techniques to them.&lt;br /&gt;&lt;br /&gt;Screen doesn't ship installed on every distribution, but it's easy to get installed:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;RHEL/Fedora&lt;/span&gt;: &lt;span style="font-style:italic;"&gt;yum install screen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ubuntu&lt;/span&gt;: &lt;span style="font-style:italic;"&gt;apt-get install screen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once it's installed, it's easy to get running. Just type "&lt;span style="font-style:italic;"&gt;screen&lt;/span&gt;" from the command prompt. The display will blank, and you'll be left at a prompt that looks just like the one you were just at. If you're doing thing in gnome-terminal, you might see something like [screen 0: bash] in your title bar.&lt;br /&gt;&lt;br /&gt;At this point, you can use the command line exactly as you did before; you're really just running another shell. Go ahead and run &lt;span style="font-style:italic;"&gt;top&lt;/span&gt;, to see what I mean. But now you have a series of commands available, each of which starts with &lt;span style="font-weight:bold;"&gt;CTRL-a&lt;/span&gt;. The first one you'll want to be familiar with is &lt;span style="font-weight:bold;"&gt;CTRL-a d&lt;/span&gt; (that's a &lt;span style="font-weight:bold;"&gt;CTRL-a&lt;/span&gt; followed by a &lt;span style="font-weight:bold;"&gt;d&lt;/span&gt;, not &lt;span style="font-weight:bold;"&gt;CTRL-a CTRL-d&lt;/span&gt;). This will detach from your screen session. When you do this, you'll find yourself at the command prompt that you were at before, with "[detached]" displayed above the prompt.&lt;br /&gt;&lt;br /&gt;At this point, screen is running, but it's in the background. If you didn't exit out of top, then it is still actively running, you just can't see it. Go ahead and open a second terminal window and type in &lt;span style="font-style:italic;"&gt;screen -r&lt;/span&gt;. This will reattach to the screen session, and you will see top still running.&lt;br /&gt;&lt;br /&gt;That's enough to get you going for a basic persistent shell. I know a lot of people that do this on a server with a public IP address, to keep programs like &lt;a href="http://www.irssi.org/"&gt;Irssi&lt;/a&gt; open so that they can log into it from work or from home, without having to actually log out of their chat accounts. But let's take this a little further.&lt;br /&gt;&lt;br /&gt;You should still have &lt;span style="font-style:italic;"&gt;top&lt;/span&gt; running. Keep it open and type in &lt;span style="font-weight:bold;"&gt;CTRL-a c&lt;/span&gt;. This will create a second screen, with its own command prompt. Go ahead and type in &lt;span style="font-style:italic;"&gt;free&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now that you have two screens going, type &lt;span style="font-weight:bold;"&gt;CTRL-a p&lt;/span&gt;. This will switch to the previous screen, where &lt;span style="font-style:italic;"&gt;top&lt;/span&gt; is running. Type &lt;span style="font-weight:bold;"&gt;CTRL-a n&lt;/span&gt; to go to the next screen, where &lt;span style="font-style:italic;"&gt;free&lt;/span&gt; is running. You could also use &lt;span style="font-weight:bold;"&gt;CTRL-a 0&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;CTRL-a 1&lt;/span&gt; to go to a specific screen number. If you hit &lt;span style="font-weight:bold;"&gt;CTRL-a c&lt;/span&gt; again, you'll get yet another screen.&lt;br /&gt;&lt;br /&gt;I've found this to be useful in maintaining a persistent development environment, so that I don't have to leave my notebook at work or close several instances of vim and bash at the end of the day. But let's look at one more feature of screen.&lt;br /&gt;&lt;br /&gt;If your terminal is maximized, go ahead and resize it so that it only takes up half the screen. Hit &lt;span style="font-weight:bold;"&gt;CTRL-a 0&lt;/span&gt; to make sure we're at the screen with &lt;span style="font-style:italic;"&gt;top&lt;/span&gt;. No go ahead and open up another instance of gnome-terminal and maximize it. Type in &lt;span style="font-style:italic;"&gt;screen -x&lt;/span&gt; at the prompt. You will see the &lt;span style="font-style:italic;"&gt;top&lt;/span&gt; screen running, but it won't be taking up the whole window. That's because you've attached to a screen session that was already running somewhere else, and screen is using the display variables from that other screen.&lt;br /&gt;&lt;br /&gt;Those of you who have ever tried to walk another user through something on the phone know what a pain it can be to not know exactly what the user is looking at. This can be especially troublesome when a command prompt in Linux is involved. Isn't it much easier to log into their machine, connect to their terminal, and then watch them work?&lt;br /&gt;&lt;br /&gt;Now for some cleanup. Hit &lt;span style="font-weight:bold;"&gt;CTRL-a d&lt;/span&gt; to detach from this screen. Go back to the other terminal window where &lt;span style="font-style:italic;"&gt;top&lt;/span&gt; is still running and hit &lt;span style="font-weight:bold;"&gt;q&lt;/span&gt; to quit. Type &lt;span style="font-style:italic;"&gt;exit&lt;/span&gt; at the prompt to close that shell. Continue exiting out of screens, using the &lt;span style="font-style:italic;"&gt;exit&lt;/span&gt; command. When you've exited out of the last command shell, you will be dropped back at your original shell, with the message "[screen is terminating]" above the prompt.&lt;br /&gt;&lt;br /&gt;That should be plenty to get you running for now. When you're ready to get into some of the more advanced features of screen, go ahead and run &lt;span style="font-style:italic;"&gt;man screen&lt;/span&gt; to take a look at the other options available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-3100808198444210047?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=3100808198444210047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/3100808198444210047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/3100808198444210047'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/12/screen-for-beginners.html' title='Screen for Beginners'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-3720871272608765325</id><published>2008-12-10T19:47:00.003-07:00</published><updated>2008-12-10T20:12:53.874-07:00</updated><title type='text'>Pursuing Other Opportunities</title><content type='html'>A few of my readers already know this, but most of you don't. A little over a week ago, I was laid off from Guru Labs. I know that it was not an easy decision for the owners to make, and I don't fault them for it. It was easily the best company that I ever worked for, and I already miss working for them.&lt;br /&gt;&lt;br /&gt;This time around, my luck was good. When I first accepted the offer to work for Guru Labs, I had another offer on the table from another company as well. When I politely declined the other company's offer, they told me that if I was ever interested in coming back to let them know. I did so the same day I was laid off, as I was sending my resume to several other companies, and they contacted me almost immediately. They were the first of a series of interviews, and the first to give me an offer.&lt;br /&gt;&lt;br /&gt;I think that had I held out, some of the other companies might have given me offers for more money. But this company paid well enough, and the drive into work was pretty close to what it had been. I already knew one of the programmers there, and that sweetened the deal. Today was my first day, and I had fun. In fact, I've already started working on a small project that I will probably lay out in a future post here.&lt;br /&gt;&lt;br /&gt;I think I will keep the company anonymous this time around. When I was a guru, I had to be careful how I presented some companies on my blog, and I would often forego posting certain pieces of information entirely, to be on the safe side. Keeping my present employer seperated from my blog will make things a little easier on me.&lt;br /&gt;&lt;br /&gt;Four other gurus were laid off at the same time as me. As as this writing, they are all still unemployed, though at least one seems to be on the verge of getting hired. If you are looking for one of the best system administrators you could ever hope to hire, I can hook you up with them. &lt;a href="http://sexysexypenguins.com/"&gt;One of them&lt;/a&gt; was my instructor when I took the RHCE exam, and parts of his lectures still resonate in my mind. The others have also taught me a world of things (both Linux-related and otherwise) that I will never forget. Each one of them also knows Python to varying degrees, which I know has become increasingly important at many companies.&lt;br /&gt;&lt;br /&gt;If you are looking for an admin, click the "&lt;a href="http://blog.josephhall.com/contact/"&gt;contact&lt;/a&gt;" link on the right side of my blog and send me a note. I will happily forward your information to these gentlemen. And if you're looking for Linux training, I would still recommend &lt;a href="http://gurulabs.com/"&gt;Guru Labs&lt;/a&gt; in a heartbeat. You will not find better Linux training than them. They are still around, and while they did lose some excellent instructors, they also kept some excellent instructors. You will not go wrong with them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-3720871272608765325?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=3720871272608765325' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/3720871272608765325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/3720871272608765325'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/12/pursuing-other-opportunities.html' title='Pursuing Other Opportunities'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-7635373103190761208</id><published>2008-12-07T07:06:00.000-07:00</published><updated>2008-12-07T07:37:49.612-07:00</updated><title type='text'>Turducken</title><content type='html'>Well, I pulled it off: turducken. This is the sort of dish that you learn a lot from while making it. Of course, I learned a few things the hard way. The first lesson that I learned the hard way was to read the instructions from all of my turducken recipes a little more carefully. It's not like baking where you can say, "this is a muffin recipe, that means I can use the muffin method." There's more to the technique.&lt;br /&gt;&lt;br /&gt;The idea with a turducken is to remove all of the bones from a chicken and a duck, and most of the bones from a turkey, and stuff the chicken inside the duck, and the duck inside the turkey. Traditionally, there would be stuffing between each bird as well. As it turns out, removing most of the bones from the turkey isn't difficult, so long as you leave the skin on. Doing the same for a chicken and a duck was far more difficult, especially since we decided to remove the skin.&lt;br /&gt;&lt;br /&gt;What we ultimately ended up with were a boneless, skinless chicken and duck, quartered. Because we tried to keep it from being quartered, it took much longer than it would have if we had just quartered it properly in the first place. Now, I'm not saying that this is the correct way to make turducken. It's just the way that we ended up with.&lt;br /&gt;&lt;br /&gt;Bearing that in mind, let's go through the steps after we deboned all of the birds. With the turkey, you don't have to remove the bones from the wings or the drumsticks; you just have to remove the bones from the body. This isn't bad, and it leaves you with what is essentially a butterflied turkey.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02974_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02974_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Before you even started the process of deboning these birds, I hope you made some stuffing to stick inside of them. The stuffing should be cooling to room temperature while you debone the birds. We ended up using about 6 cups total. Try to make it a little drier than usual; part of its job is to soak up juices. Go ahead and put down a layer of &lt;span style="font-style:italic;"&gt;fully coolled&lt;/span&gt; stuffing.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02978_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02978_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next up comes the duck. Lay down the duck breast in the middle, and the rest of the meat on the side.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02980_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02980_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Give it another layer of stuffing.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02984_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02984_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And then follow up with the chicken, breast in the middle, rest of the meat on the outside.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02988_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02988_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is where you use up the last of the stuffing. Don't feel like you have to use it all. The birds are going to be plenty hard to close up anyway, and more stuffing will just make it more difficult.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02989_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc02989_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This part will be interesting. You need to close up the bird, and then keep it closed. At first, this doesn't seem so difficult.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/DSC02991_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/DSC02991_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But you'll find that keeping it all together is going to be rough. It'll help to have a second person helping out here, because they'll need to hold the turkey closed while you thread a couple of skewers through the skin.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/DSC02993_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/DSC02993_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next up, roll the turkey over on top of the seam, and move it to a baking pan. You probably can't see it with my baking pan, but I have a rack in the bottom. Also, I would liked to have tied the legs back together, but I couldn't find my butchers twine.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/DSC02995_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/DSC02995_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Believe it or not, I think this next part was actually more difficult than building the bird. We had to cook it. We didn't cook it right away, actually. We covered it and put it in the fridge, to cook the next day. We pulled it from the fridge at the same time we started pre-heating the oven, with the hopes that it would come somewhat closer to room temp by the time we stuck it in the oven.&lt;br /&gt;&lt;br /&gt;I prepared for this event by watching Alton Brown cook several turkeys, both on Good Eats and on Food Network "All-Star" holiday specials. Stuffing or no, there was always one constant: he did the majority of cooking at 350F. He stated at least once that lower, slower cooking times would contribute to drying out the bird. He also would tend to start the bird at a higher temp, to get some browning going, and then liked to put a foil shield over the breast to keep it from overcooking.&lt;br /&gt;&lt;br /&gt;I started by giving the bird a spritz of cooking spray. I knew the oil would aid in proper browning, and that's important. I also fashioned a triangle-shaped shield of foil to cover the breast, before I put it in the oven. The shield would be added later.&lt;br /&gt;&lt;br /&gt;I started the cooking process at 400F, to get some decent browning on the bird. Once it looked presentable, I covered the breast with the foil shield and put it back in the oven, at 350F. Since I have also misplaced by probe thermometer, I had to check the internal temp with an instant-read thermometer. My goal was the high 150s, since I knew that carry-over cooking would take it to 165F on the way to my dad's house.&lt;br /&gt;&lt;br /&gt;Total cooking time was about 3 hours. Somewhere around the 2 1/2 hour mark, I started to chicken out (no pun intended) and drop the oven temp. It eventually came down to maybe 310F or so. I'm still not convinced this was the right action. When the bird was just shy of 160F, I pulled out and covered it completely with foil. Before I covered it, it looked like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/DSC02998_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/DSC02998_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;When we got it to my dad's house, we let everyone see it before carving it. Then we set about carving it, which should have been a simple task. Since all of the bones are removed from the inside, we should have just been able to cut cross-sections. But since some of the outer bones remained, they initially got in our way. Eventually, I was able to come up with a good cross-section.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc03008_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc03008_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Yes, the meat looks a little dry, doesn't it? This probably has to do with my lowering the oven temp, and/or having to open the oven repeatedly to check the temp, since I didn't have a probe thermometer. Fortunately, it wasn't too dry. Just a tad.&lt;br /&gt;&lt;br /&gt;I carved up the whole thing, and moved it all to a platter. I kept the drumsticks intact, but laid out the rest in easy-to-serve pieces, nicely garnished with all of the stuffing.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc03009_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/charcuterie/dsc03009_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I noticed that the duck was not a gamey as it usually is. I don't know whether this is because it had chicken and turkey juices mixed in with it, or because it was fully-cooked, instead of medium-rare as duck is normally served. I imaging it's a combination of both, but mostly the second. The chicken was decently cooked. Nobody got sick from undercooked stuffing. All in all, I think it turned out better than expected, but it certainly wasn't a professional job. I think next time we do a turducken, I might just order one premade from The South (tm) and see how they did theirs. Still, not a bad first try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7635373103190761208?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7635373103190761208' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7635373103190761208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7635373103190761208'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/12/turducken.html' title='Turducken'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-5628620660858707008</id><published>2008-12-01T08:23:00.007-07:00</published><updated>2008-12-02T11:57:42.959-07:00</updated><title type='text'>Tutorial: Baklava</title><content type='html'>I made some baklava a couple of weeks ago, as a bribe to get my boss to send me to San Francisco. The deal was, if they send me to SF, then the business day immediately following my return, I would bring homemade baklava to work with me.&lt;br /&gt;&lt;br /&gt;A few days after presenting my offer, I was presented with my itinerary. Upon my return I picked up some ingredients, got the camera ready, and put together the first baklava that I had made &lt;a href="http://blog.josephhall.com/2006/04/baklava-saga-continues.html"&gt;since starting this blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll admit, baklava looks like a scary thing to make. And unfortunately, few people that make it do it right. Almost every baklava I've ever had has been either too dry or too soggy, and they've also generally been sickeningly sweet. My baklava, as I promised to my boss, is different. It's not too sweet, dry or soggy. It's also not incredibly traditional. Well, screw tradition, I say! This is a dang good baklava!&lt;br /&gt;&lt;br /&gt;You may recall a couple of years ago when I make some &lt;a href="http://blog.josephhall.com/2006/08/tutorial-phyllo-cups.html"&gt;phyllo cups&lt;/a&gt;. If you can handle those, this shouldn't be a problem. You may also want to brush up on making &lt;a href="http://blog.josephhall.com/2006/08/tutorial-clarified-butter.html"&gt;clarified butter&lt;/a&gt;. First, the cast of ingredients (a la &lt;a href="http://thepioneerwoman.com/cooking"&gt;The Pioneer Woman&lt;/a&gt;):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02865_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02865_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ingredients&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sugar/Spice Mixture:&lt;/span&gt;&lt;br /&gt;1/2 cup sugar&lt;br /&gt;1 tsp cinnamon&lt;br /&gt;1 tsp nutmeg&lt;br /&gt;1/2 tsp cloves&lt;br /&gt;1/2 tsp allspice&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Simple Syrup:&lt;/span&gt;&lt;br /&gt;3/4 cup sugar&lt;br /&gt;1/4 cup honey&lt;br /&gt;1/4 cup water&lt;br /&gt;juice of half a lemon&lt;br /&gt;juice of half an orange&lt;br /&gt;zest of a lemon&lt;br /&gt;zest of an orange&lt;br /&gt;2 cinnamon sticks, broken in half&lt;br /&gt;6 whole cloves&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Rest of the Baklava:&lt;/span&gt;&lt;br /&gt;1 cup pistachios&lt;br /&gt;1 cup pecans&lt;br /&gt;3/4 cup sliced almonds&lt;br /&gt;1/4 to 1/2 lb clarified butter&lt;br /&gt;20 sheets (1/2 lb or 1/2 a box) phyllo dough&lt;br /&gt;&lt;br /&gt;To start off, you'll need a few spices, mixed in with some sugar. This is kind of a high-end cinnamon sugar that you can sprinkle later on your toast. In fact, you'll have some left over for that, so make good use of it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02868_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02868_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is also not a bad time to get together the ingredients for a simple syrup. The hardest part is getting some lemon and orange zest ready. Don't bother with a microplane grater on this one; just use a vegetable peeler.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02870_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02870_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Go ahead and toss the zest in a sauce pan, along with some sugar, honey, water, orange and lemon juice, and whole spices. You can set those aside for now.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02874_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02874_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next up, you'll need some nuts. I went with pistachios, pecans and almonds. You can either pulse them in a food processor, or do what I always do and toss them into a zip-top bag and roll them with a rolling pin. The texture is inconsistent, which I actually kind of like.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02881_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02881_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now that you have those things out of the way, it's time to move onto the fun stuff: the phyllo dough. You'll want 20 sheets (half a box) of phyllo dough, a stick or two of clarified butter, a 13 x 9 baking dish brushed with clarified butter, and a kitchen towel that is just barely damp.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02892_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02892_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The towel is to keep the phyllo from drying out while you're working with it. Just between you and me, I don't really use it. I've been working with phyllo for so long that I'm fast enough to go through half a package (that's one whole baklava) without needing it. You'll get there, don't worry. Now go ahead and lay out a sheet of phyllo and brush it with clarified butter.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02897_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02897_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02900_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02900_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Repeat until you have 6 sheets laid down. Then go ahead and divide up the nuts into thirds, and sprinkle one third onto the phyllo.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02906_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02906_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Follow up with a sprinkling of the spice/sugar mixture. I moved mine into a leftover spice jar, to make it easier to sprinkle evenly, and to keep it later for toast. Don't feel like you have to use it all. You just want a thin layer, barely capable of even being called a layer.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02913_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02913_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Go ahead and lay down another sheet of phyllo and brush with clarified butter. Go easy on this one, since there's a layer of nuts underneath waiting to tear holes in your phyllo. Just between you and me, if you think this part is going to be too hard, feel free to lay out another cutting board and do your layers of phyllo on that, and then move the layers of phyllo on top of the nuts. You'll want four sheets of phyllo on this layer.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02908_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02908_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Keep going until you have three layers of nuts and four layers of phyllo. The top and bottom layers should be 6 sheets each, and the inner layers should be 4 sheets each. When it's all finished, go ahead and cut it into squares, and then cut the squares into triangles.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02935_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02935_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Toss it in a 350F oven for about half an hour. While it's baking, you need to cook up the simple syrup. Bring it to a boil, then drop it to a simmer until the baklava comes out of the oven.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02939_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02939_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pull the baklava when it reaches a golden-brown color. Mine actually was a little darker than it shows in the photos. Just be careful not to burn it.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02944_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02944_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Go ahead and pull the large bits (zest and cinnamon) out of the simple syrup with a pair of tongs. Don't worry about the smaller bits, we're going to strain them out. In fact, you might as well just strain them out onto the baklava. The syrup is hot and the pan is hot, so there will be some sizzling. The sizzling will continue for at least a couple of minutes.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02946_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02946_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Make sure you wait until the baklava cools down before you try serving it. In fact, if you can manage to wait a couple of days, it will actually get even better. At the very least, you should wait overnight. Me, I waited until the sugar was cooled enough not to burn me.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02953_640.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/pastries/DSC02953_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The reviews on this were excellent. I had a couple of coworkers that had previously told me that they hated baklava, tell me that they were now convinced that I was the only person in the world that could actually make good baklava. Several people told me that it definitely wasn't traditional, and everyone liked that it wasn't too sweet. It was a hit with everyone who tried it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-5628620660858707008?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=5628620660858707008' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/5628620660858707008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/5628620660858707008'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/12/tutorial-baklava.html' title='Tutorial: Baklava'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-1198555242658713628</id><published>2008-11-30T20:08:00.002-07:00</published><updated>2008-11-30T20:43:37.829-07:00</updated><title type='text'>Condensed Pain</title><content type='html'>My intention was actually to make another spice blend that I call the Deathcrier, but I was playing around with a few things, and it kind of went in a different direction.&lt;br /&gt;&lt;br /&gt;Usually, I mix together whole spices with pre-ground spices, because that's just what I usually have laying around. This time I had whole versions of everything, so I went for it. I also decided to try grinding everything up in my little 2-cup food processor instead of the coffee grinder that I usually use, so that I could make a little more.&lt;br /&gt;&lt;br /&gt;Things didn't go as well as I'd hoped. I wanted more heat, so I upped the amount of habaneros. I also discovered that my food processor was good for getting the chiles and spices small enough to fit into a pepper grinder, but not small enough to be called a powder. After 10 to 15 minutes of my fruitless efforts, I eventually gave up and pulled out the coffee grinder. It took 3 batches, but each batch took less than 20 seconds.&lt;br /&gt;&lt;br /&gt;At some point, I got some chile in my eye. I got it rinsed out okay, painful though it was for a few minutes. Unfortunately, the water mixing with the chile powder that had gotten on the rest of the left side of my face made half of my face feel like it was on fire. When I finally tasted the chile powder, my mouth was in immediate pain. The first set of words that hit my brain were, "condensed pain". I like it.&lt;br /&gt;&lt;br /&gt;Recommended hardware: painters mask, protective goggles for the eyes, rubber gloves, coffee grinder.&lt;br /&gt;&lt;br /&gt;Condensed Pain&lt;br /&gt;&lt;br /&gt;2 whole New Mexico chiles&lt;br /&gt;3 whole guajillo chiles&lt;br /&gt;6 whole chiles de Arbol&lt;br /&gt;6 whole Japones chiles&lt;br /&gt;3 whole chipotles&lt;br /&gt;12 whole habaneros&lt;br /&gt;1 Tbsp whole all-spice&lt;br /&gt;2 tsp minced dried garlic&lt;br /&gt;1 Tbsp chopped dried onion&lt;br /&gt;1 Tbsp whole achiote&lt;br /&gt;2 tsp whole coriander seed&lt;br /&gt;1 tsp whole cumin seed&lt;br /&gt;1 Tbsp whole black pepper&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-1198555242658713628?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=1198555242658713628' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/1198555242658713628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/1198555242658713628'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/11/condensed-pain.html' title='Condensed Pain'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-1689988904779631444</id><published>2008-11-23T19:19:00.003-07:00</published><updated>2008-11-23T20:13:07.750-07:00</updated><title type='text'>Utah Chocolate Show 2008 Report</title><content type='html'>Well, another chocolate show has come and gone. Even though I've known about this one for months, I still felt like it caught be off-guard. I heard nothing about it from anyone, I just had to keep watching &lt;a href="http://www.utahchocolateshow.com/"&gt;the site&lt;/a&gt;, when I remembered. Fortunately, I remembered a few days before the show, and did not miss it. I also only managed to show up for one afternoon, unlike other years where I spent a couple of days there.&lt;br /&gt;&lt;br /&gt;I've gotta say, my experience was marred before I even got in the building. I don't know who thought it would be a good idea to do the Gun Show at the same time, but the Sandy Expo Center's parking lot isn't even big enough for one show at a time, much less two. The scary part is, it looked like there was an entire other exhibition hall available, but I could be wrong. The Gun Show might have extended it into it, and I would never have known, because I was only interested in the chocolate.&lt;br /&gt;&lt;br /&gt;The show was a little smaller this year than in years past. I attribute this to two things: the wonky economy, and the University of Utah vs BYU game. Sometime around the late afternoon, many of the spectators took off to watch BYU take a thrashing from the Utes. I took off not too long after that, knowing that traffic would be light while everyone was at The Game.&lt;br /&gt;&lt;br /&gt;There were a few stars at this year's show that you should know about. As always, &lt;a href="http://www.knightfamilyhoney.com/"&gt;Knight Family Honey&lt;/a&gt; was around with their amazing honey that comes from (so they told me) a pumpkin field surrounded by an alfalfa field. Okay, so it's not chocolate, but I don't mind. it's fresh, it's raw, and it's darned tasty. Keep in mind, this is coming from somebody that usually doesn't care for honey or its bitter aftertaste. This year they also had honey taffy which was decent, but tasted nothing like honey to me. Still, I liked it and have been snacking on it all day. I have a jar of honey from them too, and I may break that out for a baklava or something.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.caputosdeli.com/"&gt;Tony Caputo's&lt;/a&gt; had a booth again this year, and I was glad for it. I'd wondered if Matt Caputo would recognize me, since I haven't really seen him since last year's show, but the moment he saw me he greeted me by name, and asked how things were. He was a bit busy helping other customers, and other employees would often stop by and ask me if I needed help when Matt would have to step away. It was a lot like being in their store, except that they only had their chocolate inventory with them. I was happy to see that they still carry chocolates by Chris Blue over at &lt;a href="http://www.chocolatierblue.com/"&gt;Chocolatier Blue&lt;/a&gt;. I didn't think you could still get that in Utah, since Chris left Utah earlier this year to move to Berkeley and start supplying the &lt;a href="http://www.frenchlaundry.com/"&gt;French Laundry&lt;/a&gt;, in addition to &lt;a href="http://www.charlietrotters.com/"&gt;Charlie Trotter's&lt;/a&gt; and &lt;a href="http://www.chezpanisse.com/"&gt;Chez Panisse&lt;/a&gt;. Even if Caputo's didn't have the largest chocolate selection in Utah, I would still stop by there just for Chocolatier Blue.&lt;br /&gt;&lt;br /&gt;One of the new stars at the show was a company called &lt;a href="http://www.drinkchoffy.com/"&gt;Choffy&lt;/a&gt;. A few months ago I heard about a company taking coffee beans and treating them like chocolate, going so far as to sell a bar of coffee beans, sugar and cocoa butter. Choffy goes in the other direction. They take the cocoa beans and roast them, grind them and brew them as if they were coffee beans. Personally, I've never liked coffee. I've always thought it tasted and smelled like burned chocolate. That being the case, and considering that people actually like that flavor, I thought it might be a perfect product. At Matt Caputo's urging, I headed over to try some out.&lt;br /&gt;&lt;br /&gt;They had three different varieties there. From darkest to lightest, they were Nicaraguan, Ivory Coast, and Ecuadorian. I tried all three, in that order. The Nicaraguan was way too much for me, which didn't surprise the sales rep because I'd told him I wasn't a coffee drinker. Even with cream, I didn't like it. Some sugar might have helped, but by that point I wasn't really interested. Ivory Coast was in the middle, and the show favorite. In fact, by the time I got to the booth, they had some brewed, but none left to sell. This one was drinkable, even without the cream. Still, it wasn't my thing. I decided to try lighter still.&lt;br /&gt;&lt;br /&gt;I was surprised at how much I liked the Ecuadorian, until I found out that's what it was. I have always liked beans from there, so it's no surprise that I would like them brewed like this too. It was excellent on its own, but when I added a vanilla-flavored creamer, it got even better. I almost shelled out for a bag right then and there, but I decided to wait a couple of paychecks. Besides, I have no coffee equipment, so that would have been an issue too. Unfortunately, you can't buy their product in stores. They've apparently decided to go with some crappy MLM-like marketing scheme, which would normally mean that I wouldn't buy their product on principle. But you can order it online, so I might break down at some point at pick it up. But if they allowed Caputo's to sell it, I would be even more likely to buy it.&lt;br /&gt;&lt;br /&gt;Last of all, Ruth Kendrick, author of the famous Candymaking book by HP Books, made her yearly appearance at the show. As expected, she was teaching a class, this time on tempering chocolate. But this year yielded an unexpected surprise for many fans of hers. Early this year, Ruth took off to the Great White North to take some classes at the Callebaut Chocolate Academy in Montreal. She has taken her years of experience and combined it with her newfound knowledge and formed her own chocolate company, &lt;a href="http://www.sweetchocolot.com/"&gt;Chocolot&lt;/a&gt;, which debuted at this year's show.&lt;br /&gt;&lt;br /&gt;While Ruth does sell toffee and candied popcorn, her real jems are &lt;a href="http://www.sweetchocolot.com/the_chocolates.html"&gt;her truffles&lt;/a&gt;, which represent her entry into the truly high-end world of chocolates. They're as pretty as they are tasty, and are sure to impress. Remember how I said I don't normally like honey? Ruth's chocolates are another exception to the rule. My favorite flavor may very well be the beehive honey. I tried one of the chai teas, and it was also excellent: flavorful, but not overpowering. Also on my favorites list are strawverry sabe, australian ginger and rootbeer float.&lt;br /&gt;&lt;br /&gt;Be aware that Ruth is very small-batch, and has limits as to where she can ship (anything out of the state is pretty much out of the question). If you happen to live in Utah or know somebody that does and doesn't mind shipping to you, you need to give her a shout. Her truffles are a little pricey, but the quality is excellent.&lt;br /&gt;&lt;br /&gt;I'm a little sad that I was only able to stick around for a few hours this year, but I'm glad that I got at least that. As always, the show was a delight, and I can't wait for next year's. Here's hoping it gets a little more advertising the next time around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-1689988904779631444?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=1689988904779631444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/1689988904779631444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/1689988904779631444'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/11/utah-chocolate-show-2008-report.html' title='Utah Chocolate Show 2008 Report'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-4568674229530379492</id><published>2008-11-23T18:46:00.004-07:00</published><updated>2008-11-23T19:16:45.114-07:00</updated><title type='text'>Review: Amano's Jembrana and Cuyagua Bars</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.josephhall.com/uploaded_images/Jembrana_On_Beans300x450.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://blog.josephhall.com/uploaded_images/Jembrana_On_Beans130x252.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It took some convincing, but I finally talked Art Pollard over at Amano Chocolate into a bar of his new Jembrana chocolate. This is an interesting bar, to be sure. I've been tasting it half a square at a time all weekend. See, that's the thing about Amano: you don't eat a whole bar at once. It would just be a waste of money, and the enjoyment factor would be off.&lt;br /&gt;&lt;br /&gt;The beans for this chocolate came out of the island of Jambrana, out in Bali. I understand there aren't a whole lot of beans that come out of Bali, which makes these extra special. Like Art's other chocolates, this doesn't taste like your run-of-the-mill chocolate. It is best consumed only a square at a time.&lt;br /&gt;&lt;br /&gt;When you pop a square in your mouth, it starts off with a pretty familiar chocolate flavor. But it takes off pretty quickly, developing into a dark, deep flavor. There are light sour and bitter notes, but no harshness. It's definitely fruity, but not a fresh fruitiness like you get from Amano's bars. It's more developed; the difference between a fresh concord grape, and an aged pinot noir. This bar isn't for kiddies, it's for the big girls and boys.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.josephhall.com/uploaded_images/Cuyagua_On_Beans300x450.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://blog.josephhall.com/uploaded_images/Cuyagua_On_Beans130x252.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While I'm talking about Amano, I'd better mention Art's Cuyagua bar. This one came out a while ago, and quite frankly I'm surprised he has any left. They didn't get very many beans for it in the first place, and it's been labelled "Limited Edition" because they don't know if they're ever going to get any more. That's your cue to snap up the last remaining bars before some other guy in New York beats you to it.&lt;br /&gt;&lt;br /&gt;This is a single-origin chocolate from Venezuela, from the valley of Cuyagua. It's a lot more accessible than his first two offerings, as the actual chocolate flavor is more pronouced. There is a distinct fruitiness reminiscent of the Madagascar bar. My wife found it to have a very crisp, clean taste, while I picked up a slight bitterness that actually complimented the fruit quite nicely. It has a slightly darker flavor, but not from the overroasting that one might experience in other brands. There is a very light smokiness, that you might not pick up unless you were actually looking for it. It is definitely a bar to be savored slowly, and carefully.&lt;br /&gt;&lt;br /&gt;If you are planning a chocolate tasting, this may be a more appropriate bar to include than other Amano varieties. Warning: it will provide a sharp contrast to other brands, and may cause your tasters to be unable to eat conventional chocolate afterwards. If you were to use all four current Amano varieties in your tasting, I think I might recommend Ocumare first, then Cuyagua followed by Jambrana and finally, Madagascar.&lt;br /&gt;&lt;br /&gt;Then again, if you're planning on doing such a tasting, I'd suggest you hurry. Like I said, when Cuyagua's gone, it's probably gone for good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-4568674229530379492?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=4568674229530379492' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4568674229530379492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4568674229530379492'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/11/review-amanos-jembrana-and-cuyagua-bars.html' title='Review: Amano&apos;s Jembrana and Cuyagua Bars'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18314879.post-7315213154564696647</id><published>2008-11-22T07:00:00.003-07:00</published><updated>2008-11-22T07:00:00.469-07:00</updated><title type='text'>Linkdump 2008-11-22</title><content type='html'>&lt;a href="http://www.utahpreppers.com/"&gt;Utah Preppers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://safelygatheredin.blogspot.com/"&gt;Safely Gathered In&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sweetchocolot.com/"&gt;Chocolot&lt;/a&gt; - My friend Ruth just got her chocolate business going, and it looks like she's doing well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7315213154564696647?l=blog.josephhall.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7315213154564696647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7315213154564696647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7315213154564696647'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2008/11/linkdump-2008-11-22.html' title='Linkdump 2008-11-22'/><author><name>Joseph</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06190514777768189712'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>