Training My First Mutt

At work, I deal with a lot of mail. Not as much as some people, but still, it is a non-trivial amount. I don’t have to respond to all of it, nor is it all of the same importance. For example, I get emailed by various cron jobs, some of which are critical to read and others are more informational. All in all, it averages out to 60-80 emails a day, depending on how crazy things are. This adds up fast, with the last two years each landing about 14,000 emails. Since I need to keep my email, I am getting quite a stash — about 51,000 messages totalling 1.2GB. How in the world do you keep that organized? More importantly, what mail client can present all those without choking?

When I first started my current job, I chose Evolution, since that was about the best thing at the time. But somehow, it got dumber. Each new release took away features that I had come to love and depend on. When it started changing the key bindings without allowing me to have a say in the matter, I finally gave up and went with Kontact and Kmail. There are some things about KDE that I really like. One of the things is how customizable things are. I set all my key bindings so things worked for me. By this time, I had accumulated a fair amount of email and I noticed that it took a second or two to change folders. Annoying, but I just dealt with it. But on one of my upgrades, I noticed that Kmail was constantly crashing. That is beyond annoying. I moved to Thunderbird. I installed the Lightning extension to allow me to integrate my calendar with my email client like Evo and Kontact. Another year or two goes by and I notice a sufficient number of things about Thunderbird that drive me nuts. Time to move again. I look through the options. I test some out. But they all are SO SLOW.

I start looking at some of the second-tier mail clients, you know, the ones that only have a small following, like Sup, and Notmuch. I like a lot of things about both of those, but neither one is really ready to handle my abusive behavior. They both have powerful searching using the Xapian engine. They both deal very well in threads. Sup even has a UI. Notmuch doesn’t have a UI. I wrote the beginnings of one and decided that there was still way to far to go before I could really use it. I threw my hands up and adopted a Mutt.

Mutt is really a full featured MUA. It doesn’t speak SMTP, it only knows how to speak with a local process such as the venerable Unix Sendmail program. This is perfectly okay, since there are any number of ways to get around this. I chose MSMTP, which runs like sendmail and then makes an SMTP connection to your configured MTA to actually get your mail out there. So my entire mail stack looks something like this:

We have any number of IMAP servers to collect incoming mail. Fetchmail contacts the servers and delivers the mail to my local machine, filtering and tagging the messages on the way. Mutt notices the newly delivered mail and I read it. I reply or send mail and Mutt passes it off to MSMTP, which looks at the envelope from address and chooses the appropriate SMTP server to contact and pass the message off to. The entire stack suits me quite nicely. Each piece does its thing well and does not depend on the other pieces being of any particular brand. I am now free!

But let me tell you, taming your first Mutt is a non-trivial process. I still have not read the entire 12,000 line manual, but I have read much of it, some parts many times. I have spent many hours learning how Mutt does things, what I can change (almost anything) and what I can’t change (very little), customizing key bindings, writing macros, etc. I finally feel like my Mutt and I are getting along. One of the things I really LOVE about my Mutt is that I get to use a *real* editor to compose my mail. Not some clunky built-in, unconfigurable, piece of junk. I use VIM to compose my mail. With a few key settings, it even does syntax highlighting (mail headers, quoted text, etc.), spellchecking and automatic line wrapping for my typed text. It also allows me to paste verbatim text in without messing up its format. I can paste a patch in without whitespace mangling. Hooray. How many other email composers allow this? None that I know of. You don’t like VIM? You can use any editor you like.

When I first switched to Mutt, I was considering writing up a patch that would work with labels, giving me virtual folders for my labels. But after exploring the current label support that Mutt has, I found that to be uneccessary. All my incoming mail get passed through fetchmail, which does filtering and delivery. Part of my filtering process is to remove the junkmail and tag all the rest of the mail with labels according to some regular expressions. I have a little script I wrote that will read the headers of a message and spit out the ‘X-Label:’ header to add to the message. Once delivered, Mutt caches this in its header cache, making for some VERY speedy searches by label. Not only can it search by labels, but it has a very powerful search pattern language. For example, I can limit my view of my messages to ‘~(~d 6m-8m*2w ~f (“telly”|”cookie”) ~Z >1M ~s recipe)’ which means “all messages from threads containing messages from ‘telly’ or ‘cookie’ with dates from 6 to 8 months ago, plus or minus 2 weeks, that were larger than one megabyte and had recipe in the subject”. Tell me this is not a powerful search engine. All of those things it can do without actually re-reading the messages because of the header cache. Some of the modifiers do force Mutt to actually read the messages (like ~b or ~B, which end up searching the body of the message). The header cache does not save all the headers, only the ones that Mutt deems important. Personally, I think this should be configurable.

