Quiet, Busy, the House…

Some of what we’ve been up to for the last four months or so…

Been awfully quiet here in the past few months, with my last active posting going on in February. That was when we started the painting project for the bedroom, which we did eventually mostly almost finish. Our original intent was to move onto the parlor and office, which are connected through pocket doors that are nearly always open.

We didn’t do that. Instead, we decided that we couldn’t take the various stains on the light blue-gray carpet that covered half the house. (Two years ago we got rid of the other half, by putting in hardwood floors, which we are still in love with.) Time for new carpet.

Rochelle and David had already spent months finding just the right pattern and color, so when Rochelle’s twice-yearly ESPP kicked out a chunk of change, we decided to go for it. This involved moving everything out of three rooms (including, once again, the bedroom) for a day. And because of the noise and the strangers in the house during the installation, the cats liked this less than the painting. Let’s just say that Billie didn’t stop at puking this time.

But the carpet was fast, in no small measure because we weren’t the ones installing it. We were moving furniture back into all three rooms by the end of the day. We got a lot of the big stuff, but three months later, we still haven’t moved everything back to where it should go.

This is because we’ve decided not to move anything until we’ve decided where it really belongs. Which means we’re throwing out crap, giving away crap, selling off crap, taking crap down to the basement, etc.

To go with the lovely new carpet, we also bought all new furniture for the office. It’s all from IKEA, so it was reasonably cheap. Two bookcases, a three-level horizontal filing cabinet, and two huuuuge new desks for probably less than a grand, and the office is far more usable. And if we ever actually paint the office, it’s going to look really fabulous, too. Which will be good for me, since it looks like I will continue to be self-employed (gainfully, really) for a while. It’s almost to the point to where I could have clients visit!

In the last few weekends, we’ve moved a bunch of stuff to the basement, taken a bunch of stuff from the basement and either thrown it out or taken it to Goodwill, and generally spent a good 30+ hours working on house organization. It’s starting to feel good!

We also had a friend, who is a professional contractor, come and paint, stain, and varnish our brand new back door, which is really beautiful, with small glass panels framed in wood, and lets far more light into the house. The new door framing and brand new weather stripping mean it seals far better than the old door; in spite of being glass, the kitchen is actually 10 degrees warmer than it was before. This is going to be great this coming Winter.

Anyway, all of this is to catch up, and explain a little bit about why no posting. We’ve been really, really busy!

Semi-Back Online

About five minutes after I posted that UPS was going to deliver my new DSL equipment, the doorbell rang. Three minutes later I had the box open on the floor in the office. 15 minutes later I the DSL filters installed on all three phone lines in the house, and the DSL cable plugged in. Five minutes after that, I was online on the new DSL connection. And locked out of this weblog.

About five minutes after I posted that UPS was going to deliver my new DSL equipment, the doorbell rang. Three minutes later I had the box open on the floor in the office. 15 minutes later I the DSL filters installed on all three phone lines in the house, and the DSL cable plugged in. Five minutes after that, I had Rochelle and I online on the new DSL connection.

And locked out of our e-mail, and this weblog.

This is because I didn’t move our server right away, and it regarded our attempts to access our mail and the weblog database as external attacks by crackers, which was almost true, given that we were now connecting from “outside” the server’s network, instead of being network “roommates.” I got e-mail working again quickly by converting the e-mail clients to a better authentication scheme, but there was no way for me to safely post to this blog while my systems were on two different networks.

Last night I finally finished reconfiguring the server and the firewall DMZ for the new network, and moved the server (which actually only involved connecting the server’s Ethernet cable to a different jack 3″ away from the old one). So, now I can post.

Of course, the DNS changes are still percolating through the internet, and for the moment you are effectively blocked from sending me e-mail, or viewing this blog. Hopefully that’ll be fixed in another day or so.

Oh, yeah, the new DSLspeed is heaven compared to the old connection. Almost as big a difference as when I upgraded from a modem to DSL in the first place. Woohoo!

DHI 115-121

Daily Home Improvements: HTML work, cable babysitting, redesign work, The World as a Blog, saving junk, RSS work, and some purging of crap.

DHI 115: Continued my obsessive tweaking of this site’s HTML template until I finally got it to (once again) validate as correct HTML. We’ll see how long that lasts…

DHI 116: Stayed home to wait for The Cable Guy to fix our cable. Two days in a row.

DHI 117: Began some major work on this weblog’s design, with the intention of moving it to XHTML + CSS. This is going to be some effort, so you may see the results in chunks as I roll them out.

DHI 118: Added Geo Tags to this blog. Now, before you sneeeeef at how nerdy this is, you should check out the geoblog, where you can see the world wake up and blog, in real-time. Very groovy. Uh, to us nerds…

