Log

[2008.1.28]

I feel like I've jumped into the 21st Century in my audio consumption in the last week or so. After getting my new MacBook, I belatedly realized that I could listen to radio programs in a Tivo-like way via podcasts. So I subscribed to a bunch of NPR and BBC programs and now I listen to those instead of having the radio on all day (it's only on while I sleep now).

Then I bought my first full album from iTunes Music Store -- my local record store was totally unable to obtain The Byrds' Turn! Turn! Turn! album for me. I was going to get it from Amazon, but one night I just gave up and downloaded it from iTMS. Then last night I got the Field Music album, and today the High Llamas' latest.

So since I'm now listening to so much stuff off the computer, I wanted some decent-quality speakers. I plugged my iPhone into a bunch of different models at a couple of the big-box stores. I ended up with the Harman/Kardon Soundsticks II. They seemed to be about the only ones I heard with decent treble. At home, they're pretty satisfying, but there's a lack of lower mids.

Buying music as files only is a big step for me. I've always resisted for two reasons: the sound quality isn't as good as CD (though professionally-mastered AAC files do sound good), and DRM. But I'm totally down with not constantly accumulating more physical possessions.

[2008.1.27]

New favorite new song: "Give It Take It Lose It" by Field Music.

[2007.10.20]

Trylon 2: The old parser got the new expression precedence today.

[2007.10.19]

I've been putting off the Trylon 2 release by working on the new parser. Today it self-compiled for the first time. It's unlikely to be in the release (there are still bugs compiling other programs). However, it features improved expression precedence, which I'll probably port to the old parser before release.

[2007.10.14]

Trying to get Trylon 2 ready for release. The current tarball is at http://somefancy.com/trylon/trylon-2.tgz. Today I worked on fixing the tarball so it works, and the ReadMe files.

[2007.10.11]

Wednesday night at Hip Kitty is (still) happening (again), popularity-wise and musically. Manny is back on drums, has been back, everyone knows his name now.

My next recording project, after having stalled, has started to fall into place again a little this week.

Trylon 2 has been more or less done since at least 2007.9.25, when it landed in the Trylon Git repo at repo.or.cz. (I was cooking it up in the Trylid repo.) Even the docs are much better (or at least more complete) than Trylon 1. But I have yet to do the release. In the meantime, I've been working on the new parser and the interpreter. The first stab at the interpreter is done. It'll interpret a file full of statements. It'll probably be included in the release even though it's in an inchoate, experimental state.

[2007.7.26]

I forgot to mention: on 2007.7.6 (I think it was), one of my old projects ("The English Editor", from 1998) made the front page of programming.reddit.com! See what people said about it here.

I've been trying to do Trylon 2, which would have Trylid's syntax and symantics (prototype-based, plus some less radical changes), but with a C backend (instead of Jolt). At first I was trying to modify the existing Trylon compiler, but now I've switched to trying to add a C backend to the Trylid parser.

[2007.6.6]

I returned from the usual Tuesday night activities to find that a large SUV was parked halfway into my spot, with broken glass by the side and a police car close by. It seems someone came to drop a friend off at my apartment complex, parked hastily in an open spot (mine), and left the keys in while seeing his friend to the door. And while thus temporarily parked, someone else broke in and stole the keys (and presumably other things). Eventually the police tow truck came for the SUV, leaving me and the apartment manager to deal with the glass. Of course, I didn't think to take a picture for Buzznet until it was far too late.

[2007.5.22]

I kinda forgot this log even existed... But yesterday was a banner day: the first release of Trylid, my latest computer language. It's an adaptation of Trylon to run on Fonc. The major user-visible difference from Trylon is that it uses a prototype-based object system, rather than a class-based one. For me, the big difference is that the generated code is in a Lisp-like language instead of C. And let me tell you, Lisp makes a much nicer "portable assembly language" than C does.

[2006.4.2]

Prepared the audio portion of the Get Sped! rerelease.

[2006.3.28]

Did the cover for False Positive. I ended up throwing together something non-sequiturial, which is probably better. Tomorrow I get to see what all three CDR covers look like on paper.

[2006.3.27]

Scanning and layout for the cover of Operations. I also found the image I had in mind for the cover of False Positive, but it turned out to be unsuitable. I don't know what I'm going to do for that cover. I'd like to get it done tomorrow, since I'll have access to a laser printer on Wednesday. And to think I thought my graphic design days were long behind me.

[2006.3.26]

I've been struggling with the art for a CDR reissue of Get Sped!, the 1991 cassette album by Speed Bumps. There was no problem at all reading the floppy that contained the original artwork, even though it's a 15-year-old Mac floppy and I read it on a Linux box. But there were a couple of EPSF files of special-effected text that caused a lot of problems, particularly in terms of preserving transparency. ImageMagick and the GIMP were the keys to making them work. I haven't seen the result printed out yet, though. Anyway, in a couple of days though whole thing should be ready.

[2006.3.19]

