Fun with Michael’s future bedroom

Well here it is New Year’s Eve again. Once again, I took a nice, (2 week) long holiday break from work. And once again, I started out hoping to get tons done around the house, but it didn’t happen. Well OK, I got some stuff done, just not as much as I wanted to. It’s tough getting much done around the holidays, even when you only consider the social and family obligations. Then you add two young children to the mix, and that’ll be all she wrote. Next year I may rethink the long break, and maybe do a week around the holidays and another week a little later in January or Feburary.

In any case, I did manage to get several solid hours of work in on Michael’s bedroom, mainly trying to fix up the water-damaged area around the window seat. It’s a huge mess. I finally got all the crumbling plaster removed, and squared up all the openings, so I can patch the areas with drywall. The Dremel diamond wheel does a pretty good job at cutting through the plaster topcoat. If I run a shop vac at the same time, there’s not much dust. However, the Dremel isn’t the ideal tool for making square cuts in the plaster, because the tool itself is wider than the cutting wheel. I was able to make do with it, but what I really need is a tool that won’t get in the way of the cut, like a tiny angle grinder.

It will be really interesting to see how the finished product ends up looking. There are some issues with using drywall to patch plaster. It’s hard to get the drywall exactly flush with the existing plaster surface. In particular, the thickness of the plaster can vary from place to place, while drywall is always a single uniform thickness. I think I’ve got it pretty close, and my current plan is to skim-coat everything with drywall mud to get a smooth surface. I’m cautiously optimistic that this will give me a good final surface. Time will tell.

Once the window seat area is done, I have the other walls to prep. The existing paint is in horrible shape, so it looks like I’ll be doing more skim-coating…

mp3act hacking

9 months or so ago, I installed mp3act, a PHP-based online MP3 streaming server. I’ve found that I really like it, but like everything else, it would be oh-so-much cooler with a few little tweaks. Development on it seems to have stagnated (no releases since mid 2005), so I’ve decided to hack on it a bit to make it do my bidding. So far, I’m really happy with the results.

Here are some of the issues I’m trying to address:

  • mp3act doesn’t deal well with albums containing multiple artists. It breaks each unique artist out into its own separate album. So for example, if you have an album called ‘great songs’ containing songs from artist a, artist b, and artist c, mp3act will create 3 albums called ‘great songs’, each containing songs from one of the three distinct artists. This is not what I want.
  • mp3act doesn’t handle artist sorting very well. If you have an album by Tom Petty and the Heartbreakers, mp3act displays it under ‘T’. If you want it correctly filed under ‘P’, the mp3 would need to be tagged ‘Petty, Tom and the Heartbreakers’, which again, is not what I want.
  • mp3act’s search and download features are a little lacking. The search results page allows you to play and/or add songs to playlists one by one, but there’s no ‘play all’ or ‘add all to playlist’ feature. And, it only allows downloads of albums. A ‘download playlist’ feature would be really useful.
  • With multiple-CD sets, if the songs on multiple discs are grouped under the same album name, mp3act will interleave the tracks together (disc 1 track 1, disc 2 track 1, disc 1 track 2, disc 2 track 2, …).

There are a few other little things, but those are the biggies. I’m taking a two-fold approach to dealing with these: tweaking the mp3act database tables for some, and tweaking the mp3act PHP code for others.

mp3act’s database schema is simple and easy to understand. It has a few quirks (biggest quirk: the year field is associated with albums, when in fact, it should be associated with songs), but I’ve found that I can get a lot done just by importing music into the database, and then going through manually and tidying things up. Specifically, I’ve corrected the multi-artist album problem and the multi-disc track interleaving problem this way.

To reconstruct a multi-artist album, first find all of its parts:

select * from mp3act_albums where album_name like '%name here%'

Note album IDs, which are typically consecutive. Then create a new artist, if necessary, for the album:

insert into mp3act_artists values(null, 'Various Artists', '')

Now create a new album:

insert into mp3act_albums values(null, 'name here', last_insert_id(), 'genre here', year, '')

Then, using the album IDs from the first query, re-associate songs with the new album:

update mp3act_songs set album_id = last_insert_id() where album_id between low id and high id

And finally, delete the old, no-longer-used albums.

delete from mp3act_albums where album_id between low id and high id

That’s it. Now, this works great, but it does introduce a couple of problems. First off, when you browse to one of these albums, it doesn’t show the artist name in the track listing. And secondly, there’s now no way to browse to the individual artists that make up the album (unless you have other albums by those artists). The first issue is a quick, easy fix to the PHP code. The second is more complicated. For this one, I added a separate ‘browse’ option that browses songs by artists, instead of albums. It was a bit of work, but not too bad.

And so it goes. Here’s a summary of all the changes I’ve made so far.

  • Fix database to deal better with multi-artist albums
  • Fix database to deal better with multi-cd track ordering
  • Show artist name in track listing for album/song browse
  • Add ‘browse for songs by artist’ feature
  • Create custom genres for some albums. This is easy to do and you are not limited to valid ID3 genres, which is nice, because they suck.
  • Modify ‘browse for albums by artist’ to not show artists with no corresponding albums
  • Fix artist sorting issue by adding ‘sort key’ field to albums table, and modifying artist entries where the sort key is different from the artist name

mp3act works very well for me with these changes, and the framework has the potential to do a lot more. Over time I’ll keep hacking on it to add features and improve its operation.

Followup… My next big “to do” is to make the album downloads more flexible. mp3act handles downloads by building a zip file on the fly, then sending this to the browser as an attachment. But the zipfile library it uses (which is included with the app) is kind of bare-bones, and it requires the mp3 library to have a certain directory structure. Looking at this library, it’s easy to see why downloads are not as flexible as I would like. Fortunately, PHP 5.2 now includes a much nicer built-in zipfile library, so the first step is to modify mp3act to use this. At that point, I should be able to greatly improve the download functionality.

Floor drain plan

OK, so here’s the current plan for the basement floor drains.

I haven’t quite finished poking and prodding the drains in the office and the back basement, but assuming the configuration is the same as what I predicted in my previous post, I want to scope them out with a video drain inspection system like the Ridgid SeeSnake. I think it’s the only way I’m going to find anything concrete out about their configuration. SunBelt Rentals, which has a location in Laurel, rents the SeeSnake at a base rate of $126 a day, which seems reasonable.

Assuming I can get my hands on a SeeSnake, I may need to do some surgery on the drain(s) to do my inspection, depending on which SeeSnake model is available. The camera on the base model is 1.75″ in diameter, which is too large to fit through the bell trap opening in the drains. I’ll need to enlarge the opening to about 2″. The drain is cast iron, so I will initally try using a tungsten carbide hole saw. Home Depot has one for around $12-$15 that I hope will do the job; Grainger has some much more expensive models. Drilling the drain(s) out will lose the bell trap functionality, but that’s not a huge loss because I don’t have bell trap covers for most of the drains anyhow.

During the SeeSnake rental, I may want to simultaneously rent a power drain auger with cutter blade. This will allow me to inspect, then clear obstructions, reinspect again, etc.

12/12 – A week or so ago I checked out the carbide hole saw that Home Depot sells. It looks a little too shallow to clear the raised bell trap opening and reach the area where it would need to cut. As a workaround, I might want to try using a sawzall to make shallow radial cuts through the opening, so I can break off the raised area. Home Depot also sells tungsten carbide sawzall blades.

Also, today I was able to confirm that the bar sink drain ties into the floor drain plumbing. With the drain plumbing relatively empty (it’s been several days since it rained) I ran a large volume of water down the bar sink, and I was able to see the water flowing through the drains in the office and the back basement. This also confirms that the drains flow from east to west, and it raises the possibility of using the bar drain as an entry point for the video snake. Access is a little tough under the sink, though.