Consolation prize

I discovered Consolas a couple of weeks ago; and I’ve been using it heavily since then. It renders nicely on the Mac (where it has supplanted Andale Mono) as well as with Xft (where it has supplanted DejaVu Sans Mono).

Something about Consolas makes Emacs behave just a little bit goofy: for some reason windows sometimes stop scrolling in response to console output.

A snake in a blender

I didn’t want to like Python. I’m still not sure that I do. But I have to admit that it is starting to grow on me. I’m beginning to get used to its goofy ideas about whitespace. And its double-underscore-emblazoned special identifiers are starting to hurt my eyes less.

I have been learning to use Blender. I can’t count the number of times in the past I had started the application, messed around for a few minutes, and then closed it in frustration. But a few days ago, I got it to do something I wanted.

Cool.

So I’ve continued to play around with it. And, slowly, I think Blender is managing to bend my will to its own.

Of course, it wasn’t too long before I needed to use the VRML exporter. And I found that it didn’t play nicely with meshes to which the “Bevel Center” script had been applied. So, a few hours of staring at the export script (in Python, like a significant chunk of Blender’s functionality) and asking around on #blendercoders later, I had a fix.

And now I know some Python.

Shedding ANTLR

My word… was it really all the way back in 2001 that I first latched onto the idea of replacing OpenVRML‘s ANTLR-based parser with one written using Spirit?

I guess I shouldn’t be so surprised; I was immediately taken with Spirit upon discovering it. Though back in 2001 Spirit still had a good deal of growing up to do; it’s come a long way since then. And given that Joel de Guzman and his cohorts are hard at work on Spirit 2, I get the idea that it will yet go a good deal farther. But I digress.

It’s the middle of 2007 and I’ve gotten serious about writing a VRML parser for OpenVRML using Spirit. Why now? Well, ANTLR certainly hasn’t gotten to be any less of an annoying dependency over the years. But another factor is that a new major version of ANTLR has been released (3.0). I think my efforts are better spent moving away from ANTLR entirely than on upgrading to the new version (which I understand to include nontrivial changes to the grammar format).

Now, I don’t want to come across as disliking ANTLR. It’s a really nice tool. In fact, it’s the nicest parser generator I’ve ever used. Functionality is very discoverable and I found, for the most part, the general behavior of ANTLR parsers to be very intuitive. But it has its downsides:

  • It’s a code generator, and thus it has the caveats that go with any code generation.
  • It’s a Java program, and thus it has the caveats that go with any Java program.
  • Even though it can generate code for a number of languages that are Not Java, the Not Java language backends are maintained by persons other than the primary author of ANTLR; thus, these languages wind up being second class citizens. (For example, ANTLR 3.0 has been released without C++ support since the maintainer of the C++ backend for ANTLR 2.x didn’t have time to port it to the new version.)

I actually started in earnest on this project at the end of last summer. I made a good deal of headway, getting as far as developing a good understanding of how to use Spirit’s stored_rule to create a grammar with productions that get modified as part of the parse. This solved the somewhat tricky issue of parsing node field values. But then I got side-tracked with getting the stand-alone viewer (openvrml-player) working reliably; that took much, much longer than I’d anticipated. But now I’ve picked up pretty much where I left off. As of this writing, I can parse nodes, EXTERNPROTOs, and PROTOs, except for IS mappings. I still have to do ROUTEs; though they will be pretty easy now that I’ve got DEF working.

As with the ANTLR-based parser, I’m doing a good deal of semantic checking; this parser will be just as aggressive about rejecting code that’s Not Quite Right as OpenVRML’s current parser. But unlike OpenVRML’s current parser, I’m using very little of OpenVRML’s runtime machinery to accomplish this checking. The idea is to make this parser much more reusable than OpenVRML’s current parser. The current parser isn’t really exposed; users can read the file into the runtime and then inspect the node tree created for the runtime. It turns out, though, that a good deal of OpenVRML’s users (and prospective users) don’t care one bit about a VRML/X3D runtime—they just want to read a VRML or X3D file and do something with the data. So, the new parser will have

  • Pluggable semantic actions
  • Minimal dependencies on the rest of libopenvrml—ideally, linking with libopenvrml won’t be required at all for someone just using the parser

This will all be possible through the magic of Spirit and C++ templates.

iRiver S10

After years of sitting on the sidelines, I’ve taken the plunge and gotten a digital audio player.

iPods don’t interest me. While I appreciate their slick interface, I’m not the least bit interested in iTunes (or other online music services). And the fact that they don’t play Ogg is a deal-breaker for me. I use a Linux desktop (GNOME) and Ogg is easy for me to use, high quality, and completely unencumbered.

The requirement for Ogg narrows the field quite a bit. Narrowing it further, I’m interested in a flash-based device. So for some weeks I’ve been considering the Cowon D2 or the iRiver Clix. But ultimately the iRiver S10 won me over. The multimedia capabilities of the D2 and Clix don’t interest me; and the S10′s form factor is quite attractive.

I received my S10 yesterday. The functionality and quality are top-notch. And Nautilus makes it easy for me to convert selections from my library of FLACs to Oggs on the S10.

I am very happy with it. But here are the few things I don’t like:

  • Unless you’re using a playlist, files play in the order of their FAT entries. I’d have preferred/expected alphanumeric order. The included software includes the facility to reorder the entries (and thus play order) however you like; however…
  • The included software only works on Windows. I realize that providing software that works on Linux is probably expecting too much; but I was expecting a Mac version. This software isn’t absolutely vital; but the FAT entry reordering is very useful and the software is the most convenient means I’ve found of creating playlists. (Though so far I haven’t found myself messing with playlists.)
  • The included software seems not to work at all unless it’s run by a user with Administrator privileges. Lame. Really lame.
  • No case was included; nor does anyone appear to make one. Hopefully that will change. An armband would be especially handy.
  • The “D-click” navigation is a pleasure to use; but it means that the player can’t really be operated while stored somewhere that’s at all a tight fit—like, for instance, pockets in jeans. If there is some way to lock the interface, I haven’t discovered it yet.

