Onion Grass: The Harbinger of Mowing Season

Welp, the onion grass has started coming up in my front yard. That means that it won’t be too long before I have to mow.

I’ve learned after a few years on my property that onion grass pops up in late winter/early spring, mostly goes away during prime growing season, then pops up again in the fall just before everything goes dormant. So it serves as sort of a bookend for the growing season. This year it seems a little early, I guess because the winter has been mild. We’ll see if the lawn follows suit.

Every year I tell myself I’m going to remember the first (and last) day I mow the lawn. And of course, I never write it down, so I never remember. I do know it’s always after my annual March Madness trip (which for me, is kind of an “enjoy the last week of winter and its associated lack of yard work” trip). This year, I’ll record the dates here for posterity.

I guess this means I’ve only got a month or so to put the deck back on the tractor. I’ve put that thankless chore on the list for this weekend.

Speaking of the March Madness trip, ESPN Bracketology has us seeing two #1 seeds again, for the second year in a row. This really sucks… (Why does it suck? Because we like to see competitive games, not #1s blowing out #16s.)

$#%!!? FAR

It’s Faculty Annual Report (FAR) season again.

Last year, FAR season was not fun. The FAR mysteriously “lost” a bunch of faculty reports (my theory was that it never saved them in the first place, but I digress), and many unfun hijinks ensued.

The author of FAR still works here, but he’s been sucked into the Peoplesoft black hole (don’t get me started), so yours truly ended up with the bulk of the FAR hassle last year. This year, yours truly is going to be out for most of FAR season with a newborn, and to put it mildly, that doesn’t break my heart. But that’s not the real point of this entry… Really, I just wanted to document a coupla things for future reference.

The FAR app displays 3 different due dates to users, and these dates change every year. The past 2 years, I’ve had the fun of updating the due dates, and each time it’s taken a bit of searching around to figure out where the dates are stored. Long story short:

The due dates live at [server-root]/etc/far/due_date.txt. This file can be human-edited, but there’s also a module within FAR that allows certain users to edit these dates via the web. To get this ability, your username has to be present in the table FAR.FAR_AUTH. Then, in the FAR app under the “Report Options” dropdown, you will see an option titled “FAR Due Dates”. Select this, and you can edit the due dates from there.

Also, it seems like every year, UMBC adds more academic departments, so it’s fairly common to get requests to add these departments to FAR. FAR maintains its own lists of departments (should it really do this? Probably not. Will it ever get fixed? Probably not). To add one, just add it to the table FAR.FAR_DEPARTMENTS.

That’s all for now.

Gripe du Jour: Palm eReader

I think I’ve figured out why eBooks are not more popular.

I’ve recently warmed up to the concept of reading books on my PDA. It’s actually a much more pleasant experience than I expected. The PDA came with a free eBook reader, and the books I’m reading are in the public domain, so my total outlay on this new hobby so far has been zilch. So, why am I complaining? Well, I refer to a dictionary fairly frequently when reading books. Currently, I use a printed dictionary even with my eBooks. It would be really cool, though, if I could just tap on a word, and see the definition. To do this I’d need an electronic dictionary on the PDA, and support for it in the software. Well, I can get this, but it’s not free. For $9.95, I can get the “full” version of the eBook reader, which includes a dictionary with software support. That’s a fair enough price for the dictionary and the functionality. I have no problem paying that. So, again, why am I complaining? The dictionary bundled with the $9.95 package is Merriam-Webster’s “Pocket” Dictionary, which has only 40,000 words. That means that most of the obscure words which I want to look up, probably aren’t going to be there. If I want a “real” dictionary comparable to my dead-tree version, I need to get the Merriam-Webster “Collegiate” Dictionary, which eReader.com is selling for $23. Now, what’s the problem here? Amazon.com sells the dead-tree version (Hardcover, no less) of this exact same dictionary for only $15!!!

So, let’s get this straight… The electronic version of this dictionary costs essentially nothing to reproduce and distribute, yet eReader.com is charging 50% more for it than the dead-tree, hardcover, much-more-expensive-to-produce version of the exact same dictionary. If I want the electronic lookup, I have to shell out $9.95 for the “full” eReader software, plus $23 more for the wildly-overpriced electronic dictionary, for a total of $32.95. For that price, I’ll stick with the dictionary I already have, thanks.

eReader.com isn’t the only bad guy here — I checked several other online sources for eBook-friendly dictionaries, and the prices were all similarly inflated.

There’s a lesson for the eBook vendors here — you need to price your products competitively (read “cheaper than the equivalent dead-tree copy of the book”), or people aren’t going to buy them. Let’s hope they figure this out soon, because it truly is a great format with lots of potential.