Besides the Mutt manual (available online at http://www.mutt.org/doc/manual/ or included with your Mutt installation (Debian/Ubuntu users can press F1)), there are loads of online resources to help configure and train your Mutt. I found this site to be very helpful: My First Mutt.

If you are curious what I have done, drop me a note, leave a comment or something and I will share configs or whatever with you. In the mean time, I have some mail to read.

[Edited 27 Jan 2010] Fabio wanted to see my config and my label script, so here goes… A little insight to the twisted mind of Vernon.

Traffic Shaping and Policing

Recently I had the opportunity to work with a customer that needed some help with traffic shaping and policing on their network. I had poked around in the past with this, trying to get guaranteed bandwidth for my VoIP phone, but the last time I checked, that setup no longer worked, so it was shelved until further notice. I just had to take care that when I was on the phone, I could not do any large downloads that would rob the bandwidth from my voice packets.

The customer gave me impetus to re-learn Linux Traffic Control. The main tool offered to us is called tc, meaning traffic control. You can learn all about tc at the Linux Advanced Routing and Traffic Control website. I spent several hours there trying to remember all I had forgotten. I also looked around at several other websites with howtos on the matter, but it seemed that they were all pointing back to lartc.org anyway. I poked around long enough to understand the recipes in their cookbook and then wrote up a script of my own.

I wanted to have about 90kb/s of guaranteed bandwidth for VoIP and then some other high priority bandwidth for things like ICMP packets, TCP ACK packets, and other low-latency stuff (things that mark the TOS field in the IP header.) In other words, I wanted to be able to:

  1. Make sure my VoIP traffic gets through so I don’t have choppy phone calls
  2. Perform uploads without killing my downloads (let the ACK packets through)
  3. Be able to type in an SSH session while doing a large download
  4. Not starve my VPN to work when the network is busy (no more 3-12 second latencies, please.)
  5. Have fast ping times so I can brag to all my friends

Sounds like I am hoping for a miracle, right? Well, not really. Simply dividing the traffic into several classes and then giving each one a slice of the pie will do a lot on my quest for the Well Tempered Network. I know the VoIP bandwidth, so that is easy. Then the rest, I decided to split into quarters — high priority gets at least 1/4 of the remaining bandwidth, medium priority gets the same, while bulk transfers and the rest of the stuff get anything that is left over (a little less than 1/2 the pipe).

Without this QoS script, I am unable to do a large download (or upload) without killing my VoIP call, uploads kill downloads, ssh is very non-interactive, and pings range in the 400-1100ms range. With this QoS script, I can do simultaneous large downloads and large uploads without hurting my VoIP call quality AND at the same time, ssh interactivity goes up (to the same as with no other traffic) and ping times range in the 80-200ms range. VPN traffic seems to be better too, though sometimes it suffers from latencies beyond my control. I think this means I reached all my goals. I was very happy with it and thought it might be nice to share.

Here is my script inline, or you can download it.

#!/bin/bash -e

# Copyright © Vernon Mauery 2007-2009. All Rights Reserved.
# Author: Vernon Mauery

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA

# user settings
RATE_UP=1850
RATE_DOWN=4750
VOIP_RATE=90
VOIP_IP=69.59.224.0/19
VPN_IP=204.146.0.0/16
WAN_IF=ppp0

#
# End Configuration Options
#

LOCK_FILE=/var/run/qos_started

stop_shaper() {
DEV=$1

# Reset everything to a known state (cleared)
tc qdisc del dev $DEV root >& /dev/null || :
tc qdisc del dev $DEV ingress >& /dev/null || :
echo "Shaping removed on $DEV"
}

start_shaper() {
DEV=$1
RATE_DOWN=$2
RATE_UP=$3

# Remove all qdiscs from the device to reset
tc qdisc del dev $DEV root >& /dev/null || :
tc qdisc del dev $DEV ingress >& /dev/null || :

# set queue size to give latency of about 2 seconds on low-prio packets
ip link set dev $DEV qlen 30

#############################
# egress (outbound traffic) #
#############################

# create root HTB qdisc, and point unclassified traffic to 1:40
tc qdisc add dev $DEV root handle 1: htb default 40

# shape all traffic with a rate limit of $RATE_UP which should
# prevent queueing at the ISP, allowing us to control the queue length
# and priority of packets that get sent
tc class add dev $DEV parent 1: classid 1:1 htb
rate ${RATE_UP}kbit burst 6k

# VoIP class (we want guaranteed priority on this one)
tc class add dev $DEV parent 1:1 classid 1:10 htb
rate ${VOIP_RATE}kbit prio 0

# high prio class 1:20 for low-latency packets
tc class add dev $DEV parent 1:1 classid 1:20 htb
rate $[($RATE_UP-$VOIP_RATE)/4]kbit
ceil ${RATE_UP}kbit burst 6k prio 1

# medium priority class 1:30 for small packets and the like
tc class add dev $DEV parent 1:1 classid 1:30 htb
rate $[($RATE_UP-$VOIP_RATE)/4]kbit
ceil ${RATE_UP}kbit burst 6k prio 2

# bulk prio class 1:40
tc class add dev $DEV parent 1:1 classid 1:40 htb
rate $[($RATE_UP-$VOIP_RATE)/2]kbit
ceil ${RATE_UP}kbit prio 3

# SFQ is mostly to make multiple streams share the bandwidth, so in the
# case of our VoIP class, it is really only one stream and pfifo_fast
# would be a better choice. Not many packets should end up in the high
# prio class (1:20), so we just let them go in fifo order as well.
# But the two lowest prio classes (which likely have more traffic)
# will likely benefit from SFQ.
tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev $DEV parent 1:40 handle 40: sfq perturb 10

# filter VoIP stuff
tc filter add dev $DEV parent 1:0 protocol ip prio 50 u32
match ip protocol 17 0xff
match ip dst $VOIP_IP
flowid 1:10

# TOS Minimum Delay (ssh, NOT scp) in 1:20:
tc filter add dev $DEV parent 1:0 protocol ip prio 20 u32
match ip tos 0x10 0xff flowid 1:20

# ICMP (ip protocol 1) in the interactive class 1:10 so we
# can do measurements & impress our friends:
tc filter add dev $DEV parent 1:0 protocol ip prio 20 u32
match ip protocol 1 0xff flowid 1:20

# To speed up downloads while an upload is going on, put ACK packets in
# the interactive class:

tc filter add dev $DEV parent 1: protocol ip prio 20 u32
match ip protocol 6 0xff
match u8 0x05 0x0f at 0
match u16 0x0000 0xffc0 at 2
match u8 0x10 0xff at 33
flowid 1:20

# put the vpn in 1:30 so it doesn't get hurt by downloads
tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32
match ip protocol 6 0xff
match ip dst $VPN_IP
match ip dport 443 0xffff
flowid 1:30

# all other outbound traffic that doesn't match one of these
# filters gets put in the default class, 1:40

#############################
# ingress (inbound traffic) #
#############################

# It is not possible to *shape* inbound traffic (I don't understand
# reasoning behind this), but we are able to limit it. The ingress
# qdisc does not have classes or anything fancy, but we can add
# filters to implement policing. This means we can drop inbound
# packets which will effectively limit our download speeds, which
# makes it so our packets are not getting hung up in the HUGE
# queues at the ISP.

# I also tried to make sure that we didn't drop any VoIP packets
# in the policing effort. You might think of this as profiling. :)

tc qdisc add dev $DEV handle ffff: ingress

# filter VoIP traffic and enqueue it
tc filter add dev $DEV parent ffff: protocol ip prio 50 u32
match ip src $VOIP_IP
flowid :1

# filter *everything* to it (0.0.0.0/0), drop everything that's
# coming in too fast:
tc filter add dev $DEV parent ffff: protocol ip prio 20 u32
match ip src 0.0.0.0/0
police rate $[($RATE_DOWN-$VOIP_RATE)]kbit burst 10k drop
flowid :1

echo "Added shaping for $DEV limited at $RATE_DOWN/$RATE_UP kb/s"
}

start_qos() {
[ -e $LOCK_FILE ] && return 1
start_shaper "$WAN_IF" "$RATE_DOWN" "$RATE_UP"
touch $LOCK_FILE
}

stop_qos() {
stop_shaper "$WAN_IF"
rm -f $LOCK_FILE >& /dev/null
}

qos_status() {
echo "[qdisc]"
tc -s qdisc show dev $WAN_IF
echo "[class]"
tc -s class show dev $WAN_IF
echo "[filter]"
tc -s filter show dev $WAN_IF
}

case $1 in
start)
start_qos
;;