DHI 119: Moved some empty (future eBay shipping) boxes down to the basement, and generally cleared the crap from a small area of the massive pile of crap in my office.

DHI 120: Added channel-specific RSS feeds for this site. This involved fixing a defect in the software that I use to run this blog, which was preventing the easy changes from working.

DHI 121: Emptied out one of my many plastic storage bins of a bunch of home electronics (center speaker, side speakers, cables, cheap analog camera, etc.) that I don’t want, or want to store, any more. On its way to Goodwill, eventually.

Channel-Specific RSS Feeds

For those of you who may not be interested in everything I write (hi Mom, sorry about all the technology stuff), here are some channel-specific RSS feeds.

For those of you who may not be interested in everything I write (hi Mom, sorry about all the technology stuff), here are some channel-specific RSS feeds:

Life Tech
Self
Rochelle
Food
Travel
The Cats
The House
The Job
Haightlife
I Like
Politics & Law
Media
Miscellaneous
  Mac OS X
Anti-Spam
Technology
About This Site

DHI 108-114

Daily Home Improvements: stacking and racking, money laundering, some anti-spam work, a little bit of moving furniture, some work on this blog, and being The Cable Guy.

DHI 108: Continued sorting through and stacking software CDs, eliminating two more piles, and almost completely cleaning one of the many cluttered flat surfaces in reaching distance from my computer chair.

DHI 109: Took 2552 pennies, plus 2 dimes, a quarter, and a couple foreign coins that snuck in, down to Safeway’s change redemption machine. The machines keeps an 8.9% fee, which sounds high until you realize that it’s from money that’s too damn heavy and bulky to ever use in the Real World anyway. If Safeway didn’t have a machine to count them, I’d probably have just thrown them in the street…

DHI 110: Another batch of CDs sorted, separated from documentation, and slotted into the rack. Grabbed another stack from our dressing room, which is really our indoor storage and junkyard.

DHI 111: Converted to a new anti-spam tool, expired one of my e-mail addresses that is getting too much spam, and added a new anti-spam category to this weblog.

DHI 112: We moved our television out of the bedroom and into our parlor. Our setup isn’t as complicated as some — TV, VCR, TiVo, and cable box — but it’s still a pain in the ass to take apart and put back together. To say nothing of lifting my 10-year old TV, of course, which is damn heavy. Rochelle did a nice job of labeling the cables, and I cleaned the 2 years of dust off. Of course, when we hooked it all back together, it didn’t work. After an hour of troubleshooting, we called our cable company. Turns out it’s a neighborhood-wide outage, not us. What are the chances of that??

DHI 113: A variety of tweaks to this weblog. A few TITLE tags, to provide pop-up help; converting many HTML tags to lower-case, in anticipation of migrating to XHTML; converting to an external stylesheet, which should improve the performance of this site a bit; rearranged the sidebar; and a few other smallish things like that.

DHI 114: A trip to Radio Shack, to buy a 50′ coax extension, since it appears that — in the wake of the neighborhood-wide outage from DHI 112 being fixed — only one of the two cable drops in our house is actually functional. The cable coils its way down our hallway, definitely unsightly, but Rochelle was able to watch the season finale of Alias. The cable guy comes tomorrow morning to activate the other drop.

New RSS 2.0 Syndication Feed

This weekend I spent a few hours writing a script to provide an updated RSS syndication feed, conforming to the RSS 2.0 specification. It adds publication times and categories to the items in the feed, which might make it a little more informative in your news aggregator. If you’re subscribing to this weblog, please update your subscription to use the new feed.

This weekend I spent a few hours writing a script to provide an updated RSS syndication feed, conforming to the RSS 2.0 specification. This is basically an upgrade to the RSS 0.91 spec, which adds some additional metadata. In particular, it adds publication times and categories to the items in the feed, which might make it a little more informative in your news aggregator (it does in NetNewsWire).

So, if you’re actually subscribing to this weblog, please update your subscription to use the new feed. The old one continues to work, but the new one is better.

DHI 102-107

Daily Home Improvements: stackin’ plastic, biting off more than I expected, more anti-spam, and a little lipstick on the pig.

DHI 102: Began work on a major consolidation of all my software CDs, from the scattered piles, shelves, and bins that I’ve tossed them into, down to a single CD rack. This is going to be a big project, since I just put in an hour, and I’ve barely dented the task. I think I might need a second CD rack!

DHI 103: Continued working on the migration of my system, installing a number of software packages from CD and fresh downloads. This is a huge task! It will likely take me a couple of months, because I am trying to only move things over as I need them, so that my new system setup has only the software and tweaks that I actually use.

