My quest for the perfect fruit smoothie

I have been a smoothie addict for several years, and recently got interested in saving some cash and making my own (at $5 a smoothie, the commercial smoothie shops were making $60+ from me each month!). To begin my quest for the perfect smoothie, I had to define a few requirements:

– Smoothies needed to be cheaper than the commercial joints

– I needed a blender that would stand up to smoothie making abuse (crushing ice can kill blades pretty quick)

– My smoothies needed to taste BETTER than the commercial joints

My first task was locating a high quality blender. I had numerous discussions with employees at various smoothie making shops, and they told me that their commercial blenders are crazy expensive (my estimates are in the $300 to $500 range). Ouch! I can understand that kind of investment when you are making 100s of smoothies a month, but this seemed excessive when you are making 1 or 2 a week. I read numerous blender reviews, and settled on the Hamilton Beach 52654 blender based on the awesome feedback from smoothie connoisseurs, and the fact that it is supposed to destroy every chunk of ice it comes in contact with. This blender has far exceeded my expectations, and has made some killer smoothies so far!

Once I had a blender, I needed a way to find organic fruit (strawberries, blueberries, blackberries, rasberries, mango, etc.) for a reasonable price. I checked out a couple of local grocery stores, and settled on frozen berries from Whole Foods (I try to use fresh fruit when possible, but frozen fruit seems to be a better fit for my busy lifestyle). After I had fruit and a killer blender, I needed to find some smoothie recipes to try. The Internet is the best place to find smoothie recipes, and I now have 4 – 5 recipes that I use pretty regularly (my favorite is strawberries, blueberries, bananas, 4 ice cubes, skim milk and a touch of sugar). I’ve experimented now for a few months, and I can safely say that my smoothies are BETTER than any of the commercial places. They are also tailored exactly to my tastes, which is a huge benefit in my mind. Each smoothie costs me roughly $1 to make, and they are oooooh so yummy! If you are a smoothie addict like myself, please leave me a comment with your favorite smoothie recipe.

Getting syslog-ng to filter messages by source IP address

I received a call this week from one of our network guys because messages from several network devices weren’t being logged by our centralized log server. When I started debugging the issue, I noticed that traffic from the hosts (host1 in this example) was making it to our syslog-ng server:

$ tcpdump -i eth0 host host1

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
09:22:01.672377 host1.65093 > syslog.syslog: SYSLOG local4.error, length: 108
09:22:06.904446 host1.65093 > syslog.syslog: SYSLOG local4.notice, length: 128

While the traffic was making it to the server, the syslog messages were not being matched against a rule we had defined. Being the curious guy I am, I decided to read the syslog RFC to get a better understanding of the syslog message format. If you aren’t familiar with syslog messages, they take the following form:

<PRI> <HEADER> <MSG>

The PRI section contains the facility and priority, the HEADER section contains a timestamp and the hostname or IP address of the device, and the MSG section contains the message the host is trying to send to the server.

When I dumped one of the syslog message as a raw string of bytes, I noticed that the hostname field didn’t match the expression we were trying to match against. For reference, here is the expression we were using (FYI: the host() directive matches against the hostname in the syslog message, not the source IP address in the IP datagram):

filter f_web_hosts { (host(192.168.0.25)) };

Since the hostname and source IP address were different, the rule didn’t match. To get this to work correctly, I needed to use a netmask() statement to filter based on the source IP address in the IP datagram:

filter f_web_hosts { (netmask(192.168.0.25/32)) };

Once this rule was in place, everything worked as expected! Rock on!