Opinion Archives

Shashank Tiwari

AddThis Social Bookmark Button

Its about 6.30PM here in Prague and the day 1 of The Server Side Java Symposium (TSSJS) is wrapping up for the day with an award ceremony (sponsored by GigaSpaces). I am too tired and sleepy to carry on after yesterday’s long flight and lack of sleep but thought of posting a few interesting things that I noticed here at the symposium today.

Firstly the venue and the setup is pretty cool and there are over 300 people from many parts of Europe. The day started with a brilliant keynote by Stephan Janssen. His topic being: Supporting the RIA Space. (A Java conference kickstarts with a talk on RIA — interesting! isn’t it?). If you were at JavaOne this year and attended Stephan’s talk then you probably heard a lot of this. I had to step out of his talk a little early to get setup for my own talk, which followed Stephan’s. I spoke about JPA/Hibernate and RIA integration. Was happy to have a house full of attendees at my talk but was surprised when I saw only a few hands go up on my question: “How many of you are familiar with RIA?”. In fact a few were getting familiar with the subject only from the keynote that had preceeded my talk. Very interesting, again!

TSSJS speaker lineup is quite impressive. There were talks by many well known people, including Nati Shalom (GigaSpaces), Alexandru Popescu (InfoQ), Michael Keith (EJB 3.0), Guillaume LaForge (Groovy/Grails), Holly Cummins (IBM) and Geert Bevin (Terracotta, UMYN & RIFE) on day 1 itself. There were many other good speakers today: its just that I presume the ones I listed are better known than others. There are many more good speakers in the next couple of days to come. Obviously I could not attend all the sessions today so it would be unfair for me to comment much about the ones I never even peeked into.

Both the Groovy talks (Alexdru’s and Guillaume’s) were cool and well attended. Java Performance (Holly’s) and JVM Clustering (Geert’s) were very popular as expected.

These days when you go to a Java conference its a lot about dynamic languages (and their existence on the JVM) and the first day here reinforced the same feeling. However, one interesting change was a company called ZeroTurnAround , which promised dynamic redeployment of Java applications (far better than the JVM HotSwap). Their tool is called JavaRebel (I spoke with Jevgeni — who carries a fascinating title of Lead Rebel in the company) and he was kind enough to walk me through a lot of examples where Java code could be redployed effortlessly. There message could be interpreted as: “Java can be dynamic in some ways too, without being dynamically typed or interpreted!” If you are a Scala fan, you will be happy to know that JavaRebel comes built-in with Lift, the emerging Sacla framework. Talking about frameworks, there are too many in the world of Java to catch up these days and that is the topic of my next presentation at TSSJS this Friday. I am not going to miss the opportunity to express my frustration dealing with over supply then! Wish these framework makers found a way to create alternative energy sources; with their commitment there with be no oil crises today :)

More tomorrow!

Robert Cooper

AddThis Social Bookmark Button

Vincent Pardington has a good post up on DZone beginning an SOA pitfalls series. His first post, on NIH in the SOA world is a good one, but I think misses one important point:

First of all, the idea of a SOA is to reuse existing services. If department A builds a get_personal_details service, there’s not much point in department B building a get_address service. Assuming the get_personal_details service returns the full address.

Of course, there may be multiple reasons why department B would do this:

  1. They don’t know about the get_personal_details service. In this case there is no proper service registry, a point we will discuss later.
  2. The way they design their application does not cause them to think about reuse. This is one of the things that can happen when applying Big Design Up Front. Something we will also discuss in a future blog (way to build up the suspense, not? ).
  3. They’ve known about the get_personal_details service but they decide not to use it. Maybe they don’t know what it does exactly, maybe they don’t trust department A to get it right or keep it right, or maybe they’d rather have full control over the implementation. In this case, you have some classical NIH hitting you. This is the time to discuss the ownership of the services and allow both department A and department B to feel in control.

I think there is one more here that is organizational. In my experience, services in the enterprise tend to be developed as part of an application. The problem is, they aren’t staffed as standalone products after the application for which they were originally designed goes into maintenance mode. Let me set up a #3 to Vincent’s storyboard:

Team B knows about the get_personal_details service, but the address returned doesn’t include the shipping code for the address. They would love to use it, but Team A is now working on the next project. Team A’s boss doesn’t want to spare resources to amend expand the service, and Team B’s boss doesn’t want to take ownership of the service.

The problem is one of perspective. In reality, Team A built TWO applications: One for the end user and one for developers and they should be slotted to do ongoing enhancements to either one of those. I know at Manheim there was an earnest effort to establish a product ownership system fro the “Services” products. The problem there was, nobody in management wants to own them.

I know there was a great article in ACM Queue a little over a year ago about the services infrastructure at Amazon. Their solution was to treat the services products as a profit center: every call back to underlying services was “billed” to the application group making the call. This has the effect of encouraging the service owners to add value to the services infrastructure, as well as encourage upstream applications to be frugal in their stress to the back end. I found this to be a really compelling structure, but I can also see how it might lead to some… poor… software decisions in a less disciplined organization.

Robert Cooper

AddThis Social Bookmark Button

So this has made the rounds on /.

I will say this about UML: some of us are visual people. As the token Left-Handed guy in the software world, I admit, I see the world in somewhat visual terms. I think some UML is valuable. Class diagrams, obviously. Sequence diagrams, sometimes. Use case diagram, rarely. But this goes to a larger issue with UML:

UML is not a process.

Is RUP dying a miserable death? Yes. I admit, I still think Coad is a demi-god in the OOAD world. Actually, even if you “know” the UML “answers” on the IBM cert exams, you are likely overly ceremonial. However, if UML is suffering it is because of this one fact:

People don’t pay for tools anymore.

TogetherJ 4.x was amazing. That was the last release before it became redonkulously expensive, but I loved it. Today I use NB. There are a couple of commercial UML tools, but Sun has a free UML tool for NetBeans that round trips. Frankly, the problem with Sun’s is the printed output blows, and they certainly don’t have the fantastic integrated UML/JavaDoc output that I remember so fondly from Together.

Is UML dead? No. However, I think UML documents have a place in the Agile world that they have lost. The problem is UML-as-Process was never really a great idea. UML-as-documentation in an Agile-Refactoring-CI world: sure. Someone just give us the tooling at a reasonable cost, and UML will come back with a vengeance.

Shashank Tiwari

AddThis Social Bookmark Button

Last year JavaOne got the UN guy and was trying to eradicate poverty; this year they got Neil Young and were showing off the cool stuff. CNET blogger Dan Farber has a good write-up and the video that tells you all about Neil Young’s appearance at JavaOne. Read it from the source. I will avoid repeating it.

The good part of this year’s showoff is that Blu Ray and BD-J are cool in reality and they do what they promise. It’s not poverty eradication, its higher resolution and better interactivity and better digital archiving so I guess its more achieveable ! If you know nothing about Blu Ray or are confused on the value it adds then maybe you will benefit from seeing Sun’s Webcast on Blu Ray and browsing hdcookbook.

With the web continuously morphing into the read-write digital media network, applications becoming increasing interactive and the dividing line between business applications and entertainment getting twisted if not necessairly blurred, its not far when quite a few Java developers may use technologies like BD-J to write their applications. To some of the so called — “enterprise developers” — this may seem alien and surely we are not talking about universal applicability of this technology, but don’t be surprised if such stuff starts creeping into your realm too.

The moral of the story (for Java developers) — “Start becoming cool, if you aren’t already !”
The question (for Sun) — “Is coolness directly proportional to increase in revenue?”
A request (to Google and Steve Jobs) — “Please stop driving everybody up the wall.”
A word (to the users) — “You are loving it :)”
A word (to speakers and event organizers) — “Start making friends with rock stars”

Shashank Tiwari

AddThis Social Bookmark Button

JavaFX.com is up and running! The problem is that it doesn’t work well on most browsers. The small fonts are unreadable when viewed in FireFox or Safari. The site takes a long time to load up. The only thing notable is the transition from one window/panel to the other. Considering almost everybody else can do this as well, I am a little confused what to look at and be impressed about :)

Maybe, I should be happy there is finally something there and not just vapourware, like we saw at last JavaOne.

For a second, lets take a look at what competition’s got :

Flex Showcase
Silverlight Showcase

Now you tell me, if Sun should have waited to get this all trim and proper or am I missing something out here?

Shashank Tiwari

AddThis Social Bookmark Button

Although JavaOne 2008 officially starts tomorrow, it commenced today with CommunityOne. Carrying on the trend that started a couple of years back JavaOne is continuing to emerge as an event for things more than just Java. For statistics sake at least 10% of the 391 sessions that make up the content catalog are about Groovy, Ruby, PHP, JavaScript or Python. Also like Java the conference itself it becoming a “platform” , with many mini events within it. There is the Groovy Meetup and the Agile Event and the Adobe presentations to name a few. Not to forget the numerous gatherings sponsored by Eclipse, JBoss, Adobe, Oracle and QCon are becoming events in their own right. Then there is the excitement around social networking at the event. So hope all of you at the event have fun mingling, learning, discussing and catching-up.

Robert Cooper

AddThis Social Bookmark Button

So I am going to break rules here, I am pretty sure, six ways from Sun-day (haHA!).

I am pretty sure I have never commented on this before, because, I agree with the 16,000 of you who will tell me it is in bad taste, but the first thing that always stands out in my mind about San Francisco? There are no black people here. Not that there are none. That is silly. I, however, come from Atlanta, a city with a 65% African American population. Moreover, I live in Midtown Atlanta. given the population averages, in my “hood” you are likely black and/or gay. In spite of its reputation, a city of straight white/asian/latino people is definitely a big change for me.

Tim O

AddThis Social Bookmark Button

In Choosing an OSS License and the Ext-JS saga, Graeme Rocher (of Groovy on Grails fame) reacts to the recent ExtJS switch from LGPL to GPL. Here’s a quote:

What they have effectively done is built up a community, taking full advantage of the open source model by accepting user contributions and patches and then turned around and kicked their own community up the backside. It is projects like Ext-JS that give open source a bad name. How can a company have faith in open source if the people behind it can’t even decide how to license the thing?

In related news, the Java Service Wrapper did something similar. Jason Van Zyl commented on the JSW license switch on the Maven developer’s list:

Project[s] that start using a commercially liberal license and then switch[ licenses] long into the life of a project is wrong. If you want to do the GPL/commercial thing then say so from the start. [There is] nothing wrong with this model, but for libraries and tools using a commercially liberal license is the best way to get community adoption and then to flip the license I find a little unsavory.

Anyone interested in forking it and maintaining the version that was not GPL?

In related news, ActiveMQ is opting to move away from Java Service Wrapper.

Update (5:45 PM Central): A little madness thinks ExtJS has discovered step 2 of the elusive Slashdot business model:

The model works because step 1 allows you to build a community around the more liberal LGPL license. In particular, as the LGPL is commercial-friendly, the community will include many people building commercial applications. Once the community is suckered in and committed, the license is changed, leaving them high and dry. Well, not quite: they can continue to use new versions of the library by buying a commercial license. Hence the profit!

Update (6:17 PM Central): More from Stephans Blog

Tim O

AddThis Social Bookmark Button

O’Reilly is sending a few bloggers to JavaOne, I’m going to be attending with my reporter’s hat on. We’re interested in knowing what your questions are for this year’s conference. We want to give you, the reader, a chance to let us know what you are paying attention and what questions you have for Sun executives this year.


powered by ODEO

Tim O

AddThis Social Bookmark Button

David Herron left a comment on the last blog post, here it is:

“ultra-fast Java Plugin”? Have you taken a look at 6u10? That’s where your ultra-fast Java Plugin is, it’s already been announced, and you can download it today to try out. “Openjfx looks like a ghost town” .. Well, inside Sun JavaFX is not a ghost town and I have no idea why there isn’t more public dev-list activity. “Clearly, development of the compiler happens somewhere else” is a big 10-4. If you scrolled down to the bottom of https://openjfx.dev.java.net/ you’d see a link to https://openjfx-compiler.dev.java.net/ which is the project for the compiler. “Consumer JRE” .. that has morphed its name into 6u10.

David, compiler list is clearly very active. Lot’s of Sun activity. Let’s see why the public project has such low activity. I have taken a look at the 6u10 (I had to fire up my old Vista machine to see it), it’s clearly an improvement, but read more for the obstacles to adoption. I can’t yet go to my managers and justify writing a customer-facing application in a Java Applet, maybe explaining the reasons why this is the case might provide some useful feedback.

Why JavaFx Public Lists are a Ghost Town?

There isn’t more public dev-list activity because there are not many people using JavaFx. There are not many people using JavaFx because there are not many consumers who have upgraded to Java 6. 6u10 is in Beta, so we can’t expect consumers to install it yet. Couple that with the fact Sun doesn’t touch the JRE or JDK for Macintosh and Apple’s Java 6 is still a “Developer Preview”…. who knows if they are going to put much effort into making sure that Applets load quickly. On top of that, for some strange reason all the Applets I try to run in IE 7 end up with this strange button that reads “Press SPACEBAR or ENTER to activate and use this control.” Maybe this newer version of Java might start to hit consumers in the next few months, how quickly do you think we can expect market penetration for the Java Plugin to equal that of the Flash 9 Player? How closely have you been working with Apple to make sure that the modular JRE is a part of the Apple development effort?

