Wednesday, November 25, 2009

Scala Meetup in Atlanta (3 Dec 2009)

Just updated the AJUG website. recognizing that various JVM languages are gaining popularity, we will be starting to sponsor the Atlanta Scala Meetup (With meeting space). The next meeting is on December 3rd, 2009 at the usual AJUG location (Holiday Inn Select)

For more details, please visit: http://www.ajug.org/ and http://www.meetup.com/atlanta-scala/.

¡Viva La JVM!

Friday, November 20, 2009

Oracle, Flex and MOS - a sign for Java FX?

Ok, while we are still waiting for the Oracla/Sun purchase to go through, there is also lots of speculating about what might happen with Sun's technology portfolio moving forward.

Since the world is moving towards richer UI interfaces for the browser, I am always in the struggle to assess which technology stacks are most appropriate to learn (GWT, Flex, plain HTML + your choice of JavaScript library such as JQuery, YUI etc.). Thus, particularly as a Java developer I am of course interested in the outlook of JavaFX - I certainly "wish" it be successful, but it still seems to be lacking in various areas (Component libraries, JVM modularization, 'community'). Furthermore, there has not been any Oracles/Sun statements about the future of JavaFX as far as I know (Please comment if I am wrong)

There was a higher-level article in InfoWorld yesterday discussing the future of Sun's technologies:
http://www.infoworld.com/d/developer-world/java-what-does-its-future-hold-978

Oracles involvmen into Flex

This brings me to the main trigger point that caused me to this blog entry. A few days back, I read a news article at Heise Online, a large German IT news portal, stating that Oracle has some major issues while switching over to their new support system 'My Oracle Support' (MOS):  


http://www.heise.de/ix/meldung/Oracles-neues-Support-Portal-aergert-Kunden-856450.html

You can read more the issues here:
The more interesting fact, though, is that their entire new support system is implemented in Adobe Flex. Unfortunately, I was unable to find more technical details via Google, but that is a fairly substantial deployment.

I found another interesting little piece of information on stackoverflow:

http://stackoverflow.com/questions/1601444/flex-oracle-open-world-2009

According to James Ward (Flex evangelist at Adobe), Oracle showed more Flex-based applications this year at Oracle OpenWorld 2009 including: My Oracle Support, Social CRM, Siebel Gadgets and Enterprise Manager.

Can you draw any conclusions out of this regarding the future of JavaFX? Probably (hopefully) not, but it shows that Oracle has already made a significant investment into Adobe Flex. 


Adobe Flex and JavaFX in Atlanta

To give you some idea of how the market looks like here in Atlanta, Ga:

At the last meeting of the Atlanta Java Users Group (November 2009), Burr Sutter our group's president asked the group (80+ attendees) whether they use Adobe Flex and a considerable amount of hands went up (I guess at least 1/3).  Nobody in the rooms did anything with JavaFX...

* * * *

PS: On a more frustrating side-note: While writing this blog post I visited http://www.javafx.com/ and my browsers froze (FF on Mac), causing me to re-type a good portion of my blog entry (Sigh). 

Sunday, November 8, 2009

Geeking out with Adobe Flex

Just some quick notes...I had some extra time this weekend and watched several excellent online presentations mostly about Adobe Flex. Adobe is doing a really good job of making their conference presentations freely available.

I worked my way through the following Adobe Max 2009 presentations:
Also, in the past I must have seriously overlooked Adobe TV. Seems to be a pretty neat educational resource. There I watched: Using the Flex Charting Components

Lastly, I ended the weekend by watching Data Visualization and Dashboards by Thomas Gonzales (from 360|Flex Conference). By the way you should also seriously check out his blog: http://www.twgonzalez.com/blog/. There is some good stuff there.

In his presentation, Thomas showed some need examples. This one causes some serious drooling: http://www.brightpointinc.com/flexdemos/googlefinance.html




And just in case you need a gauge on your dashboards: http://www.twgonzalez.com/blog/?p=34 Oh, yeah.

Saturday, November 7, 2009

Rich Charting Options for your RIA/Webapps

I started revisiting my charting solution in jRecruiter. For this fairly basic Java web application, I have been using JFreeChart to provide basic charts (E.g. to illustrate the number of posted jobs over time).

