Older blog entries for ianb (starting at number 8)

dyork: (tree program) os.path might use statcache, I don't know, but you may be able to optimize your code by using os.stat instead of islink, and isdir. It also would be more correct, as your current program seems to treat all symbolic links as directories. I think it's certain to save at least a little speed, maybe a fair amount (since stat's disk access is probably the biggest performance issue). Also, it's nearly as easy to pass the full path (relative to cwd or not) as it is to change directories, and this will probably also be a little faster. I think this is a case where the smallest version of the program you can write will be the fastest (as long as that means that each file gets stat()ed only once).

Spent yesterday reading through the code for Webware. I understand it a lot better -- the factoring reminds me of Smalltalk. Wrote a document trying to describe how it all fits together.

I realized that most documentation fits two models: tutorials/users guides, and reference documents for the developers. I think that leaves a big gap, for someone who wants to become a developer on the project, and is already a programmer. Being confronted with a pile of code can be very intimidating, not to mention frustrating. You change a piece of code only to find out it doesn't get called when you think it will, or you search in vain to find the code that corresponds to a certain behavior -- you may never find it, the section of code you imagine may actually be scattered across the entire program because you have the wrong model as to the inner workings. Reference documents don't help you there. At best they infer a model, in a vague sort of way.

Webware was pretty bad that way. A lot of generality, classes are often not referred to concretely (since part of customization can be creating subclasses of core components), and a mess of methods passed back and forth. Not so bad when you understand it, but I had to struggle some to figure it out. (that said, I think it is well programmed and very compact... I wouldn't want to even start were it programmed in Perl... it's just complicated and has a lot of hooks for future growth).

I always enjoy code maps, more people should write them. They address concretely what's probably the most important part of the program -- the architecture.

bratsche: I wouldn't worry too much about the degree. Most degrees don't lead to any particular job, or really qualify you for much of anything. Even a graduate degree in science is hard, and a bachelors is useless (except as lab technician, I suppose). Math? You can get jobs in insurance, I guess. History? English? Art history? Just like music, there's jobs but they are quite hard to get. So what... there's lots of good jobs that don't have a degree that leads to them. I'm sure you'll do fine, even if you won't be a professional in the style of a lawyer or someone with an MBA. At least, for all the people I've known with these relatively useless degrees, it's not as bad and the degrees aren't as useless as they seem. Anyway, my CS degree is useless if I don't want to work with computers, which I sometimes think about... ditto with whatever other job-directed degree you might get.

I dunno... it's much harder to find a good job than it is to find a profitable job. I guess it helps if you have those Marketable Skills, but I doubt it. You find a good job because (a) you find good people who will hire you to do good things, or (b) you make a job for yourself.


My girlfriend's been sick lately. There's not a lot I can do to help her, or really even make her more comfortable. Sigh. Anyway, I feel selfish about it, but it's hard to get work done with her around all the time. This is one of many problems with working at home. I don't think I much care for working at home, really. Or I need to tighten down my daytime practices. I don't know. What do people do to keep themselves productive when there's no particular schedules, and certain vagueness to everything you do? Sigh. It also makes me feel very isolated. When spring really comes around, I think I'll make a change of some sort. Forward, backward, or sideways. Spring always makes me feel like pulling loose. Not sure how, yet.

shoen (re: IBM Linux Ads):

It seems like the only way to be a real dissenter anymore is to be truly subversive. "Image Is Nothing" is it's own image, and all that bull. Every way you can rebel, there's someone there to sell you something to express your rebellion, to profit from your dissatisfaction. So how do rebel against the leaches that profit off of your rebellion? If you say they suck, they'll just agree with you and try to sell you something about how much they suck.

IBM would be happy to sell the idea of the socially disfunctional hackers with no corporate sensibilities, in the midst of their almost quintessentially corporate reality. They don't give a damn.

But they are only willing to go so far. In all the pandering to rebellion, they still find it hard to consort with the real believers. They'll never get RMS on an ad, they probably would never try. He's far too sincere. He would seem awkard and disjoint from the environment an ad would place him in; the ad is utterly insincere, entirely cynical, like all ads (except maybe the ads made from stock clipart for roofers in the local paper -- they are genuine).

The weird thing is, the advertisers wouldn't look bad in that ad -- RMS would. The true believer would look stupid and pointless, utterly unhip. He'd be likely to make special note of the GNU in GNU/Linux. Not because he's dumb or doesn't get it, but because RMS doesn't know how to turn it off. He's so utterly sincere that he can't play the game and he can't compromise.

Maybe that's the salvation available -- to be so sincere that the cynicism can't corrupt you. Everyone will laugh at you and think you're stupid, and it will be like a kid in a Special Olympic commercial, or the old woman who couldn't get up, and couldn't act either so that people pounced on her awkard vulnerability. They can't corrupt that because to embrace it would destroy their image. Punks tried to achieve this by flicking off their audience and saying fuck a lot -- by pissing everyone off -- but they only made it all worse, helped us all along towards this cynicism which makes it so hard to rebel. But you can be totally the opposite and fuck things up a little once again.

It's hard, though, because like all the hardest things if you try too hard you'll fail.

Anyway, that's what comes to mind. When someone says "Open Source", tell them "No, Free Software", and when they look confused say "like speach, not beer", and keep saying that until you annoy them.

Just walk in and sing, "Join us now and share the software". You know if one person, just one person does it, they may think he's sick and they won't take him. And if two people do it, in harmony, they'll think you're both faggots and they won't take either of you. And if three people -- can you image three people walking in, singing a bar of The Free Software Song and walking out? They may think it's an organization. Can you imagine fifty people a day, I said fifty people a day, walking in, singing a bar of The Free Software Song, and walking out? Friends, they may think it's a movement. And that's what it is.

I'd apologize to Arlo Guthrie, but I doubt he frequents Advogato.

Looking for a new host. I feel kind of bad about leaving my current host, 'cause it seems like it's just one guy posing as many email addresses, which is about as much as I can offer anyone too. I empathize.

Anyway, okgonow.com has a really good deal, but it's almost suspiciously good. I worry that they are weird, or have poor uptimes, or something. Anyone know of a good host that's reliable, fast, and offers lots of flexibility? I've used jumpline for several sites, but their lack of features (no mod_rewrite!) has left me unimpressed.

I think I'll go for a walk instead.

14 Mar 2001 (updated 14 Mar 2001 at 08:08 UTC) »
async: if it's a piece of software, you should just post it on freshmeat and update the link there.

And if you are moving hosts and keeping the same hierarchy, you should ask the old host to do a redirect. The easy way under apache is just to put a line in the .htaccess file in your home directory like:

Redirect permanent /~user/ http://newhost/newhome/

I've been sorely in need of some recreational programming lately, something that just seems amusing to me. I've been thinking of writing some interactive fiction, because that's always seemed interesting. But I hate puzzles, and I hate trying to figure out the right word to do something. And of course the can-opener-in-search-of-a-can situation. So I'm trying to figure out a good compromise. I really like Interstate Zero -- I'd love to make a game like that.

Anyway, I'm trying to figure out what the right balance is between freedom and flexibility. Should conversations be multiple choice in essence? Without that, conversations pretty much don't exist in IF. Should everything else be multiple choice? I enjoyed Choose Your Own Adventure, but...

I should probably think about plot and storyline first, though.

I just had a brainstorm, and I feel like I should commit it to writing somewhere, so why not here?

One of the big parts of what makes it difficult for normal users to be as effective with a computer as a programmer is that they can't interact on an abstract level. This is why command lines are great for programmers (and I use that term widely), but not so useful for normal people. cat `ls -t` > time_sorted.txt is not a way most people are going to think. They would want to make each intermediate step concrete, perform the tasks and ensure that each is correct then move to the next. This takes more time, is more prone to errors -- but, for most people, that's all they can do.

Anyway, it would be nice to change that, but that wasn't what I was thinking about. I was thinking about web page templates.

Templates are hard to manipulate in a graphical, WYSIWYG environment. That's why DTML, PHP, ASP, JSP, whatever-it-is-that-Cold-Fusion-uses, etc., exist. You can deal with simple templates in a graphical client -- fields exist which get replaced when the page is served up. But repeating fields, conditional fields, etc., are much harder to deal with. Graphical editors simply can't deal with these. How, for instance, would you deal with a table has repeating rows? The HTML-oblivious designer doesn't even know that there's a distinction that the table begins with <table> (but can't be seen), and then the row begins with <tr>, and then you put in real content. How are they going to show that the row should repeat, but not the entire table?

Okay, so that sucks. All designers should know HTML. I really don't think that's so hard, mostly people are just scared off by the initial learning curve. That's true with most higher computer skills. It would be nice to change that, like I said, but that's not what I'm thinking of now.

So why not just implement a truly WYSIWYG web page editor? It will show at least an example of the actual output that a person browsing the page will see -- with all fields replaced, repeating done, etc. You'd have to allow easy changing of examples, to explore all the possible ways the page could render (with no results, one result, many results... etc). Sounds great...

Oh, but it's hard. How are you going to communicate with the server to get this rendering? Doing an FTP upload, then querying the server, is hardly the sort of thing that can be done as the user types. Just like rendering proportional fonts and paginating used to be way to much to do as the user typed. Which is to say, it is hard, but similarly difficult things have been worth it in the past.

The optimizations that would have to exist, I think, would be to implement at least a subset of the server environment on the workstation (or actually run right off the server), and to have a template language that could be interpretted incrementally. (Though quite probably, the incremental thing wouldn't be necessary for a reasonably quick language).

The other boundary would be that the designer would still have to write in an abstract way. Sure, they'd see the repeating fields or whatever, but they couldn't write those repeating fields -- they'd have to write something that represented the notion of an element that repeats in the abstract.

But, again, this has been done before -- that is, people have adapted to this sort of thing. The WYSIWYG word processor only allows you to input data in the abstract. You don't handwrite on the screen at the location you would like the text to go (thankfully!).

Instead, when you want to go down, you hit the Enter key. When you merge paragraphs, you go the beginning of the second paragraph and hit Backspace. These aren't concrete ways to interact with the document. But people don't realize they are abstract. They create an internal model of how the word processor works. They realize -- even if they can't articulate it -- that there is an invisible character that represents a paragraph break. They realize that some, but not all, line breaks are caused by this. Just like people learn that tapping peddles and twiddling wheels can control cars, the ability to manipulate a document in the abstract is in the grasp of nearly everyone.

What WYSIWYG gives is feedback. Some people can visualize things and work with very little feedback, but for most people it is nearly essential. So if you have a truly WYSIWYG editor, it just might make sense to people to make complicated and dynamic templates.

How the interface might actually work, I'm not sure. But the idea really intrigues me.

I was pondering various things last night while I lay awake in bed, and I remembered MUQ, which I hadn't thought about in a while (a language/server/persistent programming environment for developing MUDs). It seems like it got a long way, developed by one person who really wanted it to succede, and then for whatever reason his interest faded off. Maybe his ambitions were accelerating slightly faster than his progress, which is discouraging.

Even though it's aging as we speak, it still seems like a more thoughtful and robust solution than I've seen before. A not-so-ambitious project built on it (like a shared world with tile-based graphics or something) could be quite effective. It would still require a lot of work from the author, as well as others... another aborted effort probably wouldn't be useful, though.

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!