The hosting collective that I’m part of is changing servers this weekend (to an x2100, yay), so don’t be surprised if this blog is offline for a few hours on Sunday. It will also be changing its physical location and IP address some time over the next couple of weeks, so it will be offline (and mail to my personal address will take a little while longer than normal to be received) while the computer is being moved and the DNS changes propogate.
octavia butler
March 10th, 2006
Octavia Butler died two weeks ago. I’d just finished her most recent novel, Fledgling, a week before that. Very good; I think of her as really hitting her stride, for while I seem to recall enjoying her earlier novels, I thought Parable of the Sower was great. I should go and reread that book and its sequel, Parable of the Talents; I’ve only read the latter once, and I’m not quite as sure what I think of it. Heck, I should go and reread all of her books. (I’ve spent too much money on computer stuff recently – time to reread books I already own instead of buying more new ones.) Lots of things I like about them; I was about to write down a list of qualities that they share, but the results were too reductive, so I’ll just say that they’re good SF which touches directly on important social issues of our time.
She was 58 years old; if I had to guess, I would have thought she was a bit younger than that. Too early for her to die, though.
apple is bad
March 10th, 2006
Since I’m about to become a Mac owner, and since I seem to be far from immune to Apple’s reality-distortion field, I suppose I should spend a bit of time reminding myself why Apple is, in fact, a bad company.
First, why I like Apple:
- Nostalgia. My first computer was an Apple ][+; I got years and years of fun for that thing. Hard to imagine using the same computer for so long; I think we got it when I was about to enter sixth grade, and I used it through high school. I was very excited to get a Mac SE/30 when I went off to college.
- They’re the underdog. They’re doing well these days, but Microsoft they aren’t.
- They make products that are good in important ways.
(I could make a similar list of reasons why I like Nintendo, but that’s another blog post.) Also, they’re cool in a way that does have an effect in the circles I travel in.
Okay, those are reasons why Apple is good. So why is Apple bad?
- It’s not at all clear to me that they’re on the right side on the content wars. It’s good that they released an MP3 player that has forced everybody to deal with the fact that digital media is here to stay. But they iPod and iTunes are verging towards a monopoly, and I don’t see Apple as being a particularly responsible steward. iTunes is a closed system, they don’t let content vendors sell unencrypted content, and their encryption standard isn’t open. (Hmm: is it clear to me that they’re on the wrong side in the content wars? From the iPod and iTunes point of view, yes. But they sell software to make it easy to create content, which is very much a good thing.)
- They were one of the first bad guys in the software IP battles – remember the FSF Apple boycott over their UI patent? I wish I could say that those days were past, but I have no reason to believe that Apple wouldn’t happily do the same thing in the future; I really hope that this story will prove to be overblown, but I can’t say I’m confident of that.
- Speaking of the FSF, Apple is a big free software user these days, but I don’t see them giving back to the community as much as they should. Apparently they’re making less and less of their Darwin code available; they do admittedly make significant GCC contributions, but their GDB contributions are pretty sporadic. Not the fault of the Apple people working on GDB – they’re just too few people with too much work to do, and the up-until-recently dysfunctional behavior of the GDB community didn’t help matters. But I do think the company should put more money towards giving back to the free software community.
- Once my data is in the clutches of their software and hardware, they’re quite resistant to letting me have access to it in anything other than a tightly controlled fashion. The most obvious example here is not letting me use my iPod to transfer music – why can’t I transfer my music collection from my old laptop to my new one by just putting it on the iPod and plugging it into the new computer? But they’re doing this in much more petty fashions, too; for example, as this article points out, if you subscribe to a podcast with iTunes, and want to use the address of the RSS feed somewhere else, you can’t just cut-and-paste it!
Don’t get me wrong – I’d still rather support Apple than Microsoft. But I can’t honestly say that I think that Apple wouldn’t happily abuse monopoly power in the same way that Microsoft does; their underdog status means that they’re less like to have monopoly power to abuse, but that’s hardly praise. I still like looking at their stuff, and I imagine that I will like using the MacBook. But, at the same time, I really should figure out how to manage my iPod with free software…
sixteen cores
March 9th, 2006
It was nice to see our stock price going up today while the rest of the tech sector was falling; the cause was an upgrade from an analyst at Lehman Brothers. Apparently, he likes our new CFO; the CFO’s last name perhaps has something to do with that, but the analyst also thinks that the new CFO will signal a round of cost cutting. I confess to being a bit taken aback by the following quote from the analyst:
Last week, [the new CFO] indicated that all areas of Sun are being reviewed for reduction including the research and development department which had previously been relatively protected from cuts; however, given that most of the new products have been introduced, R&D may also be targeted.
I know we’ve been introducing a lot of good stuff recently, but why does the analyst think that we should stop? I think the Rock guys would have something to say about that; and while I’m a fan of our new Opteron servers, I don’t think it would be a good idea to rest on our laurels after introducing a pair of two-socket servers. Don’t get me wrong – if I wanted a 1U or 2U two-socket Opteron server with lots of maintenance and reliability features, they’d be what I’d buy (and, as it is, I’ve bought a couple of our slightly lower end one-socket Opteron boxes) – but surely we’re not going to stop there?
After all, AMD doesn’t just sell one-way and two-way Opterons: they also sell an eight-way model. So wouldn’t it be more fun if we, say, added an eight-socket Opteron server? At two cores per socket, you have quite a lot of processors to play with; I haven’t had a chance to use one of the prototypes myself, but I was pretty amused when I got e-mailed a boot message from one of the machines. I will say that using a 4P (all single-core) Opteron box does nicely speed up compilations; I’m not sure exactly how a 16-core server would do on our builds – the bottleneck might well have shifted away from processing power by then – but doubtless it’s the bees’ knees for many applications. (E.g. high-performance technical computing, if Tokyo Tech is to be believed.) If you need lots of threads to serve up web pages, or similar tasks, Niagara might be your machine; if you need a broader class of computing power, these guys should do nicely.
The article also mentions a forthcoming blade server. Which is, honestly, an area I don’t know much about, but I’m pretty sure that Andy and the rest of the NSG brain trust have come up with some nice designs there, too.
And meanwhile, the Itanium bad press just keeps on appearing…
gpl happiness
March 9th, 2006
I just got my new router; it warmed my heart to see the following right on front of the box:
This product may contain material licensed to you under the GNU General Public License or other open-source software licenses. Upon request, open-source software source code is available at cost from Linksys for at least three years from the product purchase date. For detailed license terms and additional information look at www.linksys.com/gpl/.
Who would have thought that the three-year clause was still being used in this day and age? (No need to write to them to get the source code, by the way: it’s available through that link.)
new theme
March 8th, 2006
I spent some time browsing WordPress themes; I found several that I like, and spent a few hours playing around with them.
My initial favorite was 2cDarkGrey; once I actually installed it, though, it seemed a bit dark for me. Also, there were various things that I wanted to tweak, and I had a harder-than expected time doing that.
So I started looking at lighter themes. My next try was Genesis; it was a bit too light, though, and the header was too plain for me.
After a little bit of dithering, I ended up on Kubrick, the new (since 1.5) WordPress default theme. Quite light, a bit of color contrast on the sidebars. I’m still not entirely thrilled with the header, but it’s okay for now.
Having said that, there were several things I didn’t like about it. For one thing, the text was too small for my aging eyes. (I really do need to get new glasses, but web designers also need to stop using small fonts.) I bumped up the text size, which then caused a cascade problem that the main body text area, already narrower than I’d like, really was too tight. In general, the page seemed narrow; I tried enlarging it, but that ran into problems with the images that the page uses. Presumably it shouldn’t be too hard to use gimp to widen those; for now, I left it at the original total width but shrunk the sidebar so the main text area had a bit more room.
Then I fiddled around with how it handles ul
items, and added, reordered, and removed stuff from the sidebar. (Ending up mostly where I started, but the reordering stuck.) And darkened the text (aging eyes again), and turned off justification. And here we are.
I’m happier with the new look than with the old. I learned something from the tour, about what’s important to me and what isn’t. I finally started customizing WordPress themes, which will help me in the future. I feel a bit stupid ending up with the default theme, but I can live with feeling stupid.
Having said that, I’m not thrilled with where I’ve ended up. My main current pain point is the header – aside from limiting my width options, it looks pretty clunky. It would really help if I could come up with some sort of picture to use as a header; as it is, I’ve been ignoring themes that depend on an image at the top, and that’s not so good. I did like the texture that 2cDarkGrey used; maybe I could go with that after some sort of modifications? Or find a nice texture elsewhere? Dunno.
(Side note: I am not so happy with various aspects of the new interface for writing posts. I’ll live with it, though – downgrading is bad.)
test post
March 8th, 2006
I’ve just upgraded to WordPress 2.0.1. Seems to work okay; the main difference from my point of view is that the interface for writing posts has changed completely. (In general, the administrative interface looks quite different.) I suspect that I’ll end up liking the new interface, but it will take me a little while to be sure. (And to train my fingers that C-b doesn’t mean to go back a character – C-f, C-p, and C-n still work, though.)
Next step: see if I can find a theme I like. The old WordPress 1.2 theme doesn’t look so great any more…
random links
March 8th, 2006
Cleaning out my list of saved links:
- A visit to the Ghibli museum.
- Lean manufacturing books are next up on my reading list.
- I’m glad some Congresspeople are seeing the DRM light…
- Because the bad guys aren’t about to let up.
- I repeat: the bad guys aren’t about to let up.
- Google’s hardly a saint, either.
- Some random 37signals posts.
- I’m curious, though not necessarily curious enough to trek up to San Francisco just for that purpose. I’m sure Jordan would be up for a joint visit, though.
- People, process, problems.
- Okay…
- Looking for textures?
- Letterfu.
- My favorite is the “Quality With a Name” bit.
- I really like the wall palimpset.
- Something I’m bad at.
- Shades of Beggars in Spain.
Wow – that was too long. (16 bulletpoints, if my mathematical skills haven’t atrophied.) In a spirit of kaizen, let’s see if we can uncover some underlying process problems.
First, an analysis of what was in my saved links list. (There were seventy-odd entries, now only thirty.)
- Book recommendations.
- Music recommendations.
- Articles that I thought I might want to blog about.
- A bunch of GPLv3 stuff. (A special case of the previous, but big enough to break out.)
- Articles containing interesting-looking links that I didn’t have time to follow up on.
- Articles linking to works in other formats (podcasts, mostly) that I haven’t had time to look into.
- Articles from Lawrence Lessig’s blog and How the World Works. (Special cases of one or both of the previous two, but big enough to break out.)
- Stuff from Simon Phipps’ del.icio.us feed.
The last category is most relevant to this discussion: if I’m counting correctly, 8 of the 16 bullet points came from that feed. I was aware of them building up, but I felt bad at not only posting links without adding value myself, but not even being motivated enough to dig up my own interesting links, instead sponging off of somebody else! After all, if that’s what people want, they can just subscribe to Simon’s feed themselves. But, thinking about this more clearly, feeling guilty about that is pretty silly. Some better thoughts:
- Most of you doubtless don’t subscribe to his feed, so I am potentially adding value by copying a judicious subset of the links. (If you like them, though, I encourage you to subscribe to his feed directly.)
- The fact that I enjoy reading his feed means that I shouldn’t feel guilty about occasionally providing links with minimal commentary myself. I wouldn’t be happy with this blog if I didn’t spend a fair amount of time immortalizing my own thoughts, but there’s no need to do that exclusively.
- The fact that I enjoy reading his feed suggests that I should spend some more time browsing del.icio.us for other interesting feeds. (Then again, it’s not like I need to spend even more time web browsing.)
So: process improvements.
- Once every week or so, make a post of random links, for stuff I’ve seen recently that I want to point out without commenting on.
- While I’m at it, go through my saved link list; for each link, figure out if I should delete it, do something with it, or postpone a decision for another week.
- Recommendations can easily get promoted into another list that I keep of books/music/etc. that I’m planning to buy or get at the library.
- Articles that I’m planning to blog about can get demoted into articles that I’ll just link to.
That should work well enough.
I hope that this post has satisfied your cravings for bullet points.
protected and package
March 7th, 2006
I have doubtless said this before, but the idea that protected visibility implies package visibility is screwed up. I’m in the midle of a refactoring where I’m creating a superclass out of an existing class; at some point in this refactoring, I wanted the compiler to force me to use the new superclass instead of the old class. No problem: I’ll mark the old class’s constructor as protected! But everything compiled unchanged: all its users are in the same package, and surely by marking it as protected I intended to grant access to all those classes, right?
Fortunately, there’s another way to get the behavior I desired: I marked the subclass as abstract. But really, package and protected should be orthogonal concepts. And, while I’m complaining, package should not be the default. And maybe package shouldn’t even exist, though I’m not sure – that is a delicate area of language design.
killer 7
March 7th, 2006
If memory serves me well, about a year and a half ago I was feeling kind of down on video games. The start of this generation had been quite nice (largely because of the Dreamcast), but for the last year or two, it had seemed like the best I could hope out of a game was that it was a well-executed example of ideas I’d seen before. Not that there’s anything wrong with polishing ideas, but I’d prefer a bit more novelty in my diet. Fortunately, matters quickly improved: Katamari Damacy, GTA: SA, Shenmue II, Jade Empire, Resident Evil 4, and Shadow of the Colossus are all great games, and I learned something from each of them.
Which brings us to today’s topic, Killer 7. Honestly, I just don’t know what to make of this game: it’s so different in so many ways from what I’m used to that my brain is having a hard time figuring out how to approach it. I’m not convinced that it’s not better than all of the games mentioned above (though what could be better than Katamari Damacy, really?); it probably has more flaws than any of them, but I also suspect game designers will still be (or should still be) learning from this game a decade from now.
I’ll start with my current basic categorization of video games: is this a game that I would allow Miranda to watch me play, or is it a game that I don’t want Miranda to watch? (That categorization is why I’m normally in the middle of two video games at any given time: right now they are KOTOR, in the former category, and God of War, in the latter.) This game unquestionably falls into the latter category; I don’t mind a bit of gun violence, but the weird creatures attacking you in the game are enough to disqualify it. (I don’t want to have her waking up screaming after dreams of invisible vaguely zombie-like monsters that lurch towards you, grab you, and explode.) I’m not sure I feel like explaining to her about the character who can break through barriers by slitting her wrist and spraying out a sheet of blood. And I’m not sure that she would react well to walking through a laundromat, opening a dryer, seeing a severed head in there holding a ring in its mouth, and having it talk to you. Probably the blood-spattered ghost of a boy that warns you about each level’s miniboss would not go over entirely well. And then there’s Iwazaru, who periodically gets lowered down from the ceiling via wires, wearing a red latex suit, a strange harness, collar, and straps across his face, whispering secrets to you; probably Miranda would be fine with him, actually, but it’s hard to say for sure.
(Completely unrelated note: there would seem to be an opossum walking through our backyard. Fortunately, the Zippy defense squad is on the case. I didn’t realize that opossums carried leaves and branches with their tail like that.)
The way the game handles multiple characters is fairly unusual. Multiple characters have always been a bit of a pet peeve of mine, though I won’t repeat my rant here; in this game, you have a choice of eight characters, who are all supposed to be alternate personalities of the same person, or something like that. (I’m not entirely clear on several aspects of this game.) You can switch between six of them at will (the other two of them are only for special circumstances), and they each have a special ability that you need to use in appropriate areas. It mostly feels like a game with a single character with several abilities, but there’s a bit of an RPG feel in there as well, since there’s a low key leveling-up system (using blood you’ve collected from killing enemies) which affects each character separately. It’s an interesting enough setup; works well enough, though I won’t say it’s rampantly successful. For one thing, the abilities are only used in certain specific areas; they could provide more differentiation between characters in the core gameplay, so that you could have a choice as to how to approach the game. (Which, actually, might not work so well in as strongly scripted a game as this one.) Also, most of the abilities are rarely used; for example, the aforementioned wrist-slitting only comes into play two or three times.
The game also tells you where to use each ability. (Though I think there’s a way to turn off those hints.) Which, surprisingly, doesn’t bother me too much – one of the things that I’ve learned over the last year or so is that, while I like it if a game requires me to do some amount of thinking, I’m actually pretty flexible on the exact amount as long as there’s enough going on to hold my interest. There are a few other puzzles in this game (e.g. using information from a poster that you saw elsewhere in the level to unlock a drawer); fine by me.
It’s done in a cel-shaded art style; I haven’t been thrilled with examples of that since Jet Grind Radio, but it’s a great fit here. Some levels also feature a distinctive style for their cut scenes – one level, for example, uses a superhero comic book style, and another level has a key enemy introduced in a very amusing anime fashion.
It doesn’t use normal controls for character movement – if the controls from the early Resident Evil games drove you crazy, then don’t think about picking this one up. You don’t use the joystick to move around: instead, the green button moves you forward, while the red button turns you around, so you can move in the other direction. And at some (but not all) places where the scenery branches (intersections of streets or corridors, fronts of buildings, etc.), you’re given a choice of directions to move in. If you hear a spooky laugh, then you probably want to select the R-trigger, which drops you into a first-person mode where you can look around freely (but not move at all). Which raises two questions:
- Why did they do this?
- Why isn’t it driving me crazy?
My best guess at an answer to the first is that it allows the designers to control the presentation and focus of the game. The game isn’t about you running around freely, exploring everywhere, developing a fighting style, searching everywhere for objects. It’s about you going where they want you to go, fighting enemies only as it advances the plot or as necessary to keep you from being bored while moving from place to place, solving puzzles in tightly scripted situations.
And my answer to the second question then is, their design is rich enough that I’m happy to put myself in the designers’ hands and go with the flow. The visuals, the character and level design, the plot are all the product of a strong vision; I’d rather explore that vision than fret about the fact that the game mechanics aren’t what I’d normally prefer. Don’t get me wrong – open-ended game play is great, too. But several games over the last year have taught me that games can do quite a lot of scripting for you, as long as they throw in a little bit of work for the game-player – witness the recent proliferation of Shenmue-style QTE’s, or the whole last chapter of Shenmue II.
There’s more to say about the game – its resurrection method of handling death deserves consideration, and I should say more about the plot (for that matter, I should figure out what on earth is going on in the plot) – but I’ll stop here. One question that remains: has Capcom always been this good? I am very glad that I played both this game and RE4, and Okami is the upcoming game that I’m looking forward to the most. In the past, I haven’t played many of their games, and in fact there are several well-regarded series of theirs that I’ve ignored completely; was that a mistake? I should investigate further.
my first time using bittorrent
March 7th, 2006
I need to download Fedora Core 4 x86_64 CD’s, so I thought I’d give bittorrent a try: the idea of distributed download servers appeals to me. It didn’t work too well, though: the download speed reached 50KB/sec and then stayed there. So, after about 10 minutes, I gave up, and downloaded the images off of a mirror site.
I assume that this works better if you’re actually downloading something popular?
populated database
March 5th, 2006
I’m now fully populating the database with information from my collection. It took longer than I expected; I’ll keep that in mind the next time I plan to work in a unfamiliar area. (It wouldn’t have been so bad, of course, if I were working in chunks larger than an hour or two at a time.)
The process was reasonably pleasant, and I ended up with a nice abstraction layer hiding the details of the SQL code. Some sort of layer was necessary just for testing purposes, though perhaps I could have found a pre-written testing layer. But writing my own testing layer wasn’t very hard – right now, I’m using a very small subset of JDBC, and doing just a handful of SQL queries – and it actually ended up making the code much more readable. For one thing, it helped me make a clean separation of SQL code from non-SQL code – I only used java.sql classes in three short source files, and the only job of those files is to translate into java.sql classes. (For the curious, they are implementations of abstract interfaces called SqlRow, which is an abstraction of a single row in a table; SqlRows, which is an abstraction of a collection of rows in a table; and SqlSource, which is an abstraction of a connection to a database.) And, for another thing, the abstraction layer gave me a convenient place to translate from my custom types into standard types – otherwise, I’d either have had to come up with a layer whose only job was to do that translation or done the translation by hand in many places.
Maybe the single most annoying thing was handling dates. I was aware that Java has a class java.util.Date
which is now frowned upon, in favor of a superior class java.util.Calendar
. And I’m even somewhat sympathetic to that idea – it’s good for people to have to deal with internationalization issues, and time zones are certainly part of that. But I don’t care about time zones for this project – all I care about are dates, and I can’t say that I’m too interested in the argument “not everybody uses the Gregorian calendar”. So the upshot was that I had written my own Date class (which was useful for other reasons, e.g. to handle books that I’m in the progress of reading right now).
But when writing out to SQL, I wanted to do things the appropriate JDBC way, which meant using its class java.sql.Date
when writing out SQL dates. I was hoping that I could easily convert from my own Date class to the JDBC Date class – after all, an SQL date is just a date, it doesn’t have a timestamp, so there’s no need for, say, abstractions to handle time zones. And the JDBC Date class does have a constructor taking a year, month, and day, which I could have used, but it’s marked as deprecated. Instead, for better or for worse, you’re supposed to use the constructor whose argument is the milliseconds that the date started after January 1, 1970. (The argument can be negative, for dates before 1970, though the docs weren’t crystal clear on that matter; they also mutter something about normalization, which I can’t say I understand, either.)
After a while, I finally came up with the correct code: the right thing to do turns out to be
new java.sql.Date(new java.util.GregorianCalendar(date.year(), date.month() - 1, date.day()).getTimeInMillis())
Which is wrong on several levels. For one thing, when converting from one abstraction of a date to another abstraction of a date, I shouldn’t have to talk about milliseconds. For another thing, “getTimeInMillis” is a lousy method name. And for a third thing, why are months numbered from 0 to 11 while days in a month are numbered from 1 to 31? Sigh. I am glad that I’m starting to understand how to use Java dates “correctly”, but I’m not impressed with this aspect of JDBC’s design.
Anyways, I’m pretty sure I have the database populated correctly now. (And doing so turned up a couple of mistakes in my database schema, too.) The next thing is to write code to read from the database. I’ll have a bit of free time in the middle of the week, so I’ll be able to get it started soon; at first I was optimistic that I’d actually be able to finish it in the middle of the week, but now I’m thinking it will be a bit trickier than that. If it were just a matter of writing JDBC code to read from a database, then I don’t think that would take too long – it would take a little while, because I’ve never done that before, but I think I understand all the ideas, and have a pretty good idea of what most of the new necessary abstractions are.
(To be sure, I’ll probably spend a fair amount of time playing God of War instead of programming. Good game, though not quite as superb as some people make it out to be; not something to play while Miranda is around, though, while I can program when Miranda’s around, so I’ll probably spend a fair amount of time on that. And I have some blog reading and writing to do; in particular, I want to talk about the stunning Killer 7.)
But, setting aside other matters competing for my time, the next step will also force me to approach certain notions from a quite different angle than I’m doing now. For example, right now, when I create a book, I add that book to an internal table attached to that author, so that, when I ask the author to generate its HTML page, it can list all the books by that author. But, in the new world, the right way to generate that list is to look it up in the database; so, instead of keeping a collection of Books in each Author, I’ll either want each Author to contain a pointer to some sort of database abstraction, or I’ll want to pass a database abstraction to the method on Author that generates the HTML. Right now, I’m leaning towards the latter, but it’s not entirely obvious to me what the pros and cons are; I can easily imagine proceeding a fair way down one path, realizing that it’s a mistake, and backtracking and heading down a different path. (Hey, I just thought of a way to get the former to work well – each entity (Author, Book, whatever) already has a ‘Key’ associated to it; I could stick the database backpointer in that Key. That would only require minimal alterations of my current code, and it’s not immediately obvious to me that doing so would be inelegant.)
I am looking forward to the day when I can get back to adding new features. I really want to add a list of links to each entity, so I can have pointers from dbcdb to the blog, not just pointers in the other direction. And I just finished a book with three authors, which I currently can’t represent. And I’m thinking that it’s time to add more media types – CDs, certainly, and eventually DVDs. And at some point I want to switch to Ruby: I already suspect that working in a typed language will make my next step harder than it could be.
bok bun ja
March 5th, 2006
Last night, I had dinner with friends at Korea House in Santa Clara. (Which I recommend.) They had a raspberry wine on the menu, which I decided to try; it was okay, but the best part was the explanation of the name (punctuation, grammar as in the original):
A hungry monk, eating wild black raspberry on the mountain by chance found his chamber pot turned over while urinating the follow morning. He knew his urine was too strong because the wild raspberries had reinfonced his stamina. As a result, the fruit was first called ‘Bok-Bun-Ja’, ‘Bok’ meaning ‘turning over’ combined with ‘Bun’ representing ‘chamber pot’ and ‘Ja’ which stands for ‘man’.
shopping for computer
March 4th, 2006
I just got back from a shopping trip for accessories for the Ultra 20. I ended up at Micro Center, which was a good choice – fine price and selection, focused on computers (unlike, say, Best Buy), and not only do they treat people who enter in their store as potential customers instead of potential thieves (which is why I refuse to go to Fry’s), they even have a good number of sales staff (unlike no end of stores out there). I will be happy to patronize them in the future.
So now I have a monitor (19 inch 1280×1024 LCD, nice to see how cheap those are), a keyboard with a touchpad built in (good thing, saves me from having to find a pointing device that won’t kill my hand and figuring out where it will live), and a few cables. And I was in a good mood, so I bought an external DVD writer (hmm – why didn’t I buy an internal one? I thought I had a reason for that choice, but I can’t remember what it was), so I can back up the computer, and a couple of external hard drives. The main purpose for the latter is to back up my CD collection – a lot of the CDs are starting to go south, and I’d rather back them up raw instead of as MP3s. (Disk space is cheap, after all.) And having that in an external hard drive means that I can store the backups off-site. (We just got a larger safety deposit box; I have to fill it up somehow!)
The Ultra 20 and the networking stuff should be here by Thursday, so I guess I’ll spend the end of the week setting that up, and moving my home Linux use off of this laptop. (I’ll still use this laptop as an X terminal until the new laptop arrives. And probably even occasionally after the new one arrives, since Liesl will want to use the new one during those rare moments when she can pry herself away from Animal Crossing.) The only remaining task before then is to download and burn a set of x86_64 FC4 CD’s; easy enough to do.
showing all but first line from a file
March 4th, 2006
Just in case anybody needs to know this: one way to see all but the first line of a file is to run the command sed '1 d'
on it.
(I was sure there was a good Unix way to do this, but it took me about 20 minutes to find it.)
break out your chocolate bars
March 3rd, 2006
You’ve (or at least I’ve) got to love this:
Among those who ate the most chocolate–averaging more than four grams a day–average systolic and diastolic blood pressure was 3.7 and 2.1 millimeters of mercury lower than their chocolate-spurning peers. This result did not hold true for other sweet foods nor did it vary among men who also smoked, were inactive or consumed a lot of alcohol. And, despite being strongly associated with greater intake of calories, chocolate lowered the overall risk of cardiovascular or any other disease by as much as 50 percent.
I was a little dubious, though: the high consumption group only averaged four grams a day? A bit of googling turned this article up:
The 4.18g/d intake of cocoa in the highest tertile is equal to 10 g of dark chocolate a day and about a 10th the dose used in most intervention studies, Buijsse said. This suggests that a small amount of cocoa may lower blood pressure.
So that 4g is cocoa powder, and even dark chocolate (by which they mean what exactly – 50%?) contains a fair amount of other stuff. Still, 10g of chocolate is a really low amount: most evenings, for example, we split a bar of good chocolate three ways; that gives us each an ounce or so of chocolate, which is a good deal more than 10g. So I guess I can’t really use this as an excuse to further increase my chocolate consumption; but I’m not about to stop eating the stuff, either.
I would appreciate it if researchers could next turn to proving that milk fat is good for you. I suggest cheese as a place to start – honestly, does it sound all that implausible that some kinds of cheese might have mysterious health benefits? I suppose ice cream would be a bit of a stretch, though…
oldest saved post
March 3rd, 2006
I finally got around to knocking off the oldest saved post in my RSS reader today; only 79 more to go. If that were my mail inbox, that number would be just fine, but I kind of doubt that I’m going to take the time to seriously think about (and blog about) what’s in those posts. So: time to wield the axe a bit, I think.
Having said that, I’m glad that I finally got around to listening to the webinars mentioned in that blog post: good to firm up my understanding of what product managers, project managers, and program managers do.
plum blossoms
March 3rd, 2006
One of the most pleasant surprises about this townhouse was that we discovered, a few months after moving in, that the trees in between the houses are flowering plums. It’s really beatiful for a week or so every year; like having our own cherry blossom festival.
I was hoping to share some pictures with my new camera, but this year has been a bit of a downer. I’m not sure exactly what the cause is, but it probably has something to do with the weather – two weeks ago, we had record-setting highs (the paper said mid seventies, but I think it hit eighty one day), last week was kind of chilly, and this week had quite a bit of rain. So the trees probably didn’t quite know what to think; two of them bloomed a week and a half ago, and the rest have finally decided to send out some number of blossoms, but they’re not putting much conviction behind it.
living with the animal kingdom
March 3rd, 2006
When I got home this evening, I noticed that one of the dogs had pooped on the carpet. Which sometimes happens; they’re wonderful in many, many ways, but housebreaking is not their forte. Anyways, I took them out, and the phone was ringing as I got back in, so I ran to answer it. Once I finished that (vacation plans firming up, yay), I surveyed the damage; it turns out that they basically had the trots all over the downstairs carpet. Sigh; good thing that we were planning to do a round of steam cleaning this weekend.
So I started cleaning this up. Then I noticed little circles of poop in the kitchen. A bit of inspection revealed that, in fact, I’d tracked it in there; I guess I stepped in something while running to the phone. Oops. I hope I got rid of all of the manifestations; not sure.
At some point during this, I looked around in the kitchen, and noticed that the ant trails had increased. For whatever reason, we’ve had a lot of ants in our kitchen the last half-week or so; maybe the wet weather is driving them inside? They’d mostly been walking over the cutting board, which I really don’t understand – I suppose there must be some food ground in there (the turmeric stains suggest as much), but really, not a lot. At some point today, though, they discovered the Honey Nut Cheerios, which were very much to their tastes. The rest of the cereal cabinet seems okay for now, though. (And we learned long ago to store the high-risk stuff in ziplocs.)
At about this time, Liesl came home; with her help, it didn’t take too long to get the ant problem dealt with. And, honestly, the whole thing wasn’t that bad; one side effect of having a kid is that you get pretty blase about poop – it’s just a fact of nature. I’m glad this sort of thing doesn’t happen every day, though, and it’s just as well that we’re going out with friends on Saturday instead of inviting them all over for dinner – they might think twice about eating our food if they saw the number of ants in the kitchen.
Anyways, I hope that I have brightened all of your weekends!
i want a customer
March 2nd, 2006
A few months ago, I finally started appreciating the Customer role in XP: it made a real difference to us when we stopped doing our iteration planning ourselves (with advice from others, to be sure), and started having somebody else pick the stories for each release. (We still plan the work in our weekly iterations ourselves, within the framework given by the monthly release plan; this doesn’t seem to me to be a particular problem right now, thought it’s something to think about in the future.)
But that’s only half the work that the Customer is supposed to do: the other half of the work is that the Customer is supposed to write the acceptance tests. (With the help of a Tester, to be sure.)
We’re not doing that; I’m starting to realize how it’s hurting us. A week or two ago, for example, I started discussing the user interface for a feature we were implementing with somebody who is more customer-facing; it turned out that his ideas for how it would best be designed were considerably different from our ideas for that. I’m really glad we had that conversation; it would have been nice if similar conversations had happened at other times recently. As it is, I’m worried that there are other features that I consider “done” that will magically flip to being un-done when somebody else looks at them and discovers that they’re not implemented the way they should be. Or, more frighteningly, the features make it out to the wild as-is, and real customers don’t like them because of things that we could have fixed months ago, if only we’d communicated better.
And it’s not just that I privately consider them done: I’m being asked to sign off on features as being done without feeling that I really know how other people are interpreting my sign-off. Which is an uneasy situation to be in: part of my job is to take responsibility for certain things, and I’d like to know exactly what other people see me as taking responsibility for.
Of course, it’s not like I’m without options here: I should start pushing back more on these issues. It will be a bit delicate figuring out the most productive way to do so – our current resources aren’t going to magically change, and there’s nobody who’s a perfect fit for the Customer role in our current setup. Hopefully we can start making incremental improvements. And it helps a lot that we don’t have much of a culture of blame: it’s a lot easier to be courageus in situations like that.