Gothic 3
Submitted by struppi on Mon, 2006-11-13 09:39. GamesYesterday I downloaded the demo version of Gothic 3. It first crashed with an error message about a missing DLL, and I didn't really know what dependency was missing. As a first try I installed the latest version of DirectX, and then the game started. My first impression is: Amazing. The game starts with a battle against some Orks in a small village, where you better learn quickly how to control you character - which is quite simple. The melee combat is almost as if you're playing a first person shooter, for example like Jedi Knight III.
In the first half hour of the game you learn some things about the war against the Orks, why the Humans have lost it and where you are at the moment. You get some simple quests (like "Bring $ITEM to $PERSON" or "Fight $ENEMY which endangers $ALLY") and you are introduced to the rebels, for which you can do some of the quests.
The graphics is pretty detailed for objects which are near the player, but on the other hand you sometimes have a really wide field of view (for example when you are standing on a hill). For me, this game is definitely worth buying.
Looking for IT jobs? Find them at The Hidden Network.
My farewell from apache harmony
Submitted by struppi on Thu, 2006-11-09 08:14. HarmonyI am quite busy with my company at the moment I don't have much time to work on apache harmony, and so I wrote Geir Magnussen Jr. that I can't help as a committer anymore. I received a really nice email as a reply, and he wrote that they'll make me a "committer emeritus". So my active time at Apache Harmony is over now, but of course I will stay in touch with this great project.
Iceman
Submitted by struppi on Wed, 2006-11-08 11:10. GeneralManu reminded me that I once said that I'll never work with databases and that I'd quit and become an iceman instead if I had to... Unfortunately I can't quit since I'm not employed anywhere, so I'm stuck with the databases ;) (for those who still don't know, I have a company together with Rene Pirringer: ciqua Pirringer & Tanzer OEG)
On a side note: If you are looking for a tech job be sure to browse the jobs at The Hidden Network
Object Relational Mapping performance (iBatis)
Submitted by struppi on Sun, 2006-11-05 15:03. RDBMSI had some performance problems with the data access code in one of my projects recently. In this particular case, I have to process all datasets which fulfill a certain criteria, and thats just about 550.000 data sets.
My first implementation used the method queryForPaginatedList, and here we had the problem that the query became slower every time we called nextPage() on the list. I looked into the implementation of PaginateDataList of iBatis and found out that iBATIS executes the query again each time nextPage() is called and then skips the first N results by calling ResultSet.absolute. Some database folks told me that this is not only slow but really dangerous, because the ordering of the results is not guaranteed, i.e. it may change when the statement is executed again.
My first try to improve the performance was to use SqlMapClient.queryForList instead, because that would have meant no major re-writes of my code. Unfortunately this is slow too and needs lots of memory because iBATIS has to create the list of all entries before I can process them.
Now I re-wrote the application to use JDBC directly to execute the query, and the performance looks good so far.
Motorola creates open source J2ME
Submitted by struppi on Thu, 2006-11-02 16:04. HarmonyThis article on zdnet is about plans by Motorola to create an open-source version of the Java Micro Edition under the terms and conditions of the Apache License. It also looks like this project could be donated to the apache software foundation - from the article:
VandenBrink said Motorola's Java ME work "is a natural evolution of Apache's Harmony project."
but this could also mean that this J2ME project is based on Apache Harmony but hosted somewhere else.
The Hidden Network - Post your job
Submitted by struppi on Wed, 2006-10-18 06:42. GeneralThe Hidden Network is searching for employers who submit job listings to the hidden network. At the moment, you even get a discount for the listings:
To help get things moving along even further, we’ve discounted listings to $199 each. That’s less than half of what Dice.com charges and even beats most local newspaper ads.
You can post your job listing using this link which sets me as the referrer - that means I'd get some money too. Of course you can post your job listings directly at The Hidden Network too.
Why am I still surprised?
Submitted by struppi on Tue, 2006-10-17 16:04. RDBMSWho thought it was so difficult to import data from one Oracle database to another one? I first tried to use squirrel to create the data script, but i got the following error message:

Yea, nice. I just created the sql script with the same program with which I am executing it now. I dumped the data from an Oracle database, and I am inserting it into one.
I thought that might be a problem of squirrel, since the date fromat it creates is one that Oracle does not understand, so I downloaded SQL Developer - Directly from Oracle. Guess what:

The problem here is that SQL Developer creates the following code to convert the time stamps:
to_timestamp('13-OCT-06 06.15.40.442000000 PM GMT+00:00','DD-MON-RR HH.MI.SSXFF AM')
but that should be:
to_timestamp('13-OCT-06 06.15.40.442000000 PM','DD-MON-RR HH.MI.SSXFF AM')i-llustrator
Submitted by struppi on Tue, 2006-10-17 10:05. GeneralManu has posted some cool screen shots of "i-llustrator", the file manager she currently develops for her diploma thesis. The spheres are directories, the cubes are files. The size of the objects reflects the file size. She also has some concept art online - the current implementation is "soaring bubbles".
The Hidden Network
Submitted by struppi on Sun, 2006-10-15 09:02. GeneralI now run the job postings of The Hidden Network which is a new job board from Alex Papadimoulis - yes, this Alex Papadimoulis. Unless a typical job board, the job postings there are displayed on developer blogs as advertisments. The really interesting feature of the hidden network is that job postings from newly signed up employers are reviewed to ensure that they are not "WTF?!?" jobs. For me, the hidden network looks really promising and I hope it will be a success.
Object Relational Mapping - How to not do it
Submitted by struppi on Thu, 2006-10-12 09:12. RDBMSI recently came across a performance problem in a system which was caused by how they use ORM in this system. I had to write a simple application which gets all items or a certain type using their java API. The code looks like that (that's not the actual code, it only shows the principle):
List- items = itemManager.getAllItems();
Every item has one or more objects of type "A", and there is a "main A" which is the newest "A" object which belongs to the item. The item has also one or more objects of type "B", and I neede one of them (any one of them, so I took the first). The "A" objects for the item can only be accessed over the item manager, the "B" objects can be accessed as a property of "Item". Both include a database round-trip - getMainA by design, getAllBs because of lazy loading.
for(Item item : items) {
A a = itemManager.getMainAForItem(item);
B b = item.getAllBs().get(0);
}
This means we have 2 DB round-trips per item access, and this caused some serious performance problems in my application. Because of that I now don't use the java services, I select the Items and all dependent data directly from the DB. The query is a little bit tricky (at least for me, since I am not a DB expert) because you need the newest A and any B (but only one) for every item. But the following query does the trick, and now I have only one DB round-trip for all items because I can select all items at the same time:
select ...
from
item i
left outer join item_to_a ia on ...
left outer join a on ...
... the same for the relation to b
where
not exists
(select '1' from a a1, item_to_a ia1 where ia1.id=i.id and a1.id=ia1.id and a1.id<>a.id and a1.date>a.date)
and not exists
... something similar for the Bs
BTW: The problem with the original java API is not that they use ORM after all - I use ORM with iBatis to map the SQL statement above to a java bean too. The problem is how it was used. The API was simply not designed to process all items in a loop.





