Sean Middleditch » 2003 » April

Physical Labor

I’ve spent a good portion of the weekend working outside; we’re expanding the fence around the dog “pen” to include most of the backyard, and also putting up a privacy fence from the front of our house to the edge of the hill/cliff in our backyard. Lots and lots of big heavy things to haul about, wood to saw, metal posts to bury, cement to mix, chain link to lay, holes to dig, etc.

I’ve always been adverse to physical labor (probably why I have to resort to working out to acheive the same effect most people do without any specialized effort), but this was all actually rather fun. There was a bit of thinking involved (which helps the fun factor), but for the most part, just being out there working was good.

I also got to hurl 8′ long 2×4 posts down our hill in the back (it’s rather steep, and quite a drop), which was fun - kind of like gable tossing. ~,^

And it feels good.

Music

I bought a CD player w/ MP3 capabilities, which I think was a great investment. Sure, it’s not as cool as the solid state MP3 players, and is a lot more sensitive to jostling (no jogging for me, not that I do that anyways), but I’ve managed to so far fit all my favorite songs that I own (I do not condone pirating music/movies/software) on one CD. That’s a lot of music. I’ve organized it all by band, and it appears my Led Zeppelin folder is the largest. Of course, there’s not many Zeppelin songs I don’t like. ;-)

Speaking of pirating, I had started to type in a nice long viewpoint on pirates, but realized, why bother? I’ve never, ever been able to convince one of why they are wrong. And I’d probably just piss people off saying it all here. On the upside, the content producers are pushing DRM in all their upcoming products, which will make pirating very difficult at best. As much as I dislike the thought of DRM, it is needed. I can’t honestly say I know more than 3 people who don’t pirate, myself included, and I’ve even done it in the past. (I eventually felt guilty enough and sent some checks to the game publishers I ripped off, for the illegal copies of their games I got from friends.) Ugh, I’m almost about to retype the whole tirade, I better quit now. ~,^

Replies

Ankh: XML has a lot of very good things about it, yes. I try to use it as much as possible. I was quite pleased when we moved to XML for the data files in AweMUD.

Only, none of the advantages of XML are overly useful in this case. The disadvantages do affect us. (Like easy editing in ViM/Notepad/whatever.) XML is great for many things, but still, it’s a markup/stream language. The people using it for general random-access data storage (like what I more or less need) are rather bastardizing the concept. XML is a tool, and a good one, but general data-storage of the nature I need needs a different tool. Just like I don’t use ducttape (an awesome, versatile tool) to put screws in boards. ;-)

I should probably note only some of the data files are moving away from XML. Some others will probably be moving to it. I.e., the in-game help files could be xml-ized. Help also makes a lot more sense in XML, and a lot less sense as object data. ~,^

Most the other good points of XML tho… I don’t need XSLT for the data files (what would you transform it to ?), I don’t need to serialize/export whole chunks of object data to remote applications, etc.

We do have an XML-RPC interface in the works, but that’s not going to be dumping the data like saving/loading state - just being, well, RPC.

bratsche: NeoEngine looks pretty awesome; I hadn’t heard of it before your recent entry there.

I’m curious as to what kind of plans you have for its networking side - is it something you’re going to leave largely to the application developers, or try to get into the engine core? Also, what about a solid scripting language? Not something tacked on and poorly integrated, but something more suited to a 3D engine (easy animation scripting, 3D effects scripting, plus usual AI stuff, no frills or bloat not needed, etc.).

Replies

auspex: I’ll agree on several of your GNOME wishlist points. GNOME needs a solid scripting language interface that just plugs in. Right now, every app has to write its own interface, plus bonobo components, etc. Of course, I’ve always maintained that the GTK and GNOME API’s are way too chunky. It takes far too much code to do even the simple things…

The filesystem and bundle things are definitely distribution topics. Bundles I believe aren’t even possible without hacking the linker; without doing that, you’d have to make bundles be “installed” (versus dropped in place) so the libraries and data files and all that could be registered in the various databases. The filesystem heirarchy can be changed no problem tho, it’s all just which commands you pass to ./configure. ^,^The Linuxstep page actually lists the commands they recommend.

GNOME would tho I think need some changesin a few places for its directory lookups. Not that it can’t be configured, but that it in many places only looks into one or two compile-time-declared directories. Heck, it won’t even recognize software installed in /usr/local (at leaston my Redhat9 machine - that might be a RH issue…). The directories it searches need to be run-time configurable at the least (preferably in persistant form, i.e. a config file, versus env variables), and it would need support for descending into and looking in bundles if you want that support.

