Older blog entries for elanthis (starting at number 166)

Fixing Driver Hell

Linux is one of the absolute worst OSes in existence for a consumer. The reason is pretty much entirely due to installation of "stuff." Installing an application is hell. Installing a driver is hell.

Autopackage is working on the application installation front. I wish them luck; they'll need it to deal with all of the incompetent library developers that are making it near damn impossible to deal with Linux without a degree in computer science and a seedy, intimate relationship with a compiler.

On the driver front, however, there is no solution in near site. The Linux developers themselves are actually moving in a direction that will screw users in the rectum even more, with this new kernel development model discussion. "What, you mean actually make it possible to use a driver that's not part of tree? Hahaha, screw users, we're too lazy to make our OS usable by real people." Right, binary only modules are bad. Sure. I agree. I hate being subject to the whim of NVIDIA's driver developers, who are often quite slow at fixing bugs or breakages. But then, maybe if they weren't so busy tracking the API/ABI change of the week...

The thing is, it's not just binary modules that are screwed. Let's look at a scenario. Company X is releasing a new piece of hardware in a month. They write a Linux driver, release it under the GPL, and send patches to Andrew/Linus to get it into the kernel. This whole process even manages to occur before the hardware comes out, so in fact Linux 2.6.20 supports the hardware and is released a week before the hardware hits the shelves. Awesome, right? Well, it would be, if 2.6.20 was actually installed on anyone's machines.

See, users have already installed their OS. They are running Fedora or SUSE or whatever. Maybe the latest release; in many real world cases, probably several releases old. The kernel they have is maybe 2.6.10. They go buy this new hardware, install it (or plug in the USB cable, whatever), and... no go. No driver. Assuming we have an incredibly rare kind of person, the user might go look on Google and find out that 2.6.20 supports the hardware. (Admit it, people, the vast vast majority of users would just get upset and/or confused, blame the hardware manufacturer and/or Linux, and never even figure out how to fix the problem, much less actually fix it.) Anyways, so they need 2.6.20. Of course, there is no kernel update for their OS. Red Hat and Novell are focusing on the latest versions of the distributions. Even though they might support errata for the OS version the user has, they aren't going to do something like just release 2.6.20 for that version. *Especially* not with the new kernel development model. I mean, they aren't just going to get new drivers. They're going to a whole new fucking ABI; new module tools probably needed, a whole bunch of QA and testing for each distro version they want to releae the kernel upgrade for, probably all sorts of updates to tons of userland stuff like hotplug, remerging of any custom patches they use... it just isn't going to happen. It takes a long time to stabilize a kernel (especially now that the kernel development model says that it is in fact distribution makers' jobs to stabilize the kernel). The user is pretty much stuck with 2.6.10, maybe with an occassional security patch or backported fix for a serious bug. That's it.

Now, the user can't really upgrade to 2.6.20 easily either. Again, of course, pretending we have a total nerd as our user who actually knows how to upgrade kernels, and has so little of a life that they can spend all that time doing a kernel upgrade. They won't be able to, at least not easily at all, for many of the same reasons Red Hat and SUSE didn't do it for them - they need new user land tools, need to test the kernel to make sure its stable, port any distribution patches that they like or need to use their machine, make sure they get the kernel configuration correct, etc. Sure, 2.6.20 is just a small handful of "minor revisions" from 2.6.10... but in the kernel, the different between 10 minor revisions is the amount of different between several major revisions of the popular desktop environments! Worse, actually, since both KDE and GNOME understand reality and support backwards compatibility.

The user is pretty much forced to upgrade their OS. This, of course, isn't all that great. They need to download or buy upgrade media. They need to go through the upgrade process. Half their applications break (see beginning of this post as to how incompetent developers cause this to happen), many components of their entire system change (new menu layouts, wildly different application behaviour from major upgrades, all new sets of bugs and problems), and they in general go through a lot of pain.

Just to get a single periphial device working.

Again, note, this was a (theoretical) GPLd driver that was included in the kernel itself. This is what Linux causes us to have to do. The user couldn't grab a precompiled driver, drop it in, and get on with his life. Nobody makes binaries for the 10 errata kernel each version of each architecture of each distribution of Linux around. And (again assuming our user is a nerd with no life and lots of time to waste on what should be unnecessary crap) compilation won't even help, because the bloody kernel API has managed to wildly morph in 10 minor revisions as well.

A worse scenario even is when a device driver is needed for the computer itself to even operate. Say, a disk controller driver. You *should* be able to stick in the OS installer and have it ask for additional drivers (say, from a floppy, USB drive, or second CD drive), but you can't, because nobody has the bloody binary for the installer. You can't make one yourself, 'cause you don't have a working computer yet! In this scenario, Linux is completely and absolutely unusable, and the user has no choice other than to use a different OS.

All because the kernel developers are too apathetic to make the kernel usable as the basis of a non-nerd OS.

Now, the proper fix for this scenario is to get it into the kernel developers' heads as to *why* they need a stable ABI, or at least a stable API (so that installers which compile and install GPL drivers automatically for a user would actually be possible). Doesn't look likely at the moment.

The next best fix would be to make an unofficial Linux Driver API. This would itself be a module that simply exported a well defined unchanging API. Drivers that wanted compatibility and portability between kernels and don't mind taking a (slight) performance hit from going through an extra layer could target this API. The module would also likely need its own module loading code as well, so it can do smart things like read drivers from /lib/linux/drivers/[api version]/[driver].ko (so you don't need to reinstall drivers for each kernel revision) and also be immune to all those module interface changes Linux is subject to. Yet, it's "bloat," and should be absolutely unnecessary, but Linux makes it necessary. With this module, both GPL and proprietary drivers could be installed at any time and Just Work(tm) independent of the kernel revision. In fact, this API could even be backported to older 2.4 or even 2.2 kernels; some features might not work, but the core driver should still work.