I'm gonna try to start this up again. I've been really busy this year. New projects include "mf", an alternate frontend for MythTV, and "vix", yet another text editor. Trylon has been under active development too. Also, I contributed to an open-source project ("cgdb") for the first time.

Trylon: implemented dictionary literals, and tuples as package literals. Made "vix" use a dictionary literal for settings defaults.

[2005.8.27]

DAT Archiving: Skeptic Tank by Radio Zero. Also "Stranger to the Rain", Kenny's solo power ballad.

The Gumstix arrived on Wednesday, and so far I've seen it boot, but I can't talk to it yet. The serial output works but there's something wrong with the serial input. Its Bluetooth and USB interfaces are working, but they're only set up for TCP/IP, and I'm not set up to route their packets. I ought to set up Bluetooth anyway at some point, so maybe I should try to do that now instead of wrestling with the serial. But the serial's important; I think it's the only way to flash a new kernel.

[2005.8.24]

The Gumstix was supposed to arrive today, but UPS fumbled it. I battled the GNU build system and succeeded in cross-compiling the Boehm garbage collector. Later I (rather easily) got Trylon's build system to cross-compile the existing Superbit program.

[2005.8.15]

The OLED display did arrive today. Without documentation! With the company's web site being very out-of-date, I'm completely at a loss as to how to hook the thing up. Also, there's a dismaying crease along the connector.

The Gumstix did come back into stock, and I did order it.

[2005.8.14]

The editor for Superbit/Dot is now feature-complete. The next task will be to add some kind of command-line shell. Or I may download the Gumstix SDK and start the porting effort. Tomorrow the display is supposed to arrive, and the Gumstix I want is supposed to be back in stock so I can order it. (Also, the Israeli settlers are supposed to leave the Gaza Strip.)

DAT Archiving: Get A Load Of Me by Lo Han. Exquisite (and tuneful) hate-rock.

[2005.8.13]

Rented "What's New, Pussycat?", recently released on DVD. 1965, Peter Sellers, Woody Allen, Bacharach. Hit and miss, draggy at times, but when it's funny it's very funny. Sellers fans shouldn't miss it.

[2005.8.9]

Quick Superbit update: I was trying to finish up the editor over the weekend, but other stuff came up. I did get a good bit of work done on it, though. I ordered the display today, but I'm still waiting for the Gumstix I want (the top-of-the-line model, with Bluetooth networking and the most flash memory) to be back in stock. I emailed 'em today; they say it should be in stock this week. Also, Jim Bumgardner suggested a new name for the project: Dot. I'll probably end up using that.

[2005.8.2]

