Thursday, December 25, 2008

Sea Spin: My Latest Java 4K Game

Merry Christmas, and here's my latest Java 4K. This is my 3rd year in the contest, I think. And I've gone back to focusing on trying to make a good game. (Last year was an experiment in shrinking Scala, and it didn't fare so well in judging.)

I've done professional enterprise Java development. These days I help teach Java for my pay. I've also been employed on Java applet development long ago. Been around the various sides of it. I get annoyed some by the politics and some by the lack of agreement of some folks with my own preferences of where Java should go. But every year (at least so far) the Java 4K game contest makes me feel good about Java again. For me, it's the coolest thing in Java. Not that it proves superiority. Just has a sweetness all its own.

Maybe I'd get into a similar mini-HTML game if one came along, but it's Java 4K for me for now.

Thursday, December 18, 2008

What Erlang's got that Java hain't. And vice versa.

I'm toying in Erlang now a bit. Some VM features are specific to their language needs. I won't focus on them here (though tail recursion would still be wonderful). These items seem more fundamental:
  1. Fast context switching.
  2. Update while running.
  3. GC per thread.

All these are related. And what do they all have in common? Is it any surprise that Ericsson has shown an interest in Multi-VM Java? What use cases could possibly exist for MVM? Of course, system-process level is nice for visibility to the OS, but adding the option for light-weight "green" processes for MVM would also be cool.

Side note 1: Java's GC generally is way more advanced than Erlang's, so far as I can tell. Java's also far ahead in some other categories, including raw performance.

Side note 2: Sharing simple data types in messages seems a lot more robust than trying to serialize objects generally.

Wednesday, December 17, 2008

Erlang as a Multi-language VM

Hmm. They don't seem to be fully stable projects, but the idea of compiling languages like JavaScript (see ErlyJs) and MATLAB (see Matlang in the High-performance article here) to the Erlang VM seems like an interesting strategy.

I wonder if we'll see more of this in the future.

Software that Keeps On Ticking

I like the attitude of Erlang, at least as I understand it. You should be able to update software without shutting it down. I guess many dynamic languages have a similar attitude. Software should be able to run for weeks, months, or years on end. That Firefox or Eclipse wants me to restart for updates bothers me.

If Erlang comes from telephony and server perspectives, I think the attitude still matters elsewhere.

I'm into robotics. I think that it should be possible to update robot software components without shutting the software down. I see three main directions: (1) use Erlang or some other such system that won't require restarts, (2) use separate OS processes and IPC so that individual processes can restart without the whole system coming down, or (3) since individual processes are still heavyweight in Java, I think OSGi might work instead, if done right. Erlang seems to claim the lightest weight multithreading of them all, but I don't have experience to know if it's true. I also like the idea of abstracting local vs. remote actors.

Concerning Eclipse, they should build "update while running" into the expectations. If an extension can't be correctly installed, updated, or uninstalled while Eclipse is running then it should be considered broken. However, since it gives me the warning every time, I presume people haven't done a good job, and I just tell it to restart.

Thursday, December 11, 2008

Runtime Optimization (JVM) vs. Haskell

I have been considering learning Haskell seriously. It really is sweet in many ways. And I'm getting tired of Java politics. Maybe just a phase I'm going through.

But in any case, I thought, "Wouldn't it be sweet if purely functional meant that Haskell caches useful tidbits automatically for fast performance?" The answer is that it doesn't, but you can cache (er ... memoize) results manually. The complaint being that caching everything would be expensive for memory.

Well, if someone made a cool VM for Haskell, couldn't it learn the hot spots in code from watching it run, and thereby know more easily what to cache? Maybe HotSpot can't do this particular optimization so easily (Java not being purely functional or anything), but it definitely made me think about the mentality of prior vs JIT/lazy optimization. Hmm, and there's that lazy word again.

Anyway, back to doing statistics and plots in MATLAB.

Monday, December 8, 2008

No Inline Functions for Web Workers?

I have yet to understand why Web Workers seem to support only separate JS files instead of function pointers. Any authoritative info on the subject?

Tuesday, December 2, 2008

Full Screen Goodness on Dell Mini Ubuntu

I just want to say how happy I am to discover that my Dell Mini running Ubuntu makes any window full screen by pressing the Windows button. I just LOVE FULL SCREEN. Hmm. I guess that makes my opinion clear.

Oh, and the solid state drive makes this thing fast.

And overall at this point, my Dell Mini is easily my favorite computer I've ever owned. Even more than my old Amiga 1200. Yep. Seriously.

Disclaimer: I haven't used other netbooks, so I'm not making a comparison here. I also don't know if Ubuntu normally these days makes windows full screen with the Windows key. I just happened to notice it here now.