Archive for the ‘General’ Category.

Sushi Theory

A few weeks ago, I went to dinner with a coworker of mine, George. George is the most serious connoisseur of sushi that I’ve ever met (not counting sushi chefs themselves). We just went to the sushi place across the street, but George has developed a relationship with one of the chefs there, and that transformed the experience into something different.

For one thing, this was the first time I saw someone hand-annotate the a la carte sushi menu to request a combination of sashimi, sushi, and hand rolls. Plus, we wrote in a sushi roll that wasn’t on the menu. A whole new world!

Afterwards, George and I discussed our various theories of what consisted of levels, or dividing lines between various sushi eaters. First, I present my general theory of sushi diner progression:

  1. Cooked sushi. Basically california rolls, cucumber rolls, and the like.
  2. Raw fish (not sashimi). This starts with tuna and salmon and progress from there.
  3. Differently textured raw seafood. Octopus, squid, clam, flying fish roe.
  4. Sashimi.
  5. Salmon roe.
  6. Uni.
  7. Fried shrimp heads
Basically, this is a progression from the familiar to the unfamiliar in the American palate. Obviously, it isn’t a hard and fast progression, but it roughly corresponds to my own progression and to that of other friends that I’ve seen. YMMV.

George basically agreed with my theory, but insisted that it was only half the picture. The key, he said, was saba (mackerel). Now, in my progression, typical Americans will eat saba fairly early on — it is just another form of raw fish, after all. But they won’t like it. But once it becomes your favorite, and you can convince the sushi chef that it is your favorite, then the relationship with the sushi chef changes, and they start to take you seriously. Saba is apparently the first step to the Japanese sushi progression.

We had saba (sashimi) that night, and I have to admit, I thought it was pretty good. Of course, we started the meal with the fried shrimp heads.

New toy

My new toy arrived about a week ahead of schedule:

Img 0379-1

(It is the thing on the bottom. Above it is the old toy that this thing is replacing).

I apologize for the horrible photo. I’ll try to get a better one when I can photograph during the day. Well, at least a less gloomy day.

Anyway, I bought a Tivo Series 3 to replace my aging (6+ years old!) series 1 TiVo. Of course, my series 1 still works and I was still using it, but I became gripped by The Fear, so I’ve gone ahead and replaced it.

It is probably mostly that I’ve switched from a series 1, which hasn’t had a software update in 5 years, but I love this new Tivo. I don’t have it hooked up the digital cable yet, however, so there is more exploration of this thing to do.

Update: I have at least ordered CableCards from Verizon, so I may be able to get my TiVo to realize its full potential. The cards will apparently be $2.95 per month, each.

Warning! Do not pay your cable company $20,000

… like I did, by accident.

I had gotten a wee bit behind on paying my cable bill. This might be because I’m on the cusp of canceling the service, but that doesn’t really matter. So, I go to my online bank and pay my now 60-day overdue cable bill via the online bill pay feature. Ah, the perils of online bill pay. Somehow, instead of paying Comcast $204.98, I pay them $20498.00. No doubt a typo, but who can say for certain? Of course, I actually have enough money in this account to actually pay this, although just barely.

I actually don’t notice this error until one of my repeating, auto-scheduled payments (my mortgage payment, actually), miserably fails due to lack of funds, some 16 days later. “Whaaa?” I think to myself. “How the hell could this happen?” I log on to the bank’s website, and pretty much immediately notice the giant sum of money going to the cable company.

So, I call the bank. They are understanding, but cannot actually do anything. They tell me that I must talk to Comcast to get anything done. So I call Comcast. Somehow, I still owe them money. In fact, it looks like my $20k never got there. Ok, so where the hell is it? If it isn’t at my bank, nor at Comcast, is it lost in the ether? After explaining my problem to the poor guy at the Comcast call center, he informs me that in his experience, they reject payments of over $500. I admit that sounds like a good idea, but reiterate that my money is actually missing. I get escalated.

This is where the story might make an unexpected turn for some of you. I actually get escalated to someone in the finance department of the particular Comcast unit that I deal with. I.e., someone local. A real human. Actually, I very nice person named Sharon. I have a chat with her about my problem, and she promises to do what she can, but needs some sort of evidence of this event to start. Fair enough. I fax her a bank statement, and the actual page from the online billing portion showing the payment. I call the bank again to see if they can help. They promise to send more information to Comcast, using the fax number I forward to them. Then I call Sharon again and tell her this. She tells me that she should be able to get their bank to find this transaction, as it will stand out. She will call me back. One hour (or so) later, she calls back. They have found my lost loot and will refund it, but it will take 3-5 business days. I thank her profusely, and take what I can get.

