Sean Middleditch » 2005 » August

Something I’m sure I’ve blogged about before is a new form of mailing list and web forum merger. I have over the last few days spent some time designing the system, how I would actually implement, and am seriously considering doing just that.

I’m dubbing the project ModernTalk for now, for no better reason than that it looks kinda catchy. ;-)

The idea goes something like this. Mailing lists suck. Web forums suck. Each has advantages and disadvantages, and you really don’t get by well without both.

The biggest problem with a mailing list is that, in order to use the mailing list, you have to use an e-mail client. That means then that you either need to receive all those posts in with your e-mail, causing considerable clutter and usage of your mail server space. Of course, you can reduce the mail server space problem by culling old messages from your mail folder, but then you lose valuable information. You can no longer search in your mail client for all messages relating to a certain topic, for example. You’re forced to go to the web archives, find the topic, then go back to a separate application which loses the context of the information to write any new messages you might have that relate to the topic.

The web forums have none of the above problems. They do, however, suffer from some other problems. You do not get real-time updates on new messages. Some forums might offer emails on certain topics, others can be configured to email you on all topics, but then you can’t reply. You’ve just got an email with a nice juicy comment you want to reply to, but you have to go to the web interface to post that reply. A few systems allow reply-by-email. Second, most forums don’t allow attachments. While mailing list archives don’t usually archive attachments, they do at least allow sending them, which is certainly useful for many projects that use mailing lists for sending patches and screenshots around.

Assuming that you get a system with best-of-breed mail support and a solid web interface (not just an archive), you still suffer from problems with thread management from both systems. Anyone who’s ever used a mailing list or forum knows how often a discussion can get off-topic. You can’t really avoid that, but you can make it easy to deal with.

I’ll switch now, abruptly I admit, to the message and topic interface I have in mind. Every message has a parent message and zero or more replies. That forms the tree of a discussion. Each message also has a topic. The topic is just as its name implies: the topic of the message. A topic may either be its own unique topic, or a sub-topic branched off from an existing topic.

When a new post is most, it is either a new message or a reply. A new message has no parent message and is always in its own new topic. A reply message, on the other hand, has a parent message. However, unlike how existing mail and web forum try to make you think otherwise, a reply is *not* necessarily part of the same topic as its parent. The reply could very well be a sub-topic. It could possibly even be a whole new topic. The difference between a sub-topic and a new topic is context dependent, something a human has to decide. However, it’s something the human should be *able* to decide.

Working with a web interface to the discussion forum, handling this scenario is quite easy. You can post a new message, in which you enter the message body and a topic name (subject). When replying to a message, you may easily select to branch the topic to a sub-topic or a new topic. That’s that, done deal. Easy as pie.

You then refine that by giving the moderators the ability to move take existing messages and branch them into a sub or new topic, or fold them into their parent’s topic. Say somebody makes a reply to a post and doesn’t bother to enter a new sub-topic, yet their message is indeed on a tangent to the original topic. The moderator can at any time select the reply and enter a new sub-topic for it, causing it to instantly and retroactively be in that new sub-topic.

The purpose of this topic handling is to allow much better organization of a discussion, and to allow moderators to correct organizational issues.

Many web forums already allow the above system to exist, although in an unoptimal way. Those forums essentially just give every post a subject line, and when making a reply you can enter a new subject line or leave it set to the parent’s subject line (often with re: prepended), and then in the message tree you can see the branching. This is a very weak model of topics, however.

First, the system can’t generate (not easily, efficiently, or accurately, anyways) a topic list. For browsing large discussions, it is certainly easier to see a tree of topics without seeing several dozen post entries for each mixed in. By having a strong concept of topics in the system itself, the system can generate these topic indexes. Second, subjects cannot be changed en-mass. Say a discussion starts on a topic which doesn’t really belong in it, and its not until 15 posts later that a moderator has time to check and notice the problem. They are limited to editing each message and changing its subject, or possibly taking the first of the posts in the sub-topic and changing its subject or moving it to a new thread, which ends up with a tree of confusing subject headers when browsing the discussion (as the replies to the topic would still have the subject of the original thread).

