[ Content | Sidebar ]

career paths

March 27th, 2006

I planned to say more about First, Break All the Rules, but I seeem to have gotten excessively sidetracked on computer and programming geekery, and worse yet geekery of relatively limited interest. For which I apologize: I’ll try not to let it happen again to quite that extent. Anyways, one last thing that I liked about the book: it has a very refreshing approach to how career paths should ideally work.

Recall that the book’s focus is on having employees spend as much time as possible doing what they’re most talented at. Unfortunately, many traditional career paths involve changes requiring quite different skill sets: a programmer might traditionally be promoted to a manager role, for example, or if a programmer resists that but still wants to move up, then he or she might turn into a software architect.

I happen to like managing and I happen to like designing software, and I wouldn’t claim that my programming skills are irrelevant to those ends, but ultimately the skills required for the jobs are different ones. And I’m not sure that I enjoy either managing or software architecture more than simply programming. So it’s refreshing to see somebody say “we shouldn’t present those job transitions as the only goal for our best programmers”. And the authors back up those words with, for example, recommendations that employees and their managers should have overlapping salary ranges, with the employee potentially earning more than the manager.

But, now that I write that, I realize that my take on the matter is rather different from the authors’. I don’t want to give up programming; but that doesn’t mean that I don’t want to, for example, have a say on the architecture of the software that I’m working on. The truth of the matter is that I want to exercise a range of my own skills, so I’d rather not have the pigeonholing that is present either in a traditional programmer-to-software architect career path or in this book’s presentation of those as distinct roles with less of a hierarchy between them. And it’s not just my skills: I’d be happiest if everybody around me was doing a mix of getting their hands dirty while improving the software architecture. (Part of the reason why I’m attracted to XP, doubtless.) Of course, this might change if I’d seen a situation where having separate software architects worked really well; in my brief programming career, I haven’t had that experience.

Some more random comments that I don’t have time to string into a coherent essay:

  • I’m probably excessively biased against the notion that programmers’ managers should be ex-strong programmers. The reasons why I don’t like it are that the justifications that I’ve seen for that claim strike me as after-the-fact, and that I learn more every day (or at least every month) about the different skills managers need. But those aren’t the most solid of reasons, and I do accept the fact that, for example, managing a programmer is different from managing an accountant, and that some domain knowledge is probably useful to that end.
  • A counterpoint to the notion that managers and employees should have overlapping pay ranges: one very good point that Andy Grove makes is that an effective manager’s actions will have much higher leverage than a regular employee’s actions, so have more value to the company. Then again, equating value with appropriate salary is pretty naive economics: there is this notion of supply and demand, for example.
  • The book that I’m currently trying to integrate into my thought talks about how job transitions are increasingly horizontal. Which fits in well with the notion of focusing on what you do best.

(badly) generating html from sql

March 27th, 2006

I’m now generating my HTML pages based on the data in the SQL database. I’m still first assembling all the data in memory using Java method calls, and writing that out to an SQL database, but then I throw away the in-memory copy and regenerate it from the database.

I can’t really say that that step is done, though. There are a couple of things wrong:

  1. I’m generating the various indices (e.g. the list of books by a given author, or the list of recently read books) in a very bad way: basically, I read all the data from the database into memory and generate my own lists out of Java collections, instead of using SQL queries. Given that I’m generating all the web pages statically at once, this is fine from an efficiency point of view, but it’s lousy from a “learn about SQL” point of view.
  2. The separation of responsibilities isn’t nearly as clean as I’d like: in particular, I’m using proxy objects which get lazy-initialized from the database (which is fine, though I’m thinking of getting rid of that eventually), but the code gets confused at various points between the proxy and the object that the proxy creates underneath it.

Don’t get me wrong: it works, which is good. And to make sure it works, I even ran the one acceptance test that really matters, namely generating all 344 web pages corresponding to the current list of books/games/authors/etc., and checking that none of them changed betweend the old and new ways of generating them. I was pretty sure that my unit and acceptance tests were good enough that there wouldn’t be any bugs remaining; I was wrong. To be specific, I was generating links for volumes in a series incorrectly in index pages (point 1 above), where the bug was masked in the tests by point 2 above. Sigh, but at least it means that I have reasonable instincts for bad spots in the code.