stop)
stop_qos
;;

restart)
stop_qos
start_qos
;;

status)
qos_status
;;

*)
echo "usage: $0 {start|stop|restart|status}"
exit 1
;;
esac

exit 0

Oooh, shiny new toys

After much debate, research and saving of greenbacks, I finally went out and bought my first ham radio. I chose the Icom 92AD. It didn’t take me much to see that the Icom handheld radios were a lot higher quality than the Yaesu radios. They also cost a bit more. The one I chose was one of the more expensive ones (surprise, surprise), but it should do all the things I want it to do. It is a dual-band radio that also has a digital voice/D-STAR capability built in. I am not sure how much I will use the digital voice part, but D-STAR also allows for data to be transmitted along with the digital voice packets. I think that KK7DS‘s D-RATS stuff is really a great idea. Plus, Dan’s a bit of a Linux geek like myself, so I feel good supporting him.

The radio as a handheld doesn’t really have a long range, but it will be great for the ARES and CERT activities that I would like to participate in. There is also a local LDS net that I can participate in as well. So it is a great start to get my radio feet wet.

I have determined that one of the reasons that amateur radio is alluring to me is because it is an excuse for me to get back to my electronics roots. I finally have a reason to get a mutli-meter and a soldering iron. My first project is going to be an SWR meter to make sure that my antenna and transmission line are all correctly tuned. If I plan on making my own antennas, and I do, then this is a very important piece of equipment. Later I plan on making a 6/2/440 collinear coaxial antenna, which will require some fancy assembly, and a center-fed zepp for HF, which should be much easier. I am thoroughly enjoying this new hobby. I just hope it doesn’t wring my wallet too much.

