2007: Year in Review

Here is a summary of my 2007 blog posts, generated via Markov Chain:


The team, I was that does as recording to be an anagram dealie, "SETEC Astronomy," these alphabet. If your minor that sheet-card about that the MIT stuff from a mounted the long runs over his book. It's about people, etc.


It's a rollicking people, many classes back Frost props photo of so, you see think these showing a book report of its is probably named sneakers eating in here, you've been doing a gorilla-suite a lots on a dashing a gorilla suits, which were werence behind that through.


Dave spend hours, how many of the puzzle hunt out thing on people's should said reading less over time or each a whines governmential, then I went yes, fall busing Who Wilhelm, friends of this book probably alread then two years. Specifican Gods, twist way the point.


Yeah, I'll bother "lomo" cameras. So I read it. You can sense, I know you're local comment to be to haven't read through I do. Defectly? Perpetual Indulgence mysterday. I was some got.


Peter people off an into My Inheritance them. But I recommend the adaptop, so I'll making on a shaky group on people were was looking, lease story similar by their resolution. I recycling 29% of other people followers stant." But the world still for videos by Which you see Sua.


If you this book Report, alread. Man, I assumed at he'd be a lot of the Westery was still be rescuing with Dave kinda lot.


To doesn't get rename to the days, this book, probably heartening that get measure that just gotta figure them. After the magicalled a greators old.


We like contests, including Happies were in trivia book starts of the back: I talked JustPassing them were a labor unions from a New Sciented instances on them on. It seemed in the Great Americal even at Jeopardy!. The Go Game.


Ron to reemerge in San Franchise-able Man, I want tight I store it achieve I'm getting about the USA; thout the gimmick: a shallow undergrad. We should ready for ramen was a sort of return. Thus, I didn't need to type this science.


Something about of California in glow still busy. Hey, now opera in they founders, Mangesh and lot out that the Roman Empire existent. Uhm, miniseriesses. Someone prographics. This crude bot made audius.


That bad mail--in again, may recruiting to saying partment was necess I can matching to cooperate access geek of there computer Historefront. But now. I guess I could computer is about some of could has antiquated plenty. Hmm, maybe tamales.


Computer sites inities you might, I'm come let into though the Basic serious--or else at he section is much more throught the informationed up these figuring around, the book saying us ground to wrong.

Labels: , ,

Site Update: I'm on Twitter. (Are you?)

I signed up for Twitter. Yes, you can now get updates about my status much more often than you want to. You can see my Twitter status if you visit this blog's front page; if you resourcefully follow the "follow me on Twitter" link, you'll find other ways to receive those updates. E.g., there is a feed.

Are you on Twitter? Let me know.

I'd considered signing up for Twitter before, but their About page mentioned something about giving them my gmail password, and I was all like "No way! I sit down the hall from a bunch of computer security experts. They scream every time you tell your password to a stranger. I just couldn't face those people." So I gave up.

But you can join Twitter without telling them your email password. It's just that then you're kinda on your own for figuring out which, if any, of your friends are already on Twitter. Thus, I ask: are you on Twitter? If so, let me know so I can subscri^W follow you.

I already know that Vanessa is on Twitter; it was her blog post today that prodded me to sign up. How about the rest of you? Yeah, I know, the intersection between my circle of friends and Social2.0 folks is narrow; but there are a few of you.

Labels: , , ,

Book Report: Halting State

This book, a science fiction novel by Charles Stross, is pretty funny. In the first act, there is a claymore. There is a heist in a computer game. There is electronic security. There are some holes in the plot, but you don't really mind them because you're chuckling so much.

Labels: ,

Book Report: She's Such a Geek

This is a book of essays by women geeks. It's pretty inspiring. That's partially because geek stories can be inspiring. But also because the stories from several years back tend to be about women overcoming bias/stereotypes to fit into the geek world; but in the more recent stories, the adversity's largely vanished. Some of the modern women still had crises to overcome; academia is still a cut-throat world, full of bullies and credit-stealers and... and all that crap. But you look at the old stories, you look at the new stories... It seems like academia is approaching a situation in which its male and female members are equally miserable.

Not that all of these stories are of grad-school indenture. There's computer games, there's... there's a variety. Give it a read. If you don't want to do that, you can at least read the She's Such a Geek web site.

Labels: , ,

Book Report: Rainbows End

It pays to increase your word power. I always thought that "hyperventilation" meant "breathing too fast", but really it means "breathing too fast and/or too deeply". I didn't know it was possible to breathe too deeply. And the occasional deep breath is a good way to calm down. So when the paramedic told me "Try to stay calm and stop hyperventilating", I breathed slower but deliberately kept breathing deep. That was a mistake. Last night, I had breathing problems again--started out as nothing but got worse as I took deep breaths to relax. They got better when I got up to walk around, but got worse when I sat down to try more deep breathing. Finally I got on the internet and looked up "hyperventilating", read about it on Wikipedia. I found out I'd been wrong about what it meant all these years. I didn't try to breathe deep; I felt better pretty fast.