The system must have a strong concept of topics. If a message has its topic changes, all of its children messages with the same original topic should be changed as well. (Alternatively, as an implementation detail, the system could mark message has having the “parent” topic, which means that the system is to look up the message’s parent and use its topic, or its parent’s parent’s topic, etc. Which method you use is not a detail the user would ever know about.)

We also need to tie in email. Email is a difficult beast to handle, largely because several features we’d want for this system are not built into the email design. Topics are always subject-based, there’s no fail-proof way to know whether a message is a reply or a new topic, and you generally can’t retroactively edit a user’s message list if you want to recategorize messages.

The first task is to simply hook up the email system and get replies to a message to be stored in the system properly. You’ll have to rely on the references header and just hope all your users are using mail clients which support it.

Now we want to allow users to manage topics nicely. Normally, when replying to an email, the default subject is the parent’s subject with re prepended. The mail manager can read the subject line of a reply and compare it to its parent’s topic’s name. If there is a match (the subject is identical, or the subject has one or more re:’s attached to it, or one of several other potential combinations that are used in certain circles and rare circumstances) then the new mail is a normal reply and is in the same topic as its parent.

If, however, the subject is different, then the user has explicitly started a new topic. By default, this would be a sub-topic, as that is the most common kind of topic switch in a discussion. The mail is entered into the system, a new topic is generated and that topic’s parent is the topic of the mail’s parent.

A simple extension to the system would be to check if the subject begins with new:. if it does, the message is a reply that intends to start a brand new topic (instead of a sub-topic). The system strips the new: prefix and handles the mail, creating the new topic as appropriate.

It would also be possible to write plugins/extensions/patches for popular mail clients to specially handle replies to messages from this system (identified by a special header, most likely) to add new reply options to make the UI for topic handling a little nicer.

The biggest problem with email is when a moderator recategories a message (and, by extension, its replies). If the moderator does this, the users will not see the change in their mail folders. A problem scenario would be if a few messages come in which should be in a new topic (but aren’t, typically), a user receives these messages in their email, a moderator recategorizes the messages, and then the user responds to one of the emails. The response will have a subject which is different than the parent messge’s new topic name, and the server will think that the user was attempting to start a new sub-topic, which wasn’t actually the case. We now end up with an ugly and incorrect topic tree.

There are a couple solutions I can think of. None are perject, and it may be best to just implement all of them. The first is to guess that if a reply comes in with the re: prefix, then it probably wasn’t meant to be a sub-topic. The system simply ignores whatever comes after re: and just enters the message as a normal reply. This doesn’t match all users behavior when changing topics (I often see message subjects of the form re: new topic (was: old topic)). Simply educating users to use a slightly different behavior may be necessary. The second solution would be for the system to store the original topics of each message, and when a reply comes in through email to check the subject against all the topic names, and if any of them match then the reply is not a sub-topic. This makes the implementation of the system a little uglier, but it should be a little more resilient to users with non-standard subject-editing habits.

A long-term goal might be to offer a new protocol specifically for handling these discussion systems. The protocol would allow a mail client to efficiently search the entire archive, to get topic lists, and to retrieve any message. The client can cache messages locally for off-line operation, similar to how a client might cache IMAP folders. The protocol would not accept normal RFC2822 messages but would use its own simple format that takes the message body, attechments, and the topic handling parameters, and the mail client would be expected to handle this specially in its UI. (Extendable clients like Evolution are great for this kind of work.) This new protocol would allow real-time pushing of changes from the server as well as allowing the client to ask for updates to any caches topic trees it already has, thereby getting rid of the subject handling problem entirely. The new protocol could also allow users with the proper authorization to recategorize messages just like they could through the web interface. Even if we had such a protocol, however, it would still not remove the need for an email gateway, as most users will not have access to software that supports the new protocol anytime soon, if ever. Still, for those that could get access to it, it could end up being a good deal nicer to use than plain email when using a ModernTalk service.