How vain are you?

Like I mentioned in my last ham post, I was not entirely happy with my call sign. I applied for a ‘vanity’ call sign, NV2M, and my request was granted six days ago. I think it is really nice that the FCC allows you to choose your call sign. They did periodically through amateur radio history, but now it is even easier than ever. You log into the FCC website, list your top 25 choices in order of preference, pay them thirteen dollars and wait for 21 days. There are several websites that maintain lists of call signs that are available so you can find one that suits you. Thirteen dollars is not very vain, especially for a ten-year license.

Now take a look at vanity license plates. Fifty-five dollars for a vanity license plate is vain. And you have to pay that each time you renew your registration. But here in Oregon, they have special amateur radio plates you can get for your car that display your call sign. The best part about this is that they are only five dollars. This is the kind of vanity that I can afford.

So it all comes down to the dollar. How vain are you? And Me? About five bucks. I think I am too practical and too much of a tightwad to be really vain.

Ham it up

I have been meaning to get my ham operators license for some time now. I never really knew what was involved in the process so I always let it slip out of my mind after a very short time. I knew that there was a “test” of some sort involved. And that you had to pay to take the test. Not wanting to pay for a test I might fail and not knowing where to turn to pass, I gave up. Until about 3 weeks ago. Then I heard about a ham class that was being offered locally. I actually heard about it through two channels: my church has been pushing to get people to have ham licenses for emergency preparedness, as has Beaverton CERT (Community Emergency Response Team). So when I heard about it this time, I signed up. The flier for the class had a link to Ham Elmer where you could download a PDF that told you the basics about getting a license.

After reading this booklet and absorbing the info like a sponge, I felt pretty confident. I started to read about ham stuff in my spare time. I learned about HF/VHF/UHF propagation and about RF safety. I found some practice tests online and started to take them. I found that I could ace the Technician test nearly every time. So I think to myself, this was pretty easy, maybe I should shoot for General. See, by now, I realized that there are three levels of licenses, each with increased privileges. I already had my sights set on Amateur Extra, but was not sure how long it would take me to get there. A few years, perhaps.

The first time I took the online General level test, I only failed by one question. It was a 35 question test, like the Technician test, only the questions were a little harder. That really got my hopes up. So I studied up some more on the questions I missed so I could understand what they were talking about. At this time, I recognized a lot of the words and phrases, but was still dredging the depths of my brain to pull of any shred of knowledge about radios and electronics I learned in college. As I read about radio wave propagation, FCC part 97, and the ham culture in general, I began to get slightly better scores. I think on the fourth try, I finally started passing the General tests regularly. I still had a week until the ham course. I was notified that they would be testing all levels and that if you pass one level, they automatically offer you the next level. Hmmmm….