Three (business) days later, my money has returned. And the bank reversed the service charge I incurred when my mortgage payment failed. So, I’m not really out much money (3 weeks of interest on the $20k).

So, the moral of this story: 1) don’t pay your cable company $20k. 2) if you do, don’t be mean to the customer service people. They will help. 3) Comcast actually handled this very well. I sort of feel guilty canceling them.

Productivity Update

So, I’ve been using my new, simple, email productivity plan for a few months now. And… it works at work, but not so much at home. At least not yet.

My Inbox at work is basically clear. It isn’t empty, but since I don’t have different categories for “to do now” and “will need to pay attention to in the future”, that is OK. But the home inbox has tasks that sit there an languish. I just don’t read email the same way at home. Plus, at work it is basically reasonable to assume that almost all of my tasks will be represented as email. At home, almost nothing is. At home, what I really need is a paper-based Inbox. An, oh yeah, I need to actually try to clear it.

Productivity

I’ve been thinking about my personal productivity lately. There are three things that are making me worried. One: I’m moving into a new position at work that will be more time demanding and (presumably) have more meetings. Two: I’m not getting enough domestic stuff done, although this is a long standing problem. Three: recently, I passed some magical email threshold where I’m suddenly not sure that I’m responding to all of the mail that I need to.

Now, for the vast majority of my life, I’ve been able to keep track of things to do and meetings to go to in my head. So, for the vast majority of my life I haven’t used a calendar or “to do” list. It was actually more work to maintain them than it was worth. For the past several months, however, I have been using a calendar (although my solution isn’t ideal), and I’ve needed it. I still don’t use a “to do” list.

So begins my baby steps into a more mature productivity system.

So, my first step is to change my email workflow. Before, my inbox was automatically trimmed to the last thirty days of read mail. Older, read mail was automatically moved to a year-based archive subfolder. This is nice in that the inbox doesn’t get so huge that it gets slow, but basically useless for determining if something needed to be done or not.

The new workflow is this: the inbox is NOT automatically archived anymore. Now, once an email is handled, it gets moved to the archive folder. So, now the goal is to empty the inbox, and the inbox is somewhat reminiscent of a “to do” list. Hm. Perhaps in the future, the inbox won’t be the only place for email that needs action, but for now, it seems sufficient.

Ski report

Again, from the better-late-than-never file (imagine that it is really February 8th)

So, I’m here in Whistler, BC, finishing up a ski vacation. Unfortunately, I’ve forgotten to take my camera anywhere, so I don’t have any pictures. (Others did, however.)

On Friday, I landed in Seattle, met my friends John, Xine, and Andrew and drove up to Whistler. After some excruciating traffic around Vancouver, we arrive. The first skiing related thing that I realize is that I forgot my goggles. Oops. I also forgot my normal Treo headset, which is unfortunate because my phone is going crazy, and using the normal headset un-confuses it. Or so I hope, anyway. So for the whole week here, when I’m talking on my phone, I’m using my helmet. [Update: my Treo was replaced via the Cingular warranty replacement program].

Day 1 (Saturday): We go to Blackcomb. Our place is closest to Blackcomb, and we walk. It is a little further than we would like, and it is raining at the base. Once there, I buy new goggles at the closest store.

It snowed a fair amount on Thursday and Friday, and, as a consequence, the snow is pretty deep at the top of the mountain. We start out by heading straight up. No warm up green or nice groomed blue. Our first run is ostensibly a blue, but we take a wrong turn and head down a black part way down. The snow is so deep, we can’t really tell the difference anyway. This is basically a poor start to the day, and I don’t ever really recover. It is also pretty crowded, and when we break for lunch, Barry and I lose the rest of the crew and end up heading down the base to eat, where maybe there isn’t a giant crowd.

The first day is, like normal, pretty exhausting. I think this is because we are finally skiing, so we overdo it a bit. Plus, that first run basically exhausted me, and the rest of the day was just catching my breath.

Day 2: We go to Whistler mountain, taking the packed-in-like-sardines gondola up. This was a pretty good day skiing for me. My technique was good, and I felt relaxed. I also quit while I was ahead.

