Older blog entries for dto (starting at number 74)

I picked up this Japanese Kana learning book at Borders today, and in the evening I began practicing some of the characters: I learned to read and write the five basic vowels in Hiragana.

It's pretty entertaining. When I finish this section it'll have some vocabulary writing practice to cement the learning of the characters.

I love deciphering alien scripts this way :-)

31 May 2001 (updated 31 May 2001 at 03:35 UTC) »

Some reviews of dreamcast stuff.

Hais VGA Box. This little grey device allows you to connect your Dreamcast to your stereo and a VGA Monitor. I got mine for $15, and it works like a charm.

There is a slight bit of weirdness with the monitor. It seems best to start up the DC first, and then plug the VGA cable in; the other way around seems to confuse the monitor. The manual actually recommends doing this, although the translation made it difficult to figure out. This is only a minor issue and detracts only minimally from the experience (you just have to remember what order will make the box happy.)

So how does it look? Marvelous. The colors are brighter and more saturated, and the lines and edges are much sharper. Dreamcast games look great on VGA. Overall, a great experience for single and perhaps double-player. For multiplayer games nothing will beat a large digital TV set (you can use the Hais box's S-video output on most of them.)

There are minor polygon jaggies issues---but they are much less noticeable on a VGA monitor than on the coarse TV screen, so this is actually an improvement. Textures don't seem to be affected. The only other problem I'm aware of is the lack of a monitor pass-thru, which means you have to either switch the cable manually or buy an A/B box. But for the cheap price I'm not going to complain---last I saw, the pass-thru model was much more expensive.

Note: This is the second VGA box I've bought. The first one was the cooler-looking Naki brand, but the connection was way too tight and I never got it to display any games correctly. It was tested on several monitors, none with any results. I don't know if it's a general problem with the brand or just the particular unit I bought, but I have read about others having the same problem with the Naki. At the local Electronics Boutique both were $15.

"Jet Grind Radio"

An original, addicting, but ultimately frustrating game. In a nutshell, you control a ragtag gang of Neo-Tokyo roller-skate graffiti punks who compete with other gangs for territory. The bulk of the game involves running around areas of the city and painting over rival gangs' markings with your own. Your magnetic skates will attach and slide along almost any railing, cable, air duct, or beam in the game, and there are half-pipes, wall jumps, ramps, rooftops, and various flipping and spinning moves to explore. You get extra points for neat tricks, and especially cool moves will merit an instant replay from a better angle.

The concept is unique and the play mechanics are a blast. Successfully completing a difficult sequence of moves is a real thrill, and the game is so full of things to slide along, jump from, and bounce on that you'll probably play it until 2 AM like I did the night I picked it up.

The main stages are broken up by periodic "showdowns", in which a rival skater will challenge you to reproduce his or her daring moves. Some of these are trivial, and the earlier challenges are designed to teach you how to use the controls. But some of the others are very difficult (and in more than one spot, frustrating.) After completing a showdown, the new character will join your gang, and their strengths will be usable for future missions.

The art direction, character design, music, and choreography are excellent. The diverse GG's (your team) have great character designs, each with his own signature dance style and "catchphrases", whereas the other gangs wear uniforms and participate in goofy group-dance-video cutscenes. The music selections run from scratched-up rap with old-movie vocal samples, to j-punk with bizarre lyrics, to groovy synthesizer-disco. (The game is blessedly free of "Playstation Thrash Metal," and jungle makes only a momentary appearance.) The tunes are great---if you have big speakers hooked up to your VGA-box, turn it up!

Shortly after you begin spraying up a level, the police will arrive, and then eventually a SWAT team or helicopters. You must complete the level while avoiding their bullets, gas grenades, and guided rockets.

This leads to what is essentially the game's glaring flaw: the extreme frustration level caused by the police. All you can do is run away from them. The crazy sheriff moves as fast as you do despite his not having skates, and his aim is very good. The only way to escape him is to jump on a railing or get on top of a building where he can't go---it's almost impossible to simply outrun him on open ground. Furthermore the "homing projectiles" on most levels (rockets, grenades, swat soldiers) come continously while you are outdoors, meaning that if you do not paint the larger murals early on, you won't be able to finish the level because you'll get killed if you try to paint while the helicopters are around. (The construction site is the worst example of this. Do the large murals first.)

In one of the later levels, you come to a circular arena where sliding along a horizontal beam is the only way to escape to the train tracks. If there are any paratroopers or tanks in the area (which happens about ninety seconds from the start) you will be unable to escape, since they will simply knock you off the beam every time you try to slide along it to the exit.

It could be said that this provides a surprising strategy element, since the player is forced to choose very carefully the order in which targets are painted. But you need to attempt each level several times before it's clear how to survive, i.e. it's "strategy by savegame."

Combine this with the already difficult-to-reach spray targets, the strict time limit, sensitive analog controls, and the camera problems common in third-person games, and you are in for at least a few hair-pulling sessions. If you're in a narrow spot the camera will often do a disorienting 180-degree flip, and the hundredth time this made me run straight back into the police chief, I wanted to fling my Dreamcast out the window.

Overall: get it. This is a unique and memorable game whose solid gameplay, beautiful graphics, inventive levels, perky characters, funky music, and groovy dance moves more than compensate for its brevity and difficulty.

Possible things to do with my life:

  • Continue composing music, and begin doing it for video games
  • Continue writing game reviews, and try to get a job doing same
  • Remix "warlords 2600" for dreamcast
  • Try to get a job in game design
  • Write science fiction
  • Get Master's Degree and become a professor
  • Develop the band and become mega international superstars

I realized, My God, it's been a month since I updated my advodiary!

In the interim, I...

  • Graduated from college with a B.S.C.S.
  • Bought a Sega Dreamcast, the eminently-hackable, network-connectable, and ultra-cheap console with the nice game library (Shenmue!)
  • Went to New York City, performed a great show along with Ariane, met some cool British folks, and spent $200 trying to get my car back from the people who towed it. Beware if you go to NYC---the only reason they let people pass through there is that they WILL get money out of you some way, whether it's a $10 sandwich at some Vegan place or placing a very tiny sign at the far end of a block that says exactly what time they start towing people.

This summer's plans are:

  • Play with, and hack, my Dreamcast
  • Ride my bike around
  • Learn Japanese
  • Finish Octal
Ximian Gnome 1.4

Nice release! New Doorman program, new file dialogs, new programs. Nice nice nice. Looks fantastic.

However: lots of things are broken. XMMS stopped working. Web Page view in Nautilus stopped working. RC is broken (though I hear this is temporary.) Oh well, I guess that's progress.

I got invited back to NYC for a May gig. Should be pretty cool, Ariane will come along and do vocals.

Richard Stallman is speaking at Holy Cross on Wednesday. I think I'll bring michal or voltron along to see.

I have an extra day off tomorrow because Aparna cancelled class. So I will use it as a "death march" to finish all the stuff I need to finish if I'm going to see RMS speak on Wednesday, tutor comp. theory on Thursday, visit New York City in 2 weeks, and graduate in a month :-).

9 Apr 2001 (updated 9 Apr 2001 at 01:57 UTC) »
Recent thoughts and a suggestion; to be taken with a grain of salt.

The new GObject standard implements a dynamic object system and runtime library on top of ANSI C. From what I can gather, this is an extension of and "factoring out" of the original GTK+ object/type system.

I've done a fair amount of GTK+ coding in C, and my current (+1 year) project has involved heavy use of object-like conventions applied to the C language. (I am developing a free music system as part of the GNU Project.) I like this stuff. I make no pretensions to caring whether or not a language is "purely" object-oriented, or even whether it is object-oriented at all.

What I do care about is convenience and clarity in programming. There are several big "costs" associated with using GTK+ and similar styles of implementing objects in C:

  • Constantly having to dereference yourself in your own objects: self->foo, self->bar. This alone can make a 10-15 line member function look extremely dense.
  • Long method names. There is just one big namespace, so the name of the class is prefixed to every single method name, every time it is called. Even worse, you have to explicitly call gtk_superclass_operation(foo) even if foo is more specialized. That is, you have to remember which classes the methods are originally declared in when calling, instead of just invoking them on the object.
  • Constant need for casting macros like GTK_ADJUSTMENT(foo), GTK_CONTAINER(foo) and the like. This is made worse by the fact that typically you only use them inside argument lists of calls (i.e. nesting gets ugly.) Unless you declare extra pointers with the right type and cast them earlier on, you have to do this or get compiler problems and risk type errors. Even that is extra lines of code using cast macros; there's no way for clarity to win on this one.

GTK+ and its object system are still easy to use and relatively straightforward. I think it is an excellent user-interface library. But if there is one real criticism to be made of GTK use, it is this: at times the sheer verbosity of the object system makes GTK client code compete head-on with some of the densest Java. In my own programs, at times I feel the benefits I get from using abstract data types and "interfaces" are almost completely canceled out by the amount of time I have to spend typing these macros and class names over and over again and making sure everything matches up.

(For several reasons, I cannot use Glade to speed this up for me.)

Languages are a touchy issue---I hope nobody will take this the wrong way. I make no criticisms of the design of anyone's library or object system. My concerns here are limited strictly to usability at the syntactic level, and are based entirely on my own experiences.

Here is my suggestion for improving the situation. Provide a runtime dynamic object library just as is planned with GObject, but also provide a minimal set of syntax extensions on top of C, so that all three problems mentioned above just disappear.

No time to design and build something new, you say? But someone has already built a small syntax extension to C that fits the above requirements exactly. What's more, the neccessary tools for using this set of extensions are already included with every copy of the GNU C Compiler. This extension is called Objective-C, and it is the native language of both GNU's GNUstep project and Apple Computer's new Cocoa framework for developing OSX applications. The language is currently moving toward standardization using C99 as a base.

The main changes are few and are quickly learned: interface and implementation keywords, as well as a somewhat odd (but very readable) syntax for message passing: [reciever message:arg]. There are other wrinkles, but overall it adds up to a set of extensions that complement C's abilities and provide conveniences, rather than (like C++ does) obsoleting large chunks of the language and providing numerous pitfalls.

I would like to propose that app developers for GNOME and GTK start investigating this. Everything that I have learned so far tells me that Objective-C is exactly the "small step" that I, and possibly others in the world of UNIX applications development, would like to take. I don't want to give up even one bit of C's power, but I'm not afraid of convenience and new tools. I like to use abstract data types and some interfaces, but I don't want a completely new language that throws out what I know. Only the parts you want to write in objc need be written that way---the language is completely compatible with C. There are already objc bindings for GTK+ and GNOME, but they do not appear to be actively maintained. Generating interest in the language and volunteering help (as I am doing) could change the situation and find a real answer to the agonized "C or C++" question for people interested in trying something new.

With reference to GObject, in the immediate future, I believe that we could explore two possibilities:

  • Improve the existing Objective-C bindings for GTK+ and GNOME and keep them up-to-date, so that people can begin developing more applications, and so that the barrier to experimentation for other developers is lower. I am willing to help with the bindings, so I have contacted the people involved.
  • Either that, or somehow make GNU Objective-C compatible with GObject (such that it would use GObject transparently as its runtime library.) I have no idea whether or not this is possible, but it would be great because Obj-C would then simply be "extra syntax support for GObject", and we'd have the happy side-effect of not having to make a new dialect ourselves.

Someone with better knowledge of GObject's design would have to comment on these ideas. Thank you, if you have read this far into my rant :-).


[link to more info on objective c]
[Apple's recent book on Objective-C]

Dave's Monthly "I Love UNIX" article!

I typed a large entry yesterday, but Mozilla crashed before I could post it. Believe it or not, I can get it to reliably segfault upon loading one of the webpages at the W3C. I would have better apprieciated the irony if I had not lost my work at the same time.

At first, and this is scary, it occurred to me that I should use Netscape 4.7 because it would be less likely to crash. Instead I'm using gedit.

We've made some improvements to the Octal API that make it a bit easier to write plugins, and we're very close to defining the wavetable extension and generator event formats.

After long months of investigation and experimentation, I think I've finally figured out a grand unified theory of including illustrations in TeX/LaTeX documents. Here is what I've learned:

  1. Blithely ignore any and all macro packages claiming to do illustrations/diagrams/pictures for LaTeX. There are too many of them, with too much overlapping functionality. My experience has been that these packages are limited, fragile, verbose in the extreme, and produce only mediocre-looking diagrams (if they don't overload TeX by typesetting 28272 dots to fake a smooth curve.)

  2. Use tools that can be made to produce EPS output. For example, some of the stuff that comes with almost any Linux distribution:

    • Illustration: Metapost is a dialect of Knuth's Metafont language, that is designed for mathematical and technical illustration. It outputs directly to EPS format. Use Metapost if you're in need of algorithmically generated, highly precise illustrations, color and shading, or heavy use of TeX typesetting within diagrams.

      This is not without its downsides. Like Metafont and TeX, Metapost is a bizarre but powerful language. It combines a heavily declarative style (it will actually solve systems of equations to determine where things go) with imperative features and loops, and syntax elements taken from both C and Pascal.

    • Diagramming: GNU Pic is a free implementation of Brian Kernighan's original PIC language. There's a fun CACM article from the 80's with examples, which is how I first found out about it. The central idea is that Pic is a language to build abstract diagrams involving simple shapes, points, lines, and curves with prebuilt commands for labeling and arranging all the above. Pic has a much simpler syntax than Metapost, and its intuitive object-placement commands and relative positioning mean that you almost never have to use absolute coordinates or lay things out on graph paper first. If you declare your splines and lines correctly, the output can look really fabulous.

      PIC is well-suited to discrete-math kinds of diagrams with only minimal need for text labels: graph theory, data structures/algorithms, pipes and filters, basic software architecture diagrams (not too complex, PIC is not UML!) simple scatter/line plots, state transition diagrams, automata theory diagrams, and that sort of thing. PIC's economy and loose syntax are especially nice if you will automatically generate diagrams from code or other data, as some C.S. texts do.

      Integrating PIC into your documents is a slightly weird issue; you can use groff to get postscript straight off, but this prevents you from using TeX math or fonts in the diagram. The alternative is to embed the diagram source in your TeX, and run the entire thing through GNU Pic in its TeX mode to change the diagram into TeX specials. XDVI and DVIPS will correctly render these, but DVIPDF does not.

    • Wysiwyg. The venerable Xfig is always available, it usually comes with your X distribution. Its large library of premade symbols is a plus; I used it to design great-looking circuit diagrams for a digital logic class last year. However, xfig's interface is rather weird and harsh-looking, so it's nice to have Dia as an alternative. Through EPS, both tools are easy to integrate with LaTeX. And of course, you can always use GIMP's EPS output if you need to integrate bitmaps.

  3. At the {La}TeX level, use nothing but \epsfbox{} and related commands to include your EPS figures. This is a simple and consistent way of including all your graphics and illustrations regardless of how they were made. If they come from source files in pic, fig, or metapost, you can use make to manage the project and update the EPS when needed.

It's pretty neat that even after 25+ years, UNIX still excels at one of its earliest uses: advanced document preparation and typesetting applications. Because it is used so heavily for this, it is also a great environment for learning computer science: even after more than a year using Linux, I am amazed at the immense resources for education available to the Linux user, both in the enormous volume of useful programs installed with the typical distro, and in easily being able to read the various postscript papers, technical reports, articles, and books found online, or download and examine the source to so many UNIX applications.

Neat stuff.

I have been doing a lot of work on Octal's graphical interface. I want very much for the program to reach usable beta as soon as is possible, and since I have this entire week off I'm going to try the best I can to bring it there.

The new widget builder is in place... the most common three widgets are implemented and functioning. I also incorporated a little bug-fix that solves a glitch in the connection drawing code; thanks to Richard Todd from the mailing list.

Check out the screenshots page to see pics. The weekly tarball should be online Sunday evening.

In other news, I am very pleased to hear that Gnu.org is modernizing its administration tools. I was recently told that updating of www.gnu.org has been moved entirely to CVS (which means I finally have to learn it :-). Overall this is a good thing---as has been their use of SSH tools on some machines in the gnu network. I just never could get Kerberos working correctly for very long... it always seemed to break. Kudos to GNU for upgrading.


65 older entries...

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!