I took aim. I jumped. I landed flat on my face with a score of 50% on my first Amateur Extra practice exam. Eeek. There were so many terms and principles that I knew I should remember, but didn’t that I almost gave up there. One week. I started reading and taking practice exams in every free minute of my time. I stayed up late and woke up early with ham radio on my brain. Circuits, and complex impedance, and Q, oh my! I dove in whole hog and pulled up all the debris out of the depths of my brain and put the wreckage back together. I was getting closer. I could feel it. Things were starting to make a little more sense. I was getting a better idea how the circuits fit together and how transmission lines behave at various lengths. What patterns antennas radiate radio waves in. I think I may have done a little happy dance when I passed the practice exam for the first time. After that, it was all downhill. I started passing regularly, albeit with somewhat low scores. The QRZ website kept telling me, “You passed! It was a good score, but not great. Keep studying.” So I go back to review what I missed and try to make sense of all the questions. Finally, I start to get more, “You passed! Great score. You are ready!” One day until the exam. I am so stoked that I have a hard time sleeping.

I skipped the class because it was very long (3 hours Friday night and then 4 hours Saturday morning.) I showed up in time for the exam. I made sure that I was at the start of the line because there were likely more than 80 folks there to get tested. The VEs (Volunteer Examiners) said that this was the largest group to be tested that they had ever seen. I would believe it. It took them a while to get the line moving, but after all my forms were checked in triplicate, I was handed my test. They announced that they would allow programmable calculators as long as there were no programs on them. Understandable, but my HP-48G from college had all the stuff on it that I spent years putting on, so there was no way I was going to delete that stuff. Good thing I had a backup plan. I brought the simple simon calculator that Lauren uses to calculate fees for piano lessons. It only does basic arithmetic stuff. Add, subtract, divide, multiply, square root, and percent. Woohoo. Well, it was better than nothing. I put my HP under my chair and put simon on my table. I opened the Technician test and flew through it. I raised my hand and they took my test away to be graded.

After what seemed like an eternity (which was really more like 15 minutes), they called out my number and they came to me with the results. It just so happened that the runner who brought my results already knew of my grand aspirations to take all three tests, so he merely told me I passed and said he would be back with the next test. By this time, there was already another guy at my table taking his test. Sometime before I finished my General test, he finished his Technician test and began the long wait. Another guy also joined us with his Technician test. I finished up and sent my test in to be graded and started to look around. I could see that most of the people who were taking the test passed since the CSCEs (Certificate of Successful Completion of Examination) were getting passed out like candy. Some people were requesting to take the General exam while others were happy to pass Technician and take off. I finally figured out why it took so long to grade the exams. There were six graders, lined up in threes across from each other along a table. The graders on the end each pull from the stack at the end of the table and start grading. To grade the exam, they merely select the correct template and overlay it on the exam, looking to make sure that each hole in the template has a mark on the exam below. Any holes without a mark below get marked and counted as wrong. Then the grader passes it on to the next grader. Like I said before, everything is done in triplicate. This is good because occasionally, somebody makes a mistake and the odds are fairly low that all three will make the same mistake.

My general test came back with a passing score and the runner congratulated me and brought me the Amateur Extra exam. By this time, my heart was beating pretty hard, so I tried to calm down so I could take the test on an even keel. Hands stop shaking. There were several of the questions that I did not know for sure, but by the end of the test, I was pretty sure that I had answered enough of them correct to pass. I only had to get 37 out of the 50 questions correct to pass, and I was confident that I had that. After all, when in college, a 75% was a failing score in my book. Getting a C on a test was devastating. Getting a B was still not good, but sometimes that was as good as I could do. But an A was the only acceptable grade. I raised my hand and sent the test off with the runner. I turned and tried to determine how many tests were on top of mine in the pile to be graded. This might be a while. By this time, the fellow next to me was nearly done with his General exam and the other guy passed his Technician and decided to try the General.