If I do implement this, it’ll probably be in Python. I plan on documenting the SQL structure of the databases as a form of cross-language API, as well as make the Python code modular. I’d want people to be able to, say, replace the list of users with LDAP calls or replace the web interface’s authentication with GSSAPI. A simple filter to put in /etc/aliases would handle incoming email, and a set of scripts for shared logic and another set for the web interface could handle this system. The web interface woudl need to be slick. Very slick. Gmail-slick. Better than gmail, even. And that’s not particular hard. I’m rather disappointed by the lack of web forums or web mail systems or mail archives that have jumped on the AJAX train; you could make some very sweet interfaces for message handling. I’d plan on doing just that.

Attachment handling would be perhaps the hardest part. I’d want to allow the administrator to config allowed attachment mime types, maximum attachment sizes, and possibly attachment expiration rules (if the message is over 10MB and is a zip file, remove it from the archive after 15 days) which would be useful to allow short-term file sharing as the project needs it, but not require that the archive be permanently bloated with stuff. I’m personally against ever losing information, but I realize my projects’ needs and my administration beliefs are not shared by everyone.

At work, my boss installed Groupwise 7, which includes the SOAP access method for Evolution. For the first time in five years, I can finally access the contacts and calendar of the township’s groupware system. The LDAP entries exported by Groupwise were never useful to Evolution (the users had no names, just email addresses and their login ids) and the calendar just wasn’t accessible at all.

Now we just need the server to have an updated iFolder system that works with the iFolder client available on Mono/Linux, and I’ll finally be all up-and-up with the township’s network. :-)

I installed OpenLDAP at home to run the user accounts. I’ve been poking at LDAP a bit lately as I’ve really wanted an object-oriented database, a very fast and efficient one that isn’t Java or CLR based, and LDAP is (although they don’t admit it) an object-oriented database system. it is, unfortunately, not particularly well optimized to the use I have in mind, which has rather frequent changes to the stored data. Still, LDAP would be a good reference for building system a database, and it’s even possible that, although LDAP isn’t designed for efficient-writes, that some particular implementation of an LDAP server (or, preferably, an embedded LDAP engine) would pull it off nicely. Samba4’s ldb may be the answer, if and when it’s ever stable, documented, and released.

Anyways, OpenLDAP is up. I migrated the user accounts and setup my machines. Authentication works over GSSAPI. It’s all rather nice, I think.

I had two big problems, amid a number of smaller ones, while setting things up. The first was that Dovecot, in its infinite perfection, eschewed cyrus-sasl in favor of its own SASL library. Which doesn’t support GSSAPI. Nor does it support binding to an LDAP server with SASL to authenticate. It (shudder) directly queries the userPassword attribute of the LDAP server if configured to authenticate with LDAP. Thankfully, because PAM and NSS both work with LDAP and GSSAPI, I didn’t really have to change much in the Dovecot configuration, although it took me a while to realize that. I just told it to stop using /etc/passwd for the user database and to instead use LDAP, while continuing to use PAM for authentication. Still no single sign-on with my IMAP server, but at least it still works. Oddly, Dovecot doesn’t seem to be able to use NSS for querying user account properties. Either that or I’m missing something.

The second problem was that GDM on my desktop refused to work. I made many changes to the configuration files, some of which looked quite broken but which didn’t seem to inhibit login from working (the user accounts in question had been completely removed from /etc/passwd, so it had to have been using LDAP properly). I still have no idea what exactly I did to fix it. After making another batch of changes and getting a different error message (I received no less than four different error messages, randing from “invalid credentials” to “could not create groups” to “administrator has disabled logins”), I ran /etc/init.d/gdm restart and GDM started working.

Confusing, but hey, at least is works now!

My next system administration task is getting DNS SRV records setup for the various services I run. With a decent DNS-SD (service discovery) implementation, it should then be possible find any service on the network without manually entering any information. That is, the DNS-SD implementation should know the domain the host is in and query that domain for services. Current DNS-SD implementations that I know of all are limited to using M-DNS (multicast DNS), which while useful for ad-hoc networks, is not that useful for engineered/administrated networks.

Over a year past its release, I just finally pushed a minor bugfix release for 0.22.