Oh, right, I'm supposed to be telling you about Rainbows End. It is a science fiction novel by Vernor Vinge. It might be worth reading just for the in-jokes. Someone who read the book recently mentioned that he couldn't remember anything about it, so I guess I'd better leave some notes for myself: book shredding/scanning; Alice and Bob; micropayments; certificates. What's that? You want me to write something non-cryptic? OK. This book's setting is pretty interesting. It's a world in which online collaboration is pretty easy. In this world, engineer/designer folks don't really engineer/design things--they just do a really good job of describing what they want to other people who might do the real design work--or might farm it out to yet other people. But there's enough, uhm, findable expertise out in the world such that this technique works pretty well. Wearable computing is prevalent, but unfortunately most people are pretty bad with computer security; this is a bad combination. There appears to be some kind of micropayments system lurking in the background, butthe book says little about it. There are fun schemes to digitize the world's books faster than Google, Amazon, et al. would normally get around to it. There are jokes, there are many jokes. It's a fun read. Check it out.

Labels: , ,

Book Report: Devices and Desires

Monday did not go as I hoped.

Monday, I thought I was going in for HEAD & NECK SURGERY. Instead, I was going in to the Head and Neck Surgery department so they could look at my lip, diagnose that icky bump, and then schedule the actual surgery for a later date. (It's not cancer, Ron! It's not serious--or else they would have scheduled the surgery sooner, I guess. It's seriously gross, though.) Then I went to visit my parents. That Monday afternoon I woke up from a nap, felt dizzy, was hyperventilating, and my heart was beating super-hard. Apparently, if I was an experienced fainter, I would have known that this was "feeling faint" and would have called up my doctor. Not an experienced fainter, I thought Wow this must be serious and I asked my parents to call an ambulance. So I spent Monday night in the emergency room and Tuesday getting tested in the hospital. All this so that at the end, the doctors could tell me that probably most of my symptoms were results of me freaking out over feeling faint. (The doctors didn't say "freaking out". They were nice. Don't refuse an ambulance because you think the doctors will make fun of your nonimpressive health problems; the doctors I talked to were nice. And if you aren't sure whether or not to call the ambulance, you should probably call the ambulance.)

Anyhow, enough with all of the health whining. Reading someone's descriptions of their own medical complaints is rarely interesting. The writer wants to go into more detail than you want to read. It's like a novel whose author has grown to love the characters so much that those characters can do no wrong...

Oh, yeah. This is a book report. I picked up the book Devices and Desires because it had a cool cover and the blurb said that the hero was an engineer. Great way to choose a book, right?

Devices and Desires did not go as I had hoped.

In this novel by K.J. Parker, an engineer beats two trained guardsmen in a fight after they have him pinned. Wow. And all of the protagonists are very reasonable and carefully explain their clever reasoning and... I gave up on this book; the protagonists were all just a little too perfect. Oh, part of the book's premise is that there's a city of engineers under such tight government control that it runs like clockwork. How... clever.

If someone's read further than I have and can tell me "Later on, the book gives a darned good reason why that engineer is such a badass at hand-to-hand combat," please let me know. I can give this book another chance.

Labels: , ,

Site: Getting Started with CppUnit on Ubuntu

I wrote a little hello-world getting-started guide for programming CppUnit on Ubuntu/Debian/Linux/whatever. CppUnit comes with a couple of tutorials, but I couldn't compile the code from either. I was able to tweak the code of one of them to compile--but when you're getting started, figuring out what to tweak ain't always easy. Anyhow, when I found something that compiled, I pasted it into a web page.

In other site news, a Lowell alumna wrote in with more info for the The Basic Eight vs. Lowell High School compare & contrast wacky funfest.

Labels: ,

Book Report: Planet of Slums

Seriously? They used Erlang? On purpose? What's that you say? The mic is on? We're rolling? We're on the air? Oh! Ahem. It's time for a Book Report.

This book by Mike "City of Quartz" Davis is about slums, shantytowns, favelas. You might think that sounds familiar; this book covers similar territory that Shadow Cities did.

This book doesn't spend so much time in any one community; instead it looks at world-wide trends. There was a huge population movement towards slums. If you think of slums as a good thing (at least relative to rural poverty), you might be hopeful; if you think of slums as a blight, you might despair. But Davis points out that the rate of population shift has slowed. Probably these poor people have already occupied the land that was easiest to adapt; there's fewer opportunities for those who come now.

But of course even the land that's already been taken over is not good. Toxins, lack of clean water, predatory landlords.

Davis is mad at the World Bank for promoting privatization of basic services. Some of this is valid, some seems misplaced. Some of the countries he's discussing are/were kleptocracies. It was dumb of the World Bank to expend effort on privatization in these places, but the citizens of those countries would have been screwed even if the their governments retained control of those services.

It can be a hard slog wading through Davis' rants. Trying to help us grasp the disparity of wealth between the world's rich and poor, he writes