Superbit proceeds apace. The software can now do rudimentary text editing (although it doesn't yet save the results). I spent way too much time poking around the web trying to find a suitable display. It turns out you can actually buy OLED displays already, in full color, and they're pretty much the exact correct size. They're not cheap, but it'd be worth it. But I couldn't find out how to connect one to a Gumstix (or anything else).

[2005.7.31]

My fantasy device now has a name: "Superbit". I've been totally on fire with it, especially after talking about it at the party yesterday, and today I started coding it. And I got pretty far. The Morse code decoding was rather tricky; trickier than what I'd done last night, due to the way it needs to tie into the rest of the program. But I got it working. And I got the text-reader aspect of it working. I'll probably order a Gumstix in the next day or two. This project is go!

[2005.7.30]

Wrote a Morse code decoder program, based on an algorithm I found (not easily) on the web. It works!

[2005.7.29]

Song of the week: "This Is Airebeat" by Squares.

[2005.7.29]

Added pause and instant-replay to my RSVP reader program. I guess it's done.

For the last week or so, I've been working on adding lambdas (a.k.a. closures) to Trylon. I've just been nibbling away at it instead of just doing it in one or two concentrated sessions, but I'm getting pretty close to where I can test 'em. Once they're done, I'll have a decision to make. Because in a way, they're in competition with the existing iterator mechanism (and the "for..in" statement). They're both nice ways of doing iteration, but which one should be "blessed" by being used in the standard library?

A related issue is generators (like Python's "yield" statement). That RSVP reader program reinforced my awareness of how nice it would be to have them. They're kind of like exceptions, in that you don't use them that often, but when you do they're really helpful, and they pretty much have to be part of the language (not just in a library). Some of the techniques for implementing lambdas are related to what would have to be done to implement generators. I may have to get a better understanding of "continuations" in order to implement them.

[2005.7.28]

Finding this article on BoingBoing got me interested. What about a device about the size of an iPod Shuffle, with a one-word display, and text input via Morse code? It could probably be built pretty easily using a Gumstix (I dunno about the display, though).

So anyway, I whipped up a simple program in Trylon (it would've been simpler except I was dealing with X Windows) to do RSVP display of any text file, and I started reading a bunch of stuff off the web using RSVP. Kinda fun. I have it set for 175 ms per word (5.7 words per second). I feel like I read a little quicker that way, just because I'm forced to pay attention. I'll probably make the program support pause and instant-replay at some point.

Bought a rice cooker.

[2005.7.15]

DAT Archiving: Orphan Choir, by request from Irvine.

[2005.7.12]

Trylon: Functions beginning with "create-" are now considered creators (a.k.a. "constructors" in C++ parlance), along with the functions named "create" or starting with "create:" that were considered creators before. This will allow things like "Point new-x: 10 y: 20" or "GlyphsSelection new-from: first-glyph to: last-glyph".

[2005.7.12]

Trylon: a few simple changes to the compiler signficantly reduced the number of temporary variables in the generated code. Even if you know what that means, you're bored, but I was quite pleased.

Perisphere is still happening, back to a transliteration mode. I feel it could use some more redesign, but I don't know exactly what should be done.

[2005.7.10]

After being stalled out for quite a while, Perisphere is happening again. I did quite a bit of work on it today, including redesigning some ancient bits of the architecture.

[2005.7.9]

Over the last few days I was dismayed to find some of my projects spontaneously broken. Perisphere wouldn't compile on Mac OSX anymore, and both Perisphere and EE3 were crashing on my main Linux box. The former was fixed with a simple software update (apparently an earlier update removed some needed header files). The latter was a mysterious font problem that I eventually found a workaround for, without actually discovering the real cause (beyond the general fact that X Windows sucks).

[2005.7.3]

DAT archiving: Puncher Pedal "Sequential Injection", by request from Modesto. This was to be a long instrumental piece made up of multiple sections, filling a reel of tape. By late May 1996, four sections had been recorded, but nothing was done after that. The first section, "Satanic Doxology", appeared on the Puncher Pedal album.

"Smile" DVD: Actually a pair of DVD's. The first is a documentary. It seemed like roughly half was about the creation of Smile in 1966-7, and the other half was the completion of Smile a couple of years ago, ending with the first live performance. Even the second half held my interest. Thumbs up. Disk Two is a live performance (perhaps that first performance); I didn't watch it. I did watch one of the bonus tracks, a "featurette" about the recording of the album (the completed 21st century one); it's astonishing because, unlike everywhere else, in the studio Brian is fully in charge.

[2005.7.1]

DAT archiving: Speed Bumps [Mk II] recordings, 1994-5.

[2005.6.29]

Trylon: a little bit of documentation.

DAT archiving: Galaga demos, 1995. "Pouting", "Sludge", two others. Also, two songs from late 1995 by an unnamed band denoted as "Bayete's Band". I believe they evolved into Seki.

[2005.6.28]

Started work on Trylon documentation. That included writing the program that turns the plain-text documentation source into HTML. (Actually, I just adapted the program I use for this blog.)

[2005.6.24]

Did all of the "makefile" work needed to build the Trylon compiler if Cleet isn't available. Now I just have to set up to make the tarball, and I'll be able to package up Trylon so others can use it (easily). Also, I have to write documentation describing the language...

DAT archiving: The Nairobi 4.

[2005.6.19]

Spent some time looking at how to package up the Trylon compiler for release, in such a way that one wouldn't need the Cleet compiler to build it (just a C++ compiler). Unfortunately, the vagaries of Cleet's build process make it very difficult to do that in an automatic way. Looks like I'll have to put it together by hand.

More work on selections in Perisphere. Just a lot of transliteration, and there's still a lot more to go.

[2005.6.18]

DAT archiving: Beauty Constant demo from 1985.2. Not nearly as good as I remembered it.

[2005.6.17]

Today I was laid low by a nasty migraine, the worst one I've had in years. It didn't seem like much at first, but while I was driving to the Village for coffee I nearly threw up and had to turn back. Later I did boot. After that I was able to get some tea down (to stave off caffeine withdrawal) and fall asleep.

[2005.6.15]

More of the same: work on selections in Perisphere, DAT archiving. The latter of The Spenser Sessions by Radio Zero, late 1990. I think that was the first time I recorded a band I wasn't in; it was definitely the first time I recorded onto 8-track.

[2005.6.14]

Perisphere: work on selections, but not to where they work yet.

DAT archiving: "Pantheon of Slop", consisting of two solo recordings by Jim Shapiro, late 1991. The songs: "Black Magnet Black" and "Jet" (a Wings cover). Here I encountered the first dropout of the DAT archiving project; however, it was well into the fade of the last song.

[2005.6.13]

A bit of work on the X Windows (that is, Linux) version of Perisphere. It's now pretty much equivalent to the Mac OS X version. Now I just have to get back to making it actually edit.

DAT archiving: Julie Long from late 1991. Most of the songs had been in Orphan Choir's repertoire, but on these recordings U Thant's rhythm section (Cohen and Folta) was employed. (Orphan Choir's unreleased posthumous album is in the "in" pile.) I was struck by the number of recordings we all did in 1991. I suppose it was because we didn't know how long we'd have access to the 8-track gear.

[2005.6.12]

DAT archiving: U Thant demo, summer 1990, featuring "Everlasting", "I Know I", 3 others.

[2005.6.11 (later)]

Moog, a documentary film: Poorly assembled. It tried my patience. Extensive interviews will provide primary source material for future Moog historians. Read Analog Days instead.

The Gift, The Jam: Surprisingly, I hadn't yet heard this as a complete album. I still haven't quite, since I skipped the funk workouts. Probably a two-star album, but I need to digest a few of the songs more.

DAT archiving resumed with two tracks from 1991: "Chandelier" by Doug Cohen, and "Precious Grey Eyes" by Marc Dinkin.

[2005.6.11]

Trylon and Perisphere were stalled for quite a while, but today I finally got back to 'em. I made scrolling work in Perisphere under X Windows. Frame rate: 60 fps plain text, 40 fps XML. Much better than Mac OS X at the same CPU speed (1.0 GHz). No wonder Apple is switching to Intel (although there are other factors at play). Still, scrolling is just as jerky as it is on Mac.

With both Perisphere and EE3 now running on Linux/X, I now have some basis for comparing the speed of Cleet and Trylon programs in the real world. Does Trylon's slower (but still O(1)) dispatch slow it down? Well, I didn't set up an exact comparison yet, but it looks like the frame rates are pretty darn close.

Looks like it's been 10 days since I last had anything to report here. Paid work has been on an uptick. I finished watching Rocket Science two or three days ago. It was good; good footage, good interviews, it's hard to go too far wrong when your topic is the space race.

[2005.6.1]

Jury duty come and gone. I got there almost a half hour late, but that didn't seem to be a problem. In fact, it was quite chill. I guess I missed the big cattle call. I got sent to a trial and sat through jury selection without being called up into the box, and then it was time to go home.

[2005.5.31]

Glasses shopping. Aargh. Using the camera definitely helped, but the frames that looked best in the camera's display aren't the ones that look best on the computer screen. But I'm not sure enough to try to change the order (and it'd be good to get some feedback from people before making such a drastic move). I probably should've tried some longer-distance shots too.

Last night I archived Songs For Comps 1993, the last of the Speed Bumps (Mk. I) DATs.

[2005.5.29]

Bought a digital camera (Canon SD200). Set up a Buzznet account. The camera is nice and pocket-sized. Its big flaw is that it always sets the flash mode to "auto" upon powering up. There's no way to tell it that I basically never want it to flash ever.

One of the uses for the digital camera will be shopping for new glasses. Also to that end, I went to a local optometrist yesterday to refresh my 'scrip. It seems that, in the process of measuring my old glasses, the staff there put a big wide scratch right in the middle of the right-eye lens. Now I need new glasses; before I just wanted them.

[2005.5.28]

Did the Xft library for Trylon. And I spent a bunch of time tracking down a nasty bug that sometimes caused the Trylon compiler to crash. It turned out to be a bug in the Cleet library routine that runs another program -- the array holding the program's arguments was allocated too small. In the process, I finally learned how to use watchpoints in GDB effectively, working around its stupid "a variable fell out of scope, so I'm gonna delete the watchpoint" behavior. (The technique was: "p &<expr>"; "watch *$<n>".)

Music archiving activity continues: tonight it was Jet Lab (the EP by Speed Bumps [Mk. I]). Would TU4 be interested in Gridlock (aka The Black Room)?

Rhino haul: Rocket Science, 3 DVD set: Rhino had it on display and on sale, so I took a chance. It turned out to be a TV series from Canadian Discovery Channel. I watched three eps already, so it must have something going for it. Runt by Todd Rundgren: The medley was rad, but none of the rest will stay on my iPod.

[2005.5.27]

Wrote an Xlib library for Trylon. (Basically ported it from the one in Cleet.) I have to do the Xft library too (it's smaller), then I'll be able to have Perisphere running on Linux as well as on OSX.

Finally set up to transfer DATs to the computer, and transferred Get Sped!. The good news is that my old DATs still play. The bad news is that I wasn't a very good recordist back in the day.

[2005.5.25]

I didn't get any Trylon work done on the plane back yesterday, since my PowerBook battery has more or less completely died. Today I made Trylon accept any kind of literal (7, 3.14159, "string", 'symbol', `c`, true, false, nil) as the initial value of a class/package field. Not tuples, though. That would be cool.

[2005.5.21]

Yesterday on the plane I got much of the "autodeclaration" stuff done before my battery ran low. Autodeclaration of instance fields and non-nil initializers for class/package fields remain to be done (and all the autodetection of class vs. instance fields, and classes vs. packages, if I decide to do that).

[2005.5.19]

I got all excited with new (and old) ideas for Trylon last night. (My language notes are online here.) I guess I just have to admit that I'm much more interested in language design at this point than in implementing an editor. I'm thinking I might work on some of that stuff on the plane tomorrow, although catching up on sleep is also on the agenda.

[2005.5.17]

More harmonies by Nathan and I, and mixing. The two songs are done.

[2005.5.15]

I went down to the Clubhouse and did harmonies for (and other work on) TU4's Cars cover.

[2005.5.14]

Last night I rented Riding Giants, the Stacey Peralta doc about big-wave surfing. It's good, I especially liked the stuff about the 1950's, but it was still a tiny bit of a letdown after Dogtown And Z-Boys.

I finished reading Wouldn't It Be Nice: Brian Wilson and the Making of the Beach Boys' Pet Sounds, by Charles L. Granata. It's as good a book as we're likely ever to get on that album. Granata got tons of interviews with most of the major participants (and others) -- the Wilson bros. are about the only folks he didn't get to talk to. Plenty of geeky detail, sometimes a bit too much close analysis.

Perisphere work has slowed to a crawl over the last week. I took a detour from the editing code to work on a curses-based version.

[2005.5.12]

TU4 recording session for this project (hmm, why do they think it's still 2004?). Gee, we're raw and sloppy. Harmonies and mixing remain to be done.

[2005.5.10]

Built the kernel for the new somefancy.com. Now I have to decide: Apache 1.3 or 2.0?

[2005.5.9]

My newegg.com order arrived today. The gig of RAM in the Shuttle really helps. Not only has it stopped having to swap, but it has lots of cache now too. It's quite a nice little box, actually; it feels zippier at 1 GHz (I'm underclocking it; that "heat pipe" doesn't really handle running the CPU at 1.4 GHz) than my old main box felt at 1.3 GHz. Is it the difference between Athlon XP and Duron?

The new hard drive is happily receiving Gentoo.

[2005.5.7]

TU4 played a bar called The Tropics Lounge in Fullerton. It was a wild night of sweaty, drunken rock in a divey bar. Vocals? I couldn't hear 'em. It was so different from last night, yet equally successful in its way.

[2005.5.6]

TU4's gig -- two sets at the Press -- went quite well. For the second gig in a row, there were people dancing. We were very concerned about our volume level, and it seemed like we got it right. I had had a pretty bad cold for most of the day, but it cleared up right around the time we went on. I have a feeling we'll be back.

I spent most of the afternoon on yet another ineffective Trylon optimization.

Correction: the sick drive in the clubhouse server is a Western Digital, not a Seagate. I ordered the (new) replacement drive last night...and it's gonna be another Seagate Barracuda. I also ordered a gig of RAM for the SS40G -- it feels pretty speedy in a lot of situations, but it gets into the swap way too soon, with a consequent slowdown when switching between apps.

[2005.5.4]

When I woke up this morning, somefancy.com was really, really slow, to the point of uselessness. I couldn't even SSH in to see what was wrong. So I went down to the Clubhouse and plugged directly into it. It seemed fine. But connecting from inside the clubhouse was still slow, so whatever the problem was, it wasn't the DSL connection. I rebooted it and it was fine again. Weird.

That was enough to finally get me to start setting up the new disk for somefancy.com. I was trying that this evening, but it turns out that the disk I bought, to replace the sick one in somefancy.com, is itself bad. I used to be a big fan of Seagate Barracudas; now I've got a couple of bad ones on my hands. The new one seems to have some kind of electrical problem, because it'll keep another (known good) drive on the same IDE bus from working too. It's possible that I zapped it myself by being careless about static electricity. Or it might just be a bad refurb, given that I bought it from a nondescript booth at the Computer Fair.

But it's been a while since I did any "white box" computer building stuff, and it can be sort of satisfying even when it's going wrong.

I started work on editing in Perisphere. It'll be a long road.

[2005.5.3]

American Experience: Victory In The Pacific, on PBS, was great; pretty much everything I'd hoped for. There was lots of great footage, Japanese and American, that I hadn't seen before, much of it nicely restored. The interviews with Japanese people covered much of the same ground as the Cook & Cook book, but with different people. Ogden-Stiers narrated; I still think of him as a Lyman wannabe. Must...buy...DVD.

Finished reading Vanilla Pop by Joseph Lanza. It has an entire chapter on the Association, so of course I had to buy it. It also has chapters on Joe Meek and Curt Boettcher, but it's not at all written from a hipster perspective. The Free Design is not mentioned. And Lanza feels that in order to praise "vanilla pop", he must denigrate rock. After reading the whole book, I'm still not clear on what his definition of "vanilla pop" is; why some artists are "vanilla" and others not.

Not much work on Trylon or Perisphere lately, but soon I'll start on editing in Perisphere.

[2005.4.30]

I've been puttering around with various Trylon optimizations for the last couple of days, none of which have had any serious effect on Perisphere's frame rate.

All my friends are doing the South Park Studio thing, so I joined the herd. Here's the result:

[2005.4.27]

Okay, Perisphere finally displays XML files. A bug in the CSSLexer was the last major hangup.

[2005.4.26]

I did a fair bit of work on both Perisphere and Trylon, but don't have much to say about it. Perisphere still can't display XML files yet.

[2005.4.25]

I'm getting used to using the SS40G as my main computer. It's a little like moving to a new apartment; you rearrange things and get rid some old junk. Overall, this whole experience could've been much, much worse.

The clubhouse server has lost its ability to update software packages. It looks like the hard drive errors have finally caught up with us, months later. I need to make some time -- like, this week -- to rebuild that system. Hmm, I have this now-useless box here at home which could be used to build up Gentoo on a hard drive...

Did some more work on making Perisphere handle XML documents. Nothing major, just a bit to keep it going.

[2005.4.24]

Rooted! My main Linux box at home has been rooted! I don't know what the vector was. The damage seems pretty extensive. I'm trying to clean it up as best I can, but I think I'm going to have to switch over to the Shuttle SS40G (aka "computer in a box") more or less permanently, despite its excessive fan noise.

The clubhouse box seems fine; at least, it doesn't have any of the same symptoms.

Before that happened, I did some work on Perisphere. I decided to tackle XML support next (so far it only shows plain-text files) instead of making editing work. Either way, I'm in a phase where I'm mostly transliterating code from older projects.

[2005.4.23]

I finished up that change to Perisphere's drawing, and it worked. I'm now easily hitting over 40 fps average (up from 32ish), sometimes seeing over 45 fps. There was a sacrifice, however: justification no longer works. I can add it back later, but justified text will slow down the frame rate.

To work on this major change, I made a new branch in my Arch repository, and merged it back into the main branch when I was done. This was my first use of Arch's branch-and-merge facilities, and it was a very simple use, but it's something I never would've dared to do in CVS.

[2005.4.22]

Fixed the mouse tracking in the Perisphere's ScrollerControl, which is now fully functional. More Trylon optimization work yesterday was again not very fruitful. Even an inlined super-streamlined "unsafe" dispatch (disabling the "message not understood" test) didn't make much difference.

Later, I rearchitected the lowest-level drawing in Perisphere. Instead of calling the OS to draw every "glyph" (a "glyph" in the Perisphere code is a word or a space or a punctuation mark), it's going to draw as many as possible (up to an entire line) with a single OS call. That should make drawing significantly faster. This change will actually make the code cleaner, I think. Perisphere's code is decended -- three generations and two languages later -- from the old EE2 code (ca. 2000). And that code wasn't initially designed with having multiple font sizes on a line in mind. And when support for that was added, I should have thought more of making the concept of the "line" a little more central. There is even a longstanding bug in all the editors from EE2 on, whereby when scrolling, a line containing multiple fonts might have some of its words show up on-screen before others. This new change will fix that. I wrote the "draw" phase; I still need to do the "layout" phase.

[2005.4.22]

One By One by the Free Design (1971): Their fifth album, and their last for Enoch Light. Things seem to be falling apart in and around the band. Bruce is gone, leaving Chris to handle all the male leads; his voice is too ethereal for the task. Drummer Bill Lavorgna is gone, replaced by one Billy "Coblham". Phil Ramone is gone, and it takes two engineers to try to fill his shoes. One of the more interesting tracks (to write about, anyway) is their cover of "Light My Fire", which sounds windy rather than fiery (and I have to believe they were conscious of that, given "Ivy On A Windy Day" from their second album). But I guess renaming it "Light My Wind" wouldn't be appropriate. Best songs: "Going Back" and the restless "Felt So Good". The CD (this is the recent reissue on Light In The Attic) seems to have been mastered from vinyl; on headphones I could hear surface noise. Two stars.

[2005.4.20]

I tried doing a little more Trylon optimization (of field accesses), again with little effect.

I got the scroller control drawing in Perisphere. There's some kind of mouse tracking bug that means you can't actually use it yet.

[2005.4.18]

I worked hard this afternoon and got the O(1) dispatch done, solving a couple of tricky problems along the way. (The Trylon compiler used to load up classes even after it had started emitting C code for other classes; the need to assign class numbers meant I had to make sure all the classes were loaded first.) The fill-rate for the dispatch table in Perisphere is 99.1%. Pretty good. And what was the effect on the frame rate? None! I don't understand it...

[2005.4.17]

Significant work on Trylon's O(1) dispatch scheme. I thought it was going to be difficult, but after thinking about it for a day it all started to fall into place. The way seems clear, and another day of coding might be enough to have it working.

[2005.4.16]

It was nice and warm out today (85 degrees when I looked), so to make up for spending the afternoon indoors coding, I cleaned off the grill and fired it up for the first time this year. Mmm, burgers (and a yellow pepper).

I fixed much of the scroll animation jerkiness in Perisphere by accident, just by turning off the debug output. I also profiled it. Apple's profiler was quite easy to use. The number one time consumer was OSX's text drawing. Number two (taking half the time of number one) was Trylon's method dispatch. So I started working on speeding that up by using a dispatch method that runs in O(1) instead of O(N) (selector-based row displacement dispatch tables).

[2005.4.15]

I fixed that "text shear" bug I mentioned yesterday. Here's a tip: When Apple's documentation says "Under normal conditions, you do not need to call this function", don't automatically believe it.

[2005.4.14]

Finished reading The Creation Of The Media by Paul Starr, covering America from colonial times to the eve of WWII, with some European history thrown in. So we're talking basically the post office, newspapers, telegraph, telephone, movies, and early broadcasting. A sentence that gives an idea of the argument and the tone: "The structure of the media...resulted from constitutive choices at key junctures that affected the long-run path of development of communications." The emphasis on political choices is in explicit opposition to any notions of technological determinism. Of course, as a technologist, I like technological determinism. He's pretty good at making his case, though.

Sometime this week I finished listening to the Left Of The Dial box set in my car. Four CDs of 80's indie. There were a bunch of familiar Amerindie classics, probably about a disc's worth, amongst loads of boring crap from England. It's also mastered too loud (in comparison to other audio sources), although I didn't notice any obvious distortion in the car.

----

Scrolling in Perisphere now works. Frame rate fluctuates wildly between roughly 15 and 40 fps. That makes the zeno scrolling very jerky. Faking a constant frame rate is smoother, but not smooth enough. That's disturbing, as it suggests that the OS might be the cause of the problem. But obviously all kinds of animations work fine on Mac OSX, so there must be a way to make it work.

But hitting 40 fps, on the other hand, is very encouraging. And that's with slow O(N) message dispatch in Trylon! And with word-by-word conversion from UTF8 to 2-byte Unicode.

There's also a drawing bug I need to track down. Once you scroll, drawing isn't occurring at the right side of the text, so the text shears off from itself.

[2005.4.13]

Stayed up late working on Perisphere and on Trylon's Carbon library. I was working on handling mouse and key events. I feel like I'm so close to having scrolling working, but it's past time to quit and go to bed. There have been hints of a higher frame rate than what I saw yesterday, but I can't be sure until scrolling works.

[2005.4.12]

Just a little bit of work on Perisphere; I found out there are some aspects of Carbon's drawing cycle that I need to get a better grip on. I was able to get a preliminary frame rate reading for the first time, however: roughly 5 fps.

[2005.4.11]

A good day for paid work. Perisphere is now receiving mouse-down events, but they don't have any visible consequences yet.

[2005.4.10]

I went to a local coffee place today and did a bunch of work on Trylon's Carbon library. There was no free Wifi there; apparently public Wifi access in Claremont is reserved for alcohol drinkers. Anyway, I finally figured out how to make my apps work as real Mac apps: it's all about the bundle.

[2005.4.9]

Much work on improving the event handling in Trylon's Carbon library.

----

Watched the first ep of Battlefield Britain last night. It's a BBC series now running on PBS. The first ep concerned Boudicca vs. the Romans. Formally, it's very interesting. For one thing, it's got a tag-team pair of on-screen narrators (father and son). Secondly, as mentioned previously here, I don't think documentaries should hire actors, but here at least they're trying to do something different with them: "interviews", in the style of documentaries on recent history. One gets the feeling it could work, even though it doesn't here. A note at the beginning says they were improvising; perhaps it was a mistake not to hire writers. And more fundamentally, the actors' desire to portray emotion is at odds with the conceit. In a real interview, the subject invariably tries to recount his or her experiences fairly dispassionately (sometimes right up until the second before he breaks down weeping).

To actually show us the events, they (correctly) rely more on computer animations than recreations. The more traditional computer animations were decent; a bit videogamey but I didn't mind that. But the coolest thing was the "magic map case": one of the hosts carries around a map case that he opens up periodically to show maps of the battle sites. These are actually 3D computer models that are composited on. And once or twice, tiny armies ride across. I wish they'd made more use of that -- it's almost the CG update of the great animated maps in the "Why We Fight" series.

The verdict so far: annoyingly flashy, but I'm digging it.

[2005.4.6]

Perisphere now renders a plain-text file correctly. Woo-hoo! A major milestone. The next big thing will be to find out what the frame rate is, but that will require a fair amount of work on event handling.

[2005.4.5]

Perisphere now compiles and links, it just doesn't run yet.

(Later:) After fixing various bugs that showed up at runtime, it runs, shows its window, and draws! Woohoo! Of course, it doesn't draw correctly yet, but it's an important step.

[2005.4.4]

Okay, I had enough time to think about that bug; today it was time to just fix it. I took the easy way out. It was work that needed to be done no matter which solution is used; I can go to one of the other schemes later if necessary.

More work on Perisphere, and on other Trylon bugs.

[2005.4.3]

I'm still trying to figure out how to deal with the comments-before-"else" thing. The easy thing to do is just grab any comments and blank lines after the "if" block as part of the IfStatement, whether there's an "else" or not. That doesn't match the semantics very well. Another alternative is to parse them, but to put them back if there's no "else". Would implementing this kind of push-back slow down the parser much?

A third possibility is to treat "else" as its own statement, albeit one that's only allowed after an "if". But the more I think about that, the less practical that seems.

Whatever I do, I need to do it for "try"/"catch" (the other "two-pronged" statement type) also. Come to think of it, "iff" (Trylon's conditional compilation facility) should also allow an "else" block.

[2005.4.1]

The gig -- KSPC's "anti-prom" on campus -- was fun, despite carvernous echoey acoustics in the ballroom. The kids were dancing! "Gimme Some Money", added to the set spontaneously to cover one of Nathan's guitar changes, went over especially well. Nathan played the solo on harp, which we'd never rehearsed, but it worked perfectly.

[2005.3.31]

TU4's rehearsal wasn't the best; we're saving our good stuff for the gig tomorrow night.

More work on Perisphere, mostly fixing typos. One or two bugs in Trylon were uncovered and fixed; another bug, involving comment lines before "else", still needs a fix.

[2005.3.30]

A bit more work on Perisphere for Mac OSX.

[2005.3.29]

I guess this is going to be a general log, not just a coding log.

The art opening at CGU (Maloof/Dees) was excellent, the best I've seen there. The PBS programs, which I'd been looking forward to for weeks, were somewhat disappointing. The Nova ep on the tsunami was marred by a bad narrator; the program on Krakatoa (it turned out to be an English production) had dramatizations. I'm against dramatizations in general in documentaries, and these were particularly bad, overegged and overacted. Still, I learned stuff from both, particularly about subduction.

[2005.3.28]

Went back to working on Perisphere, but that included some work on Trylon's Carbon package. As always, Carbon work is slow going, for two reasons. First, it's harder to get around the editor on my PowerBook, even though I'm using the same editor I use on Linux (NEdit). Second, it's hard to find out what you need in the Carbon documentation, since the layers of accretion have grown fairly thick. Right now I'm dealing with ATSUI, which is supposed to be the main text-drawing API (and the only one that supports Unicode). I'm afraid it might be too heavyweight -- it wants to lay out whole paragraphs, but I only draw a word at a time. It doesn't look like Apple is giving me any lighter-weight options, though.

[2005.3.27]

This morning some guy posted the syntax for his language to the Langsmiths list. In it, he proposed using backticks for symbols. Backticks! Why didn't I think of that?! Not for symbols, but for character constants. You see, Cleet started out with double-quotes being used for strings ("a string") and single-quotes used for character constants ('a', '\n'), just like C. But when I added symbols, I knew they needed to use single quotes ('some-symbol'). But then I didn't know what to do about character constants. Smalltalk uses the dollar sign ($a), but that's too ugly. There will be no line noise in my code! What I ended up doing was having the compiler accept symbols as character constants, if they were only one character long and were in a place where a Character was expected. But there were cases where that broke down, leading to this ugly idiom: "parse-text-into(node, 0 + '<')".

But backticks give me a unique representation for character constants that isn't too ugly. Example:

if char >= `a` && char <= `f` value += char - `a`

So this afternoon I implemented that.

Then I rewrote the code that parses the "build-settings" files (part of the "make"-less build process implemented last night) so it uses Trylon's lexer, instead of QuickParser. Then I added "if" statements to the "build-settings" files. So far they can only be used to conditionalize on the OS (technically, the uname: "Linux" or "Darwin"), but that's pretty significant already. I'm thinking of adding a system-wide "build-settings" file, but currently there's no way to override c-flags and link-flags, only to add to them.

[2005.3.26]

Starting to get stuff done in the early AM. Trylon can finally set arguments. Blogifier styling and augmentation.

PM: Started work on having the Trylon compiler drive C compilation and linking. But I was tired and squeezed for time by social events, and didn't get very far.

But I returned somewhat early from the Press, and fully implemented having the Trylon compiler drive the whole build process. No more makefiles! (Actually, there are still vestigial makefiles, just 'cause I'm used to typing "make", and I'm sure Mac OSX will need some post-link steps eventually.)

The other thing about having the Trylon compiler drive is that there is now separate compilation of the C files, so that if one doesn't change (and it has been compiled before), it doesn't need to be compiled again. Cleet did this by using "make", but Trylon's way is much more straightforward.

[2005.3.25]

Nothing at all exactly on this date, actually. Got a lot of paid work done, though.

But it's been a big week. Blogifier was started, which is the first actual program (not just a test program) to be written in Trylon. And it found a huge bug in the Trylon compiler. The bug was causing semi-random "message not understood" errors, and probably crashes too. I was afraid it might be a bug in the garbage collector, but it only occurred when the Code class was used. It took me the better part of 24 hours (over two days) to debug. It turned out that a subclass was not taking fields from superclasses into account in determining the size of an instance. (The code was trying to do it, but was doing it wrong.) So objects were too small, and setting an instance variable would clobber some other object.