Quite honestly, I’m ashamed. I’ve known about this bug since last year, and I’ve just pushed it off as inconsequential. To me, it is - at this point, it’s silly to use the 0.22 given the changes in the mainline branch. People, oddly enough, want to use the “stable” release, though, and the shame has finally built up enough that I decided to push the 0.22b release.

I’m hoping to make that effort pretty pointless by pushing 0.23 soon. There is no good reason other than laziness and lack of discipline as to why it’s taken over a year to get a new release out. One should be out every few months at the latest.

Anyways, i need to bug test the current code and push out a release candidate. Several features will be half complete, but that’s alright by me. The serious users will still be using the snapshots as always, and the people interested in a stable version to test out will have something relatively modern to play with. Hopefully 0.24 won’t be too much longer after that, either.

I’m also finally finishing my efforts to get a stable release version of AweMUD running on the test server alongside the snapshot release. It may be a pain given how god-awful long it takes to compile a complete AweMUD stack (libgc+scriptix+awemud) on my server machine (an old Duron 700mhz with 256 MiB of memory) and the build test cycle of getting all the automated goo working. Granted, the stable release doesn’t change (by definition) often at all, so I don’t feel that it’s all too import to get the auto-rebuild stuff working. In fact, I don’t think I need it at all, and I should probably just axe it and only leave in the debug/restart stuff.

I’m not subscribed to any mailing lists anymore (except the AweMUD ones, of course), so I don’t pick up on a lot of cool things that aren’t discussed in the ever-popular developer blogs these days. Every now and again I’ll read up a month or two worth of the archives of various interesting lists, and discover new and wonderful things. I really wish there were more “Kernel Traffic” style news letters for GNOME, FreeDesktop.org, and other big projects.

One interesting piece of software I (re)discovered today is gnome-screensaver, a GNOME replacement for xscreensaver.

The venerable xscreensaver has been around ever since I started using a UNIX desktop many years ago. xscreensaver has several large problems. First, it’s unlock dialog is, well, nasty. Second, its configuration interface is over-complex and option-stuffed like all too much software. A third problem with xscreensaver is that it has no way to support some of the newer features people want out of their desktops like fast user switching in a locked desktop. Fourth, it offers no solid and clean mechanism for disablin the screen saver during, say, movie playback or a presentation.

gnome-screensaver attempts to solve the problem by providing a new screensaver framework that supports modern features and has a beautiful, clean, simple, easy-to-use GNOMEy interface.

I installed gnome-screensaver on my Ubuntu Breezy box (it’s in universe), killed xscreensaver, and started gnome-screensaver. I like it. The configuration panel is as simple as it can get: a slider for the delay, a list of screensavers to use, and a preview box. I believe future versions will have a box for enabling/disabling the lock dialog. You really don’t need anything more at all.

The lock dialog is also a lot prettier than the xscreensaver one. I found the switch user function to be a little less than useful, however, as it seems to be based on the idea of showing a list of available users that you must select; there is no way to type in a user name. Aside from the fact that none of the users on my machine showed up in the list, I wonder what would happen on a machine in a corporate environment with 10,000+ users managed over LDAP+Kerberos? Either the list would be too long to be useful or the list wouldn’t be populated with entries. I’ll have to see how newer versions handle this, especially given that I believe that the version in universe is a little out-of-date.

All in all, though, this is a great development, and I look forward to seeing become the default.

I’m also happy to note that I’m finally back to using Epiphany after a long affair with Firefox. I am now running a 100% GNOME desktop again, and let me tell you, it feels good. The only thing I’m missing is an IM client. GAIM is too non-GNOMEy, its UI really is pretty awful; the menus are over-complex, the configuration is over-complex… I’d rather have something that just works, needs no tweaking, and doesn’t require me to dig through a bazillion menu entries and sub-menus to find what I’m looking for. I tried gajim, but it too is over-complex and non-GNOMEy; the fact that its configuration panel includes options for choosing paths to external applications is all I needed to see to stop using it. Sure, yes, UNIX is all about reusing components… but hide that fact from the user. Those application paths should be selected only through GConf, for example. And one shouldn’t have options for preferred applications when the desktop already has them. I guess I’ll give Gossip another try, hopefully that works out.