People are not milling about the JavaFx lists asking questions because there seem to be some major obstacles to adoption. If I’m creating some web site that needs to stream videos and display interactive Rich UI and I don’t want to turn away everyone using a Mac, I’m certainly not going to be very excited about the 6u10 update. It follows that I’m probably not going to consider JavaFx because of that. You guys are in a tough place because it is going to take time for 6u10 to hit the market, in the meantime, the competition continues to gain market share.

How to Really Make Applets Viable

I’d start considering Java Applets if I heard both of these hypothetical announcements from Sun…

  • (hypothetical) “Here at Sun, we’re watching the trends in the computer industry and we’re noticing that Apple has started to achieve real market penetration. Apple’s growth is phenomenal, and we’re announcing today that we’re going to be committing real development dollars to supporting the JDK and the JRE on Apple platforms.” (hypothetical)
  • (hypothetical) “It is clear to us that video is driving new applications and features on the internet. We’re happy to announce that we’ve signed licensing deals which will allow us to support a wider set of media formats including flv. We’re putting a lot of development into the Java Media Framework.” (hypothetical)

If we heard something like that at this year’s JavaOne, I’d start paying more attention.

The more I think about it, the more I’m convinced that applets being viable for the web isn’t about technology AT ALL. It is about business. A business that needs to implement an RIA thinks about the user audience, thinks about platform support. Mac users are not an insignificant population any more and Apple’s market share is growing at four times the rate of the competition. There’s this other company out there that is writing a Rich UI container for both stand-alone and browser based applications. The framework has good media support and they don’t have a hang up about supporting Mac OSX. They are named Adobe. If Sun doesn’t support Apple, and Apple drags its feet, you can’t expect any reasonable business person to elect to use a technology that it going to turn away a rapidly growing segment of the market. If Sun really wants to focus more on the consumer JRE, then they need to support the two major consumer platforms: Windows and Mac.

Let’s set the bar for Consumer JRE

It is unfair to keep on harping on Sun for startup times, the Consumer JRE is faster, and it’ll probably attain a high market penetration sometime in the next year? Let’s talk about the remaining expectations. Mac support and better media support. Sure, I can use Java to playback videos, but not the ones that count - Flash Video and H.264. Instead of trying to move the industry away from H.264 and FLV, Sun should just pay the patent license. If Sun were leading the market, then I think Sun could start trying to drive the market toward free and open standards, but Sun doesn’t, and I although I detest proprietary formats as much as everybody else here, I don’t think that the Open Media Commons initiative is going to help us Java programmers write client-side applications in Java anytime soon.

If the Consumer JRE was really ready, I wouldn’t be watching Eckstein discuss the improved applet startup time in JDK6u10 via a SWF from blip.tv which is streaming me a Flash Video on a Macbook Pro. I’d be watching Bob discuss the new Consumer JRE by way of an updated version of the JMF delivered in a Java Applet. If you really had confidence in Java, you’d have used the Cortado Applet and streamed it some Ogg Theora. You’d be updating the JMF. Are you updating the JMF?

Tim O

AddThis Social Bookmark Button

In the absence of info, I’ll make some predictions. Make your own predictions in the comments.

I’m going to guess that the keynote is going to talk about Project Caroline. If it is ready, Sun is going to want to position this as the big announcement for this year’s JavaOne. I’ve already blogged about how I see the momentum with Amazon EC2 (utility) and Salesforce.com (apps) in this space. Google has arrived a bit late to the party, they already have an offering in SaaS via Google Apps, and everyone seems to assume that whatever solution they come up with in the PaaS area is going to ultimately succeed for the obvious reasons… they have the culture, people, and scale to make something like this work. Few dare to doubt Google.

…which brings us to a company which is familiar with making big announcements greeted by a symphony of silent doubt (Sun and JavaFx). The Register broke this story back in February. If those PDF slides (in the Register story, I don’t deeplink), are accurate we’re looking at utility computing a step above EC2. Instead of expecting people to interact with a series of web services, it appears that there is some sort of Java API. Caroline is going to be met with a chorus of doubt, but there are some interesting things from those slides. I think Sun has the ability to come out of the gate with some features that EC2 is just adding to the offering, and I also think that Sun has this “full-stack” of technology products that span the entire spectrum…. if anyone can pull it off, I think Sun can. But, they are late to the party and they have a lot of catching up to do.

Something Big About JavaFx?

I’m predicting that Danny Coward formally introduces some ultra-fast Java Plugin and that we’ll see a big upgrade to the JavaFx product.

We should expect to see some real meat behind JavaFx at this year’s JavaOne. If we don’t see something big about JavaFx, then it is going to make it tough for Sun to remain credible. And by “big”, I don’t mean tighter NetBeans integration. JavaFx was the big announcement last year, they established an open source project “openjfx” on java.net, but take a look at the developer and user mailing list traffic over the last year.

Month Dev List Messages User List Messages
Mar 2008 2 192
Feb 2008 1 132
Jan 2008 0 81
Dec 2008 0 82
Nov 2007 3 152
Oct 2007 0 140
Sep 2007 5 414
Aug 2007 7 100
Jul 2007 3 233
Jun 2007 13 226
May 2007 119 481

There’s some activity in the user list. It looks like there is something of a healthy community in the openjfx site, but openjfx appears to be nothing more than a Wiki and a series of sample applications. The “codebase” hasn’t changed substantially in about 5 months, and most of the dev list activity is commits to the web site. Openjfx looks like a ghost town.

Clearly, development of the compiler happens somewhere else, and because I see so many JavaFx sessions this year one has to imagine that there is a whole chunk of new code wrt JavaFx that is going to be announced at JavaOne. Sun is also going to have to do something about the speed with which Java starts in the browser to answer all the nagging questions from last year. I’m guessing that Chris Oliver is chained to a desk working on some impressive demonstration right now? He wasn’t a very frequent blogger, but it isn’t a good sign that he hasn’t blogged since December 2007. (Maybe it is a good sign, maybe it means he’s focused on JavaFx?)

Consumer JRE

Danny Coward announced an early release of the Consumer JRE last October. I’d be surprised if this hasn’t really matured by this year’s JavaOne. Danny Coward’s blog is like Chris Oliver’s blog in that there are huge gaps. I think he blogged once in Nov 2007 and then once again last month. If we see anything about JavaFx at this years JavaOne it is going to have to be closely followed by a demonstration of a Java Plugin in a browser that loads so fast you don’t even notice that you are looking at an applet.

Tim O

AddThis Social Bookmark Button

GCalDaemon

So, I’m doing a thought experiment about ways to get around a fully locked down production network. Basically, I’m trying to find a way to send SMTP mail from a network that is very locked down. (Appropriately) the network administrators have locked down the network such that I can’t create a socket to anything. This makes perfect sense, you really do want to have control over what you are sending out. What doesn’t make sense is that port 80 is wide open. I can’t SSH out of the network, but I can connect to port 80. So, I need to send email, a colleague points me at this GCALDaemon project. Now, I’m not doing this, but the requirement was interesting enough that I wanted to see what could’ve been done if I really wanted to send email. Evidently I could just use GMail over port 80. I could just drop a bunch of files in a directory and GCALDaemon will take care of the rest sending them via HTTP over GMail. I check it out, looks pretty cool. But, whoa… look at the feature list (and my emphasis):

  Open source and completely free of charge
  OS-independent standalone application (Java 1.5)
  Bidirectional sync between iCalendar and Google Calendar
  View and edit your Google Calendar offline
  Supports 'Google Apps for Your Domain'
  Supports multiple file listeners with multiple Google Accounts
  Makes Gmail contacts accessible via LDAP
  Customizable Gmail notification
  Converts RSS/ATOM feed to iCalendar format
  Reusable mail transfer agent
  Remote control your computer via Gmail
  Multi-user abilities (up to 30-40 HTTP and LDAP clients)
  Run in service mode on Windows NT/2000/XP
  Run in embedded mode in a Servlet Container
  Low memory usage (10-20 MBytes)
  Automatic and fast (3-5 sec/sync)
  Customizable logging system (Log4J / CommonsLogging)
  Ability to do TCP/IP hostname/address filtering

I think this solution has a little bit of Rube Goldberg in it, but Google is reliable, I’m willing to live with something like this. Look at the feature list though, something jumps out at you….. “Remote control your computer via Gmail” Now that’s cool, but also very scary. (some digging) It stores scripts in GMail using IMap. Your computer syncs with that folder and then executes scripts from the folder. The whole process is triggered by you sending an email with a secret subject to gmail. There’s a diagram on this page… from the site:

This management service keeps checking a Gmail inbox regularly, if it finds an email from a trusted sender and with a secret subject, it reads and executes a specified script file. Then GCALDaemon sends back a response, which contains the script’s output. Most mobile carriers and recent phones have built-in support for sending email through SMS gateways, therefore a simple cellural phone should be enough to manage a computer.

Evidently, the alien overlords have arrived and they are controlling your computer via GMail IMAP. It is written in Java source is in the download. From the download, the lib directory looks refreshingly sparse. It doesn’t appear to be using everything and the kitchen sink in terms of JAR files (like all of my projects). In other words, the lib directory doesn’t contain 150 MB of JARs everything from Spring to Hibernate. Instead it looks like it is using Commons Codec, C-Collections, C-HttpClient, C-IO, C-Lang, C-Logging, Rome API, ical4j, activation, mail, servlet API, LDAP.

Source code, from the source you can see that we have Andras Berkes to thank for this code. Project appears to be covered under an Apache License Version 2.0 (Good, good!) The source looks very straightfoward/well-documented, and if you take a look at org.gcaldaemon.core.mailterm.ScriptRunner, you can see MailTerminal is easy to understand. Next question, why isn’t this thing in Maven?

Systems like this are going to be essential as we move to a model that involves more applications integrating with hosted platforms like Google Apps. Think about the ability to control machines from GMail, now couple that with my previous entry. You see where we’re going with this?

Ridicule

BTW, a colleague is now making fun of me on Skype.

HIM: btw, they could have written this gcaldaemon stuff in 1 minute if they used salesforce (and they wouuldn’t even need access to the net or a computer).

Laugh now, the cloud has you squarely in its crosshairs. Assimilate or perish.

Tim O

AddThis Social Bookmark Button

Today, Michael Podrazik writes about a new “generational shift” to Software-as-a-Service (SaaS). Michael’s a Java architect who is considering using EC2 and S3 instead of colo machines for his next project. In his post he captures an idea that’s quickly becoming obvious in light of the recent announcements in the Software-as-a-Service (SaaS) or Platform-as-a-Service (PaaS) space. Here it is (emphasis mine)…

We’re entering into a new generational shift in computing. I’m not speaking of generations of people but rather an uplift of paradigmatic abstraction as has occurred so many times before. This is not a shift from static to dynamic languages, although that trend will surely continue. It’s not that Java developers are all going to start using Rails or everyone is going to switch from template to component-based ways of developing webapps. The new debate is not going to be between X and Y framework but between X and Y platform, and if platform used to mean Mac-Windows-Linux, the shift I’m talking about is: ’s/Mac-Windows-Linux/Google-Amazon-Salesforce/’

There has been an undeniable series of developments in the hosted-platform, managed-environment, I-don’t-even-know-what-you-call-it, SaaS? that have until now resisted full-blown, critical mass, hype-factor. I think that that all changed on Tuesday with Google’s App Engine announcement.

Like Apple, no matter what Google does it gets attention, and App Engine is undoubtedly going to get lots of it. People will love or hate the choice of Python, love or hate the persistence API, or lament the lack of filesystem access, or OS access, or inability to link to C libraries. All of that is irrelevant though, because the real story is that they will have done for this new hosted-app space what IBM did for the PC-space years ago, which is push it over the top into general acceptance. It validates the concept. read more…

I’ve been thinking about this for a while in light of Amazon and the newer, more developer-focused products coming out of Salesforce.com. We’re approaching an inflection point where the arguments over whether a project should be done in Rails vs. Java vs. PHP will be trumped by foundational questions about whether an organization should invest in infrastructure and development at all. If you are like me, and you make your living developing applications and managing infrastructure. What can you do to prepare? I don’t have the answer directly, I think we’re going to see a dramatic shift in the job description of the “computer programmer” over the next few years. There is a brewing discontinuity in most organizations that engage in software development, and I think that this discontinuity is the first sign of this generational shift. In terms of technological revolution, I think the business user is leading the technologist.

