Fruddled Gruntbugglies

Enthralling readers since 2005

Author: lpaulriddle

  • Garage Door Opener

    Well… first off, I’m back from my most excellent trip to Philly to watch first and second round action from the NCAA Men’s Basketball tournament. This year’s games were great, and it’s always nice to get away from the grind for a few days. It always butts up against UMBC’s Spring Break, so I get a couple extra days off afterwards to boot. And, this year I have tickets for third and fourth-round games in DC, with the overall winner going to the Final Four. That’s coming up this weekend. Oh, and it’s t-minus 9 days and counting until the official due date for our second rugrat. My pulse quickens as I type (in spite of the beta blockers).

    Anyhow, this evening our garage door opener decided to go on the fritz. We were all sitting around in the dining room twiddling our thumbs, when the garage door decided to open all by itself! Always fun. I went and checked it out. The remote receiver module is a separate unit, and as I fiddled with it, the opener tripped a few times. I could hear a relay clicking somewhere each time it tripped. Shrugged my shoulders, went back inside, closed the garage door. Halfway through closing, it stopped. Tried again, it closed this time. An hour or so later, it opened itself again, and stopped midway. Seems that it’s become sensitive to vibration or something. I unscrewed the receiver from the unit and pulled it off. It’s a nice, cheapo, made-in-China piece of garbage just like everything else these days. With the receiver off, so far, it hasn’t acted up. So I’m tempted to blame the receiver. First, though, I’ll try reattaching it and changing the code, just to see what happens. If my suspicions are confirmed, and the receiver is bad, I’ll look into getting some keyfobs for our alarm system, and programming them to work the opener.

    Nice that it decided to do this while we were home and around, rather than away with the alarm set, etc..

  • Linux and IDE drives

    I stuck a scavenged 120-gig IDE hard drive in my desktop Linux box at work. For now, it’ll house my MP3 collection, which is rapidly outgrowing the 35-gig partition it had been living on. My eventual plan is to get a couple of large (say, 300 to 350 gig), identical drives, keep one at work and one at home, and use them to house all of my MP3s, digital photos, etc. as well as backups of all my machines. I’d keep the disks synchronized with unison or something similar, and then I’d have my data replicated in two locations. But as usual, I digress.

    As I was copying my MP3s over to the new drive, I got a few happy-fun-ball I/O errors in my kernel log:

    Mar 14 13:36:00 sonata kernel: hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=7374122, sector=7084952
    Mar 14 13:36:02 sonata kernel: hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
    Mar 14 13:36:02 sonata kernel: hda: dma_intr: error=0x01 { AddrMarkNotFound }, LBAsect=7374122, sector=7084952 Mar 14 13:36:04 sonata kernel: hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }

    Repeated 20 or 30 times.

    Odd thing is, the errors were on my main disk (hda), not the scavenged disk (hdb). The main drive has never had a single issue before. That makes me think “kernel issue” more so than “bad disk” (running 2.4.31). I googled around a bit, and found some (admittedly a bit dated) advice to turn off the CONFIG_IDEPCI_SHARE_IRQ and CONFIG_IDEDMA_PCI_AUTO flags. Tried this, but it made the machine really sluggish whenever there was disk I/O, and all of a sudden I started having problems ripping CDs. So I turned CONFIG_IDEDMA_PCI_AUTO back on, which sped things back up made ripping work again. So now, I guess I need to keep an eye out for I/O errors again. When I was getting them, I was copying 20+ gigs of data from the master IDE drive to the slave IDE drive. Ever since I stopped doing that, I’ve had no problems on either drive. We’ll see I guess..

  • Two-Speed pool pump motor: Worth it?

    With electricity prices set to skyrocket in the Baltimore area this summer, I’m once again looking at ways to cut down on our consumption. And in the summer, one of our biggest consumers is the pool pump. I’ve read that a two-speed pool pump motor can cut down quite a bit on energy usage. A standard swimming pool pump runs at 3450 RPM. A two-speed pump can also run at half speed, or 1725 RPM. The interesting thing is, although it’s running at 50% of normal speed, a typical model draws less than half (about 30%) of the current that it would draw running at full speed. So in theory, you could run the pump at half speed for twice the length of a normal-speed run cycle, do the same amount of work, and use less power. Now, this might be wrong. I’m not well-versed enough in fluid dynamics to say whether, for instance, 10 hours at 1725 RPM would turn over the same amount of water as 5 hours at 3450 RPM. But, for the sake of argument, let’s assume it would. Running at low speed would certainly consume less power, and longer pump run cycles are good for the pool water because they keep it from stagnating (I’ve also heard anecdotal reports that sand filters “work better” with lower flow rates — take that for what it’s worth). Of course, that’s only one side of the story. There are also some caveats..

    1. I can’t run the pump on low speed 100% of the time. I have a pressure-side pool cleaner (Polaris) with a booster pump, and I’d need to run at full speed while the cleaner was on (3 hours a day, 3 days a week or so). And, I’ll want to run on full speed for 3 hours or so after adding chemicals, to get them distributed as quickly as possible. Any time the pump is on high speed, it cuts into my potential savings.
    2. The pump motors I’ve looked at all consume somewhat more current (1 amp or so on models I’ve looked at) on high speed, than equivalent single-speed motors. Not quite sure why this is, but it seems to be a fact of life.
    3. Initial cost for a two-speed setup is high, even assuming I’m only replacing the motor and not the entire pump. The pump would need special wiring, and a new timer/control to control high vs low speed operation. Plus, I’d need a new shaft seal. I’m probably looking somewhere in the $350-$400 range when all is said and done.

    A couple years back I made a spreadsheet to estimate potential savings using a two-speed pump, and concluded that the payback period was too long to justify the initial effort and expense, given what I was paying for electricity at the time. However, with the pending rate hike, it’s probably worthwhile to crunch those numbers again..

  • Web Proxy channels and cw_person parameter

    CWebProxy provides a channel parameter called cw_person, which is a comma-separated list of person attributes. If this parameter is set, CWebProxy is supposed to fetch the listed attributes and pass them to the back-end web application as CGI parameters. This is a potentially handy feature, because then we can develop “smart” unauthenticated apps which present content tailored to individual users. For example, in our case we’d like to develop a “campus links” channel, which presents different sets of links to different users based on their LDAP affiliations. In theory, with cw_person, that should be easy to do.

    Well, I tried this out, and as usual, what sounds great in theory isn’t always great in practice. There are two issues with this feature:

    1. If a user has multiple values for a given attribute, CWebProxy only passes one of them (presumably the first one returned by the LDAP query). Example: I set up a test channel with cw_person set to pass the LDAP affiliation attribute. My LDAP affiliations are “staff”, “employee”, and “alumni”, but CWebProxy only passes “staff”.
    2. When the channel is refreshed (e.g. by switching to a different tab and then going back), it seems to stop passing the attribute. Not sure if this is user error, or if that’s just how it works. But if this is going to be any use to us, it needs to pass the attributes every time the channel is rendered.

    These two problems will probably prevent us from using this feature to do what we want. Yeah, we can probably hack CWebProxy to make this work, but I think a better solution would be to write up a custom local connection context. That will give me complete control over what gets passed to the back-end app (and when), with the added benefit that we can use it with a CGenericXSLT type channel and aren’t limited to using a web proxy.

    Incidentally, for anyone trying to set up a channel with cw_person, there’s one big “gotcha”. There is an additional channel parameter called cw_personAllow. This parameter is a list of attributes that the channel is allowed to pass to the back-end app. The default is to disallow every attribute. So if you’re like most people, you’ll set up cw_person, ignore cw_personAllow, and then wonder why it doesn’t work. To get it to pass your attributes, you can either set cw_personAllow to ‘*’ (meaning “pass any attribute”), or specify an explicit list. This can be done in the channel definition, but there’s also a global default in portal.properties called org.jasig.portal.channels.webproxy.CWebProxy.person_allow. Yes, this is all in the CWebProxy documentation, but you have to dig for it. A tutorial would probably help.

  • Tractor deck…

    I put the deck back on the tractor yesterday, and I’ve got the skinned knuckles to prove it.

    Every fall, I take the deck off the tractor. The sole purpose of this is so I can take the blades off to sharpen them. Now, it’s really, really easy to take the deck off the tractor, and it’s really, really hard to put it back on. But, because I take it off at the end of the mowing season, I can wait 4 months to put it back on. Of course, the 4 months go by quickly, and before I know it, I’m out putting the deck on, skinning my knuckles, and cursing up a storm.

    My tractor was a freebie that came with the house. I really can’t complain too much about it, because it runs pretty well. It’s a “Powr Kraft”, which is the Montgomery Ward house brand, which should give you an idea of its age. Of course, like every other house brand, it’s built by MTD. My theory is that MTD tractors are made by guys who hate tractor mechanics. There are about 15,000 little lifter arms and cotter pins that attach the deck to the tractor. To put the deck on, you first have to slide it underneath the tractor. Well, while you’re doing this, you have to keep moving the little lifter arms out of the way, because they are always catching on the pulleys, belt, etc. Then, you have to perfectly align the deck with the tractor, and slide this metal rod through both of them. But, it’s hard to do this because the belt is in the way. Etc. etc. etc.

    This year, I tried jacking the tractor up, and it did make it easier to slide the deck underneath. But, I couldn’t set the tractor back down on the deck, because the 15,000 little lifter arms kept getting wedged on stuff. Net result: Jacking the tractor doesn’t make it any easier.

    One of the reasons I keep putting myself through this, is that I only have to do it once a year. After a year, I tend to forget what a pain it is. Remember the old adage, “Time heals all wounds?”

    If I could figure out how to remove the blades with the deck still on the tractor, I wouldn’t have to do this any more. Problem is, I’d have to get underneath the tractor with my impact wrench somehow. That would mean raising the tractor about 2 feet off the ground. Then I’d have to replace the blades from underneath too. Somehow, that sounds like just as much of a pain as removing/replacing the deck. But, it’s worth trying once, if I can figure out how to do it. Maybe this will be the year..

  • Plumbing project finally completed

    Well, I wasn’t sure I’d ever see this day, but the basement plumbing project is finally finished. It went smoothly and pretty much according to plan. No more leaky fitting in the basement, and I now have a working frost free sillcock outside by the pool equipment. I started at 8:30am on Friday, and finished up at around 1:30pm, with lunch and a couple of breaks in between. Lessons learned along the way:

    1. I had originally suspected that our house shutoff didn’t fully shut the water off, but it looks like it does after all. It just takes a long time to drain the house plumbing. When I first cut the pipes apart, I had a persistent drizzle coming out of the cut pipe. At the time, I had opened every faucet in the house except for the bar sink. When I opened the bar sink faucet, the drizzle stopped and I was able to sweat the pipe without using any bread.
    2. I tried to solder one of the joints while there was still some standing water in the pipe near the joint. It took a loooong time before the pipe got hot enough to melt the solder. In the process, the heat from the torch boiled the water off. Despite my worries, I still ended up with a leak-free joint. Next time though, I’ll make sure the joint is a dry as possible before soldering. Barring that, make sure there’s an opening somewhere for the steam to escape.
    3. Don’t hold the torch directly below the joint, or solder will drip into it and foul up the torch tip. Fortunately, they’re cheap..

    This was the biggest project I’ve ever done involving copper sweating. I’ve found that as long as the joints are fully cleaned and fluxed, it’s pretty hard not to end up with a leak-free joint.

    Really glad to finish that one up!

  • Draft Schedule of Classes

    Just a quick note on the UMBC web schedule of classes thing…

    There’s a “draft” version of the schedule of classes, that the registrar occasionally likes to populate. The URL of this version is http://www.umbc.edu/aboutumbc/newschedule. Access to this page is controlled by a simple .htaccess file. There’s a single username and password that the registrar disseminates to all interested parties.

    All of the updates to this schedule happen behind the scenes. There’s a parallel job on the HP3000 that handles this version of the schedule. The web version is built from the same verter.pl script that handles the regular version. The only real maintenance involved with this is occasionally changing the password at the request of the registrar. The password file is located at

    /afs/umbc.edu/admin/www/umbc/htdocs/aboutumbc/newschedule/.htaccess

    The registrar will typically request that the password be changed right before they start mucking with the draft schedule. They asked me to do it today for the fall 2006 schedule.

    Once they’re done with the draft schedule, they may request that access to it be disabled. I do this (again) by changing the password.

    You may ask, why not use a webauth-enabled .htaccess file? Well, that would be more maintenance, because then we’d have to maintain a list of users who have access to the page. They way it is now, all I ever have to do with the thing is change one password. It works.

  • Plumbing!

    Friday’s the big day.

    Friday is the day I’ve set aside to finish the never-ending basement plumbing project(tm). My goal is to finish this before the baby comes, and before the yard/pool work starts. The trick is picking the day to do it. Ideally I need a day when I can have the house to myself for several hours starting at around 8-8:30am. The job really shouldn’t take too long, but with plumbing projects, you always have to allow for unexpected complications. Anyhow, most Fridays fit the bill, so I just had to pick a Friday, take off work, and go for it.

    With these types of projects, it’s always good to have a plan, so here’s the plan.

    Before Friday:

    1. Order and receive remaining supplies necessary to complete project (expecting these today).
    2. Clear space in boiler room for access to pipes.
    3. Make sure we’ve got some bread on hand that I can use when sweating pipes.
    4. Disassemble a 3/4″ stop & waste valve for sweating.
    5. Check side-by-side play in branches to make sure I won’t have any problems getting couplings on them.

    On Friday: For phase 1, disassemble the old pipes and sweat a new stop & waste valve onto the 3/4″ supply line. This will give me a positive shutoff for the branch (the main shutoff is a gate valve which doesn’t seem to shut the water off 100%)

    1. Take shower and fill up drinking water pitcher, water bottles etc.
    2. Shut water off. Open faucets (including outside sillcock) to drain plumbing.
    3. Disassemble the old branch starting with the compression fittings and working back to the 3/4″ supply in the boiler room. Have buckets and rags handy to catch drips and plug pipes.
    4. Put new 3/4″ supply line in place. Clean and flux new supply line and disassembled valve.
    5. Stuff bread in existing supply line. Clean and flux. Put joint together and sweat.
    6. Reassemble stop & waste valve. Make sure valve is shut OFF. Turn water on at main. Check for leaks.
    7. Turn valve on to eject bread (can I do this without a helper? Not sure..)

    For phase 2… hook up the rest of the branch, with the main turned on and the branch shut off via the new valve.

    1. Trim, deburr and dry-fit the new branch together.
    2. Open all faucets on the branch to allow steam to escape.
    3. Clean, flux and fit the “tee” fitting, and two of the three branches. Wrap wet rags around existing soldered joints. Sweat together and allow to cool.
    4. Clean, flux and sweat the remaining branch. Allow to cool.
    5. Remove aerators from all fixtures on branch. Shut all faucets off.
    6. Turn branch on and check for leaks.
    7. Turn each faucet on in succession and run till water comes out clean.

    That’s about it. Wish me luck!

  • 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.