Yesterday was the 25th anniversary of meeting my wife. Way back when, we were on a group date that started at the McDonald's on Old Hwy 8, proceeded to a showing of Heavy Metal, and ended at Perkins.
While at McDonald's, I noticed this cute girl who had gone inside the entryway. She was wearing light purple Vans. So I went up to her and said Nice shoes.
Later, at the movie, I blocked her way down the aisle so she would have to sit next to me. She then spent the rest of the movie hogging the armrest.
At Perkins, I ordered a Chocolate-Chipper Sundae, which I shared with her.
And, 25 years later, we're still together. Whee!
So yesterday was a nice day for reflection.
Alas, the night sucked.
I had been playing around with trying to rate songs in iTunes from a remote computer. We have an old Mac mini which acts solely as a print and music server. Instead of keeping loads of songs on my laptop in the office, I share the main song library out.
And this works great, except for one problem: I can't rate songs!
And that sucks. I like to make playlists based on song quality. But I'm not going to sit at the mini for hours rating songs. I want to just do that as I listen during the day. But clients aren't allowed to make any modifications to the shared library.
So, I did a little research and learned about Remote Apple Events. Turns out you can use AppleScript to talk to applications running on other computers. (After setting things up correctly, of course.)
So, thought I, it should be easy to just tell iTunes on the mini to rate the song currently playing.
Oops, can't do that because the mini isn't playing the song, the MacBook is.
Well, can I grab a unique ID for the track locally, then tell the mini to rate the song with that same unique ID? And, look, there's a unique ID called Database ID
. Alas, by now it was time to hit the sack.
So we went to bed. The Twins game was nearly over and they were in the middle of a rally, so we listened to the end. Then we went to sleep. Unfortunately, my mind was still thinking about the rating problem. (It was also churning over a Facebook debate.) So it took me awhile to actually drop off.
Around 1am, I woke up and turned over. I was just dropping off again when my iPod touch pinged an alarm at me. It was telling me that the Twins won. No shit! That happened 90 minutes ago! And I was at that point of dropping off where a noise like that completely woke me up.
I tried to sleep for about another hour then gave up and came downstairs. I figured I'd take an hour to work on the rating problem, then head back up.
So I tried grabbing the Database ID of the playing track and then telling iTunes on the mini to set the rating for it. And I could get an ID, but it wouldn't do anything on the mini. Why? Because, when you grab the ID from a shared library track, you don't get the real ID. You get a Shared Track ID.
Apple's worried you'll copy music otherwise. Well, shit!
So I do some more research. How have other folks approached this problem? What they do is grab the title, artist, album, and length information of the current track. Then they have the remote iTunes search the entire damn library for a track matching all of those. And then they modify that track.
So, I gave that a try. Well, it probably works. I'll never know because doing a quadruple and
on 28,000 tracks pegged my poor mini's CPU and kicked the fan into overdrive. I could probably change it to a cascade of single ands
for better performance. But, no matter how you slice it, it'll just be too much of a computational hog to be a good solution.
After two hours of mucking about, I headed back up, defeated. Now it's 4am and I'm even more wound up. But I managed to fall asleep, with the help of my dear wife, who rubbed my head and chest to relax me.
And I slept in until 9am. Still feel like crap, though.
So, I come downstairs with some new ideas. If the problem is getting the ID based on track information, why don't I try to cache that info locally? In fact, since iTunes keeps all this in a SQLite database, why don't I just make a local copy of the database and query it on the MacBook? (True, I'd have to recopy it everytime we added tracks, but we don't do that all that often.) Then I can send the correct ID to the mini. Why not indeed?
Oh, the iTunes database is encrypted. Well, fuckity, fuckity, fuck, fuck, fuck!
Now I'm getting a little pissed off. Well, iTunes stores a backup of the database as XML. I guess I could parse it and build my own look-up table. But what a pain in the ass. I'm gonna have to do that every time I add something to iTunes. But, I've no other choice.
So I take a look at the XML. Geez, Apple doesn't understand XML at all. Instead of having meaningful tags, they just do everything as key/value pairs. Stupid stupid stupid!
Oh, wait, what's that? Something called Persistant ID
. Hmmm... Can I use that instead of the Database ID? Since I don't find a load of references online that use it, I'm guessing it's a fairly recent addition, maybe in preparation for Home Sharing. (A frankly useless feature for me.)
Well, blow me down, it works! Wow! Cool!
Important men, pondering the important issues of the day!

What could they be pondering? The state of the economy? The wars in Afghanistan and Iraq? Our crumbling infrastructure? Why Chief Justice Roberts can't read a goddamn Oath correctly?