Fortunately, attacking the first item will greatly ease the second, and I have a pretty good idea how some of this will work. The one problematic aspect is exactly how I’ll generate the indices, in a way that is nice SQL but still easily testable without finding an in-memory SQL database. Take, for example, the list of books by an author: if it were as simple as select * from books where author_id = AUTHOR; then that would be easy to test. But that doesn’t work for two reasons:

  • If a book is by Fred and George, then I want it to be mentioned in Fred’s page, George’s page, and Fred and George’s page. Which means I have to do that query for various values of AUTHOR.
  • If a book is a volume in a series, then its author_id field is NULL: the value is taken from the series’s author_id field.

So the right SQL query to use is reasonably complicated; and I certainly don’t want my testable SQL-like interface to handle that level of complexity. I think I’ll probably add some sort of ‘indexing hook’ that can generate a more complicated SQL query in the SQL version and evaluate custom Java code in the test version; not my favorite solution, but I can’t think of any other ideas offhand.

I’ll do that next. (Which will take a while, I think.) And then I’ll write a CLI tool to add stuff to the SQL database and modify it. At that point, the SQL transition will be more or less complete, and I’ll be able to get back to making changes that actually affect the HTML I’m generating.

Which I devoutly want to do, but this time hasn’t been wasted. For one thing, I’m learning about SQL, which was after all the goal of the whole exercise. For another thing, it’s very interesting watching the changes that the code undergoes as a result of this annealing, and trying to guess how the code will want to change next. I get the feeling that, when I’m done with the SQL transition, I’ll have the same number of lines of code as when I started, but 75% of them will be different and the structure will be somewhat improved. We’ll see.

Incidentally, while I was at it, I finally got around to installing viewvc (a pity there isn’t a released version with Subversion support, but the daily snapshot I grabbed seems to work fine), and tweaking my acceptance test framework to, among other things, print the time that each test takes.  By far the longest test is the one that connects to Amazon web sites in the US, UK, and France, to verify that my links work.

duct tape

March 26th, 2006

The old laptop’s screen is now being held on with duct tape. Truly a marvelous substance.

Fortunately, Apple claims that I’ll get the new laptop in the middle of the week.

panini is live

March 25th, 2006

The new Ultra 20 (panini) is all set up now – I’ve transferred my home directory, and I’m reading mail from there, doing svn commits there. I still haven’t set up backups properly, but that’s something I wasn’t doing right on the laptop, either, so it’s not a reason to hold up the switch.