This Driver API wouldn't need to be a complete replacement for the internal kernel API. The purpose of this API would be to support common user-changable devices; basic periphials, disk controllers, etc. Things like whole new bus types and such are things that can safely remain in the core kernel. It's also understandable that the API would need to be versioned and new versions would be needed occassionally to support new features of the Linux kernel (and the new buses it might support). Drivers using the older API should still work, though, of course.

The problem with this solution is getting it done. Someone very familiar with the kernel and ready to develop and maintain such a complex interface layer would need to do the work; I doubt there are many people like that around .

The last fix is to make a new sort of package repository. We already have several popular RPM repositories that package various popular third party software for several versions of several distros. We need something like that, but catering only to kernel modules. At first, supporting just the major players (Red Hat, Fedora, SUSE, Mandrake) would probably be enough. All the packagers would do is package kernel modules, so it would hopefully be easier to manage all the various kernel errata for many versions of each distro. Autobuilds could occur such that as long as the drivers don't need modification (usually the case for errate kernel updates on distros), the packagers need do nothing; the autobuild system finds a new kernel update is available, downloads it, rebuilds all the kernel modules, pushes out the new packages.

The site would have a fairly simple interface. Select distro, select version, select driver, get a list of RPMs. A YUM and/or apt repository would be availabel. There would also be an interface for searching for hardware by things like the PCI ID and vendor/product name which would return the appropriate driver package. An XML-RPC interface would also be available along with a tool/library for doing the searching. Imagine having hotplug on your OS detect new hardware for which there is no installed driver popping up a dialog, "I have detected hardware that I do not know how to handle. I can search the Linux Driver Database for an appropriate driver. [Cancel] [Find Driver]" It queries the site, finds an appropriate driver, then grabs the correct RPM(s) for the user's installed kernel(s) and installs them.

This solution is likely the only one that's feasible, because of all the solutions it is the only one that doesn't require big changes on developers. Unfortunately, it's the worst possible solution because it doesn't actually fix the problem itself and will actually require more work overall. (It will just be work that is capable of being done by a larger segment of people than a solution that requires talented and experienced kernel developers.) There will still be gaps; for example, the user needs a driver for his networking hardware... how does he get the driver off the site? How does he get the driver for his disk controller during OS install? The first two solutions make it possible for drivers to be shipped on a CD or other media right along with the hardware itself.

Linux is great for developers. After all, we *are* the nerds with seedy, intimate relationships with compilers and no life resulting in tons of time to sit around compiling shit and tweaking source code. Well, most of us are. Some of us, perhaps, are sick of that crap, and just want our computer to work. If we *are* going to sit around tweaking and compiling stuff, we'd rather it be our own projects and not have to waste many hours to get some other bit of something working that some other developer should have already gotten working. But, alas, no - we're going to be stuck wasting our time away doing ultimately pointless excercises to get things working that should've been working from the start.