I want to get automatic crash reporting in AweMUD working nicely. The current setup I have on the test server works by running a cronjob every few minutes, which checks to see if AweMUD is still running and if it crashed (by checking if it left a PID file laying around). If it did crash, the script then searches for a core dump, generates a backtrace from that with GDB, mails it to me, and restarts AweMUD. If there is no crash the server is not restarted, as its assumed that if it come down cleanly then there was a reason for it coming down.

I’d like to improve on this, and possible make crash reporting a built-in feature. A small improvement would be to dump the cron job and use a parent watcher process. The process would immediately know when AweMUD went down and also get an exit code. If AweMUD went down cleanly, the watcher process could exit as well thereby removing all resource usage (no cron job constantly firing) and if AweMUD is running the process would likewise use no resources other than a teensy bit of memory.

One of the bigger problems is that actually finding the core dump is a chore. Different systems name the core dump differently. The location of the core dump varies with the AweMUD configuration. The system can be configured to always put core dumps in a certain directory, with a non-standard naming procedure.

What I would like to see if an API for either determing the location of a core dump for a particular process, or to set the core dump location for a process. In the former case, the watcher would use the API to find the core dump, where-as in the second case AweMUD would explicitly put it in a defined and configurable location.

Another option entirely is to not use core dumps, but to add a signal handler to AweMUD to catch SIGSEGV, SIGILL, SIGBUS, and so on, invoking gdb on the currently running process and generating the debugging information that way. The problem with this approach is that, once something like a segmentation fault has occured, the entire state of the process is undefined. I’ve seen enough cases where the corruption from a stack smash renders a core dump or backtrace entirely useless or even impossible to generate. Putting even part of the debugging logic in the broken process could, if the problem hits the few but vital areas necessary even to launch gdb (things like the configuration data holding the path and command line arguments to the debugger, the output file, etc. not to mention any libc data or the code itself), result in not only no debugging information but non-functioning crash reporting as well.

I think the easiest and most correct solution is to write some code for finding the core dump of a process based on the system configuration. That will require specific code for many OSes. Linux 2.6, for example, allowing you to specify a rather complex format for core dumps which can include a path and variable expansions for things like hostname, PID, and so on. The most common settings are to dump files named either core or core.$PID in the current working directory of the process. So the code would need to determine the current working directory of the process (/proc/$PID/cwd), the system’s core dump pattern (/proc/sys/kernel/core_pattern and /proc/sys/kernel/core_uses_pid), and expand those as necessary to find the core file. And that’s just the Linux-specific method.

Not pretty work at all.

One particularly useful for securing and managing applications is chroot. However, it is a bit of a pain to use as one must have root privileges in order to use it. This vastly decreases its usefulness for a couple of scenarios where’s I’d like to use it, in addition to making user-level security more difficult.

The reason chroot requires root privileges is, as I understand, in order to ensure that essential system tools aren’t tricked into doing things they shouldn’t. For example, stopping the login command from reading a spoofed /etc/passwd. It’s relatively easy to setup such hacks, *if* you have chroot access.

I wonder, then, if it is possible to simple disable setuid execution if the executing process is currently running in a chroot’d environment.

I suppose it’s also still possible to trick user applications to do naughty things, like over-write or read other precious user files. However, if you have a malicious script or virus that already has enough access to execute a chroot, then it already has enough access to just read or modify those precious files to begin with.

Is there something I’m missing here that makes user chrooting unsafe? Any reason not to allow this operation in future UNIX/Linux kernels?

My eyes are both very dry and bloodshot again. I fear a relapse of my pain and inflamation from two weeks ago may be on its way. Once again, no tears are forthcoming. I’m thinking perhaps that the inflamation may have been caused by excessive dryness. It’s also possible that the extremely sunny weather we’ve been having is at cause, or that my eye sight is getting worse and I’ve been squinting more and leaning closer to the monitor, or that I’ve been on a video game binge for the first time in, well, a long time, and thus have been staring at little gameboy screens or at the big-screen TV a lot more. Time for another appointment with the opthalmologist, I guess.