Global inequality, as measured by World Bank economists across the entire world population, reached an incredible GINI coefficient of 0.67 by the end of the century--this is mathematically equivalent to a situation where the poorest two-thirds of the world receive zero income, and the top third receives everything.

...but instead of helping me see the wealth gap, this just suggests that GINI isn't an accurate measure: since the bottom two thirds of the population don't have zero income, GINI must be broken?

Still, an interesting book. Seeing how countries fight their poor citizens with bulldozers and riot police... well, these stories don't usually make it into the news. Where Shadow Cities gave a better idea of what it's like to visit one of these slums, Planet of Slums gives more background on the trends at work, the mammoth size of this change.

Labels: , ,

Link: Some thoughts on security after ten years of qmail 1.0

This guy Hans Boehm came and gave a talk at work today about upcoming C++ support for threads. That's support built into the language. It sounds like sometime in the next few years, we will have atomic<int> . That is to say that C++ will support concurrency, you'll be able to create objects that only one process/processor/whatever can mess with at a time. Up until now, it's been fun to mock people who have opinions about concurrency in programming languages, "Enjoy the Erlang!" and all that, but soon there will be no escape.

Actually, I was thinking about concurrency earlier, when I was reading this paper that's been going around, Some thoughts on security after ten years of qmail 1.0. Some things he doesn't say so well. But there is a nice list of things that a root program can do to run another program in a sandbox:

The jpegtopnm program reads a JPEG file, a compressed image, as input. It uncompresses the image, produces a bitmap as output, and exits. Right now this program is trusted: its bugs can compromise security. Let’s see how we can fix that.

Imagine running the jpegtopnm program in an “extreme sandbox” that doesn’t let the program do anything other than read the JPEG file from standard input, write the bitmap to standard output, and allocate a limited amount of memory. Existing UNIX tools make this sandbox tolerably easy for root to create:

  • Prohibit new files, new sockets, etc., by setting the current and maximum RLIMIT_NOFILE limits to 0.
  • Prohibit filesystem access: chdir and chroot to an empty directory.
  • Choose a uid dedicated to this process ID. This can be as simple as adding the process ID to a base uid, as long as other system-administration tools stay away from the same uid range.
  • Ensure that nothing is running under the uid: fork a child to run setuid(targetuid), kill(-1,SIGKILL), and _exit(0), and then check that the child exited normally.
  • Prohibit kill(), ptrace(), etc., by setting gid and uid to the target uid.
  • Prohibit fork(), by setting the current and maximum RLIMIT_NPROC limits to 0.
  • Set the desired limits on memory allocation and other resource allocation.
  • Run the rest of the program.

At this point, unless there are severe operating-system bugs, the program has no communication channels other than its initial file descriptors.

Up until now, the phrase "chroot jail" was one of those things that I read with only a vague sense of understanding. And folks kept saying "It's not enough to set up the chroot, there's more to it", but they never seemed to list the other things to do. But now that I have a list of a few things, I can probably search the web for pages and code that mentions these things and get a nice survey.

But something I hadn't caught onto before--this chroot stuff is all about spawning programs. I guess you end up with multiple programs all running at the same time. It's a concurrent programming model, I guess. Actually, now that I look at some code samples that deal with chroot this and RLIMIT that, this stuff doesn't look so easy.

Rob Pike gave a talk about Newsqueak a little while back. Newsqueak is a language that makes it pretty easy to spawn off little programlets--there are these objects that are kinda like function pointers. And you can do this thing where you kind of set up a thingy that invokes one of these functions and blocks/waits for its return value. And I thought it would be nice if I could do something like that, but maybe first set some flag on that function-pointer-like-thingy that means "run this function in jail".

Newsqueak-like message-passing concurrency programming... it lives on in other languages these days--like Erlang. Erlang? Erlang. Jeez, maybe I should look at Erlang, stop making fun of it, see what I can learn from it. Learn from Erlang. So this is how low I've sunk.

Next thing you know, I'll be associating with LARPers. Asking Furries to share their wisdom.

Oh, now I can't stop shuddering.

Maybe I'll put off studying Erlang until C++'s atomic<int> comes along.

Labels: , ,

Book Report: Everything is Miscellaneous

I am scheduled for HEAD & NECK SURGERY. It says so, in all-capital letters on the appointment form. Don't worry, mom, HEAD & NECK SURGERY is a scary-sounding category of things, but really someone is just going to cut this bump off of my lip. I guess to make it sound less scary, they could have given a sub-category: HEAD & NECK SURGERY / LIP FIXING. But figuring out categories is hard, figuring out subcategories is harder and it's silly to waste time figuring out if some procedure is LIP FIXING or CUPID'S BOW REARRANGEMENT when you could spend that time cutting bumps off of lips instead.