Feeding (and silencing) the beast

My primary development box, hinge, has seen a bit of an overhaul lately. Most significantly, I snagged some Opteron 285s that were refurbished units (i.e., system pulls) from HP servers for $325 each. These replaced the 242s that I originally built hinge with. Twice the cores and a full 1 GHz faster—quite an improvement.

hinge is housed in a Lian-Li PC-V1200 case. I got the “Plus” version, which includes a blower fan. These blowers seem prone to get noisy after several months. I replaced the blower the first time this happened. Bad fans do happen. But recently the replacement got pretty loud, too. So, figuring these blowers are all destined to make noise, I’ve decided to see how the box fares without it. It does have two 120 mm intake fans; I figure it shouldn’t be that big of a deal for exhaust to be passive.

Unfortunately, I was faced with the realization that the machine was still pretty damn noisy. The primary culprit was the power supply—an Enermax EG651P-VE. The fans on the Cooler Master Vortex TX heat sinks I installed on the new CPUs were contributing to the problem as well. Another thing I really disliked about the Vortex TX heat sinks is that installing them required completely removing the motherboard—they don’t work with the stock mounting bracket for K8 CPUs.

I decided I’d listened to this thing long enough. I’ve now replaced the heat sinks with Hyper TXes; they’re quieter and they use the stock mounting bracket. And the power supply has been replaced with a PC Power & Cooling Silencer 610. Problem solved; this machine is now very quiet. But now the other machines in the room sound loud.

Get it straight

Rounding out the weekend, an Extrusion bug. While at first glance it seems OpenVRML just isn’t normalizing a vector where it should, the larger problem is that the algorithm for identifying linear spines is broken. Sigh.

This is hard

I spent most of the weekend laying tile in my basement. It amounts to Real Work. One 50 lb bag of thinset mix seems to stretch for about 16 of these 18″ tiles (give or take depending on how much I have to use to get a tile set level with respect to adjacent tiles). I went through two bags this weekend. I am perhaps 25% done with the job.

I am impressed with just how hard this tile is. At one point I lost control of a tile and it hit the floor right on the corner of the tile. It made a “bong” sound as the tile flexed in response to the impact where it took a chip out of the concrete slab floor. The tile? Nary a mark.

We’ve been remodeling our basement for a while now. When we moved into the house over two years ago, doing this was Part Of The Plan. The basement looked like it hadn’t been changed since the house was built in 1980. Sculpted brownish green carpet. Dark gray vinyl tile. Darkly stained wood paneling. And the best part? A large conglomeration of nailed-together lumber that seemed intended to be a bar. A disco dungeon of sorts.

But past the unfortunate decor, the basement is spacious and has a fireplace. It could become very comfortable living space. But salvaging it has not been an easy task. The bar was evicted. The wood paneling was replaced with drywall. A closet and built-in shelving were torn out. The sliding glass door to walk out to the back yard has been replaced. The carpet and vinyl tile were dispensed with. The walls and ceiling have been repainted. Even the fireplace doors have been upgraded.

And, of course, there were the unanticipated problems. A leak in the basement was sealed. (“So that’s why it smells like wet dog down here when we get a hard rain.”) The lopsided stairs were righted and their failing supports replaced.

So, at long last, I feel like we’ve reached the last leg of this project. But at this rate, I’ve got at least three more weekends of laying tile left to go. And I hurt.

OpenVRML fall recap

Since going a season without posting here, I feel like I ought to provide some resolution to some of the things I mentioned here earlier in 2006.

Fall was pretty good for OpenVRML. The 0.16 series (which saw its first release back in August) yielded 0.16.3 by the end of the year—which seems to be a pretty usable release. Even the Mozilla plug-in seems to be basically usable, caveat a really annoying bug in the JPEG decoder. Also, I’ve started packaging OpenVRML for Fedora Extras.

Lately I’ve been spending most of my OpenVRML development time working on a stand-alone player. Like the Mozilla plug-in, it is simply a host to the openvrml-gtkplug out-of-process component. But it exercises openvrml-gtkplug in different ways—which accounts for most of my interest in writing the stand-alone player.

uri_grammar hosted in Google svn

After discovering svnsync I’ve migrated uri_grammar to Google’s Subversion hosting. I’ll soon do the same for my Autoconf macros for OpenGL.

Resolve to suck less

So it’s 2007 already.

I have finally repaired the style sheets for this journal such that the stuff that’s supposed to be on the right column actually shows up there. Good grief; I’ve probably forgotten more about CSS than many competent professional Web designers know. I wish I were exaggerating. But the fact is that there was a time in the late nineties that I had a level of expertise with the technical details of CSS shared by a relative few on the planet. But that was back when CSS was a nascent technology. Now it’s bigger, more complicated, and commonplace. And the CSS minutia that was in my brain has been evicted by other minutia. Probably mostly C++.

The style sheets for endoframe.com were written back when I could sling CSS with the best of them. They’re somewhat elaborate. They’re all based on a suite of style sheets that are designed to normalize rendering of HTML 4.0. The problem is, I’ve forgotten a lot about how they work and what they do. But in the persistent absence of any pressing desire to sling a lot more CSS, I guess I’ll just be relearning this from time to time as stuff breaks. So let me not touch this again for a while.

But now that the appearance of this page is less embarassing, I’ll hopefully be more inclined to update it.

Return top