[#] Comments

Weekend Fun

Had a fairly good weekend. Spent Saturday and Sunday with Libby; wanted her time Friday too, but alas, 'twas not to be.

Saturday we went to the Silverlead Renaissance Faire in Kalamazoo, in full garb of course. Met a lot of Libby's friends up there. Her whole family is a group of geeks, so she knows a _lot _ of faire and con regulars. Had a good time out there. Looking forward to the Michigan Renaissance Faire in Holly starting up in a couple of weeks.

Sunday we went to a Led Zeppelin concert. Not the real Zeppelin, of course, and not even Page or Plant. It was the Detroit Symphony Rock Orchestra. Basically, an actual band (Singer, Bassist, Guitarist, Drummer) and a 50-piece orchestra. The show ruled. We had _very_ good seats (4 rows back from the stage), which just plain rocked, except that it was fucking loud. The orchestra did amazingly well. The band-portion was a little too loud compared to the orchestra, and the guitar and bass were a little more metal-sounding than Led Zeppelin ever was, and the singer was a little shriller than Plant, but it was still great.

One of the coolest parts, Libby and I agree, is during the end bit of Stairway to Heaven. The singer did all the accoustic guitar work during Stairway and other songs. We expected the guitarest to pick up the electric guitar part at the end of Stairway. But no; one of the violinists stands up and steps forward, and she has an electric violin, and does the end of Stairway to Heaven. Did it damn good, too. There's just something magical about seeing a woman rock out on a violin playing the lead guitar part of one of the great rock 'n' roll songs in history.

Libby was a little disappointed; we both expected the show to be more symphonic and less rock, more like the "Kashmir: Symphonic Led Zeppelin" CD by the London New Philharmonic Symphony Orchestra. (Libby's favorite CD.) But, still, we did both have fun. The show would've been pretty much perfect if it wasn't _quite_ so loud, and if the rest of the jack-off retarded moron audience wasn't there.

Why do people have to do that super-loud whistle crap at a concert? What is wrong with clapping? What is wrong with just sitting there and shutting the fuck up while the band is playing the music we all paid to hear? Why can't we just toss all the stupid people in a tar pit?

In any event, I had a great time. Took some effort to keep the depression crap from bubbling out, and I certainly failed at it often enough, but for the most part I let myself enjoy the company. ^_^ Next weekend is KANAR, when I'll get to have yet _more_ fun. Yay me!

I also got some work done on the new Scriptix stuff. Not a whole lot of work, but some.

[#] Comments

Future of Scriptix

I really don't like Scriptix. The design sucks, the API sucks, the language sucks. Pretty much all around, it sucks.

I've been contemplating dumping Scriptix in AweMUD for an alternative for some time now. The two big choices, as I see it, are Mono and Lua. Mono is a very powerful framework; we'd get JITd scripts, multiple languages, a very complete standard library, and Boehm GC compatibility. However, Mono has a couple problems; it's very big and complex, might not keep that Boehm GC compatibility for much longer, and could be a security problem without some of the Mono 1.2/2.0 planned features (sandboxing stuff, mostly).

Lua is a beautiful framework. The API is beautiful, the language is elegant, and the runtime is very lite and fairly quick. Truth be told, for anyone looking for an embedded scripting language, I'd have to call you an idiot for using anything other than Lua these days without having a very good reason. Unfortunately, I think I have a couple good reasons. First, it has no compatibility with the Boehm GC; it implements its own. It's a C API that requires a lot of wrapping to be used by C++. It's quick, but not super fast, being a very dynamic language. And the syntax, while great for developers, leaves a little to be desired for mere mortals. If AweMUD were a fresh project designed with Lua in mind from the start, it would be a no brainer, but I need something that'll easily and painlessly slide in where Scriptix currently is.

So, what is the answer? Scriptix2.

Yes, that's right. Idiot me has started *another* project, yet another scripting language.

This one, however, fucking rocks.

I'm using the Lemon parser generator and a very simple but quite speedy and usable custom tokenizer. The language syntax is somewhat BASIC-ish; no curly brackets, no semi-colons, and using a lot of English keywords. I'm only really so far as having some of the grammar down and having the basic tree analyzer in place, but it's coming along quite nicely.

The planned features include static typing, a unique OO syntax, high performance (much better than current Scriptix, which itself is usually much better than Python, Lua, or Perl), easy to read syntax, a full set of user-oriented language features designed for embedded languages, lots of error detection and warnings, and a very, very easy to use API.

Syntax looks something like: <cblock>begin main () int x := 1 int y := x ** 2

if x < y then print "hi" end end</cblock>

Not too wild or anything. Like current Scriptix, you'll be able to declare functions as public, and also be able to declare global variables public. There will _not_ be the capability to create custom types inside a script; I just don't personally see the point, in most cases you can do without.

The big thing that's fairly different between Scriptix2 and Scriptix (and C++/Java/C#/etc.) is the OO model. Technically speaking, everything is an object, although internally ints, float, strings, arrays, bools, and any other core data types I come up with will all be special cased. The way OO works is entirely with global functions and overloading.

For example, say you have an object and you want a method to get the object's name. In Scriptix now, you'd do something like:

<cblock> name = object.get_name(); object.set_name("foo"); </cblock>

In Scriptix2, however, we don't have the method syntax. We do, however, have over-loaded global functions. So you can just make a function called name() that takes a single Object as an argument and returns a string. Make another that takes an Entity and returns the name. etc. So you have:

<cblock> string name1 = name(object) string name2 = name(other) </cblock>

Now, when you want to set the name of an object, we could do one of three things. First, we could make a set_name() function for each object type. Second, we just call it name(), but make it take two arguments - the object and the new name. Scriptix2 solution, however, is to make a new kind of function call; an assignment call. Basically, just assign to the function call; a special function name is looked up (basically the given name with a = appended) and the expr used in the assignment is passed in as the additional args.

So you'd have a function definiton (declared in C++ code most likely) like so: string name=(Object, string)

You'd call it like this:

<cblock> name(object) = "new name" speed(bus) = 45 </cblock>

I read it as "name of object is 'new name'" or "speed of bus is 45". It feels a lot clearer to me than the object.method(value) syntax, which doesn't read very well. I also think the new syntax is a lot easier to grasp. If the expression "name(object)" results in the object's name, assigning to it should change the name, right? Just Makes Sense(tm).

Because the language is statically typed, I'm hoping the API to be a lot easier. You'll be able to push _any_ object into the engine; the only real limitation will be that if you want to have the object's memory managed, it better be allocated in Boehm GC managed heap. There will still be a necessary glue layer, althogh it _would_ be possible to hack in something like libffi to make the script function calls directly invoke C functions and C++ methods. The glue layer should be quite easy, however, since the values will be native C types packed into a chunk of memory; the glue generator can just make magic structs for each functions return types and argument lists. The glue code might look something like:

<cblock> // <generated> // Function foo() // Arguments: string name, int value // Returns: Object, bool struct _do_foo_args { char* name; int value; }; struct _do_foo_return { Object* ret1; bool ret2; } #define return(ret1val,ret2val) do{ _return.ret1 = (ret1val); _return.ret2 = (ret2val); }while(false) void _do_foo (_do_foo_args& arg, _do_foo_return& _return) { // </generated> #line 23 do_something_with(arg.name); do_somethign_with(arg.value); return(get_object(), true); // <generated> } #undef return // </generated> </cblock>

That isn't exactly how it'd look; mainly, the datatypes for args and return values will all have to be 32 bits (or 64 bits and 64-bit platforms) so that they align properly and can just be copied into and out of the stack.

Another big change over current Scriptix is how I plan on handling the compilation model. Currently in AweMUD we have this silly sorting hack for scripts to ensure one gets loaded before another to handle resolution of public functions and such. And even then we don't allow two scripts to refer to functions in each other. With Scriptix2, the compiler will allow you to load multiple source files in. As each is loaded, the file is read and parsed, but the compiler goes no further than that. Then, once you've loaded all the files you want, you tell the compiler to go through the compilation stage. Thus, it has access to all the functions and whatnot in all source files at once, so there is no "dependency" resolution step that the developer has to handle. Just load up all the scripts in your scripts/ folder at once and let the compiler do the rest.

One thing that Scriptix has weak support for now but Scriptix2 will have from the start is a permission system. Basically, each source file can have access bits set, which are then compiled into each function defined in that source file. Additionally, whenever the application invokes a script, it may specify a set of access bits. As the engine runs, it keeps the set of current access bits. Initially this will be those specified by the application when it invoked the script. Each function that is called, however, will have its bits bitwise-and'd with the current bits. Functions can limit the current bits, but not increase them.

With this, say you have some script source from a potentially dangerous place. Say, you game allows servers to send mods to clients. You want your local scripts to have file access and such, since its needed for the game to work, but not the untrusted remote scripts. As you read the scripts from the mod, you compile them without the file access bit. Now, your application invokes a script in response to an event. It has no idea if its a local script or one over-rided by the remote server, so it just grants all access bits during the invocation. Run the script is invoked, however, the access bits not given during compilation are dropped (due to the bitwise and operation), preventing the script from doing anything malicious. The script can't even take advantage of a buggy local script; even tho the local script was compiled with access bit for file access, if its invoked by the remote script it will not be able to _add_ the file access bits; they're already gone since the code path when through the remote script.

The work on Scriptix2 isn't going as fast as it could be, as I'm still working on the game ruleset and other AweMUD stuff. The fact that I'm so far along with Scriptix2 already given that lack of time, however, proves how clean and simple the design is. The vast majority of my time, in fact, was spent on learning how to use Lemon; not that that's out of the way, the code stuff should be easy to finish off in a couple weeks.

[#] Comments

Print to PDF

The lack of PDF printing support in Windows or its applications has resulted in need for a bit of a hack. Basically, what we've had to do, is create another pseudo-printer on one of the (increasingly overloaded) Linux servers. The printer "filter" gets the job, extracts the user, job title, and postscript document, uses ps2pdf to convert the document to PDF, and mails the PDF back to the user.

Incredibly simple to setup on the server, but it's a complete pain that this kind of crap is necessary. Even if Windows apps don't have a built-in Export to PDF feature (hi OpenOffice.org!), the Windows printing subsystem should bloody well have it built-in (hi gnome-print!).

[#] Comments

AweMUD Bugs and Features

Seems the 0.22 release of AweMUD did manage to have a few bugs, including a crasher. ::sigh:: Still debating whether I should roll a 0.22b release or not. I wanted to have a rock solid release. 0.22 is a lot better than some previous releases, but it's not perfect, and I rather like perfection, myself. ;-)

Either way, 0.23 might be a longish release cycle. The things I want to get done with the 0.23 release are things that will take a lot of time and effort to get right, which doesn't help release cycle lengths at all.

One thing is the body description system, so that we can have varied body types (humanoid, centaur, etc.) and, eventually, body part damage tracking. Also with this comes the possibility of more intricate equipment usage, like arm bracers that only go on one arm instead of both, so player characters can have a less symmetrical appearance. (A lot of anime outfits tend to be asymmetrical, and look pretty sharp, so it seems like a good thing to support in a MUD.)

Another thing is character creation in C++. It's currently in Scriptix, which isn't that bad, but... Scriptix really isn't a full scal programming language. It's a scripting language. And not even the best around, because it tries too hard to look and act like C++/Java, which -are- full scale programming language. JavaScript would probably have been a better language to use than Scriptix. Still possible to fix Scriptix, but it would take a lot of effort, and iin the end, it's probably better to just replace Scriptix than put that much more effort into trying to get it to work ideally.

Yet another thing on the list of stuff to is the pending action system. Basically, right now, each action (command) immediately calls a function to carry out its task, and then set a round time on the character. The round time just serves as a way to state that the character is "busy" and cannot take any action for a few seconds. This system has some flaws, though.

First, the action completes immediately, and then the wait begins. For a long action, like removing armor, the armor shouldn't immediately be removed. The armor should be slowly removed over the time period. Among other things, the descriptive messages should look a little more realistic, and the character's defense should slowly drop as more and more pieces of the armor are removed.

Second, the current system makes it impossible to have a queue of actions or actions that automatically repeat. Say combat. You want to auto-attack as quickly as possible. but you want to intersperse the auto-attacks with other commands without stopping the auto-attacks. As is now, any commands you type would be denied because you have round time, and as soon as the round time is up you'd auto-attack again. With a pending action system, you'd just queue up the actions. So if there are no more actions on the queue, the attack would fire again. Otherwise, it would process the other commands, and then when those are done the attack command would re-fire.

[#] Comments

Depression

Depression is really starting to sink in again. It's becoming horribly obvious how little I have to look forward to anytime in the future. There really isn't anything in my life that really gives me any drive, any reason even to stay alive. I have nothing to live for. No dreams that have a chance in hell of occuring, no love to devote myself to, and no possibility of those correcting themselves anytime soon.

I spoke the other day of recent reunions. One is with my ex. I will start off by saying how I completely *do not* want another relationship with her; that's not what this is about. I am dismayed at how much she has turned out, though. I took some time to track down her blog, and... she's nothing like my angel was when I was dating her. If that's how someone that I truly loved turns out, to someone that... unwholesome, as I might call it... how can I put faith in anyone ever again? Everyone changes with time, and in most cases, it's always for the worse. I will not that it is in _my_ opinion that she's changed for the worse; most people probably won't see it the same way. She just isn't anything like the girl I loved.

The other reunion was with my friend from Seattle. For about a year, I called her "sister," as that was one of our attempts to resolve a small problem. Namely, that we both loved each other a lot, but I loved her romantically and she loved me platonically. We tried the sibling thing basically to see if I could be mentally conditioned to think of her as a sister. Experiment result: complete failure.

When she moved in with her boyfriend in Seattle, I broke down, again. It's *really* not easy to be "alright" with a person you've been completely in love with for over 5 years (with long breaks of denial in between) moving in with someone. At all. I tried another mental conditioning - convince myself that I don't love her at all anymore. After all, she's moved in with a boyfriend she's been with for less than a year, and this is supposed to be my moral and innocent love; it's not hard to be upset and disgusted on top of hurt. I stopped talking to her, stopped reading her blog, blocked her on AIM, never returned her calls, and every time I thought about her (which was and is still many times per day), start mentalloy repeating how much I hated her. Experiment result: complete failure.

Every time something in my life was fun and enjoyable, I wanted her there. I want to share my happiness with her, and share in hers. When I sit around the fire at KANAR, watching the people sing songs and be merry, I could think of how much she'd love in there. When I saw a good movie like Shrek 2, I wanted to laugh with her, talk about with her. When I lay awake at night alone upset about something, I wanted her there to make it alright. When I was bored, all I wanted to do was go pick her up and head out to the park or go shopping or see a movie or just each sit together and read a book, anything, so long as she was with me. I worried if she was doing OK, if she was right then with that beautiful smile and sparkle in her eyes that I love so much, or if she was sad or upset and needed someone, and I'd be unable to sleep because I'd be worrying about her. I need her in my life. You can't pretend you hate someone that you feel like that about.

She got ahold of me after that, and I invited her to KANAR. I saw her that Friday night, the night after she flew back to Michigan. At first, my mental conditioning was still kicking in. I didn't want to talk to her, didn't want to see her, wanted to be angry with her. She broke through that though, and now it's stuck. I've only seen her twice, and for only a few hours each time, since she's gotten abck to Michigan over a week ago, and she's only here for a small handful of weeks. And it's driving me nuts; I want her here, I want to spend every minute I can with her, because she's going to be gone again. Back to her new home in Seattle with the guy she loves.

And the worst part is, I know *why* I tried to condition myself to hate her. There was a very good reason. I am in complete pain the way things are. She isn't and never will be in love with me. I'm not good enough. She has a boyfriend back at her home, her home in Seattle, 3,000 miles away, that she does love, is living with, is happy with. How many does, or weeks, goes by between her even remembering I exist? How often does she think, "I wish Sean was here, I want to share this part of my life with him." How often does she lay awake worrying if I'm alright? Being in love with her is like making love to broken shards of glass; all you get in return is lots and lots of pain.

I can't even try to find someone else, because one of two things happens. First, a relationship starts, is very healthy, and then eventually my denial wears off and the relationship ends, causing a lot of pain to someone I love very much; just not enough, apparently. The other thing that happens is the relationship never starts, because I feel like I'm cheating on my true feelings, and after all I'd just be causing pain to the person I'd be dating down the road, and I know that if I do date someone, I'll never have the chance to win over my true love. Which won't happen either, but hey, I'm human, and the only thing that keeps us going is hope and faith, right?

So, like I said, I have nothing to look forward to. I can be the best guy around for her, love her more than anyone else, make her very happy when we're together, and she'll still always think of me only as a friend, a brother. And I can't look elsewhere for love, because I've tried for some 6 years now and that fails. *6 years* and I can't get her out of my heart. Nothing to look forward to.

I can't even look forward to a career, to being done with school, to anything else, because without her, it's all worthless. I just don't care about any of that. Not if that beautiful smile and sparkling eyes aren't there to be happy with me. What the hell am I supposed to do?

[#] Comments

Game Rules

I've been working on a custom table-top RPG rule set. Mainly, I'm rather dissatisified with Dungeons and Dragons - the rules just don't work that well, are still too complex, the power levels are completely unbalanced and unmanageable... it's just not that much fun to me anymore.

My new system is code named B&L - Basements and Lizards. ;-) One design goal of the new rules is to make them fairly easily adaptable to a computer system, so we'll have a system finally to use in AweMUD. Which will be most good.

Also been looking over BESM d20 (Anime hack on the D&D rules), which are rather interesting. Still looks like there will be massive power balancing problems, but then, anime tends to be like that. ^_^

[#] Comments

Peoples

Had a lot of reunions lately. My awesomely nifty friend from Seattle is back in town. I took her out to KANAR last weekend, and she's attending the August 6th weekend game as well. I haven't seen her in 7 months; I honestly can't describe how much I've missed her or how glad I am she's around for the next month. I only wish she wasn't just going to leave again. :(

Also saw a couple of other friends I haven't seen in ages. We had dinner, talked through a potion of the night, caught up on old times. Definitely cool people, shame they're not around more often either.

Finally, I ran into my last ex. We haven't really spoken in some 2 years, but for some reason after we saw each other last week she decided it's time to start talking to me again. Must be my good looks. ;-) I'm still rather not too sure about this, we really did have a pretty bad breakup (entirely my fault, I will freely admit), but ah well.

In any event, I've seen more old friends this week than I've seen in the last two years.

[#] Comments

Back Woes - Continued

Got x-rays of the lower back. Spine is in great condition; better than the average person. Yay!

Bones in the hip area (I forget the names of the exact bones; S-something-er-other) are rather crooked, which could be causing the pain in they're pinching anything. Also a high liklihood of sprained back muscles, since not much else could explain the pain. After work on the lower back, I feel a lot better, but still pretty sore - further evidence that it's a muscle problem and not a bone/nerve problem.

Chiropractor also took some x-rays of my neck (my usual problem area), so he has a more up-to-date idea of what work needs to be done there, and started away. Neck already feels a lot better.

[#] Comments

Robotic Sensory

As Robert Love was saying, roberts would not indeed have extra-sensory information over-laid onto their visual display for processing. They'd just "know." As humans would do with other senses.

I think that, however, the problem isn't that the movie producers or viewers have that hard of a time realizing that the robot wouldn't see the information, as Mr. Love points out. Instead, it's just visualization intended for the viewers themselves. Seeing the Terminator's physique comparisons when looking for a new set of clothes isn't meant to imply that that is how the Terminator receives that information to his AI, but is instead meant to display to the viewers what capabilities the Terminator has.

Without showing these features visually (or auditorily), the viewers wouldn't even think of it. They mightn't realize why the Terminator ignores some targets and goes for others on his third time through the bar in the buff, looking for clothes, unless the movie shows them that he is looking for a match in terms of physical build.

This is similar to how in a lot of action movies, the bad guy always spills the plot. It's not because the bad guy is dumb. It's not because the hero is incapable of fulfilling his role without hearing the plot spilt. It's simply so that the information can get back to the viewer with as little break in suspension of disbelief as possible.

Another example of how nonsense is required for viewers are stages in plays. Notice how the audience always has the best viewpoint on the action? How everything seems to unfold in a fairly two dimensional fashion? The stage can't move around to give you different view points on the fly, like cameras in a movie can. So the stage, actors, and props are laid out in a fairly "stupid" way (in terms of how we would do things in reality) merely because of the presence of the viewers.

[#] Comments

157 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!