For me, finding time to blog in between sessions is almost impossible in JavaOne. Going back and forth between different hotels and trying to be in the room early enough to secure a nice seat are time consuming. And when you factor in the fact that the BOF (Birds of a Feather) sessions may end as late as 21:15, I’m not left with many viable options for blogging. Normally I’m a night owl. I can work well and be pretty productive late at night. However, this year I’m trying something new. I’m waking up at 5 AM to get some work done early in the morning.
When I blog about a day’s sessions, ideally I try to select a few sessions, the most interesting ones. But sometimes there are so many good sessions that it becomes really difficult to short-list them. Wednesday (javaOneDays) was such a day when three of my Top 5 sessions took place. As an attendee it is a wonderful thing. However as a blogger it makes life harder. Read the rest of this entry »
San Francisco is a busy city. Even though I wake up very early, the traffic and the noise outside suggest that this city never sleeps. But I’m sure most of the JavaOne attendees were sleeping at 5AM when I woke up to finish yesterday’s blog post. Anyway… Let’s get started. In today’s article I’m going to write about 4 of the sessions that I attended during Days of JavaOne.
JavaOne Day 2 started with two interesting NoSQL sessions. Read the rest of this entry »
Unfortunately, as I feared, this first day of JavaOne started very early for me. I woke up at 4AM and I decided not to fight it. It gave me time to do a bit of work and write yesterday’s blog entry.
Atomic Data Structures
I left my hotel at 8 and walked 3 blocks that separated it from Hilton where my first session was taking place. It is important to pick a good session to start the week. I thought I did a good job in pre-enrolling in “How do atomic data structures work?” but unfortunately it didn’t live up to my expectations. It was obvious that the presenter knew his topic very well and this was his area of expertise however he gave the impression that he was nervous. Consequently, his talk was not well structured, his thoughts wandered and his jokes failed to revive the audience. Read the rest of this entry »
It is a long trip. A very long one. Even though I never forget this fact before the travelling to San Francisco, the reality sinks in during the journey. My knowledge counter reset after this reality check: 19 hours from home to the hotel. I’m not even going to complain about the jet lag. I’m here to write about JavaOne after all… wide awake at 4AM. So, let’s get started.
Every year there is one or a few dominating themes in JavaOne. You get a feel for it just by looking at the conference schedule during your pre-enrolment. If you check the same calender just before the first day of JavaOne, you can see which sessions are popular, too popular actually, and full. I even noticed a few talks whose waiting list was in the order of 200. So, without setting foot in Moscone Center and talking to fellow attendees one can get a fair impression about what are the main themes of the year.
There is definitely a concentration around Cloud-related sessions and also HTML5-related responsive Web technology sessions. But I think Cloud is the term we are going to hear most often in this year’s JavaOne. So, it doesn’t come as a surprise that Larry Ellison, CEO and co-founder of Oracle, introduced Oracle 12c to thousands of conference attendees at Moscone Center today. What does “c” stand for? You guessed it right: Cloud. One of the main design goals of Oracle 12c was Cloud computing deployments. Cloud is now at the heart of Oracle. They put the emphasis on the Private Cloud with their Exadata and/or Exalogic servers.
Again, it is very disappointing not to have any talk on Android. If there’s someone out there listening (or reading) this is me complaining about it. Android is Java’s only viable mobile platform. You keep talking about developers, community, teamwork, etc. Prove that these are not stories told just to motivate developers and companies in order to generate more revenue. Prove that you really care about what the community wants. Put your greed and differences aside for once and do what is right for the developers.
This year the format of the Technical Keynote Speech was somewhat different. There weren’t many short technology demos, which was probably a good thing. Instead, the JavaFX team has developed a Schedule Builder/Viewer application and it was the main application used in various demos. I think this is a better approach. It also serves a purpose and the attendees can use it during the conference to get a feel for it.
The Conference Schedule app was pretty slick and responsive. They ran it firstly on a Windows laptop. And then on a Mac. To be honest I couldn’t see any difference. I’m curious about its UI, and I’m going to look at it in detail if I can find an opportunity because some sections had a very iOS-like look and feel. From such a demo one can understand that JavaFX has come a long way. I especially liked to hear about practical features such as being able to produce native code so that a JavaFX application can be submitted to Apple MacStore for instance.
A talk about Project Lambda was next. I’m not a huge fan of lambda expressions. I’ll probably use them but I have the feeling that they add more complexity and diminish the readability of the code. But I am going to hold on to refrain from having a strong opinion until I get a chance to use lambda expressions on real living, breathing code.
There was a brief mention of Java 8′s Default Methods. I like the idea. A very similar concept exists in Objective-C and being able to augment standard interfaces and provide default implementations come in handy.
Then they ran the same Conference Schedule application on a touchscreen kiosk (supporting multi-touch gestures) and on an impressive Raspberry Pi. Raspberry Pi is a nice little Linux box that you can get for $25. I’m not kidding. Go and have a look. Or as they advertise: “Take a byte!”
Then followed a short section about Project Jigsaw, explaining why it is now part of Java 9 and not as previously announced Java 8, and about the new Compact Profiles. The Compact Profiles specification defines three subset profiles for the Java Runtime Environment. Currently the entire JRE takes up about 52MB. The proposed profiles will take up 10MB, 17MB and 24MB, each level allowing a more feature-complete runtime. However, it looks like the minimalistic profile will allow things like running a Web server, for instance.
The second part of the keynote speech was about Java Enterprise Edition 7. Java EE 7 comes with increased productivity. It encompasses new and/or improved specifications such as:
- A new batch API (Batch Applications For The Java Platform 1.0 – JSR 352),
- A new JSON API (Java API For JSON Processing (JSON-P) – JSR 353),
- A new WebSocket API (Java API For WebSocket 1.0 – JSR 356),
- Java Temporary Caching API 1.0 (using annotations such as @CachePut, @CacheKeyParam, @CacheValue),
- Bean Validation 1.1 (using annotations such as @NotNull, @Max(“10″), @Future),
- JMS 2.0 (less verbose, reduced boilerplate code, resource injection, AutoCloseable support, etc)
- JAX-RS 2.0 (client API, message filters and entity interceptors, etc)
- THML5 support (HTML5 Forms, etc)
The keynote speech, a long one, ended at around 8PM, with the mention and demos of Project Avatar and Project Easel.
All in all, it looks like it is going to be an interesting week in JavaOne. Talk to you tomorrow.
Recently, while testing our COM+ application it started crashing with c0000005 – Access violation. This is VB6 COM+ called from C# application. The funny thing is, dllhost.exe crashes due to the error but there is no indication which method call crashed it.
Since it is multi-threaded application C# logs loads of RPC Unavailable errors once the COM+ crashes, but nowhere I could find original point where the crash occurred. Actually the thread dies and even if debugged in VS the debugger doesn’t break on this unhandled exception as one would expect, even though it breaks on all other – RPC Unavailable exceptions.
So, the first task in this case, for me at least, would be to find what method is called when the crash occurred. When facing something unexpected like this I resort to WinDbg which I know just enough to get by analysing crash dumps. Necessity on couple of other occasions made me learn the basics so here are some notes.
I am in the middle of writing a blog post and I needed to represent a directory structure in a quick and easy way. Here’s the command I used for that:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
On Windows I used Cygwin to run this *nix command. And what I got was pretty satisfactory:
. |-ear |-ejbs |---src |-----main |-------resources |---------META-INF |-primary-source |-projects |---logging |-servlets |---servlet |-----src |-------main |---------webapp |-----------WEB-INF |-src |---main |-----resources
Let me know if you have a better or quicker or nicer way of doing the same thing.
UPDATE: As suggested by Derek, you can use the “
tree /a” command on Windows, for even a prettier output:
+---ear +---ejbs | \---src | \---main | \---resources | \---META-INF +---primary-source +---projects | \---logging +---servlets | \---servlet | \---src | \---main | \---webapp | \---WEB-INF \---src \---main \---resources
It’s been more than 3 years since Ray Ryan gave that seminal talk on how to use GWT in large applications. In the intervening years, the advice he gave has been underpinned with libraries and GWT infrastructure. GWT now offers built-in support for MVP, weaving in History management elegantly though the use of Places. GWT-dispatch provides a clean implementation of the command pattern. And GIN makes Dependency Injection a natural extension of the GWT paradigm and binds all the other approaches together into one seamless, sensible architecture.
This article isn’t going to make the case for doing things Ray Ryan’s way. I don’t think there’s any need to convince anyone. But I would like to point out some choices that emerge from developing complex applications using these patterns and make some suggestions about what these choices might mean.