(It ain't Tild~, but I still like it.)
I knew this would happen. It's not even the end of the season and there are already calls to expand the use of instant replay in baseball. It stems from a blown call at third, late in last night's game. Made correctly, the Angels had a chance.
Up until now, it's been limited to just fair/foul home run calls. But why should that be the limit? What about close calls at home? What about close calls at third?
The problem is that there's no good way to draw the line as to whether a play is game-changing. Every play has the potential to be game-changing. That called third strike? If it were a ball, the next pitch could have been smacked out of the park.
The solution is to simply not have instant replay. People get all hung up on the calls being accurate. And, accuracy is important, but not at the cost of the game of baseball itself. Expanding the use of instant replay is just too tempting. And expanding it will slow an already glacially-paced game further.
Just say no
to instant replay!
The one toy I didn't mention earlier is the Tranquil Moments Sleep Sound Machine. Yes, it's the kind of thing you normally see in a SkyMall magazine. And it's hella expensive for something that plays nature sounds. But Consumer Reports pegged its effectiveness as being just a shade less than prescription drugs. So I bought one.
So, does it work? Yeah, it really seems to. We have ours set to timeout in 90 minutes. I have yet to still be awake when it does so. And that includes last Sunday night.
Sunday nights are particularly difficult because we don't have kids. That means we can sleep late on the weekends. Sometimes, we'll sleep as late as 11am. Yes, you read that correctly!
This past weekend we really slept in. Didn't wake up until 11am on Saturday morning. Didn't wake up until 11am on Sunday morning. Wasn't very tired at 11pm Sunday night.
Still, despite not being tired at all, I still managed to fall asleep within 90 minutes. I think within 60. The damn Tranquil Moments Sleep Sound Machine really works.
We've been sticking to the water-based sounds, like Rain
and Thunderstorm.
There's a Summer Night
mode that is okay, except is has this odd throb to it that makes me think of UFOs. So it ends up as Summer Night Invasion.
Some of the other sounds are purely synthesized. I'm sure they work fine, too. But they make me think I'm in a cheap sci-fi movie.
One problem I have when trying to sleep is that I start thinking too much. My wife tells me to just not think. But then I'm thinking about not thinking. The TMSSM sounds give me enough sonic detail to distract me from thinking. Or, that's my theory, at least. They're also supposed to contain certain frequencies that coax your brain into sleep modes.
We've tried sleep CDs in the past. But, for me, the synthesized sounds didn't really distract my brain enough. And then, when the CD ended and the disc spun down, the spin-down noise would wake me up.
The only thing I really don't like is that the indicator light on the front is damn bright, even when set at its lowest level.
Normally, I don't have much of a problem, personally, with TSA folks. I'm polite to them and they're polite to me. (Being white and male helps an awful lot, too.) But last week I was in Dallas. On the way home, I was behind behind a non-English-speaking visitor from Italy. And I got just a peek at how ugly TSA folks can get.
The guy made two mistakes. First, he jammed both his laptop and laptop bag into a single bin, so the laptop was angled partially out of the bin. Well, one TSA guy caught it before it went through. He basically yelled at the poor guy "I goes like this!" while rearranging it correctly, slamming the laptop down into the bin.
Now, I could understand getting stern if there was a big line. But this is Dallas, where there are separate security lines every half dozen gates. I was the only one in line. (I do love how Dallas is set up. You walk out your gate and baggage claim is right there. You step out of baggage claim and you're outside. Even the Newport News airport makes you walk further than that.)
The visitor's second mistake was to leave his boarding pass in his bag. While most of the TSA agents shouted at him to produce his boarding pass (although none thought to actually show him what they were talking about), another simply muttered "why'd ya come here if ya didn't speak English."
I was this close (fingers held 1 cm apart) to saying something like "Fuck you, you provincial asshole." But since this was Texas, I didn't raise a fuss. (Didn't want to get shot. No, really.)
But I did wait around at the end to make sure he got through okay.
In other idiots-at-TSA news:
TSA puts commercial pilots on no-fly and terrorist watch lists. Note that one of the folks is, at the same time, cleared to carry a gun on board.
Commuter Flights Grounded Thanks To Bumbling TSA Inspector (via Boing Boing, of course)
In the second story, an idiot at TSA decides to climb up the side of airplanes using external instruments as hand-holds, breaking them in the process. The hand-hold
is called a TAT probe. And, yeah, breaking it endangers the plane. Forty planes had to be grounded and checked out. Forty!
Holy crap! Scrap the TSA. I'll take my chances with the terrorists. Seriously. Look at the odds:
Airplanes endangered by terrorists: 3 (4 if you count the shoe bomber)
Airplanes endangered by idiot at TSA: 40
Keep in mind that there are a crap-load more idiots at TSA then there are terrorists boarding planes in the US.
I mean, honestly, think about it. When TSA tested their own security, they were able to smuggle in bomb materials 60% of the time. (It's in a USA Today story from last week.) Frankly, if someone wants to blow up a plane, they'll manage to do it. There just aren't that many people trying to do it.
And the final kicker? TSA spent boatloads testing their own security, but didn't keep track of why various smuggling attempts worked. So they know they suck, but they don't know why they suck. So they can't fix the problems and stop sucking. Idiots!
Wow! It was tax day. We wrote $31,898 worth of checks today. A huge chuck of that was taxes, both 2007 and estimated payments for 2008, but an awfully big chunk was extra retirement funds, salted away for old age.
I have never, in my life, spent that much money in one day. And, no, I didn't do my estimated payments correctly over the course of the year. So I got docked a couple hundred in penalties.
I'm 42 now, which gives me 20 years to build up a financial cushion. Every dollar we put away today will become two-bits in annual income in twenty years. (It'll double every six and a half years, and then I can draw 3-4% of it annually when I get old. Since my dear sweet, and slightly younger, wife will probably out-live me by a good bit, I'd hate to spend it all.)
If you do a load of coding, you probably wish you had a good font for working with code. It would need to be monospaced, so things line up correctly. It would need to have slashed zeros. It would need to clearly differentiate between lower-case l's and the number 1. It would need to be clean, with a good balance between height and width. It would need enough whitespace around characters to make concurrent lines readable. It would need to be legible at smaller point sizes.
Where would you find such a font? Oddly enough, at a tutorial for Orbit Mechanics. The font is called TI92PlusPC and is part of a collection of fonts needed for the tutorial page. The font is used in the tutorial to show TI92 code. But it works great as a font for general coding.
And how did I run across this font? I was searching for monospaced fonts, looking for a good coding font, and ran across Monospace/Fixed Width Programmer's Fonts. It's always nice when someone else has already done the hard work.
I really like our Mac mini, but there are a few things that are really bugging me about it. Here they are, in a Top Ten sort of format:
Now, it is entirely possible that some of my complaints are baseless in that I just don't know how do something correctly in the Mac OS. Which wouldn't be surprising because Apple doesn't include any goddamn manuals with the mini! Hey, that's 11.
Here's a photo Roger took of the pumpkin I carved last week:

(I had to re-post it. I always forget that I should use the full URL to the photo for it to show up correctly in an RSS feed reader.)
I'm pretty happy with it, although Roger's weird one looks much more impressive.
Who? Me, that's who. Well, first, I didn't have a very good night. At one point, I had a dream about swimming laps in a pool filled with people. They kept getting in my way. Plus, of course, I was naked. (Yes, I knew some of the people. No, I'm not telling you if you were one of them.)
Then I had this dream where I was talking to Woz and Steve Jobs. I grabbed a laptop and was trying to show them the Museum, but I couldn't type the URL correctly. (I'll have similar dreams where I really need to call someone, but I just can't dial the number correctly.)
Then, while I was sleeping on my back, I inhaled a huge amount of slobber. I woke up coughing. Took a good 20 minutes to clear things out.
So, finally, morning comes and I head downstairs to make some tea. We usually turn off the heat downstairs at night, so it was plenty cold. I started some water going in the kettle. Since the teapot was also cold, I ran the sink until the water there was hot, and filled the teapot to warm it up. I threw some leaves into my steeping vessel, which is this neat gravity-fed thing. It has a filter at the bottom and when you set it down on a mug, that activates little feet that raise a plunger that allows the tea to drain out the bottom. It's very cool and very handy. The only problem with it is that, due to the shape of my teapot, the feet don't engage, so I do have to reach under the lip and push them up with my fingers. Anyway, the water comes to a boil and I pour it into the steeping thingie and set the timer for three minutes. After three minutes, I put it on top the teapot and engage the little feet.
Now, if you're paying attention, you may be wondering "When did Tom empty the hot water out of the teapot that he was pre-warming?" The answer is, I didn't. So the teapot quickly overflows with scalding hot water, slightly burning my fingertips and spilling out onto the counter. I actually don't realize what's going on right away. I think it's just draining weird and I push up on the little feet a second time. This burns my fingertips once again and spills more water. I lift off the steeping thingie, which is still half full, and stare at this overflowing teapot, wondering how the hell it got so full. I probably stood there a full minute before the proverbial light-bulb went off.
Stupid stupid boy!
On the positive side, I make my tea on top of a lipped tray, which did handily limit the spread of spilled tea.