Sunday, December 21, 2008

Wintry island pictures

Yep, it's still coming down! Have some photos:

Saturday, December 20, 2008

Let it snow?

We're supposed to get up to 10 inches of snow tonight, which would give even Pittsburgh a bit of a run for its money. Bainbridge Island? I pretty much expect it to be shut down tomorrow.

I did go for a walk to the road end where I swim from just now. I've never seen snow extend all the way to the edge of seawater and even a bit beyond.

We're not getting the 50-90 mph winds they were predicting; in fact, there's not even a light breeze. They've also changed tomorrow's forecast from freezing rain to more snow. This gives me hope that I'll still have power tomorrow.

Sunday, December 14, 2008

Winter update

I haven't updated in awhile, but that's mainly because I've been busy with activities which I can't blog about. Heck, half of the work-related stuff couldn't even be written up in my company-internal blog (which I never use; I don't understand the point).

Instead, I give you a picture of my front yard. I still find it weird to live on an island where it snows.

Wednesday, November 5, 2008

Pravda

I've been browsing international papers online to see the international response. I was surprised to see that Pravda, that good ol' Soviet-era paper, still exists.

Needless to say, they still don't bother with trite details like journalistic integrity when they write their stories. :-)

Tuesday, November 4, 2008

McCain's concession speech

McCain's concession speech was gracious, honest, and from the heart. That was the McCain I supported back in 2000. Had he run his campaign in that tone, I suspect the outcome could have been different. Reminded me a fair bit of another Arizona Senator, Barry Goldwater.

Added later: This blog entry by Joe Gandelman sums up my feelings rather accurately (especially since I was a McCain supporter -- and contributor -- in 2000 who voted for Obama):
But, most strikingly, the speech was vintage 2000 John McCain — and it was perhaps a bit bittersweet to some of McCain's 2000 supporters who voted against him this year as they most likely wondered: "Why didn't he talk like this during the campaign? Why didn’t he run using this same tone and persona?" McCain's speech made it seem as if a long lost twin brother had suddenly reappeared. It was one of the finest moments of his long, troubled campaign. This time he wasn’t worrying about the reaction of his party’s base — only what he felt needed to be said. Just like in 2000.

Something's afoot in Utah...

Check out the CNN results. Apparently they use a different definition of "majority" there. :-)


(Not that I expect the final result to differ, mind you... just thought the current tally was funny.)

Tuesday, October 28, 2008

Sandwich Nazi

I had lunch at Seattle's sandwich Nazi today, aka Bakeman's Restaurant. As recommended, I had the turkey. Yes, it was good, but not worth the abuse.

I got berated for telling him I had cranberry on my sandwich (which costs an extra 25¢).

If you enjoy abuse, it's a great place. Otherwise... meh. I get abuse all day long at work.

If the polls are skewed...

There's been some concern about the accuracy of polls -- are people telling the truth? Is there a skew towards Obama because people are afraid of appearing racist? Is there a skew towards McCain because polls exclude non-land-line owners (who tend to be older and more Republican)?

Well, I can't answer the "accuracy" question with any certainty. However, being the database geek that I am, I can crunch numbers.

I took the poll data from RealClearPolitics and tossed them into an SQLite database; you can download the database itself here. Taking the latest poll data, here's what the election results look like if the percentage points are skewed in one direction or another.

SkewObamaMcCainUndecidedResult
McCain +62632760McCain
McCain +526321561No winner
McCain +432418233Obama
McCain +33571820Obama
McCain +23571820Obama
McCain +13571820Obama
No Skew35716814Obama
Obama +13711680Obama
Obama +23711680Obama
Obama +33711680Obama
Obama +43711680Obama
Obama +537115810Obama
Obama +638113226Obama


In case you want to play with the database:
ELECTORAL_VOTES contains a mapping from state to number of electoral votes for that state (state, votes).
POLLS contains a listing of each poll; the rows contain: state, poll_date, poll_name, obama, mccain.
LATEST_POLLS is a view containing the latest polls from POLLS.
SKEW is a table containing the integers from -6 to 6.

The query to produce the above table is:
select skew, sum(obama_votes), sum(mccain_votes), ifnull(sum(undecided_votes), 0)
from (select skew, (mccain - obama > skew) * votes mccain_votes,
(mccain - obama < skew) * votes obama_votes,
(mccain - obama = skew) * votes undecided_votes
from latest_polls
cross join skew order by skew) group by skew;

Monday, October 20, 2008

Powell's lament

Buddy, I know how you feel. From today's New York Times:
"I have some concerns about the direction that the party has taken in recent years," Mr. Powell told Tom Brokaw on "Meet the Press" on NBC as he made his endorsement of Mr. Obama. "It has moved more to the right than I would like to see it."
I've also been reading a new biography of Barry Goldwater written by John Dean and Barry Goldwater, Jr., Pure Goldwater. My father -- a Goldwater supporter in the 60s -- gave me an autographed copy. I'm only about halfway through it; so far, though, I'm quite enjoying it and am finding him to be a man whose wisdom we desperately need today. At any rate, I think Goldwater would've been fairly disappointed in the Republican party of today, too.

McCain continues to disappoint me. I had hopes that his shift from his 2000/2004 persona was a ploy to clinch the nomination and appease the powers in the party. Alas, as the NYT article points out with his choice of advisers, he's just going deeper and deeper into neocon territory.

