Monday, December 27, 2004

Amusing Side Note

So as it turns out, I was in fact not the first one in to the office Christmas Eve. Had I but looked in the main conference room, I would have noticed our newest employee asleep on the couch. Apparently he had worked late for us on the 23rd, gone to his other job and worked until 7 in the morning, and then come *back* to us to collapse onto our (very comfy) couch.

Friday, December 24, 2004

Pre-Holiday Ramblings

So most of this week I've been trying to get over a nasty head cold. I think part of it is caused by the dry air in our house. I wake up with awful headaches, sweating and dehydrated. The heat kicks on, and I wind up with what feels like a hangover, despite the lack of alchohol. Ugh. So I got an overpriced mediocre large orange juice on the way in to work today, and it seems to have helped.

On the way in to work today? Yeah, we don't have Christmas Eve as a holiday here, and I'm trying to save paid time off for March. I'm the only one here right now, though. (Ok, someone else just arrived. He's so new he doesn't have any accumulated paid time off, so he kinda has to be here, or eat the time as unpaid.) I'm going to leave in a bit and help a friend pick up an 8 foot couch he bought for his new apartment. We'll drag that up a flight of stairs, as I don't envision that fitting into an elevator with any grace at all.

The other bit about having a cold is that Ben had one last week. That sucked. He stayed home from day care Monday through Thursday, which played havoc with our schedules, but we got by. That's likely where I got this asskicker of a cold, though. Now I know how he was feeling. Poor kid.

It's very white here. We got a bunch of snow the last couple days, probably close to a foot here, about two feet of it south and east of us. I don't hate the snow or cold weather nearly as much as I did when I was growing up. I think what I dislike most about it is the dry air and how utterly inconvenient it is to discover you're trapped somewhere when you had other plans. Oh, yeah, that and frickin moronic drivers...but that's always true. I never have had much tolerance for idiots, and this weather provides plenty of opportunities for people to display their prowess at the fine art of being a total ****wit.

Huh. I wonder if I better go back and reread the ToS for this place and edit that. We'll see. (Ok, so I did go back and read the ToS, and maybe that extremely versatile word I had in place of those stars could be construed as vulgar or obscene. A pity that this day and age has me self-censoring like that.)

Anyway, tomorrow is Christmas. I was up til 11 last night building furniture for Ben's new room. He's not getting a bunch of toys from us, rather he's getting a new room. We want him to not feel displaced come March. He's got some cool stuff, and one of the things is a train table. That's sitting here in my office right now, and I need to get that home somehow today. Grandparents and a friend are getting hime some Brio train set stuff, and I think he'll love it. We are getting him some toys, too, don't worry, but the bulk of it is getting a new room ready for him. (By the way, Brio is a brand of wooden train toys. No electric trains for a toddler. They're pretty expensive, but I'm told they are also rather durable.) I'll let you know what he thinks of his new room.

