Older blog entries for pipeman (starting at number 32)

java reflection experiments

So there I was, sitting on a train bound home, and feeling creative. I powered up my laptop, switched to Emacs and began hacking away - just to realize that I have no documentation on available on the computer. At all. (Two years ago, I would've used my fancy bluetooth phone and surfed to the nearest Javadoc site using GPRS, but I tend to lose all my cool gadgets so no more mobile Internet for me.)

What to do, when you feel like being productive but still lack the oh-so-vital API reference? I don't know all the methods of the javax.imageio by heart. I don't remember all methods in the classes of package javax.servlet.http, even though I've hammered them over and over hundreds of times.

For some reason though, I still remember some basics of the Reflection API. One reason being, of course, that the basic reflection API is very inituitive and straight-forward. There's the basic Class.forName(), and Class' getMethods() and getFields(), Method's getReturnType(), and so on. So I figured I could write a simple JSP to list the methods and fields of the classes I wanted to use. So that I did. Eventually, I reflected the Reflection API to see how I could retreive information about the classes and interfaces. Later on, I even used reflection to dynamically find and invoke the reflection getters to be able to retreive static values of static class fields.

Of course, I ended up spending the entire train trip doing pointless wheel-invention - a sort of a poor man's reflective Javadoc without the actual documentation - instead of actual billable work. But hey, it was a fun trip to reflection land, and yet another bulky (and buggy!) JSP-hack to add to the list. I never quite finished it, and some things I just couldn't figure out without access to the API documentation (such as how to properly interpret the modifier bits). And now, with access to all the documentation I can handle, the thrill just isn't there anymore. :-)

Anyway, see the result here (view source).

The end of an era (probably maybe)

The world's oldest still running newspaper, Post- och inrikes tidningar [swe] (PoIT), which is the Swedish official announcement body, may be shut down and replaced with digital publishing on the web. It has been published for 360 years, starting at 1645 under the rule of Queen Kristina as they supposedly needed a government voice to tackle rumour problems and present an official Swedish view on national and international events.

In 1791, King Gustav III appoints the publishing rights for PoIT to The Swedish Academy, founded by him five years earlier to nurture the Swedish language and literature. The Swedish Academy is still, 214 years later, the official publisher of the paper. Many different kinds of public announcements, such as information about bankruptcies, are required by Swedish law [swe] to be advertised in Post- och inrikes tidningar. It is also regulated in law that the advertiser much pay an advertising fee. The by far largest PoIT advertiser is the Swedish Patent and Registration Office (PRV), which alone contributes about SEK 20 million (about USD 2.9 million) annually in advertising fees to the Swedish Academy. The surplus is used to fund the creation of the very ambitious project SAOB [swe](Svenska Akademiens Ordbok or Swedish Academy Word Book) (website [swe]), an attempt to document the usage of the Swedish language since 1521 and onward. That is, they practically document the meaning of every word used in society, similar to The Oxford English Dictionary, in contrast to an ordinary dictionary, which would not bother documenting words that hasn't been in use for several hundred years.

In 2001, the Riksdag commissioned the administration [swe] to streamline the somewhat bloated and expensive announcement body and suggest a change in law so that PRV could publish their own announcement on the Internet instead of in PoIT. The paper currently has an edition of a couple of thousand copies. Following this, the magazine Ny Teknik now tells us [swe] that it is being suggested that the Swedish Academy should transfer the publishing rights of PoIT to The Swedish Companies Registration Office (Bolagsverket) which would then publish the newspaper on the Internet, updated daily. In return, the Swedish Academy will receive a SEK 20 million per year, to compensate for the income loss and facilitate the continued funding of the SAOB project.

footnote: links marked with [swe] are web pages in Swedish only

13 Feb 2005 (updated 13 Feb 2005 at 20:33 UTC) »
Wanted: job in Stockholm

I'm going to plug this here, too. I'm a (primarily) Java developer with over seven years of work exeprience, and now I want to move back to Stockholm. As I assume I will be interesting mostly for Swedish employers, I have the details in Swedish here. Also check out my private homepage and Bricole, my current business.

haruspex, thanks for the tip re the HTTP server from the Apache XMLRPC project. It seems to only support serving XMLRPC content out-of-the-box, though, but maybe that could be overriden somewhere. I'll check into it. I prefer using a complete "package" as a base, rather than, for example, making my own classes from example code (hey, I'm pretty certain I could quite easily write my own simple HTTP 1.0 server if need be), because it's nice to have something that is maintained by a third party and can be upgraded by just exchanging a .jar file. For example, I use PircBot for a small IRC bridge I've written, although writing an IRC client enough for my needs probably wouldn't have taken me more than a couple of hours (I've written several before). But this way, not only can I benefit from PircBot upgrades, but others using PircBot can also benefit from any potential bugs that I find and fix.

On quite another note, this is hilarious: Sex Scandal Rocks Wonka Factory.

Small Java Web Server