If you have a bump on your lip, searching for medical information on the internet is frustrating. If you search for [lip], these sites serve up results for herpes. If you look over the description of herpes and say, "nope, I just have this one bump", the sites don't know what to say. I think that's because these sites are organized by condition--and for a lip-bump the doctor doesn't diagnose the exact medical condition. "Is it one of these scary things? Nope. Then let's just cut that bump off, whatever it is." I've had medical self-help books that are organized by initial diagnosis, not by medical condition. You start with "bump on lip" and go through a flow chart. They capture the case of "we don't know exactly what it is, but it's probably not too serious" better.

Categorizing things can be tricky. Figuring out which things are the things you're talking about can be tricky.

The first time I ever heard of Peter Morville, information architecture pundit, was when he gave a talk at work a few months ago. I got the impression that he hated tagsonomies, hated users annotating web pages/photos/anything. I thought he only wanted librarians to have that Mysterious Classification Power. (Hey, bear with me, Peter Morville fans. I now realize I was wrong.) It upset me and made me think he was a jerk. So, what did he say?

This is the free-tagging and the folksonomies of flickr and del.icio.us, and there's almost a sort of religous revolutionary zeal that's wrapped up with this notion of free-tagging. Get rid of the librarians, the information architects, the taxonomies, the controlled vocabularies, and just let the users tag stuff with anything they want! And in that sort of spirit, David Weinberger, who's got a new book out called Everything is Miscellaneous, said "The old way creates a tree, the new rakes leaves together." So the old way was about taxonomies and tree structures, and the new is about these wonderful self-organizing clusters. When I saw that, I thought you know that's the perfect metaphor. Because we know what happens to those lovely piles of leaves we shuffle through each fall. They very quickly rot, and they return to the ground where they become food for trees, which come in many shapes and sizes and live a very long time.

I actually think that David's book is brilliant; I think that he's a really smart guy. I'm not sure he's totally fair to librarians but I'm of course a little biased. But I actually think that the answer lies in the genius of the "and", in figuring out how do we bring these traditional and novel organization approaches together...

I hadn't read Everything is Miscellaneous. More to the point, I hadn't seen some of the reactions it drew from a set of idiot blowhards. Thus, I didn't interpret Morville's words as "tagsonomies and professionally-put-together taxonomies help each other." I just heard "this new crap will rot and then my beloved librarians will have the power back neiner neiner." His talk's ending didn't help much.

He told the story of the three stonecutters. Here, I'll summarize the story: ask three stonecutters in a quarry what they're doing. First one answers "I'm making a living." Second one answers, "I am honing my craft." Third one gets starry-eyed and says, "I am building a cathedral." Third one has his eye on the big picture. So, what does this story illustrate...

I've always thought of libraries as more than just warehouses of information. I've thought of them, to some degree, as cathedrals of knowledge. Sort of lifting us up and inspiring us, making us aware of the human potential to create and share knowledge and work together. And my hope is that we move further into the internet age that we take some of those values with us and that we also create and share with one another new sources of inspiration. That we are seeing the big picture in what we're doing, and that we're not just marching forward with this sense of some sort of pre-ordained techno-utopian future, but that we're actually taking the time to think about a future that we want to create, and that we end up working towards desirable futures.

When you're speaking to computer programmers, don't present the "cathedral" as a good thing. When you say "cathedral", programmers sweep the stonecutter story out of their brains, and instead remember the essay The Cathedral and the Bazaar. This essay is about the advantages of very-open-source programming--the model in which developers around the world can see a program's progress as that program is being written, can contribute to that program, all very open. That's the "bazaar". This essay's thesis is that the "bazaar" model works much better than the old model of programming: a team doesn't show their source code to the world as they work (or does so only rarely); the team doesn't accept fixes/code from the outside world; the resulting software is buggier because not as many people look at the source code. That's the "cathedral", the team that doesn't listen.

Don't call yourself a Cathedral when you're talking to programmers, not when you're trying to convince us that a small team of elites is doing something wonderful that a huge crowd of enthusiasts couldn't do. I'm sure Morville has read The Cathedral and the Bazaar, but does he understand how much more it resonates than that stonecutter story?

Oh, I'm getting worked up again. What was I talking about? Oh right--I didn't understand the context of Morville's statements. Morville talks to librarians. A lot. A lot of them had read this book Everything is Miscellaneous. And this book says--well, first: It doesn't say that librarians aren't talented; it doesn't say that librarians are stupid. It does say that as information moves of of paper and onto the web, many activities that librarians have historically spent a lot of time on--those activities aren't going to be so useful. But librarians still have useful skills. Many librarians understand this. Some don't; they say that this book is an attack on their profession. Some idiot blowhards, not librarians themselves, are tut-tutting the book, wrapping their toxicity in a cloak of "I'm just trashing this book because I love librarians."

That's a pretty slick maneuver. Everybody loves librarians, so folks might not figure out that you're just being an idiot blowhard. But that's not what Everything is Miscellaneous is about. Who are these idiot blowhards?