While JFreeChart works great, and it pretty much provides all the charting features you may ever want, it has one disadvantage: It is static. Compared to all the interactive goodness that is possible with RIAs such as Flex, JFreeChart lacks the sugary icing on the top (Mouse overs, AJAX interaction, dynamic drill-down etc.). Therefore, I was investigating my options to add some richness.

Additionally, at work, I am using Google Web Toolkit (GWT) and thus wanted to get an overview about the charting capabilities I have using GWT. One of the options there is gchart. It looks okay, alas not great. What's worse, the project owner abandoned his project; see: http://code.google.com/p/gchart/.

Another option is flot which comes along as a jQuery plugin and uses the HTML canvas tag to do charting.  There is a also a GWT wrapper for flot available called gflot.

The most interesting alternative for GWT, I came across is ofcgwt. It uses Open Flash Chart 2 under the hood and looks pretty good. You could argue that if you use Flash-based charting for your GWT app, why not just implement the entire app in Flex ;-).

On the pure Flash/Flex side, there are first of all the charting components that come with Flexbuilder. In contrast to the open-sourced Flex SDK, the charting components are not free, though. 

While, I was googling for some other options, I saw Axiis - Simply beautiful! Yet, another option is IBM ILOG Elixir, which is free for free sites. They have a very nice compilation of examples: http://www.ilog.com/products/ilogelixir/demos/.

On a low level, you also may want to look at Degrafa (Even if it is just for the gorgeous examples). You can find one interesting charting example at this blog: Nike+ graph using Degrafa/Flex 3.

Lastly, if you don't mind spending some money, you may also look at FusionCharts. At one of my prior engagements we used used in very successfully in a Struts2-based web application. Fusion Charts also comes along in a flavor for Flex - see the samples. There is also a Google Code hosted GWT wrapper available.

This, concludes my little 30k-feet overview/list of 'Rich' charting options. If I missed a good one, please leave a comment!

Sunday, October 25, 2009

NFJS Conference Atlanta 2010 - Day 3

The last day is over. It's been a great conference. Without a doubt, JVM language alternatives dominated the conference sessions. Since I won a book on Scala yesterday, I will checkout that language out next :-)

Today, I attended two sessions by Ken Sipe: "Architecture and Scaling" and "So you want to be an Architect". I particularly enjoyed the latter one, as Ken gave a very pragmatic overview of his view on what the qualifications of an architect ought to be. I had to smile when somebody from the audience asked Ken how as an architect you can possibly keep up with the constant technical innovations and the sheer breath of required knowledge and Ken responded that he doesn't watch any TV. Well, I catch myself weekly listening to the Java Posse, SE Engineering Radio, Parleys.com etc. while doing the dishes, cleaning up etc. And with planning for AJUG meetings, the next Devnexus conference etc. there is not much time left for TV either (Although I still leave some space for my weekly dose of Southpark ;-)

I guess you really have to like what you're doing in order to fulfill the requirements of an Architect.    

During the Birds of Feather (BOF) session I asked the panelists on their opinion about Python, which was never even mentioned at the conference but which at the same time is heavily used in computer science teaching at colleges in Georgia. Their opinion was, that it's white-space issue is just too much of a limiting factor for using it in HTML scripting, using it as a DSL etc. and also that there are some issues with the user community itself. And thus, they said, there were just better alternatives at this point.

During the afternoon I attended 2 sessions by Ted Neward
  • The Busy Java Developer's Guide to Advanced Collections
  • The Busy Java Developer's Guide to Hacking with the JDK 
Both sessions were interesting but I wish Ted had given some more real world examples for use cases of Apache Commons Collections and the Google Collections Library. In his latter talk he showed an example of how to add functionality to core JVM classes. Interesting, but talking about "experimental and highly hacky stuff".

Overall, this was an absolutely wonderful conference. Looking forward to the next one! As always: Jay keep up the good work!

Saturday, October 24, 2009

Don't use Java for New Projects - NFJS Day 2

Day 2 of the No Fluff Just Stuff (NFJS) conference here in Atlanta is over - It's been a good day. It has been another day of excellent speakers and topics. One thread you can see clearly throughout the presentations is:

Java's days are numbered as a language for new development - Viva la JVM!!

