The Answer is Dropbox

I have multiple machines that I develop on.

When doing C# dev, I can use SVN and google code or assembla and keep things synchronized pretty well.

For Java dev, I have not had as much success.

For one thing, eclipse has a large number of frivolous files that I just don’t need checked in.

Also, I tend to leave out the bin directory when I’m checking in to SVN.

This apparently confuses eclipse.

Yes, I tried the svn plugin.

Hated it.

So, the answer is Dropbox for Java projects.

However, the way I install it is not the standard way.

The standard installation in Windows puts the folder under C:\Users\USERNAME\Dropbox

Not all of my machines have the same user.

So I put it in a custom location instead.


This way all of my classpath and other garbage stays consistent between the machines I develop on.

Also, I’ve gotten more organized with how my Dropbox folder is organized.

I have a Libs folder with subfolders for the various external dependencies that I have, like lwjgl, slick, zxing.

I have a Projects folder with subfolders for the various workspaces. I similarly split workspaces by broad category.

Sigh. Getting there…


Island Interloper

Finally winding down with the end of spring/beginning of summer activities, and I got a chance today to work on something fun for a change. That something is a moderately ugly but at least semi-functional Island Interloper. While still in a rather rough state (and the “deleteme” folder is a guarantee of non-permanent placement), one can navigate the world, dock, trade (in food only right now, the margins are slim), and sail the ocean.

This particular incarnation of Island Interloper dates back to October of 2009 (at least, that’s what the Assembla SVN changelog tells me).  I remember at the time I was working on a C# command line version of Interloper, and decided that the unwieldiness of the console interface was just too much, and wouldn’t it just be so much easier with a GUI straight away, which will eventually always lead me to making something in JavaScript.

Speaking of SVN…. I was doing a search today for a Mac SVN client (with a nice GUI… something equivalent of Tortoise SVN for windows). While I found SmartSVN, as well as a number of others, I have not found one that is free. It looks like I may need to learn to use the command line in about 31 days, when the trial elapses. Applications like Island Interloper don’t justify the cost of paying for an SVN client that will only work on 1 of the 4 machines I develop with.  Plus it is a good thing to know the command line syntax for SVN, I just know it.

Speaking as well of JavaScript. After using NotePad++ as my IDE (really just a “DE” – no “Integrated” to speak of), the rough equivalent of which on the Mac is Text Wrangler(which is still a fine tool), I have decided to move to Aptana Studio, although at the moment, I’m using it more like NotePad++ and less like how it is intended.  Over time, I’ll gradually shift over to using more of the built-in functionality. Works the same on both PC and Mac, so I can switch-hit my development on both.  Plus I have WAMP on my windows boxes, and MAMP on my Mac, I’ve got equivalent environments.

Speaking of switch-hitting. In using the Mac, at first I was somewhat hobbled by a couple of things. the first was Windows key (I use a Windows keyboard on my Mac) was basically like the Ctrl in windows.  Switching back and forth caused a number of typing errors and task menus popping up and other bizarre things that generally made me less productive. Fortunately, the Mac gives me a way to change it to more closely match my Windows layout. The second major item was the Home/End situation. I could not get used to Ctrl + arrow to replicate the Windows functionality of Home and End. Fortunately, the Mac allows me to change those around as well. There is a global setting, and from time to time I have to switch the functionality within a particular program. I feel this is rather accommodating on the part of the Mac, really. I know that there are a number of Mac fundamentalists who sneer at those of us who remap these keys from the “one true way” that they should be, but hey… I work at a job where I develop for PC all week. Using a Mac earns me nothing at the moment.


Considering a Move to Google Code

I’m starting to look into a new home for HamQuest, and my other projects, which are currently sitting on assembla.

I’ve considered sourceforge, but I’m also been thinking about giving google code a try.  Either one has an open source requirement, which assembla does not. Of course, on assembla, the free hosting puts the code out there for any who wish to do so to acquire it.