On the one hand I speak to developers and architects who downplay the feasibility of SaaS solutions. Are they really secure? Don’t you yield any sort of competitive advantage on a platform like Salesforce? Are you not locked in to a platform like Google? It seems that there are a host of convenient and self-interested observations from the people who have the most to “lose”. I’ll sit in meetings where a room full of people are discussing how many machines to buy for a new system, when it is clear that the answer is “buy no machines at all, use EC2″. On the other hand, I speak with managers and executives who will happily testify to the millions of dollars they’ve saved by using products like Salesforce. At the Salesforce conference yesterday the logo was the word software with a red slash through it, and often a room full of business users would applaud when someone boasted of reducing headcount in the IT department. If you are a software developer, you can’t help but feel a little out of place. No?

Taking a step back, I see two groups, an emerging industry, and a gigantic, uncontrollable economic wave. The two groups are technical administrators and developers used to maintaining hardware and deploying applications, and business users who are eager to cut costs where they can. The big wave is the weakening economy (at least in the US) that is either at the bottom of a small recession or at the beginning of a depression unlike any seen since the 30s (depending on who you read). Add to this an emerging industry of Platform-as-a-Service. Just like the recession in 2001 and 2002 pushed many organizations to offshore development, the weak economy of 2008-2009 might just be the force that pushes many organizations to forgo heavy investment in hardware and custom software development.

What are you doing to prepare for this “generational shift”, this wave?

Dejan Bosanac

AddThis Social Bookmark Button

Dependency management was always one of the crucial Java project management tasks. It’s where tools such as Maven and Ivy make all the difference and allow developers to maintain their project dependencies in an easy way. There are two important elements for this to happen:

  • Centralized repositories - containing library JARs
  • Metadata - describing those JARs and creating repository structure

This is something we have for years thanks to the Maven developers. But if you ever tried to manage dependencies manually in your project, you know how tedious this task can be:

  • Find a library you want to include
  • Find out its metadata (groupid, artifactid and version)
  • Put an appropriate XML snippet in your project management definition file

I find step number two especially tedious and that’s why I’ve always thought we need an additional component to make our lives a bit easier. That missing link are “indexes” that would make repositories easily searchable and provide infrastructure for building useful tools for developers.

Fortunately, there has been some activity in this area lately. First, Eugene Kuleshov wrote about new Maven plugin for Eclipse and general purpose Nexus indexer. If you use Eclipse for the Maven-based project be sure to try this stuff out. It’s really refreshing approach to working with your poms (especially a quick search funcionality).

While I was at this, I wanted to see if there were any progress on web sites that offers similar services (which I think is important tool for Java community). mvnrepository.com has some problems with stability (and performances) lately and I was glad to see Xavier Hanin’s new project called JavaRepo. It’s a promising start, (simple UI and useful info) and could be made into a really useful service. What I would like to see from a service like this is:

  • Ability to add additional public repositories (snapshots, etc) and snippets
    for configuring poms with appropriate repository definition
  • Ability to “subscribe” to a module and receive new release notifications in
    news readers (RSS/Atom)
  • Better result sorting (newest revisions first, relevance, etc.)

I know all this takes time to brush, but it’s great to see things are moving in the right direction.

Shashank Tiwari

AddThis Social Bookmark Button

If you haven’t read anything really silly in a long time, then here it comes!

The caption of a picture in the Wired magazine reads –
“Jason Fried (left) and David Heinemeier Hansson of 37signals helped develop much of the software that has enabled Web 2.0. Photo credit: Jessica Wynne.”

Here is the link to the original article and the photo — http://www.wired.com/techbiz/media/magazine/16-03/mf_signals

I am wondering if Wired has created a new definition of web2.0! Folks at zillions of companies including Google, Yahoo, Wikipedia, Adobe, Sun, Microsoft and ….developers programming in tons of technologies including JavaScript,PHP, Python, ActionScript, Java and ….you are all out of luck :)

What do you think?

Tim O

AddThis Social Bookmark Button

“Get Over Yourself” is advice I’d give to anyone trying to get into technical writing, it’s the technology, it isn’t you.

It isn’t like I’m against tone and color in writing. I enjoy Jim Elliott and Brett McLaughlin, and I learn a lot from both of them. But, they are original, they earn it. I like Scott Oaks style, personable, but not over-friendly - Java Threads was one of the best books I’ve read. What I’m getting sick of is technical writing riddled with too many jokes, asides, stories about extreme sports. I don’t like reading books where every chapter starts out with a story about hiking, or a Daily WTF story about some horrible mythical corporation full of complete idiots (I’ve worked there, I’ve written those chapters).

As an industry, I think we’re too focused on personality these days. There’s a class of conference rock stars that runs around and talks trends, and I think some of this has leaked over into the way we write technical books. Everybody writing a book these days wants to become “that guy with that blog that I saw at that conference”. So in the tradition of Charles Nutter, I’m going to ask the question: Can you effective be one of those travellng conference rock stars? Write a series of well written books? And, be a formidable coder on several core open source projects at the same time? Probably not. So, let’s stop building up the “Coder” as “Superman” idea.

These days, I’m ready for technical books with a little less personality and a lot more substance. Please don’t get me wrong, there are certain authors I like personality from, I’ve already listed a few whom I read, but whenever I come along a new technical book these days I’m looking for technical content, not a new best friend. Antisocial? Yeah. Totally, I’m the guy at Starbucks that doesn’t appreciate the small-talking Barista. Alone? No, I think anyone heads-down at work, reading a book about something like Ant, wants a concise, easy-to-read reference that keeps the chitchat to a minimum.

I’m tired of your funny technical stories and your metaphors: please, just the facts. OK, wait, calm down. I’ll read and enjoy the witty stories, as long as the ratio of hard technical content to witty stories is greater than 10:1.

It’s a little harsh, sure. But, I don’t think I’m alone in this idea. I was just talking to someone who bought a new book on Ruby the other day. He told me that while it was informative, he found it difficult to scan. Difficult to pick out the one or two sentences he needed to read in 5 minutes. I can’t say I haven’t had that happen to me lately….. I’m turning down the color commentary dial at least for the next few books.

PS: It is also a message I’d give to the subjects of this photo in a recent Wired article. Vamping coder rock stars. I’m sure the persons pictured in this article had no control over the Wired photographer, but reading this makes me want to write more Java. Honest, a picture like that makes me want to attend less conferences, write more books, and get heads down into some coding.

Growing tired of the rock stars in programming that hire professional photographers to bring dramatic lights to the studio so they can looked seductively into the camera for some Ruby on Rails blog they are hosting (no DHH I’m not talking about you). I think we’re straying from technology and getting too much into personality. (Ironic, where’s the technology in this post.)

(For the record, this is about no one in particular. Matt, this isn’t about you. Raible is someone I read, listen to and I follow his recommendations frequently. Charles Nutter, also not about you. If I were president, Charles Oliver Nutter would be in my cabinet as the first Secretary of Dynamic Languages. This is about everyone. And, before I make DHH curse at me, this isn’t about you, I’m sure you find that photo as ridiculous as we all do. Hell, people, this is about me.)

Shashank Tiwari

AddThis Social Bookmark Button

In the last few years India has emerged from being a small outsourcing destination to a large computing powerhouse (especially as far as programming resources and their critical skill sets go). Its one place that boasts of millions (not just thousands anymore!) of Java programmers. One reason for this growth has been the love for Java among enterprise customers up here in the United States, who outsource work down to India, and another has been the continued support from Sun and its affiliates (many of who train around its well recognized certification programs) in providing ample training and mentoring infrastructure in India. Yet, one more important reason has been the use of Java (over its traditional counterparts — i.e. C & C++) as the language of choice for instructional purposes in teaching programming languages at educational institutions. Finally last but not least, Java is easy to learn and there is too much out there on the web to help you get started :)

In the last couple of years Java has seen strong competition from two directions. The growth of Rich Internet Applications (Ajax and Flash platform based) got many Java programmers to use non-Java UI technologies with there Java servers and the advantages of dynamic languages (like Python and Ruby) lured the Java programmers away from the language towards efficiency and “more-with-less”. This phenomenon is global but local impact (in the United States) has so far been the greatest. However, it got me curious to see how these changes were impacting the millions in India. I started out by finding out the “State of Flash based RIA Adoption” by engaging in a conversation with an active developer and community leader to get a feel of what’s its like out there in the field. I plan to cover Ajax and the dynamic languages related discussion in subsequent posts.

Paul Browne

AddThis Social Bookmark Button

My fellow Java Developers. Two years ago I wrote an article on ‘Web 2.0 and Enterprise Java - move over Struts‘ looking at what was likely to replace Struts 1 (then and now a de facto web standard). How did our predictions fare?

Remember that article (and this one) isn’t looking for technical best, but which is going to be a best investment of your time to learn (in a mercenary commercial sense). And if you’re deciding which to use in a project , which framework is going to be easiest to support in 5 or 10 years time?

Broadly speaking, the frameworks we talk about break into two types: those that treat the web as a set of pages, and those that treat the web as a set of components (think Visual Basic, Delphi or Oracle Forms act-a-likes).

So , what has changed in the last 2 years:

  1. The rise of Spring. Not only has it gone mainstream, but the Spring MVC, Spring Webflow and Spring-JavaServerFaces are very powerful and widely used web frameworks. A sign of how things have changed is that for Sruts 1 the Spring guys wrote the integration for the (then) bigger Struts framework. For Struts 2 , the integration was provided by the Struts community. With the forthcoming Spring 3 release the framework is increasing momentum; More annotations and less XML in Spring MVC; Rest Web Services out of the box, support for Dynamic languages like Groovy and Spring Webflow becoming a more ‘just use it where you need it’ solution.
  2. Adobe Flex and OpenLaszlo - Flash graphical interfaces on the Web, built using Java. I don’t think these will be *the* mainstream choice but I do think the will be more than a just a niche. And for design led companies, nothing else (not even Microsoft Silverlight) can come close in terms of a user ‘wow’ factor.
  3. JavaFX and Applets done right (Jim Weaver has a good article on this). More of a competitor to Adobe Flash as both are rich content in the browser using an easily obtainable plugin. JavaFX will appeal to developers because of it’s Java like syntax. I hope I’m wrong, but for rich web content, would you put your money on Sun (an Engineering led company) or Adobe (an almost apple-like design led one)?
  4. Frustration with JSF (Java Server Faces). For the last 3 years I’ve thought that ‘*this* is the year of JSF. I’m still waiting not because of lack of demand (as web apps become more complicated and use more Ajax they become more like the JSF component based model). It’s now uphill for JSF as I (and a lot of other Developers) have given up. I’m still waiting for the ‘EJB 3′ moment when JSF becomes more simple and more usable. Remember , we ‘re not talking about technically best, but which is going to be in widespread use.
  5. Google Web Toolkit (GWT). Looking at it one way , GWT is JSF done right - a component based web framework , but one that is fast and has a lot of community support. Even then it took me a long while to warm to GWT - I’ve bad memories of web-components that hide their internals (remember Microsoft Interdev 10 years ago?) . What got me over the hump was thinking of GWT as a compiler not to Assembly or bytecode , but to Javascript and HTML.