Day 3: (Monday) Back to Blackcomb. I finally remember to actually wear my Camelbak after filling it and leaving it at the condo two days in a row. It is finally sunny and not incredibly windy, so we head up to 7th Heaven. It is not nearly as busy as it was on the weekend, but going up to 7th Heaven is pretty popular. This is also apparently Sean’s day for “X-treme Skiing”. The skiing up in 7th Heaven is basically a wide-open, semi-bumpy field, and blue to black steepness. There is a nice green cat-track down, however. On our third or fourth trip up, we (or really, Sean) decide to traverse far over to the left, into, if I had actually looked at a map, is marked as double-black territory.

As soon as I get over there, I hit a rock and crash. I was basically still traversing at the point. Both of my skis pop off, and one falls about 10 ft below me. I slide down to get it, and in the process 1) miss my ski, and 2) drop the other one, and 3) slide down about 100 ft. further on my butt. (Note to self: If in a similar situation in the future, do NOT slide down. Instead turn around, and climb down the slope like a ladder, kicking your boots to make steps. Or something like that. I hope I don’t have to test this technique, actually.) I am rescued by a very competent stranger, who patiently helps me put on the skis. I’m pretty sure that if I had the skill and opportunity I would have done the same, but nevertheless, am very grateful. I take another 10 minutes picking my way down.

I decide to skip the next run and go on ahead to lunch.

The rest of the day, we stick to mid-mountain stuff, and I stick to groomed runs, giving my body a rest.

Day 4: Instead of skiing, I take an all-day snowboarding lesson with John. We sign up for a “supergroup” lesson, which is a maximum of 3 people. We sign up for the “Novice” level, and basically we do 3 runs on the bunny slope, then three runs on a green run. We all do pretty well on the bunny slope, but the green run is harder and more falling ensues.

I fall plenty, but only one slam, no permanent damage (hopefully). On our last green run, however, John manages to both collide with another snowboarder and, later, do a forward slam so hard that his goggles snap in half, scraping his nose. Unfortunately, I was well downhill from this, so I missed it all.

We end the lesson by downloading on two chair lifts. I had actually never downloaded before. The view is pretty nice, however.

Afterwards, now free of our rental equipment, John and I wander around shopping. John gets new goggles to replace his shattered ones, and we both get new, swank, Marmot mittens.

Day 5: (Wednesday). I debated doing a half-day snowboard lesson, but decide against it when I realize that it hurts to raise my arms over chest-level. My triceps are so sore that it hurts to open a car door.


I’ve pretty much come to the conclusion that I could use new ski boots. My old ones were giving me trouble this whole trip, alternately causing foot cramps or feeling too loose. They are 10 years old.

I have also decided that if I’m going to continue snowboarding, I could use my own equipment, at least my own boots. My rental boots were too soft, making it hard for me to hold the toe edge.

But, also, if I’m going to continue snowboarding, I have to commit to it. I don’t have to stop skiing, exactly, but I need to spend at least one trip only snowboarding.

This is a hard decision. As John puts it: “If I can either spend the day doing something frustrating and painful or something I’m halfway decent at, I’m going to choose the latter.”

I have two motivating factors for snowboarding: 1) I like the equipment. The boots are way more comfortable to live in, and walking around is much much nicer only carrying a board, and 2) I actually think that I can end up a better snowboarder than I will ever be a skier.

Whatever I decide to do, it gets to wait until next year, however.

Heard at dinner

From the better-late-than-never file…

I’m on vacation. Conversations here are entertaining.

If human-animal hybrid research is banned in America, then all of the human-animal research will move to Canada! There will be a human-animal hybrid gap!
Yes, this was at my table. At breakfast, I also heard the following exchange:

Dan: Crumpets are like English muffins, but without the crannies. Christine: You mean they only have nooks?!?
I love vacation.

Freecell math

The only game that my father plays on his Mac is freecell. He plays the version available in Rick Holzgrafe’s Solitaire Till Dawn X. This is a pretty nice version of the game (although it lacks game numbers and the ability to automate supermoves), and my father occasionally saves deals that stump him. Well, yesterday I tried one of them, and after a while, in frustration, decided to see if it was solvable by running it through the automated freecell solver. Sure enough, it was winnable, although in order to win, the solution took us through two situations where Solitaire Till Dawn claimed that there were no more moves. It lied!