Chicago: I’ll tell you what, I’ll probably be crying this June when I turn 20. I do not want to stop being a teenager. I’m still dazed from graduating high school 2 years ago… ;-)

XML, Bah

Note: The following is more or less me thinking out loud. Expressing/writing thoughts helps me. If you don’t want to listen to me babble to myself, skip this entry. ^,^

Yet another of my data-type needs is no longer well served well by XML. This is my data-storage need for AweMUD. Basically, all the data is object-oriented. This means the data inherits from other data. The various bits are spread across several files. The actual data itself is rather free-form; very little of it are actual hard-coded “members”of the objects.

While XML is quite capable of handling this, it’s ugly. It’s way way too verbose. And these are data files that need tobe editable by humans.

So, I’ve invented a new format. ^,^ This format is actually very very well suited to the task; it’s human-readable, human-editable. The only part I don’t really have figured out is if the inheritance will have “syntax” or not, and if so, what that will be. Example:

Current Syntax
room {
name = kings_court
title = King’s Court
outdoors = true
exit {
id = 1
title = door
dir = north
target = jesters_court
}
}

The basic structure should be clear. What I don’t like is that the object syntax has you specify the object type before the {, and you have to put the object ID in as a member (text name for a room, and number id for an exit, in this example). I’d rather be able to specify both type and id together, like “room : kings_court”.

Also, for the creatures and items in the world, things are derived from templates. Or you might say classes. A sword onthe ground in a room might be derived from the “longsword” template, but be a more worn out than average. Creatures/items don’t (currently) have unique IDs, either. So it makes more sense to use a “type : class” form,like “object : longsword”.

The same thing goes for the templates(classes) themselves. You might have a template for a “goblin,” and a derived template for a “goblin warrior,” and then various slightly different instances of the goblin warrior. That I’d want the be in the “name : parent” form, as each template must have a unique name, and optionally have a parent.

The problem now is that you don’t know programmitcally what those identifiers all mean. For a given structure, do you mean “type : name”, “name : ancestor”, or “type : ancestor”? I’m thinking, if you are inheriting, use “< ancestor", and if you are type qualifying, use "type :". Example:

Ugly Syntax Hack
# just an id
kings_court {
# type and id
exit : 1 { … }
# type and ancestor
object :< longsword { ... }
}
# template/class - id and ancestor
goblin_warrior < goblin { ... }

the way that works out tho. Look at the object/longsword bit, for example; that’s fricken ugly. Given that I don’t (yet, anyways) have anywhere I need to specify type, id, and ancestor all together, it’s wasteful and uselessly confusing.

I’m also concerned about the API changes I’d need for that. I’m ith the API I’ve put together so far, it’s very pleasant to work with both for reading and writing data files. Howwould I make the API look tho when the meaning of the data before and after the: is different based on context, which the reader/writer layer doesn’t know about or care about?

It might also be best to just say I always need to specify type. Then I’m guaranteed to always have two components. Thefirst will always be the type. If there’s just one : separating two components, the second is name; if there’s two : (::) between the first and second component, it’s type and ancestor. If you have three components, well, that’s easy. ^,^

Final Option
room : kings_court {
title = King’s Court
exit : 1 {
title = Main Door
}
object :: longsword {
condition = bad
}
creature :: goblin_warrior {
health = 40%
}
}
template : goblin {
title = ugly goblin
}
template : goblin_warrior : goblin {
title = goblin battle warrior
strength = ++10
}

That, I think, doesn’t look half bad. And the API could be very clean and sensible; simply provide get_type(), get_name(), get_ancestor(). I like that. ^,^

Work & SupportWeb

Almost everything I have to do around here lately, I’ve found, is in some way related to finances. The Purchasing system, the Payroll system, the Leave of Absence (and thus deducted pay calculations) system, Budget Amendments, so on and so forth. I’m really the last person you want working on anything dealing with millions and millions of dollars. ^,^

On the upside, SupportWeb makes it prettyeasy to plus these in using the plugin system. Just drops the main files in a folder in the html/ directory, put the hook scripts in a file in the plugins/ directory, and run any MySQL scripts to setup the DB, and you’re ready to go.

I’d like to come up with some kind of good tool for auto-installing this stuff. Nice package of an information header (plugin name, version, copyright, whatever) and the other needed files. Using theweb interface to install the package and configure it automatically would be great.

Evil Plots

There’s this funny lady at the Tim Horton’s I often go to for lunch. For some reason for another, she seems to “like” me, tho I’m not talking in the high-school crush way. (I hope.) She keeps getting rather personal tho, and keeps asking after “the girl I always used to come in here with,” which I’m sure she means the girlfriend I brokeup with over a year ago. This lady is freaking me out.

Afore-mentioned ex-girlfriend also has a habit of coming over every now and again to talk with my mother. This is odd, since they really don’t have anything in common to talk about or do together, they never hung out when said girl was dating me (for over two years), but now… weird.

I think she has some weird plot going on for me. So long as it doesn’t involve her drug-addict boyfriend and a firearm, I’m rather curious to see what it is…

Fitness

Starting to work out in earnest again. Imanaged to get in almost decent shape over the summer during my depression (working out was the only thing that took my mind off stuff, and I barely ate anything, so I lost a lot of weight), but I’ve atrophied over the fall/winter. Given that how shy I am, I need to get in shape so I can attract someone to me. Mating rituals and all that. Unfortunately, for my size/build,I’m around 40 lbs. more than I should be, and that’s a lot to lose… Especially for a lazy, gluttonous bastard like me. ^,^

Scripting

I think perhaps my design for Scriptix asa general-purpose scripting framework is flawed. The problem is mainly that a general-purpose framework will never fit your needs perfectly, especially not ingames. The scripts you might use for animation are a lot different from event handlers, which need to be easily wrapped in goal/state-machines for AI, and those are totally different from your rules and physics logic.

Some future redesign/rewrite of Scriptix will probably focus and less complete framework, and more on easy extensibility of the grammer to facilitate this. It should be made as easy as possible to plug all the little bits you need to make your various scripts work correctly.

Or perhaps just a rewrite of the compilerwill suffice. I need to rewrite the Scriptix compiler, it is a disgusting mess. I’m ashamed I wrote it. I’d also like to move away from bison/flex, as they are just too weak. Very simple and common grammars take way too much work (remember easy extensibility), and a lot of its features are too braindead; for example, no way to call a “destructor” for items on the stack when they are collapsed, which means you have to use some weird memory management scheme for even simple strings and the like.

Work

Well, my boss is on vacation all this week, andI’m already in need of him. Several Windows client machines are acting up, andthe bits of the e-mail and authentication services running on the Netware servers (which I’m not trained with) are acting up as well. Hopefully he’s checking the SupportWeb requests every now and again while he’s on vacation, like he usually does.

I’m also in a work mood again finally, except now I’m dead tired. I’ve got all my code before me, ready to be hacked on, but even the simple stuff is making my head hurt. This tends to happen after having only 3 hours of sleep. ^,^

I did manage to get the weekend’s purchasing system goofup fixed without too much hassle. Some people are a bit annoyed that their signatures on recent requests (supervisor’s must “sign” their employee’s purchase requests before Purchasing can approve them) were deleted/remove. A combination of annoying bug in MySQL (not warning me that a primary key constraint was totally bogus) and me making the constraint bogus resulted in the SQL query for inserting new signatures (using replace into) remove all previous signatures for the given request.

Oops.

Advogato

I have a small XSL script for taking extremely basic formatted XML docs describing a post, and making the resulting HTML. It would be nice tho if Advogato supported a couple of these custom tags (quote, code, title) and converted them into even more basic HTML output, and provided a simple theme mechanism utilizing CSS. Then all our posts/articles would be excellent models of how the web should work - represent the data with markup, and the appearance with CSS. Ah well. Perhaps someday when I have time and the inclination I’ll see about hacking on this mod_virgule.

XML vs. HTML

This reminds me of my conclusion that XML (or more precisely, XHTML) is bad for the Web - HTML is much much simpler for markup (mostly due to lack of need for end-tags or precise structure). Take Advogato as an example - think how much a pain it would be if you had to perfectly structure your posts and their markup. The simplicity of HTML (with more generic tags) is great; we just need CSS to do layout.

XML is great for many things, yes - I’m just not sure that your basic page layout is really that great a place for it. The big strength of XML over HTML (in regards to web sites) is that it’s more easily machine parsable - does anyone other than the browser developers care much about that? When you need to deliver content in web service style, exporting in XML is awesome. For your normal end-user interface/site development, I really don’t see the point in the extra verbosity.

Other than that it just feels geekier. ;-)