To make matters worse, I’ve had weight gain. 10 lbs of it. In addition to jogging and eating right and so on. I can’t explain it, other than perhaps I’ve had a huge increase in muscle mass, which is *almost* backed up by my weight lifting records… *almost*. A few small improvements in max weight capacity here and there, but nothing major, not 10 lbs worth, I think.

To make matters *even more* worse, I seem to be suffering from some other symptons. I’ve alway shad a problem with constant thirst. I’m now also having dry, flaky skin on my arms and night sweats (only a couple times, but I’ve never had them before). These combined with my other symptoms could possibly indicate Type II Diabetes, of which family on both sides of the tree have strong cases of. The dry skin on my arms could also just be a really minor sun burn, the thirst again is something I’ve had forever, and the night sweats could be because of the recent heat waves or do to stress.

Ah yes, stress. The Libby-related stress is just getting worse, I really need to call and talk to her and work something out, and add to that the fact that I’m starting school again in about a week, and the pressure from work, KANAR website tasks, and some other projects, and you’ve got a bad recipe for stress.

So, how many of these symptoms are related? Which ones are easily treatable? Am I just turning into a hypochondriac?

My mother is also having bad health problems, some really horrendous kidney stones to be precise, and I’m taking her up to the hospital tomorrow to *maybe* have a procedure to fix the worst of them. Maybe, that is, as somebody else is scheduled for the procedure, but due to her extreme obesity, the doctor feels the machine they need to use might not accomodate the woman, so he may end up with the free time to squeeze my mother in an take care of her. If so, while I’m up at the hospital I’ll visit the nearby (attached, in fact) health center and set appointments with the opthalmologist for my eyes and my family doctor for the diabetes test and stress problems.

These problems are all pretty trivial. Just combined together, especially at the current time (see stress) just isn’t good. I don’t have the time or mental energy to be dealing with health issues when I have school to start and a ton of work for a ton of people to get done.

For the KANAR folks that I promised I’d show up for the module/adventure today, I just couldn’t make it. I seriously pulled some back muscles working out last night, and there is just no way that I could walk around in armor or fight like this. I’m doing everything I can to get the pain levels down to something manageable so I can make it out tomorrow night. However, my mother is having some emergency surgery for kidney stones tomorrow, and while it isn’t expected to be something serious, if she’s in a lot of discomfort or somewhat disabled then I will of course be staying home tomorrow as well to help out while she recovers.

Hopefully, though, things will go fine, and I’ll probably be out the rest of the weekend sans armor. (I doubt my back will be well enough for 25 lbs of chainmail.)

On the upside, I’m going to use the time to start getting some backlogged work done on the KANAR website, so I guess you all profit from my pain. ~_^

So last night was fun. For some particular value of fun, anyways.

I was dreaming, although I can’t remember what about, in included Libby as a main character, which isn’t much of a surprise. Something about an adventure saving the world or something dumb. Anyways, I wake up in the middle of the night drenched in sweat. And I mean drenched. The sheets, blanket, pillow, everything was soaked. I go to the bathroom, come back to bed, and try as best I can to fall asleep while half-floating on my mattress.

A few hours later, I wake up again. Except this time, something in on my face. Something heavy with legs, or fingers. And it scampers down onto my chest. It’s pitch dark, and I see nothing. I hear nothing. I have no freakin’ clue what’s going on. So I do what any person in that situation would do - I fucking flip out, screaming in pure unadultered terror and trying to fling whatever it is off of me along with my blankets. As soon as I sit up and scream I don’t feel it anymore, but I can’t see and figure it’s still on my bed, and start throwing and thrashing until I can reach the light switch. The light goes on.

Nothing’s in my bed room. The door is closed, the window is closed, and everything looks ordinary except for my bedding all over the floor. No person, no creature, nothing.

I realize that my entire left arm is still very much asleep and entirely numb, and twitching to boot.

I then realize what had happened. My arm was over my head and started twitching, which woke me up to the feeling of “something” crawling on my face and chest. I didn’t realize it was my own hand because, for one, I couldn’t see anything, and for two, the whole arm was asleep so my hand didn’t register that it was touching my face.