Sunday, October 12, 2008

I am dead to the Internet

Apparently, the Internet thinks I should be dead, given my current exercise regimen:

Anyway, this is my new standard workout. I've been swimming in Port Orchard Narrows (which, despite the name, is actually a channel/strait, not a port) from Fletcher Landing (short bike ride from my house) down to the tip of Crystal Springs. Google Earth puts it at 1.18 miles. My thermometer puts it at 50°-56°, depending on the day.

Thursday, October 9, 2008

Apples

I didn't get a chance to follow the news today. Why were there so many folks selling apples on the street corners on my ride home?

Actually, right now I'm feeling somewhat lucky; back in July, I sold all the stock I had and took out a loan against my 401(k) when we bought the house. I wish I could say that it was some keen insight, but it was just pure luck. Not so lucky: working in an industry where much of my compensation comes in the form of stock. I suspect a lot of folks, myself included, will max out on the capital loss deduction come next April.

Scary times.

Saturday, October 4, 2008

Flight Simulator

There's an Airbus flight simulator on sale over at DoveBid. It won't install on your PC, though; you'll need a warehouse.

Oh, man... this could be a lot of fun...

Friday, September 26, 2008

Hacked

Dammit, someone managed to hack into a couple of my accounts. On the plus side, I was watching them as they did it, so I was able to stem the problem very quickly (within a few minutes), but dang... they're fast. They managed to create ~$400 in fraudulent PayPal charges in the span of 5 minutes. (I was on the phone with PayPal as they did were still fumbling about, in fact.)

I'm still at a loss as to how they accomplished this. I do know that I received an e-mail which caused GMail to spaz out -- text was flowing outside of the places it was supposed to be (so they probably found yet another XSS vulnerability in GMail) and attempting to view this e-mail caused the page to spend a long time loading (i.e., it was phoning home, probably with my GMail login cookie).

