Google Analytics

Tuesday, September 27, 2005

How to get Java RMI going on Mac OS X and Linux

For a subject I'm doing at uni I need to make heavy use of Java RMI. I had a lot of problems getting it running, even when following the simplest tutorials so I thought I would write down how I eventually got it running.

This assumes you're running Java 1.5, which is important as there were significant changes to Java RMI between 1.4 and 1.5.

If you don't have Java 1.5 and you're running OS X 10.4 (Tiger), here's a brief run down on how to get it going:

  • Head over to Apple's Java 1.5 download page and download the DMG.
  • Open the DMG, run the package inside and follow the instructions.
  • While 1.5 is now installed, it has not overwritten the existing 1.4 stuff that comes with OS X 10.4. It also won't be the default. To make it the default you need to change a symlink. Open up Terminal and change the "CurrentJDK" symlink to the 1.5 install in "/System/Library/Frameworks/JavaVM.framework/Versions". That is:
    cd /System/Library/Frameworks/JavaVM.framework/Versions;
    sudo rm CurrentJDK;
    sudo ln -s 1.5 CurrentJDK;

For Gentoo Linux the 1.5 JDK is actually masked for compatibility reasons. I had no problems unmasking and installing it (i.e. my other Java applications still run OK) but your mileage may vary. Here are the steps:

# echo ">=dev-java/sun-jdk-1.4.99" >> /etc/portage/package.unmask
# emerge sun-jdk
(follow instructions given by the ebuild)
# java-config -S sun-jdk-1.5.0.05
# /usr/sbin/env-update && source /etc/profile
(The '#' shell prompt indicates it's the root user.)

For Ubuntu Linux I followed the instructions at https://wiki.ubuntu.com/RestrictedFormats#java.

Now that the 1.5 JDK is installed, let's get a quick, simple (and yes, probably dirty) example going just to prove to yourself that Java RMI can actually work.

Head over to Sun's "Getting Started Using Java RMI" page. Download the three Java files it lists up the top into a directory. Now it's probably quickest to just show shell actions:

$ cd /where/i/download/the/java/files
$ ls
Client.java  Hello.java  Server.java
$ mkdir classes
$ javac -d classes/ *.java
$ tree
.
|-- Client.java
|-- Hello.java
|-- Server.java
`-- classes
    `-- example
        `-- hello
            |-- Client.class
            |-- Hello.class
            `-- Server.class

3 directories, 6 files
$ cd classes/

Now at this point, bring up three terminals. We need to run the RMI registry in one, the object server in another and an object client.
$ rmiregistry

It is of utmost importance that this command is run in the same directory the package is in, (classes/ in our case). This problem had me confuzzled for hours and hours, as the server would just return vague "class not found" errors.

Now fire up the server in another shell.
$ java example.hello.Server
Server ready

Finally, run the client in its own shell.
$ java example.hello.Client
response: Hello, world!

Now wipe your brow and go and get some pizza ;)

Some things to note: Only once the RMI registry has been started can the server run (as it will attempt to register an object with it). Similarly, this example code doesn't check whether the object has already been registered with it, so if you try and run the server a second time without restarting the RMI registry it will produce an error.

Monday, September 26, 2005

Windows: window focus changing with mouse over

I don't normally use Windows, so it's rare for me to post tips on it. However, a friend of mine figured out a way to make my Windows experience a bit more like my Linux experience (well, the way I have it set up anyway).

Rather than clicking a window to bring it into focus, you can hack the registry to have a the position of the mouse cursor change the focus of a window. That is, the window your mouse cursor is hovering over will become the one in focus.

I'll let my friend explain how to do it:

19:19 <@wabz> wohooo
19:19 <@wabz> windows has the feature, its just not in control panel
19:20 <@wabz> if you want to do it, add 0x0001 to userpreferencesmask in hkcu\control panel\desktop

So if your UserPreferencesMask is b0 32 05 80 just change it to b1 32 05 80. If you don't much like registry editing, you can download the TweakUI powertoy and enable the "Activation follows mouse (X-Mouse)" option.

How to waste time in one easy step

I came across a problem yesterday while modifying a Joomla! template. The template I was making was kind of a hybrid of two different ones. One of them started like so:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


That is, the XML declaration followed by the doctype. The other template began:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?xml version="1.0" encoding="iso-8859-1"?>


So the doctype and XML declaration were switched. Each template then proceeded to make heavy use of CSS and a mix of <div>'s and <table>'s in a complex layout.

Once I had finished the new hybrid template I then encountered every web developers worst (yet most common) nightmare. The template looked fine in Firefox, Opera and other sane browsers but not in ye olde Internet Explorer. The anomaly it caused is hard to describe. It was a sort of spilling in the rightmost <div> column.

To cut a long story short, I spent hours trying to fix the template and only after I had gone through every piece of the HTML body and CSS did I realised that all that was needed was to switch the doctype and XML declaration so that the XML declaration came first! I had used the template where it came second by chance (where it had no adverse effect).

Back when I started web design in the mid->late 90s Internet Explorer 4 had a much more complete CSS implementation than Netscape 4, and was by far a much more enjoyable browser to make sites for. These days the exact opposite is true, and IE is an absolute headache. Any IE user should do themselves a favour and download Mozilla Firefox right away!

Tuesday, September 20, 2005

Duh.