I go to the bathroom again, answer the questions from the rest of the household wondering why my panicked screams were, and go back to bed, now slightly afraid because, who knows, my theory *could* be wrong.

I think I’m going insane. :-/ There is a positive note, though. This is the very first time I have ever screamed in real mortal terror, and I’m quite happy to report that I do *not* have a girly scream, but a relatively deep and manly scream. So if I ever need to cry out in pure fear again, I at least know that I won’t have to be embarassed about what I sound like. Although I’ll definitely have to be embarrased if I’m ever again terrified of my own hand laying on my face… ^^;

I finished Castlevania: Symphony of the Night.

It was an amusing diversion, but not much else. And that’s coming from a Castlevania fan.

First off, SotN is *not*, I repeat *not*, a role-playing game. I’m getting sick of seeing all the recent Castlevanias refered to as RPGs. Yes, you get experience points for killing monsters and better stats by levelling up, but that *does not* make it an RPG. You can, in fact, have role-playing games that don’t have exp or levels at all. Game mechanics don’t determine if a game is a role-playing game, whether or not you *role-play* determines that. And SotN had no more role-playing than does Doom. The same goes for things like Final Fantasy, I might note. *Not* role-playing games at all. Just videos surrounded by puzzles and fights.

Anyways, so far as the actual game goes, my biggest problem with SotN was the difficulty, or lack there-of. I died a grand total of three times. The first was when I was goofing around and expected to die. The second was an honest shock, but mostly because I had gotten so careless by the easiness that when a real problem rose up before me I didn’t take it seriously. The third time was right after the second time, by extremely easy monsters, and I think was just still in shock for having actually died just before.

The ease came from three main problems. First, the equipment that was available, even if not what the “average” player would obtain, was far too powerful. I got some armor early on that I didn’t replace until almost the end of the game (it was a random drop from a monster) and a sword I bought from the library which I carried for about half of the game for a mere $4,000. The equipment was too good and make most of the monsters and even the bosses incredibly easy; I took 1 point of damage from most boss attacks and could kill most “tough” monsters in one to three hits.

The second source of extreme ease was how monsters could be on screen yet not attack, even if you attacked them. I killed a number of the harder monsters near the end of the game by getting them on screen at the edge and hitting them repeatedly with throwing knives. They just sat there and took it until they died.

The final source of extreme ease was the final gas form upgrade. You are 100% invulnerable in gas form. The final form let’s you cuase damage while being in gas form. At that stage of the game, you have enough magic to stay in gas form for a pretty damn long time. Seeing the problem yet? I was able to kill two bosses by simply turning to gas and sitting on them until they died. Thankfully the last boss was immune to that tactic and I had to actually fight him.

The hardest parts of the game were a few boss fights (the giant robot thing being one, because avoiding some of his attacks with gas form is next to impossible, I couldn’t stay in gas form long enough at some points, and he took so many freaking hits to kill it was sic) and a couple monsters (like the strong witches which I couldn’t figure out how to even hurt without using the edge-of-screen trick).

I was also kind of disappointed with the inverted castle portion of the game. That doubled the number of rooms in the game, but didn’t anywhere near to double its length, because the inverted castle had no puzzles or much travelling required. The first castle took about 8 or 9 hours, and my total play time after exploring almost the entire game (I’m at about 180%, not the complete 200%) is only 12 hours.

Over-all, I had fun. I just wish it had been more challenging more often, and that the actual challenges presented hadn’t been of the “you just take an ass-whiping and try to survive it long enough” variety. Castlevania has always been about figuring out the enemy’s patterns and working around and against them. Most of the monsters in SotN had such patterns, but I could kill them before they even got a chance to attack or their patterns were just so easy to avoid as to be pointless.

Playing this game has gotten me to thinking, as playing any game always does, what my perfect Castlevania would be like. This is even open to an Open Source implementation I think, since the required game engine would be *relatively* simple and the artwork shouldn’t be *too* complex. First, it would be the same format game as SotN, Aria of Sorrow, Harmony of Dissonance, Circle of the Moon, etc. Side-scrolling platformer. I’d prefer to use a 3D rendering instead of bitmaps, only because it would make some special effects and animations a lot cooler.