I need to get working on Lore. I have projects set up on SourceForge, as I mentioned earlier, but it took some effort to figure out how to get CVS support to work right on my XP (Home, I'm afraid to admit) laptop. Once set up, it seems pretty easy, so now it's down to brass tacks. Lore-gcc is the first bit I'm going to work on. A front end to gcc via lex and yacc seems like a decent route to take. Several of the languages seem to define their own macros for code generation, so there's just one more piece for me to dig deeply into. Hey, if any of you know any good sites for designing MMORPG's, let me know. (As if I have magically established an enormous fan base for this blog. Hah.)

Well, I'm off. Merry Christmas and all that.

Wednesday, December 15, 2004

A Vile State of Affairs

I just got an email about this.

You know, it occurs to me that since it is pretty clear that the current state of affairs is being handled in much the same manner by much the same people as it was about 30 years ago, we'd all be fools to think that they don't have the next 30 years planned out in a similar fashion as well.

If that's the case, they should be grooming protoge's at this point, as some of these people simply will not be around in 30 years. It should be possible to identify those people.

Wouldn't be ironic if the first Black woman president was a Republican? It looks to me like there's one possible protege' right there. There should be more. These people are having their power base firmly established and entrenched even as we speak, and if those who believe in denying fear the power it seeks over humanity wish to stop these people from being unassailable in the future, we have an obligation to attempt to do so *now*.

I predict that in all likelihood these people will *not* be in elected positions at present, and will not be so until their power base is solidly established. They already recognize that it would be too easy to remove them from elected positions if they are otherwise weak. Political power that they wield will come from being in appointed positions. They will also be stockholders in companies that profit from the politics of fear.

I suggest that, as vile as it may sound, people who oppose fear also become investors in said companies. This certainly sounds counterproductive until you realize that these people will not sacrifice their own monetary base in order to weaken us. It also allows some degree of information and influence that otherwise would not be available. It also allows for better research into our opponents.

I do not and will not advocate violent or illegal methods to bring these people down. That is anathema to my position. What I do advocate is exposing these people to the light of day, and showing the convoluted network of connections they undoubtedly already share.

Tuesday, December 14, 2004

SourceForge

So I now have 5 new projects listed on SourceForge. I'm not going to link to them here just yet, as they are totally empty and will be for some time. I'll take a moment to describe them here, though:

Two are compilers for the same language. This sounds a bit stupid at first, but bear with me: One is a new front end for gcc, and will be written in C. The other will be written in the new language (which I am calling Lore), and will target a few platforms that gcc currently doesn't - the JVM and .Net. Both use a stack based system, and I heard that retargeting gcc to a stack is a pain. The second is a bootstrapping compiler, and I'll add more targets to it over time - Win32 will be the first, but Linux and Mac are also on the to-do list.

The next is pretty obviously a standard library for Lore. It will initially be just enough to get the bootstrapping compiler to work, but after that will be things like data compression and digital signatures. I want the compiler suite to be able to generate modern binaries and distribution units, and those are two mandatory parts.

Also is a miscellaneous category. In the course of creating a compiler, other tools will emerge, like a parser generator (think ANTLR), (maybe even a back end generator, like what lcc uses), plugins for IDEs, and editing modes. That's where all this junk will land.

The last project is a game. Both multiplayer and single player modes allowed. Think of it as a really lame Neverwinter Nights wannabe. ;) I figure that a language needs an application to be useful. Otherwise it's just an exercise in mental masturbation, and while that can be fun, it's pretty pointless.

If you get a wild hair to track down my projects, you now have enough information to find at least one of them, and from that get to my username, and then the other projects. Feel free to donate money once you get there. ;)

Thursday, December 09, 2004

Ben

I have a son that turns three next month. A couple nights ago he got very excited when it was bedtime. We read him his story, and he climbed off the bed and started running around like he was a crazy man. We told him to head to his room, and he took off like a shot. His room has a small entryway where you step in, there's a wall, you turn left and there's the rest of his room. We have a small trashcan by the wall right there. Well, he's running full tilt, not really watching where he's going, and he runs right into the trashcan and smacks his forehead against the wall. I rushed in to console him, expecting a big bunch of tears. He staggers, turns around looking stunned, sees the look on my face, and clear as a bell says, "I'm okay, Daddy." He then gives me a big hug. Wow. He was concerned for me, and wanted me to not worry.

I have a great kid. (He was indeed ok, by the way. Not a mark on him.)

Tuesday, November 30, 2004

Grey

It looks like the Earth forgot to keep rotating. Combine the shorter days with overcast skies and the slight tint in the windows in my office and I feel like I'm working at the bottom of a very very large cave. I am affected by a lack of sunlight in a not very good way (ask my wife or anyone else who has known me for a while), and it's making me a little grumpy lately.

Thursday, November 18, 2004

Language Design

So I've been doing some reading about different kinds of programming languages and found some really good references, and it feels like my head is going to explode some of the time. I think that there's going to be a bit of a tradeoff on how powerful a language is versus how readable and maintainable it is. It's nice to be able to get a lot done in a few lines of code, but if those lines of code make no sense to anyone but the writer, it just doesn't do much good. It's obvious to me that comprehension of code drops dramatically when a single function won't fit on the page at one time.