Some people think I'm smart (although I vehemently disagree, and will often volunteer evidence to the contrary). Having been at uni for a while has obviously put me amongst (actual) smart people. I have been thinking about what things make someone smart. Recently I have liked the idea that someone's intelligence is purely a measure of their ability to focus on a problem. More recently I have been thinking that in addition to focus (what is 'focus' exactly anyway?) it may also be the amount of distinct chunks you can work with in your mind at the same time. After all, if you can only focus on one single chunk you won't get very far.

I've noticed that smart people often tend to be perfectionists. Perhaps not perfectionistic about everything they do, but certainly with at least a handful of things. For example, I have a friend who is an audiophile. At this very moment he is meticulously sorting and annotating the metadata of his outrageously large music collection. He has a keen interest in sound compression algorithms, and will sometimes even use a lossless algorithm to encode his music with.

Like me, he also is very careful about his spelling and can never knowingly leave a spelling/grammar mistake in a piece of writing, even when it's in short, informal communications like IRC or email. Another friend I made back in first year (who was much smarter than I) put it quite succinctly when he said "I just hate not knowing how to do things" (this was in reference to studying for an exam for a university subject).

I hypothesise that perfectionism is actually a notable factor in intelligence (or, at least, being smart). A perfectionist does not like leaving a job half-done. If something is taught to them that they do not fully understand, their perfectionist tendencies will drive them to try and complete the puzzle -- just for the sake of completeness.

I think this tendency/attitude has its disadvantages though. Firstly there is the possibility of wasting time on useless things (such as correcting a spelling mistake in an instant message sent to a friend who could understand the original message easily anyway).

Also, since a perfectionist has a desire to do a complete, whole-hearted job of a task, there may eventually be less of a desire to take on certain large tasks. That is, there is an attitude of "I don't even want to start this project because I know that once I've started it will take a lot (possibly an indeterminable amount) of time to finish it to the standard I would like". Finishing it to a lesser standard is not an option! I have found this happen in a few projects I've needed to do, and I see some of my friends suffer under it too. I think this is at least part of the attitude of procrastination rampant among uni students and postgrad students in particular.

Sometimes the scenario works out to be that the only way to stop the project from taking over your life for months is to do no work on it until the deadline is in two weeks. Then the project has only occupied two weeks of your time, and the excuse that you weren't able to do it to the best of your ability is due to 'external factors' outside your control (namely the deadline).

Finally, I think it can also lead to being overworked, leaving the perfectionist burnt-out and unmotivated. This could possibly spell the end of a person's perfectionist attitude in that particular area (such as studying at university).

Perfectionism isn't like Force-sensitivity -- it comes in varying degrees. Perhaps being *really* smart is knowing when to perfecct something further or when to just let it go.

Monday, September 19, 2005

Reason #924 Night Elf Priests Are In Trouble

One of the things I enjoy about World of Warcraft is that the game is constantly being tweaked and improved (well, usually the changes they make are improvements).

My main character in the game is of the priest class, more of a healer than a damage-doer. Along with choosing a class, you can also choose what race your character is. The race I chose was Night Elf.

Now, all priests in the game have the same spells at their disposal (more or less). One exception to this are two spells called "racial spells". For example, a Human priest has the two racial spells called Feedback and Desperate Prayer. A Night Elf priest does not have these spells, but instead has Starshards and Elune's Grace.

Just before I get to the point of this post, let me explain one more thing. In order for Blizzard (the makers of the game) to try and achieve a good balance between players they have forums where Blizzard representatives listen to suggestions from players. There are some designated Blizzard people that are in charge of 'looking after' certain classes. Their job is to play the character class in many races, talent configurations, and situations -- this knowing the class inside-and-out. Unfortunately for priests, our guy is Eyonix.

Eyonix is renowned for ignoring the priest class, and we have been forced to sit back and watch our abilities grow stale compared with the improvements being brought in to other classes. As priests aren't primarily damage-doers it is probably harder to tell that we're falling behind, but anyone who actually plays a priest regularly can surely tell.

In addition, Night Elf priests have an even harder job than priests in general because their racial spells are very, very poor in comparison with those of all other races. Elune's Grace in particular is virtually useless. Priests have been petitioning for a very long time to have it replaced or modified in such a way as to make it useful in at least some situations.

This feeling was compounded for me today after reading this thread in the official forums. For some reason threads don't seem to last very long there so I will reproduce the relevant bits:

Player: Does anyone else think [Elune's Grace] should be fixed?

Eyonix: Admittedly, I've not used Elune's Grace much at all, as the ranged damage it prevents is seemingly less significant when compared to what my Renew spell or Healing Wave will restore - and with a worse mana to health efficiency ratio. I will try and test the ability out in more situations where it could be taken advantage of, and perhaps ask the class designers their particular thoughts on the ability.

(Emphasis added by me.)

OK, so this sounds great. Maybe Eyonix is actually going to do something that benefits priests for a change. Wait just a second. Healing Wave? I'm an experienced priest yet I don't recognise this spell. Oh! I know why! Healing Wave is a shaman spell!!

If our representative cannot even remember the most basic priest spell (called, unsurprisingly, Heal) what chance do we have?

Thursday, September 01, 2005

Macquarie University Linux Seminar

I'm organising a Linux seminar through the Macquarie IT Society. You can find the details in the relevant blog post and the poster I gimpped up (~150KiB).

We also got a mention in the news! Very cool!

A big thanks to Pia, Jeff and the MITS guys for helping out! Hopefully things will go smoothly and we'll get a decent turn-out.