Native code, JNI

Recently I posted on how to incorporate native code in OSGi bundles. Well, some questions surface now and then, particularly "then" nowadays (thanks to the recent posting), regarding the actual native code production.

To start with there is a good tutorial on the subject provided by Sun. Secondly, and probably a bit harder to obtain, is a very good book on the subject: Essential JNI - Java Native Interface, by Rob Gordon (ISBN 0-13-679895-0). It seems to have gone out of print. That is a pity as it is considered one of the best books on the subject. It explains all parts of JNI well, and it has very good examples.

But, how do you get about dealing with native code? What pitfalls are there? Rules of Thumb? Here is a check list for you, hope it is of help when you are about to select the path ahead:

  1. When do I need to employ JNI? Answer: Never!
    Well, in 99,9 % of the cases you are better off not using JNI. I.e. native code does not always execute faster - running Java code in the HotSpot JVM can actually be equally as fast or sometimes even faster! Further; check to see if there is another solution, open source maybe, that does what you need. They might have fixed the interfacing chore for you...

  2. Ok, but you've got some legacy stuff on your hands. Now do you need JNI? Yes, maybe, but there might be other techniques you can employ. Have you checked pipes, shared memory or sockets? Please keep in mind that loading a shared library into a process space might crash the process if some piece of code in the library crashes. You are outside the Java Sandbox, but still within the same process space. The other techniques mentioned have the library execute in a separate process, then you have a problem of checking liveliness instead.

  3. You are about to interface and use COM-components or ActiveX Controls on Windows. Required to learn everything about COM, DCOM, ActiveX, etc? No, not really. Ok, knowledge is no burden, as every abstraction leaks you should at least learn the basics on COM. For the interfacing problem, as mentioned before, somebody else has already taken care of the JNI part you in this case: e.g. the COM - Java Bridge JACOB, and others...

  4. You are still here? Ok, maybe JNI is the solution for you. Are there any pitfalls? Oh yes! There are plenty, in most cases we are talking about writing code in C or C++ here. As some of you already are aware of, it is much easier to create code that will malfunction in C/C++ than Java! Do not get me wrong here; C and C++ are perfectly ok languages too, it just that you have to take more aspects into consideration and be careful of pointers, casts, void*, etc.
    Then, there is loading of the library, on Linux/Unix check your LD_LIBRARY_PATH, om Win32 the PATH variable. That also goes for those libraries your library depends on.

  5. Other considerations:

    • Strings - in Java a String instance is an object, needs to be converted on the native side using the special GetStringUTFChars function. It is released using the ReleaseStringUTFChars whendone with.

    • Exceptions - if calling Java code from the native side, under some circumsances you need to check for possible exceptions thrown, or you might run into trouble.

    • If you are into C++, using the bridge design pattern can be a powerful approach; Java classes are mirrored on the native side implementation in the C++ classes. Have them comminucate through JNI.

Despite what I say (write) in the bullets above I am an advocate of JNI. Every Java assignment I've had has involved some work using JNI - there has been no exceptions so far. JNI is a powerful technology and correctly used it will leverage your project.


Christmas beers and ales sampling