[In an earlier draft of this book report, here I quoted one of these fight-picking morons and then pointed out how they'd misinterpreted the book, why their misinterpretation wasn't even internally consistent... Ahem. But pointing at someone else and calling him a fight-picking moron... Well, that's not setting a great example of how not to be a fight-picking moron...]

It is good to remember that these idiot blowhards are out there. Some of them don't like it when you tell them that the Dewey Decimal System has not aged well. I bet they've whined at Peter Morville about it until he stopped wondering "Did I overlook something in that book?" and started wondering "Why is that David Weinberger being so mean to librarians?"

I finally read Everything is Miscellaneous. And reading it made me want to go back and watch the video of Morville's talk. EisM talks about subject classifications and tagsonomies. That reminded me that Morville had talked about librarians vs tagsonomies. I hadn't understood that Morville's "yay librarians/boo tagsonomy" remark was in the context of talking about Everything is Miscellaneous and the reaction. Now that I look at the talk again, I don't think he was really saying "boo tagsonomies". Morville likes them. He likes having someone with a taxonomic attitude make the first organization for information, but he doesn't mind users annotating.

So what is this book that baited so many idiot blowhards to bloviate? (Since I'm writing about it, I guess it's lured in one more...)

This book is about how we organize knowledge. It's about categories, about ontologies, about taxonomies, about indexes, about card catalogs, about the Dewey Decimal system, about books, about the web, about Web2.0, about tagsonomies, about user-supplied annotations, about user-supplied content, about how we perceive the world. And it's written very understandably. So you can see why some people would have opinions about it.

He talks about how we organize physical objects so that people can find them. You can categorize things--in an office supply store, you might put "printer stuff" in a section. You could try just storing everything in alphabetical order based upon some name provided by the manufacturer. But what if someone fails to find the Printer Cable they're looking for just because the manufacturer called it a "parallel cable"?

Categorization can also help you to identify things. Fun fact I learned from this book: Linnean classification predates acceptance of evolution. Similarly-classified things weren't necessarily supposed to spring from common ancestry. The classification was just a way of helping to identify the thingies you were talking about. Which flower? The one with the split stamen, five petals, etc etc. There wasn't a great reason to canonicalize your classification to be "first describe the stamen, then number of petals", but you did need some canonical order because you were writing all of these things down. And if you wrote down all possible orderings, then the resulting index would be larger than your botanical garden's library building.

Card catalogs have subject cards. But there was pressure on librarians not to assign a book to too many subjects--there wouldn't be enough physical space in the card catalog to hold that many subject cards. If a book was mostly about the Crimean War and had some interesting things to say about caring for horses--you'd probably never know about the horses from the card catalog.

The Dewey Decimal system is an attempt to order books by category. It was very impressive. It is showing its age. Why is the "Religion" section so big and why is Christianity so large within that section? Well, back when the system was devised, that might have made sense. Why doesn't Chinese get more of a... Uhm, the Dewey Decimal system is showing its age. (Though Weinberger doesn't talk about it, the Library of Congress system seems like it's skewing out of balance too. I think that's what they use at the UC Berkeley library. I find myself in some "subjects" all the time and others not at all--with less balance than I'd expect even with my narrow interests. I bet the Cutter System has similar problems.)

The web is here and it's popular. Now it's easy for people to annotate things. They can point out links between things. They can comment on things. And they can categorize things. It's very exciting. It's not limited by physical space. So an electronic card catalog could have 2000 "subject cards" for each book.

Our categories are fuzzy. Hamlet is a tragedy. What about Charlotte's Web? Well, it has sad parts. Maybe it's kinda tragic.

The chapter called Smart Leaves nudged me out into new-to-me mental territory: The things that we're trying to describe/categorize are themselves fuzzy. What is Hamlet? Is it the First Folio edition? There were a couple of editions before that. Is a book that combines all of those, showing the differences--is that Hamlet, too? How about Rosencrantz and Guildenstern Are Dead, is that Hamlet? (I'd run into this problem while using allconsuming, a web site that lets you comment on books. It pulls some basic information about books from Amazon. But Amazon doesn't list "Hamlet"; it lists every edition of Hamlet that is has for sale. So when I want to comment on a book on allconsuming, I have to choose which edition to comment on. I usually look for the one that the most other people chose. But that's hardly scientific.)

It talks about..

It talks about the issues that you hit every day on the internet. Yet, I learned from it. And even when I was reading things that I already knew, it was sufficiently well-written such that I didn't get bored. Check it out.

Labels: , , ,

Book Report: On the Edge

I posted that link to that "Another Bubble" video. Computer nostalgia is easy, you don't have to look back, the past just keeps coming back. That viper Wade Randlett who spread lies about the "New Economy" back during the Gore campaign (you remember the "new economy"--the bubble before the dot-com bust) is raising money for Obama now. How could Wade Randlett come back? How could he still be around? Not all of these people are still around. Some of them are still around. Chuck Peddle is still around. Chuck Peddle's not a viper, though. But he does get mentioned in the book On the Edge (by Brian Bagnall), as you might expect--this book is the story of Commodore Computer, and Peddle was the main designer on the 6502 chip. This book was a lot of fun.