How has Struts 2 got on in the meantime? I’m not sure. Remember , Struts 2 is very different from Struts 1. Conceptually it’s very similar to Spring MVC (Simple Java Beans based with configuration); Slightly easier to learn and maybe slightly less powerful than Spring (although both are more than capable for most Enterprise web applications.

The ‘I’m not sure’ bit comes from two (non technical) factors:

  1. Struts 2 hasn’t achieved the massive Enterprise developer mind share that Struts 1 did. It’s a better framework, but it’s got more competition.
  2. If you’re using Spring in the middle tier, why not have one less framework and use Spring MVC (instead of Struts 2) in the presentation layer as well?

Back to the previous predictions , how did we get on?

Scenario 1: Adding Ajax to existing Struts Applications. Use AjaxAnywhere - closest to the approach taken in the article Sprinkle Some Ajax Magic into your Struts Web Application. Despite writing this article , I see the frameworks evolving rapidly to the point where you would only take such an approach for adding Ajax to ‘Legacy’ applications.

How did we do? I’d maybe widen the choice of Ajax Libraries (to include DWR , Dojo, Prototype and others) but the basic idea of evolving rather than replacing your Struts 1 app still holds true.

Scenario 2: Need Ajax Now for a new Java Application. Use Appfuse as it gives Struts, Ajax (with DWR) and the possiblity of JSF integration now, all ‘out of the box’.

How did we do? I still recommend AppFuse, as it combines (name-your-web-framework) with Spring Hibernate(and other ORM) and Maven. However I’d now tend towards choosing Spring MVC (unless you’ve a reason to use Spring 2), given that you’re probably already using Spring in the mid tier.

Scenario 3: Medium Term. Use an implementation of JSF (either MyFaces or whatever Appfuse promotes - probably Struts Shale). Struts Shale (JSF) has so far released only ‘overnight’ builds. Apache MyFaces (JSF) tool support and Ajax capabilities are likely to improve over time. Both Struts-Shale and MyFaces are likely to play well with AppFuse , making it a safe bet for investing your time checking it out.

How did we do? Struts2 and Spring both still give you migration route to JSF. But do you want it?

So out of the creative ajax-induced chaos of 2 years ago, I see 4 or 5 clear choices in Enterprise web frameworks: Struts 2 (as a follow on from Struts 1). Spring MVC, due to the huge mindshare Spring has on the mid-tier. Google Web Toolkit , both as a natural home of frustrated JSF developers , and because who’s going to argue with the people who gave us maps and mail? Flex, because Flash apps done well just look so good. And JavaFX, because Applets-haven’t-gone-away-you-know.

In my view, we would have been delighted to have any of these framworks 5 years ago. And each (for different reasons) is likely still to be popular in 5 years time. Your missions now is to pick the one that suits your project needs.

Robert Cooper

AddThis Social Bookmark Button

So I want to pontificate about SOA in the Enterprise for a few minutes here. I, as an “enterprise” developer obviously have an opinion on this topic, but this final rant was spawned by listening to Dalibor on Java Posse speaking of OSGi in the Enterprise. I had a similar conversation with 
Brian Ehmann, the Java Posse intern, a while back. So I want to address several things.

First, I want to talk about OSGi, and why I would never allow it in “my” enterprise. In “my” enterprise I want absolute control over what every service has in its runtime environment. Indeed, as a longtime Fedora user, one of the things I loathe about its Java support is the dependency system that works just as Dalibor describes — at the OS level. The beauty of Java on the server is that applications and their API dependencies can be packaged into a single artifact (WAR/EAR) that is completely isolated from the library install or configuration of the server itself. Anyone who has dealt with install libs on Unix machines understands this. Indeed, if any two of your “enterprise apps” had to have the same version of something even trivial, like Log4J, this could become a serious problem for deployments.

Secondarily, the last thing I want is my application “updating” itself without my (or Major League Baseball’s) expressed written consent. One of the “theories” I have espoused for a long time, and indeed one of the reasons I fell in love with J(2)EE is the WAR  file, and having a singular artifact from the developers. A WAR/EAR file is an artifact that can be built by development and move seamlessly from development, to QA, staging and production as a singular, atomic unit. As soon as you introduce dynamic dependency updates in your production systems, you have lost this atomicity in terms of production bits. It is true that OSGi does not mandate this loss of atomic control, but it does encourage it.

Of course, this example has a certain narrowness of focus. Of course things within the enterprise change, but one of the advantages of a Web Services based infrastructure is low-level dependencies as I have discussed to this point are maintained independently. At the service level, of course you need to control change. In my current environment we do this by endpoint management and control. This is one of the things that strikes me as a failing of “SOA” as a “solution”. Endpoint discovery is almost never a real problem for the enterprise. Low level network services like DNS are perfectly adequate for controlling this. Barring that, in the “WS” world. simple things like controlling HTTP routing through Apache or a specialized load balancing product work well. These solutions make it easier than most “SOA” products to run multiple live versions of a service without forced deprecation as well. Sure OSGi can operate at this level for service version control, but why trust it? Why allow binary update of runtimes on servers when endpoint URIs are easier to control over time?

Finally I want to address the issues of SOA as a failed technology. Bill de hOra and Joe Gregorio have noted that SOA has reached the “assign blame” state of failure. Indeed, here on the O’Reilly network shadows of this meme have kicked around.. I want to note that SOA is still a valid idea, but much like BPM, the marketing doesn’t live up to the hype. In enterprises with “architect” staff who are fundamentally unqualified– though I don’t believe the position is unnecessary in medium-large organizations — or a technical debt load that has become unmanageable, SOA proffers no real solution to any problem. Companies selling their SOA product as a silver bullet to said architects that will eradicate said debt are doing so at their own peril. Best case, their thousands of dollar projects will be quickly forgotten failures. Worst case, these enterprises will feel scorched by the failure and never want to deal with the same companies again. In reality, the former is most likely, since the people making the decision to go with the failed technology products will keep their jobs, blaming the failure not on their own lack of understanding of the enterprise they are responsible for but the vendors. Indeed, these sales relationships mean the same vendors get to come back when the next “Silver bullet” enterprise solution is available.

Shashank Tiwari

AddThis Social Bookmark Button

Bruce Eckel says Java is at an “Evolutionary Dead End”. His perspective is that retrofitting newer features into Java is making it absurdly complex. He states the choice is between no more evolution or breaking away from the past. In any other scenario he suspects things are only going to get worse. As a passing by remark, he proposes moving on to Scala as an exit strategy, if Java continues to evolve while honoring backward compatibility.

Technically his point is valid, realistically what are the millions of Java developers who build Java applications at thousands of enterprises going to do if they can’t incrementally take advantage of some of the newer features? It may be possible for Ruby or even Python to radically break away from its earlier versions and start on a fresh slate because not only do they have lesser number of deployments but on an average they have programmers smarter than the average corporate journeyman.

Java has evolved from being a replacement for C++ to an all pervasive cross domain programming language. One of the primary reasons for this growth has been the abundance of features, availability of commercial and open source implementations of these features and wrapping up of these features in all sorts of APIs, with the assurance of stability.

If we drop everything and restart, won’t Java be a completely new language? How would we guarantee we get everything right this time around? Which portions of Java will benefit from reinvention the most? What will we do while we are busy reinventing, knowing what we are doing is soon to be rendered obsolete — it won’t get done in a jiffy in any case?

Shashank Tiwari

AddThis Social Bookmark Button

In a recent interview Dr. Gosling said -
“If you look at something like Flash, when you get to the much more advanced stuff — with richer interfaces, more complex network protocols, more complex APIs — it really falls short.”
Source : Redmond Developer News

While, I would agree with Dr. Gosling, that the Flash VM, the ActionScript library and the Flex framework is not a be-all and end-all RIA solution (remember that its incarnation as a application developer’s tool — as opposed to a designer’s easel — is fairly recent and it is continuously and rapidly evolving as we speak!), I have a feeling Dr. Gosling is actually saying that the grapes are sour ! (For those who may not be familiar with the fable of the The Fox and the Grapes read on and you will quickly see the connection.).

At this time in its current form and shape Flex is a great option. Further, far from being competitive, at Saven Technologies, we have experienced that Java and Flex are complementary and can help build rich interfaces fairly effectively. Let me explain some more of this, but before that let me dissect Dr. Gosling’s comments and set the context.

Dr. Gosling has specifically pointed out that the shortcomings are related to support for networking protocols and complex APIs. My reply — TCP and UDP are two popular transport level protocols. Flash supports TCP. It does not support UDP. At the application level Flash supports HTTP and HTTPS. It supports AMF, which is a SOAP like but more efficient message format, and RTMP, which helps stream audio, video and data across the Internet. It does not support many application level protocols including SMTP, POP3, RTCP and many more. With the protocols in Flash repertoire one can build most consumer applications that utilize HTTP, Web Services and RESTful constructs.

One of our financial services clients was not satisfied with this. Not only did they want remote procedure calls, they desired real time data push and secure connectivity. With the help of LifeCycle Data Services, a server side integration technology that runs without a fuss in any Java application server, and the protocols mentioned above (AMF and RTMP), we could easily achieve what our clients desired. LifeCycle Data Services has open source cousins — BlazeDS, GraniteDS and more.

So while Dr. Gosling is right that Flash does not support as many protocols as Java does and he is also right that it does not have direct support for complex APIs, let’s say for messaging systems or database connectivity, the question is that does flash (with its Flex framework) really fall short because of the lack of these. Not really, on the contrary it piggyback on Java and PHP and others for such extensions. We are primarily Java experts who graduated to using Flex as the RIA and we see no trouble in leveraging the Java infrastructure that is so rich and robust. In the application that I was talking about earlier, that required real time updates, we used JMS for subscribing to the market data feed publications. Flex messaging and JMS worked well together and it was just fine.

Finally, Java Applets has support for many networking protocols and complex APIs, then why is it falling short of expectations? Weren’t there other things, including the well known JRE version mismatches that brought it down? Why is Sun creating JavaFX if the most critical ingredients — at least the way its worded it makes me believe that these are so — are already brewed in?

I feel very disappointed when a person I deeply respect and revere needs to make such comments. Java as a language and platform is very comprehensive, user friendly and productive (despite all the noise from the Rubyists) and works in harmony with many other technologies, including Flex. If JavaFX and the Consumer JRE deliver the promise I am happy to adopt it, as I have adopted Applets, Swing and the Java web application technologies so far.

Dejan Bosanac

AddThis Social Bookmark Button

If you haven’t already, be sure to read Steve Yegge’s post on his experience of dealing with large code bases (it’s a bit long post but an excellent read).

He explains the maintenance nightmare of his 500.000 lines of code game written in Java and quite correctly concludes that code size is a crucial problem for big software projects.

Shashank Tiwari

AddThis Social Bookmark Button

Let me start by wishing everyone a happy new year ! I hope 2008 is prosperous and peaceful for all of you. For many of you who still take pride in being a Java developer, I also put down a list of top 5 expectations from the year that has just started. It may be presumptuous on my part to create a single list of top 5 expectations for the eclectic world of Java developers but none the less I will do it! Some of you will agree, some of you will vehemently disagree and the rest will remain silent. In all the cases though I hope to provoke you to think about what you want and desire from the language and platform that you are so intently connected with.

So let’s get started -

1. JavaFx transforms from hype to reality
In 2007 starting with JavaOne, we all heard that the messiah has arrived in the form of JavaFX. Unfortunately, the entire promise is taking too long to manifest into a real option. Hope 2008 either converts it into a real, simple and viable option, so that Java developers don’t necessarily need to take refuse in the alternative rich interface technologies, or just brings all the hype to an end.

2. Glassfish enters the application server choice bundle.
Glassfish is a fantastic open source Java application server and platform. It was the first one to be compliant with the Java EE 5 standards. It has implemented almost everything that the JCP is churning out. It works and it is powerful. However, it still remains an unknown application server in the enterprise. Most managers have never heard of it, many Java developers have never bothered to download it and many others think its not a serious option, even without checking it out. Hopefully developers start taking its advantage in 2008.

3. Lightweight/Heavyweight discussion is put to rest
With Java EE adopting many of the advantages of frameworks, tools and libraries that figured out how to do things in a simple and straightforward manner, the divide between the so called traditional heavyweight Java and its lightweight alternatives is blurring. However, many of the staunch believers and promoters of the lightweight frameworks are not letting the debate rest to peace. May these folks find something more useful and new to champion ! Also, those who switched sides altogether in favor of those dynamic options, beyond Java, that was supposed to cleanse them of all evil may return once they find that their simple framework fails to deliver simple database manipulations or relies on your same old ways to integrate with other things in the enterprise.

4. Google likes Java, somebody convince Apple too :)
The iPhone is popular and many iPhone applications are being built. So far Java is poison for Apple. Hopefully things change this year. Hopefully Java developers gain from this surge! Google has already helped the world of Java developers with its numerous open Java APIs and services. Its has also reinforced that when the winner adopts you, you flourish and proposer! So its not as much about being with Apple the company but its about being in the winner’s camp.

5. Unify some and sunset a few others
Plurality in the world of Java provides ample choice to do even the most mundane of tasks but it often leaves Java developers confused in the middle of this abundance. Java developers for a few years now spend a considerable amount of time contrasting and comparing the numerous commercial and open source frameworks, tools and libraries to get their job done. Hopefully, 2008 sees some of these projects merging and some others just waning into obscurity. Hopefully the feudal lords realize that although dictatorship is detrimental, a unified nation state has its benefits.

Thats all for now!

Speak up! Say whatever you have to say, its all about what you want:)

Once again, a happy new year!

Dejan Bosanac

AddThis Social Bookmark Button

There’s a quite interesting discussion in the blogosphere about proposed extension methods feature for Java 7. The problem tackled by this proposal is how to extend an API (interface) with new methods without breaking existing implementations. The example used in a discussion is a List interface and the sort() method. In order to add another method to the existing interface, Java developers today create static utility functions. Take for example the java.util.Collections class, which is a set of static helper methods for working with collections. Among them is of course the aforementioned sort method.

Robert Cooper

AddThis Social Bookmark Button

I want to talk a little about Android. I am very much going to sidestep the holy war about is it or isn’t it Java, except to say, this looks a lot like something that would have been derived from the Danger stack. The commonalities are striking. As a Sidekick owner, I am terribly pleased with “Java-ish” development for that platform, and I think seeing something similar in wide deployment is great. That said…

First, lets talk about the Android UI API. I recall last year at Sun Tech Days,”The Gos” was asked what, in retrospect he would do different with Java. The first thing he came up with was the Swing API. The “747 Cockpit” feel of the API is overwhelming to new users. Frankly, Android takes this to a whole new level. Just look at the JavaDoc for the Checkbox class:

Constants inherited from class android.view.View
Fields inherited from class android.view.View


Public Constructors

          CheckBox(Context context)
          CheckBox(Context context, AttributeSet attrs, Map inflateParams)
          CheckBox(Context context, AttributeSet attrs, Map inflateParams, int defStyle)