A couple of days ago we had a small gathering to sample some of the beers and ales for this Christmas. We had a good time and there where a number of tasty beers. 13 to be precise (Magnus took notes, so I'm not fully responsible...):

  1. Stone Old Guardian (USA, 11,26%, 70 cl) Full, some bitterness - Nice!

  2. Saint Landelin (France, 6,8%, 75 cl) sweet, artificial flat tase, everybody poured this one in the drain!

  3. Samuel Adams Winter lager (USA, 5,6 %, 35,5 cl) good likable taste, most everything in it, not that full taste, goes good with the food. A favorite!

  4. N'Ice Chouffe (Belgium, 10%, 75 cl) Nice full taste, typical Belgian, maybe a bit of sweetness. Long after-taste.

  5. Token Julefröjd (Sweden, 4,9 %, 50 cl) Strong taste of coffee, sour, no bitterness at all! Is this really beer - disappointment! This brewery usually does much much better.

  6. Jämtlands Julöl (Sweden, 6,5 %, 50 cl) Ok, we're back in business! Precisely right on bitterness and sweeness, well balanced, goes very well with the food on the table. Very nice!

  7. Gouden Carolous Chritmas (Belguim, 10,5 5, 33 cl) Ohhh! this one is really good! Precise balance in bitterneess, sweetness, dryness, etc. Full, nice taste, long full after-taste. Maybe the best ale tonight?

  8. Nøgne Ø God jul (Norway, 8,5%, 50 cl) Some notes of coffee, a litle bit of bitterness, quite good. We like it.

  9. Dugges Rudolf Ren Ale (Sweden, 7%, 50 cl) Chemical, acrid taste. What is this.?.. no, it is no favorite of ours.

  10. Corsendonk Christmas Ale (Belguim, 8,5 %, 25 cl) Nice, not so full as Gouden Caroulus or Chouffe, but as it is slightly "thinner" it probably goes well will the stuff on the Christmans table. Why the weird size (25 cl) of the bottle??

  11. Gulden Draak Vintage (Belguim, 7,5 %, 33 cl) The chock of the evening. Gulden Drrak is a favorite, i.e. the regular Gulden Draak. What this is we don't know. Magnus Baught it while in Belguim. Well, it wont be purchased again, it has a sour acrid vinegar tone, really a disappointment.

  12. Regal Christmas (Belguim, 8,1 %, 33 cl) Nice full taste, a tone of spice. Very very nice!

  13. Gordon Xmas (Belguim, 8,8%, 33 cl) Almost as the previous, slightly different tone, long after-taste.

Ok, how did we rate them? The order after some discussion, we came to the following conclusion:

  1. Gouden Carolous Christmas

  2. Regal Chrsitmas

  3. >Gordon Xmas

  4. Jämtlands Julöl

  5. N'Ice Chouffe

  6. Stone Old Guardian

  7. Nøgne Ø God Jul

  8. Samuel Adams Winter Lager

  9. Corsendonk Christmas Ale

After that there where really none we liked. So we did not grade them... Further, there are of course several good ones we haven't tried yet, e.g. Nils Oscar Julöl and Kalas Julöl, Wisby Julöl, Anchor Christmas Ale, etc.


Bundle-NativeCode in the OSGi manifest

OSGi is a pretty straight forward and quite easy to use technology. As long as you are doing the thing Java programming language. But, what happens when you start to involve other implementations, i.e. native code (most often compiled C/C++ source). On Windows these libraries are known as Dynamic Link Libraries, or DLL for short. Linux and Unix clones are called shared object libraries and has the .so suffix.
What about Mac OS X? Well, there is also so-files, but I've also encountered so called dynlib:s. Anyhow, do not despair, all these are nicely handled by OSGi. I.e. an OSGi framework will happily load these libraries into the JVM process space and thus make them available to whatever Java class that is about to call them. If you are about to produce some native code, check out the tutorial at Sun.

Ok, you have your Java class defining the native methods, generated the .h-file from it and done the mandatory HelloWorld thing on the native side, also got the System.loadLibrary call right and everything. It works all nice and peachy.

So, now what? How to get it to work encapsulated within an OSGi bundle? as you've got all teh basic stuff in place, it is pretty much a walk in the park. Well, all you actually need is to declare your newly created native library in the bundle manifest and also declare which library goes with which operating system. Yes, you can bundle several libraries for various operating systems in the same bundle and the framework load the correct one depending on the declaration in the manifest.

So how does this portion of the manifest look like? Here is a simple example of declaring a DLL (Windows) named "mylib", located in a directory named "lib":

Bundle-NativeCode: lib/mylib.dll ;
osname=Win32 ;

Please note the placement of the semicolons (';'). That is quite important.

But; what if I've got several DLL:s, or libraries, in my project that need to go into the same bundle? Well, that is not a problem. What you need to keep in mind is the placements of the semicolons.

So, expanding the above simple example with two DLL:s (mylib1 and mylib2) for the same platform it will look like this:

Bundle-NativeCode: lib/mylib1.dll ; lib/mylib2.dll ;
osname=Win32 ;

Ok, everything is nice and peachy. Next iteration of the projects adds a whole bunch of requirements, one is regarding the support for yet another platform: Linux. Can I easily add that?
Sure! Produce the necessary native libraries for the new platform, add them into your project and finally - before launching the debugger - add some more lines to the manifest:

Bundle-NativeCode: lib/mylib1.dll ; lib/mylib2.dll ;
osname=Win32 ;
lib/libmylib1.so ; lib/libmylib2.so ;

See the comma (',')? Each "block" is separated by a comma. As you also might have guessed by now is that fact that not only is it possible to qualify on operating system. You can also load different libraries depending on processor architecture, on the same operating system, and operating system version. Further, I haven't discussed another option that is quite powerful; the filter capability. It is also possible to qualify on basically anything, e.g. which windowing system is present and thus load an appropriate library dependent on that.

Maybe I'll discuss how to make use of the filter capability in a future posting. Anyhow, I do recommend that you download and read the OSGi specification from osgi.org, it is one of the best specifications when it comes to readability I've come across. The section on Bundle-NativeCode is very worth studying, it discusses the above and more ...


The history of computer hardware

Reading Wired sometimes render some interesting things; like this one - The history of PC hardware. Fascinating stuff! And, it wasn't that long ago. I actually came across one those early mobile computers, with a detachable keyboard.

Further, I am searching the Internet for articles and pictures on the early versions of the AXE-telephone system, here is another story. I used work with it during the 80:s and 90:s. In the beginning the so called man-machine interface consisted of a number of teletype printer with paper. There could also be VT terminals sometimes. Anybody who could share any knowledge on where to find this stuff?


Shopping at Wal-Mart can be dangerous

You've probably heard the saying "shop until you drop", but being like this!

People are so inclined to consume they care not for others. I've read somewhere, long ago, in a science fiction novel about a society where the rich where those who could afford to live a simple life. While, the poor where forced to consume. At the time I thought the story to be outrageous. But, everyday I see evidence that the author, whoever it is, where quite on spot. That's scary ...

Anybody out there who might know which author? I believe him (yes it's a he) to be one of the more famous American SF novelists.


Want to get somewhere in life?

I am really amazed by how confused people get when I tell about my goal in life. Especially when they start to ask how. And, why I am not financially focused, a great deal of people seems to be aimed at acquiring as much monetary funds as possible. Well, nothing wrong in getting large amounts of money, on the contrary, I wouldn't say no to it.

But, as great many seems to believe they will be happy once they earn their first million, or so. The big new for those folks; there is no happiness in money, it will make you comfortable though.

What you have to do; you have to make up your mind of what you want. I'll repeat that: You have to make a decision of What You Want! Not what somebody else wants you to want, but what You really want. It can be anything, as long as it is important to you; may it be large amounts of money, may it be a new car, a certain position at your company, a relationship, the apartment/house you are looking for, more time on your hands, a trip to somewhere you've always wanted to go, write that book, start painting, writing music, etc.

But, how do I know what I want? If you do not have a clear picture, start to think about, dream about, use you imagination. If you encounter something that really fires you up - well, there you have it! Apparently that is something that stirs your emotions! That is important, it is much easier to set your goal if you feel strongly about it.

Now, when you know what you want - make a decision; when will yo acquire this of our desire? Do not worry about how. It will come you.

If you think about our goal, often, you are sort of re-programming your sub-conscious, i.e. you will both, eventually, consciously and unconsciously work toward your goal. Sounds simple enough? Well, keep in mind that things take time, you will achieve your goal - you have to make many small, and sometimes big, steps every day. The important thing here is to:

1. Make a decision on what you want
2. Once decided, start at once working towards it
3. Each and every day you will achieve something taking you closer to your goal
4. Never ever ever give up! You will run into hurdles, success is measured by how you handle them

... remember, winners learn from mistakes, hurdles, and then moves on. Losers, they just give up as soon as they run into trouble.

P.S. You might ask: Is this somehow related to computers? The answer is: Yes! Very much so! By repeatedly trying out new ways of solving a problem the computer will eventually "give up". We humans as more persistent and smarter than our machines. Well, at least for now ...

P.P.S There is no problem that can withstand the accumulated assault of sustained Thinking!


JavaOne call for papers & Christmas Ales

If you haven't noticed, the JavaOne call for papers opened November 19:th. It closes on December 19:th, so hurry up submitting those great ideas of yours! Myself, and some collegues, has so far come up with a couple. We'll see if the content team likes any of them.

Anyhow; it is during this time of year, the season, when the Christmas Ales show up. Actually, chistmas beers and ales are also released on the 19:th of November. Coincidence ..?..
Went out today and got myself a couple of nice ones, like Corsendonk Christmas Ale (having one while writing this post), Jämtlands Julöl (from northern Sweden - really good!), Tokens Julfröjd (from a microbrewery on Öland) and, of course, N'ice Chouffe - one of the best. Unfortunately the liquor store does not carry Gouden Carolous Chistmas any more, the very best one in my opnion.

While at JavaOne, don't miss Thirsty Bear, brewing their own beers and serving Spanish tapas (!).


Continous Intergration - continous headache?

Recently attended a seminar, a free seminar, on Continuous Integration, or CI for short. It was Informator hosting it and two guys from Objektfabriken who held the actual seminar.

There are a number of good tools to get CI rolling. But is it as easy everybody claims? Tools are good, bu you need a process too and, even more crucial, backing from management. Without it, nothing can really be done in the area of CI. I.e. introducing CI requires such a level of effort (LOE) that you cannot hide it for long before it shows in your time reports, etc.

What is this thing with LOE and CI and process?? Well, you cannot just hook up CruiseControl to your Subversion repository and think you're up and running. There are a number of other aspects to consider; to what degree will engage others in your team? What branching strategy are in use at your organization? Will the introduction of CI imply changes in your organization? ... and are those in this organization ready for a change? Will this change be introduced gradually or are you planning to do it "Big Bang" style? There are of course numerous questions that needs to be addressed before you can start doing the practical stuff. Please keep in mind; every project and organization is unique in their own respects.

Degree of CI: there is a continuous scale, it basically describes the degree of isolation between development efforts. I.e. how much a change affects others in the team. In one end there is basically no isolation - this implies basically no branching strategy and thus a change can affect everybody in the organization. You have developers check-in their changes directly to the main branch in you source repository.

In the other end of the spectrum, you enforce a strict branching strategy where people have to take in updates on isolated branches, run test cases, before checking in their changes. Then merge in their change to the main branch. The latter will not render any problem as the issues involved with merging has already been dealt with in the isolated branch. The very end of this range of CI is reached in the latter if developers are continuously updating their isolated branch with any change introduced in the main source branch.

So, you can probably also see that there is also a degree of effort, cost, required; low effort - low safety or higher risk, high effort - higher safety and lower risk.

What to do now? You have to decide where on the scale to start. Do you want start in one end and move towards the other? Or, do your organization require a certain level and stay there? I think it is all up to what you want to achieve and how much risk you are prepared to take.

And... please keep in mind: Developing software is a people thing.


Maven plugins

Creating plugins for Maven is quite simple, after some initial hurdles, and fun. Most Mojo:s I've done so far are rather small in size. The Maven Core API:s and the like are quite rich in functionality.

How to start? Check out this Beta version of the "Maven, the definitive guide". There is a good chapter on how to start creating your own specialized plugin doing a task not yet supported by one of the existing Maven plugins. Also, you might need some special thing done in your unique build process. Also, check out the "Plugin Developer's center" on the Maven site.

The only thing I can complain about is the lack of JavaDoc. But that is compensated by taking a peek at the existing source code of Maven and some of its plugins. Remember; the ultimate documentation is the code, after all ...


Managed to finally send those transit maps ...

I finally came around to send some transit maps to a collector. There is a collector at Sun Labs of metro transit maps. Just as I put the envelope in the mailbox I recall I didn't take any pictures of the maps I just put in the mailbox. Well, you can check the blog to see them when they appear there ... should be there in a week or so.

Those maps; what city are they from, you might ask. Well, many years ago I spent some time in Tokyo and they had a very clever rail way map. By folding it in several ingenious ways it manages to cover the entire metropolitan Tokyo rail way system, and still keep it pocket size. At that time I had a Filofax, Palm Pilots where just around the corner, so I had the maps in it for easy reference. How many years ago? Well, at that time I didn't own a digital camera but had a Canon Ixus, at least it was an APS. I could digitize the images using an APS scanner.
Enough of this looking back, next post will look forward...


Maven, maven - what's in store for us..?.

Just started working on a suite of plug-ins for Maven2. A bit tricky at first, but so far it is very fun stuff. At the core of Maven there is a dependency injection engine; Plexus. It is also referred to as an Inversion of Control container.

Anyhow, I've just begun exploring the API:s, etc. It seems promising... I'll be posting back here when new findings surface. Meanwhile check out this great book on Maven. This is the second book I've encountered so far about Maven.


Opinions are the cheapest commodities

Anybody can have an opinion about just anything, and almost everybody has. Well, it is easy to have an opinion about just anything, it is the cheapest commodity in the world. Why is it so cheap? Well, it is very often preconceived, i.e. somebody else has already thought of it. Actually, most people who do have an opinion very very often has never been in touch or used what they are opinionated about. This is quite true when it comes to technology, and Java in particular - for some reason there is still some FUD lurking. People with an opinion, often negative, about Java does not know much about it. They seem to feel strongly against something they do not grasp, or whatever (something unknown?). Those who do know something about Java, just do things and get along.

So, what is the conclusion? Opinions are not based on facts as knowledge is. Find out the facts first then decide.

Where does this "cheap commodity" thing really come from? Well, I think it comes from the fact that a majority of the population very often is not thinking (I've heard a figure of 97%!) but rely on preconceived impressions. We seemingly go along with our lives on auto pilot.

So, find out the facts for your self. Listen to others - facts they reveal, and then make up your mind based on the facts discovered, and maybe most importantly; ask questions!


Upcoming book on OSGi

There is a book about OSGi in practice in the making, it's title is "OSGi in the making". As the books on OSGi are scarce so this effort is very welcome. Check out Neil's blog where he announced the book. Also, he writes a lot of good stuff on OSGi.


Comfort zones

Many years ago I took an assignment that comprised a technology a bit outside my normal competency span (only the programming language was familiar). I wanted so dearly to learn more about it! And actually work with it. But, as other assignments where competing for time, I did not have enough time on my hands to read up, and experiment. So, as many good consultants I took an opportunity to work on this technology, despite the fact that I did not have all the so called "required skills" for it.

It turned to be a success! I gained the required skillset, and more too! Also, I managed to spread some enthusiasm in the project (I really liked what I was doing so I was probably very positive about things). How did this become? Well, I have now learned that in order to succeed there has to be a desire to gain e.g. new knowledge in an unchartered area. That is not all, persistence is also required, every possibility has to be explored. When exploring a new technology I usally do not read about it in a linear fashion, instead I read a little, start to experiment, read some more, try some more ... and as soon as I stumble on something new I check it up immediately. I.e do it right now! It might seem a bit haphazard at first, but eventually grasping the new area is done pretty fast.

Ok, we've got desire and persistence. What more? There are actually several aspects to cover, and I'll do so in the coming postings, but what I am saying here is the fact that sometimes you need to do a "mental bungy jump" to get things going. Really move, as I've recently learned, outside your comfort zone. I did not not at the time that I was going outside my comfort zone at the time.

More importantly, the move has to be substantiual. It is a bit like the saying that you have to be loud in order to be heard over the crowd. You have to produce 3 db:s or more in order to be heard. Analogous, you have to really do something that forces you to take serious actions. That is, you should do it if you really really want it, and has made a firm decision to do so.

Another lesson for managers: having people do what they've always done and not allowing them to grow and develop new skills, can reduce productivity. They simply get bored.


It's all about decisions

Yes, really. One has to decide, firmly, in order to get moving. Too many projects has failed prior to beginning as the people involved has gotten bogged down in debates (not discussions) on how to get moving, goals, how to reach the goals, etc. Well, these debates often degenerated into a debate on terminology. And, leading nowhere and everything is delayed further ...

The decision should focus on what is actually at hand, not what can be (in near future or far away into it). What goals we should have and so on and so forth is the next step.

After a while it very often becomes clear that a new decision has to be taken, we simply know more now and things have changed - they always do, change. Nothing is constant but change. So a new decision has to be taken, effectuating it is often called refactoring. Gain knowledge by doing; you have to try things.

When there is really to much to do, you are stressed and your boss is more nagging than usual - take the courageous decision to do nothing. Really, take a step back and ponder on the situation. Find out what is the most crucial, single most important item, to get done now. Then focus on that! The main thing about the main thing is to find out the main thing about the main thing.

So, knowing the above; can we now decide to take firm decisions from now on and get things going? Lets try things, not debate over what is wrong and not? The world will be a better place with more resolute people around.


100 % of blog readers want closuers in the Java Programming language

The poll regarding closures in Java is now officially closed. The result:
- 100 % Yes
- 0 % No
- 0 % Uncertain

In other words everybody wants to see closures in the Java Programming language. The number of respondents? Well, hmmm ... three persons has voted... nevertheless an interesting result... :-)


The actual report from JavaOne

Yesterday we held the presentation, report, at the JavaForum venue. Everything went quite well, I think. "We" are; Ove Nordström, Jonas Södergren, Mattias Holmqvist, Magnus Kastberg and myself.

Prior to our talk Jimmy Falkbjer, Jayway, talked about web services; how to start using WS etc. Informative and engaging. Erik Hellman, Sony Ericsson since three weeks, held a major crash course in closures for Java. Also, he gave a brief, but quite thorough, historic view of how closures emerged through time. Very interesting! (if you care about closures, please vote)

However, some collected details and highlights from JavaOne and the venue yesterday:
- JavaFX, almost same as last years JavaOne, but more developed, bigger and more stable. Well, the demos presented crashed all over the place but gave an overall cool impression; dragging a running application from a browser onto the desktop, closing the browser and the app continues running just like that.
- Java and Blue Ray; the formats battle is over - Blue Ray stands as the winner!
- Rock'n'Roll; Niel Young showed up on the first keynote giving credit to Java and Blue Ray.
- Glassfish modularized with a very small footprint, now able to run in a mobile unit.
- Java appearing in more places than before; Java RT in industrial automation, an area not yet penetrated by higher level of programming.
- The Livescibe Pen, pretty cool gadget! Has JavaME with some incredible applications. Ove has promised a demo on next JavaForum.
- Sentilla sensor nodes, also running JavaME and requires very small amounts of power. Also check out the SICS page about sensor networks.
- Java is used to run and monitor the accelerator complex at CERN; they do some pretty cool stuff, in the new detector (ATLAS) they will be detecting what happened just after Big Bang. It is pretty massive; 25 meters tall and weighs in at 7000 tonnes, with 100 million readout channels. When in operation, there will be about 600 million collisions per second, generating a whopping 15 petabytes of data, also managed with Java technology. This includes "an Event viewer written by the ATLAS developers with Java 3D to visualize the particle tracks", and it is open source.
- JMARS; NASA has produced a very impressive tool for mapping Mars and handling various geological data, Java technology in use. The amazing application showing Mars' elevation, hematite mineral deposits, chloride salt distribution, potential landing sites, and a large amount of surface detail shots.
- Tommy Jr., the DARPA-winning autonomous vehicle, Paul Perrone, CEO of Perrone Robotics, spoke with JAmes Gosling about Tommy Jr.'s internals, including the stuff that runs it: Java RT, Java SE, Java ME, Sun SPOT, MAX Robotics Platform & Drivers, and MAX-UGV framework (navigation rules).
- Chris Melissinos, Sun's Chief Gaming Officer, and Joshua Slack of NCsoft showed Project Darkstar, engines, community, and commercial applications. Project Darkstar is Java technology-based infrastructure software designed for massively scaled online games.
- JavaCard 3.0, now includes a webserver. WS on a card! A robot competition was held running two JavaCard apps.

There was of course more to report. I'll leave it for now, but I might come back with more stuff when appropriate.

How was the conference? Well, as usual it was great. But the not that many news actually. What was news last year is now announced as being implemented. This is both good and bad; Java is becoming mainstream and thus things are stable, but on the other hand also becoming somewhat boring. Please misinterpret me correctly on this one. The latter should, in my opinion, be perceived as something good. The rate of innovation might have decreased, but those new things are more stable and feature rich. However, there are still ares where innovation is eminent.

One such area is the Java Programming Language itself. In order to survive (Erik's presentation yesterday) the language needs to evolve; in other words we need things to be added like closures.
On the other hand adding JSR-277 is in my opinion not progress. As Buckley said in his technical session (TS-5581), the language should be clean, leave it up to applications to be rich. What I am saying is that there is a more than sufficient module system in OSGi. One could argue, however, that there is no type safety with OSGi, but I think that will come with time. The R5 spec. is on its way. As there are numerous devices out there not yet on par with a level corresponding to Java SE 5 OSGi has to be without generics. Be patient, I am convinced that OSGi will be upgraded with generics in the near future.


Report from JavaOne 2008

Tomorrow, we wil report from JavaOne 2008 at JavAForum Stockholm. I do not want to reveal to much yet. But, I can say this much that JavaFX has been developed since the announcement made last year, Glassfish has become modulerized and has a very low footprint, Blue Ray won the battle of the formats - Niel Young appeared in the first keynote and gave Java credit. He now has the the tools to do what he wanted to do 20 years ago... an interactive record of his entire music production (!).
There is a lot of interesting things happening in the mobility field. Check out Ove's as he covers the area very well.
Contents of Java SE 7? Well, it has not been determined yet; there is still some debate, especially in the Java modules area - JSR-277 & -294 vs. OSGi (JSR-291). Also, will there be closures or not. Which lead to functions types, maybe? Well, SE 7 is slated for release next summer. So lets see what happens at JavaOne next year.


We are preparing a report from JavaOne 2008, but ...

We are in the process of preparing a kind of report from the JavaOne 2008 conference. Well, it seemingly takes longer than expected as since arriving home things have wound up and I also found myself in a rock band. Yes, picked up playing again after more than 15 years ..!. as I haven't played music for such a long time, I hope the other guys will bear with me for a couple of initial weeks - they are truly professionals, i.e. they not only play their instruments, and sing, very well, they can - in contrast to myself - also pick out chords, notes, rhythm, etc. just by listening on recorded music.

There will be presentations from JavaOne and a summary will appear here, eventually. Meanwhile, check out this guy!


Last day of JavaOne 2008

The last keynote of the conference is usually the one stuffed with most of the cool and fun stuff. And, Mr. Cool Stuff himself, James Gosling, did not dissapoint this year either. Numerous cool gadgets and awesome equipment all connected to Java somehow. I will sum the conference together with Ove as last year. Unfortunately I'll have to do that when I am back home. The cause, it is explained in next paragraph.

As every other year place is being torn down prematurely; they have already removed a number of Sun Ray terminals here at Moscone. This is a bit of a disappointment. The conference is not over yet. As John Gage said at key note; "there are nine hours left to go, many more sessions". This also makes it harder to find a free terminal after the last session so I'm not connected to the Internet once the conference is over (which might before the last session ends!).

Overall it has been a great conference. No doubt about that! A fuller report from JavaOne 2008 will soon follow. Until next week - stay tuned!


Java and Rock'n'roll!

After the first and half day of Java one I finally got around having enough time on my hands to actually write something down here. In between two sessions with a longer break so I, so here I am again ...

Niel Young appeared on the key note yesterday! A real rocker appears on stage and promotes Java and Blue Ray. They still manage to produce surprises! I thought Java was becoming mainstream and thus a bit boring - i.e. JavaOne would become more like a regular serious conference, but it is still as fun as the earlier years. There is also still innovation going on; the whole story with dynamic languages (just came from Ola Bini's talk on Ruby/JRuby on Rails - very interesting!), the contents of Java SE 7 (much debate yet), Java FX (getting into shape nicely), and much more.

New this year, conveyed during the key note, is more emphasis on Open Source and the community. Sun is becoming more Open about Open Source. There is an ongoing revolution: the enterprise lock-in is dissolving, we will see more modularity, not only in architectures but also in business models. We will see more ways of connecting to our data, the notion of the many "screens of one's life".

Back to the Java SE 7 contents and the 'module' discussion in particular; seemingly there is still some controversy about it. I.e. the OSGi vs. JSR-277 thing. I tend to lean more towards the OSGi approach, as it does not imply any actual additions to the language. It is also a proven and working model. More, yesterday I listened to Alex Buckley's talk on how and what to add to a language and why. According to Buckley a language should be kept as clean as possible, whereas an application should be as rich as possible to satisfy users of it. In my opinion a strong argument for OSGi as the module system for Java.

Tomorrow I plan to listen to Peter Kriens. Hope get a chance to ask him about his view on this.

When will Java SE 7 appear? Some say next summer... JavaOne 2009 is scheduled for June 2 - 5. Coincidence?


CommunityOne and JavaOne 2008

At last! The Conference we've been waiting for has started. Rather, the pre-conference CommunityOne started today at Moscone in San Francisco. I just picked up the complimentary T-shirt and had a lunch sandwich. So I'm good!

There are more people coming to this pre-event this year than the previous, 50% more according to Ian Murdock, Sun, who started off the key note. Emphasis is on open source, sharing, i.e. we are moving away from monoliths towards modular architectures. It is also about building communities and keeping those communities active and passionate about the software and technology. But, the community also encompasses users, they actually form the bulk of the community. So, it is not only about code; documentation, tests, etc. are equally important - isn't rather irritating that undocumented (javadoc) part you so dearly want to use?

Anyhow, maybe not that big news, we have heard much about openness on previous events. I think the emphasis on community building is rather new and fresh. We need to get together more and create great software by sharing... what do you think?

P.S. I'll be posting more here during the conference week whenever I do get an opportunity. Maybe I'll manage to get some pictures up here as well. I'll keep you posted....