DHI 104: Edited Aldosoft to update the contact e-mail address, and configured Sendmail to block messages sent to the old address. I did this because there was a sudden jump in the amount of spam being sent to the old address.

DHI 105: Did some tweaking on this blog’s page template, updating the copyright date, adding the subtitle to the page as well as the TITLE attribute, and replacing the text RSS subscription link with the rapidly-becoming-standard 80×15 graphic badge for the same.

DHI 106: Submitted this site’s new URL to GeoURL, and added the graphic badge for it to the page.

DHI 107: Added an RSS 2.0 syndication feed to this web log.

Mac OS X ~/Library Permissions

Note to future self: the next time you re-install Mac OS X from scratch, remember that the reason why PHP cannot access include files in your ~/Library/WebServer folder is because the permissions on the ~/Library directory forbid read access to all but owner.

Before I explain the problem and solution that had me tearing my hair out Friday through Sunday, let me explain how I organize my system for doing PHP development and serving. Mac OS X Jaguar includes robust web serving capabilities, in the form of Apache and PHP. Apache’s default services, the documents and CGIs which are installed with Jaguar, are located in subdirectories under /Library/WebServer. This would be a natural place to put configuration and include files for PHP, and indeed it is where I keep the server-wide php.ini configuration file for PHP, /Library/WebServer/PHP/php.ini.

(I also create a symlink for that file at /usr/local/lib/php.ini, because that’s where Marc Liyanage’s full-featured PHP module, which I install over Apple’s “lite” version, expects to find its configuration file.)

However, Mac OS X separates out very cleanly the functionality installed at the system level, for all users, and functionality installed for a specific user. System level items go into /Library, while user-specific items go into ~/Library (that is, the Library folder in your home folder). The two directories mirror each other in structure, but have a different “scope” — system-wide versus user-specific. Since I was adding my blogging system’s PHP libraries for my own use only, I created the ~/Library/WebServer directory, and a PHP/Includes subdirectory under it, to hold them:

/Users/username/Library/WebServer/PHP/Includes/monauraljerk

I add the following line to my /private/etc/httpd/users/username.conf to make PHP look for include files in the above Includes folder:

path "/Users/username/Library/WebServer/PHP/Includes:/Library/WebServer/PHP/Includes"

This needs to go inside a VirtualHost or Directory statement; if you don’t know what those are, you might not want to be fiddling with this stuff.

The problem was, whenever I would load a PHP page that tried to include() one of the PHP libraries, or any file stored in my private Includes folder, it would fail with a “file not found” error. I spent more than 6 hours trying to track this problem down, finally resorting to brute force PHP scripts to test file_exists() on a bunch of different files, until I located the issue (and was able to blog once more!).

So, finally, here’s my point. Note to future self: the next time you re-install Mac OS X from scratch, remember that the reason why PHP cannot access include files in your ~/Library/WebServer folder is because the permissions on the ~/Library directory forbid read access to all but owner. You need to increase the permissions like this:

chmod go+r ~/Library

Remember it!

Mac OS X System Migration

As part of my hard disk replacement, I decided to do a complete reinstall of the operating system for my Mac G4. This is different from the Archive & Install project I undertook last year, I actually installed Mac OS X 10.2 onto an erased hard disk, created my account from scratch, and have been re-installing all my software, and copying over settings and documents as I need them.

As part of my hard disk replacement, I decided to do a complete reinstall of the operating system for my Mac G4. This is different from the Archive & Install project I undertook last year with the release of Mac OS X Jaguar. In this case I’m taking the most extreme approach, I actually installed Mac OS X 10.2 onto an erased hard disk, created my account from scratch, and have been re-installing all my software, and copying over settings and documents as I need them.

I am specifically not copying over my Users directory entire, because I want to leave behind all the cruft that has built up on my original installation, now more than two years old. I’ve installed so much software, some of which I now consider unsafe (Norton SystemWorks, for example), and some of which has become unnecessary, that it’s impossible to “undo” the changes they’ve wrought. The only way to get away is a completely clean installation, and deliberate installation of tools I actually use or need.

Of course, the downside is I lose much of the hundreds of hours that I’ve put into tweaking my system. Redoing the important stuff is a huge enough task that you have to ask, if it ain’t broke, why fix it?

The thing is, some things are broke. I have a downloads folder where all the items jump around in icon view, and the window shifts the scroll positions whenever I unmount a disk image. Weird stuff, that’s more annoying than a real problem. But because it’s unexplainable, and impossible to eliminate (and lord knows I’ve tried), it makes me worry about overall system correctness.