Methods inherited from class android.widget.CompoundButton
Methods inherited from class android.widget.Button
Methods inherited from class android.widget.TextView
Methods inherited from class android.view.View
Methods inherited from class java.lang.Object
Methods inherited from interface android.view.KeyEvent.Callback
Methods inherited from interface android.graphics.drawable.Drawable.Callback

Now, it certainly makes sense for everything to extend View, but View has a helluva lot of stuff on it. I am pretty sure my Checkbox doesn’t need scroll setting, for instance. There are also things like getDrawingRectangle() that seem like they would be better served with internal implementation to a Painter, rather than everything right there.

There is also a dearth of Interfaces to mark functionality. For example, the MenuBuilder.ItemImpl. Notice the crossover with both View and Compound button above.

Public Methods

        int  getGroup()
Return the ordering group of this menu item.
        int  getId()
Return the identifier for this menu item.
        Intent  getIntent()
Return the Intent associated with this item.
        int  getShortcutAlphabeticKey()
Return the key for this menu item’s alphabetic shortcut.
        int  getShortcutAlphabeticModifier()
Return the modifiers of this menu item’s alphabetic shortcut key.
        int  getShortcutNumericKey()
Return the key for this menu item’s numeric (12-key) shortcut.
        SubMenu  getSubMenu()
Get the sub-menu to be invoked when this item is selected, if it has one.
        CharSequence  getTitle()
Retrieve the current label text of the item.
    final    View  getView()
        boolean  hasSubMenu()
Check whether this item has an associated sub-menu.
        void  invoke()
        boolean  isCheckable()
Return whether the item can currently display a check mark.
        boolean  isChecked()
Return whether the item is currently displaying a check mark.
        boolean  isFocused()
        boolean  isSelected()
        boolean  isSeparator()
Check whether this is a separator item.
        boolean  isShown()
Return the shown state of the menu item.
        void  sendSelectionChange(boolean selected)
        void  setAlphabeticShortcut(int modifier, int alphaKey)
Change the alphabetic shortcut associated with this item.
        void  setCallback(Runnable callback)
        void  setCheckable(boolean checkable)
Control whether this item can display a check mark.
        void  setChecked(boolean checked)
Control whether this item is shown with a check mark.
        void  setClickListener(OnClickListener clickListener)
Set a custom listener for invokation of this menu item.
        void  setIntent(Intent intent)
Change the Intent associated with this item.
        void  setNumericShortcut(int numberKey)
Change the numeric shortcut associated with this item.
        void  setSelected(boolean selected)
        void  setSelectionListener(OnSelectionListener selectionListener)
Set a custom listener for selection changes of this menu item
        void  setShortcut(int numberKey, int modifier, int alphaKey)
Change both the numeric and alphabetic shortcut associated with this item.
        void  setShown(boolean shown)
Return the shown state of the menu item.
        void  setTitle(CharSequence title)
Change the label text associated with this item.
Methods inherited from class java.lang.Object
Methods inherited from interface android.view.Menu.Item

Just having marker interfaces for things that support Focus, Check, etc would really help clean some of this up from a API standpoint. Now, getting around some of this Cockpit feel should be easy, since Android includes a declarative XML UI system out of the box.

Now maybe I am just missing something here, but:

<?xml version="1.0" encoding="utf-8"?>
<!-- Demonstrates using a relative layout to create a form -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/blue"
                android:padding="10px">

    <TextView id="@+id/label"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:text="Type here:"/>

    <EditText id="@+id/entry"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:background="@android:drawable/editbox_background"
              android:layout_below="@id/label"/>

    <Button id="@+id/ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/entry"
            android:layout_alignParentRight="true"
            android:layout_marginLeft="10px"
            android:text="OK" />

    <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeft="@id/ok"
            android:layout_alignTop="@id/ok"
            android:text="Cancel" />
</RelativeLayout>

There seem to be a few shortcomins here. The schema URL doesn’t seem to resolve to anything meaningful. It *seems* to me, and I could be wrong here, that there is no way to use non-Android provided widgets in your UI. Compare this to the forthcoming GWT declarative UI XML:

<!-- Note how we add a new namespace for the application's package -->
<app:ButtonTree
 
xmlns:g='http://code.google.com/webtoolkit/com.google.gwt.user.client.ui'
 
xmlns:app='http://code.google.com/webtoolkit/com.example.myapp.client'
/><g:Tree xmlns:g='http://code.google.com/webtoolkit/com.google.gwt.user.client.ui'>
 
<g:TreeItem>
   
<g:Button>Do something</g:Button>
 
</g:TreeItem>
</g:Tree>


Here the namespace maps to a package, making it easy to build UIs with other components. Another thing that stands out about the declarative UI stuff is the lack of CSS. While the Android UI lets you specify design elements in:

The following values are supported for dimensions (described in TypedValue):

  • px (pixels)
  • dip (device independent pixels)
  • sp (scaled pixels — best for text size)
  • pt (points)
  • in (inches)
  • mm (millimeters)

Which is great. However, it seems like rather than specifying margins, paddings, alignments, etc, in the XML files, being able to define these in a CSS, or CSS-like file would seem like a better idea. Then, even, allow me to specify different CSS files based on different device UI types: screen size/aspect ratio, portrait vs landscape mode, etc. This has always been one of the failings of mobile development as long as I can remember.

So that summarizes what I don’t like. What I do like is the great separation of functionality into Intents, Activities and Views. To summarize this, you can expose functionality of your application, or use the Android base functionality, by invoking Intents. These intents can then launch something else, or not if the phone won’t do that, or the needed software isn’t there. These can take you to Activities. Activities are single screen-type states in your application with a managed lifecycle. Activities then reference Views with a clear binding pattern, and a suspend-resore lifecycle that lets not just your whole application, but sub-elements of your application (List Buddies, Chat Window, Add Buddy individually) be suspended out of the running state and navigated around. Honestly, it makes me feel better about some of my own API design, I have GWT APIs in Gwittir that look very similar. :)

While I haven’t spent a great deal of time with it yet, there are a few things that stand out as big points of pain in the current developer tooling. There is no way to toy around with the LocationManager class in a real way because the emulator just doesn’t have a way to alter this information at runtime. It is also really complicated to mock out the ApplicationContext class for unit testing your code — which seems very un-Google. While Android is easily one of the most documented new systems I have recently — maybe ever — seen, approaching the docs the first time is terribly imposing. John Lombardo at LinuxDevices.com has a great intro and guide to the guides.

Hari K. Gottipati

AddThis Social Bookmark Button

Google’s Android software for Open Handset Alliance raises eyebrows of every Java developer because of its non-standards. Instead of supporting the Sun’s open source efforts on Java, Google went in a different direction and came up with its own JVM named Dalvik which executes Java programs on Android phones. It is neither Java SE, nor Java ME. It is Google’s in house version based on some of Java SE packages, apache commons, httpclient, junit and their own user interface instead of standard AWT, Swing. It also has android.* packages for Telephony APIs, power management and SMS. (List of Androids packages). In a way its similar to the GWT which uses Java as its development language but does not support the full JDK.

The byte code execution is also different. Instead of executing the .class files, Dalvik VM executes the .dex files which are optimized for minimal memory footprint. The dx tool(part of Android SDK) transforms .class files into .dex files.

We have enough problems with Java mobile development already. Not all phones support all the same Java standards, so there is no guarantee that the same software will run on multiple devices, as the “write once, run anywhere” Java tagline promises. Now Android is going to create more problems than solving. With this, programmers will have a new breed of Java to develop mobile applications, those cannot be ported to any device except Android powered phones. We already have enough versions(standards) of Java, why do we need another one?. I don’t think any Java developer is interested in developing the applications in non-standard version, unless you want to win the 10 million dollar prize? It sounds like Google is trying to bribe the Java developers to adopt this non-standard Java with 10 million dollar prize. Well, may be its another Google’s don’t be evil policy -:)

Google tweaked the JVM to improve the performance of applications for the Open Handset Alliance phones. In fact, for the same tactics, Sun sued Microsoft a while ago. Knowing this, how Google managed to get the license from Sun to tweak the JVM? In fact, they didn’t - according to MIT research scientist Stefano Mazzocchi:

But Android’s programs are written in Java, using Java-oriented IDEs (it also comes with an Eclipse plugin)… it just doesn’tcompile the java code into java bytecode but (ops, Sun didn’t see this one coming) into Dalvik bytecode.
So, Android uses the syntax of the Java platform and the java SE class library but not the Java bytecode or the Java virtual machine to execute it on the phone (and, note, Android’s implementation of the Java SE class library is, indeed, Apache Harmony’s!)
The trick is that Google doesn’t claim that Android is a Java platform, although it can run some programs written with the Java language and against some derived version of the Java class library. Sun could prevent this if they had a patent on the standard class library, but they don’t and, even if they did, I strongly doubt it would be enforceable since Android doesn’t claim to be compatible (and in fact, could very well claim that their subset/superset is an innovation on the existing patent and challenge Sun’s position).

Wow! what a smart approach! I am wondering what the Sun’s reaction is going to be!!!! As a Java developer, I don’t want to develop the applications that only run on Android even if they give 10 million dollar prize. If I did that, it would be encouraging such evil practices of creating non-standard Java.

Why Google is not following the open standards(Java is open source)? Why they are tweaking the standards? What happened to Google’s “Don’t be evil” policy?

What is your take on this?

Tim O

AddThis Social Bookmark Button

I continue to believe that Maven is the first choice for build systems despite the lack of quality documentation (which is a continued problem). Why? (Or specifically, why should an open souce project use Maven above other build systems?…..)

…open source projects benefit from having the most widely portable build possible. Widely portable builds reduce the inefficiencies associated with contributing to a project. In an open source project (such as Maven) there are two distinct groups: end-users and developers. When an end-user uses a project like Maven and decides to contribute a patch to Maven, they have to make the transition from using the output of a build to running a build. They have to first become a developer, and if it is difficult to learn how to build a project, this end-user has a disincentive to take the time to contribute to a project. In a widely portable project, an end-user doesn’t have to follow a set or arcane build instructions to start becoming a developer, they can download the source, modify the source, build, and submit a contribution without asking someone to help them set up a build environment. When the cost of contributing source back to an open-source project is lower, you’ll see an increase in source code contributions, especially casual contributions which can make the difference between a project’s success and a project’s failure. One side-effect of Maven’s adoption across a wide group of open source projects is that it has made it easier for developers to contribute code to various open source projects.

In other words, even with Maven’s problems (which will shortly be addressed, I promise), it still defines a common interface that many developers are familiar with. If you continue to use some custom procedural build system (even in your closed corporate environment) you are bucking the trend. The common interface, the ability to just “sit down in the driver’s seat” and go, is more important than making sure that some highly opinionated software architect at a very large organization is happy with the “cleanliness” of the Maven repository or that someone feels that the Maven conventions can be bent to fit their own conventions.

Go ahead, adopt your own build process because you just *think* you know better, and have fun maintaining it. I know one thing about build systems, they are the last thing you need to be worrying about and your clients or employers rarely care to spend money on your clever, custom build system.

Robert Cooper

AddThis Social Bookmark Button

Google’s much hyped OpenSocial API finally appeared on code.google.com. For the most part it is “Yet Another GData API.” Which is good, and bad. Good in that people pretty much understand it. Bad in that it seems really half-baked to me.

Let’s start with the sample friends list. This would live somewhere like: http://{domain]/feeds/people/{person-id}/friends

<feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005'>
  <id>http://sandbox.orkut.com:80/feeds/people/14358878523263729569/friends</id>
  <updated>2007-10-28T21:01:03.690Z</updated>
  <title>Friends</title>
  <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sandbox.orkut.com:80/feeds/people/14358878523263729569/friends'/>
  <link rel='self' type='application/atom+xml' href='http://sandbox.orkut.com:80/feeds/people/14358878523263729569/friends'/>
  <author><name>Elizabeth Bennet</name></author>
  <entry>
    <id>http://sandbox.orkut.com:80/feeds/people/02938391851054991972</id>
    <updated>2007-10-28T14:01:03.690-07:00</updated>
    <title>Jane Bennet</title>
    <link rel='thumbnail' type='image/*' href='http://img1.orkut.com/images/small/null'/>
    <link rel='alternate' type='text/html' href='http://sandbox.orkut.com:80/Profile.aspx?uid=574036770800045389'/>
    <link rel='self' type='application/atom+xml' href='http://sandbox.orkut.com:80/feeds/people/02938391851054991972'/>
    <georss:where>
    <gml:Point xmlns:gml='http://www.opengis.net/gml'>
    <gml:pos>51.668674 -0.066235</gml:pos></gml:Point></georss:where>
    <gd:extendedProperty name='lang' value='en-US'/>
    <gd:postalAddress/>
  </entry>
  <entry>
    <id>http://sandbox.orkut.com:80/feeds/people/12490088926525765025</id>
    <updated>2007-10-28T14:01:03.691-07:00</updated>
    <title>Charlotte Lucas</title>
    <link rel='thumbnail' type='image/*' href='http://img2.orkut.com/images/small/null'/>
    <link rel='alternate' type='text/html' href='http://sandbox.orkut.com:80/Profile.aspx?uid=5799256900854924919'/>
    <link rel='self' type='application/atom+xml' href='http://sandbox.orkut.com:80/feeds/people/12490088926525765025'/>
    <georss:where>
    <gml:Point xmlns:gml='http://www.opengis.net/gml'>
    <gml:pos>0.0 0.0</gml:pos></gml:Point></georss:where>
    <gd:extendedProperty name='lang' value='en-US'/>
    <gd:postalAddress/>
  </entry>
  <entry>
    <id>http://sandbox.orkut.com:80/feeds/people/15827776984733875930</id>
    <updated>2007-10-28T14:01:03.692-07:00</updated>
    <title>Fitzwilliam Darcy</title>
    <link rel='thumbnail' type='image/*' href='http://img3.orkut.com/images/small/1193603277/115555466.jpg'/>
    <link rel='alternate' type='text/html' href='http://sandbox.orkut.com:80/Profile.aspx?uid=14256507824223085777'/>
    <link rel='self' type='application/atom+xml' href='http://sandbox.orkut.com:80/feeds/people/15827776984733875930'/>
    <georss:where>
    <gml:Point xmlns:gml='http://www.opengis.net/gml'>
    <gml:pos>53.017016 -1.424363</gml:pos></gml:Point>
    </georss:where>
    <gd:extendedProperty name='lang' value='en-US'/>
    <gd:postalAddress/>
  </entry>