I'm looking for a Java Web Server that can be easily embedded into applications. Basically, it doesn't need any features, just a doGet() or something that can be overriden with my own stuff, and I just don't want to code the basic HTTP stuff all over again. Most important is size (a jar of < 200 KB is okay, I guess) and memory footprint. Open source, of course. Freshmeat and Sourceforge spits out a million projects, so I'd like to hear if anyone had any preferences.

Anyone have any ideas? Mail me. Thank you!

visualization of a chess AI

I stumbled onto this while actually looking for Java implementations of Bayesian classification. Very cool: Thinking Machine 4.

(via BadMagicNumber)

4 Feb 2005 (updated 4 Feb 2005 at 15:55 UTC) »
Plastics

What's with all those phony plastic cards? During the last seven days, both Financial Times and BusinessWeek has sent me silly plastic card that says "Subscriber Privilege Card" with my name on them, on an attempt to get me to sign a discounted subscription for €50 (BW) or €90 (FT). And in their sell-in letters they call me "Dear Executive" and so on. So I've obviously gotten my postal address onto some stupid snailmail mailing list that has been shared far and wide. That's no surprise; I am registered with on quite a lot of "businessy" places and there are many official records where you can get information about me and my business. But what's hitting me is that I assume FT and BusinessWeek are presumably looking for "execs" that please their advertiser, and they think sending out a silly plastic "privilege card" is going to help? I, for one, know that if there's one thing the average european exec doesn't need, it's more plastics. The black execy FT subscriber card sure does look elite, but so does my Monday Bar membership card, and the height my stack of plastics never used is approaching three inches now.

PieSpy hacking

So I hacked PieSpy to feed it with data from the Lunarstorm community instread of IRC. I wrote a brief description in Swedish about it all. The main story is that I made a big-ass PieSpy social network graph out of guestbook data from Lunarstorm, and the current result can be viewed here, and a friend used Zoomify to throw together a Flash zoomification of the same image, which can be viewed here. Pretty cool. In hacking termes, most of my work went into changing PieSpy to draw a labeled grid onto the image and append an index to the image, containing an alphabetical list of all the nodes with pointers to each node's coordinates on the image. A smaller example can be viewed here. A package with source and required libraries is available here (it's the PieSpy distribution changed to use my own main class instead of the standard IRC bot thing).

welcome, 2005

I hope this year will prove more satisfying than the last.

Not much has been happening lately, as I yesterday came back home after spending five days in Sälen, skiing, drinking glühwein and in general having a darn good time. I learned the beauty of off-pist skiing - getting away from the public pistes and ski lifts and to the untouched, deep snow was really cool.

For my Swedish audience: yesterday, I reluctantly decided to publish all my diary postings from a certain web community here. Reluctantly, because some of these are really personal and may contain information that I might not want to publish publicly on the web - the diaries on the community are only available to registered members, and you can always see who has read your diary, which gives a comforting sense of control when writing about personal things. But I wanted to have somewhere to post the things that aren't of interest to non-swedes and the techie audience of Advogato, and didn't want to end up with three diares/blogthingies. To export all my diaries from the community, I made a small command-line version of my program Nular that uses basic screen-scraping techniques to retreive the data, and hacked a function that allows a user to save all diary entries to a directory. Then, I created a cron job that does this once a day so I can continue posting on the community as usual and all posts will show up on my web page as well (and complemented with a script that I can easily trigger manually when I want to force an update). The program and cron job runs on my coLinux Gentoo installation on my Win2K box at home, and uses rsync to transfer the data my real web server, which in turn contains a simple JSP page that reads the file structure to generate indexes, display the data and so on.

A few days ago, I was experimenting around with compiling static binaries with gcj to see if I could easily distribute programs such as md5i in native form to people who don't have or don't want Java. It turned out that the executable size was somewhere around 4 MB - for a Java program which has a bytecode of a few kilobytes. It would be nice to be able to tell GCJ to only link those classes that are referenced in the code - and perhaps be able to supplement that list if you use dynamic class references in the code. For example, I use the Sun MD5 implementation by invoking MessageDigest.getInstance("MD5"), so the compiler/linker would need a hint as to which classes I actually need as it is not explicitly reference syntactically. But one should be able to easily produce a list of needed classes by running the program and passing -verboce:class to the JVM. For all I know, gcj may already do this, and my small program really depends on over four megabytes of runtime class code. Anyway, another thing I'd like is to be able to suppress the WARNING: could not properly read security provider files when the program is run in machines without a GCJ installation, as in most cases, the standard GNU security provider will work fine.

Merry Christmas & a Happy New Year

Better late than never.

If you are in Sweden, please consider sending an SMS with the text "ASIEN" to 72105. This is a very easy way of contributing 20 SEK to the Red Cross Sweden's aid work in the areas affected by the earthquake and tsunami. Or give to Swedish Médecines Sans Frontieres, even though their donation pages require Internet Explorer. Much help is needed.

23 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!