Sean Middleditch » 2004 » February
Fax
Guh. Finally got that project finished. Hopefully for real, this time.
I pity the next programmer/administrator that works on this system after me. It is the world’s biggest hack job. Seriously. *Horrible* hack job. I hate having all this crammed on one server, too, since that means even a small mistake on my part in this fax system (which is likely, given how it’s a *huge ugly* hack job) will compromise the whole system… :(
The way it’s setup is an LPR printer (LPRng) with a script backend, which runs under a setuid wrapper (the script needs web server privileges, LPRng runs w/ printer privileges - *gods* I wish we had ACLs on this system, would make life *so* much easier). The script parses the LPRng control files, and the postscript input (printing non-postscript files will be bad) for things like document title (the Novell print system the client machines are using doesn’t set job name), moves the postscript input to another spool directory, and inserts the basic info into the SupportWeb database.
Then, a SupportWeb module lets the user select files they printed, enter the recipient name/phone, and fax. That just updates the database with recipient info and a ‘ready’ flag. Then, a cron job runs that calls efax to fax the actual documents.
Yuck. The files sprawled everywhere, my wrappers for security, the fact that I’m a coder and not a system administrator… these all add up to a pretty ugly setup. Pity my replacement!
UofM
Application’s due in a couple days. Of course, the people that wait till the last minute have no chance of getting in, but I’m a last minute sort of person. Still haven’t finished the application; one essay left to write.
The essay’s on cultural perspective sorts of things. Depending on how you look at it, I either have nothing to offer there, or lots to offer. Translated, I’m not sure if being part of the global Internet community counts. If not, the essay won’t be very good, because that’s the extend of my cultural experience. :(
Patents
I have a question for my fellow Advogato readers. Is it ethical to patent a software algorithm that is original, allow it to be freely used with no royalties or resitrictions in software licensed under an FSF (or OSI) approved license, but charge money (personal profit) for corporations that wish to use it?
I’ve seen a lot of “defensive” Free Software patents; i.e., people who patent ideas and algorithms and don’t allow non-Free software to use it at all, to use as bartering or simply enforced Freedom (there’s an oxy-moron for you) of Software. The idea of expecting commercial entities to wish to use the idea, and happily accepting payment from them for it, feels to me like it’s on the borderline.
I’ll note now that I am not a Freedom Fighter. I’m much closer to the OSI view of things than the FSF, I believe proprietary software is perfectly ethical (as long as you don’t compete through lockin, but through quality of product and service), etc. I’m just not personally sure how I feel about software patents. And again, by that I mean things like coming up with a new compression algorithm and patenting it, vs something bogus like the Amazaon one-click patent. I.e., a real new unobvious process/algorithm.
Thoughts?
Anti-Red Hat-ism
I’ve seen a lot of people get incredibly vocal about how much they hate Red Hat lately. To the point that they make claims against Red Hat similar to SCO’s claims against the GPL.
I don’t get it. At all. One of the arguments I’ve seen (from a programmer I used to respect) is that Red Hat makes a profit off of community contributions, and doesn’t give the money back. This programmer is clearly incompetent at running a business.
Red Hat doesn’t give anything back? The amount of code they release, fully under the GPL, isn’t giving back? The programmers they pay to work on Free Software projects isn’t giving back? They make a profit, yes. Welcome to reality, they’re a business. If they didn’t pull in a profit, they wouldn’t stay in business, and all those amazing employees they have would likely be stuck working somewhere that really doesn’t contribute back to the community.
Giving this subject the depth it deserves isn’t something I’m going to do in a diary entry. I just… sometimes it amazes me what boneheads people can be. People who are usually very intelligent and logical.
AweMUD
Work has been slow, between work projects, UofM application, the contract job, bass practice, and the handful of new Game Cube and Gameboy games I’ve gotten lately. ;-)
Complexity
I got Dungeon Mater II running in DosBox last night. I only played for a few minutes. Still, tho, it was great. This is one of the two games that made me want to learn how to program when I was a child. (The other game was Lands of Lore, the Thrown of Chaos, or whichever it was called.)
Similarly, I was playing Dragon Quest I on my Gameboy lately. These games, both ancient classics, have sort of stirred this desire in me, one almost identical to that original desire to learn game programming.
Modern games, including my own AweMUD, are based on so much complexity. You need like 8 button mice to play FPS games efficiently, you need manuals bigger than most programming texts to handle most RPGs, “party” console games still have steep learning curves… everything is so complex.
Dungeon Master II was also complex for its time. Some things about it are *too* complex. (Mainly, casting spells to the point of being silly, and some “obvious” UI doesn’t work like one would expect.) Still, tho, compared to a game like Baldur’s Gate II (or any modern RPG), DM2 is wonderfully simple.
In the case of these old RPGs, I think one of the best ideas is to remove character creation. In modern RPGs, you can spend hours making a character, tweaking them out just right, and many players end up scrapping them and starting over because they find out they didn’t tweak it just right.
On the other hand, lots of old console-style RPGs gave you a “pre-tweaked” character. By this, I mean that all character s have various strengths and weaknesses, and your character has some specific set of thse, which may not be the set you’d prefer. You are still forced into this character, however; you aren’t playing the alter-ego you want to have, but the one the game forced on you.
Other old RPGs, however, circumvented this problem by simply reducing complexity. Instead of having a ton of statistics and a starting character with strengths in just a few, you end up with a few statistics and your starting character being mostly equal in all. How you build from then on is up to you.
In more complex games, this also works out well. It’s similar to, say, Dungeon Siege, in which you just play the game, and whichever style you prefer to use the most is the one your character becomes best at.
Ugh, I had a lot more ideas to write about this, but work calls. Time to get back to it.
Bass
So hey, I’m getting better. I’m at least at the point now that I can sit down, screw around on the thing, and have fun. Previously, practice was just an exercise in frustration. ;-)
I tried playing two of my father’s guitars last night. The strings and frets are too close together. ~,^ Altho the much thinner guitar strings let one do things that one can’t easily do with a bass. (I don’t know the “music speak” names for said things, so I’ll avoid making a fool of myself and try to describe them.)
PyCL
Not sure if I’ve written about PyCL in depth before or not. Being lazy and Advogato lacking searching, I’ll just assume I haven’t.l
PyCL (pronounced like pie-kl, similar to the green bearded dwarf Pikel found in R.A. Salvotore’s F.R. books) is a MUD client written in (you guessed it) Python. It’s not a full featured client; it’s barely a “featured” client at all. It has full ANSI support thanks to vte, and is one of the few clients around to have a non-brain-damaged telnet implementation (required by ZMP.
The purpose of PyCL is basically to test out ZMP. Currently, I have an x-awemud package for ZMP that has all of three commands, but which are quite cool. Namely, the ability to define and update ’status bars’, for things like health, round time, and so on. This makes playing AweMUD look and feel a lot better. The ugly prompt line can be removed, and the visual status bars (implemented using the GTK+ ProgressBar widget) can have their values updated without needing to fill the play window with status/prompt updates. The round time bar decreases by one every second, and health bar updates whenever health changes, etc. Very nice.
The status bars also offer four display styles: fraction, percent, count, and label. The styles are just how the numbers are shown. Each of the four has the bar’s name (like Health or Round) in it. The ‘label’ type just leaves it at that. The ‘fraction’ shows the numbers used for the bar as a fraction (i.e., if you have 20 out of 50 health, you’d see Health: 20/50), percent shows the percentage value, and count just shows the current (numerator) value.
My only problem with the setup at all is getting the spacing between widgets right in the UI. I know what it should be (yay HIG) but it’s next to fucking impossible to actually get the alignment and spacing right using GTK+/Glade. I would love to be able to specify widget padding per-side (versus just one value for the spacing on all sides) and to have finer control over when the spacing between two adjacent widget should stack or fold. I think GTK+ 2.4 has (will have) better support for this, but neither Glade nor PyGTK seem to be ready for this; at least not the versions in Fedora Devel.
Que?
So, the contract job I just started entails cleaning up, fixing, and finishing a web site developed by someone else who bailed on the job. The former coder was definitely not raised with English as his native language, and chose to use his native tongue (whatever the hell it is) in his code. This makes things rather interesting. :)
Further, this guy really has no business writing web sites, because the code is massively brain-damaged, horribly constructed, and full of grievous security holes. The fact that tons of finished, supposedly professionally developed sites exact which were made by incompetents like this quite depresses and infuriates me.
Jeff
While I may not much have enjoyed the recent release name I, and many many others, recognize what an incredible asset jdub is to GNOME. Some people are going to be idiots and needlessly rude, and they will be the loudest, while the ones who appreciate your contributions are likely to be silent, but that doesn’t mean we don’t exist.
Rock on and “pants off,” dude. Just, you know, make sure you keep the testicles covered. :P
OS X Mail
Real threading would be nice. The “group messages in a thread” behaviour isn’t very useful; at least, not with the kinds of depth in threads you get working on development lists.
I tried Thunderbird, but it tended to not handle my huge-ass mail folders well. At least, it spent some 40 minutes waiting for the GNOME and FreeDesktop folders to open before I gave up and quit the app. OS X Mail at least opened those within a few minutes on first launch. (Maybe because it didn’t try to intelligently thread them, eh?) Heck, tho, Evolution can pull those folders over a 128kbps cable out line and display them with 5 minutes, so it is just something less than ideal in Thunderbird. I didn’t try a snapshot, just the last stable release, so the problem may be fixed. For now I’ll just stick with OS X Mail.
UofM
So I started my UofM application. Less than a month before the deadline. Ah heh. Silly me.
I need to get about to finishing it. Maybe at work tomorrow. Altho I don’t have much free time at work with the new project…
Also have an exam to study for on Wednesday. Calculus II. I’ve been a lazy wretch and haven’t done any of the homework, so while I have all the concepts down, I haven’t quite memorized all the various new derivative rules and all that. And I’ve managed to forget all the bits from Calculus I. Guess I’ll be busy tomorrow evening studying…
Wireless
Gods this is nice. I’ve been sitting in the family room all evening long (save for a little bit while I was practicing my bass). iBook on my lap, Internet connection, talking on iChat, and this battery life is just unreal. I almost feel bad I’ve spent as much money as I have over the years on my desktop machine; it feels so out-moded and undesirable now. ;-)
OS X
Yay, I have my iBook now. Posting this entry with it. Yay me. :)
Definitely a nice system, altho I have getting used to it to do. The window management for example is… different.
Now to get AweMUD running on it fully… ;-)
Driveway
Driveway is solid snow and ice. My friend got his Camero stuck in the snow (don’t ask how, it’s too dumb to repeat), so several others and I got to help push it out of the snow.
The Fedex truck didn’t want to come up the driveway either, which worried me for a bit. I ended up driving down there in my truck and picked up the packages from the delivery lady. Good thing, too, because she was about to try walking up the driveway, and that probably would’ve resulted in her slipping, breaking something, and us getting sued for something silly such as living in a goddamned cold state and the fact that water and snow freeze. I love America. But, I got down there, picked up the packages, she was thankfully she didn’t have to trudge up the driveway, and all is good. :)
Wireless
The wireless connection is being evil. Keeps going between ass-slow and not working. Wasn’t do this earlier on this laptop, and almost never did that with the other laptop, so it’s rather irritating.
Fedex
Glee! The iBook left Columbus this morning at 7:30am, so it should be here (Ann Arbor) today. Yay!
Transactions
So we’re starting a new project at work. We have a Recreation Department here, and they offer various classes and sports and other services to community members. Currently, signing up for any such program requires them to show up at the Community Center in person. Which sucks.
Unfortunately, the wonderfully crappy recreation-management software they use wants some $45,000 for the add-on to get online registration. They want some $40,000 for the add-on to enable any sort of RPC to let a custom-written web registration system interface with the software. Ack!
Of course, the rec people don’t seem to want to switch from their current software, even tho cheaper packages are available. So, I get to write a web registration system that can’t actually tie in to the program management software at all.
Among other things, this means the rec employees are going to have to double-enter everything; once in the management software, once in the web-registration interface. It also means that residents won’t be able to sign-up in real time. They’ll have to sign up for a program, and then wait for an employee to transfer the registration to the management software. This means the registration might be rejected because the program is already full. Were it to tie into the actual management software, we could guarantee that if the user hits “Register”, they’ll get the opening they signed up for. :(
What a pita. To complicate things, tho, I need to find a new dedicated hosting company that we can actually afford but doesn’t suck like Dracula.
Also, I’ve never worked with database transactions before. I’ve read the documentation both in MySQL and PostgreSQL, but neither really answered all my questions, and given what I read from them I can already think of tons of ways to screw up the system, unless I go for table-wide locking. Yuck.
Think I need to buy a book on Enterprise MySQL/PostgreSQL Database management…
Ankh: I’m not quite sure what you mean by the AweMUD mechanics. There really aren’t any yet. ;-) The game rulesets are kinda half-assed temporary implementations as I work on the core.
So far as calling a clearing a “room”, that’s simply how text MUDs work. The world is comprised of zones, which are comprised of rooms. The name ‘room’ is something internal; players shouldn’t be exposed to the term at all. So far as how AweMUD presents it, I doubt you’ll find a text MUD that does much better. UI is one of the absolute worst things about today’s text MUDs, something I abhor about the MUD scene in general, and something I’m trying very hard to Do Right(tm) in AweMUD.
The bits you see now for character creation and combat are all rather “number heavy,” which I’d like to fix. For example, with comobat, textual descriptions of your results would be highly prefered over numbers. Again, tho, there aren’t any real rules or anything for how combat works, since I haven’t devoted any time to coming up with a skill/ability/combat/magic/etc system. Yet. I need that before I can devote much time to polishing the player-visible aspects.
If you’ve any suggestions for how to improve the AweMUD interface, please feel free to let me know. (And no, I’m not going to do a roguelike interface. ~,^ )
I should also note that the screenshots are fairly out of date…
Orkut
So, nobody has invited me to Orkut. This doesn’t surprise, since I don’t actually know anybody in the FOSS world, and nobody really knows me, except the people I’ve managed to irritate greatly (hi GNOME devs ^,^ ) and they probably don’t want me anywhere near them. ;-)
On the upside, however, this means I haven’t wasted any time what-so-ever on this supposedly addictive site. And, to be honest, given that I don’t know anybody in FOSS, I don’t think I’d have anything interesting to do in Orkut even if I was a member.
On a side note, the fact that there is a market for invitations rather strongly indicates how incredibly lame some people are. ~,^
Dragon Slave!
Bought two Slayers movies, “Slayers Next” and “Slayers Great.” I’m not sure whether I like the movie character or series characters better. The movies lack Zelgadis, who simply rules, but the series lacks Naga, who also rules. (Altho I honestly believe the artists went a little over-board.)
Anyways, both films were money well spent. Only, it rather drives home the fact that I hate watching anime alone, and the only three people I really enjoy watching it with are either very far away or no longer want much to do with me.
AweMUD Affects
Ya, so I’m going to write about the affect system for AweMUD, yet again.
This has been the hardest AweMUD feature to get started on. The problem is it is just very hard to get right. Especially given how dynamic it has to be. In some of the older game engines I’ve written, namely the old roguelike War of the Runes, the affect system was quite simple. There were no dynamic scripts or plugins, so everything could be kept internal and very simple and clean.
That was back in my youth (no, I mean, really back in my youth - not like last year which was also in my youth…) when my C++ coding was basically just C with methods on structs, so affects were pretty much an array of affect IDs and arguments. Things like, AFFECT_DAMAGE with arguments of the DAM_FIRE constant and some number for amount. Arguments where just ints, up to 5 of them. Bloody simply.
But no, not in AweMUD, because I have this silly wish to make everything scriptable (which is good, of course). No simple enumerations of affect IDs and simple parameters. Nope. Instead, I need a class interface, and each affect must be a sub-class, and affect instances need arguments more varied and descriptive than ints, so we need to attach a vector of Affect derived objects.
Of course, because of the C++ nature, we can’t cleanly just have the Entity class (which is the base of all classes of things that exist in the MUD world) keep the affect list (centralizing everything), because the Affect then wouldn’t be type-safe in regards to affects that only work on, say, Characters, or Objects, or whatever.
But, adding an Affect list to each Entity sub-class is evil and wasteful. This means I either need the IAffect class to just worry about Entity types, and have the individual affects to dynamic type checking (which isn’t too bad, but it means a lot of extra code in the Affect sub-classes) or a templates Affect class that derives from IAffect and just adds type-checking, which then centralizes that.
I don’t really like either solution, tho. Both need a lot of “hacks” to get around the problem. Only, no matter what language this would be written in, the problem would persist, because the affects need to be written for the specific features of the Entity subclasses. ::sigh::
Scriptability
I firmly believe that apps should be extensible and scriptable.
However, there may come a time when one has gone too far. Namely, when core parts of your app are tossed out into scripts. Scripts are great for quick addons or anything that needs to be changed often, but they aren’t good choices for things you expect to be relatively static, or things which are rather large and integral to the application.
Like, for example, AweMUD’s combat system. Or character creation. The former was put into a script more just as proof I could. Which is a pretty damn dumb reason. The later was done to make character systems flexible but, to b honest, there’s still a lot of C++ code that needs to be changed to change character internals, so what’s the point?
Both would be tons easier in C++ in many ways (albeit, much harder in others - I think the ease will outweigh the pain, tho).
Getting back to Affects, then, just how dynamic do I really need to make them? Instead of just making a big dynamic affect system, what would happen with a tightly coupled simplified affect system with lots of small but specific hard-coded affects, that could then just be “assembled” together to make larger affects? Work better, perhaps?
::sigh:: If I keep trying to find the 100% best solution, this’ll never get done. I just hate forging blindly ahead, as it almost never results in anything worth keeping. Maybe I just need to prototype some things out and see how they work?
Ack, I’m rambling. Time to go practice my bass. :)
Ooohh! My iBook shipped. Go me! ^_^