I got the sense that you should at least start thinking about an exit strategy. Stuart Halloway was even more outspoken: "Don't use Java for new greenfield development." (Saying that any of the talked about alternatives are better - Scala, Clojure, Ruby and Groovy).

After going to a few sessions that dealt with concurrency, I am certainly not inclined (border-lined scared) to do that kind of stuff in Java. The two languages most talked about at the conference were Scala and Clojure.

The nice thing is, that both language run on the JVM, so you can use the new language features, but are also able to use the vast power of Java libraries, if needed. Once drawback I saw is the fact that both Scala and Clojure can be fairly cryptic, which was an issue that was raised repeatatly by the audience and as well during conversations with fellow developers in between session breaks. Scala at least gives you the ability to write Java like code and then later on as you gain proficiency, you can make your code more concise . From a "power perspective", Scala looks awesome, though.

The sessions I atended to today were:
  1. Tackling Concurrency on the JVM (Venkat Venkat Subramaniam)
  2. Advanced Topics in JMS (Mark Richards)
  3. Java.next: Clojure, Groovy, JRuby, and Scala (Stuart Halloway)
  4. What's New in Spring 3 (Ken Sipe)
Onto the last day now...

NFJS Conference Atlanta 2010 - Day 1

Today was the first day of the NFJS conference here in Atlanta. It's my third time and it is always a great experience in terms of sessions but it is also a good opportunity to network.

First I went to two sessions of Venkat Subramaniam: "Effective Java" and "Programming Scala", both excellent sessions. I get the feeling, it is really time to look beyond Java, particularly if you do anything around concurrency. Not sure if Scala will be it, there seemed to be some contention in the crowd regarding Scala's more cryptic syntax. Although, it looked manageable in my opinion. Nevertheless, I need to check out the Clojure talk tomorrow.

The third session I attended was "Transaction Pitfalls and Strategies" by Mark Richards. At first I was a bit hesitant attending the session but I was glad I did. A related article can be found at IBM DeveloperWorks. The presentation contained some really good stuff.

The first day ended with a very good keynote by Ted Neward on Iconoclasm. Oh well, it is 1am already...better get some sleep for day two of the conference.

Friday, October 23, 2009

How to Teach CS to Children

At the Atlanta Java Users Group (AJUG) we had an awesome presentation by Barbara Ericson on how to inspire children to learn more about computer science (CS). It was a really informative session. As director of Computing Outreach at Georgia Tech University she helps prepare curricular materials for high schools.

As such, she gave us a detailed overview of the state of CS teaching in Georgia and the nation as a whole. Furthermore, she gave us an overview of all the cool software tools that help teach CS concepts including:
She also talked about some interesting robotic toys that help in her efforts:
I wish I had had the stuff when I grew up...

There is even a website out there that provides free information on activities that teach CS concepts without a computer: http://csunplugged.org/

Lastly, if you have children of your own, you should certainly check out Barbara Ericson's presentation and you can also find many more resources on her website: http://coweb.cc.gatech.edu/ice-gt

Saturday, October 17, 2009

Apache Camel Alternatives

In part one of my mini series I provided a quick introduction to Apache Camel and in part two, I continued with a simple example illustrating the very basics to get you started (which I extended a bit in part three)

In this posting, I would like to talk about some of the alternatives that I see might be interesting for you to investigate, when considering an open-source enterprise integration framework. Hereby however, things always get a bit fuzzy in my opinion, depending on your business requirements.

On one side, you want to have components which allow you to communicate with other services, but on the other side you also want to have some sort of workflow-capabilities in order to orchestrate your business processes. Furthermore, you may be interested in monitoring and reporting functionality.  From a different view-angle, you may desire a higher-level solution versus a solution that embeds easily into existing code using plain Java APIs. The list could probably be expanded considerably, but I hope you get the picture.

Ergo, depending on your specific business requirements, the following list of frameworks may or may not provide a better choice compared to Apache Camel:    
  • Spring Integration
  • Spring Batch
  • JBPM
  • nexusBPM
  • Drools
  • Hadoop/Cascading
  • Full ESBs such as Service Mix, Mule ESB, OpenESB, JBossESB
Actually, in my opinion the closest alternative to Apache Camel is Spring Integration.

Spring Integration