Demystifying your U of M Paycheck

Until recently, there’s been something I’ve always wondered about the paycheck I get from UMBC. We’re paid biweekly, which translates to 26 paychecks per year. Now, the University gives me a certain dollar amount as my annual salary. But if I add up the gross pay from each of those 26 paychecks, it always comes out to slightly less than what the University claims is my annual salary. Being the paranoid type, I always assumed the University was short-changing me. Happily, I was wrong. The figure the University gives me is for 365 days (or 366 days in a leap year). My paychecks cover 26 14-day pay periods, or 364 days. So, in most years, I’m receiving paychecks that cover only 364 days. To get my actual annual salary, I need to take the sum total of all my paychecks, divide by 364 to get the per-day pay rate, and multiply the result by 365 (or 366 in a leap year) to get my salary for a full 365 (or 366) day year. When I do this, the result always matches the annual salary reported by the University.

So what happens to the remaining 1 or 2 days worth of pay? It gets rolled into the following year’s pay, and every so often, we end up with a year where we get an extra paycheck (for a total of 27 paychecks). To an unwashed employee like me, this seems like a confusing way to do accounting, but it does all add up in the end.

While I’m on the topic, I should plug what is probably the most useful site on the State of Maryland’s website (at least for state employees): The Central Payroll Buerau Net Pay Calculator. You basically enter your gross biweekly pay, all pre-tax deductions, and number of exemptions from your W-4, and it tells you what your net pay will be. Very, very handy when you get a raise, or your pre-tax deductions are changing, and you want to see what effect it will have on your net pay.

Student IDs, and making the portal work for users who don’t have them

First: The facts of life.

  1. UMBC has the concept of a “student ID number.” This number is used in SIS as the primary key for almost every table. All students have these IDs, as do faculty members who teach courses, etc.
  2. uPortal itself does not use or require this number to do its work.
  3. The legacy myUMBC portal uses this number to do its internal session management. Also, we need to know this number to look up any SIS data on behalf of the user.
  4. uPortal proxies to the legacy portal to do most of its “real work” involving SIS functionality.
  5. When a user logs into either portal, they provide only a username and password. We need to be able to take that username and map it to a student ID. To do this, we query our campus LDAP directory.
  6. Not all users have student ID attributes in LDAP, for various reasons. In particular, if the help desk manually enters someone into the directory, they sometimes leave out the ID.
  7. These users have problems accessing the portal.

Now, in the old portal, we handled these cases by prompting the user to manually enter the student ID and a 4-digit PIN (don’t go there). In uPortal, we don’t have this logic. So, it just breaks. In fact, it breaks in such a way that “bad” HTML is generated, so the channels in question don’t render at all.

Well, the rendering issue is fixed now, but it was tricker than I thought it would be. It wasn’t just a matter of tidying the HTML in the legacy Perl code. The problem was actually happening in my local connection context code. Basically in these cases, the connection context can’t generate a valid legacy portal session at all. And when that happened, it was crapping out before it added a couple of necessary URI parameters to the web proxy URL. Long story short, it was trying to bring up a legacy portal login screen, complete with navigation, decoration, and lotsa sloppy HTML to boot, and uPortal of course was refusing to render it.

Fortunately it appears that the solution to this is going to be human-engineered, meaning I will just display some appropriate wording that tells the user how to remedy the problem. So, I shouldn’t need to do anything fancier than what I’ve already done.

As an aside, I’m still working on the best way to fix these HTML-tidy issues with the web proxy channels. First trick I try, is masquerading as the user with the problem, finding the bad channel, and examining it outside the portal by passing the same arguments to the legacy myUMBC web app. Then I can view the document source, paste it into emacs, and look for problems. Once I think I have it fixed, I save it as static HTML and point another web proxy channel at it, to see if it’ll render. That usually works. Sometimes I need a Java stack trace, which can be problematic because “ordinary” users don’t have the ability to display stack traces within channels (there might be something in portal.log, but it’s often hard to sift through this and correlate log entries with individual problems). In these cases, I hack the code to force the error condition to occur with my own account. Then I can see the stack trace, find out the nature of the evil, and fix it. Yeah, it’s klunky, but it gets the job done.

Digitizing our music library

Over the past year or so I’ve been slowly converting all of our CDs to MP3 format and putting them on the computer. Various things are motivating this project:

  • Convenient access to music at work, where I listen to the most music, and on my Palm, which I take to the gym and use as a poor man’s iPod.
  • Organizing our music collection and freeing up space. Our CDs are currently strewn all over the house, some of them sorted in racks, some of them unsorted in racks, others just lying around loose, etc. With the music all on the computer, the CDs could be boxed up and put away, where they’d take up less room and wouldn’t get lost.
  • Giving new life to our old shelf stereo system, where the 5-disc CD changer is slowly dying. It has an aux input where we could plug in a digital music source.