</feed>

So, what have we got here? Well, it is awful little. Title is obviously the person’s name. We have a gd:postalAddress field for an address, a georss:where to locate them on a map (this can be a specific location, or just a city pointer), and a thumbnail. That’s it.

This is what the People Data API specs:

Property Type Description
Name atom:title The desired display name for the user
Image link atom:link With rel=”thumbnail”, a small image URL to represent the user
Profile URL atom:link With rel=”alternate”, the standard profile URL representing the user
GeoLocation georss:where Geographic location of the user. This may be approximate, or rounded off to the nearest city.
email gd:email Email address(es) for the user
IM gd:im Instant messaging adress(es) for the user
Address gd:postalAddress Address(es) for the user.
Phone number gd:phoneNumber Telephone number(s) for the user
Key value parameters gd:extendedProperty As different social networks and other sources of People data have many different named fields, this provides a way for them to be passed on generally. Agreeing on common naming conventions is to be decided in future.

That is really not much. For instance, Given Name and Sir Name aren’t broken out into separate fields. That alone can make importing into a standard address book problematic. Secondly, the link rel=”thumbnail” use is COMPLETELY retarded. It gives no real information, and doesn’t really apply. I don’t understand why Google didn’t use MediaRSS for this, which supports multiple representations of the same media element, contains size information, etc. They already use MediaRSS on Google Video, so I can’t imagine it is a religious issue.

Also, hand-wavy stuff like this always makes me nervous:

As different social networks and other sources of People data have many different named fields, this [gd:extenedProperty] provides a way for them to be passed on generally. Agreeing on common naming conventions is to be decided in future.

Name-value pairs seem really inadequate here. I don’t understand why we can’t, much like the APP specification instructs, say that foreign markup of any nature will be preserved. If I want to sync a contact between two different services, that contact information should simply preserve whatever markup the other services wish to include. Moreover, if I wanted to do something like embedding (x/v)Cards in the entries, seems like that should be just fine.

Finally, it seems to me that doing GoogleAuth everywhere for this is less than optimal. OpenID would be much better and would encourage more adoption at the bottom level of the tech food chain — not MySpace and Six Apart, but Joe Blow’s open source project. But it all goes back to the root of the problem here:

Google didn’t design a spec for interoperability of social networks as much as they built an API for dealing with Google. I don’t think this is what people really wanted here. Aside from the fact that it works on the presumption that everyone is going to clear everything through Google, it is going to require a whole lot of user understanding to make this data really portable.

For instance, it seems to me there should be part of the specification that says profile pages have link rel=”opensocial” pointing to the users individual feed. That is easy to communicate to the user that they can point at a buddy’s page to add them as a friend. If that page also had an OpenID link on it, then cross registration outside of the Googleplex would be easy. If the Microsoft SSE extensions were used, then it would be easy for me to maintain references to my accounts on other systems from each other, so with Alice imports her Orkut contacts to MySpace, MySpace can find the myspace <id>’s from people on Orkut with dual membership and resolve that automatically. There also doesn’t seem to be anything implicit in the auth structure for *requesting* access to profile information. It is common to restrict your exposed profile data to people who are your friends. Having links between profiles on different services — presumably with something more like OpenID auth to establish profile ownership — would allow for this; you could import my full information from my MySpace page into Outlook if you were my friend on Orkut.

In short, I am sure OpenSocial will make a dent in something. But it doesn’t seem to be solving the “Give me a truely portable contact list and identity” that I would really like to have.

Robert Cooper

AddThis Social Bookmark Button

The REST zealotry needs to end.

First, let me establish my bonafides here. I work on the ROME project. I built the first module for Google Base. I have used the Propono project to build an APP service. I use REST. REST is a friend of mine.

Here is the thing:

People need to own up to the fact that SOAP has its place. Yes, “SOAP” is neither “Simple,” nor arguably about “Object Access,” and marginally a “Protocol.” But SOAP and WS-* have their place. Just own up to it.

One of the things I had a chat about at JavaOne last year, over a number of free drinks, is that one of the big advantages of SOAP over REST was the use of nillable. There is a complete semantic difference between and the absence of said tag in SOAP. This is a clean advantage over REST where the presumption is total replacement and preservation of “unsupported” tags. In APP this is generally OK, but lets face it, this is a really HARD requirement to meet. The thing is, I listen to the Google Developer Podcast where the idea of adding a “PATCH” method to HTTP is discussed. I read in the illustrious James Clark’s blog about about complex methods for signing HTTP.

So here is my point, REST people… Yeah, SOAP isn’t simple, but the complexity of the envelope tag gives you a clear point to encrypt or pass transaction information. The soap:nillable namespace has to be there, but it doesn’t require a protocolchange. Can’t we just admit that, on a 60/40 basis REST rules? If you want simple and easy and your data conforms to basic preserved ENTITIES, REST is great. When you need encryption beyond basic SSL, differential updates, two phase commits, reliable messaging — all that “other stuff” — WS-* has a place?

I am getting really tired of religious arguments in my space lately. Sure, dynamically typed languages have a place, but static typing has some real advantages. Yes, environment X gives you A, but environment Y gives you B. I am not going to tell anyone that WS-* is the end all be all, but I wish the REST crowd would own up to the idea that WS-* solves some hard problems, and with basic tooling is not “hard to use.”

Tim O

AddThis Social Bookmark Button

Ben Collins-Sussman has an interesting blog entry about Distributed Version Control titled “Version Control and “the 80%”. Here’s an excerpt:

…In a nutshell: with a centralized system, people are forced to collaborate and review each other’s work; in a decentralized system, the default behavior is for each developer to privately fork the project. They have to put in some extra effort to share code and organize themselves into some sort of collaborative structure. Yes, I’m aware that a DVCS is able to emulate a centralized system; but defaults matter. The default action is to fork, not to collaborate! This encourages people to crawl into caves and write huge new features, then “dump” these code-bombs on their peers, at which point the code is unreviewable. Yes, best practices are possible with DVCS, but they’re not encouraged. It makes me nervous about the future of open source development. (Maybe the great liberation is worth it; time will tell.)

I don’t see decentralized version control working for a smaller set of projects like Jakarta Commons. For smaller projects, I don’t think the overhead of a DVCS is worth the effort, but for larger projects like Wicket or Maven, I think DVCS would encourage more external contribution. I also don’t think that forking is the opposite of collaborating - forks are part of the creative (read messy) process of evolving a code base. I can think of a few situations where a fork would have been helpful in the past few years (Struts during the Shale debacle and I’m convinced that someone needs to fork Maven documentation into an external project). An ideal fork competes with the original and inspires change.

…and, if you don’t believe me…

Jason Van Zyl wrote the following email to the Maven developer’s list on September 29th:

…for anyone who has patches or wants to try and work with me to
get changes in I am going to try this method of publishing Maven as a
GIT repository which will allow anyone to clone the repository and
work on any changes you like in a controlled way. Once you clone you
can commit changes to your own copy of Maven and do whatever you
like. Then in order for me to see your changes I can simply pull from
your originally cloned repository to a branch on my side and merge.
Merging is sooooooo easy with GIT. So easy in fact that it makes you
wonder how SVN got it so wrong and makes it so painful compared to GIT.

He continues later in his post:

In the short term I really only want to try with a few people but if
you’re keen, want to learn about GIT (which I highly, highly
recommend) then I will take your patches. I think any developer here
and anyone who has ever tried to contribute changes sees that the JIRA
+patch model is highly unworkable and bordering on completely
useless. JIRA might be fine to raise the issue but with a reference
to a GIT repository to pull from it will make life infinitely easier.
People who are not committers can work with people that are in a way
that resembles everyon being part of the team. Dealing with patches
just sucks ass and as a result we don’t look at them nearly as often
as we should so I hope this can become a model that enables people to
contribute in a more effective way. I’m going to try this with Oleg
but I am highly hopeful. I will help anyone who wants to try this as
I see this as a way to truly collaborate with the community. Down
with JIRA+patches! All hail JIRA+GIT! :-)

Oh, and about Sussman’s 80%. I think we can replace them with some Ruby scripts.

Shashank Tiwari

AddThis Social Bookmark Button

Apache Struts is the most popular Java web application framework till date. However, newer developments have rendered it both obsolete and inadequate. There are a few options that are trying to replace it but there is no clear winner yet! Who do you think is leading and worthy of the position? Which framework should you use today if you are a Java web application developer?

Rich application development technologies, AJAX, RIA or whatever other form that they may manifest in, are currently the most popular web UI technologies. However, Java is still the choice at the server side. Because of this some of the server side UI technologies, based on JSP and JavaServlets, are still prevelant. Many times these server side UI technologies work in association with the rich UI technologies. As an example many developers are incorporating AJAX with Java Server Faces (JSF), the new generation server centric web framework specification from Java. Many others are using Java remoting libraries, open source and commercial, to remote JavaScript and ActionScript calls down to the server side.

Does that mean we should adopt one of the frameworks like Apache Shale that work well with JSF? Does it mean we should use a remoting library with Servlets only, as far as the Java part of the web application goes? Or does it mean we should use a framework that does both - i.e. JBoss Seam?

Shashank Tiwari

AddThis Social Bookmark Button

Google turns 9 today. The official chronological history is online at the corporate history page.

Their most important contribution is the effective search engine they provide. Today, the word searching on the web pretty much implies “googling” ! However, there is another extremely important contribution from their side and that is sharing the code that makes them succeed. Most of you already know and use some of the Google APIs.

So Google now influences not only how you use the web but also how you continue to build the web. This can imply either of the two outcomes - (1) Google the savior - in which case it accelerates liberation of most closed software and compels others to follow and (2) Google the tyrant - in which case it monopolizes not only your business but your mind. What do you think may be the probable outcome? Do you think it makes you uncomfortable that a 9 year old rules your life?

Tim O

AddThis Social Bookmark Button

JavaFX: Anyone out there using it? What are your reactions?

JavaFX was the big announcement at JavaOne this year, and in the intervening months, let’s just say the roar of adoption and support has been underwhelming. Or has it? Post a comment if you are planning to use JavaFX in the near future.

Responses to the previous post: OpenJDK TCK License

Simon Phipps responded to my previous post telling me that I was “free to fork OpenJDK”, but that wasn’t the point. He also goes out of his way to paint me as an Apache partisan. He then went on to say that a TCK license wasn’t even appropriate for Kaffe, Harmony, or GCJ because they weren’t complete. Sorry to belabor this point, but all three of those independent implementations have sought access to the TCK, they did so because they wanted a measure of compatibility (or completeness if you will). Simon is essentially saying neither implementation is worthy of access to the compatibility tests because they are not compatible… Sun is playing word games, and if they want to use open source as a marketing tool, we should be holding them accountable. Play it however you will, but you are using your position as spec lead for Java as a lever to squash any hope for an independent, open-source implementation of an open standard.

Other than this TCK licensing curfuffle, I think Simon Phipps deserves a few minutes of sustained applause, possibly even an uncomfortably long standing ovation for helping to free Java. (I’m just a stickler for details.)

Red Hat’s response to the TCK license

In all fairness to Simon, I wanted to repost some of the inital reactions of RedHat to the OpenJDK TCK License. Andrew Haley of RedHat posted this to openjdk-discuss shortly after the TCK license announcement on August 13th. Here are some excerpts:

…I’m disappointed that the TCK isn’t going to be
available to all GPL’ed Java implementations, including those not
based on OpenJDK. I had hoped to get the Java Compatible stamp of
approval for GCJ.

And, more:

It has been somewhat frustrating that we haven’t been able to work
more closely with Sun on ironing out these problems, but there are
still some legal issues to sort out, and opening up Sun’s
well-established processes is doubtless a huge sink of time.