Health

I really need to cut back on the caffeine. It is, apparantly, rather killing me. I have both minor heart troubles (actually, I have bad anxiety, which causes my heart to over-work itself when stressed - altho I’m on pills to help with that) and digestive troubles. The caffeine increasing my heart rate is rather, well, not good for that, and the carbonationof the drinks I prefer to get my caffeine with is wrecking havoc on my insides. (Not to mention Caffiene has certain bad effects on one’s digestive tract.)Of course, common sense or self preservation have never been strong points of mine. ;-)

I need to find some kind of substitute tho. I know the withdrawl from caffeine will suck (I’ve quit before) but my big problemis gluttony - I need taste in my mouth. Gum is annoying, and food is more unhealthy than drink, at least so far as my outside appearance goes. I’m not by any stretch of the imagination thin, but I am trying to stay fairly in shape (and almost acheiving it, actually). But I still need to have something to taste. I wonder if they have patches that go on your tongue? Water might be nice, but I’ve not yet found a bottled water I like, and even if I did it’d probably cost a lot more than the Mountain Dew in the vending machine here at work.

Work

Not much going on. Can’t really bring myself to concentrate on code. Really need to find a way to kick my ass into gear, tho.

I’ve had a task here at the office assigned to me over a week ago and I’ve not even started on it. It’s so trite and easy, yet insanely boring.