There are a few challenges with setting up a digital music library. The first is disk space. I’ll be addressing that by buying a 250 or 300 gig hard drive, which should easily hold everything. Then the digital music must be organized, made available, and distributed to the various places where we will listen to it. Currently, I organize my MP3s loosely by category (classical, pop/rock/jazz, childrens, soundtracks, etc) and then alphabetically by album or song title within those categories. Distributing the music is the biggest challenge. With the music on a Linux server, there are a lot of ways I can make it available: SMB, NFS, HTTP, you name it. Apparently I can even set up an iTunes compatible server, which could be very useful. Of course, the music can also be played directly through the computer’s sound card, or burned onto ISO9660 CDROMs. But the real question is, how do we get this music from the server, to the living room stereo, the kids’ rooms, the kitchen, etc., in a way that is user-friendly and doesn’t cost megabucks? That is a great question, one that I’ve been pondering off-and-on, and is sure to be the subject of a future entry..

Life with a tempermental snowblower

Well, we finally got some real snow here on the east coast, so that meant some rare action for the snowblower. This is our fourth winter with the snowblower, and it’s getting more and more tempermental with each passing year. It’s getting harder and harder to start, and it’s developed this habit of quitting on me before I finish clearing the whole driveway. It will always start back up, but then I have to kind of nurse it along the rest of the way. Now, this is one of those problems that tends to get forgotten, because I eventually do get the driveway cleared with it, and then it gets put away, then spring comes, and it sits all summer, and then it has the same problem the next winter. It’s just the way things go with equipment that doesn’t get used much.

Anyhow, I decided things would be different this winter, and I would make at least a halfhearted attempt to identify and fix the problem. So, after the usual routine of: Clear 90% of the driveway, restart snowblower after it quits, nurse snowblower through remaining 10% of driveway, I set to work. The best thing to do with engine problems is to apply the scientific method, ruling out as many things as possible, until you find the problem. So here goes:

Fuel cap venting issue: This was the first thing I suspected. Sometimes I can get it to start, or keep it from stalling, by loosening the fuel cap. If the fuel cap doesn’t vent properly, it can cause a vacuum that prevents fuel from getting to the carburetor. I haven’t totally ruled this out yet, but there doesn’t appear to be anything wrong with the fuel cap. I’ve read that they vent through the threads, and there’s a plastic standoff in the cap that keeps it from sealing tightly against the lip. This all appears to be intact and functioning properly.
Carb out of adjustment: The engine has always run a little lean, requiring me to partially choke it sometimes to keep it from missing. So I figured, maybe I need to tweak the fuel mixture. Well, it turns out I have a bogus low-emissions carb, with non-adjustable jets. So much for that idea.
Main jet gummed up: I drained the float bowl, unscrewed the main jet/emulsion tube, and blasted it with carb cleaner. It did look like there was a little bit of gunk in there. I should probably do this every spring. But unfortunately, this didn’t solve the problem.
Out of gas: Seems obvious, but there appeared to be plenty of gas still in the tank. However, I topped the tank back up, and it seemed to run OK again (well, “OK” with this engine is a very relative term). Apparently the fuel pickup tube (or whatever mechanism it uses) doesn’t go all the way to the bottom of the tank.

I think the next step is to examine the fuel tank, fuel line etc. to see if there is anything that could keep fuel from reaching the carb properly. I’ll do that at the end of this season. Once I’ve ruled that out, if I still have problems next season, I’ll break down and overhaul the carb. Eventually, I’ll get to the bottom of this.

VNC over ssh

Just for laughs today, I decided to try setting up an SSH tunnel to connect to my home VNC desktop from work. To my surprise, it was as simple as:

ssh homedsl -L 5901:localhost:5901
vncviewer localhost:5901

To my even bigger surprise, it works pretty well. The performance is good enough that I can do “real work” on the remote desktop. I even started up a MAME game, and it was playable. Much better than I expected, given that my connection at home is a DSL line with a slow uplink.

Looks like another useful tool..

Upgrading the security system