However I must point out that even given these problems we in the
free software community are in a far better position today than we
were with GCJ (and other free VMs) and GNU Classpath: with IcedTea
based on the OpenJDK code base we are much closer to Java
compatibility.

I’m very excited by the prospect of a 100% free and 100% compatible
Java, and I’d like to thank Sun for that. But still, there is work to
be done.

It’s a mixed reaction but one that seems more positive than negative.

IcedTea

For people who don’t know of the IcedTea distribution it is a temporary form of OpenJDK.

Tim O

AddThis Social Bookmark Button

I remember back to this year’s JavaOne, it was A LOT OF FUN to sit in that press briefing room while jon Schwartz and Rich Green (and the UN guy) talked about how Sun is focused squarely on making the world a better place through developing JavaFX(TM), open sourcing the JDK, and providing mobile phones to impovrished third-world nations.

But, there’s a problem… Sun Microsystems hasn’t really “open-sourced” Java(TM). That’s the truth.

You: What? What do you mean? I went to JavaOne and saw that Sun had “open-sourced” Java(TM)?

Me: Well, technically the source code for OpenJDK is covered under the GPL, but you won’t find any other open source implementations of Java floating around the internet any time soon… Sun is too concerned about competition and maintaining control over the platform.

Me: Java(TM) is a trademark and you haven’t really created a Java(TM) virtual machine until you’ve passed a compatibility kit from Sun. hmmm….

You: Ok, GREAT NEWS, Sun is licensing the compatibility kit to open source implementations. That fixes everything, now Java is really Open Source.

Me: Er, well, not really. They are making it available for JDK implementations derived from OpenJDK. They weren’t really interested in the open source community per se, they were really just interested in bundling Java with Linux distributions. If anything they’ve actively worked to exclude the most dedicated open-source Java developers in a ploy to retain control of “The Platform”. Here read for yourself

“Implementations must be substantially derived from the OpenJDK source
code and must be distributed under GPL which of course would be a
requirement of any implementation making use of code from the OpenJDK
code commons”

That’s what I get from Rich Green’s Orwellian game of verbal twister. It’s just a shame because while it might satisfy the conditions of the FSF in terms of licensing, it has little to do with the freedom to fork (or reimplement) that makes the open source community a vibrant one.

What is Rich Green and Sun Microsystems so scared of? Competition? Are they fearful that Microsoft, Intel, or IBM might start contributing to a non-GPL distribution of Java and improve upon it? Yes, I leave messages in the URLs, from his blog post, it reads clearly: Rich Green is scared of competition.

UPDATE (9/19/07): Just one day after posting this blog entry, we see Can IBM save OpenOffice.org from itself? over at ComputerWorld. Evidently Sun’s other OpenOffice effort is suffering some structural/governance issues.

Robert Cooper

AddThis Social Bookmark Button

I have been struggling with this lately, and Jeff Attwood sums it up really well

But some commenters were understandably apprehensive about the idea of having a Senior Drill Instructor Gunnery Sergeant Hartman on their team, enforcing engineering discipline.

You little scumbag! I’ve got your name! I’ve got your ass! You will not laugh. You will not cry. You will learn by the numbers. I will teach you.

Cajoling and berating your coworkers into compliance isn’t an effective motivational technique for software developers, at least not in my experience. If you want to pull your team up to a higher level of engineering, you need a leader, not an enforcer. The goal isn’t to brainwash everyone you work with, but to negotiate commonly acceptable standards with your peers.

Here is the thing. I fully accept this premise. The problem is one of communication. By that I mean, communicating what the engineering goals should be in a concise form, without starting out having everyone on the same page.

Let me elaborate on this a bit with a couple of personal examples. A *long* time ago, I was tech lead on a dev project. Back when XSLT was brand spanking new, we had a project come through a Professional Services company I was with. I immediately realized we needed something like this, and outlined a whole architecture for a multi-skinned/multi-host/user customized app. Most of the people on the tech team had never worked with any of the technologies before, but I wrote a couple of core classes, and gave very explicit interfaces for each of the components, worked with the “web dev/design” group on XSL and gave them sample documents. Over time the project snapped together like lego, and I was very full of myself. I still feel like this was my best experience with a large team effort, because I was able to build language-level interfaces and test cases and tell people “build this.” Over time, we could optimize later (as you should) and where appropriate, and the architecture grew into a methodology.

Lately, however, I have had a harder time. When you are building more generic frameworks, rather than for a specific app, you need to communicate a *philosophy* of app construction. The problem here is without a “look at this” example, I have not been able to communicate the ideas behind the structure and lifecycle. When you have a team that has diverse backgrounds and maybe doesn’t have the same mental shorthand based on “everyone has built the same apps, read the same blogs, read the same books”, selling, if you will, a new design philosophy is really hard.

The core rules Dennis provides are great:

Be humble. Always first presume that you’re wrong. While developers do make mistakes, and as a new hire you should certainly assist others in catching and correcting mistakes, you should try to ensure that you’re certain of your observation before proudly declaring your find. It is enormously damaging to your credibility when you cry wolf.
Be discreet with constructive criticism. A developer is much more likely to be accept casual suggestions and quiet leading questions than they are if the same is emailed to the entire group. Widening the audience is more likely to yield defensiveness and retribution. The team is always considering what your motives are, and you will be called on it and exiled if you degrade the work of others for self-promotion.

The best way to earn credibility and respect is through hard work and real results. Cheap, superficial substitutes — like best practice emails sent to all, or passing comments about how great it would be to implement some silver bullet — won’t yield the same effect, and are more easily neutralized.

Actions speak louder than words. Simply talking about implementing a team blog, or a wiki, or a new source control mechanism, or a new technology, is cheap. Everyone knows that you’re just trying to claim ownership of the idea when someone eventually actually does the hard work of doing it, and they’ll detest you for it. If you want to propose something, put some elbow grease behind it. For instance, demonstrate the foundations of a team blog, including preliminary usage guidelines, and a demonstration of all of the supporting technologies. This doesn’t guarantee that the initiative will fly, and the effort might be for naught, but the team will identify that it’s actual motiviation and effort behind it, rather than an attempt at some easy points.

There is no one-size-fits-all advice. Not every application is a high-volume e-commerce site. Just because that’s the most common best-practices subject doesn’t mean that it’s even remotely the best design philosophies for the group you’re joining.

My question is: if you have a vision, and want to try something that is honestly new, how do you communicate that vision to software developers… without software?

Robert Cooper

AddThis Social Bookmark Button

So this post is making the rounds amongst the kids. The gist can be summed up with the graphs:

It seems to me that people building LAMP, Ruby, django, or other applications think of themselves more as building web applications with whatever technology tools they need to use: web services, cron jobs, MySQL, ruby, PHP, python, maybe some Java: whatever. What matters is getting the web application working.

People who using Java see themselves primarily as building Java applications that happen to have a “view” (as we OO head-jobs would call it) that’s the web. Our primary goal is the metaphysical and headless application, not the delivery mechanism. Hopefully you can get a sense for my view of Java culture at this point: it’s more concerned with keeping the concepts, work-flows, and design of the application pure and tidy than optimizing the delivery mechanism, or implementation. Them UML diagrams should look good.

So here is my thing, as a Java developer, I am SQUARELY in BOTH camps here. I am going to give you all my dirty little secret:

I think JSF blows chunks.

I think Seam blows chunks squared.

While I can appreciate the design ideals of component based development on the web, each of these technologies, and especially stacked, represent an abstraction above and beyond what HTTP really is that makes me sick to my stomach to think about. I will freely admit, I am a GWT bigot. Once I saw GWT at JavaOne over a year ago, I had the same gut response I had to Java itself having come from the VC++/DCOM world: this is the way we should have been doing it all along. GWT still encompasses this layer on top of native idea, but does it at the right level. GWT doesn’t pretend HTTP is smarter than it is, it just gives you a “real” and reliable client API. Moreover, you still get to run PMD and FindBugs and have good refactoring support on your code as you develop it. Win. Win. Win.

For all the humor about what “QA” loves in the linked article, I have to say “Techops loves ‘technology tools they need to use: web services, cron jobs, MySQL, ruby, PHP, python, maybe some Java: whatever. ‘” One of the things that makes JRuby and Quercus compelling is getting the WAR deployment story. A “mish mosh” application that has 40 steps to deploy to 25 web servers sucks, and it sucks worse than taking time to QA, because deployment (likely) affects the end user and not the organization.

I am not going to say Java is the End All Be All. However, I am certainly not going to poo poo the Java ethos. Granted the Java Web Dev story has not been perfect, but I will hold it up against anything else out there proudly. Moreover, I will give your circa 2002 Struts app credit for maintainability against anybody’s hand rolled PHP, Perl or whatever else App. Frankly, GWT’s unified asset deployment and deferred binding for native hacks leads me to see it as the best successor to Java in “Web 2.0″ development, but frankly anything is better than where we came from. Even RoR, which I have espoused in this space as a PHP killer over a “Java” killer, represents a step forward in maintainable code in the web tier, but only in conjunction with JRuby. The “Check out a tag from svn to all the servers” deployment method will make Techops AND QA ill, nevermind force you to do some kind of rolling load balancer hack to make it happen smoothly.

Shashank Tiwari

AddThis Social Bookmark Button

JBoss Seam and Adobe Flex are two promising technologies. Seam makes it easy to build stateful web applications. It integrates the Java EE frameworks together. Flex is a great rich application development framework. The question is can they and should they be used together?

Seam till its 1.x versions used JSF as the main UI framework. This implied that it was built around a server side UI model. Flex on the contrary is a client side UI framework. Oops! so we have a big disconnect right away! Not really, there possibly are some viable options to make them work together. In the latest version of Seam 2.0.0 BETA the coupling with JSF has been loosened. Also, in the past its been demonstrated that JavaScript UIs (built on frameworks like DOJO or any other) could directly remote to Seam server side components. Remember though that JavaScript runs within the browser whereas Flex applications runs within the Flash VM. Does that matter?One option is to have Flex as the front end and make Flex components remote to Seam? Technically this is a possibility and may be good in situations where Flex is used as a pure view description technology. In fact has anybody wondered writing a JSF render kit for Flex? That would be one nice looking but ugly under the hood hack. The state and event management would be all mixed up and one would end up writing more wiring to save the two together than use in isolation. I know some of you may oppose this thought and may cite cases where you have used Applets as a face for Servlets or similar server side technologies. Yes it works, is it elegant though? And what were the big wins of making them work together anyway? This the same question I ask when I read articles that claim that Spring MVC can work smoothly with Flex and Java Portlets can work effortlessly with Flex. Is it better to make complicated applications by spending more time and energy as opposed to building clean applications faster? In other words is it better to do the right thing or focus on making everyone happy?

So what does it mean in the context of our main exploration of making Seam and Flex work together? We have looked at the dry option of remoting a Flex face to a Seam server side. We could possibly liven it up by managing state on both sides - client and server - and introduce something that could be called a State Transfer Object (STO) to transfer the state information back and forth. Doesn’t sound good! It reminds me of the pain of using DTOs. Is there any other option? My answer is that I don’t know of one yet. I am trying to write a bridge between the two, following the principle of delegation and inclusion of common contexts wherever possible and ofcourse cheating (oh sorry! drawing inspiration) from the JavaScript remoting integration and the GWT integration in the Seam code base. If and when its ready, it would show up as an open source tool for everybody to play with and I will annouce its arrival. BTW, if anyone else here is interested in hacking that with me, you are most welcome to join in. In the meanwhile I would certainly like to hear your experiences in making these two work together. Both real life experiences and armchair musing are welcome.

Jim Alateras

AddThis Social Bookmark Button

On a recent flight from Boston to Melbourne i decided to have a play around with buildr and convert a small rest based web application from maven to buildr. Buildr is a ruby-based DSL build system for Java applications. The ruby plugin comes from the folks @ Intalio and born from their frustration in using maven for build management. The documentation on the rubyforge site is very good and provides a good introduction but to do more you’ll probably need to browse the ruby source code.

It took about a day of playing around before i managed to replicate my maven build, which included compiling, testing, packaging a war and running up the war on an instance of a jetty server.

All extension tasks (ala maven plugins) are written in Ruby so you get all the power and benefits of a turing complete language as opposed to the constraints of maven plugins. It’s definitely much easier to extend buildr with new tasks than to write a maven plugin.

You may have seen Assaf’s claims that builds are faster under buildr and my initial experience seems to confirm this.

If you’re looking at using it beyond a small project have a look at Apache ODE’s Rakefile, which is used to manage multi-project builds.

Shashank Tiwari

AddThis Social Bookmark Button

JSR 314 - JavaServerFaces 2.0 is in the JSR review ballot phase. Check out the details at http://jcp.org/en/jsr/detail?id=314. However, the news is not really that new as conversation about JSF 2.0 was initiated by Ed Burns quite a few months back. For those of you who read his blog, you would be familiar with the JSF 2.0 requirements scratchpad. More recently he summarized the discussions at the JSF EG kick off meeting during JavaOne. Its available online again at Ed’s blog.