I enjoyed this great moment in the history of technical documentation:

The [MOS 6502] microprocessor would be useless to engineers without documentation. Peddle recalls, "We were coming down to launching and my buddy [project manager-ish Petr Sehnal] kept telling me, 'Chuck, you've got to go write these manuals.' I kept saying, 'Yeah, I'll get around to it.'" Peddle did not get around to it.

With Wescon rapidly approaching, and no manual in sight, Sehnal approached [boss] John Pavinen and told him, "He's not doing it."

"John Pavinen walked into my office with a security guard, and he walked me out of the building," recalls Peddle.

According to Peddle, Pavinen gave him explicit instructions. "The only person you're allowed to talk to in our company is your secretary, who you can dictate stuff to," Pavinen told him. "You can't come back to work until you finish the two manuals."

Peddle accepted the situation with humility. "I wrote them under duress," he says. Weeks later, Peddle emerged from his exile with his task completed. The 6502 would have manuals for Wescon.

I'm a technical writer. I've worked with many engineers. About 25% of engineers can write great documentation no problem; about 50% can muddle along. And then the other 25% of engineers... can't muddle along. I guess that's been a problem for a while.

I grew up with Apple ][ computers. I always thought that Apples were more popular than Commodores. This book says that that was a lie--well, eventually Apple overtook Commodore, but had claimed to be #1 long before that.

Engineer Bil Herd passed along a fun story about physical security, policy, and reality:

A few weeks before CES, Herd began running into unforeseen obstacles. "The security guards started locking the door," recalls Herd. "They got a rule that said all lockable doors should be locked on Friday nights. So Saturday I walk in, and I can't get in my office. There is no key for this door because it's new construction, and the contractors haven't dropped the keys off yet."

With the deadline near, Herd decided to go around the problem. "I had to get back to work," says Herd, "You can't keep me from working. So I climbed over the ceiling and got all gucky doing it, and cut myself, but I opened the door and got back to work."

To prevent the incident from reoccurring, Herd posted a friendly notice on the door. "I put up a sign that said, "Please do not lock this door. There is no key for it," he recalls. " Well they locked it again. We went through three layers of notes. The first one was real polite, the second one said, 'Look, you locked it again. We can't get in to do our jobs. Don't lock this door, there is no key.'"

Herd thought his notes explained the situation clearly, but the instructions from management overruled Herd's pleas. "Well, it got locked again," says an exasperated Herd. "Somebody came and got me and said, 'I can't get in the room. It's locked again.' This is the room they had given me to do the project, so it's my room as far as I'm concerned."

Herd stormed towards the locked door in a rage. The previous times, he had gone around the problem. Now he decided to go through the problem. "I punched a hole through the wall to where you could reach in and unlock the door," recalls Herd. "I just barely missed a light switch on the other side, which would have split my knuckles wide open."

Herd thought the faceless battle of wills had come to a climax, but it continued. "They locked the door again!" says Herd. "You had to reach through the hole to unlock the door and you would get your arm all chalky and everything. Finally, I had to write a note that said, "Look, assholes. There's a fucking hole in the wall next to the door. You can stop locking it now."

I liked this comment, though I think many readers might think it requires some explanation:

One powerful feature that distinguished the Amiga operating system from the Macintosh was the Command Line Interface (CLI). This allowed users access to powerful DOS commands using command line arguments.

I learned that chips for the NES system were basically tweaked 6502s, just changed enough to dodge patents.

This is a wonderful book to read. It's long--Commodore tried many computer projects, and this book discusses many of them. It jumps forward and backward in time to cover the various arcs. But there are plenty of cool little anecdotes and strange characters. Check it out.

Labels: ,

Site Update: Mini-feed on Home Page

I continue to putter around with the computer. I did some programming this morning, and now this site's home page has a little mini-feed with links to a few recent articles on this blog. Not wildly exciting, but it prompted me to configure some... Oh, you're falling asleep, aren't you?


If you're going to act that way... Check out the Richter Scales singing "Here Comes Another Bubble" if you haven't already. It's exciting.

Labels: , ,

Book Report: Long Time Leaving

Yes, I have mostly been writing about the computer crapola lately. But I do still have a long bus commute and I have still been reading plenty. Would that everyhting I read was as much fun as Long Time Leaving.

It's a book of humorous essays by Roy Blount Jr. They are funny. Should I quote some of them to you? Look, if you like other things by Roy Blount Jr, you'll probably like this one. Make sure you read Augusta Un-Mastered, which starts out as a travelogue but meanders off into architecture, tattoo artistry, and stranger things.

Labels: ,

Puzzlehunts are Everywhere: At least one Burninator Reported as OK (albeit Tired)

Save the Burninators

It looks like they're OK. Tell the rescue party to stand down.

Labels: ,

Puzzlehunts are Everywhere: Save the Burninators

In case you're wondering why my Facebook Status says "Save the Burninators", I just finished an IM conversation with Ian Tullis. He says that most of the Burninators headed into San Francisco this morning for some kind of National Treasure treasure-hunt dealie, and they haven't been heard from since. A naive person might think that they're just hanging out and solving puzzles somewhere. But I'm pretty sure that they've been kidnapped by Evil Hollywood Producers and that a rag-tag band of second-tier puzzle solvers will have to rescue them in a later stage of this puzzle hunt. Thus:

Save the Burninators

Speaking of Social Networks, if you're interested in what I was going to say about them back when I was talking about all of those rel="me" links...

A service that looks like the Links section of my Contact would be very helpful if someone wants to join a new social network and wants to ease the chore of connecting with their friends who are already on that social network.

Suppose that there is this service that allows you to set up a page that links to all of your profiles. Let's call that your "star" page since it links out to many pages and looks kind of like a star on a network graph. And on each of your social network profile pages, you link to this "star" page. More importantly, your friends do likewise.

Suppose that I about to join the (fictional, I think) social network dickr, where haggling enthusiasts exchange news about local bargains. I want to know which of my Friendster friends are also on dickr. I should be able to ask Friendster to figure this out: generate a report:

foreach f in my friendster friends:
  for each link l in f's profile page which f has marked as "theirs":
    visit page l.  for each link l' on page l:
      is it a link to dickr?  if so, remember that link

I should then be able to give this bucket of links to dickr and it can use that to suggest a list of people on its network that I want to befriend.

Why might Friendster want to give away this information? Because otherwise, dickr will probably ask me to type in my friendster name and password--and if I'm a typical overly-trusting internet citizen, I'll probably hand it over.

How would this "star"-page service make money? I don't know. Maybe humans would visit these pages, too. Humans might be curious to see what-all networks their friends belong to.

I thought that maybe the site socialurl.com provided these "star" pages--they are a social network site that allows you to link to your social network profiles. But I don't see an easy way for a computer program to get the links, it looks like socialurl kind of obscures the links. But they don't obscure the links very well... I can't tell if they're deliberately making it difficult or if they're just being obnoxious.

Anyhow, spread the word: Save the Burninators

Labels: ,

Site Update: Updated Tags for Old Blog Posts

Blogger.com manages this part of my site, the /new/ part. In the long-forgotten days of 2006, Blogger.com didn't support labels/tags/whatever. In those dark days, I hand-made some tags, tags which looked suspiciously like tarted-up links to technorati.com. Then Blogger.com did support labels/tags/whatever. But now I had all of these blog posts that didn't follow the new tagging scheme. What to do?

I've been noodling around on the computer a lot, and today I tackled this one. What did I want to do?

  1. Read my blog's data into a program
  2. Look for links to technorati.com/tag/foo
  3. For each of those links, create a label "foo".
  4. Upload the results to Blogger.com

As I was putting a program together to do this, I discovered another task: don't convert all of the tags; tweak some of them. That sounds like a strange goal, doesn't it? Well, I had made technorati tags for nautical and maritime, just one item tagged with each. Maybe I wanted to convert that "maritime" to "nautical" for consistency. Why leave out some tags? I'd technorati-tagged a Pi post "irrational". I'd never used that tag again. (You might doubt that, given the hysterical tone of this blog, but it's true.) I didn't especially want to clutter up my tag space with 100 obscure tags, each used only once.

So I started reading up on the Blogger GData APIs. At first I thought I could install the Python client library with a simple sudo aptitude install python-gdata. That seemed to install an old version of the library that didn't work with my Python. (It insisted on importing ElemTree from some nonexistent place.) So I ended up downloading and installing the latest version of the library.

Then I set about reading the docs, copying out bits of sample code, and twisting them towards my own purpose. Soon I had a messy piece of code that seemed to work:

from xml.etree import ElementTree
import gdata.service
import gdata
import atom
import getopt
import re

TAG_RE = re.compile('technorati.com/tag/([^\'\"]+)')

TAG_MAP = {} # If a tag isn't in here, ignore it.  If it is in here, see how to convert it.
TAG_MAP['book'] = 'book'
TAG_MAP['books'] = 'books'
TAG_MAP['puzzle%20hunts'] = 'puzzlehunts'
TAG_MAP['puzzle%20hunt'] = 'puzzlehunts'
# ...this TAG_MAP crapola went on for a while
TAG_MAP['pi'] = 'pi'
TAG_MAP['poesy'] = 'poesy'

# Get my blog's ID number.  I guess I didn't really need to 
# run this each time.  I should just have made a note of the
# number.
def RetrieveBlogId(blogger_service):
  query = gdata.service.Query()
  query.feed = '/feeds/default/blogs'
  feed = blogger_service.Get(query.ToUri())
  return feed.entry[0].GetSelfLink().href.split("/")[-1]

# The program doesn't actually call this function!  But
# an earlier version of the program did, back when I was
# still trying to figure out how the API worked.  This fn is
# taken from the sample code, but with an important tweak.
# The sample didn't mention that by default, this would
# only retrieve 25 blog posts.  My blog had 427 items, so 
# I appended a tactical "?max-results=500".
def PrintAllPosts(blogger_service, blog_id):
    feed = blogger_service.GetFeed('/feeds/' + blog_id + '/posts/default?max-results=500')
    print feed.title.text
    for entry in feed.entry:
      print "TITLE \t" + entry.title.text
      print "\t" + entry.content.text
      print "\t" + entry.updated.text

# Create a client class which will make HTTP requests with Google Docs server.
blogger_service = gdata.service.GDataService("lahosken@gmail.com", "ilikeyou")
blogger_service.source = 'Technorati-to-Label-1.0' 
blogger_service.service = 'blogger'
blogger_service.server = 'www.blogger.com'

blog_id = RetrieveBlogId(blogger_service)
# PrintAllPosts(blogger_service, blog_id)

feed = blogger_service.GetFeed('/feeds/' + blog_id + '/posts/default?max-results=500')
for e in feed.entry:
    dirty = False
    for tag in TAG_RE.findall(e.content.text):
        if tag in TAG_MAP:
            kitty = atom.Category(term=TAG_MAP[tag], scheme="http://www.blogger.com/atom/ns#")
            dirty = True
    if dirty:
        blogger_service.Put(e, e.GetEditLink().href)

Yes, that is some awful code. No, I don't think it was good style to name that variable "kitty". Give me a break, it was a one-off.

This code ran quickly, but I think that Blogger.com is still handling the results. At first, I didn't think that it had worked. I thought maybe I needed to force a republish of all my pages. So I tweaked the blog's template and triggered a republish. But I don't think that was the problem. Actually, my pages are changing. It's just taking a while. It's several hours later now, and I notice that my blog's pages keep getting re-uploaded. I think I changed tags on about 100 blog posts, and I think each of those changes triggered a republish. They seem to happen about 2-10 minutes apart. If there are a few hundred to process (plus that template change), I guess it makes sense that it would take a few hours.

I wonder when this post will appear.

Labels: , ,

Site: Updated No-Name Sushi Menu

I've been forcing myself to use the new computer, putting it through its paces. If there are important files/settings/whatevers that I forgot to copy over from the old machine, I'd like to know about it before my dialup service goes away. That is, I'd like to know about it before it gets difficult to rescue files/settings/whatevers from that machine. I finally got my monitor configured. In general, I love how easy it's been to get started with this Dell Ubuntu box. The network just works; the sound card just works. Plenty of other things just worked and I probably didn't even notice them, because who notices the things that "just work"? I only noticed the network and the sound card because they didn't work on the previous machine. Anyhow, one detail that didn't "just work": Dell happily sold me a monitor as something standard that goes with this machine; but the Ubuntu setup on the machine didn't realize how many pixels this monitor had. When I tried to choose a screen resolution, it maxed out at 1024 x 768. But this big label on the monitor said I should go for 1600 x 1050. It wasn't obvious how to do this; I'm not sure I did it the right way. Anyhow, edited my /etc/X11/xorg.conf file, found a likely-looking place that said "1024x768" and changed that to "1600x1050". Then I restarted (if I were a 'leet linux admin, I probably could have just restarted X instead of restarting the whole machine, but I don't know how to do that), and then I was able to select 1600 x 1050. So now I have more pixels. And I edited an X11 config file by hand and didn't brick my machine in the process, yay.

What? My point? Oh yeah. So I've been putting the machine through its paces. My goal was not to get more pixels. My goal was to set things up so that Firefox and emacs windows are next to each other so I can edit web pages and see how they look without having windows obscure each other. What web page did I work on?

I updated the No-Name Sushi Menu page. The old version of this page was based on a take-out menu from 2003. This new one is from 2007. What changed? There are fewer kai (clam) choices, no tamago (cooked egg) choices. There are more fresh salmon choices. There is kinbow, which is apparently burdock root. I think I hate burdock, but I'm not sure whether I hate the root, the stem, some other part, or all parts. I guess I should find out eventually.

In other news, because my employer is participating in an upcoming FCC spectrum auction, starting Monday I am not supposed to talk about spectrum stuff. Mostly I'm not supposed to talk about the auction, but in general I'm supposed to be skittish about talking about mobile phone services. So I guess there will not be so many phone-service-hating rants in the upcoming months. Thus:

  • Verizon says that they're going to create an "open" version of their service. Sort of like how your ISP doesn't restrict what model of machine you hook up to their ethernet socket, Verizon wouldn't restrict what mobile devices you use with their services. That would be nice. I'll $&#*ing believe it when I $&#*ing see it. Remember ~10 years ago when telcos were legally required to open up to the CLECs? They all said they were opening up; but they were dragged their feet.
  • You iPhone users are so gullible. How did you get tricked into using a device which such a slow data connection?

You see, most of the people who are likely to be annoyed by those two rants are my co-workers. They're going to be gagged by that same FCC rule. They probably won't read this until Monday, by which time the gag rule will be in effect. I get the last word!

Labels: , ,

home |