Four years ago, I installed a full-perimeter hardwired security system in our house. This probably ranks as the single largest DIY project I’ve ever undertaken. All told, it took me about four months, working alone, and splitting the time with my day job as well as household chores and other projects. Would I do it again? Actually, now that I have kids, I’m not even sure if I could do it again. It ate up almost all my spare time even without kids. I think my wife was about ready to divorce me. But, in the end, we have a great, professional grade, monitored system, and I have full control over it to make changes, upgrades, etc., which brings us to the actual topic of this entry. I’d like to add a few zones (for a very basic intro to alarm system terminology, see this FAQ) to the system, but I’m running out of expansion room. Because of the layout of our house, I laid the system out in sort of a star topology; the panel is near one end of the house, and I have a “zone expander” installed near the other end. Each zone is terminated at either the panel or the zone expander, depending on which is closest. The zones I’d like to add are near the zone expander, but the expander (which provides 8 zones) is full. Matter of fact, it’s overloaded — in a couple spots, I’m doubling up devices which really should be on separate zones, becuase of the lack of space. Not only that, I’m up against the maximum auxiliary power load that my panel supports. If I add any more powered devices (motion detectors, glass break detectors, sirens, etc.), the panel will be overloaded in that department too.

So, before I do anything, I’m going to need to upgrade the system to allow for the additional zones and power draw. Here’s the current plan:

  1. Install an additional zone expander and mount it near the current one, to provide 8 additional zones.
  2. Install an auxiliary power supply and battery to handle additional powered devices.

I’m hoping I can fit all of this gear into a single metal enclosure. If necessary, I can move the existing zone expander, which will requre splicing several wires, but shouldn’t be the end of the world. The shopping list then becomes: metal enclosure, zone expander, power supply, battery, and extra wire, for a total price tag of around $250. Of course, these days, the real cost includes finding time to do this, as there are a lot more demands for my spare time these days. I’m thinking this project probably won’t get off the ground until close to the end of 2006. But we’ll see.

3-month Palm Review

I’ve had my Palm Tungsten E2 for about 3 months now. The verdict so far: I’m getting my money’s worth. I’m using it more, and in more ways, than I did my old Palm m105 a few years back.

First though, let’s dispense with the bad stuff. The only thing I’m disappointed with is the overall fit-and-finish of the unit. Specifically, mine has something that rattles around inside it every time it gets jarred, turned upside down, etc. It’s extremely annoying. But, it doesn’t seem to affect how it works, so I’m just putting up with it. Once my warranty expires, I’ll pop the case open and see what’s going on in there. Also, I’d like to have rubber covers to protect the headphone jack and the SD card slot. As it is, they sit there wide open, waiting to collect dust and debris.

With that out of the way, here’s what I’m doing with the thing:

  • PIM. The PIM stuff (particularly calendar and tasks) is improved somewhat from older versions of PalmOS, and it’s very useful when combined with good sync software. This is what I bought a PDA for, and so far I’m happy with it.
  • Games. Great for chewing up time. There are a lot of good freeware games out there, but finding them amongst the lemons can be a challenge. Some of my favorites are: FreeJongg, Vexed, and StaBu362 (an Othello/Reversi game).
  • Music. With an SD card, a pair of headphones, and the bundled RealPlayer app, the Palm turns into sort of a poor man’s iPod. It works pretty well. RealPlayer leaves a bit to be desired (it’s very bare-bones and the interface is a bit klunky) but it’s certainly usable. There are supposedly some other MP3 players available, but I haven’t tried any of them yet.
  • Books. This one was a bit of a surprise. At first I thought the Palm would be a horrible platform for reading books. Anyhow, I stumbled across the University of Virginia Etext Center, which has hundreds of classics available in Ebook form for free, so I downloaded “A Tale of Two Cities” and tried it out with the bundled eReader software. I actually like reading books in this format. I can search for specific text, and read in total darkness, neither of which I can do with a paper book. And apparently if I buy an electronic dictionary, I can also tap on words to get definitions. I’m sure not everyone is going to like this format, but I’ve become a fan of it.
  • Photos. The color display does a pretty good job of displaying photos, so I can keep updated pics of the family handy.

The Tungsten E2 is reasonably priced for all this functionality you get, but you do have to factor in the cost of add-on accessories and software. I’ve purchased several things that I would consider essential to getting the full value out of the Palm:

  • Missing Sync for PalmOS ($40). Absolutely essential for synching with a Mac. Really should be bundled with the Palm. Palm should consider offering this to Mac users in lieu of Palm Desktop.
  • 1gb SD card ($99). Required if you want to play MP3s. Great for storing data like music, photos, ebooks, etc. and for transferring files to and from other computers. Shell out the extra money and get the fastest card you can find; it’s worth it.
  • Softick Card Export II ($15). Makes the SD card show up as a USB mass storage device, so I can mount it anywhere and use it like a USB key drive. This is great for getting files and applications on and off the device. It’s another app that really should be bundled with the Palm.
  • Cheap pair of headphones to listen to music at the gym ($15). Nuff said.

All in all… the Palm has been worth the money so far. We’ll see how it goes.