I also had to do some late-night hacking over the holiday weekend on the server, while no one else when in the office (don’t want to bring down servers people are utilizing), and managed to goof up in a few places. It doesn’t help that I don’t have any decent way of extensively testing this stuff. I should probably figure out a way to make a nice testing/regression framework for SupportWeb. That’s not a talent/skill I’ve ever had, tho…

School

This semester is almost over, and I haven’t registered for next semester’s classes yet. Oops. I really need to do this. The last couple times I didn’t register early I got majorly screwed (either no classes I wanted were open, or the lines to register were literally 4 hours long).

I’ll be sad when this current class (Calculus I) is over tho. Aside from the eye-candy in the class, the teacher has got to be one of the best I’ve ever had. He makes the class insanely fun. (Professor is truly and honestly the funniest person I have ever, ever met.) He also makes it easy to learn the material. Even if it is by embarassing the students. (Traumatic memories stick with us the best, after all.) If you ever attend Wastenaw Community College in Michigan, USA, take Mark Batell for any and all math/calculus classes you can. Unless you’re easily offendible or just plain stupid, in which case you mgiht not appreciate his style. ^,^

Life

Ugh. Long story short, I’ve managed to get my heart broken for the 6th time by the same girl. Not her fault, she isn’t doing this intentionally - just me being infatuated with the wrong person. As much as I keep telling myself to move on, I can’t emotionally or intellectually find a flaw in this girl, save her taste in men - she truly is all but the epitomy of perfection to me; not a thing would I change about her. How the hell do you move on to anyone else, knowing in your heart that you’re just settling for second best? Perhaps I just need to change my idea of what perfect is… sigh

Fun

Started playing the Wheel of Time RPG again. Started playing it to get some others (family members) into the RPG stuff, as they’ve read the WOT books by Robert Jordan, and I figured a common background and rules would get them into it better.

Problem is, WOT is a pretty crappy system for my style of table-top gaming. Might be great for heavy role-playing, wars, or intrigue-type plots, but it’s really aweful for general adventuring. Not much room for ancient ruins (a.k.a. dungeons), the only monters/baddies are a small handful of shadow spawn (seriously, like a variety of maybe 4), and the plot is all laid out for you; you either play before teh books were written (history is laid out), while the books are in progress (I can see where those who’ve read them would take advantage of their knowledge), or after the books (in which case you don’t know how they’ll finish up, and certain players will freak if we aren’t playing in Jordan’s version of the world to be).

Maybe after we finish up the current quest/campaign, I can get them into D&D (which is more or less the same ruleset) and move them into a more versatile setting - either the Forgottem Realms (a few players are familiar with it, but the place is still vastly open-ended) or the custom setting I work on for a few minutes every month or so. Might be fun to play around with that. The last group of people I played D&D with fell out - not sure why, but we don’t play, or even hang out, anymore. Ah well.

XSL is really great for many things. Needing to do full document transformations or whatnot, it’s awesome. However, a couple of my needs are totally not ideal for XSL.

Mainly, the document revision transforms I have in AweMUD. If all I need to is take an attribute in a certain element, and put it’s data in the body of an element, remove the attribute, and add the element between two other specific attributes, I have to write a full and complete transformation for that whole element. It’s a pain.

It would be so much easier to have a simpler language that does basic DOM manipulation. I’ll probably start brushing up on Python and use that to do said transformations.

It might also be fun to write some XSL that takes a simple transformation description in XML and turns it into the more complete XSL… ;-)

