<?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>2010-02-01T12:40:26.982-07: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='hub' href='http://pubsubhubbub.appspot.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>425</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18314879.post-7804250943944180484</id><published>2010-01-30T11:15:00.002-07:00</published><updated>2010-01-30T11:36:53.457-07:00</updated><title type='text'>My Drive Array</title><content type='html'>A couple of years ago I got ahold of an old ATX computer that I intended to use as a file server. Unfortunately, there were a few problems with it. The biggest problem was that the drive cage for the smaller drives was missing. Smaller problems like an underpowered power supply and limited onboard IDE adapters were fixed with things like a new 600W power supply, and extra IDE expansion cards. As it turns out, Linux had no problem with two onboard adapters and two more cards (two adapters per card). With IDE's master/slave setup, that brought me up to two DVD burners (/dev/scd0 to /dev/scd1) and six hard drives (/dev/hda to /dev/hdf). But the drive cage, that was a problem.&lt;br /&gt;&lt;br /&gt;Fortunately, like many American bakers and pastry chefs, I spent a lot of time at the hardware store. And believe it or not, the roofing section at Lowes carries a simple solution: roofing ties. Not TILES, but TIES (no "L"). Behold, the drive array, now connected to my Thinkpad (click to embiggen):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/drive_array/DSCF0001_800.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/drive_array/DSCF0001_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yes, dear readers, the file server is dead. It seems to have developed memory issues in its old age, leading to its untimely demise. Not Alzheimers, but some form of dementia. A close-up on the array itself:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/drive_array/DSCF0002_800.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/drive_array/DSCF0002_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sadly, my Thinkpad does not have an external IDE adapter of any kind. But USB to IDE adapters are relatively cheap and easy to find. I can't access every drive at once, but that's not a big deal at the moment.&lt;br /&gt;&lt;br /&gt;Lowes has several different sizes of roofing ties, and several different styles. I used two different sizes, both completely flat, but with rows of holes exactly the same width as a standard 3.5" internal drive. One is five holes high and one is three holes high.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/drive_array/DSCF0004_800.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/drive_array/DSCF0004_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you're going to do this, you'll be buying them in sets of two each. And while you may be tempted to stack three drives in one 3-high roofing tie set, &lt;span style="font-style:italic;"&gt;fight the urge!&lt;/span&gt; You need airflow between the drives, or they &lt;span style="font-style:italic;"&gt;will&lt;/span&gt; overheat. I speak from experience. Limit yourself to three drives for the 5-high ties, and only use the 3-high ties for connecting sets of 5-high ties. Look back at photo #2 to see what I mean.&lt;br /&gt;&lt;br /&gt;Speaking of heat issues, it's not a bad idea to point a fan at these if you're going to have them all on at once. It's not a big deal with one or two USB-connected drives, but with all six drives that I have in my array, I always had a fan going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7804250943944180484?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7804250943944180484' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7804250943944180484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7804250943944180484'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2010/01/my-drive-array.html' title='My Drive Array'/><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-7842574975655334285</id><published>2010-01-28T07:11:00.002-07:00</published><updated>2010-01-28T07:15:54.893-07:00</updated><title type='text'>Importing the USDA SR22 into MySQL</title><content type='html'>Some of you who were interested in my post on &lt;a href="http://blog.josephhall.com/2008/11/importing-usda-sr21-into-mysql.html"&gt;importing SR21&lt;/a&gt; may have been waiting for this one. I know it's been a few months since &lt;a href="http://www.ars.usda.gov/Services/docs.htm?docid=8964"&gt;SR22&lt;/a&gt; came out, but I didn't have a need to import it until just now. There are changes to this new version, but they are minimal, and you may have already patched the code yourself.&lt;br /&gt;&lt;br /&gt;Specifically, two new fields were added to the ABBREVS table: Vit_D_mcg and Vit_D_IU. This brings the total column count in that table from 51 to 53. That number is the only change in the Perl file, and those two columns were the only additions to the SQL file. With those in place, I was able to import the new database without a problem. For the lazy and/or efficient, here are the new versions of the files:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.josephhall.com/downloads/import_sr22.txt"&gt;import_sr22.pl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.josephhall.com/downloads/sr22.sql"&gt;sr22.sql&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Based on the reponse to my last post, I expect more troubleshooting questions on this post. For those who know what you're doing, you can stop reading now. Everyone else, check here before asking.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;You need to have at least Perl 5.8.6 installed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You need to have the Perl DBI installed, and DBD::mysql.&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In RHEL/CentOS/Fedora, these packages should be called &lt;span style="font-weight:bold;"&gt;perl-DBI&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;perl-DBD-MySQL&lt;/span&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In Ubuntu/Debian, these packages should be called &lt;span style="font-weight:bold;"&gt;libdbi-perl&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;libdbd-mysql-perl&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;When you download the files, make sure you save the Perl script as import_sr22.pl, not import_sr22.txt.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This script assumes you've downloaded the abbreviated file. It is a separate download from the full version, so make sure you don't miss it.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I think that covers all the questions I was asked previously. For those who are interested, The Eloquent Geek posted a non-Perl way of doing this on the last post. I haven't tried it myself, but for your reference:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;For those who do not want to use the perl here is how you import the data from the command line client:&lt;br /&gt;load data infile '/file_path/TABLE_NAME.txt' into table TABLE_NAME fields terminated by '^' optionally enclosed by '~' ;&lt;br /&gt;&lt;br /&gt;Just substitute the table name per table.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7842574975655334285?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7842574975655334285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7842574975655334285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7842574975655334285'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2010/01/importing-usda-sr22-into-mysql.html' title='Importing the USDA SR22 into MySQL'/><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-7968298879720569947</id><published>2010-01-27T19:39:00.002-07:00</published><updated>2010-01-27T19:47:55.907-07:00</updated><title type='text'>iPad</title><content type='html'>Well, Apple's new tablet was finally announced today. Aside from a slew of jokes concerning the name, it would seem that the majority of the reviews can be summed up in one word:&lt;br /&gt;&lt;br /&gt;"Seriously?"&lt;br /&gt;&lt;br /&gt;Not all reviews were negative, of course. One that I read can be summed up in a few more words: "Look! It's a giant iPhone! Isn't that so cool?" Let me put this into perspective. A cute little baby, at the size that you would expect a cute little baby to be, is cute. The same baby, but the size of a house, is no longer cute. It is scary.&lt;br /&gt;&lt;br /&gt;I'm not going to bother linking to any reviews of Apple's attempt to make Google look good in comparison, just like I'm not going to bother buying one when it comes out. That's all on you.&lt;br /&gt;&lt;br /&gt;Okay, tell you what. &lt;a href="http://tinyurl.com/ycfpzsu"&gt;Let me Google that for you.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-7968298879720569947?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=7968298879720569947' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7968298879720569947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/7968298879720569947'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2010/01/ipad.html' title='iPad'/><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-2241587041377615284</id><published>2010-01-26T06:08:00.002-07:00</published><updated>2010-01-26T07:07:25.964-07:00</updated><title type='text'>Ice Cream Nomenclature</title><content type='html'>Rather than responding in the comments area to Hollie's comment on &lt;a href="http://blog.josephhall.com/2010/01/ice-cream-machines.html"&gt;Ice Cream Machine&lt;/a&gt;, I thought I would just make a new post. Her question was, "isn't that a sorbet?" No, Hollie, that wasn't a sorbet or even a sherbet. There are a few terms tossed around for frozen, churned desserts, and there are differences. Some of it has to do with dairy content, but not all.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sorbet:&lt;/span&gt; This dessert generally contains fruit puree or juice, but can contain other things, such as coffee or chocolate. The important thing here is that there is no dairy content. So Hollie, with all the half and half in my recipe, it's definitely not sorbet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sherbet/Sherbert:&lt;/span&gt; You'd think my recipe would fall under this category, because sherbet can have dairy in it. But as it turns out, sherbet only contains a small amount of dairy, &lt; 3%. The terms sherbet and sorbet are often used interchangeably, and I guess I'm not going to stop that with my little post. But as far as I'm concerned, they are different.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ice Cream:&lt;/span&gt; Once you get above 3% dairy, your dessert becomes "ice cream". This is a pretty generic term that gets tossed around, and is applied to everything from sorbet to gelato. You can have large amounts of fruit puree like I had, or you can just keep it as simple as frozen, churned, sweetened milk or cream. I have a friend that is a big fan of unflavored ice cream: not even vanilla gets in the way of the taste of milk. One day I will have to try it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Frozen Custard/Premium Ice Cream:&lt;/span&gt; Once you add egg to the mix, ice cream technically becomes a frozen custard. But most people still just call it ice cream. I have yet to see a premium ice cream that is not actually a frozen custard, but I'm sure one exists somewhere. From a technical standpoint, there is a definite advantage to using egg, which will help the ice cream set up a little more easily in the churn. It also adds a nice creaminess.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Frozen Yogurt:&lt;/span&gt; There's not really a whole lot of difference between ice cream and frozen yogurt, other than the former using cream (or at least half and half) and the latter using yogurt. Because of the yogurt, it's often a little more tart, and generally lower in fat.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Granita:&lt;/span&gt; This Italian dessert is kind of like sorbet, but with much larger ice crystals. This is due to the preparation, which is more of a shaved ice technique than a churning technique. The method that I see most often involves pouring flavorful liquid (usually coffee, but sometimes fruit juice) into a cookie sheet and putting it in the freezer, scraping with a fork every couple of hours or so.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Gelato:&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt; This is an Italian variety of ice cream who's name I have often seen mis-used and abused in America, so let's set the record straight. One big difference is the low dairy content: almost as low as sherbet. I have seen some gelatos with no diary at all. Gelato also has a higher sugar content than ice cream, and usually involves egg. I have also heard Italians mention some sort of mysterious stabilizer, which I have &lt;a href="http://blog.josephhall.com/2006/07/ice-cream-stabilizer-results.html"&gt;experimented with&lt;/a&gt; before. It's still unclear to me what it is, and if it's actually a requirement. Gelato is churned like ice cream, but has much less air incorporated into it, and is meant to be served fresh, the same day that it is made. While not necessary, gelato generally has a pretty high fruit content.&lt;br /&gt;&lt;br /&gt;I have often heard the terms "gelato" and "spumoni" used interchangeably. Let me be clear on this: spumoni is a &lt;span style="font-style:italic;"&gt;type&lt;/span&gt; of gelato. Not all gelato is spumoni. Spumoni is a layers ice cream, kind of like Neapolitan ice cream in America, but containing things like fruits and nuts. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Kulfi:&lt;/span&gt; My favorite dessert from India, this concoction differs from ice cream largely in that it is not churned. It generally contains flavors indigenous to India, like cardamom or pistachios. Americans be warned: it would seem that India loves their desserts sweet, as is evidenced in pretty much every kulfi I have ever eaten. It's not too sweet for me, but it's close.&lt;br /&gt;&lt;br /&gt;I hope that clears things up a little bit for some of you. Obviously I haven't hit every type of frozen dessert, but there are a few important ones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-2241587041377615284?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=2241587041377615284' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/2241587041377615284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/2241587041377615284'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2010/01/ice-cream-nomenclature.html' title='Ice Cream Nomenclature'/><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-8781667395526045399</id><published>2010-01-19T20:48:00.003-07:00</published><updated>2010-01-19T21:50:19.750-07:00</updated><title type='text'>I Want Proof</title><content type='html'>There is a fad that's been circulating around the Internets for years now, and I'm sure is even older than that: the idea of so-called "negative calorie foods". The basic premise is that some foods require more calories to digest than they actually provide. For instance, a food that provides 5 calories, but requires 10 calories worth of energy for your body to process it, is considered to have negative calories.&lt;br /&gt;&lt;br /&gt;It's an interesting concept, and it would be awesome if it were true. Unfortunately, I have been unable to find any concrete proof either way. We know how to determine a food's caloric content, but I wonder if we know how to determine how much energy it takes to process it? In trying to find answers online, I found several people who claimed to be knowledgeable, but who were obvious idiots, and/or didn't bother checking their facts. For instance, on &lt;a href="http://answers.yahoo.com/question/index?qid=20090529151635AATt9n9"&gt;this page&lt;/a&gt;, I found this comment: &lt;br /&gt;&lt;br /&gt;"Celery has almost zero calories, it's so minuscule we round down to 0."&lt;br /&gt;&lt;br /&gt;I've never heard of anyone making this claim. If we consult the &lt;a href="http://www.nal.usda.gov/fnic/foodcomp/search/"&gt;USDA Standard Reference&lt;/a&gt;, we discover that an 8-inch stalk of celery contains about 6 calories. This is not a miniscule amount (unless compared to a Big Mac), and I certainly wouldn't round it down to 0.&lt;br /&gt;&lt;br /&gt;I found several other references to celery containing anywhere from 5 to 20 calories per serving (though the serving size was never stated), and guesses that eating a single serving would burn anywhere from 5 to 20 calories. Even &lt;a href="http://www.snopes.com/food/ingredient/celery.asp"&gt;Snopes&lt;/a&gt;, which I lose more and more faith in every time I read anything there, claims the "negative calorie" concept is true, but offers absolutely no evidence or proof.&lt;br /&gt;&lt;br /&gt;Can anyone tell me definitively how many calories are burned by eating a single serving (say, 40g, the approximate weight of an 8-inch stalk) of celery? I want a number, and I want to know how that number was obtained.&lt;br /&gt;&lt;br /&gt;My next complaint involves cooking alcohol out of food. There are plenty of people that will tell you, "don't worry, the alcohol burns out". In my experience, these are people that either think you're silly for caring, or are reassuring themselves because they want it to be true. Other people will tell you that you can never burn it all out. The most outspoken of these that I've heard is Alton Brown, followed by his good buddy Ted Allen.&lt;br /&gt;&lt;br /&gt;Both Alton and Ted have discussed this on their shows, Good Eats and Food Detectives, respectively. Food Detectives is kind of a culinary Myth Busters, but is far more scripted. They frequently perform experiments to prove or disprove myths, but in the case of the alcohol, they did a food demo that proved nothing, and then stated their "fact" as gospel.&lt;br /&gt;&lt;br /&gt;Alton Brown has stated repeatedly that alcohol never cooks out completely, but has never offered proof. Some years ago I did some research and found a report on the USDA's website that seemed to imply that after 2 1/2 hours of oven roasting, the level of alcohol left in foods is 0% (which I'm guessing is actually &lt; 0.5%). Unfortunately, in more recent visits, this report seems to have been removed. I have been unable to find it for years.&lt;br /&gt;&lt;br /&gt;So, it begs the question: does alcohol really cook out, or not? Does anyone have any proof? Or can anyone at least point me to a report or study somewhere that even suggests something either way?&lt;br /&gt;&lt;br /&gt;I'm not convinced on the negative calorie thing, or the alcohol thing. And I'm sick of people making claims with nothing to back them up. &lt;span style="font-style:italic;"&gt;I want proof.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8781667395526045399?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8781667395526045399' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8781667395526045399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8781667395526045399'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2010/01/i-want-proof.html' title='I Want Proof'/><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-229146809196536851</id><published>2010-01-16T11:12:00.002-07:00</published><updated>2010-01-16T12:33:07.682-07:00</updated><title type='text'>No More Fast Food</title><content type='html'>You may have heard that McDonalds is now providing &lt;a href="http://blog.utahcon.com/internet/mcdonalds-go-wireless-for-free"&gt;free wireless Internet access&lt;/a&gt; at their restaurants. For those of you who eat at McDonalds, this is great news! For myself, I haven't eaten McDonalds in several years. And recently, I decided to abandon fast food in general.&lt;br /&gt;&lt;br /&gt;Not eating at McDonalds was an easy choice, back when I made it. I still remember my first Big Mac. I was 12 years old, and my mom gave me $5 and told me I could eat lunch whereever was within walking distance of where we were. Finally, my big chance! I could finally try that Big Mac that I'd seen so many commercials about. Sadly, it did not live up to the hype. It was "okay", but nothing special. Since then, I had never eaten at McDonalds and thought afterwards, "wow, I'm glad I ate there!" So now I don't eat there anymore.&lt;br /&gt;&lt;br /&gt;Since then, I've run into disappointment at every fast food establishment I've ever been to. Carl's Jr has one (just one) item on their menu that I like (the Western Bacon), and I always feel like crap after eating it. Wendy's also only has only one menu item I can stand (spicy chicken sandwich), and it's not worth the sheer incompetence that they tend to hire to sell it to me. Even Subway is on my black list, with their selection of styrofoam-inspired breads.&lt;br /&gt;&lt;br /&gt;The problems with individual restaurants are just the tip of the iceberg. Fast food is famous for its unhealthiness. Granted, most restaurants now offer healthy options, but I have a hard time paying even a dollar (sometimes two or three) for a bag of apple slices, when I could just plan ahead and bring a $0.33 apple from the grocery store with me instead.&lt;br /&gt;&lt;br /&gt;Fast food menus are not designed for healthy eating. What's interesting to me is how many aspects of this were pioneered by McDonalds. When Ray Kroc first found McDonalds, he was surprised and impressed at the manufacturing-line techniques that were used to churn out fast, cheap burgers. Decades later, McDonalds not only began selling value meals, but actually assigned numbers to them, for convenience. And let's not forget the famed "Supersize" option which everyone copied again. While they don't ask anymore if you'd like to supersize, I'm told you can still ask for it. The most classic example is a Big Mac with large fries and a large Coke. Tasty, no? Not for me. And just between you and me, I've never been a fan of McDonald's fries either.&lt;br /&gt;&lt;br /&gt;I think my biggest problem with fast food has been using it as a crutch. When I don't bring lunch with me to work, fast food is there to keep me from being hungry. When I forget breakfast in the morning, there are plenty of places I can stop by on the way to work. And when I'm feeling just a little too tired to make my family a delicious and healthy meal, I can always pick up a bag-o-burgers on the way home.&lt;br /&gt;&lt;br /&gt;Why do I find myself in these situations? I think that it's been a misguided set of priorities, coupled with poor planning. I could get up early and spend a few extra minutes making pancakes to show a little love to my family, or I could stop by McLazy's on the way into work and leave my family to fend for themselves. I could make a little extra for dinner one night so that I can have leftovers to bring into work the next day, or I could buy a bucket of chicken so as not to lose precious TV time.&lt;br /&gt;&lt;br /&gt;I'm not saying that all restaurants are bad, of course. I'm still okay with casual dining restaurants. I will still go to diners. Fine dining, when it can be afforded, is a fine thing indeed. Even delis are okay with me, in moderation. If I could afford it, I would love to take my family out to eat once every week or two. Eating out is a treat, and a way to experience new foods and keep your palate from getting board. But when any treat becomes habit, it starts to lose meaning and spoil us. I'm not okay with that.&lt;br /&gt;&lt;br /&gt;Note: I've already been asked this once or twice, so I'd better say it here. As far as I'm concerned, carry-out or delivery pizza is also fast food. I love Pizza Hut, but I don't love the expense, or the idea of using it as a crutch. I can make my own pizza at home, which may take more time and planning, but which will taste 10 times better, and cost less than a half as much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-229146809196536851?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=229146809196536851' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/229146809196536851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/229146809196536851'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2010/01/no-more-fast-food.html' title='No More Fast Food'/><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-5810678758484647205</id><published>2010-01-03T16:53:00.002-07:00</published><updated>2010-01-03T17:26:12.916-07:00</updated><title type='text'>Ice Cream Machines</title><content type='html'>I got an ice cream freezer for Christmas. It represents the latest in a growing line of equipment that I've had the opportunity to make ice cream with, each progressively better.&lt;br /&gt;&lt;br /&gt;You see, I started with a frozen core model. This includes a container which has a special solution built into it, which must be frozen for 24 hours before use, and an electric motor. This model was barely serviceable, because it never got cold enough to effectively freeze the ice cream, and it was only good for a 30-minute session. It held somewhere around a quart.&lt;br /&gt;&lt;br /&gt;My next model was, aside from the fact that it also had an electric motor, a little more old fashioned. You actually had to add alternating layers of ice and salt, which was surprisingly more effective than the frozen core model. I could go for as long as 40 minutes before the ice got melty enough to raise in temperature again. It could also make somewhere around 3 quarts pretty effectively. The most major drawback was the freezer full of ice that you needed to keep around. The second most major drawback was disposing of the salt water. The third biggest was the water that would condensate on the side, and then melt into a puddle around the churn.&lt;br /&gt;&lt;br /&gt;The first model was a joke. I would never recommend a frozen core to anyone. The second model was about the same price, and while it did have its drawbacks, it at least worked. I figured it would be the model I would use until I got rich and could afford a model with a built-in freezer.&lt;br /&gt;&lt;br /&gt;Well, that model is what I got for Christmas. It technically holds two quarts, but I have yet to get more than a quart and a half out of it. But that's not the fault of the machine itself. The motor will run until it can't run no more, and then it will stop on its own. Since the built-in freezer won't shut off with the motor, you could probably just add ice cream mixture, turn it on and go shopping, and come back home to ice cream fully ready for consumption.&lt;br /&gt;&lt;br /&gt;This brings up an important point. The first two models make soft-serve ice cream, which must be quickly moved into containers, and into the freezer, before it is ready to be served. While you can do that with this model, my first batch was actually hard-frozen. I wasn't used to the machine yet, and I ended up letting the motor run until the ice cream was hard.&lt;br /&gt;&lt;br /&gt;This brings up something else important. I have discovered that, with all of my practice batches so far, I need a minimum of 45 minutes to get a good churn (and sometimes longer), something that my old freezers fell short of. I have also discovered that I no longer need to use egg yolk to get a decent freeze. Before, I always used egg-based recipes, because frozen custard is easier to churn. With one exception, I have yet to use anything egg-based in this freezer.&lt;br /&gt;&lt;br /&gt;The one exception is eggnog. It's a little late now to do this, but it's something to keep in mind for next year. Commercial eggnog is little more than spiced, unfrozen ice cream. My favorite brand for the past few years has been Southern Comfort's Vanilla Spice Eggnog. They also have a "regular" Southern Comfort Eggnog. Both are alcohol-free (you're supposed to add the Southern Comfort yourself), and I've frozen several batches of the Vanilla Spice version, both for ourselves and for family and friends. For those of you that don't like eggnog, well, I'm guessing you don't like drinking melted ice cream either. And that's fine. It's okay to be wrong sometimes.&lt;br /&gt;&lt;br /&gt;I will give you a recipe that I've been playing with. It's not perfect yet, but it's still pretty good. And it's totally egg-free:&lt;br /&gt;&lt;br /&gt;Strawberry Ice Cream (beta version)&lt;br /&gt;&lt;br /&gt;1 pint half and half&lt;br /&gt;1 pound frozen strawberries&lt;br /&gt;1/2 cup sugar&lt;br /&gt;1 pinch salt&lt;br /&gt;&lt;br /&gt;Combine all ingredients in a sauce pan and bring to a low simmer, just long enough to dissolve the sugar and thaw the strawberries. Use an immersion blender to puree the strawberries and homogenize the mixture. Cool and refrigerate overnight before freezing, as per your ice cream freezer's instructions. Makes a little over a quart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-5810678758484647205?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=5810678758484647205' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/5810678758484647205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/5810678758484647205'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2010/01/ice-cream-machines.html' title='Ice Cream Machines'/><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-8339068179525035974</id><published>2009-12-23T13:43:00.003-07:00</published><updated>2009-12-25T17:31:52.661-07:00</updated><title type='text'>Amano Chocolate: Dos Rios</title><content type='html'>I can't even tell you how mad I am right now at Art Pollard, at &lt;a href="http://www.amanochocolate.com/"&gt;Amano Chocolate&lt;/a&gt;. After &lt;a href="http://blog.josephhall.com/2009/09/ecuadorian-chocolate-from-amano.html"&gt;my glowing review&lt;/a&gt; of his totally excellent &lt;a href="http://www.amanochocolate.com/retail/bars/guayas/"&gt;Guayas chocolate&lt;/a&gt;, he rewarded me by completely failing to mention that he had another chocolate also on the way: &lt;a href="http://www.amanochocolate.com/retail/bars/dosrios/"&gt;Dos Rios&lt;/a&gt;. I would have had no idea if I hadn't seen it on the shelf at &lt;a href="http://www.pirate-o.com/"&gt;Pirate-O's&lt;/a&gt; today.&lt;br /&gt;&lt;br /&gt;I bought a bar, along with my sandwich for lunch, and headed back to the office. After a few bites of sandwich, I decided that I couldn't wait to try the chocolate. So I put the sandwich down and broke off a piece of chocolate. The second I put it in my mouth, I knew I had a problem. Not only did I not want to finish my sandwich, for fear of losing the flavor that was suddenly in my mouth. In fact, I don't know if I can ever eat another kind of chocolate again. I have officially been ruined.&lt;br /&gt;&lt;br /&gt;The box that this chocolate comes in describes it as tasting like bergamot oranges, cloves and cinnamon. They're not kidding. The orange punched me in the mouth immediately, and was complimented by an amazing set of spices. I used to like those cheap chocolate oranges that you can find everywhere in America around Christmas time. They are officially crap. This trumps that any day.&lt;br /&gt;&lt;br /&gt;There is a bitterness that you expect from dark chocolate, but it's not an unpleasant bitterness. I broke off a piece and gave it to &lt;a href="http://blog.harleypig.com/"&gt;Harleypig&lt;/a&gt;, and told him that he had to try it. The look on his face was classic. He finally said, "I do &lt;span style="font-style:italic;"&gt;not&lt;/span&gt; like dark chocolate. But I &lt;span style="font-style:italic;"&gt;like&lt;/span&gt; this." The bitterness is one of the things he mentioned. It's not the dark bitterness of overly dark chocolate, but the pleasant bitterness of an orange that isn't too sweet.&lt;br /&gt;&lt;br /&gt;You have to try this. If you're in the south part of the Salt Lake valley, go down to Pirate-O's right now and buy a bar. If you're closer to downtown, go to &lt;a href="http://www.caputosdeli.com/"&gt;Caputo's&lt;/a&gt; and get it. If you're too far from either, order online. This stuff is effing amazing.&lt;br /&gt;&lt;br /&gt;Disclaimer: Although he's apparently not much of a friend right now, I do know Art Pollard. I don't believe this to have biased my review of the chocolate itself, but that's your call. And maybe if Art starts telling me about new flavors again, I'll acknowledge him as a friend again.&lt;br /&gt;&lt;br /&gt;Update: Art called, and we talked shop until I had to go change a diaper. We're friends again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8339068179525035974?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8339068179525035974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8339068179525035974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8339068179525035974'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/12/amano-chocolate-dos-rios.html' title='Amano Chocolate: Dos Rios'/><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-4972459686096852475</id><published>2009-12-18T14:26:00.002-07:00</published><updated>2009-12-18T14:46:12.451-07:00</updated><title type='text'>Fun with sshd and strace</title><content type='html'>I suppose this would be a much bigger concern if you could pull it off as an unprivileged user, but you do have to have root access on a server to pull this off. And really, once somebody has root, all bets are off anyway. Still, it's an interesting excercise.&lt;br /&gt;&lt;br /&gt;In one window, log into a Linux server (RHEL 5.3 in my case) as root. In another window, use ssh to log from a remote machine into the server:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;jhall@bourdain ~$ sftp guest@myserver&lt;br /&gt;Connecting to myserver...&lt;br /&gt;guest@myserver's password: &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;When it prompts for the password, hop back over to the server and run ps to figure out which process is handling the connection:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[root@myserver ~]# ps auxf | grep ssh&lt;br /&gt;root   28705  0.0  0.0  60672  1184 ?  Ss  12:32  0:00 /usr/sbin/sshd&lt;br /&gt;root   29361  0.0  0.0  86856  3116 ?  Ss  14:36  0:00  \_ sshd: guest [priv]&lt;br /&gt;sshd   29362  0.0  0.0  62016  1384 ?  S   14:36  0:00      \_ sshd: guest [net]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;What you need from this is the PID of the sshd process with [priv] next to it. In this case, 29361. Use strace to hop in and monitor this process (redirecting STDERR to a file, for later reference):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[root@myserver ~]# strace -p 29361 2&gt; strace.log&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Go back over to the remote system and type in the password. Go back to the server, cancel the strace, and then take a look at the log file. On my system, the 3rd line down had the payload:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Process 29361 attached - interrupt to quit&lt;br /&gt;read(6, "\0\0\0\f", 4)                  = 4&lt;br /&gt;read(6, "\v\0\0\0\7inmelet", 12)        = 12&lt;br /&gt;getuid()                                = 0&lt;br /&gt;open("/etc/passwd", O_RDONLY)           = 4&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The text that we're looking for here is "inmelet", which is our sample password. In the clear.&lt;br /&gt;&lt;br /&gt;Of course, this was a very manual process. But plenty of techniques exist would would allow us to monitor sshd, and launch strace automagically every time a user logged in. Of course, if you're using ssh keys, then there would be no password to see in the clear anyway. I haven't tested to see if you could steal the ssh key though. That might be a fun excercise too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-4972459686096852475?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=4972459686096852475' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4972459686096852475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4972459686096852475'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/12/fun-with-sshd-and-strace.html' title='Fun with sshd and strace'/><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-8304508427067436264</id><published>2009-12-17T12:41:00.004-07:00</published><updated>2009-12-17T13:23:47.349-07:00</updated><title type='text'>Create a Custom MDA with Postfix and Perl</title><content type='html'>Wow, this was a fun one. We have an internal "project manager" that we use at work, instead of my prefered program, &lt;a href="http://bestpractical.com/rt/"&gt;RT&lt;/a&gt;. The other day, my boss asked me to set up this program so that they could email tasks to it, instead of having to pull up the site to create a new task. The easy part was building the queue into our system. But the fun part was setting up &lt;a href="http://www.postfix.org/"&gt;Postfix&lt;/a&gt; to receive and parse the emails.&lt;br /&gt;&lt;br /&gt;My first thought was to set up &lt;a href="http://www.procmail.org/"&gt;Procmail&lt;/a&gt; to send the messages to my parsing script. I'd never used it before, and I'd heard horror stories about writing "recipes" in it. What I had not heard was how difficult it could be to get it to play right. The mail server that I was using was not one that I had set up, and it had some weirdness about it that I wasn't familiar with. After fighting with Postfix and Procmail for a while, I managed to learn enough about Postfix configuration to realize that I might as well just skip Procmail, and write my own &lt;a href="http://en.wikipedia.org/wiki/Mail_delivery_agent"&gt;MDA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now, when I say MDA, it's a bit of a misnomer. It receives and parses emails, but rather than filtering and delivering emails to a specific mailbox, it dumps a few fields into a database. To avoid confounding the issue too much, I will try and keep this post to the bare minimum. My setup uses virtual mailboxes, but I won't go into the steps to set that up. I also won't cover the DBI code that I wrote. If I get enough requests, maybe those can go into other posts.&lt;br /&gt;&lt;br /&gt;First things first. You need to edit the mail.cf file to set up some transports. There were two specific lines that I needed to add to mine:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;virtual_transport = virtual&lt;br /&gt;transport_maps = hash:/etc/postfix/transport&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This allows me to only send messages sent to specific email addresses to my MDA. So the next step is to add the addresses to /etc/postfix/transport that you want forwarded to your MDA:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;tasks@mytaskmanager.com mymda&lt;br /&gt;projects@mytaskmanager.com mymda&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Make sure to hash the file once you've edited it:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;postmap /etc/postfix/transport&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You've probably guessed that "mymda" is what you're going to call your MDA. This doesn't have to be the name of your script, it's just a pointer to the lines that you're about to add to your master.cf file:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mymda unix - n n - - pipe&lt;br /&gt;   flags=R user=vmail argv=/usr/local/bin/mymdascript.pl USER=${user} EXTENSION=${extension}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You can see in here where we actually define the name of your script, in this case "/usr/local/bin/mymdascript.pl". Now that we're done with the Postfix configuration (remember to restart postfix for it to take effect), we can go ahead and set up that script. It's going to look something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;use Mail::Internet;&lt;br /&gt;&lt;br /&gt;my @rfc2822 = &amp;lt;STDIN&amp;gt;;&lt;br /&gt;my $email = Mail::Internet-&gt;new( [ @rfc2822 ] );&lt;br /&gt;&lt;br /&gt;my $from    = $email-&gt;head-&gt;get("From");&lt;br /&gt;my $date    = $email-&gt;head-&gt;get("Date");&lt;br /&gt;my $subject = $email-&gt;head-&gt;get("Subject");&lt;br /&gt;my $body    = $email-&gt;body();&lt;br /&gt;$body       = join( '', @$body );&lt;br /&gt;...snip...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is a very, very basic script. It will receive the email from Postfix using STDIN, and to save you the trouble of parsing it out manually, I just ran it through Mail::Internet (part of the &lt;a href="http://search.cpan.org/~markov/MailTools-2.04/"&gt;MailTools&lt;/a&gt; package).&lt;br /&gt;&lt;br /&gt;Keep in mind that each line that you pull out of the message will have a newline in it, so $from, $date, $subject, etc. may need to be chomped, depending on your needs. Also, the date is &lt;span style="font-style:italic;"&gt;hopefully&lt;/span&gt; in RFC2822 format, so in my case, I had to run it throught &lt;a href="http://search.cpan.org/~drolsky/DateTime-Format-Mail-0.3001/lib/DateTime/Format/Mail.pm"&gt;DateTime::Format::Mail&lt;/a&gt; to get it ready for MySQL.&lt;br /&gt;&lt;br /&gt;Like I said, this isn't a full MDA. But it can be used for accepting things like commands, preformatted data, etc. from email and processing them, without having to deal with the overhead of something like Procmail. And if you want to use it to write a full-featured MDA, by all means feel free. And really, now that you know that the script is going to pull the message from STDIN, you're free to use C, Python, even Bash if you want.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8304508427067436264?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8304508427067436264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8304508427067436264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8304508427067436264'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/12/create-custom-mda-with-postfix-and-perl.html' title='Create a Custom MDA with Postfix and Perl'/><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-2429301931585279259</id><published>2009-12-14T07:36:00.002-07:00</published><updated>2009-12-14T08:40:27.752-07:00</updated><title type='text'>Travel Tips: Dealing with the TSA</title><content type='html'>While reading &lt;a href="http://blog.xkcd.com/2009/12/14/books-and-laptops-and-bugs/"&gt;today's post&lt;/a&gt; at the XKCD blag, I found a reference to &lt;a href="http://www.xkcd.com/651/"&gt;a comic&lt;/a&gt; from a couple of months ago about the TSA. I knew that the TSA had been challenged on said comic [citation needed], but I didn't know that they had &lt;a href="http://www.tsa.gov/blog/2009/10/response-to-bag-check-cartoon.html"&gt;responded&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In the time that I worked for &lt;a href="http://www.gurulabs.com/"&gt;Guru Labs&lt;/a&gt;, I spent a lot of time at airports. I learned a lot about air travel, and especially about the TSA. I thought I'd share some of the experience that I've picked up, to hopefully make some body's life a little easier.&lt;br /&gt;&lt;br /&gt;The vast majority of TSA agents that I've had to deal with seem to be kids that got beat up in high school a lot, and are now getting their revenge. Not all TSA agents are like this, of course. There are plenty that are helpful, friendly, and generally on the ball. Most of the good ones that I have found seem to be in some kind of supervisor position, but not all. The ones that got beat up a lot in high school are the ones you need to understand.&lt;br /&gt;&lt;br /&gt;You see, they seem to think that now that they are in a position of power and authority, that they can throw their weight around and intimidate people that remind them of high school bullies. It's not so much that they're power hungry, they're just looking for vindication. But they look in the easy places. And fortunately for them, the easy places correspond with the profiling that their job requires. The TSA may claim that they don't profile, but they'd be stupid not to. They just don't profile people the way we think they do.&lt;br /&gt;&lt;br /&gt;Contrary to popular belief, they're not looking for turbans. They don't care what color your skin is. They're looking for (among other things) nervous people who look like they have something to hide. This is good from a security standpoint. But the high school kid in them also seems to be looking for somebody to push around. Hey, if you had to sit around all day watching X-rays, you'd get bored too.&lt;br /&gt;&lt;br /&gt;It took a few trips, but I eventually formed the persona that I would use at airport security. Polite, respectful, occasionally friendly, but for the most part dismissive. Oh, and efficient. When you get to the metal detectors, you should already have your pockets emptied into an easily accessible part of your luggage. You should have your shoes off (or at least untied), and your laptop ready to be taken out of your bag. Everything should be ready to go on the belt, and you should be ready to pass through the detector without causing the agent any problems.&lt;br /&gt;&lt;br /&gt;Occasionally, your luggage will contain something that the X-ray agent thinks is worth taking a look at. I'll get to some of my own stories in a moment. If this happens to you, politely and respectfully comply with the TSA agent. In my case, I add in a little bit of boredom that says, "seen it, done it, nothing new". When you start challenging the TSA agent, you risk looking like that bully that beat them up in high school a lot. And really, when it comes down to it, you knew the rules before you showed up. If you didn't bother looking them up, then you're an idiot.&lt;br /&gt;&lt;br /&gt;Many TSA agents will just finish their job and move on. But I have seen some visibly deflated by not being able to play their game of retribution on me. The disappointment of not being able to push that high school bully back was visible and obvious. It's time for them to let you get to your gate, and they have a job to do anyway. Rules are rules, and you haven't broken any of them.&lt;br /&gt;&lt;br /&gt;Speaking of rules, these are pretty important. Yes, a good number of the rules are asinine and should be challenged. The securitty checkpoint is not the place to challenge these. The agents have NO AUTHORITY to change the rules. The rules aren't meant to be flexible, they're meant to be followed. Yes, they realize that your 5 oz tube of lotion may obviously contain only an ounce or two. But the rule isn't "a container with 3.4 oz or less", it's "a container than can hold no more than 3.4 oz". If you really want to bring that lotion with you, find it a smaller container. Most grocery and drug stores in my area have a travel section of their pharmacy that can help you out.&lt;br /&gt;&lt;br /&gt;So follow the rules while they are in place, and if you want to get them changed, write your congressperson or something. Treat the TSA employees with the same amount of respect and politeness that you should treat anybody else with, and they will generally do the same for you. And if they don't, you have the right to demand to talk to their supervisor. Personally, I've never had to do that. They tend to leave me alone. But I have had some small encounters.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Salami, Salami, Balony&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When I grew up, I remember my dad being a big fan of dry salami. He'd frequently buy these tubes of it covered in some white stuff (mold, as I later discovered) that he would peel off before slicing off a few pieces. This style of salami has being increasingly difficult to find in Utah. One day in the San Jose area, I found a big ol' stick of the stuff, and bought it to bring home to him. Little did I realize that to the X-ray, it probably looked like a club of some sort, strictly forbidden by TSA rules.&lt;br /&gt;&lt;br /&gt;Of course I was stopped at the X-ray. It was in my carry-on luggage because I don't check my luggage (there's only two types of luggage: carry-on and lost). My bag was full of clothes and computer books, but the salami was on top. The TSA agent had already told me I could put on my shoes, so I did so while almost completely ignoring him looking through my bag. Occasionally I would glance over, and I saw that he found the salami almost immediately, and gave a look that said "that's probably what they were worried about". After a layer or two of books, and the realization that I was just letting him do his job and not even remotely worried about what he might find, he gave up, without even making it halfway through my bag. He looked a little deflated. He gave my bag back and wished me a good flight.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;"But It's Just Candy"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One day in Phoenix, I bought a tube of marzipan. I didn't get a change to open it beforehand, so I just stuffed in in my bag. Of course the X-rays identified it as a paste (almond paste, to be exact), so they pulled it out. I told them, "but it's just almond candy", but it fell on deaf ears, and I didn't want to push the issue.&lt;br /&gt;&lt;br /&gt;I was told that I had three options: I could check my bag with the airline, or I could walk down to the airport post office and ship it home. With either of these options, I would get a TSA escort, so that I wouldn't have to wait in line when I came back. My last option was to throw it away, which is what I did. The TSA agent was confused, and reiterated that with either of the other options, I could keep my marzipan. My reasoning was this: I was flying on Skywest, and they are the principle reason why I don't check bags. And mailing my marzipan back home would have cost more than just buying another tube when I got home. The TSA agent was perplexed, but he let me chuck the marzipan and gave me no more trouble.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Darts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have a travel kit of tech tools that I never leave home without. I keep them in a bag in my trunk, and when I fly, I take a TSA-safe version with me. One of the tools I used to have was a mini-screwdriver, with removable bits. I had taken it with me on dozens of trips with no incident. But one day I arrived at security while it was particularly slow (about 3 or 4 agents per passenger). A bored agent with way too much time on his hands saw my screwdrivers (I had two of them with me) and thought they looked like darts. And while the pocket that I kept them in was easy to access and obvious to me, it took the agent several minutes to find them. And as per TSA rules, I wasn't able to help. Once he found them, he realized his mistake, told me he thought they were darts, and allowed me to move on.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Just Chocolate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When I was in Montreal, I found some excellent French chocolate, and I bought plenty of it. On the way back, going through customs, I declared that I was bringing food over the border with me. When I went through security, I was stopped at the X-ray. I was asked if I was bringing back anything with me that I didn't bring with me. I said, "yes, chocolate". They asked if that was the food that I declared, and I responded affirmatively. As they inspected my bag, chocolate kept falling out of various pockets. Towards the end of the screening, they were more amused than anything. I was sent back to America with a smile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-2429301931585279259?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=2429301931585279259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/2429301931585279259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/2429301931585279259'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/12/travel-tips-dealing-with-tsa.html' title='Travel Tips: Dealing with the TSA'/><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-6435385574311240017</id><published>2009-12-13T07:48:00.002-07:00</published><updated>2009-12-13T08:10:39.974-07:00</updated><title type='text'>Cinnamin Craisin Muffins</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/SunDec13074913MST2009.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://i122.photobucket.com/albums/o242/techhat/SunDec13073708MST2009.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Okay, so I have a thing for silicone &lt;a href="http://www.wilton.com/store/site/product.cfm?id=1B62CE8A-423B-522D-FE15B18CAFE7D727&amp;killnav=1"&gt;baking&lt;/a&gt; &lt;a href="http://www.wilton.com/store/site/product.cfm?id=1B64477E-423B-522D-F114DDE696FD0729&amp;killnav=1"&gt;molds&lt;/a&gt;. And I know the shapes weren't quite what I wanted. So sue me.&lt;br /&gt;&lt;br /&gt;Baking molds aside, these muffins are the perfect way to start off a cold, wintery day. As with most muffins, it takes longer for the oven to preheat before than it takes to mix everything together, so set your oven to 375F a good 10 minutes before you start mixing. &lt;br /&gt;&lt;br /&gt;1 1/2 cups flour&lt;br /&gt;1 1/2 tsp baking powder&lt;br /&gt;1/2 tsp salt&lt;br /&gt;1/2 tsp nutmeg&lt;br /&gt;1 Tbsp cinnamon&lt;br /&gt;1/2 cup melted butter&lt;br /&gt;1 cup packed brown sugar&lt;br /&gt;1 whole chicken egg&lt;br /&gt;1/2 cup milk&lt;br /&gt;2 oz craisins&lt;br /&gt;&lt;br /&gt;Being muffins, we use the muffin method: whisk together the dry stuff (flour, baking powder, salt, nutmeg and cinnamon) in one bowl, whisk together the wet stuff (melted butter, brown sugar, egg and milk) in another bowl, then combine and mix together with a spatula (trust me it's easier to combine wet and dry with that than with a whisk). Fold in the craisins, pour into prepared muffin tins, and bake for 20 to 25 minutes at 375F.&lt;br /&gt;&lt;br /&gt;On a diet? Or maybe just looking for a way to add a little extra flavor? I'm told that with the muffin method, you can swap out the liquid fat with apple sauce, cup for cup. I didn't try it with this recipe, but I've done it before and it's worked well. And you can still spread on butter after it bakes, so don't worry about losing that goodness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-6435385574311240017?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=6435385574311240017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6435385574311240017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6435385574311240017'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/12/cinnamin-craisin-muffins.html' title='Cinnamin Craisin Muffins'/><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-4893188691274389589</id><published>2009-12-11T10:15:00.000-07:00</published><updated>2009-12-11T10:16:13.862-07:00</updated><title type='text'>Android Kitchen Timer: SupaCount</title><content type='html'>I've been feeling handicapped when I cook, and especially when I bake. When I used to bake professionally, we used the oven timers to know when to check on our cookies. It wasn't long before my internal timer was telling me 30 seconds before the oven timer went off, that I needed to check on the cookies. But that didn't help with cakes, pies, breads, pastries, you get the idea. One of our bakeries had multiple digital timers, to help out with production.&lt;br /&gt;&lt;br /&gt;At home, my oven doesn't have a timer. My microwave does, but that's also the only working clock in the kitchen, and even on that floor of that house. And if I need to nuke something while something else is in the oven, well that's a problem. And I occasionally have enough going that two ore more timers would really come in handy.&lt;br /&gt;&lt;br /&gt;When I got my G1, one of the first types of apps that I looked for was a kitchen timer. I found one (and only one) that didn't complete suck; it only half sucked. It could time for more than 90 minutes, immediately putting it ahead of all the other timers (my microwave timer only goes to 99 minutes, not nearly long enough for proofing bread dough). This particular timer had a pretty graphic of a kitchen timer, and rather than typing in numbers, you had to use the touch screen to rotate it. It was clunky, and difficult to get the exact time that I wanted. And when the timer went off... well, I don't know what the crappy music was that started playing, but I hated it and you couldn't change it.&lt;br /&gt;&lt;br /&gt;That app was removed from my phone this very morning, when I came across a timer to end all timers. It's not complex, it's not pretty, but it does the one thing that it needs to do: it works. I can set as many timers as I want, I can type in exactly the time I want (down to the second), and I can change the alarm sound.&lt;br /&gt;&lt;br /&gt;This app isn't available on the Android Market. You just need to head over to synic's site and download it. Kudos to synic for putting together such an awesome app. This is one of the few that I will be adding to my desktop on my phone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-4893188691274389589?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=4893188691274389589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4893188691274389589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/4893188691274389589'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/12/android-kitchen-timer-supacount.html' title='Android Kitchen Timer: SupaCount'/><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-412087873374443173</id><published>2009-12-07T06:00:00.002-07:00</published><updated>2009-12-07T07:00:42.592-07:00</updated><title type='text'>Periodic Tables of Food</title><content type='html'>A couple of days ago, I stumbled upon a poster at &lt;a href="http://www.allposters.com/"&gt;AllPosters&lt;/a&gt; of a &lt;a href="http://www.allposters.com/-sp/Periodic-Table-of-Vegetables-Posters_i338062_.htm"&gt;Periodic Table of Vegetables&lt;/a&gt;. It's an interesting concept, to be sure. &lt;a href="http://en.wikipedia.org/wiki/Periodic_table"&gt;The Periodic Table of the Elements&lt;/a&gt; is a mapping of a particular type of data, organized by groups (columns) and periods (rows). Why not use the same style as a visual representation of something tastier?&lt;br /&gt;&lt;br /&gt;Unfortunately, the image is a little too small to make out most of the veggies clearly, but it got me wondering what other kinds of periodic tables of food exist. The search was, and still is, on. I found several interesting tables of food, a couple of which I had even seen before. I also found non-food tables, my favorite being of &lt;a href="http://www.crackteam.org/2009/04/02/periodic-table-of-game-controllers/"&gt;game controllers&lt;/a&gt;. Here's what I've found so far:&lt;br /&gt;&lt;br /&gt;The table that I've found myself looking at, and wanting to hang up on my wall the most, is the &lt;a href="http://www.eblong.com/zarf/periodic/closeup.html"&gt;Periodic Table of Dessert&lt;/a&gt;. It breaks down its categorization into separate ingredients, which is important, because that's pretty much what the elemental table does. It makes an excellent effort to categorize things clearly, and assigns one- or two-letter symbols to each item. However, it does contain far fewer columns than the original, and uses symbols that I don't necessarily agree with (why P for peanut butter, instead of PB? How does M signify honey?). I would love to send this table through another revision. On the bright side, it is accompanied by a thermal spectrum (which doesn't make a whole lot of sense to me) and what appears to be the crystaline structures for several compounds (which is just awesome). These are all available together as a single poster.&lt;br /&gt;&lt;br /&gt;Next up is the &lt;a href="http://backtable.org/~blade/fnord/condiments.html"&gt;Table of Condiments that Periodically Go Bad&lt;/a&gt;. Unlike the dessert table, this table is numbered. Unfortunately, the numbers really only make sense paradoically (is that a word?). Again, elements are given symbols, and any that crossover to the dessert table actually seem to match. This kills me. I don't think that salt should be S, I think it should be Sl or Sa. Ideally, we would break into a three-letter designation, and use Sal. &amp;lt;End Rant&amp;gt; The most important part of this table is the designation for each condiment of how long you have before it goes bad. Very nice, in terms of food safety.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.ethicurean.com/wp-content/uploads/2006/09/foodstorage_big.jpg"&gt;Periodic Table of Produce&lt;/a&gt; is similar, except that it feels much more serious to me. Really, it's a table of food storage of fresh produce, including storage suggestions and timelines to when a particular veg will go bad. I would love to find a higher-quality version of this, and put it on my refrigerator door.&lt;br /&gt;&lt;br /&gt;Growing more complex, we have a &lt;a href="http://www.paintingbynumbers.com/print/print.php?item=p1"&gt;Periodic Table of Cheeses&lt;/a&gt;, complete with full &lt;a href="http://www.cafepress.com/cheesetable"&gt;merchandizing&lt;/a&gt; on t-shirts, mugs, mouse pads and, of course, posters. According to the site, this table was created by the blind Russian cook Anatoli Grigor Konchalovsky, apparently in 1865. I don't know how true that is, but if it is, that probably makes it the first periodic parody of food. Some thought has clearly gone into its organization, but I'm not entirely sure yet what each color means, or how some of the groupings fit. I love the "Noble Cheeses" classification, though.&lt;br /&gt;&lt;br /&gt;I found the &lt;a href="http://www.findyourcraving.com/musing/cereal-periodic-table"&gt;Periodic Breakfast Table&lt;/a&gt; interesting, though I haven't yet found a copy that looks to be complete. Offhand, it seems to be sorted visually, rather than by type of grain, manufacturer, history, etc. It does have some of this printed with each cereal, but it doesn't seem to be sorted that way.&lt;br /&gt;&lt;br /&gt;Going back to deserts, there was a &lt;a href="http://www.womansday.com/Articles/Food/Recipes/Periodic-Table-of-Cupcakes.html"&gt;Periodic Table of Cupcakes&lt;/a&gt; posted in Women's Day earlier this year. There's a part of me that is impressed, because I never would have expected any mainstream periodical (other than the venerable &lt;a href="http://www.cooksillustrated.com/"&gt;Cook's Illustrated&lt;/a&gt;) to expect their readers to enjoy a scientific nod like this. But then another part of me looks at the actual cupcakes printed, and would be entirely confused by the majority of them if it didn't know that really it's probably just a marketing gimmick for their own recipes. Still, it's cool.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.drchinese.com/periodic_table_of_candy.html"&gt;Periodic Table of Candy&lt;/a&gt; looks to be entirely parody, listing commercial candy varieties, numbered, and in alphabetical order. I haven't decided yet whether the little girl at the top is cute or frightening.&lt;br /&gt;&lt;br /&gt;Our journey is almost over. Back at AllPosters, I also came across a poster of the &lt;a href="http://www.allposters.com/gallery.asp?startat=/getposter.asp&amp;APNum=4850098&amp;CID=BDBD6E4B81F14B00A85940DA92638F81"&gt;Periodic Table of Sandwichry&lt;/a&gt;. There is no way I can make out anything sensible on this, but as one of the cheaper posted presented, I might be willing to order it along with something else.&lt;br /&gt;&lt;br /&gt;To finish up, I present to you the Periodic Tables of &lt;a href="http://www.globalprints.com/gp_itemview.php?id=HMR31020"&gt;Beer Styles&lt;/a&gt; and of &lt;a href="http://www.allposters.com/gallery.asp?startat=/getposter.asp&amp;APNum=358495&amp;CID=BDBD6E4B81F14B00A85940DA92638F81"&gt;Mixology&lt;/a&gt;. Add these to the category of "Text to small to read, so no clue as to any useful information, including accuracy." Still, it's a nice thought.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-412087873374443173?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=412087873374443173' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/412087873374443173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/412087873374443173'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/12/periodic-tables-of-food.html' title='Periodic Tables of Food'/><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-1035234679788319212</id><published>2009-12-01T10:13:00.002-07:00</published><updated>2009-12-01T10:25:52.215-07:00</updated><title type='text'>T-Shirts For Sale!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://powerwhisk.spreadshirt.com/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://blog.josephhall.com/uploaded_images/spreadshirt-2009-12-01.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some of you may recall that when I did my Object Oriented Cooking presentation at the 2009 Utah Open Source Conference, I was wearing a t-shirt with an 8-bit stand mixer on it, instead of one of the bowling shirts that I usually wear. I actually designed and had that shirt made about a year ago. The idea was always to put up a few designs for sale, but I never got around to it; mostly because I only ever came up with one other design that I was even remotely happy with.&lt;br /&gt;&lt;br /&gt;Well, a couple of nights ago, I got an idea for another design. It was based on the source code that I used in my presentation for a PB&amp;J sandwich, written in Perl. I drew up the 8-bit graphics, added the source code to the back of the shirt, and after a couple of revisions, posted it for sale.&lt;br /&gt;&lt;br /&gt;I now have three shirt designs for sale, in my Spreadshirt store. All feature 8-bit graphics depicting various food-related items. We have the stand mixer that I wore at the conference, a big-ol' jug of moonshine, and of source the PB&amp;J in Perl. And just in time for Christmas too!&lt;br /&gt;&lt;br /&gt;So if you want to show your geek side and your food side all at once, head over to my &lt;a href="http://powerwhisk.spreadshirt.com/"&gt;Spreadshirt store&lt;/a&gt; and grab a t-shirt. Or direct your friends and/or family members in that direction! I'll post more shirts as ideas come to me, but at least now we have an appetizer to get everyone started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-1035234679788319212?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=1035234679788319212' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/1035234679788319212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/1035234679788319212'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/12/t-shirts-for-sale.html' title='T-Shirts For Sale!'/><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-401281446852366276</id><published>2009-10-23T09:27:00.002-06:00</published><updated>2009-10-23T10:04:54.198-06:00</updated><title type='text'>Mitigating the Evil Maid Attack</title><content type='html'>The &lt;a href="http://www.schneier.com/blog/archives/2009/10/evil_maid_attac.html"&gt;security world&lt;/a&gt; is buzzing with news of the so-called "&lt;a href="http://pthree.org/2009/10/23/evil-maid/"&gt;evil maid&lt;/a&gt;" attack. The basic warning is this: no matter how secure you think you are, you aren't. Full-disk encryption is now provably breakable, and without actually having to break the encryption itself. All you need to do is get ahold of a computer that has been shut down, boot to your own boot device, screw with the boot loader, and shut down again... and then come back after the computer has been turned on and logged into by the real user.&lt;br /&gt;&lt;br /&gt;This attack has been called the evil maid attack because a hotel maid is in a perfect position to accomplish this. They have access to the room when you're not around, and leaving a "do not disturb" sign on your door is hardly a deterrent. If you stay at a hotel multiple nights in a row, and you leave your computer in your room while you're not around, you are leaving yourself at risk. You may be the subject of a targetted attack, where the attacker poses as a maid or otherwise gains access to your hotel room while you're out. Or an attacker may get an actual job as a maid at a high-profile hotel, where they know that plenty of secrets will always be passing their way, waiting to be stolen.&lt;br /&gt;&lt;br /&gt;There are measures you can take to try and prevent this attack from occuring in the first place. Think of them in terms of both intrusion prevention, and intrusion detection. For instance, a BIOS password can be difficult at best to compromise on a laptop. This is an aspect of intrusion prevention. Of course, it is still possible to reset the BIOS password on a laptop, which will then give the attacker access to install the attack MBR. But if you turn on your computer and there is suddenly no password, when you previously had one, then you know that something is amiss. This is a form of intrusion detection.&lt;br /&gt;&lt;br /&gt;You could always use a thumb drive to boot your machine, which would make an evil maid attack against your actual hard drive completely worthless. This introduces another aspect of computer security, which security experts will always disparage, called "security through obscurity". If the attacker doesn't know that you use this method, then they won't be able to attack against it. The problem with this method is, now you have to protect both your boot key, and your laptop. If you only use one thumb drive to boot your machine, and that drive somehow gets damaged (water, static electricity, EMF), then you lose the ability to use your computer.&lt;br /&gt;&lt;br /&gt;You could change your password on every boot. Using traditional methods, this is is tedius, and inconvenient, and ignores the fact that the modified boot record might be prepared for it anyway. You could use a password &lt;a href="http://en.wikipedia.org/wiki/Dongle"&gt;dongle&lt;/a&gt;, but that suffers from the same limitations as the thumb drive.&lt;br /&gt;&lt;br /&gt;You could leave your computer on, of course. If somebody shuts it down and messes with your boot record, then you'll at least be able to detect that. But then your computer is also susceptable to a &lt;a href="http://en.wikipedia.org/wiki/Cold_boot_attack"&gt;cold boot attack&lt;/a&gt;, which doesn't require the attacker to return later, so that's out. Using a fingerprint scanner for authentication? Your fingerprints are probably everywhere on your computer already, and even the Mythbusters were able to &lt;a href="http://en.wikipedia.org/wiki/MythBusters_(2006_season)#Fingerprint_Lock"&gt;fool these&lt;/a&gt; using little more than a photocopy.&lt;br /&gt;&lt;br /&gt;So it would seem that leaving your computer off while you're not in the room is safer than leaving it on. Using alternative boot methods helps, but cannot completely prevent. Using a combination of methods is best, and while it may not provide 100% protection, it can slow down the attacker, and that &lt;span style="font-style:italic;"&gt;may&lt;/span&gt; be enough.&lt;br /&gt;&lt;br /&gt;Anybody else have any other methods that I missed?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-401281446852366276?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=401281446852366276' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/401281446852366276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/401281446852366276'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/10/mitigating-evil-maid-attack.html' title='Mitigating the Evil Maid Attack'/><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-9022744616755887850</id><published>2009-10-21T19:45:00.000-06:00</published><updated>2009-10-21T19:45:00.292-06:00</updated><title type='text'>Whiskerino 2009</title><content type='html'>&lt;span style="font-style:italic;"&gt;"He that hath a beard is more than a youth, and he that hath no beard is less than a man." - William Shakespeare&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The great &lt;a href="http://whiskerino.org/2009/"&gt;Whiskerino 2009&lt;/a&gt; is nigh at hand. In short, it is a beard-growing contest. The basic idea is, on November 1st, you shave. Everything comes off. And then you don't shave again until the end of February.&lt;br /&gt;&lt;br /&gt;I have a lot of friends who have never seen me without a beard. When I met my wife, I had a goatee, and by the time our first child was born, I was sporting a full beard. Neither has ever seen me without facial hair. I'm a little worried my daughter won't recognize me.&lt;br /&gt;&lt;br /&gt;I'm not &lt;span style="font-style:italic;"&gt;that&lt;/span&gt; worried though. We had a dress code at cooking school that stated that you could have a beard or no beard, but you could not be in the stages of growing a beard. I knew that if we had a three-day weekend, I would have enough time to grow a long enough beard to be within the requirements of the dress code.&lt;br /&gt;&lt;br /&gt;Of course I'm planning to enter the Whiskerino. I have a few friends that plan to as well. One rule is, you must post photos of your beard at least every 7 days, and more often towards the end. Never before has my beard been so well documented. I plan to post photos on my blog as well. For those who only read it via RSS, you're out of luck. I will be posting the photos on the side bar on my site.&lt;br /&gt;&lt;br /&gt;If anybody out there has been contemplating growing a beard but waiting for the right time, the right time is now. Well, in a week and a half. I issue a challenge to all of my geek friends out there with the ability to grow facial hair. Even Shakespeare knew the importance of a Unix beard. Now is your beard's time to shine!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-9022744616755887850?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=9022744616755887850' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/9022744616755887850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/9022744616755887850'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/10/whiskerino-2009.html' title='Whiskerino 2009'/><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-8239596379465940642</id><published>2009-09-29T21:41:00.002-06:00</published><updated>2009-09-29T22:16:54.310-06:00</updated><title type='text'>The Boy Scout Motto</title><content type='html'>Be Prepared. That is the motto of the Boy Scouts of America. And everyone loves the boy scouts, right? Okay, maybe not everyone. I remember hearing kids in school make fun of boy scouts. I also remember those same kids, not too long after high school, stumbling around drunk at a local grocery store, making fun of anything they could manage to focus on. Kind of puts things into focus, doesn't it?&lt;br /&gt;&lt;br /&gt;What does it mean to me to be prepared? I don't board an airplane without snacks, bottled water and sufficient reading material; you never know how much time you'll spend in the air or even just on the runway. I keep small sewing kits and first aid kits in my car, along with a flashlight, a roll of paper shop towels, and of course, jumper cables. And I've used all of them. I keep a spare laptop power brick in my work backpack, and have ended up using it on a number of occasions, sometimes because I forgot mine, but often because somebody else forgot theirs.&lt;br /&gt;&lt;br /&gt;Being prepared means thinking about things that might happen, so that if and when they do happen, you don't get caught with your pants down. Of course, we can't think of everything that might happen, but we do our best. And one of the things that I like to keep stocked is my food storage. I started slowly building it when I got married, and when I got laid off a year and a half later and was out of work for six weeks, my family and I were fed.&lt;br /&gt;&lt;br /&gt;I was dismayed some time ago to discover that there is a name for people like me: preppers. It sounds like "pepper", which is kind of cool, but reeks of "Trekker", which is completely uncool (even for me, and I also reek of uncool). But it gets worse. See, a lot of preppers believe that in addition to their food storage, they must also prepare for things like civil unrest. I don't think this is entirely unfounded. Anyone that's been through, or even seen on TV, riots and looting in large cities because of everything from natural disasters to local sports teams winning (or losing) would be a fool to find civil unrest unlikely.&lt;br /&gt;&lt;br /&gt;I don't mind them stocking up on their guns and ammo. It's not my thing, but I'm not going to slam on them either. But what kills me is when their efforts to ensure their families' safety makes them look like gun-toting fanatics who will try to cease power at their earliest opportunity. I don't see it like that, but a lot of people do.&lt;br /&gt;&lt;br /&gt;That's right. Some people actually have actually expressed discontent and fear at preppers, for a variety of reasons, including the one I just mentioned. One person, who's vanity mandated that her blog's name included the words "pretty girl", has stated that "&lt;a href="http://prettygirlsays.wordpress.com/2009/09/22/preppers-scare-the-crap-out-of-me/"&gt;Preppers Scare the Crap Out of Me&lt;/a&gt;". Her post is filled with a torrent of misinformation, and even tries to bring politics into condemning what I consider to be common sense: being prepared. For the record, I'm a little jaded that &lt;a href="http://www.utahpreppers.com/2009/09/a-liberals-view-of-preppers/"&gt;the post&lt;/a&gt; that refered me to hers also brought politics into it. Look, I don't care whether you're liberal, conservative, moderate, etc: when disaster happens, if you're not prepared, it may mean the difference between life and death, or at the very least, confinement and freedom.&lt;br /&gt;&lt;br /&gt;Hundreds of years ago, back before the days when American politics invaded our society, way before the Boy Scouts, there was a dude named Aesop. I don't know if he really came up with the story of &lt;a href="http://en.wikipedia.org/wiki/The_Ant_and_the_Grasshopper"&gt;The Ant and the Grasshopper&lt;/a&gt;, but the moral is clear: being prepared can save your life.&lt;br /&gt;&lt;br /&gt;My favorite part of the pretty girl's post is her closing thought: "For now though, I’m stocking up on sugary rum and tequila and calling it a day." Well, at least she has a plan, even if it is no more than to drink herself into a drunken stupor.&lt;br /&gt;&lt;br /&gt;Kind of puts things into focus, doesn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8239596379465940642?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8239596379465940642' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8239596379465940642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8239596379465940642'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/09/boy-scout-motto.html' title='The Boy Scout Motto'/><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-3384011610427406618</id><published>2009-09-17T14:00:00.002-06:00</published><updated>2009-09-17T14:22:33.498-06:00</updated><title type='text'>Speaking at UTOSC 2009</title><content type='html'>Those of you in or near Utah may be interested to know that this year's &lt;a href="http://2009.utosc.com/"&gt;Utah Open Source Conference&lt;/a&gt; is on the horizon. There's a full schedule at this conference, and I'm please to announce that I will be making two presentations this year. I thought I'd let you know what I'll be presenting on, using the text from the program descriptions:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Monitoring Your Servers&lt;/span&gt;&lt;br /&gt;Friday, October 9, 6:15pm&lt;br /&gt;Monitoring servers has become increasingly important in recent years, as downtime has become increasingly unacceptable. Countless tools exist to notify admins when downtime occurs, and possibly raise flags beforehand to keep it from happening in the first place. This session will explore some of the tools available, and discuss which ones are most appropriate for certain situations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Object Oriented Cooking&lt;/span&gt;&lt;br /&gt;Saturday, October 10, 4:45pm&lt;br /&gt;&lt;br /&gt;It seems that more and more geeks are discovering a fascination with cooking. Whether you're a geek that lives to cook or just cooks to live, Object Oriented Cooking is for you! Geek chef Joseph Hall will show you how smaller recipes can become objects, ready to be included on a whim in larger recipes. As you begin to understand how code reuse can happen in the kitchen, your meals will become both easier and tastier.&lt;br /&gt;&lt;br /&gt;Of course, the problem with making two presentations instead of one, like in years past, is that now I have to prepare twice as much content to present. The first year I was talked into teaching a cooking class, even though it wasn't technically computer-related. The second year, I taught a Perl class instead, partly in order to stay on topic with the rest of the conference. By popular demand (I had people asking about it as early as last year's conference) the cooking class is back this year, but with a twist: I'm trying to present cooking in a format which is more familiar to geeks.&lt;br /&gt;&lt;br /&gt;The server monitoring session is something that I'm planning to use to explain my own personal quest to keep an eye on my servers, both at home, and at work. Mostly at work. Because of my specific needs, some solutions were more appropriate than others. Obviously, your needs will probably vary. The idea is not necessarily to describe specific technologies, but to help identify which technologies are most appropriate for your specific needs.&lt;br /&gt;&lt;br /&gt;If past years are any indication, then we're going to be in for an exciting conference in general. If you haven't registered yet, &lt;a href="http://2009.utosc.com/pages/registration/"&gt;now's the time&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-3384011610427406618?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=3384011610427406618' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/3384011610427406618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/3384011610427406618'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/09/speaking-at-utosc-2009.html' title='Speaking at UTOSC 2009'/><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-2089988707661944131</id><published>2009-09-12T17:34:00.002-06:00</published><updated>2009-09-12T18:06:44.081-06:00</updated><title type='text'>Ecuadorian Chocolate from Amano</title><content type='html'>You need to understand something. I &lt;span style="font-style:italic;"&gt;love&lt;/span&gt; Ecuadorian chocolate. A few years ago I went to a chocolate tasting with E Guittard, and my favorite sample was a piece of dark chocolate from Ecuador that was just awesome. Ever since, I'm always on the lookout for single-bean origin chocolate from Ecuador. Venezuelan is easy to find. So is Columbian. Unfortunately, Ecuadorian seems to be a pretty rare find.&lt;br /&gt;&lt;br /&gt;This leads me to today's story. I was at the airport today, and I ran into none other than Art Pollard from &lt;a href="http://www.amanochocolate.com/"&gt;Amano Chocolate&lt;/a&gt;. He was on his way to a village in Ecuador called Guayas. This did not surprise me. Art spends a lot of time meeting with the farmers that are growing his cacao beans. But what did surprise me was when I found out that this particular trip was paid for by the Ecuadorian government.&lt;br /&gt;&lt;br /&gt;You see, while Amano isn't known for large production quantiies, they are known for high quality. If you don't believe me, ask the Ecuadorian government, who has been so impressed with the quality of Amano chocolate that they want to use them to help promote the sale of Ecuadorian cocoa. Amano has officially become the Michael Jordon of the chocolate world; they are no longer just selling themselves, their fame is being used to sell people too.&lt;br /&gt;&lt;br /&gt;Art had a bag with him filled with bars of his new Ecuadorian chocolate, named Guayas, after the village which produced the beans. He gave me a bar, and was so excited about it that he wouldn't let me walk off without trying it and telling him what I thought.&lt;br /&gt;&lt;br /&gt;I broke off a square and put it in my mouth. The first thing that hit me was the deep smokiness that I love so much in Ecuadorian chocolate. It was followed by a subtle hint of earthiness, and then a bitterness that was not unwelcome. Then came the fruitiness. The bitterness had woken up my taste buds, and they were ready to embrace that intense fruitiness. But unlike Amano's Madagascar bar, this fruitiness was accompanied by that familiar chocolate flavor that we all know from lesser, gateway chocolates. As the chocolate melted away, any bitterness that was there was replaced by the vanishing flavor of fruit and chocolate that left me wanting for more.&lt;br /&gt;&lt;br /&gt;I wish I could tell you to go out and buy this right now, but I can't. While the bars have been formed and wrapped in foil, as of the time of this writing the boxes are still being printed. This bar won't hit the market for another 3 to 4 weeks. As much as I'm tempted to end this post with a couple of "neeners", the truth is, I will probably be going through withdrawl myself before I make it back to Utah, and will still have a couple more weeks before I can buy any more. So in a way, I'm kind of in the same boat as you guys. Except that I got to taste it first.&lt;br /&gt;&lt;br /&gt;Neener.&lt;br /&gt;&lt;br /&gt;Disclaimer: If you didn't know before now, it should be obvious from this post that I know and am friends with Art. If that makes me seem biased, then clearly the only solution is for you to buy a bar and decide for yourself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-2089988707661944131?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=2089988707661944131' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/2089988707661944131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/2089988707661944131'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/09/ecuadorian-chocolate-from-amano.html' title='Ecuadorian Chocolate from Amano'/><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-1158018319815781319</id><published>2009-09-11T12:35:00.003-06:00</published><updated>2009-09-11T12:52:59.512-06:00</updated><title type='text'>Moving Planters indoors for Winter: Python Redux</title><content type='html'>Okay, so I'm a still a little bitter. Last year I posted a quick &lt;a href="http://blog.josephhall.com/2008/11/importing-usda-sr21-into-mysql.html"&gt;script for dealing with USDA data&lt;/a&gt;. To my absolute surprise, I have received far more traffic from this post than I ever dreamed. Many people were able to use it immediately, while some encountered speed bumps. The amount of emails that I've received concerning it is far greater than the amount of comments posted on the article itself.&lt;br /&gt;&lt;br /&gt;And then one day, some lazy reader named Tony posted the comment:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Would be nice to have the ruby version of that perl code. It's a nightmare for someone with no perl experience :-(&lt;/span&gt;&lt;br /&gt;I was a little ticked, and it probably showed in the curtness of my reply comment suggesting that he was welcome to write his own. My bitterness was again reflected in my most recent piece of code that does an &lt;a href="http://blog.josephhall.com/2009/09/moving-planters-indoors-for-winter.html"&gt;automated weather check&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The highly skilled and talented James Lance took up the challenge and &lt;a href="http://www.thelances.net/james/2009/09/moving_planters_indoors_for_wi.html"&gt;rewrote my script in Python&lt;/a&gt;. Granted, the fact that James is also an excellent Perl coder might have given him an edge, but he probably also knew the procedure was simple in any language: download some XML, check one of the values, and send an email if it matched a particular condition. You could write this in Bash if you needed to. James just took the initiative.&lt;br /&gt;&lt;br /&gt;Kudos to James for not being lazy, and providing the Python version. I'm not so bitter anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-1158018319815781319?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=1158018319815781319' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/1158018319815781319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/1158018319815781319'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/09/moving-planters-indoors-for-winter_11.html' title='Moving Planters indoors for Winter: Python Redux'/><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-6780860842855038199</id><published>2009-09-04T19:42:00.000-06:00</published><updated>2009-09-04T12:44:30.440-06:00</updated><title type='text'>Moving Planters Indoors for the Winter</title><content type='html'>Winter will be here in a couple of months, and if you're like me, you might have some potted plants outside that you want to move inside when it starts getting too cold. Unfortunately, if you're like me, you're probably also not very good at checking the weather forecast to know when it's expected to be cold. Heck, sometimes I don't even know that it's going to be raining sometimes until I step outside into the rain without an umbrella or rain coat.&lt;br /&gt;&lt;br /&gt;Fortunately, computers have made a lot of types of automation easier, like checking the weather for you. Since &lt;a href="http://www.weather.gov/"&gt;weather.gov&lt;/a&gt; is paid for by your tax dollars (if you're American), the data on that site is freely available. And bonus: you can now download a 7-day forecast for your area in XML format, suitable for easy parsing.&lt;br /&gt;&lt;br /&gt;The quick link to the page you need to look at is &lt;a href="http://www.wrh.noaa.gov/forecast/wxtables/"&gt;http://www.wrh.noaa.gov/forecast/wxtables/&lt;/a&gt;. When you get there, you can click on the XML radio button, type in your city and state, and click "Go". The URL of the next page will be the link that you need to grab for your automated reports.&lt;br /&gt;&lt;br /&gt;There are plenty of tools and programming languages out there for you to choose from to handle this, but if you're in the aforementioned class of people who are like me, you've probably already chosen Perl. Let me make your life a little easier, and give you the source code for a cron that I tossed together this morning. I have it set up to run at 6:30am every morning:&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;.PreProc { color: #8080ff; font-weight: bold; }&lt;br /&gt;.Statement { color: #ffff00; font-weight: bold; }&lt;br /&gt;.Identifier { color: #00ffff; font-weight: bold; }&lt;br /&gt;.Constant { color: #ff40ff; font-weight: bold; }&lt;br /&gt;.Special { color: #ff6060; font-weight: bold; }&lt;br /&gt;.perlcode { font-family: monospace; color: #ffffff; background-color: #000000; }&lt;br /&gt;/* pre { font-family: monospace; color: #ffffff; background-color: #000000; }&lt;br /&gt;body { font-family: monospace; color: #ffffff; background-color: #000000; } */&lt;br /&gt;.lnr { color: #ffff00; font-weight: bold; }&lt;br /&gt;--&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;div id="perlcode" class="perlcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="PreProc"&gt;#!/usr/bin/perl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;use strict&lt;/span&gt;;&lt;br /&gt;&lt;span class="Statement"&gt;use &lt;/span&gt;XML::Simple;&lt;br /&gt;&lt;span class="Statement"&gt;use &lt;/span&gt;LWP::UserAgent;&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$xs&lt;/span&gt; = XML::Simple-&amp;gt;&lt;span class="Statement"&gt;new&lt;/span&gt;();&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$ua&lt;/span&gt; = LWP::UserAgent-&amp;gt;&lt;span class="Statement"&gt;new&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$url&lt;/span&gt; = &lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;&lt;a href="http://www.wrh.noaa.gov/forecast/xml/xml.php?duration=168&amp;amp;interval=6&amp;amp;lat=40.69651&amp;amp;lon=-112.091784"&gt;http://www.wrh.noaa.gov/forecast/xml/xml.php?duration=168&amp;amp;interval=6&amp;amp;lat=40.69651&amp;amp;lon=-112.091784&lt;/a&gt;&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$response&lt;/span&gt; = &lt;span class="Identifier"&gt;$ua&lt;/span&gt;-&amp;gt;get( &lt;span class="Identifier"&gt;$url&lt;/span&gt; );&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$content&lt;/span&gt;  = &lt;span class="Identifier"&gt;$response&lt;/span&gt;-&amp;gt;decoded_content();&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$xml&lt;/span&gt; = &lt;span class="Identifier"&gt;$xs&lt;/span&gt;-&amp;gt;XMLin( &lt;span class="Identifier"&gt;$content&lt;/span&gt; );&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;%temps&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;for&lt;/span&gt; &lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$day&lt;/span&gt; ( @{&lt;span class="Identifier"&gt;$xml&lt;/span&gt;-&amp;gt;{forecastDay}} ) {&lt;br /&gt;    &lt;span class="Statement"&gt;eval&lt;/span&gt; {&lt;br /&gt;        &lt;span class="Statement"&gt;for&lt;/span&gt; &lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$hour&lt;/span&gt; ( @{&lt;span class="Identifier"&gt;$day&lt;/span&gt;-&amp;gt;{period}} ) {&lt;br /&gt;            &lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$temp&lt;/span&gt; = &lt;span class="Identifier"&gt;$hour&lt;/span&gt;-&amp;gt;{temperature}{content};&lt;br /&gt;            &lt;span class="Identifier"&gt;$temps&lt;/span&gt;{&lt;span class="Identifier"&gt;$temp&lt;/span&gt;} = &lt;span class="Constant"&gt;1&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;@temps&lt;/span&gt; = &lt;span class="Statement"&gt;sort&lt;/span&gt; &lt;span class="Statement"&gt;keys&lt;/span&gt; &lt;span class="Identifier"&gt;%temps&lt;/span&gt;;&lt;br /&gt;&lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$lowtemp&lt;/span&gt; = &lt;span class="Identifier"&gt;$temps&lt;/span&gt;[&lt;span class="Constant"&gt;0&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;if&lt;/span&gt; ( &lt;span class="Identifier"&gt;$lowtemp&lt;/span&gt; &amp;lt; &lt;span class="Constant"&gt;40&lt;/span&gt; ) {&lt;br /&gt;    &lt;span class="Statement"&gt;use &lt;/span&gt;Net::SMTP::TLS;&lt;br /&gt;    &lt;span class="Statement"&gt;my&lt;/span&gt; &lt;span class="Identifier"&gt;$smtp&lt;/span&gt; = Net::SMTP::TLS-&amp;gt;&lt;span class="Statement"&gt;new&lt;/span&gt;(&lt;br /&gt;        &lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;smtp.gmail.com&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;,&lt;br /&gt;        &lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;Port&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;     =&amp;gt; &lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;587&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;,&lt;br /&gt;        &lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;User&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;     =&amp;gt; &lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;username&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;,&lt;br /&gt;        &lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;Password&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt; =&amp;gt; &lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;password&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;,&lt;br /&gt;    );&lt;br /&gt;    &lt;span class="Identifier"&gt;$smtp&lt;/span&gt;-&amp;gt;mail(&lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;username@gmail.com&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;);&lt;br /&gt;    &lt;span class="Identifier"&gt;$smtp&lt;/span&gt;-&amp;gt;to(&lt;span class="Constant"&gt;'&lt;/span&gt;&lt;span class="Constant"&gt;000000000@messaging.sprintpcs.com&lt;/span&gt;&lt;span class="Constant"&gt;'&lt;/span&gt;);&lt;br /&gt;    &lt;span class="Identifier"&gt;$smtp&lt;/span&gt;-&amp;gt;data();&lt;br /&gt;    &lt;span class="Identifier"&gt;$smtp&lt;/span&gt;-&amp;gt;datasend(&lt;span class="Constant"&gt;&amp;quot;&lt;/span&gt;&lt;span class="Constant"&gt;Subject: Cold Weather&lt;/span&gt;&lt;span class="Special"&gt;\n&lt;/span&gt;&lt;span class="Constant"&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;    &lt;span class="Identifier"&gt;$smtp&lt;/span&gt;-&amp;gt;datasend(&lt;span class="Constant"&gt;&amp;quot;&lt;/span&gt;&lt;span class="Special"&gt;\n&lt;/span&gt;&lt;span class="Constant"&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;    &lt;span class="Identifier"&gt;$smtp&lt;/span&gt;-&amp;gt;datasend(&lt;span class="Constant"&gt;&amp;quot;&lt;/span&gt;&lt;span class="Constant"&gt;Temps as low as &lt;/span&gt;&lt;span class="Identifier"&gt;$lowtemp&lt;/span&gt;&lt;span class="Constant"&gt; coming up&lt;/span&gt;&lt;span class="Constant"&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;    &lt;span class="Identifier"&gt;$smtp&lt;/span&gt;-&amp;gt;dataend();&lt;br /&gt;    &lt;span class="Identifier"&gt;$smtp&lt;/span&gt;-&amp;gt;quit();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="Statement"&gt;exit&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Note to Perl programmers: This was a quick script, and it does the job. If you would like to offer improvements, I would love to hear them.&lt;br /&gt;&lt;br /&gt;Note to non-Perl programmers: I'm sorry I didn't write it in (Python|Ruby|PHP) or whatever other language you prefer. You're more than welcome to write your own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-6780860842855038199?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=6780860842855038199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6780860842855038199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6780860842855038199'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/09/moving-planters-indoors-for-winter.html' title='Moving Planters Indoors for the Winter'/><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-498009214676164998</id><published>2009-08-18T21:41:00.002-06:00</published><updated>2009-08-18T22:07:40.128-06:00</updated><title type='text'>Controlling Flash</title><content type='html'>Many of you kids may not remember The Big Cookie Scare about 10+ years ago. This was back before The Interwebs, when people sometimes called it the World Wide Web (so that's what "www" stands for!). The browser wars between Netscape and Microsoft were in full swing, and there was an epidemic of sites using these scary things called cookies. As far as a lot of people knew, there was no good that could come from cookies. I knew people who seriously thought that cookies were used as trojan horses, and that you could get viruses from them. I even worked for one of these people for two months, before finding myself a new job. Four months after I left, his company went out of business. Are we surprised?&lt;br /&gt;&lt;br /&gt;Most people still don't know what browser cookies are, but the scare has lessened. Quite honestly, I think people just found new things to worry themselves about, especially when the browsers started introducing so-called "privacy controls". Now people can delete their cookies, block them from ever appearing on their computer in the first place, even edit them if they feel like it. The Intertubes are stuffed with rainbows and goodness. Or so we thought.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wired.com/epicenter/2009/08/you-deleted-your-cookies-think-again/"&gt;The cookie scare is back&lt;/a&gt;. People are suddenly finding out that this piece of goodness that Macromedia (and now Adobe, since the merger) has the ability to install cookies on your computer that your browser has no control over. Even worse, it's actually possible to have Flash install a cookie on your computer without you knowing that Flash is even running on a site. And if you delete a browser cookie, some sites keep a backup in the Flash cookie jar. Oh no! The tragedy! Webmasters have turned evil again!&lt;br /&gt;&lt;br /&gt;I was already laughing. First of all, there's not much to worry about. Cookies are largely used as browser-side configuration to help maintain a consistent user experience, and as a mechanism to display ads to you that you actually care about, based on the types of sites you look at. This is little to worry about unless you're offended by content providers trying to use advertising to help pay for their employees and bandwidth, or you look at naughty sites while your boss/spouse/parents/etc are away. Shame on you.&lt;br /&gt;&lt;br /&gt;But there are other reasons why I'm not worried. Thanks to &lt;a href="http://pthree.org/"&gt;a buddy of mine&lt;/a&gt;, I installed &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/433"&gt;Flashblock&lt;/a&gt; a while back, which is a Firefox plug-in that keeps Flash files from loading unless you explicitly allow them to. I didn't initially install this because of some deep-seeded vendetta against Flash. It turns out that when Firefox 3 came out, certain Flash content would cause mplayer and Rhythmbox to stop working until I closed my browser. Since some sneaky sites think it's okay to automatically play videos when you open them, and certain friends have deluded themselves into thinking that I'm okay with this, I had to restart Firefox a lot.&lt;br /&gt;&lt;br /&gt;Now that I'm running Flashblock, I don't get tricked into watching lame YouTube videos, and nobody is setting Flash cookies behind my back. But what if I was worried about cookies that were set before I installed Flashblock? Adobe's got you covered. They have on their site a &lt;a href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager.html"&gt;Settings Manager for Flash cookies&lt;/a&gt;. It allows you to set rules and limits, and delete cookies that already exist on your computer.&lt;br /&gt;&lt;br /&gt;So stop worrying about Flash cookies. Actually, stop worrying about cookies in general, you baby. If you're really paranoid, there are much, much worse things in the world to be worried about. Big brother's got plenty of other ways to keep tabs on you, and he probably thinks that cookies are an inefficient method anyway.&lt;br /&gt;&lt;br /&gt;Hey, you've got something on your face. No, the other side. Up... up... yeah--yeah, you've got it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-498009214676164998?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=498009214676164998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/498009214676164998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/498009214676164998'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/08/controlling-flash.html' title='Controlling Flash'/><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-6508109408200413113</id><published>2009-08-01T21:23:00.006-06:00</published><updated>2009-08-03T13:35:15.201-06:00</updated><title type='text'>Cascabel Pork Tenderloin</title><content type='html'>I've been wanting to make this for a while, but cascabel chiles are amazingly hard to find in Salt Lake. The closest that I've come is some company that labels their guajillos as cascabels. It's tragic. I finally ordered some off of Amazon, and I'm ready to experiment.&lt;br /&gt;&lt;br /&gt;I had three components that I needed: a pork tenderloin, a dry rub to put on the tenderloin before cooking it, and a sauce to put on the tenderloin after cooking it. I also needed some sides to go with the pork. They weren't as important, and unfortunately I think they suffered a little because of it. But I think they could be brought up to par. Let's get those out of the way first.&lt;br /&gt;&lt;br /&gt;I needed some veg. I wanted something quick and simple. I decided to go with a medley of red bell pepper, zucchini and orange cauliflower (white will work just fine too, though). About a cup of each, cut into 3/4-inch pieces. I dropped these onto a sheet of foil, with some salt, oil, and Worcestershire sauce. This was folded up and set aside for later.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/cascabel%20pork%20tenderloin/DSCF0008_800.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/cascabel%20pork%20tenderloin/DSCF0008_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next up, I needed some starch. Fortunately, I found some purple potatoes at the local grocery store. Have you ever had purple potatoes? They're so awesome. If you can't find them, you can use red potatoes. Put them in a zip-top bag with some oil and salt, toss them around, and when we're ready we'll toss them on the grill. Take them out of the bag first, though.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/cascabel%20pork%20tenderloin/DSCF0017_800.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/cascabel%20pork%20tenderloin/DSCF0017_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next up, we need to get some sauce going. And for the sauce, we need a red bell pepper. And it needs to be roasted. Fire up the grill and put the pepper on it. Keep turning it every couple of minutes until the outside is nice and charred. Then put it in a bowl and cover it for a couple of minutes. That'll make them sweat, and the skin will peel right off.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/cascabel%20pork%20tenderloin/DSCF0003_800.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/cascabel%20pork%20tenderloin/DSCF0003_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Don't wash the skin off. You've worked hard (kind of) to get all that roasted flavor, and the last thing you want to do is wash it all off. Get the seeds out and set it aside. You'll need it in a moment, though. Add a bit of oil and salt, and a cup of mirepoix to a sauce pan over medium-high and get it nice and caramelized. Add a cup and a half of chicken broth to cool down the pan a little and drop it to medium-low. Add the roasted red bell pepper, a quarter cup of brown sugar, a canned chipotle, and four dried cascabel chiles (seeds removed). Let it simmer for a while. After about ten minutes, take an immersion blender to it, and get everything all nice and broken up. Let it sit on low until it reduces down into a nice, saucy consistency.&lt;br /&gt;&lt;br /&gt;While that's happening, we need to get a dry rub together for the pork. Toss the following into a coffee grinder:&lt;br /&gt;&lt;br /&gt;1 guajillo chile (dried)&lt;br /&gt;1 New Mexico chile (dried)&lt;br /&gt;1 chipotle chile (dried)&lt;br /&gt;3 cascabel chiles (dried)&lt;br /&gt;1/2 tsp minced garlic (dried)&lt;br /&gt;1/2 tsp whole coriander seed&lt;br /&gt;1/2 tsp whole allspice&lt;br /&gt;1 tsp onion flakes&lt;br /&gt;1 tsp mixed peppercorns&lt;br /&gt;&lt;br /&gt;Now it's time to get down to business. First, toss the potatoes and the veg pouch on the grill. The veg pouch can go on an upper rack if you have one. If you have a gas grill, the heat should be on low. Then oil up the tenderloin, salt it, and rub it down with the spices. Toss it on the grill.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/cascabel%20pork%20tenderloin/DSCF0024_800.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/cascabel%20pork%20tenderloin/DSCF0024_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Isn't that a beautiful thing? You'll be wanting to cook the pork until it's somewhere around 155F or so. Then pull it and let it rest for a few minutes; it'll coast the rest of the way to doneness. While it's resting, you're going to toss together some mashed potatoes. The potatoes went on the grill before the pork, and with any luck should finish about the same time. You know the drill: a skewer should go in with a little resistance, but not much. Add them to a bowl with a quarter to a half cup of whole milk or cream, and a couple of tablespoons of the sauce, and mash 'em on up.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/cascabel%20pork%20tenderloin/DSCF0026_800.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/cascabel%20pork%20tenderloin/DSCF0026_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The veg steamed itself in the foil pouch, and is already ready to serve as is. I laid down a bed of purple mashers, laid a few slices of pork across the middle, sauced 'em, and added some veg around the side.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/cascabel%20pork%20tenderloin/DSCF0037_800.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/cascabel%20pork%20tenderloin/DSCF0037_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thoughts: the spice rub was perfect. The leftover pork is sliced and in the fridge, and I can't help myself from snacking on the cold slices. The sauce was good, but mine had two chipotles in it and was way too hot. Drop it a little, and you're left with a nice, sweet chile-based sauce that still has some decent heat.&lt;br /&gt;&lt;br /&gt;My potatoes were a little overcooked, but they tasted awesome otherwise. But I may have to come up with something a little better the next time around. Maybe something a little more garlicky and buttery.&lt;br /&gt;&lt;br /&gt;The veg needed a lot of help. The red bell peppers were dead on perfect, but the zucchini and cauliflower were definitely lacking in flavor. I think this might be partially because they're pretty bland as it is. Something like &lt;a href="http://blog.josephhall.com/2009/07/red-purple-and-bacon.html"&gt;Red, Purple and Bacon&lt;/a&gt; would be great. I just wanted to pull this all together on the grill. And I know this is going to sound crazy, but I was trying to avoid bacon on this one. Clearly, avoiding bacon leads only to disaster.&lt;br /&gt;&lt;br /&gt;The plate that you see in the photo is pretty generously-portioned. But before you judge me, I should tell you that this was actually put together for me and my wife. We have plenty of leftovers, for meals to come. And tasty leftovers at that. I think that if you up the veggies a little, you could probably serve four to six people with this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-6508109408200413113?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=6508109408200413113' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6508109408200413113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/6508109408200413113'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/08/cascabel-pork-tenderloin.html' title='Cascabel Pork Tenderloin'/><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-8680505512120334708</id><published>2009-07-26T21:43:00.003-06:00</published><updated>2009-07-27T07:15:14.392-06:00</updated><title type='text'>Red, Purple and Bacon</title><content type='html'>And you thought I never cooked anymore.&lt;br /&gt;&lt;br /&gt;I don't know about you, but I'm the sort of person who has a hard time seeing something like a head of purple cauliflower at the grocery store without buying it. They also had white, green and orange. But come on, a &lt;a href="http://blog.josephhall.com/2009/07/dude.html"&gt;dude&lt;/a&gt; has his limits.&lt;br /&gt;&lt;br /&gt;So what do you do with purple cauliflower? Well, anything you can do with regular cauliflower, really. You just get the advantage of having prettier colors. In this case, I started with bacon. Peppered bacon.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0036_800.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/DSCF0036_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Huh. Eight half-slices. I could have sworn I ended up using six in the end dish. &lt;span style="font-style:italic;"&gt;Something&lt;/span&gt; must have &lt;span style="font-style:italic;"&gt;happened&lt;/span&gt; to the other two.&lt;br /&gt;&lt;br /&gt;When the bacon is nice and crispy, pull out out of the pan and set it aside to drain. And yes, I know you don't like crispy bacon like I do. Trust me on this one. You want it crispy. Not cardboard crispy, but it does need to have some snap to it. Drain off most of the bacon fat, but not all of it.&lt;br /&gt;&lt;br /&gt;I ended up using about a cup of purple cauliflower, cut into pieces, and half a cup of red bell pepper, also cut into pieces. Crank the heat, and saute them in the bacon fat. We're not looking to actually cook them all the way through, that will happen later. Right now we just want some color on them. I did add a splah or two of Worcestershire sauce though. I like it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0038_800.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/DSCF0038_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then we need some pasta. I went with a ziti rigati, maybe a cup or so. Add it to the pan, along with a cup of chicken broth. Keep another half cup to a cup standing by, just in case. Also, I used a half tablespoon each of dried basil and dried chives.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0042_800.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/DSCF0042_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a kind of &lt;a href="http://blog.josephhall.com/2006/06/absorption-pasta.html"&gt;absorption pasta&lt;/a&gt; dish. No wasted cooking water, and the pasta soaks up all of that flavorful liquid. You need to keep the pasta moving, but not constantly. Just enough that it all has a chance to soak up liquid, and none of it cooks unevenly. If you start to run out of liquid and the pasta isn't cooked yet, add another quarter cup or so and keep going.&lt;br /&gt;&lt;br /&gt;The goal here is for the pasta to finish cooking at the same time as the veggies. It'll take somewhere around 10 minutes. give or take. You'll notice that I didn't add salt or pepper to this dish. Trust me, the bacon has plenty of both. In my case, the dish still ended up being just a tad saltier than I would have liked. Not enough to detract from the overall tastiness.&lt;br /&gt;&lt;br /&gt;Just before the liquid finishes evaporating, you'll want to add the bacon back into the pan, along with the juice of half a lemon. You'll notice in the final photo that I ended up cutting it into inch-long pieces. I probably should have started out that way, but that's okay. The bacon is going to soak up just a little of the remaining juices, and catch some of the steam as well. This will make it lose some crisp. If you kept it soggy before, it will remain soggy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i122.photobucket.com/albums/o242/techhat/dishes/DSCF0046_800.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/DSCF0046_tn.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Oh man. This stuff was awesome. I could have eaten it all night, but my heart would have exploded from the bacony goodness. Don't make it as an entree. Keep it as a side. Let me know if you think of the perfect thing to serve it with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18314879-8680505512120334708?l=blog.josephhall.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=18314879&amp;postID=8680505512120334708' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8680505512120334708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18314879/posts/default/8680505512120334708'/><link rel='alternate' type='text/html' href='http://blog.josephhall.com/2009/07/red-purple-and-bacon.html' title='Red, Purple and Bacon'/><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></feed>