Anyway, I’m taking a similar approach as the one I took when I first migrated from Mac OS 9 to Mac OS X: move my e-mail and web browsing to the new system. Everything else will follow.

It’s amazing, but those are my most constant, most important activities. Once those are migrated, there’s no going back, so I may as well head forward. There’s quite a bit still in front of me, so I’m sure I’ll post more on this topic as I run across helpful tips or interesting lessons.

DHI 92-98

Daily Home Improvements: cleaning up, online and IRL, retirement planning, more accurate pings, and listing this site for sale.

DHI 92: Some housecleaning on my e-mail setup. My business e-mail address wasn’t being passed through my spam filtering system. Now it is.

DHI 93: Ongoing cleanup from the party. Yes, there’s still debris. Did I mention that it ended at 5am? Two people passed out on our bed, and one person puked. Two recycling bins are full of all the bottles of beer and wine that were drunk. One person gained six pounds. All in all a pretty good party!

DHI 94: Signed up for online access to my 401k plan. This required visiting the site, then phoning them, then waiting for the PIN to arrive via mail, then visiting the site again to register and confirm my identity using the PIN. Painful, but actually appreciated, since we’re talking about our retirement funds here.

DHI 95: Reallocated my 401k contributions to be more distributed, and signed up for the auto-rebalancing plan.

DHI 96: Fixed a lingering problem with this weblog, where the update pings to weblogs.com were sending the wrong URL for this site.

DHI 97: Listed this weblog on blogshares.com, a trading exchange for blogs, i.e., you can buy shares in different sites, trade them, etc. By listing my blog, I get 1000 shares in it, without having to buy them, and it becomes available for actual trading. While I doubt if this blog will ever become terribly valuable on the exchange, it is interesting to participate in yet another online experiment on how to measure social reputation, etc.

DHI 98: Expired an e-mail address that was receiving too much spam. See my other posting about this strategy for reducing spam.

Vendor-Specific E-Mails to Fight Spam

Managing your own e-mail server is a pain in the ass. There’s no two ways about it, when you want to take control of your own network infrastructure, you increase the complexity of the systems you manage, and you greatly increase the consequences of screw-ups. So if it’s hard work, and screw-ups mean you lose important messages, why would anyone want to run and manage their own e-mail server? For me it’s all about spam and viruses.

Managing your own e-mail server is a pain in the ass. There’s no two ways about it, when you want to take control of your own network infrastructure, you increase the complexity of the systems you manage, and you greatly increase the consequences of screw-ups.

For example, when I was using aggressive RBL blocking, it was bouncing e-mail I actually wanted to receive, in addition to some spam. A different anti-spam tool was causing occasional, apparently random errors, which resulted in some e-mail messages being dropped on the floor. And back in September, when Rochelle and I were in France and the e-mail server died, we lost about two weeks of e-mail.

So if it’s hard work, and screw-ups mean you lose important messages, why would anyone want to run their own e-mail server? For me, it’s all about spam and viruses. I have a great deal more options for strategies to deal with unsolicited commercial e-mail (spam) and for protecting us from e-mail borne viruses. Since I get about 200 spam messages every day, this matters a lot to me.

One of the tactics I use is to create vendor-specific e-mail addresses, and then expire them when they start generating spam. Here’s how it works. When I register at a new web site, say, www.bigcommerce.com, I give them the e-mail address bigcommerce [at] alderete.com, which will be an “alias” for my actual e-mail address. This lets me receive mail from the vendor, but tagged in a way that’s traceable to them. Any e-mail sent to that address, I know it’s www.bigcommerce.com that generated it — or sold my address to spammers.

And that happens surprisingly often, especially with dot.bombs that went out of business and sold all their assets, including their customer lists, to whomever wanted to buy them. The biggest offenders in my Inbox have been myspace.com and techies.com.

When the amount of spam going to a vendor-specific e-mail address gets to be too much, or if I know they’ve gone out of business, I will “expire” the address. This is done by setting the alias to bounce when someone tries to send messages to it. For folks who want the technical details, I add an entry like the following to sendmail’s virtusertable file:

techies [at] alderete.com    error:nouser 550 No such user here

This trick is only possible if you own your own Internet domain name, e.g., alderete.com, and have complete control over the e-mail aliases for your domain, usually by running your own e-mail server. (Some hosting services will let you do stuff like this, but most of them don’t give you full access to your aliases files.)

I’m still evolving my strategies to combat spam. With almost 1500 offensive messages being sent to me each week, I have to have pretty sophisticated filters. What I have today works fairly well, but could be even better. I’ll surely post when I add new techniques or tools. But no matter what I add, vendor-specific expiring addresses will continue to be a useful and important part of my anti-spam system.