Notes:

  • Running in 64-bit mode seems fine. The only problem I’ve noticed so far is that various browser plugins (e.g. flash) aren’t available in 64-bit mode; if I really cared, I’d figure out how to run a 32-bit browser there, but as it is I don’t use those plugins at all frequently, and I’m planning to do most of my web browsing off of the laptop (my old Linux laptop now, my MacBook when it shows up.
  • I learned a bit more about Subversion; rather than try to move the repository using rsync, I decided to dump and restore it the right way. While I was at it, I converted it to use FSFS instead of Berkeley DB to store data, and stuck in an extra directory level in the hierarchy. Following which I got to use ‘svn switch’ for the first time.
  • It took a while to get the local web server working. Which I use mainly for dbcdb testing, though it’s occasionally useful to be able to look at my public_html directory, too. SELinux was the culprit; apparently the security contexts have gotten stricter in FC5. (Either compared to FC4 or compared to whatever I first installed on this laptop; not sure.) I learned about ‘ls -Z’ and played around with running ‘chcon -t httpd_sys_context_t’ on various files; ultimately, due to various peculiarities in my setup (including that ~/public_html is a symbolic link into a directory contained in a directory where I don’t want to fiddle with contexts), I turned off SELinux for httpd. It’s not accessible outside of my local network, so that’s not a big deal; I might still try to play around with more ways to get this right, though.

So that’s largely over with; now I just have to wait for my MacBook to show up (1-3 day lead times? Yeah, right), and I can go through another phase of new computer geekery. And then I’ll be able to settle down and get back to work! (So to speak.)

random links: march 23, 2006

March 23rd, 2006

Hmm: having been confronted with a few posts that look similar to the above in other blogs, I am starting to see the wisdom of delicious (no, I am not going to go and figure out where to put the damn periods): if I were reading this, I’d rather see a couple of links a day than ten all at once, and I’d rather get to the referenced articles by hitting v C-w j than by, horror of horrors, clicking the mouse.

On the other hand, I really don’t like the idea of handing out my own data without saving a copy of my own, and some people may prefer seeing something like the above. So maybe I’ll adopt Simon Phipps’s solution and combine a delicious feed with a periodic list of links aggregated in a single list in the blog.

Let’s turn this into an experiment, and see if just mentioning Simon’s name is enough to get him to notice, or if I have to actually link to his blog: Simon, do you have some software to generate your daily delicious links posts? If so, could I have a copy?

bad joker

March 23rd, 2006

I get DNS service through my registrar; twice this week, it has failed. (The only reason why I can write this is because I’ve edited my hosts file.) Clearly, I should look for other options; problems happen, and I don’t want any more single points of failure than necessary.

The server that hosts this blog runs a nameserver as well; if I can mix that with my registrar’s servers, I’m all set. Otherwise, I guess I should look for a couple more friendly nameservers. I’m sure I can find some, but if anybody has any suggestions, I’m all ears.

i read way too many blogs

March 22nd, 2006

Sigh. But I can’t stand to unsubscribe from any of them!

guess the glyph

March 22nd, 2006

This contest is fun! (Marred by their misspelling of Sanskrit.) I’m quite confident of my answer on ten of them, pretty sure of a couple more, and am much less sure of the remaining four.

how laws get made

March 22nd, 2006

This article rather scares me – while there’s a lot I don’t like about the way my country’s government works, I had taken it for granted that laws were actually passed by the House and the Senate. Apparently not, in one recent case: why bother reconciling details between competing versions, if you can find a version that “was ‘certified’ by the leaders of the House and Senate”? Fortunately, this doesn’t seem to be the norm, but if “Republicans are evoking an obscure Supreme Court ruling from the 1890s to suggest that a bill does not actually have to pass both chambers of Congress to become law” then partisanship has gone way, way too far. (Big surprise, I know.)

We are not the only country dealing with this sort of thing: Tony Blair is apparently trying to make it possible for laws to get passed in Britain without going through the horrible bother of actually having parliament vote on the matter. I confess that I don’t have the background to evaluate this one – I have read reasonable-sounding complaints about how we had a major shift in the US last century when we started letting various agencies impose regulations on their own, and maybe that’s all that is going on here. But the British bill does sound a step beyond that.

It’s been kind of scary reading Blogzilla about British politics: see for example this story about the apparently impending national ID cards. How solid is the reporting in that blog?  And how many administrations are we in the US away from ID cards that are just as bad? I don’t think the answer is “zero”, but I wish I were confident that the answer isn’t “one”…

fc5

March 22nd, 2006

A week after installing FC4 on the new machine, I wiped it and installed FC5. Which one of my coworkers recommended; I was planning to do an upgrade, if for no other reason than to avoid having to burn 5 more CD’s, but it refused to upgrade from local images. (Sigh.) So I had to burn new CD’s anyways, and once I’d burned them, I figured that I might as well start from a clean slate, since there was almost nothing there.

Which was a good move, I think; it only took me about half an hour to get to (a little past, actually) where I was before, once the install was completed. At work I’ll try upgrading just using yum, though…

I guess next I should install Sun’s Java rpms (or am I supposed to get those from another source to make them more FC-friendly somehow?), then migrate my Subversion repository (will rsync work? Who knows, svnadmin is doubtless safer), then move over my home directory, and then I’ll start using it for real.

go france!

March 21st, 2006

I can’t wait to see how this turns out. Don’t get me wrong – the proposed law won’t leave us in an ideal situation, but I am glad to see a real stand for openness, and sensible penalties for making unauthorized personal copies.

On a related note, I laughed at this quote from an interview with Richard Stallman:

Officially, MPAA stands for Motion Picture Association of America, but I suggest that MPAA stands for Malicious Power Attacking All. And RIAA stands for Really Intends to Alienate the Audience.

(Good thing that I’m at least still allowed, both legally and technologically, to cut and paste snippets of text…)

new ip address

March 20th, 2006

The ip address for this blog (and my personal e-mail) has changed; it may take a day or two to percolate. And right now something strange is going on – I can’t resolve my domain names to either the old or new IP address. Anyways, it should sort itself out soon enough.

Many thanks to onShore for providing the hosting for myself and the other red-bean denizens. My bandwidth usage is almost non-existent; the usage for, say, the Subversion book is not so small.

yum update

March 19th, 2006

I upgraded packages on the new computer today. At first, everything went quite well – I was impressed at how quickly it downloaded the 300-odd packages it needed. (Apparently the networking works well!) And then it started installing packages; unfortunately, when it was most of the way done installing, the computer became unresponsive. (Largely: it would, for example, give me a login prompt, but go no further.) Sigh.

So I did a hard reset, and another ‘yum update’. Which got everything upgraded, but there were two copies of most of the packages lying around. I don’t know of any easy way to clean this up, and it was harder than normal to find the duplicates because, for some packages, there were supposed to be two copies (32- and 64-bit) installed! So I spent 30 minutes cleaning that up by hand; I think it’s in a reasonable state now, though chances are I screwed up in one or two places.

Then I decided to get ntp working. I have no idea why Fedora doesn’t turn that on by default; I tend to think that getting the time right is important. After some amount of futzing, I got it started on the new computer, and then decided to add the new computer as an ntp server for the laptop. (For now, I’m also having the laptop slave off of other servers as well; I may get rid of that.) This took a while – the laptop’s ntp.conf file was rather out of date (Fedora used to use inappropriately restrictive defaults), and I also had to punch a hole in the new computer’s firewall. But that seems to be all working now; the new computer’s time is still a little off, but the difference is down to about 30 milliseconds by now. So it should be well-syncronized soon.

from 1970

March 19th, 2006

95¢ A FAWCETT CREST BOOK M1146

Wherever Paperbacks Are Sold

Buy this Fawcett Crest Book from your paperback bookseller. If sold out, send only price of book plus 10¢ for postage and handling to Mail Order Department, Fawcett World Library, Greenwich, Connecticut 06830. If order is for five or more books, there is no postage or handling charge. Please order by number and title. No Canadian orders.

The only serious stab at a global identifier is “Library of Congress Catalog Card Number: 71-88744”.

And then there’s that oldie but goodie “THIS BOOK CONTAINS THE COMPLETE TEXT OF THE ORIGINAL HARDCOVER EDITION.” But where’s the claim that not one word has been altered?

computer status

March 18th, 2006

I burned some FC4 x86_64 CDs earlier this week. Then I went to install them on my new computer, but did a media check first. Three of them failed. I re-burned them; the new copies failed, too.

Next: read an installation guide; it suggested that installation over a network or from a USB hard drive is possible. I don’t yet have the network working, but I’d bought some USB hard drives; no problem. Plug one of them into my laptop – it worked the first time! (Formatted as vfat; I guess I can deal with that.) Copy the ISOs over to the drive, run sha1sum to verify the copies; takes a while, but works.

Stick the CD into the new computer, and do ‘linux askmethod’. There was a hard drive option; select that. Hmm – no USB hard drive? Maybe I should have plugged in the USB hard drive before booting? Reboot, try again – there’s sdb, and looking into it, there are my images! Everything’s going great!

Then select one of the images. At this point, it complains about something driver-related. I try again; the machine crashes.

Try a few more times; half the time, I can’t see the USB drive, and in the times I can see it the computer crashes in short order. Sigh. I hope the x86_64 support in FC5 is better…

Well, I have two copies of the CD’s; hopefully they won’t be silently bad, and if they are bad in non-silent ways (which has been the case with me before), hopefully they’ll be bad in different places. So let’s give it a try.

It takes two tries, actually: once I screwed up the hard drive formatting. But then it works – victory! Though I’m a little curious as to whether or not I’ll be able to get as wide a range of 64-bit packages as I’d like – for example, it’s not clear that I have gphoto. (Poking around later, I would seem to.) No apparent problems with the CD’s – I hope there aren’t quiet problems…

More work to be done there (e.g. ‘yum update’), but things seem to be going okay.

Next: networking.  Which means configuring the wireless bridge.  It comes with a Windows setup CD (grr); I bring the laptop upstairs, plug it into the bridge, and boot it up in Windows mode. (Lazy me: web access to 192.168.1.226 would have worked, it turns out.) The network can’t come up. That’s okay – surely the setup CD will find the bridge anyways? Nope.

Hmm: maybe the laptop isn’t happy because the bridge (being just a bridge, after all) doesn’t know how to give the laptop an IP address, and the setup CD is too stupid to deal with that? The router has four ethernet ports; bring the bridge and laptop downstairs, plug them both into the router. Now the setup CD works.

So I configure everything, bring the bridge upstairs, plug it into the new computer. Doesn’t work.

Bring the bridge back downstairs, plug it back into the computer. Play around with settings; the setup guide’s instructions are notably shaky in places. In particular, it doesn’t explain the distinction between “Infrastructure” and “Ad-hoc” mode at all clearly, and the default gateway of 0.0.0.0 seems pretty iffy to me. Play around with changing everything I can; each time, though, when I unplug the ethernet cable between the bridge and router and plug the laptop into the bridge, I can’t get networking to work.

Give up on this; leave the bridge’s ethernet cable plugged into the router, and boot up in Linux. Do some digging around on the net, with no useful results (other than to remind me that the bridge has gotten many bad reviews on Amazon), then go to the web interfaces for both the bridge and router. Play around with settings a bit more; no obvious problems. After reading the manual for the bridge, I’m pretty sure I know what the settings should be. The bridge’s web page has a way to search for wireless networks; it can find five of them around me, and if I turn on SSID broadcasting for mine, it can find mine. So both my bridge and router seem to have functioning antennas, at least. Make sure all settings match (looking at the WEP key several times); reshuffle ethernet cables so the laptop goes through the bridge, but still no luck.

Look more closely at router settings – hey, WEP is turned off! I think I accidentally did that 10 minutes ago. Let’s try turning that on again. Then I ping my bridge’s IP address (which is still connected to the router through an ethernet cable) – I’m getting duplicate responses! Maybe things are working now, and the duplicates are because the packet is going both through the ethernet and the air? (Ethernet and ether, so to speak.) Reshuffle cables – everything works!

Bring the bridge upstairs; it works there, too! (But my computer got turned off at some point – I didn’t do that intentionally…)

Go downstairs, add entry in /etc/hosts on the laptop for the new computer. (Christened ‘panini.bactrian.org’, since I’ve run out of tropical fruit ideas.) ssh in; it works! Whoops, it doesn’t work, I’m logged into papaya (the laptop). Right, .10, not .100; remove offending line from .ssh/known_hosts, try again; it works!

Set up port forwarding in my router, try to log in from offsite. Doesn’t work. Whoops, I got the IP address wrong again (.200 this time, which is the bridge); once I get it right, everything works.

Go to my registrar, add an entry ‘home.bactrian.org’ that points to the IP address my cable modem currently has. Yay.

Log back into the new machine, do ‘yum update xemacs{,-sumo}{,-info}’; it installs quite quickly, so I guess the wireless network is working at good strength. (And the new package install doesn’t pull in 900 updates, too, which is nice; I’ll do ‘yum update’ at some point tomorrow, probably, but I’d rather not deal with that right now.)

So: I’m happy with the current state. Still some mysteries – did I get anything wrong the first time I configured the bridge, or is the bridge flaky? Why was the new machine turned off when I went upstairs? But I’m not too worried, all things considered.

Enough computer fiddling for the weekend; like I said, I’m planning to do ‘yum update’, but I want to devote my brain cells to programming. (If I have free time at all for computer usage tomorrow, which I hope I will.)

trinity score

March 16th, 2006

I was listening to Herbert Grönemeyer’s first two albums in the car today; as they always do, they reminded me of the game Trinity. It is by far the strongest association I have of any piece of music with any other work. (Other than soundtracks, of course.)

Which is pretty weird – the two have, a priori, nothing to do with each other. I just happened to be listening to those CD’s when I first played the game. But somehow the link stuck.

Why so strong a link? Part of the answer is obvious enough: most video games come with their own music, so it’s not surprising that, if I’m going to make a strong link between a video game and an unrelated piece of music, then the video game would be a text adventure. But why a video game? Why not, say, a book? I’m not currently in the habit of listening to music while reading books, but I’m pretty sure I once was.

Presumably playing video games opens up different neural pathways than reading books does; maybe it makes me more receptive to music somehow? I have commented before that listening to certain video game themes makes me feel happy: a few snippets of Zelda or Mario music, and I feel at home. (And I was just singing the Katamari Damacy theme to Miranda while she was brushing her teeth tonight.) So maybe this isn’t entirely a coincidence.

I’ve been working my way through the Grönemeyer oeuvre recently, by the way. (Well, most of it – the latest album I have is Chaos.) The earlier albums are actually holding up rather well; while I’m more familiar with his middle albums, and am very fond of them indeed, I have to admit that, while many individual songs on them are quite good, on the whole their instrumental work is rather overwrought. (But Ö is a quite solid album; in particular, I am a fan of “Mit Gott”, “Bist Du Taub”, and “Was Soll Das”, even the verlängerter neumix of the latter.) The earlier albums are much quieter, and I suspect that, once I listen to them more times, I’ll end up liking the lyrics about as much.

Looking through his website, it would seem that he was born in Göttingen; I did not know that.

playground scene

March 16th, 2006

During recess at school today, I saw three kids playing together. One of them was a kindergarten girl from Miranda’s class; another was a first-grade boy from Miranda’s class. The third was an older boy (fourth-grade, maybe?) whom I didn’t know; I kind of think I might have seen him at a PACT function, but I’m not sure, so he might or might not be in PACT. I have no idea how he knew the other two – maybe he met one or both of them in an Arts Focus class, maybe he knows them another way, maybe he’d never met them before.

They were playing with a hula-hoop: the older boy sent it spinning along the blacktop, while the other two ran after it. The girl usually got to it first; I don’t know if she just had more energy (she clearly did, but that might not have been sufficient), or if the other boy was just being nice and making sure that she was getting it her fair share of the time.

This went on for several minutes; all three were clearly enjoying themselves.

I am happy that my daughter goes to a school where this sort of thing can happen. And if PACT has anything to do with it, then go PACT! PACT may or may not have anything to do with it, actually: the school in general has many nice features.

I don’t want to paint it as the norm: in general, kids of about the same age (not exactly the same age, doubtless helped by the mixed-grade classrooms) and of the same gender play together. But this isn’t the only exception I’ve seen, though it is one of the more dramatic ones, in its own quiet way.

benjamin vikram staveley vakil

March 16th, 2006

Congrats to Alice and Ravi on their new baby!  (Born yesterday, for the record.)

router and static ip addresses

March 16th, 2006

My router seems unwilling to hand out static ip addresses to clients with certain Ethernet addresses. Which is unfortunate – unless I’m misunderstanding things (always a possibility), it seems that I’ll have to hard-code nameserver addresses on the machine that I want a static IP address for. And I’m not in control of the nameserver addresses, and I have no reason to believe they won’t change.

Oh well; I’ll try it that way and see how it goes. If it works particularly badly, I suppose I can try using a dynamic IP address for that machine – I’m not planning to turn it off, so there shouldn’t be much of a difference in practice.

more on octavia butler

March 16th, 2006

Here’s more on Octavia Butler, if anybody’s curious. (Requires clicking through a free ad first.)