Subscribe to the RSS Feed

Paradox - a statement or proposition that seems self-contradictory or absurd but in reality expresses a possible truth.

:: BINARY PARADOX ::

Stepping stone to the /dev/null in the sky

JRiver Advanced

LP MUDs – A.K.A. Dan is a giant nerd.

I’ve been involved with the LP MUD community since early 2002. It’s been a wonderful experience for me and really helped me come into my own as a programmer. I’ve met a great collection of people and had a blast overall. I should write an entry about the whole experience another day…

Some back story (No dragons or space men, I promise)

Getting back on topic, through some of my adventures in creating and developing LP MUD’s I’ve come to know the LD MUD Driver rather well. In doing so I’ve identified lots of areas that I feel could be improved, modernized, or otherwise cleaned up.

Through these ideas I was eventually convinced to attempt creating a Java based MUD Driver of my own. I’ve always been interested in having an open source project of my own, and I was learning a lot of interesting Java techniques and frameworks. It seemed like a great idea and so myself and another LP Coder I knew at the time (Kevin Roe) started one. Jriver was born. We hosted it on Sourceforge not knowing anywhere better to use as a hub. We dove into development blindly and came up with some neat stuff. We learned a lot, but never made it anywhere because we had no plan.

After the Jriver project died down I ended up creating Jriver-advanced on my own. I changed the name to be able to easily move to Google Code hosting rather than Sourceforge without creating a lot of confusion. I decided that more of a plan was in order and moved to some newer frameworks and tools I had been learning. Working on the project solo however, I lost steam pretty quick. I wasn’t focused and was spending time working on several large features at once without getting any one thing done.

The fuuuuuture (Still no space men, don’t worry)

With that history out of the way, it’s time to announce I’ve recently been working on the project again. Michael McCaskill has offered to contribute and convinced me that we can do it. In my mind he’s a better Java programmer with more real world experience so I’m excited for the team-up. Learning from the past we’re going to be very strict about maintaining quality of design and code.

We’re in the process of firmly establishing our goals, features and design for a first version. From there we’ll create a rough road-map and start coding. If you’re reading this and are interested in helping, drop me a line. We’re certainly gracious for any help.

I’ve set up a Redmine installation for our project home. It’s a brilliant Ruby on Rails application that supports a wiki, forum, and great project management tools.

Why?

Really, my overall goal for the project is to make MUDing accessible and to promote new and interesting mash-ups with the MUD paradigm. JRiver will be LP inspired, but abstract enough to handle several game types: MUD, MUSH, MOO, Talkie, etc. We’re aiming to be general wherever we can and providing game-specific example lib code to offset the generality.

Telnet is HARD!

I dream of a MUD that is as easy to play as adding a new buddy on Google Talk and playing via an IM window. Let’s face it, telnet is hard and it isn’t getting any less scary. We’re looking at a world of internet users that don’t have any experience with a command line or a big black DOS prompt. Users born and bred on Windows that have never needed to go near it. They might not be 31337 console cowboys but I bet know a lot of them are WoW players. MUDs can be made accessible if we just change our preconceptions.

I’m aiming for XMPP support (Jabber) as well as the classic Telnet. You can’t ditch Telnet completely or you’ll lose the hardcore MUD crowd that is dependent on ZMUD and other MUD clients only able to grok Telnet. At the same time, the goal is to make it easy to add any IO Protocol. Everything from a JTextBox for a single player Swing GUI game to HTTP for a Rich Web Client.

LPC? What in the world is LPC?

When LD was created it was a novel idea to have a VM (The Driver) doing the hard stuff and a more accesible scripting language (LPC) to let people who weren’t C guru’s write a MUD. Unfortunately, LPC and LD MUD aren’t something you’re going to find a lot of people knowing! It’s not a language that is used in academia and it’s certainly not a language that looks good on a CV!

These days VM’s are a dime a dozen. I’m choosing to use the Java Virtual Machine for several reasons:

  1. I’m very good at Java. I’ve spent a lot of time using it in school, and I’ve been paid to use it to work on very large scale enterprise applications.
  2. The JVM is robust, very portable and fast.
  3. The JVM has seen a surge of scripting languages that compile down to Bytecode. Clojure, Groovy, Jython, JRuby. Our driver will support anything that can run on the JVM and interface with Java.
  4. The JVM is open, GPL and free. We won’t be locked in to a specific vendor
  5. Great Libraries. There is a Java library to do anything and everything.

More MUDs would have developers if they were using technologies that are both already well established in academia and industry AND look good on a resume for new coders.

So…

Feel free to poke around on our Redmine installation That’s where most of my talking about Jriver will go. I’ve included this information here as just a hint into the things that occupy my time.

The code itself is hosted on our Google Code page still. At this point it’s mostly old code we need to split into a “example/history” branch. I’ll be moving the Wiki content to Redmine under classic design as well. Moving forward the Google Code page will just be for SVN/Downloads.

- Dan


Deflash Script

Many people are aware of HTTP cookies, generally used to add statefulness to the otherwise stateless HTTP protocol. Great for session tracking, preference persistence, etc. Also great for privacy invasion and general ad tracking. Due to the perceived privacy issues, many users delete their browser cookies frequently.

Unfortunately Adobe Flash contains the seldom publicized ability to create it’s own persistent tracking objects outside of the control of your browser. It isn’t very easy to clear these persistent flash objects, and due to being relatively unknown, marketers are now using them to “respawn” traditional HTTP cookies. I.e. when a site wants to track you it will set an HTTP cookie AND a flash “cookie”. If the page detects later that you have a Flash cookie but no HTTP cookie it will recreate aka “respawn” the HTTP cookie using the Flash data.

read more...

Cracking Local Passwords

For a Network Security Class we were asked to prepare a brief document describing techniques used to crack both Windows LM hashes and Linux Shadow Hashes.

Though covered to death elsewhere I figured I might post it here anyway, just for kicks.

Enjoy!

read more...

Powershell Backup Script

I’ve been playing a bit with Windows Powershell (codenamed Monad). Not a bad piece of software all things considered! Certainly a world better than standard Windows XP cmd.exe.

My problem task was that I needed a basic backup script that I could add as an ‘at’ job for a Windows Server 2003 box at work.

It is a very small time operation so all of our backups are stored on two external harddrives. At the end of each week we swap the currently plugged in drive and cycle it out with the second drive. This way we can have one backup drive stored offsite and in a worst case scenario, we’ve only lost a week of data.

read more...

Data recovery with Foremost

Recently while traveling in Cuba I had the unfortunate luck to have an entire weeks worth of photos inadvertently deleted off of my digital camera’s memory card. These photos were obviously not something I could have recreated and I hadn’t yet been able to copy them off of the card onto the computer. Was all lost? No! By employing some basic computer forensics skills and some Linux kung-fu I was able to recover ALL of the lost photos.

read more...

LPC Ghetto AOP

A problem was recently posed to me: _“If I wanted to selectively block the evaluation of add_action() functions based on
certain criteria known only at run-time, how would I go about it?”_.

After some deliberation the coder in question and I were able to begin forming the idea of a “guardian” function. Drawing on concepts from Aspect Oriented Programming like the idea of “before advice” we decided to try interjecting a function before the real deal that would be able to evaluate whether or not the actual function call would be performed.

read more...

← Previously Recently →