However, this doesn't explain how they were able to get into my PayPal account. The only thing I can think of is a keystroke logger, but it's not like I typed any passwords in those 5 minutes. That, or they managed to get into my saved passwords in Firefox (though I don't think I saved my PayPal password in there for this very reason). I guess I'll find out on Monday when I bring my laptop in forensic analysis.

In the meantime, I had my work account locked down (which I highly doubt was accessed, but this is still the prudent measure to take) and managed to change all of my other passwords within 30 minutes, all without incident; this means they probably didn't get at anything else.

The attack itself was quite sophisticated. Not only was it generating PayPal charges as fast as possible, it would intercept and delete the PayPal confirmation e-mails which showed up. I got glimpses of the subject lines and actually managed to click on one (and confirm, to my horror, that it was draining money from my real bank account), but they were being deleted not long thereafter.

Google, incidentally, is of no help here (even though I'm paying $50/year for their "premier" edition of GMail). I called their emergency number only to be told that their offices are closed until Monday morning.

Anyway. PISSED OFF IS ME.

Friday, September 19, 2008

The ultimate in high maintenance

Ah, the laughs. I've found the dating profile of someone who is the ultimate in high maintenance. And it's a 53 year old guy.

He even has a section entitled, "Do NOT Fall in Love with Me until I say so!"

Monday, September 15, 2008

Need to take a week off.

Just got back from a three day kayak trip around the San Juans (mainly Cypress Island) with Tamara and Julie (a friend from Sacramento who came up with the crazy plan in the first place). It was quite fun and nicely relaxing. However, the kayaking, plus swimming and hiking each night, has left my body exhausted and my muscles sore. As I'm flying down to San Diego tomorrow and spending the rest of the week there, I think I'm going to take a bit of a break from swimming.

Work has been exceedingly stressful as of late. Too many last-minute critical projects being juggled and thrown my way. I seem to spend 80% of my time in front of Outlook delegating and explaining what needs to happen instead of doing it myself. I suppose this would be acceptable if I were a manager, but I'm not. I think I'd be happier if I didn't know that spending time on this would be held against me come performance review time. Ah, like Dilbert, I guess I have the curse of competence.

Anyway, time to pack.

Wednesday, September 3, 2008

Setting priorities; more Chrome nits

Due to various events circulating around and entrapping me, I'm thinking of requiring folks to prioritize the requests they send me. They can select from the following options:
  • Priority 1.15. My request is important, but not so important that anyone will actually notice before we or they change teams/companies. I'm mainly filing this to cover my ass and I can point to a document and say, "I told you so," should this blow up.
  • Priority 1.1. My request is important enough to require you to do this now, but not so important that I'm willing to devote any of my team's resources into understanding the problem.
  • Priority 1. My request is important enough that I'll make vague promises to understand the problem at some unspecified point in the future, but will hope that you don't follow up on this. Also, I'll hound you with meeting invites until you submit to my will.

On the Chrome front, I'm still generally happy with it, though I did experience slowdowns with some Flash stuff. My experience here mirrors someone's review (which I can't seem to find at the moment): better than Firefox on CPU usage, but worse than IE8.

However they don't support SPNEGO/Kerberos/NTLM authentication, at least not yet. This is the magic which lets me get away with typing my work password only once a day rather than once for each internal website I visit. I'll have to keep Firefox open in the meantime.

Tuesday, September 2, 2008

Quick update on Chrome

Sure enough, a site I browsed to caused Chrome to crash -- not unexpected, given this is the first release of an alpha product (yeah, I know that Google calls it beta; I'm doing my own take here). However, true to expectations, it only caused that tab to close and vanish; the rest of my browser was unaffected.

This pleases me.

Separate processes are the way things should have been done a long time ago. (Why won't anyone listen to me on this?) Threads are fine if you have short, asymmetric work loads (e.g., spinning up a separate thread to monitor a file handle); they're generally not the right solution if you have symmetric work to perform. The Java fanboys at work yell and scream that threads are perfect, processes don't scale on multicore systems (huh?), you can't share memory (uh, that's kind of the point), and going multiprocess is an admission that your code has bugs (well, duh).

Of course, Java has plenty of objects to handle threads but no fork() call. Going multiprocess is much harder in this kind of environment. Not impossible, as the Cygwin guys have demonstrated through their fork() emulation on Windows, but definitely harder.

Chrome...

I'm trying out the new browser that Google has tossed together. But my first impression: what the heck? It insists on installing itself for each and every user of a given computer? WTF?

That said, browsing my usual websites shows that it is quite zippy. It also imported all of my bookmarks, saved passwords, and browsing history from Firefox without a hitch (though I did have to shut down Firefox first -- I'm guessing Firefox doesn't leave files in a consistent state while it runs and doesn't provide APIs for other apps to access this information).

It does spawn a bunch of processes, as expected. Even show, with three tabs loaded, it's using less than 100 MB of memory; Firefox 3, by comparison, eats up around 300 MB just to start up.

Firefox: I'm not giving up on you just yet, but you're on notice.

Monday, August 11, 2008

Good god...

I have to wonder if Russia is trying to start WWIII in Georgia. This is the biggest finger they could possibly give to the U.S. and Europe.

Of course, the second part of that statement might be, "And we know you're not going to do anything about it because your people are too tired of Iraq." On that count, so far they're right. Oh, and toss in a, "Hey look, Olympics!" for good measure.

Tuesday, August 5, 2008

Don't get sick in Oregon

Can anyone confirm this story? I can only find it on Fox News and a few other right-wing blogs; I'm guessing there's more to it, but dang if I can find any additional information on it.

Oregon Offers Terminal Patients Doctor-Assisted Suicide Instead of Medical Care

Since the spread of his prostate cancer, 53-year-old Randy Stroup of Dexter, Ore., has been in a fight for his life. Uninsured and unable to pay for expensive chemotherapy, he applied to Oregon's state-run health plan for help.

Lane Individual Practice Association (LIPA), which administers the Oregon Health Plan in Lane County, responded to Stroup's request with a letter saying the state would not cover Stroup's pricey treatment, but would pay for the cost of physician-assisted suicide.

If true, this is obviously more than a bit chilling.

Saturday, July 19, 2008

Fat Salmon

I swam in the Fat Salmon open water race today. This was 3.2 miles in Lake Washington, from the I-90 bridge to the WA-520 bridge.

Oh, and I decided to do it without a wetsuit. The temperature was nice (~72°F), but oof -- the double whammy of no neoprene and fresh water meant my buoyancy went out the window. And, boy, did I pay the price -- I clocked in at an even 2 hours (my official time was something like 2:00:14). The last time I did a straight 3 mile swim in the pool I finished in 1:38 -- still not zippy, but not sluggishly slow.

I never even saw the first set of three buoys I was supposed to swim between. I might have gone between them, but then I should have caught a glimpse of them. Apparently, neither did a few others, nor were people being disqualified for this. (Not that they're overly strict at Fat Salmon.) Trying to sight them was a pain -- buoys aren't the easiest thing to spot when your eyes are at water level, and my lack of buoyancy only made things worse -- so I suspect I lost a lot of time craning my neck up every 12 counts.

But I finished.

The course:

Sunday, June 29, 2008

The Rock

I haven't been posting my open water workouts -- too many to list this year, and I just haven't had the time -- but this morning's workout was notable: I finally make it to Blakely Rock today!



This is about a mile off-island; since we start in Blakely Harbor this makes the trip just under 2 miles one-way). You feel like you're in the middle of Puget Sound standing on the rock. I hope to get some pictures soon. In the meantime, here's an overview map to give you an idea where this is in relation to Seattle:

Sunday, June 15, 2008

It's the year 2008...

Forget my flying cars. Why the heck can I still not print from Linux (more specifically, Ubuntu 8.04)?

I threw together a little applet to stitch together a Puget Sound navigation chart from NOAA (check out chart number 18449). This isn't acceptable for navigation, they say, but hey: I just want something to look at. I don't own a yacht, boat, or even a kayak; the extent of my water vessel ownership is owning a swimsuit and goggles...

It was a success; you can download it here, if you're so inclined. Anyway, now to print it.

Oh, god, the agony.

I tried Eye of Gnome first. I tweaked my printer settings a bit (I'm printing this to 13"x19" glossy paper instead of the normal letter paper) and hit print. The system starts puzzling over this for a bit (at least if the CPU usage bar is any indication) and then... nothing.

I open up the printer jobs viewer. It says the job is stopped with no indication at to why. That's strange. I cancel it and try again. Same result.

Ok, maybe EOG is flaky. I cancel the second job and start up Gimp (which, incidentally, is an exceedingly dumb and potentially offensive name for an image editing program, but I digress...). I change the settings again, hit print... and, again, minutes of thinking followed by nothing. I do the cancel/reprint/cancel/print a test page/reprint shuffle a few times, but all to no avail.

Hrm. Something is amiss. I check out the CUPS logs:
E [15/Jun/2008:23:11:10 -0700] PID 28099 (/usr/lib/cups/filter/pstoraster) stopped with status 1!
E [15/Jun/2008:23:11:11 -0700] [Job 226] Job stopped due to filter errors.

Well, that's interesting. But why is this pstoraster program failing? Any logs?

Nope, can't find them. But it turns out that pstoraster is a shell script which does attempt to print some logs out -- they're probably just going to /dev/null. I write a wrapper to send its output to /var/log/cups/pstoraster.log, try printing again, and see what I get.

Oh, joy. It's failing somewhere deep in the bowels of Gutenprint and Ghostscript:

DEBUG: Running /usr/bin/gs -dQUIET -dDEBUG -dPARANOIDSAFER -dNOPAUSE -dBATCH -dNOMEDIAATTRS -sDEVICE=cups -sstdout=%stderr -sOUTPUTFILE=%stdout -c -
... many lines of garbage deleted ...
Error: /rangecheck in --image--
Operand stack:

Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval--
--nostringval-- 2 %stopped_push --nostringval-- --nostringval--
--nostringval-- false 1 %stopped_push 1905 1 3 %oparray_pop
1904 1 3 %oparray_pop 1888 1 3 %oparray_pop 1771 1
3 %oparray_pop --nostringval-- %errorexec_pop .runexec2
--nostringval-- --nostringval-- --nostringval-- 2 %stopped_push
--nostringval-- 1809 1 3 %oparray_pop
Dictionary stack:
--dict:1149/1684(ro)(G)-- --dict:0/20(G)-- --dict:126/200(L)--
Current allocation mode is local
Last OS error: 2
GPL Ghostscript 8.61: Unrecoverable error, exit code 1
DEBUG2: cups_close(0x685378)

Catch all that? This will be on tomorrow's quiz.

How did I end up printing this? I fired up Windows XP in VMware Player, opened the image using an old copy of Paint Shop Pro 5 (which works well for 99% of my image editing needs), and hit print. Pretty map came out a few minutes later.

Seriously, folks: this is an embarrassment. You're making Vista look like a dream.

Friday, June 6, 2008

Fly Derrie-Air

Skinny? Flying to Philadelphia? Check out Derrie-Air:
The magic comes from our one of a kind "Sliding Scale"—the more you weigh, the more you'll pay. After all, it takes more fuel—more energy—to get more weight from point A to point B. So we will charge passengers based on how much mass they add to the plane.
Yes, it is a joke. Nonetheless, the media company behind this spoof actually did buy full-page adverts in Philly papers this morning.

Seals, coming unglued...

First, the coming unglued part: this was not my fault. (Actually, it wasn't anyone's fault, though working around the issue took a lot longer than it should have.)

But the more interesting part: I apparently have a new pet. There's a seal in Manzanita Bay, where we often swim, who has decided that I'm fun to play with. It was pouring on Tuesday, so we didn't have a support craft; instead, I had one of those lifeguard rescue tubes dragging behind me on a strap. The seal thought it would be hilarious to play with it and tug on the straps. Spooked me out the first time the came around. Eventually, it just got annoying.

Wednesday was another swim day, this time with a support craft. To my surprise, the seal still wanted to play even though I didn't have the tube with me. This time, it was mostly in the form of bumping against my feet and swimming below me (face up, just to show that he was a better swimmer or somesuch).

I am a bit worried that he's getting too comfortable with humans. That's usually not a good thing for wildlife. Ah well... all of our attempts to scare him off have proven unsuccessful. I guess we'll just have to live with him.

Monday, May 26, 2008

I've been busy.

It amazes me that using the Internet, which used to be a fun, diversionary pastime, is now a lot like work. When I do get a free moment -- which is sadly becoming a rare occurrence these days -- jacking in to the matrix (errr, surfing the web, that is) is down at the bottom of the list of things I want to do.

As a result, updating my journal falls by the wayside, too.

So... let's see. Last update was 18 April. Since then, I've:
  • Gone to Maker Faire with Tamara and our friend Julie. It was a lot of fun. A few pictures I took of the gizmos are online.

  • Started open water swimming in Puget Sound again. We've mostly been swimming in Manzanita Bay (here's an overview of a typical workout there), and there's a seal which loves to swim with us. Actually, it's the ladies he seems to like. Don't ask me how he can tell the difference (or even if it's a male -- apparently, his/her ability to determine interspecial gender is better than mine), but he definitely goes up next to them instead of the guys.

  • Gone to Hobuck Beach a couple times. No pictures, sorry; I felt more like wandering than thinking about taking photos. I did get a nasty tire puncture hitting a sharp rock on highway 112 when returning from my first trip. That also prompted me to get my tires replaced; when putting the spare on, I noticed that the treads were much more pronounced. Oops.

  • Built a BlackBerry application to make oncall life easier at work, called Sur Appels Sans Frontières (i.e. "On Calls Without Borders" -- yes, I know the French is atrocious, but it translated forward and back properly in Google Translator, so I'm sticking with it). This was part of a competition to build tools for others in the company to make their lives easier. The upside: I won the "Best Tool For Builders" category. The downside: They want me to roll this baby out (in my copious spare time, of course :-). I did get a nifty hard hat helmet/trophy (in keeping with our internal system builder website's Bob the Builder theme). I'll have to take a picture of that.

  • Gotten completely inundated with operational issues at work. Ironically, while I was giving the demo of Sur Appels, my team was in the middle of dealing with a Sev-1. It also seems that the new database hardware we're getting has a bad issue with the storage controllers which causes the database to completely hang from time to time. In usual Amazon tradition, the engineers are being told to just deal with it, it's your problem, not provisioning's. That is, we'll spend a few million to work around the problem rather than a few thousand to deal with it directly. <sigh>

  • Been househunting off and on. More off than on in the last few weeks. I hate the whole process. That's all I'll say for now lest this become an angsty rant.

And there you have it, in executive summary PowerPoint bullet form. Next slide please.

Friday, April 18, 2008

It is snowing.

Which wouldn't be unusual in and of itself except (a) it's mid-April, and (b) this is Seattle.

We're supposed to have our first open water swim in a couple weeks. I'm beginning to wonder about this.

Maker Faire

Anyone reading this going to Maker Faire at the San Mateo Fairgrounds next month?

After two years of wanting to go but doing nothing about it, I'm finally plunking down the money to fly down and go. I'm usually reluctant to spend money on trips like this for myself without some other attached event (e.g., someone else is going, is getting married, etc.). I don't really know why I'm that way; I just am.

I'll be there on Saturday, May 3rd. If you'll be there, get my contact info and come say hi!

Sunday, April 13, 2008

I spent my weekend mostly naked.

Probably more information than you wanted to know. But I was at the PNA/NW Zone swim meet, so I had an excuse this time. This was my first ever swim meet that I've actually swum in (I've spent others timing and running the computer).

The King County Aquatic Center is nice. The competition pool is an LCM (long course (50) meter), dividable into various arrangements; for this meet, it was divided into two SCY (short course (25) yard) pools. It's 9 feet deep throughout -- no worrying about hitting your head turning in the shallow end -- and has waveless gutters. You could warm up during the meet in the dive tank -- 25 yards square and 17.5 feet deep. When you jump into it, you feel like you're just going to float forever downward.

Anyway, I did the 1000 and 1650 ("swimmer's mile") freestyle events, and a relay event where I swam another 50 freestyle. I learned that I'm faster than I think I am, but still nowhere near as fast as I'd like to be. I managed a 15:13 in the 1000 (vs. expected 18:00), and 25:08 for 1650 (expected 29:00). However, I know that I was faster here than I am in my normal pool -- all those niceties plus the adrenaline rush add up.

Tuesday, April 8, 2008

A decent web framework?

I've been playing with a combination of CherryPy, Genshi, and Dojo to put together a website for a friend. So far, I've been quite pleased.

CherryPy is the request router -- it's responsible for cracking open the HTTP message and deciding how to process it. I have a few nits about it -- mainly documentation related -- but getting a webserver set up which did something along the lines of, "Route everything through Genshi except this path, which you should serve from the filesystem," was very straightforward.

Genshi is the first page framework which evoked a response from me of, "Hm, this could work," instead of, "God, I feel like I'm going to throw up." It uses an interesting approach: you write everything in XML and embed the programmatic constructs in the attributes. The rendering phase takes care of the transformation to HTML (or text, or ). For example, here's how you might render a table full of sliders for every integer or floating-point parameter:
<tr py:for="param in parameters">
<td py:if="param.valueType in ('int', 'float')">
<div dojoType="dijit.form.HorizontalSlider"
id="${param.name}Slider"
py:attrs="param.sliderAttributes"
intermediateChanges="true"
onChange="onNumericSliderChange('${name}')" />
</td>
</tr>


I'm used to the frameworks which require you to escape any code. Genshi lets you do that, if you absolutely insist upon it:
<?python
for param in parameters:
?><tr><?python
if param.valuetype in ('int', 'float'):
?><div dojoType="dijit.form.HorizontalSlider"
id="${param.name}Slider"
py:attrs="param.sliderAttributes"
intermediateChanges="true"
onChange="onNumericSliderChange('${name}')" />
</td>
</tr>


Dojo is a set of widgets. Not quite Google Web Toolkit, but it's simple and gets the job done.

Friday, April 4, 2008

SpamAssassin's multiple personality disorder

SpamAssassin has become a bit overly aggressive in its filtering as of late. A few of my friends' e-mails are getting sucked up in there, so I've had to monitor it a bit more closely.

Today, however, I found this gem in there. Clearly, it was conflicted as to whether the e-mail was spam or not, though ultimately it decided it was (and was correct in this determination). What amazes me is that, even with 12.3 positive points subtracted, this e-mail still scores as spam.
Content analysis details:   (8.6 points, 5.0 required)

pts rule name description
---- ---------------------- --------------------------------------------------
1.0 NO_REAL_NAME From: does not include a real name
0.1 FORGED_RCVD_HELO Received: contains a forged HELO
0.1 HTML_90_100 BODY: Message is 90% to 100% HTML
0.0 HTML_MESSAGE BODY: HTML included in message
0.5 BAYES_99 BODY: Bayesian spam probability is 99 to 100%
[score: 1.0000]
0.0 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
-4.3 RCVD_IN_BSP_TRUSTED RBL: Sender is in Bonded Sender Program (trusted
relay)
[Return Path SenderScore Certified (formerly]
[Bonded Sender) - ]
1.6 URIBL_SBL Contains an URL listed in the SBL blocklist
[URIs: selleis.com]
3.8 URIBL_AB_SURBL Contains an URL listed in the AB SURBL blocklist
[URIs: selleis.com]
4.1 URIBL_JP_SURBL Contains an URL listed in the JP SURBL blocklist
[URIs: selleis.com]
2.1 URIBL_WS_SURBL Contains an URL listed in the WS SURBL blocklist
[URIs: selleis.com]
3.0 URIBL_OB_SURBL Contains an URL listed in the OB SURBL blocklist
[URIs: selleis.com]
4.5 URIBL_SC_SURBL Contains an URL listed in the SC SURBL blocklist
[URIs: selleis.com]
0.0 MIME_HTML_ONLY_MULTI Multipart message only has text/html MIME parts
-8.0 AWL AWL: From: address is in the auto white-list

Office/cubicle location

I've decided that it's not the size of the office which matters; it's the location. While I wouldn't pass up a posh corner window office on the penthouse floor, that's not what I'm thinking of. I need an office deep within a maze of twisty passages, all alike. The effort required to find me would place a high premium on interrupting me, and hopefully I could get more done.

Then again, maybe this will ensure that I only get determined idiots bugging me. Hm.

Tamara and I went down to Sacramento to visit a friend for an extended weekend. It was fabulous -- we spent a few days at her family's cabin in the Sierras, got together with a bunch of college buddies in the Bay Area, and otherwise just hung out.

Remember that fitness challenge I was doing in February? Well, the results have been posted; I came in second in my age group again. The guy who beat me won't beat me next year, though -- if only because I'll move up to the next age group. :-)

Monday, March 17, 2008

Value of a dollar?

If you are paid in or have bank accounts valued in U.S. dollars, the news that Bear Stearns was sold for $2 per share -- in a deal backed with $30 billion [edit: I originally mistyped "million" here] of your tax dollars -- should be extremely worrying.

This means that Bear Stearns is valued at $236 million. Last Monday, when it was trading at $70/share, it was valued at $8.26 billion. In the span of a week, $8 billion dollars effectively vanished into thin air -- in other words, investors overvalued BSC by 3500%.

If we were talking about Moe's Junkyard and Hot Dog Stand and other places with shoddy or non-existent accounting, nobody would care. But we're talking about a bank, whose finances were tracked by other banks.

This is like going to the ATM, withdrawing $20, and then trying to buy lunch -- only to find you can't afford it because there's only 57¢ in your wallet. Or going to the gas station and finding that the price of gas has risen from $3.50/gallon to $122.50/gallon. All stuff which is supposed to be unthinkable.

Yet it's here. And I'm worried.

Saturday, March 15, 2008

Mirroring blog entries from Blogger to LiveJournal

I've gotten a few questions on how I'm using Blogger while having posts mirrored to LiveJournal. The magic is a little Python script I wrote, which I've sanitized (that is, I got rid of my hard-coded and tossed up here.

It's not for the faint of heart in its current form. You'll need:

  • A Unix-ish computer. MacOS X is probably sufficient, but I don't have a Mac to test it on. Sorry, porting this to Windows is just too much effort.
  • Python 2.5.
  • The GData API for Python.

You'll probably want to install it as a cron job. My crontab runs this every 15 minutes:

# m h  dom mon dow   command
*/15 * * * * /home/dacut/bin/blogger2lj.py

Why would you want to do this? In my case, I'm getting weary of the goings-on with the suits over in LJ land, but still have a bunch of folks who read the version over there. I guess we got settled in before LJ became the platform for emo tweens. Heh, live and learn.

Anyway, I'm not saying that others should move to a new blogging platform. This just gives you the option to move without having to cut ties with your existing social circle. Could you imagine what real life would be like if decisions like this dictated your social circle? "Bob, Linda, Jake: It's been great hanging out with you guys, and I'm going to miss you. But I'm changing mobile phone companies, and the new one doesn't take phone calls from you. Sorry."

Thursday, March 13, 2008

Oracle Poetry

It's interesting what you can stumble across when you turn stones over while walking along a path. Or, in my case, when you snoop on network traffic. Worry not; I was doing this for a good cause: to track down a problem with the Oracle database driver.
@"Oracle

Everybody follows
Speedy bits exchange
Stars await to gl@ow"
The preceding key is copyrighted by Oracle Corporation.
Dupl@ication of this key is not allowed without permission
from Oracl1e Corporation. Copyright 2003 Oracle Corporation.

It looks like this is a creative way of making sure nobody else writes their own software for talking to Oracle databases -- to do that, you would have to copy the poem, which is a violation of Oracle's copyrights.

Saturday, March 8, 2008

Either I'm losing my edge....

... or the jargon beast has eaten the Eclipse folks and changed their website.

Granted, I'm only develop in Java because it's the langue du jour in software circles today and am not overly enamored of it (or its fanboys), but I do have a reasonably deep understanding of the lingo. But I can't make heads or tails of the Eclipse Equinox mission statement:

From a code point of view, Equinox is an implementation of the OSGi R4 core framework specification, a set of bundles that implement various optional OSGi services and other infrastructure for running OSGi-based systems.

More generally, the goal of the Equinox project is to be a first class OSGi community and foster the vision of Eclipse as a landscape of bundles. As part of this, it is responsible for developing and delivering the OSGi framework implementation used for all of Eclipse. In addition. the project is open to:

  • Implementation of all aspects of the OSGi specification (including the MEG and VEG work)
  • Investigation and research related to future versions of OSGi specifications and related runtime issues
  • Development of non-standard infrastructure deemed to be essential to the running and management of OSGi-based systems
  • Implementation of key framework services and extensions needed for running Eclipse (e.g., the Eclipse Adaptor, Extension registry) and deemed generally useful to people using OSGi
As a peer of the Platform, JDT and PDE projects, the Equinox OSGi code is managed by the Eclipse PMC and ships with the Eclipse project major releases. The various other bundles developed here may ship independently and on different schedules.

On the other hand, I think I'd be more worried if I did understand this...

Saturday, March 1, 2008

February is over...

And that means the February Fitness Challenge is done. Which is good, because my body desperately needs a day off.

I'm rather pleased with how I did. I swam 121,000 yards (68¾ miles/110 kilometers), beating my goal of 100,000 yards.

In pictorial form:

Monday, February 25, 2008

Am I radiant?

If you're going to steal something from an abandoned building, I recommend choosing something other than the old, radioactive X-ray source. It's also probably not a great idea to sell it on eBay.

Friday, February 22, 2008

Vista -- sorry, it's my bad...

At least according to Slashdot, Amazon caused Vista to ship before it was ready by stealing a key Microsoft SVP, Brian Valentine. He's the SVP of my org at Amazon now.


They also point out that we're paying him something like $33M over four years; for once, though, I'll say it's money well spent. He's probably saved the company that much already by cutting out crap. Very effective leader in my book.

Monday, February 11, 2008

I wax statistical...

I'm watching "Deal or No Deal" -- they have a new gimmick where they're putting up multiple cases with $1 million (12 of 26 for the current contestant), replacing the other high dollar amounts on the board. However, I'm not sure it actually changes the gameplay at all.

Computing the expected value at any point is straightforward. The bank's offers, however, are not solely dependent on the expected value; the number of turns appears to be a factor. A comment on this blog post suggests offer = <value> * turn / 10 (where <value> is the expectation value). The offers the bank is making in the early rounds of the 12 $1 million case version, however, seem low -- almost as if the values on the board were not $1 million but the previous values. The episode ended before the contestant finished, so I'm left wondering at this point.

One thing which strikes me, however, is that the endgame is probably the same. If he/she makes it to the final round, in all likelihood (though I have yet to confirm this statistically) the choice will be between a low dollar amount and a $1 million suitcase. Maybe it's somehow easier to get to this endgame? Hm. You know, I'm going to have to do the math on this one.

Saturday, February 9, 2008

Oof...

Silly me. Silly fitness challenge. I swam just over 6 miles today (10,600 yards). That's the most I've done in a single day and my arms are complaining like crazy.

I'm currently at 23.8 miles for the month; my goal is 56.8 miles (100,000 yards), so I'm a good part of the way there. Let's hope my muscles don't fall apart.

Early results from Washington

At least if the precincts in my caucus were anything to go by, it looks like Obama will have a solid lead in Washington. The breakdown in my precinct was 188 (12 delegates) for Obama, 55 (3 delegates) for Clinton, and 19 (1 delegate) undecided. Other precincts split similarly. Turnout was heavy, as one might expect.

This is the first time I've ever participated in a caucus -- my previous experiences were voting in lame duck primaries in California and Pennsylvania. I quite like Washington's system; you don't register for a particular party, so you can go to either of the caucuses. Since McCain has the Republican nomination pretty much locked up, it made far more sense to attend a Democratic caucus. Listening to people campaign makes for a far more lively atmosphere; participating in the political process is more fun this way.

Sunday, February 3, 2008

When work intrudes on your personal life...

I just saw the Super Bowl ad for Pepsi Stuff. Unremarkable, except they flashed the Amazon.com logo for a fraction of a second. It's so weird seeing that. I forget just how big Amazon is sometimes. It's unusual, because the work I do often has a direct impact on the website.

At every other big company I've worked (IBM, Seagate, Cadence), my work usually ends up being a footnote for some minor offshoot project which never made it into a real product. Until now, it's only been the startups (AstroTerra, Neolinear) where my contributions actually have had a measurable impact for a customer.

Monday, January 28, 2008

The Fed's big 75 point mistake

This article in the Motley Fool is, IMNSHO, spot-on. The Fed's recent 75 point cut in interest rates is a crazy mistake.

Remember that the Fed's job is to tame inflation, not try to correct the economy. The economy simply cannot be corrected by central planning like this -- time has shown again and again that this produces results counter to the effect desired.

What does reducing the interest rate do? It makes the dollar a less attractive investment for foreigners -- who wants to buy dollars when the return is lower? Then basic supply and demand kicks in: a decrease in demand means the price (or exchange rate) goes down. Since a lot of our goods are imported -- including and especially oil -- their prices will go up.

The net result? Stagflation.

Thursday, January 24, 2008

OOXML bad? Try iTunes.

Technical folks like to wail about how defective OOXML (Microsoft's "open" format for Office) is. I agree -- with instructions like "render this table in the quirky way Word 95 did it", it's an impossible standard to implement.

However, that is nothing compared to the travesty that is iTunes. I've been having problems with my iPod; whenever I plug it in, iTunes spits up a DOS-like dialog box: "There is no disk in the drive. Please insert a disk into drive E:. Abort/Try Again/Continue." Googling suggests a possible fix: delete your iTunes preferences and reinstall.

Ugh. I'd rather not delete my license key and preferences, thankyouverymuch. So I decided to see what was in this file and if I could fix it myself.

I open up iTunesPrefs.xml in XEmacs and am presented with:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EQ Preferences</key>
<dict>
<key>EQPresets:129</key>
<data>
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
....
</data>
</dict>
<key>HTTP</key>
<dict>
<key>Cookies</key>
<data>
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NU
WVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElT
...
</data>
</dict>
<key>Keychain</key>
<dict>
<key>Keychain</key>
<data>
WqtWpl9/8NLX0QgFWU4ogEh/7aKP4SbSBd7LRQZ6G8NBJ8dt+AjSv4fs6UOK
qZQ1PkuO6SqRct7r67XozEPbT8LIyXCZsHZe3w5qcvBQyWOzOTUVOJXT74ZC
...
</data>
<key>iTunes Library XML Location:1</key>
<data>
QwA6AFwARABvAGMAdQBtAGUAbgB0AHMAIABhAG4AZAAgAFMAZQB0AHQAaQBu
AGcAcwBcAGMAdQB0AGgAYgBlAHIAdABcAE0AeQAgAEQAbwBjAHUAbQBlAG4A
...
</data>
</dict>
</dict>
</plist>

And so forth.

Ok, so I can understand wanting to obfuscate things like my DRM keys (presumably what's behind the Keychain bit). But equalizer settings? Application paths? Huh?

If you're going to store things in a locked down, proprietary format, why go through the lengths to format and parse it in an interchange format like XML?

Thursday, January 17, 2008

Ah, PL/SQL

Ah, the idiocies of Oracle's database language, PL/SQL.

Let's say you're trying to fix things for a few thousand customers who have managed to create duplicate accounts. You want to delete the duplicate accounts, which are listed in a driver table called DUPLICATE_ACCOUNTS. Knowing that committing a few rows at a time is a good thing on a running database, you might try something like the following:

DECLARE
    CUSTOMER_ID NUMBER;
    CURSOR CDEL_CUR IS SELECT CUSTOMER_ID
        FROM ADMIN.DUPLICATE_CUSTOMERS;
BEGIN
    OPEN CDEL_CUR;
    LOOP
        FETCH CDEL_CUR INTO CUSTOMER_ID;
        EXIT WHEN CDEL_CUR%NOTFOUND;
        DELETE FROM CUSTOMERS
         WHERE CUSTOMERS.CUSTOMER_ID = CUSTOMER_ID;
        COMMIT;
    END LOOP;
    CLOSE CDEL_CUR;
END;

Note the boldfaced delete clause. One might expect this to find the row where the CUSTOMER_ID is the same as the CUSTOMER_ID we just fetched from the driver table. But no! Oracle interprets this the same as:
    DELETE FROM CUSTOMERS
     WHERE CUSTOMERS.CUSTOMER_ID = CUSTOMERS.CUSTOMER_ID;


In other words, those rows whose CUSTOMER_ID is equal to itself -- which (since there are no null CUSTOMER_IDs) is every single freaking row in the database!

Yes, I did this (well, something similarly disasterous) at work today. Yes, it was a production database. No, thankfully nothing crashed -- our databases are so busy that this immediately got hung up waiting for locks that we were able to kill it once we realized what was happening.

I'm not a DBA. I just play one on TV.

Tuesday, January 15, 2008

I don't *want* to drool...

First off, I don't like Apple, the company. Steve Jobs is rather arrogant and his company reflects this character flaw.

But their products? Oooh. A laptop that's 0.16 inches (40 mm) thick? Yes, please.

I also acquired an iPod Shuffle over Christmas. It usually lives in a waterproof housing and goes swimming with me, though I'm still tweaking the headphones -- you need to prevent water from getting between the headphones and your eardrums to keep the music going. Apparently, the shape and size of my ears is at the tail end of some bell curve; I end up having to stuff massive amounts of silicone putty over my ears just to make it last more than a few laps.

Alas, I doubt that I'll own a Mac in the foreseeable future. I rarely have a need to upgrade my computer(s) wholesale -- they're like George Washington's axe, wherein each component has been replaced at various times so that none of the original parts still exist. If I remember correctly, my current machine started out life as a Cybermax (a company which went bankrupt years ago) AMD K6-2 with 512 MB of memory and a 8 GB hard drive, running Windows. It's now an Athlon 64 with 2 GB of memory, 250 GB RAID-1 array, in an understated Lian Li case, running Ubuntu 7.10.

Work is going well, though I can't post much in the way of specifics of what I've been working on. It's nothing exciting (well, to non-dev-types) or anything you'll hear about in the news, though; I only work on the backend systems, after all.