So, decision time. Go the extra little bit and make HamQuest open source? It effectively is right now anyway. How would this affect the XNA port and potential XBox Live submission? Basically all that the GPL says I have to do is give access to the source code of something upon request.

Chances are, this is the route it’ll take. Its the more roguelike thing to do, anyway.

So the decision comes down to sourceforge or google code. I imagine google code will be quieter, but sourceforge is more mature. Dunno. I’ll keep you posted.


Assembla Message Board

It looks like the messages feature will work for a public way to submit bugs on HamQuest, so I opened it up:



One of the reasons I have been working in C# is to make stuff that works on a PC desktop, as well as on the web via silverlight, and even the XBox360 through XNA.

So, I set up once again for silverlight development, into which I have never really had opportunity to foray very far.

As usual, I go with the scrolly block demo for a jetlag game, which I have HERE.


Assembla Does It Almost Right

I like assembla. All of the stuff I’m currently working on is housed there in a public space.

The other day, I noticed in the Security page that I could set individual permissions for various types of user for different activities.

Mainly, I was interested in allowing public access to adding tickets. Yes, I know that stuff would wind up being spam, but there are certainly good things that can come from getting bug reports from people without requiring that they have an assembla account.

But the permission levels are view and edit. So, while I’m probably going to see what a non-logged in person can do, if they can indeed edit tickets, then this is no good, as griefers can come in and destroy my tickets.

There is also the possibility of using the messages tab for something like this, and I can generate tickets myself from there.

Anyway, assembla almost has a complete set of free tools that I like. Yes, I had considered sourceforge. I decided against it.


Untangling the Knot

First, HamQuest is now in an assembla space:


Second, there has been a lot of refactoring in the HamQuest code base.

I’m finally tackling the “get the creatures into xml” task, and it is proving to be very challenging, and the reason it is challenging is because of the corner I painted myself into with how the creature that represents the player is represented in code.

Slowly but surely I’m starting to unravel the issue, but not without pain, and I’m surprised the thing still actually works after what I just did.

A creature on a map is represented in code by a Creature object.

A Creature object holds the state of the creature (mostly the wounded state), and an index into a creature table.

The creature table consists of two types of object: CreatureDescriptor and a PlayerDescriptor, which derives from CreatureDescriptor.

A CreatureDescriptor is just that: a description of the general type of creature.

A PlayerDescriptor is more than that: it also contains the current state of the player.

The intent was noble: make players and creatures use the same rules for the most part, and only differ when they actually differ in behavior.

In a CreatureDescriptor, the attack value is static. A goblin always has an attack value of 2 no matter what, and nothing will change it ever.

In the PlayerDescriptor, the attack value depends on the weapon equipped by the player.

Now that I’m moving both types of descriptor into the “property bag” model that I put the Items into, I’m using a generic function to grab out the values, but the property bag knows nothing of the values it holds… it just holds them.

So, I “cleverly” wrapped a value into a new “StatisticHolder” class, so that the same looking call can get both the CreatureDescriptor attack value in its own static way, and will get the dynamic value from PlayerDescriptor.

So now CreatureDescriptor is completely empty, and ready for moving to XML, and PlayerDescriptor is not.

Of course, I’m not entirely sure that there is a need to put the player descriptor into xml as a whole.  It may be good enough to put some sort of “base statistics” for the player, and have the player descriptor copy from them, and simply add the PlayerDescriptor to the end of the Creature List, but load the others from xml as originally planned.

In any case, one step closer to the goal, along with the change of almost all enums into static classes with const strings, which may seem crazy and untypesafe (and it is!) but with the mind I have for extensibility of the project, it’ll make sense in the end.

In any case, you can check out the code at assembla, if you want.  Try not to point and laugh.


Busy Week

This was a busy week for me, meaning I didn’t get a lot of time to work on my “extra stuff”.

I can certainly say, however, that the Pipes! Widget is coming along nicely.  I’m not certain when it will be complete, but I will say that everybody will be in for a special treat.

Also, I need to mention a really great place called Assembla.com, which is a collaborative environment, but allows for “closed” projects and supports agile process.