I think strong typing is a good thing. The ability to detect type mismatch at compile time (or in the IDE) as opposed to at runtime is a really good thing. I think that errors at runtime should be minimized where possible. However, I also think that implicit casting is also a good thing. I don't want to have to tell the damn machine that yes, I know this is an integer and yes, I want to use it as a float. It should just work, and if the cast is legit, it should do it with no warnings at all. Some type casting makes no sense, however, and that's when it should throw errors, or at least warnings for cases where it could be a problem but night not be.

Do I want to allow operator overloading? Really, that's just another form of function overloading, just allowing extending the definition of tokens with a normally fixed meaning at parse time. I don't want to have a language that allows redefinition of reserved words. That's just too painful for me. Sure, it's powerful, but that goes back to power versus readability. (Note that's not the same as allowing variable names to be the same as reserved words - that might be allowable due to a difference in scope, but it could make the parser too complicated.)

Wednesday, November 10, 2004

Ugh

It's a really long week. It's only Wednesday and it already feels like it should be Friday. In fact, yesterday felt like it should be Thursday. It's as if Monday was three days long. I've been tired all week. I realize I haven't gotten enough sleep, and that's part of it, but holy crap, this is annoying.

The stupid part of this is that I don't have anything really exciting coming up that would make it reasonable that I'm just being impatient. I could see how that would make time seem to flow really slowly. That's not the case here, though.

Feh.

Tuesday, November 09, 2004

Quiet musings

Sometimes I feel obligated to write something, anything. Not that I expect anyone in particular to read it, and not that I really have anything to say, but mostly to be in the habit of writing. This is one of those times. Like a really good bowel movement, sometimes you just need to evacuate your mind.

I'm running a D&D game lately with a group with a wide range of experience. I've played since 1979, and a couple of the players have played about that long. There are also a couple that have played, but not in years and years, and at least one that has never played before. The novelty of it all is something to see. There is such a plethora of material these days that it's really easy to get lost. I'm just using the core 3 books to start out, but in the design I am (will be) using several other texts. As people get used to the rules, whether new players or old, I'll be introducing some variant rules and additions to make it even more interesting. In hopes of not startling them too badly I want to collect the rules and give them something to read on their own. We've had a few sessions, and they've solved a couple simple problems. I'm also including hints for long term complexity, which is always fun - factions, alliances, recurring villains, and so on.

Unfortunately what I haven't spent enough time on is background. I need to spend quite a bit of time spread out over a much longer time to give it the substantial depth that makes a long term game worthwhile. I need maps, deities, organizations, and so on. Names and NPC's and rumors and legends. It's easy to ad lib a low level game for a while, but if you want a game to last 10 years or more you really need to do a lot of work up front. (I know - I've done it before.)

So anyway, I guess that's what was floating around in my head. As always, it feels good to get it out.

Friday, November 05, 2004

Bleary eyed and grumpy

A little more on languages. The language I create will have a well defined grammar, and I'll be writing forms of it for tools like ANTLR, JavaCC, Bison, and so on. It's very important to have this as opposed to a haphazard language with features thrown in at random. These tools are well established and very stable, and they can generate code reliably. It's much more difficult to write refactoring tools for a language when the parse tree is ill defined.

There should be a way to use a grammar to not only create a parser for a given language, but also a code generator for it as well. If a parser creates a parse tree, you should be able to feed that tree into a code generator and generate equivalent code. (Not necessarily identical code, because formatting will undoubtably be lost, but you could certainly regenerate most comments, especially comments used as documentation or similar special features.) You also can parse code, manipulate the tree, and generate resultant source code, and that ability is needed for refactoring tools. Many optimizers operate on the tree automagically, too. So, anyway, I've seen plenty of tools that create a parser given a grammar, but none so far that create a generator given that same grammar. I'd like to write one. It would wind up being very similar to CodeDOM, but specific to a given language, and you could generate the entire program-space the grammar defines.

Thursday, November 04, 2004

Mumbling to myself under my breath