I’d take a combat format similar to SotN or AoS where you have a lot more control and responsiveness out of the character. CotM and Bloodlines had the classic stiff controls which aren’t that fun to play by, in my opinion. Offer a variety of weapon types including the vampire killer whip, swords, axes, bows, muskets and pistols, etc. each with their own advantages and disadvantages against various enemies. i.e., firearms might be great against living opponents, but they’re useless against undead that have no vital organs to damage. The vampire killer might rock against undead (vampires specifically) but be weak against everything else. Swords would be strong against everything that has flesh. Axes might be good against everything except that they’re very slow and hard to use.

I liked in principle how magic worked in SotN, although I found it a bit hard to use. I think that had more to do with the PS2 controller, however. The directional pad was just a pain to get to do diagonal movements with. Had I been able to use the analog stick it might have been easier, or had I used a controller with a different directional pad more like the Nintendo’s (I’ve never used a PS1 so I don’t know what its controller is like) it may have been a lot easier. What I’d personally like to see if for one of the left shoulder buttons to be a “cast” button. When you hold that, the character goes into a casting stance, in which the weapon/shield is at rest and a free hand is raised. You then need to do a combination on the control pad to charge the spell; as you press a direction the character’s hand would gesture as if casting, as so long as you are doing a correct spell pattern you’d see energy charge up. Once the spell pattern is entered, release the cast button to release the spell. The 3D-rendered game will make things like the gesturing a lot easier rather than using pre-rendered/drawn bitmaps, I think, especially in light of one of the ideas below.

I loved the shape changing in SotN, and would like to keep that. It depends on who the main character is though, of course. A vampire character might have the wolf, bat, and mist forms, but a vampire hunter certainly wouldn’t.

I’d absolutely love to see areas outside of the castle. I don’t think that it would work *too* well in a 2D-style game, and would work a lot better in some more like Lament of Innocence or Castlevania 64, but it’s still doable. (I loved LoI, so I’m not opposed to a real 3D Castlevania, I just feel that the 2D entries are more appropriate to Castlevania’s style.) A town, a graveyard, an old forest, and the castle would make a good set of game areas, I think.

What I’d really like to see is a bigger choice of characters. Only two Castlevania games that I know of gave you a real choice of characters, other than Castlevania 3 which was slightly different. One of the N64 entries gave you a choice between the whip-wielding hunter and a little gypsy girl, and Bloodlines (I think) gave you a choice between the whip-wielder and a spear-using warrior. I’d like to see a Belmont as a choice, a vampire (either Alucard or someone else), and two more choices… perhaps a mage-type and a rogue-type, for example. Something very reminiscent of Castlevania 3. (Heck, perhaps a remake of that very game.)

Each of those characters should see a relatively different game. I’d like to see them start in different areas of the game world (dependent on there being areas outside of the castle). I’d like to have some puzzles changes depending on which character you have, and some areas only being accessible to one character or another. The vast majority of the content will be the same for each character, but the play style should still change enough to make the game entertaining if replayed. Each character should have a unique story. All characters should be in every run of the game; you just only get to play one each time through. If you play the Belmont, you might run into the mage and Alucard, interact with them somehow, perhaps even fight one or both them as bosses at some stage (with good compelling reason in the story), and so on.

Finally, I’d like to see some real RPG elements in the game. This is especially plausable if there is a town and/or multiple characters. The best way to bring forth RPG-ness is to let the player have choices in conversation instead of having them be all pre-scripted. Maybe the vampire hunter trusts Alucard, maybe he is indifferent to Alucard, maybe he wants to destroy Alucard… that should be up to the player, and there should be consequences for those choices.

All in all, I don’t think it would be that complex. The artwork and music wouldn’t be easy to create, especially not at an acceptable quality, but the game system in general wouldn’t be much work. Then, neither would that Fire Emblem style game. Too many ideas, too little time. ::sigh::