All in all, the start looks very promising. By next year when the specification is ready for release we would see a lot of goodies in JSF, some of them being -
- better view decription technology - somewhat like facelets or maybe better.
- application modification and deployment at runtime
- tighter integration with Ajax. perhaps support for a small JavaScript library contract specification.
- better and maybe centralized error handling
- minimization of “xml hell”, use of annotations instead
- possibility of RESTful urls and use of GETs
- skinning and themeing
- reduction of effort required for creating custom components

More details can be obtained from the sources mentioned above.

So all this good. However, I thought it was perhaps also time when one needs to look at the following -
1. unification of the client-centric and server-centric UI models, especially when they pertain to the same programming language. There is no stopping somebody mashing up the JSF lifecycle with a Swing Client but it is ugly and non-standard. How about creating standard hooks?
2. merging managed beans jsr with this one. Somebody in the JCP needs to start merging the JSRs. Of late there is a proliferation of these and at the rate it is going I wouldn’t be surprised if somebody started a JSR to reduce JSRs
3. portal is passe, if not it surely will die sooner rather than later. The client centric webos/webdesktop is gathering momentum. How about jsf taking the lead to include portlets within the realm of components and containers.
4. jsf, like everything web development java on the server side is based on the servlet API, which itself needs some rehaul, considering that it is purely server centric and quite inadequate in a newly evolving peer-to-peer world. Shouldn’t servlets and jsf evolve concurrently so that we could avoid some retrofitting.
5. Last but not the least, what about applications without servers - which go under the name of mashups often. which java web technology is good for it?

Dejan Bosanac

AddThis Social Bookmark Button

If you ever tried to work with SSL Socket connections in Java, you probably know that Java, by default, supports its own JKS and PKCS12 certificate formats. For those who need to work with OpenSSL it is usually suggested to convert keys and certificates to PKCS12 and then import them in the keystore using the keytool command provided with the JDK.

While all this is not a big deal for most of the applications, there should be a better solution for projects that rely heavily on SSL. Not-yet-commons-ssl project, called liked this because it is still not the official Apache project, aims to simplify Java and SSL integration.

First of all, it supports OpenSSL and PKCS8 formats and provides handy classes for dealing with keys and certificates in that format (see PKCS8 examples).

Also, it provides mechanism for easy creation of SSL Sockets regardless of certificate format you are using (see examples). This mechanism also allows us to configure multiple ssl socket factories inside a single JVM.

Commons SSL is a really important toolkit for all that have above modest SSL requirements. The proper support from Apache and a better documentation could help this project become even more useful.

Shashank Tiwari

AddThis Social Bookmark Button

With Sun announcing JavaFX, Microsoft putting their strength behind Silverlight and Flex/Apollo going strong in the RIA space, the wars for UI domination has just begun. Perhaps I should say begun yet again! From Applets to *ServerPages to Ajax/RIA we have seen the user interface go through rapid evolution in the last 10 years or so. In the last couple of years the Ajax/RIA story has been the most prominent one and one technology that has suffered the most has been Java, with one and sundry blaming the poor interactivity of JSP, the complexity of JSF or the poor performance of the Applets. In fact there have been stories, articles and blogs about Hybridizing Java, about bringing in scripting languages into the JVM or about getting rid of our good old trusted friend altogether. However, with the introduction of JavaFX there is a completely new direction and a new set of questions. Is JavaFX a superior alternative to current Ajax/RIA technologies? Is it just a scripting face to the old options? Will it bring the desktop and web UI technologies closer? Will it address the next generation of UI requirements - video, svg, voice and more? Will it evolve rapidly with community participation, thus having implicit approval of the masses? Will it be Sun’s new recipe for success?

Chris Adamson

AddThis Social Bookmark Button

So, it’s been just over a week since my BoF on Java Media. But let’s start with some context about Desktop Java as a whole…

Shashank Tiwari

AddThis Social Bookmark Button

The BOF at Javaone titled “Meet the Java Posse” has so far been the most exciting and entertaining BOF session. The Java Posse folks have developed the brilliant habit of providing exhaustive information while keeping the humor going! If anybody has not heard them yet I think they need to tune in asap to their podcasts at www.javaposse.com. They know about all the jsr(s) and the version numbers of all Oracle products accurate to the sixth place of decimal :)

Tim O

AddThis Social Bookmark Button

http://twitter.com/tobrien - twittering the conference

Everyone I speak to describes the same love/hate relationship with Maven. They use Maven for builds, it tends to work well when it works, but then *crashbang* when it sucks it sucks. I’m not making this up, everyone I speak to professes some frustration with Maven.

FX impressive, but I’m still on the fence

Disclaimer: I like and use Flex. Been using it with Rails applications, it has some limitations. Adobe
(Macromedia) never really got the programming side of Flash right (see Flash 8 IDE) and try writing anything of sufficient complexity to require more than 100 lines of Actionscript. It gets difficult fast.

I’m not ruling out a victory for Sun in the rich client space, and I’m sure Chris Adamson is happy that Sun is refreshing Java on the client-side. But, it is a busy space. I just sat through another FX presentation and, I’ll have to say it’s impressive the stuff that Sun (Chris Oliver) has implemented. Some of the applications are very interactive. Evidently you can download JavaFX now and start using an IDE called FX Pad, check it out.

Me == Hoping that Sun succeeds in this space.

I’m off to a session on Open Sourcing Sun.

No Harmony for Harmony

Quote from Schwartz this morning: “Right now there is nothing preventing Apache from shipping Harmony.” (from the press briefing) And in other news, Geir M. is handing out CDs with Eclipse and Harmony in the pavillion and is draped in the Brazillian flag.

Dejan Bosanac

AddThis Social Bookmark Button

One of the lessons we can learn from early success of the Web was making of ideal environment for use of scripts. There were two main components of the Web platform:

  • Web server (Apache), as an infrastructural component that had to be fast and reliable
  • Web application as a collection of scripts (Perl, PHP, Python), providing the content in an easy manner

The Web as we know it today is a much different place; applications talk to each other through variety of web service protocols, we have Ajax and all these new cool toys. But one principle remains the same: we need reliable infrastructure software with easy integration of scripts for fast creation of content and logic.

I’ve always seen Java as an ideal platform for building infrastructural applications. One of the proofs for this claim is existence of many production-ready asynchronous-messaging solutions on the Java platform. Asynchronous messaging is an important programming concept which is one of the reasons for Java’s success in the enterprise environment. JMS specification and many quality implementations of brokers and clients led to wide adoption of messaging paradigm among Java developers.

Recent trend towards bringing asynchronous messaging closer to scripting world is very encouraging (in my opinion) as it will bring completely new programming concepts to script developers and much wider adoption of asynchronous messaging patterns.

What I primarily have in mind here is Stomp (Streaming Text Orientated Messaging Protocol), a lightweight messaging protocol, which makes it easy to implement clients for most of the scripting languages (the most of the mainstream scripting languages already have Stomp clients implemented). Currently only ActiveMQ implements native Stomp support and enables script developers to enjoy all goodness of loosely-coupled asynchronous integration of their applications. Support for virtually any JMS broker is provided through StompConnect project.

One other potential alternative to Stomp is AMQP (Advanced Message Queuing Protocol), the specification that aims to standardize messaging. Intention of AMQP is not to be simple, but to provide standard specification that will allow implementation of brokers and clients in virtually any programming language.

AMQP is young specification and currently you can find it implemented in Qpid (http://cwiki.apache.org/qpid/) project in Apache’s incubator. It currently implements brokers in Java and C++ and clients in Java, C++, C#, Python and Ruby. The other open source project that implements AMQP protocol is RabbitMQ, which is written in Erlang and provides clients in Java, JavaScript and native Erlang.

Regardless of the actual protocol and technology being used, I think that asynchronous messaging and scripting provides a lot of potential to developers and I’m sure we will hear a lot of about these two playing together in coming years.

Chris Adamson

AddThis Social Bookmark Button

What if you held a book signing and nobody came?

Jim Alateras

AddThis Social Bookmark Button

If you haven’t already checked out the restlet project then it’s definitely worth a gander. It is a lightweight framework that captures the principles of REST as outlined in Roy Fielding’s dissertation. For me the REST architectural style is the superior choice for all client facing web applications.

The restlet framework comes packaged with everything you need to develop the server and client dimensions of your web applications although in my instance i was more interested in integrating it with Spring 2.0 and the Tomcat Servlet Container.

Initial experience with the framework has been both positive and beneficial.

Tim O

AddThis Social Bookmark Button

It seems like a simple problem, you want to allow people to upload videos, and then you want to process those videos to Flash Video. (Admit it. Flash Video is the video format for the web at the moment.) Talk to the LAMP crowd (or the Rails crowd), and when you ask them the question: “How would you process media files on the web?” You’ll find two popular answers:

  1. FFMpeg for video processing
  2. ImageMagick for image processing

But, don’t we do everything in Java through the JMF and the JAI? How would one integrate these utilities into Java?

Tim O

AddThis Social Bookmark Button

There was recently a post on TheServerSide that pointed to an article on DeveloperWorks titled, “Pure servlets: Rethink the view” by Jason Van Cleve. I read it, I read some of the reaction to the TSS thread. (read on..)

Shashank Tiwari

AddThis Social Bookmark Button

The desktop transformed user experience through the last 20 years and has been the entry point for applications for a long time now. Come to think of it, even the browser is an application that resides in the desktops of users. The browser helps us access sites that run applications and that may be an aggregation itself, like a portal. The web applications, which traditionally were database centric and form, based data entry and reporting, email and ecommerce type applications are maturing into online office and collaboration applications (the offerings from Google), online gaming and online drawing applications (Gliffy). Interestingly enough though, the desktop has not changed fundamentally in its many years of existence and is still focused on file management, document creation and deletion, and local storage of documents type of functionality. Of course there has been the inclusion of web technologies into the desktops. More recently, Microsoft and Adobe (with its Adobe Apollo) may be examples of companies that are bringing the concepts and technologies of the web to the desktop. An important question then is, what is the future of the desktop and that of the web? Would the desktop be replaced by the web or would the web pervade throughout the desktop? These and related ideas were brought-up by David Temkin (www.davidtemkin.com), the co-founder and CTO of Laszlo Systems as a part of his presentation at the AjaxWorld in New York. David seemed very bullish about the web outperforming the desktop in being the center of user experience in the long run. Guess that is why, Laszlo is taking the desktop to the web with its Webtop offering and betting on it being a preferred solution going forward. Of course they are not the only ones doing it neither are they the first to do it. Laszlo Webtop is a solution that provides the infrastructure to build a web-desktop or a “webtop”. It leverages Java on the server side and is built to take advantage of the established server side java frameworks and mechanisms. (I tried the initial release of this product and maybe would talk about it sometime later or try and compare and contrast it with similar offerings from other vendors.)

Now we are not sure if the Laszlo Webtop is the winner in the long run and I am not trying to present David Temkin’s presentation verbatim here, but I think the questions he has raised and his opinion on the matter are indeed something for us to ponder about. Considering that java developers may still be struggling between old Apache Struts type web frameworks and the numerous hybrid choices that AJAX/RIA have presented to them, are they thinking about where the web-desktop convergence is going and the role they want to play in shaping this convergence’s destiny. Or is it that some of us are happy that such concepts could theoretically be partially or fully implemented as Applets even some 10 years back. Or is it that we are waiting for a JSR to be initiated for such a purpose :)

Tim O

AddThis Social Bookmark Button

Here’s a quote from an email I received yesterday from a colleague who uses Lotus Domino very heavily. Domino is one of those tools that isn’t hip, there are no groundbreaking Web 2.0 sites written in Domino, and as far as other Lotus products are concerned, people tend to have a visceral negative reaction whenever someone mentions Lotus Notes as an email platform. Regardless of your reaction to Notes, this colleague does manage to consistently produce revenue generating applications on Domino. Yesterday he sent me the following:

[Domino] has evidently entered public beta testing. Below is a link to the new features outline:

http://www-128.ibm.com/developerworks/lotus/library/notes8-new/

Interestingly, it appears that the Notes Client and Designer (the user UI and the IDE respectively) have been rebuilt from scratch as Java extensions on Eclipse. I didn’t see that coming.

Even though Lotus Notes has a reputation for being a something as an anachronism, lauching the new Lotus Notes client on the Eclipse platform is a big deal for the Eclipse platform as a foundation for end-user applications. Just when you least expected it, someone decides to ship a large client-side Java application.

From the DeveloperWorks article written by David DeJean:

The big news in Lotus Notes V8 is that the Notes V8 client encapsulates all the code that is Lotus Notes within the Eclipse environment. This move puts Lotus Notes on an open-source Java-based platform. Originally created as an integrated application development environment, its open, plug-in-based architecture has made Eclipse itself the foundation for rich client platform development. Lotus Notes V8 is built on Lotus Expeditor, IBM’s universal managed-client software, which, in turn, is built on Eclipse.

Shashank Tiwari