Before I was even aware of Apache Camel, I learned about Spring Integration at the No Fluff Just Stuff (NFJS) Java conference one year ago. Back then I thought that Spring Integration was the best thing since Nutella. Then a little later I learned about Apache Camel and tried to figure which one to take for a spin. As it turns out, comparative information on Google is rather sparse:
Interestingly, Apache Camel provides a component that allows you to integrate Apache Camel with Spring Integration.

To me a good argument for Apache Camel was the greater availability of components compared to Spring Integration, as well as its adoption by other frameworks such as ActiveMQ and ServiceMix


Spring Batch

If your business requirement is to process large amounts of data, you may also want to look at Spring Batch which is specifically designed for batch processing requirements. There are some pointers on the Spring Batch website for integrating it with Spring Integration. I considered it for one of my past projects, but unfortunately I do not have massively deep experience with it as we ultimately chose JBoss jBPM.

jBPM

In my opinion another option worth considering is jBPM from JBoss. I used it in one of my past projects. Integrating it back then with Spring was certainly a  bit tricky (especially asynchronous execution of Nodes), but it is doable. Interestingly, starting with version 4.0, JBPM provides native Spring integration. Unfortunately, I did not have any opportunity, yet, to try out JBPM 4.0.  JBPM is certainly much heavier compared to Apache Camel or Spring Integration. I would say that its focus is also slightly a different one. While it provides support for human task management during workflow executions, managing the state of your workflow nodes etc., it totally looses out compared to the available components, which are provided by Apache Camel.


nexusBPM

A little bit jBPM on steroids is nexusBPM (An older blog post of mine about it is here). Developed by Intercontinental Hotels Group here in Atlanta, it is open-sourced at Sourceforge and provides a set of useful components in addition to the original JBpm distribution.

Drools

You probably would not necessarily think of Drools being a Workflow solution but what originally started out as a rules engine seems to venture increasingly into other areas as well. In fact, at least from a 30k foot view, it pretty much provides similar functionality as JBPM (Workflow, human task management etc.) and also provides a few components such as FTP, mail, executing system commands, etc.

What kind of baffles me is the fact that JBoss is maintaining 2 very similar products...

Cascading and Hadoop

If you need to process large amounts of file-based data, then Cascading might also be an interesting alternative. Cascading uses MapReduce to handle chunks of data. Interestingly, you can also use it for creating workflows. Not too long ago I attended an interesting presentation on that subject at AJUG. The presentation can be found here.

ESB like ServiceMix, Mule, OpenESB

Last in my list of alternative frameworks to Apache Camel is an entire category of solutions: Enterprise Service Buses (ESB). Enterprise Service Buses are basically stand-alone products, and as such, have a much heavier foot-print than for example Apache Camel which is basically just a set of light-weight Java APIs. In fact Apache Service Mix 4.0 is using Apache Camel under the hood in order to provide message routing. Besides Apache ServiceMix, you may also look into these OSS products:
This concludes my VERY high-level overview of frameworks/products that allow you to implement worklow and/or enterprise integration-based solutions. This whole subject could easily be extended into a more comprehensive article. Nevertheless, I hope I was able (within the limits of a blog post) to provide you with some good starting points.

¡Hasta la próxima!

Sunday, October 4, 2009

Camellos III - Zipping Files with Apache Camel Example

I played a bit more with Apache Camel and I extended my little Camellos project (See this blogpost for details, including for directions to get to the source code) by another simple Example:
  1. poll directory zip-input for any type of files
  2. pack the files using the Zip data format
  3. output files to the zip-output directory
I thought this would be an easy example to get my feet a bit more wet with Camel. Apache Camel provides 2 data formats for zipping files:
Interestingly, using the marshaller for the Zip data format, you're unable to generate standard zip file. Looking through the source code of the Zip daa format, it turns out that Apache Camel is using a DeflaterOutputStream to created the compressed data versus using a ZipOutputStream. A bug??

Thus, what a great opportunity to create my fist customized Camel Data Format implementation :-) I basically just took the existing ZipDataFormat class and converted it to using a ZipOutputstream, and by adding a single ZipEntry for my file. This works quite well.

I also added a reverse route for unzipping a file. One limitation exists. The zipfile can contain only one file. I am not sure, yet, how to solve the issue when you have more than one file in your zip file...I guess this may be a task for the Splitter or Aggregator components.