This time, I really did have to wait an eternity to get my test result. But before I did, I had some idea that they were starting my test as I heard, “Who wants to grade an element four?” Element four is the official name for the Amateur Extra exam. Not too long after that, the first grader got my attention by calling out my number and giving me a two thumbs up sign to let me know that I had passed. Woo hoo! I was shocked, relieved, and satisfied. I knew that the two weeks of studying had paid off. The head VE came over and congratulated me personally for taking such a big step. Lots of people congratulated me. Yes, it was a big deal. Element four was no joke. It was a difficult test, but I don’t think it was nearly as difficult for me at age 31 as it would be for me at age 62. Many of the people in the room were older than I am. Some had a very hard time on the Technician test. I can imagine that it only gets harder with age. Especially taking all three. They gave me my CSCE and I went home.

I went home for the long wait. Is my license there yet? Daily, nay, hourly checking on the FCC’s ULS website did not seem to move my license along any faster. The VEs said it would likely be until the following Friday (six whole days!!!) before it would show up on the ULS. And true to their word, my Amateur Extra license was granted on 5 Jun 2009. My originally issued callsign is AE7AV, which is a ‘coveted’ 2×2 callsign, but not exactly what I had in mind. Alpha Echo 7 Alpha Victor or di-dah dit dah-dah-di-di-dit di-dah di-di-di-dah just didn’t fit me quite right. I found that my great-grandpa George Comstock’s callsign, W7CJ, was already taken by my first-cousin-once-removed Terry Comstock of Hillsboro, OR. Hmmm. So I can’t take that one. After much perusing on the VanityHQ website, I found a few that I liked. So shortly after getting my license, I applied for a vanity callsign, which I still have a 3-week wait before I get it. The callsign I am hoping for is NV2M or November Victor Two Mike, or dah-dit di-di-di-dah di-di-dah-dah-dah dah-dah. Now that is something I can live with. I still like NR3V, which is like Vern spelled backwards, but due to issuing regulations, is not available until next year.

Now it is time to get on the air. But I have no radio. Most beginning radios are a couple hundred bucks. Mid-range radios are just under a thousand and high-end are several to many thousands. Eek. Where will I come up with money for this new hobby? Why can’t I have a hobby like Lauren, which makes money?

I finally git it!!

I was so happy to learn that the 2.6.26 kernel had a free as in speech alternative to the madwifi Atheros driver, ath5k. I have not been so happy that it has been crashing my machine periodically. Since diagnosis of a hung machine without a serial console that is running X is nigh on impossible, I had no choice but to fold and go back to madwifi. However, since then, I have moved on to 2.6.27, which has some changes to two wireless APIs, causing the madwifi driver to fail to build. I wanted to leave my desk with its hard-wired connection but didn’t want my machine to hang again. So I determined to forward port the madwifi driver to work with 2.6.27.

Here’s where I showed myself that I am starting to get git. I was able to dig through the commit logs to find the appropriate changes and make applicable changes to the madwifi driver. Fortunately for me, I was able to make all the changes without too much trouble. I don’t know how many times I have “learned” git. I have been to tutorials, read the man pages, and gone over my notes time and time again. I guess that I finally have reached a critical mass of knowledge such that I was not so scared of not being able to do what I wanted to do that I could simply do what I wanted to do. Woohoo. Yes, I admit that while I may not be half as smart as this ugly brain-child of Linus Torvalds, at least I can learn to be its master. Next step: ditch SVN. No really, the next step would be to diagnose the ath5k hang issue and post a patch to LKML. Now that would be truly great. But it is a task for another day.

Stinkin’ blinkin’ flash drive

As one of the free swag items that they handed out at the Linux Plumbers Conference, I received an Intel branded 1GB USB flash drive. Unless you are blind, it would have been impossible to notice the BRIGHT red, green and blue blinking LED that was activated any time the device was plugged in. If I was susceptible to epileptic fits, I am sure it would have caused a seizure. Anyway, not being one to tolerate annoying behavior from electronic devices, I decided to fix it. I popped it open at the seam to find that it came apart very nicely, without breaking anything. Then, I took my fingernail clippers and clipped off the leads to the LED and accompanying resistor and gently removed them from the enclosure. Thank you, Intel, for the flash drive, but next time, please make it less flashy.

The Linux Plumbers Conference

In my five years at IBM I have not gone to a real Linux conference. I admit I am partially to blame. I keep telling myself that I will try harder to work on something cool so I can publish it and go to a conference, but I am not really one of the geeks that must be heard. In other words, I have an opinion, but you will most likely have to ask for it.