More GNOME HIG evangelism at work. ;-) Found several more apps that had questionable UI’s (all GTK2 based), and placed bugs on them. One of them I even use extensively, so I could do more than point out a few broad problems and point them to the HIG and usability@gnome.org - I was able to give point-by-point problems, and suggested fixes, for most of the application. I actually feel somewhat useful in the GNOME community when I help out like this, since I’m not GUI coder - as a user, it’s pretty easy to look an app that feels/looks/acts horrible and give suggestions on how it should work. Reading the HIG (and the CVS updates) is quite useful for this endeaver, too - I don’t think I could actually offer suggestions for good UI without it, even tho I mostly use only GNOME/GTK apps that are HIG-compliant! (In the GUI environment, anyways.)

Thankfully I haven’t run into any “The HIG is for GNOME apps, screw off and leave us GTK users alone” types in a while in my evangelism efforts. It astounds me that people will blatantly try to ignore good advice for UI. It might help the GNOME HIG was renamed to not seem like it’s only intended for GNOME apps.

Still, this tendancy among people is just baffling. I recall being yelled at on a mailing list for wanting an interface to be easier to use. I commented that it would attract more people to GNU/Linux, if it was easier to use. The aggressor stated that Linux doesn’t need or want more “stupid” users, and that all the commerical involvement was bad. This was on an Intel-hosted list for a very useful/needed interface (ACPI) that Intel was developing a Linux version of. Ah, irony.

There’s also the recent comments on the GNOME lists (from non-GNOME users - wtf are they even doing on the lists?) about how things like libxml and pkg-config are taboo, because they were developed for GNOME. This is purely absurb. pkg-config is an awesome piece of software that makes development so much easier - no dropping custom/”proprietary” *-config files everywhere that all worked different, no weird automake/autoconf hacking, no m4 macros that you need a config tool just to find, etc. The only downside to pkg-config is the requirement for the user to have the binary - this could even be dissuaded with a shell script distributed with apps, if it even mattered that much. And it doesn’t.

And libxml? Projects want to replace it just because it’s originally for GNOME? This is stupid. No open-source XML library does what this does. Xerces might come in somewhat close, but misses in many ways still. Why waste time and effort, and screw over users who want/need better technology vs. ego tripping, instead of just using the available, working, powerful technology we already have?

This comes in close to how people see Mono/C# as evil because the designers were on Microsoft’s payroll. Come on, people. This is all no different than some of history’s worst moments in respects to shunning cultures/races without understanding them or the facts. Then again, people are always going to be human. ;-) (Or will they…?) C# might not be for you or your project, but that doesn’t make it evil. Most people slap it out of their minds during development design from the start, without even evaluating it to see if it’d be a good/perfect fit. sigh

Now to stop rambling and go do something useful. ~,^

So I’ve had another “code mood swing” and now feel entirely like slacking off. And I have tons of work to do, both on AweMUD, stuff at work, Angry Pixels stuff, etc.

I wonder what causes these moods? I’m 19 and still suffer from classic teenage mood swing ;-) but I didn’t think those would apply to stuff like this. Perhaps there are some studies or something on this behaviour? The constant swapping between wanting to work hard and wanting to work not at all? Maybe it’s just this damnable heat? (I’ve been pouring sweat all day - it sucks.) I want to be more productive, to always be ready and willing to work hard. I just don’t know what to do to make it happen.

Maybe when I go back to my pschiatrist (I have anxiety problems, have to be on pills, thus need annoying doctor that doesn’t do much good except prescribe pills to stop the anxiety attacks) I can ask her about this - I want a solution. :(

Anyways… The RedHat9 switch here at home is doing well. I’m still a little… upset at not having the amount of software available to me that Debian had. On the upside, what I have is much better packaged (perhaps not on the low-level details, but as an end-user, it’s better packaged). There’s definitely some polish needed. Funny how I can sit here and be upset at unpolished config tools that Debian never even had. ^,^

Need to get back to coding.. already 11:20pm and I have at least one chunk of changes to finish. If I can manage to actually do it instead of just refreshing Freshmeat or whatever. I need a hobby, maybe… to take good decent healthy breaks with… (but what hobby will I find, that doesn’t cost too much and doesn’t require me to commit to working at it for many days/weeks straight, like my past hobby attempt?)

Coding

As per a request from a user, I’m going to try to get back into coding the “fun stuff” in AweMUD. It’s been a while since I’ve done anything other than low-level, behind-the-scenes code work.

After I get off work today tho, I have plenty of Angry Pixels work - get the AI docs completed, and see what other code team mates have written and get started on integrating my work there.

timcw:

If you run from every “community” because there is one person you don’t happen to like, you’re never ever going to stop running. Whether it’s your family, peers, co-workers, or colleagues, there’s always going to be at least one idiot you can’t stand. ;-)

Work

I completely don’t want to work on anything web-related lately. Oh, darn, right, that’s what I do. Needless to say, things have been slow here the last 3 work days or so…