In any case, I’ve often idly wondered what the mathematical properties of freecell were. It is somewhat obvious that not all deals are winnable because one can construct a deal that cannot be won. I’ve wondered if anyone ever modeled freecell to the point where they could predict the winnability of a given deal, or, more likely, prove that certain deals were not winnable. This was predicated on my amazement at the ability for freecell applications to never (in my experience) give out an unwinnable freecell game.

Well, I haven’t seen that there is a solid mathematical model for freecell (although, clearly there are algorithms for solving freecell), but the game has been subject to a lot of empirical observation. In fact, it appears that freecell implementations have to do no special work, because it is estimated that 99.999% (or 1 loss in 79,000 deals) of freecell deals are winnable.

Of course, reading the freecell FAQ made me realize that I’m a freecell amateur. A neophyte, even.

jabber followup

We’ve been running on jabberd2 on the new server for almost a week now. So far, so good. Folks are enjoying TLS support. Well, at least I haven’t gotten any complaints.

Some of us are excited about the new conference server (mu-conference 0.6.0), since it actually allows you to configure it, assuming that you have a client that exposes this functionality. The two that I’ve used are gajim (a python/pyGTK client) and, surprisingly, gaim. Gajim is more reliable in this respect (although I have a hard time playing with it at home — it segfaults on my AMD64! I assume this is a pygtk problem but haven’t had time to actually investigate [Update: this is caused by a known problem with gtkspell]). The other big win in this migration is the move the py-transports series of bridges (pyaim-t, pyicq-t and pymsn-t). These are both very easy to set up (and migrate from the previous jabberd 1.4 transports), but work quite well, too. Finally, typing notification via the AIM transport!

Further experimentation with Jive Messenger reinforces the concept that jabberd2 was the right choice. I have experienced weirdness with the conference server, and I couldn’t actually even log in using gajim. At some point, in my Copious Spare Timeā„¢, I would like to actually investigate the JM problems enough to either come up with a solid bug report or, even better, supply a fix. Working on JM seems more tractable to me than jabberd2 at this point.

While I’m pretty happy with mu-conference so far, it would be better for jabberd2 to have its own native conference component, although I can understand not wanting to take on that work.

Server migration: the final piece

On Monday, we finally completed the final piece of server migration, migrating our Jabber service.

This was our hardest task of the actual migration, in my opinion. It had the most users, and we, for whatever reason, couldn’t just use the same software we had been using.

On our old machine, we had been running jabberd 1.4.3, with a conference component as well as several bridges to other IM systems (AIM and ICQ, if I recall). It hung occasionally, but generally we were happy with it. Well, as long as we didn’t need to touch it.

First, we were interested in a more modern server. For instance, one that supported STARTTLS. So we first tried Jive Messenger, a Java-based jabber server with a built in conference component. Since we already had Java 5 installed, this seemed like a good idea. Because this was a new bit of software, I decided to test it out on my own home server before subjecting our users to it. It was all great until I tied to join a chat room from our existing 1.4.3 server. That exposed a series of s2s bugs that pushed Jive to the bottom of the stack. Let me be clear, however: I am a big fan of Jive Messenger. I think that it will someday be the best jabber server for small installations. And for some folks, it is probably the best server right now.

Next, I tried (locally) to use jabberd2, my next choice. On my home box (which is an AMD64), the s2s component kept crashing when using the conference component. Ok, next server, jabberd 1.4.4, a point upgrade to what we were using. This would actually segfault when registering a new account. No good. Try jabberd 1.4.3.1, same problem. Next, ejabberd. Too alien. Next, jabberd2 again. This time, I tried it on our new server, hoping that its non-64bitness would help. The conference component still had issues — it was crashing every seven seconds. At this point, we are almost back to Jive. I had one more trick, which was to use my jabberd 1.4.3.1 build to run the conference component rather than JCR. Finally, success!

Now, to migrate users. The migration tool that comes with the jabberd2 source has you add a service configuration blob to your jabberd 1.4 configuration and then run the tool against it. It seemed like a good idea, but, of course, didn’t actually work. For whatever reason, the migrate.pl script could ask our old jabber server about a user via this new “migrate” service, but the jabber server wouldn’t return any actual information. Hm. Must be missing a component to the jabberd 1.4 server or something. After googling, finding a Ruby script for doing the migration in a google-cached mail message, installing Ruby, installing mysql-ruby, fixing the script to deal with inadvertent line breaks, we got the Ruby script to work. As a bonus, it migrated more stuff (vCard data and offline messages). Actually, the script was quite a nice solution, I just wish it was easier to find.

So here we are, on jabberd2. Whew.