The past three days (September 17-19, 2008), I have attended the Linux Plumbers Conference, or LPC. It was held in none other than the beautiful Portland, Oregon, so I was eager to attend. In fact, I registered for the conference as soon as I learned about it with high hopes that IBM would be willing to foot the bill later. And they did! (Thank you, IBM!)

The premise behind this conference was (at least to my knowledge) that the Ottawa Linux Symposium, or OLS, was getting to be too big to discuss some of the matters that Linux needs to deal with. There wasn’t really a good place to discuss some of the plumbing needs of Linux. For those of you not comfortable with the use of plumbing and Linux in the same sentence, here is an excerpt from the LPC website:

[quote=linuxplumbersconf.org]
The Linux Plumbers Conference (LPC) is a developer conference for the open source community. LPC brings together the top developers working on the “plumbing” of Linux – kernel subsystems, core libraries, windowing system, etc. – and gives them three days to work together on core design problems. The conference is divided into several microconferences focusing on different “plumbing” topics, as well as a general track for topics that don’t fit into the microconferences.

LPC is requesting proposals to speak at the LPC microconferences and general track. Microconference topics include:

  • The future of Linux storage
  • Video input infrastructure and V4L2
  • Power management and tools for efficient resource usage
  • Future displays and input devices
  • Dbus for desktop integration
  • Linux server management
  • XCB and graphics
  • Audio
  • Kernel/userspace interfaces
  • Debugging, tuning, tracing, and profiling

[/quote]

Though admittedly, I am not really a contributor in any of these areas right now, there are several of them that interest me. I really enjoyed the microconference format. Each of the microconferences was 2 1/2 hours long and attended by anywhere from 25 to 200 developers. I found that they were most interesting when there was plenty of discussion rather that merely a presentation. I also found that it was usually the people who were sitting within the first 15 rows of chairs that participated the most. Having spent plenty of time reading the Linux Kernel Mailing List, there were hundreds of people whose names were very familiar but that I had not yet put a face to. This conference was very helpful to me in that regard. Meeting these core developers and seeing the human side of them is motivating and empowering. I have the sudden urge to fix a bug and submit a patch.

All you sponsors: IBM, Intel, NetApp, HP, Google, MontaVista, SanDisk; please, please, please pledge your money for next year and the year after that. This was a wonderful conference where I witnessed first hand the power of the open source community working so hard to bring the wonders of Linux to the masses, be it desktop, server or embedded. And we can’t do it without your financial support.

Be your own locksmith

After four and a half years, I finally got around to changing the keys to our house. So all you who have a key to our house and figured you could copy it and sell it on eBay for lots of money, you lose. Yeah, yeah, yeah, I probably should have done this within the first week of moving in, but having never owned a house before, it never occurred to me. Fortunately, nobody has broken in and stolen anything, so it was a free lesson.

Upon closer inspection I found that our house not only has two different lock brands, but at least three different keys. We don’t really know because we never received the keys to the two garage doors. But the rear kitchen door and the front door, though both Schlage locks, had different keys. I decided to re-key all the locks, which includes replacing the two sets of Kwikset locks and the mismatched Schlage lock set. I found three matching Schlage lock sets on eBay and then ordered a Change-A-Lock re-key set. This is the part where I give a raving review of Change-A-Lock. What an easy job. It took me 20 minutes and this was the first time I had ever taken a door lock apart. It’s no wonder how locksmiths can charge $10 per lock and still make money. The very small kit included new keys and matched, color-coded pins, and detailed instructions on how to change the pins on any one of five or six lock types. A job so easy, even a monkey could do it. Now that I mention it, maybe that’s why locksmiths charge $10 per lock, because they don’t want to do what a trained monkey can do.

I talked to our local locksmith about doing the job and he quoted me about $360 for the job. With the lock sets I found on eBay, which were identical to the locksmith’s wares, plus the re-key kit, I am able to do this myself for less than $95. The only bad part about it is that I am forced to wait for everything to get shipped to me. Alas, patience for shipping one of my weak points. I order something today, I think tomorrow would be a good day for it to show up on my doorstep.

Awake the sleeping giant

As I was reading my daily quota of SlashDot a few days ago, I stumbled across a very intriguing sci-fi story called Engineers’s Dreams by George Dyson. The fact that he could not get it published in any science journals because it is fiction and that he could not get it published in any fiction venues because it was too technical just makes me laugh. In fact that is half the reason I was intrigued enough to read it. That and it is a story about Google.

If you have an inner geek in you, go ahead and read it. You know it is more than mere fiction.