So I've been toying with the idea of writing a complier for a really long time now. I actually really like Microsoft's CodeDOM that's part of .Net, but I got really frustrated by a couple deficiencies I found in it. For starters, there is no way to declare a function that exists as exernal - not "extern" in the C sense, but "native" in the Java sense. I don't have a problem with being unable to use language features that are not supported in a given language ("native" has no meaning in Javascript, for example), but if I want to programmatically generate code that the language supports, well, I want to be able to actually do it. I am toying with the idea of trying to make a CodeDOM of my own that fully supports msil, and throw exceptions if a given provider indicates that a language doesn't support a desired feature. Not sure on the best way to go on that.

I also want to target multiple platforms. GPCP is a flavor of Pascal that targets both .Net and the JVM, so they are a lovely example, but I also want to target Win32/x86. Clearly the way to go is to take some other language and write a compiler that targets only one of those 3, and use that as the basis to write one that can bootstrap itself. Then add other targets, refactoring as I go.

I've decided I don't like aspect oriented programming. The ability to inject behavior into a class without modifying the original class makes it impossible to determine what a given class will do without knowing the full context. I think this is a bad thing. Attributes, like Microsoft has created with .Net, are similar, but require you to inject them into the code of the class they apply to. In this situation you can tell what it's supposed to do in a given situation when you read the code in isolation. A good language exists for the code writer, not the computer or the compiler.

Generics? I probably should, right from the start. There was screaming for them right away in Java, and they only just now got them. C# didn't have them, but it will in version 2.0. Done right, they are ridiculously powerful. My only concern is that I'm not sure how to implement them in a compiler. I can see classes, interfaces, inheritance, etc., but generics sort of hurt my brain. That's just me whining, though, so feel free to ignore it. Like I said, a good language exists for the code writer. If a feature makes it easier to write good code, it should be there.

That's a good point, though. If a feature is really easy for a code writer to use improperly, it either shouldn't be in the language, or it has been implemented wrong. Pointers are really really powerful that are also easy for many people to get wrong, so you see many newer languages lacking direct access to them.

So anyway, I'll stop here for now. More later.

Wednesday, November 03, 2004

O, Discordia!

The Crimson King is another step closer to breaking the beams that hold the Tower in place, so it feels.

Yes, this post is directly related to my previous one, and those of you who have read Stephen King's Dark Tower books should understand.

Tuesday, November 02, 2004

Voting

So I went and voted. I usually go and vote in the morning, and today was no exception to that rule, but there was a real difference today. Most of the time I can just walk right in, sign my name, and vote. Today there was a line. I stood in line about 40 minutes before going through the signing and voting ritual. It actually felt good to stand in line for once. I really hope it's because there are a lot of really pissed off people who want a change. When asked how I voted (elsewhere - at the poll itself people were carefully avoiding asking that), I responded with "Against Bush." Technically I voted Democrat, but it's much more against Bush. I'd really like to have a candidate I wanted to vote for, as opposed to one I am voting against.

Many people insist that we should vote for third party candidates, and overall they are right. I don't think that any of them have a chance of winning this time around, and I think it's much more important to try to get Bush out of office. As soon as Bush is not up for office, I'm going straight Libertarian ticket, which I saw for the first time as an option the last time I voted. I mean, literally, I had never before seen it as a physical option until then, but then, and today, you could vote straight Libertarian, which I thought was very cool.

Understand that I think politics sucks. I generally don't care for it, I think most politicians are corrupt simply because the job itself is inherently far too tempting for most mere mortals to avoid corruption, and that it attracts the worst sorts of people. (There are people worse than politicians, but they are high on the list.) Politics is about compromise, but this time of year it's about mudslinging. I actually respect those who can do the job honorably and keep their hands clean, but they are few and far between. I'm tired of people bringing religion into politics. Worship whatever entity you like, live they way you want, and accept the fact that the freedom you have to do so is a freedom you share with other people, and that they will also worship and live as they like. So long as they are not interfering in your life, you should not interfere in theirs. Maybe that last bit needs to be in a separate paragraph, but it's one of the more anoying things I've seen recently in political campaigning - bringing religion into it. It's pretty much one of the best ways to guarantee that I'll vote against you.