The Degradation of Java Developers

On multiple occasions I was blogging about these legions of enterprise Java developers trained to use certain frameworks without understanding how things work under the hood. This morning I had chance to see it one more time after interviewing three job applicants in a row.

Our consulting company got a request for a well rounded Java developer with the knowledge of SQL. We have good reputation with this client, so I started screening the candidates, which I got from a recruiting agency.

First, about the resumes – each has several pages with detailed description of their work for various employers. Each resume had a list of technologies that the candidate supposedly know. Here’s the list of technical skills from a real resume:

Core Java, J2EE, JSP, JDBC, Servlets, AJAX, XML, HTML, XSLT, Web Services, CSS, JavaScript, SQL, Oracle 10g, MySQL 5.0., JMS,Eclipse, Adobe Flex Builder 3.x,UML, JDBC, SVN, JUnit, VSS, Jira, HTML, DHTML, CSS, AJAX, JavaScript, XML, MXML, Action Script, Servlet, JSP, JSTL, Hibernate 3.x, Spring 2.x, IBatis, SOAP, UDDI, WSDL, Apache Axis, Web logic Server 8.x, Apache Tomcat 5.0, Struts Framework, MVC, ANT, Maven.

Looks impressive… for those who haven’t been interviewing Java developers. I don’t want to say that this candidate is lying, but he wasn’t able to maintain a conversation about 80% of these technologies for more than 3 minutes. They’ve heard or even tried working with these technologies or tools, which is all that’s needed for adding them to the resume. What are the remaining 20% they can talk about? The frameworks. Most likely they will explain how to configure Struts or Spring, and even how to make Spring talk to Hibernate. BTW, they all love Hibernate cause it spares them from writing SQL, speaking of which, they know very little about this query language.

When I see all these Struts, Springs, and Hibernates on the resume I start with this, “Imagine, that you’re not allowed to use any frameworks. Explain in details the entire process of bringing the data from DB tables Customers and Orders to the Web page”. For most people it’s a killer proposition let alone writing some SQL queries…

One person had JQuery on the resume. I asked her, “Why did you use jQuery”…20 sec pause…”I like it, it’s nice!” That all I could pull out from her on the subject.

Two weeks ago I’ve attended a technical keynote at JavaOne in San Francisco. Brian Goetz was showing code samples of Lambda Expressions (a.k.a. closures) that will be introduced to Java 8 next year. This is a pretty advanced feature and proposed Java syntax is not for the faint of heart. I was thinking to myself, “Who’s going to use these closures in the enterprise Java world? 10% of the developers? 5%?”. Are these expressions being introduced just for fun cause it’s cool and other functional languages have them?

Software development industry is changing. It doesn’t need hackers anymore. It needs craftsmen who can configure and replace blocks of code when something stops working. Ideally, you should have in your team one Java expert who can actually understand the code of your application and can fix it not on the block level, but can drill down to a single line of the Java code. Somehow such people also know how to write a SQL outer joins, how to fix the broken build, and whatever else may come up.

A typical enterprise manager wants to increase the population of his software developers. Managing more people is the shortest way for moving up the career ladder. It is what it is. But if you are smart enterprise manager, make sure that for each dozen of framework programmers you have at least one real.

I already received a new resume for tomorrow’s 10AM interview. The resume looks the same. The only lines I read are the names of the former employers and projects. Any other written information is useless – the real picture will start developing tomorrow at 10AM.

Tomorrow’s Update. It’s 10:15AM. Yet another interview is over. The fourth wrong answer was that to send the data to the browser a servlet has to add it as an attribute to the HTTPSession object. Do you think it would be rude to stop the interview after listening to such answers for 10 minutes?

The Day After Tomorrow’s Update.I’ve added $5 to the hourly rate offered for this position. The very first candidate passed my interview with flying colors. Never thought that a lousy five bucks can open the door to the wonderful world inhabited with intelligent Java developers!

My Three Days at JavaOne 2012

After spending three days at JavaOne I’m happy to report that Java remains the most stable and reliable platform.There are some new additions to the language and the JVM that will make Java more complicated. I’m talking about Nashorn, Jigsaw, Lambda, and Modular Java. I’ve attended 10 presentations and participated in three hands-on labs. My notes are below.

JavaFX

JavaFX is a library and a tool set for creating rich UI for desktop and embedding UI into chips of various devices. It’s not meant to be used for creation of rich Internet applications. The user interface is defined in the .fxml files. It’s standard xml with some import statements.
The Scene Builder tool allows you to drag and drop UI controls and CSS onto the scene. It uses regular CSS3 so Java developers better start learning it. The processing logic is written in Java with some additional API. You can package JavaFX code into .exe and .dmg installers.
Each .fxml file has a corresponding controller Java class that lists handlers for the events and other code. It seems that development of the new features of JavaFX is going slow – addition of the ComboBox control is a modest achievement. Still, developers show interest to JavaFX and the session I’ve attended had about 200 people in the room.

Nashorn

This is a new JavaScript engine that will serve as a replacement of Rhino. You’ll be able to run JavaScript either from a command line or directly from your Java code. I’ve heard that the Nashorn engine is about 20 times faster than Rhino and is almost as fast as Google’s V8. Oracle gives Nashorn to Open JDK.

After looking at some code examples, I can assure you that the knowledge of JavaScript is a must. Nashorn allows you to create two types of the Molotov cocktail. A simple recipe for such cocktail is to write JavaScript on the left side of the equal sign and Java on the right. A more sophisticated recipe is to write JavaFX code and insert a block of JavaScript right in the middle without making any special warnings or annotations in the code. Some people can consume such cocktails, but the majority of today’s enterprise programmers will get hangover.

The Modular Java Platform

This project gives me goosebumps even though the goal is noble. For the last 17 years Java carried over the dead (a.k.a. deprecated) code from version to version. It gave stability and backward compatibility of the code. But the size of the JRE remained pretty big – 15Mb or so. Besides, your application may not even need all these jars that come with JRE. The modular Java Platform should simplify deployment to small devices, improve the download and startup time, eliminate the CLASSPATH (?!), and auto download and install on demand whatever modules are needed for your application. The project Jigsaw will become a reference implementation of the Modular Platform JSR.

The modular Java should solve the “JAR Hell” packaging problem. Instead of packaging JARS you should be able to group Java packages into modules and libraries. The new keywords will be introduced: module requires, provides, and more. The meaning of the keyword public will change. The public scope means “within the module” unless you export some classes to expose them to the external modules.

Modules could be packaged into libraries. The library dependencies are supposed to be resolved automatically (keeping my fingers crossed).

I realize that modularization of Java is extremely complicated task, and (the good news) it won’t be complete till Java 9. But Java developers may want to start sifting through the code of their applications to ensure that they use only the published API. But if you hacked JDK and used some internals, this code will break after deploying the modular Java platform in your organization. Consider looking for a new job unless you are searching for new challenges.

HTML5 Client and NetBeans

HTML5 is a buzzword for DHTML – HTML+JavaScript+CSS. Such front end in Web applications exchanges data with Java EE objects using JSON, and in the Java world you should be using JAX-RS and the Jersey framework. After attending several HTML5 presentations it seems that Java developers are eager to learn, but not overly familiar with this domain. NetBeans 7.3 comes with a project Easel that works with HTML5, and I’ve seen a demonstration of how to debug JavaScript inside NetBeans. I’m not exactly sure why is this needed since all modern browsers have their own debuggers, and recommendation to connect the IDE to the browser just for debugging purposes is questionable.

WebSockets – JSON – REST

I was glad to see how the right architecture of Web application was being promoted. Java servers should not be responsible for anything related to the UI in the Web browser. Java servlets, JSP or JSF should not mess with HTML at all. JavaScript on the front end consume JSON prepared by a REST service, which in Java EE world would be done by the JAX-RS rules. HTML and CSS are responsible for the UI layout. Several different sessions were preaching to this architecture. HTML5 includes the WebSockets API, which is a powerful alternative to the HTTP traffic. Next year’s release of Java EE 7 specification will publish a standard for processing JSON and using WebSockets in Java.

The final release of the JAX-RS Processing (JSR 353) is scheduled for April 2013. It’ll support the low-level Streaming API (similar to StAX’s XMLStreamReader) as well as high-level Object Model API. The streaming api will dispatch events: start streaming, key name, value, start array et al. Currently, the JSON-P’s JSonBuilder is too verbose, but allows programmers to control the way each piece of data is added to JSON. The future Jason-B (for binding) spec will offer a simple way of turning a Java object to a JSON string similar to what Google’s GSON library does. But the Jason-B spec won’t make it into Java EE 7 – use the version developed by EclipseLink.

A senior Java Developer attends an in-depth presentation on WebSockets by Justin Lee 

Labs

Imagine that you need to teach a hands-on class in the classroom with 100 attendees. Being an instructor myself I can assure you that it’s an extremely challenging task. I’ve attended three such labs. Each of the hundred laptops in the classroom had a pre-installed VM with the PDF describing the steps to be completed and supporting files. In such a setup the most important piece is well written document with instructions. Such manuals were great in two out of three classes I’ve attended, and I applaud these instructors. The third class was not prepared that well. The instructor simply said in the beginning, “This is a self-paced course. Just follow the instructions and let us know if you need any help”. Not even a 5-minute intro. Nothing. The first part required installing a number of software packages, and several installation instructions were simply missing. Attendees were helping each other explaining how they figured out what software was missing and the installation instructions were not provided. I left this class after playing catch for 20 minutes. Still, I’m grateful that Oracle offers such labs, which gave a jump start in learning new technologies to hundreds people.

Demo crashes

I’ve seen a fair amount of live demos that crashed. It happens, especially when you are presenting on a beta quality software. The audience usually takes these crashes with understanding – we all are sitting in the same boat. But I’d like to say that there are presenters and there are rock star presenters. I’d like to mention here a name of a really great presenter – James Ward from Heroku. I know James for years. This guy lives and breathes software. When he presents – everything usually works. If something breaks, James knows and explains why it broke and how to fix it. This time I’ve attended his excellent presentation about the Play 2 framework – give it a serious consideration if you’re in the process of picking a framework for your Web application. Besides being a great presenter, no one can beat James in the amount of the information James can produce per second. He’ll be presenting at the Java SIG in New York in October – be there if you’re in town.

Wasting time at JavaOne presentations

This time I’ve seen a new way of wasting time at the presentations. Conference attendees learned the hard way that promised presentation materials may remain promises. They help themselves by taking pictures of the presentation slides using mobile phones. But this time I’ve seen a guy who was taking photos with his iPad, and after taking a snapshot he’d immediately edit it using some application installed on the iPad. There is no way that he could concentrate on what the speaker had to say. Was he even a Java programmer or was sent to take pictures for his boss? The funniest part was that the entire slide deck of this presentation was already uploaded to the JavaOne’s site. My kudos to Oracle for trying to make the presentation materials quickly available to the public. Go to JavaOne 2012 Videos and select the menu Tools | Content Catalog. Lots of slide decks are already there, and in some cases you may even find the video recordings too.

Data Collections

I’ve attended a presentation on data collections. Believe it or not, but I’ve seen a person who knew the difference between dozens of Java collections. I’m not kidding. I’ve also learned that in addition to tons of JDK collections, there were a couple of more libraries: Guava collections by Google and collections developed by … Goldman Sachs. That’s right, the IT departments of this respected financial firm are known for creating proprietary general purpose frameworks and libraries.

Parties

Finally, my thanks to the GlassFish, Oracle Community leaders and third-party vendors who poured beer and whiskey into my glass – I’ve attended 6 parties in 3 days, where met a number of interesting people who love Java dearly. Those who attended JavaOne in the old days remember that was the private party by Tangosol was the most popular. I guess, this was the reason why Oracle acquired Tangosol five years ago. This year a vendor named ZeroTurnaround had a party, which can pick up where the Tangosol left off. The beer and wine are the same at each of these events, but this was an invitation-only party and many well known people were there. I had to take a red eye home, and gave away my ticket to a free concert by Perl Jam.

The Epilogue

It was a rather long blog – sorry for taking your time. Those who are not tired can go to http://www.oracle.com/us/corporate/press/1854982, where Oracle published the roadmaps for Java SE and JavaFX. Thank you Oracle for running JavaOne. I hope to come back next year. Thank you for keeping Java the most stable and reliable platform for professional application developers. Long live Java! See you in November in Antwerp, where I’ll be presenting on JavaScript for Java Developers at Devoxx.

JavaOne 2012: The Day 1 Keynotes

Disclaimer. This blog is not an attempt to list all news and announcements that made at JavaOne 2012 – you can find plenty of transcripts online. It’s a very subjective (a.k.a. not objective) and opinionated representation of what I feel being here today. The morning after I may feel differently.

JavaOne is the second largest conference for Java developers and is almost as big as European Devoxx. I don’t have any official numbers, but it seems that JavaOne 2012 attracted about 2500 people from around the world.

Do you remember those huge screens, surround sound, creatively decorated stages, amazing sound effects, and Java star personalities on stage? Fuggedaboudit! Small stage. Three modest screens with slide shows. Slow start. The keynote consisted from three parts – Strategy, IBM-the-diamond-sponsor, and Technical.

The first part was delivered by unknown Oracle employees, which was big mistake IMO. The conference should have started with generating some excitement. I didn’t expect to see Steve Jobs caliber presentations, but at the very least the conference should have been opened by the recognizable people (is Larry Ellison too busy to record an address to the Java crowd?). I understand that the Java strategy presenters are not professionally trained actors, but saying the word “wow” in a tone as if someone died is a flaw. Dr. Ballard who discovered Titanic delivered the talk that demonstrated how to talk the talk. You may say, and rightly so, that James Gosling left Oracle and Joshua Bloch with Neal Gafter are not allowed to speak at JavaOne. But there were lots of excellent engineers that I’d like to see first.

Whose idea was to have Cameron Purdy to wear a suit? He’s an great presenter with an excellent sense of humor. Later in the evening, I met Cameron at the party where he looked and talked as expected.

The second part of the keynote was given to a diamond sponsor IBM, and I was prepared to hear some marketing spiel. I was wrong – IBM fiercely competes with Oracle in the Java space, and their keynote was a lot more technical, interesting and well presented than the first one.

Finally, the third keynote was technical with the right people. These people should have opened the JavaOne. Brian Goetz and Arun Gupta can deliver the message well. But why there were no applauds when Brian’s appearance was announced? Do people not know that he’s the man behind Java concurrency?

Now, let’s imagine that I’m a creature from some other civilization sent to the planet earth to see what are these humans are up to. After attending this keynote I’d report to my bosses, “These Earth inhabitants don’t even have smart phones or tablets yet. They just have some microprocessors and their main strategy is to put Java in there.” I mean, c’mmon! What does it mean? I don’t have any insider’s information, but it seems that the Java strategists decided that there is no way that Java can compete on iOS and Android, so there is no reason to even waste time on trying. What’s not taken by these evil Google and Apple folks? Any devices? Let’s pour Java in them real quick.

I really hope that next year’s Java keynotes will be better prepared and delivered.

What I like about the keynotes? It seems that some presenters were allowed to move that scary legal Oracle’s slide to the end of the presentation.

One of the attendees approached me and said, “I don’t remember your name, but I see you all over the Internet. I like reading your sarcastic blogs.” I don’t know the name of this person either, but this blog shouldn’t disappoint him, should it?

Apple’s iMovie: Poor User Experience

Yesterday I had to record a 2-hour long webinar. The resulting .mov file was about 1Gb in size. Then I needed to cut out a 40-minute fragment from this movie and save it as a separate file. Doesn’t look like an overly complicated task, does it? Started iMac on my MacBook Pro, which is not a super powerful but decent machine: a quad-code Intel i7 CPU, 8Gb RAM, 100GB of free space on my HD, Snow Leopard MAC OS.

Take 1. Started iMovie, then menu File, New Project, Import. The process immediately grabbed all my system resources and After spending 30 minutes iMove’s little panel with a progress bar displayed a message stating that now it’s importing the next long movie I worked with in the past (a.k.a. event). This gave me goose bumps. Where is the close or cancel button? That little panel with the progress bar had none. The iMovie’s menu became unresponsive, but even if it was available, there was no cancel option on the menu. Googling for how to stop the import returned a suggestion that I knew without Google: Force Quit the program. Than you very much, Apple! So much for the great user experience.

What did I do wrong to trigger this multi-movie import process? Got it! Stupid me! In the Import menu I had to uncheck the option “Add to existing events”. Cool. Let’s do it again.

Take 2. This time, after enjoying the progress bar for about 25 minutes the iMovie showed me a message that I needed to free some disk space cause my HD was full. This can’t be true, I had 100GB of free disk space in the morning!

Sidebar. Last week I spent about $13 for a very nice little program called WhatSize. If you need to quickly find the largest files sitting on your hard drive – get this program. You’ll be surprised to find lots of junk files taking space on your disk. After killing iMovie it left 50Gb of junk on my disk. Apple, please pick after your dogs applications!

Image

OK, I cleaned up after Apple and deleted some other useless files. Now I got 120Gb of free space. Let’s try one more time.

Take 3. Importing the 1Gb file into iMovie as a new event. It started yet another thirty-minute import process. Since iMovie works in the mode “Occupy MacBook” I went to have a breakfast. Thirty minutes later I’m back getting ready to edit my movie. Oops…Here we go again. That little modal dialog window gives a new message – generating thumbnails for your movie. This process should have been completed in 40 minutes, which I didn’t have – my computer was almost dead, but I had to run a meeting. Force quit again. This time the iTunes has quietly stolen 55Gb of my hard disk.

This is probably the first time when I hate the user experience offered by an Apple program. Poor design and poor performance. If iMovie was created as a toy program intended to “Hi, Mom! This is my Webcam” kind of videos it should be marked as such. Can anyone recommend me a decent program that could take a 1Gb .mov file and let me cut it into smaller pieces without frustration?

Thanks in Advance.

Update. My thanks go to Boris Yurkevich, who  suggested to use QuickPlayer v.10. Selecting Edit | Trim allowed me to cut out and save a fragment of this 1Gb movie in less than 2 minutes!

Java Basics for Flex Developers

Our company continues using Flex framework for development of our own product for insurance industry as well as for various consulting engagements. Being responsible for interviewing Flex developers, I see how the situation on the job market of Flex developers is quickly changing. If a year ago finding a senior Flex developer was mission impossible, during the last two weeks I’ve interviewed five applicants for the job, and three of them were seniors.

But all of their resumes have one thing in common – no or very little exposure to the server side technologies. I can foresee that more and more seasoned Flex developers will have to face the same problem: no Java means no job.

That’s why I decided to run an online presentation for the members of the NJ Flex Users Group. This rather long presentation has been recorded and is available as a screencast.

I’ve explained the Java basics comparing this language with ActionScript 3 everywhere I could. This presentation started with a quick HelloWorld in Eclipse, and then quickly progressed to abstract classes, generics, multi-threading and Java servlets. The more time a Flex developer spends with Java the better.

E-Commerce with Hybris

People are accustomed to buying goods online. If a company sells products to individuals, we call it B2C for Business To Consumers. If a business sells to other businesses – it’s B2B. Having an online store allows to sell around the clock regardless of the consumer’s location (at least within the country) as long as he or she is connected to the Internet. People spend some substantial time online and sellers are trying to reach their clients via all possible channels and devices being that a regular HTML Web page, a social network, a mobile application on any device with embedded browser. Still, some people aren’t Internet savvy and business will continue using more traditional channels like printed mail order catalogs. This is what the multi-channel marketing is about. Ideally, a business should be able to combine marketing the products with selling them right there. If you’ve seen the product commercial on Facebook or your mobile phone the storefront should be there too.

Ingredients of an online store

If I’d ask you to give me an example of an e-commerce site, most likely you’d answer Amazon or eBay. Agree. But what’s needed for building an e-commerce system? Let’s come up with a list of building blocks and solutions that Joe Smith, a CIO of the Best Stuff, Inc. would need to create an e-commerce portal:

– A shopping cart
– A catalog
– Integration with several payment systems
– Order management system
– Full text search
– High-load solutions
– Selling through social networks
– Ability to create UI supporting variety of desktop and handheld devices
– Integration with warehousing software
– Data feeds from external systems
– Consumers reviews, locator services, Web analytics
– Live video chats with customer supports

This list is not complete. Starting developing such a complex system from scratch would be insane unless you have unlimited budget and no deadlines to meet. On the other hand, trying to find a Swiss army knife solution usually translates into purchasing super expensive software with 80% of the functionality that you’ll never use. The truth is somewhere in the middle, especially in the age of Software-As-A-Service (SaaS) where you can subscribe to only what you need.

Hybris ingredients

Our company, Farata Systems has an e-commerce team that works with the Hybris software suite. For detailed comparison reviews of the e-commerce solutions refer to Gartner or Forrester. I can just offer you a Hybris review based on our real-world experience.

When we were offered to work on our first Hybris project we had to google this name up. Still, we were hired because of our solid expertise in enterprise development using Java and Spring framework, which are pre-requisites for developing software with Hybris Multi-Channel Suite.

Hybris is a well designed modularized software built on top of Apache and SpringSource components, containers and servers. We’ve been given login credentials to be able to access product Wiki and rolled up our sleeves. The software comes with an installer that includes modified Apache Tomcat servlet container, Spring modules and a home-made ORM framework for data persistence.

Finding goods

Finding goods in your online store has to be easier than in a brick and mortar one. Say you want to buy an engagement ring, but not sure if it has to be made of a white gold with diamonds or something more modest. Writing strict SQL queries is not overly flexible, but the full text search (FTS) technique allows examine all words in each document in your database rather then specifying the column names in the database table. The FTS feature give lots of flexibility in creating stores which allow to quickly find the products that closely match your customer’s needs (e.g. diamonds of certain shape, size, price range etc.) Hybris ships with the FTS module based on the fast search engine Apache SOLR (a Lucene extension). The system periodically (say, every minute) runs the data indexing process. You write queries not in SQL, but in a special query language.

Customization

This tightly integrated software allows you to create and release in production a simple online store in less than a month. But a typical store or an auction requires implementation of lots of custom solutions. For example, let’s take order fulfillment. Hybris offers off the box the basic solutions supporting order management and consignment. But in our projects we had to implement fulfillment algorithm that would take into account the distance between the warehouse and the consumer and minimize the number of shipments. For example, the customer wants to purchase twenty large screen TVs. The system has found six TV’s in one of your stores and four in the other. Since we need another ten TV’s our custom algorithm sends a request to a warehouse to order these additional TV sets. As a result – the customer will get a shipment of all twenty items shipped in a least expensive way.

Such customized business logic is implemented in Java as beans of Spring framework, which is literally a fabric of the entire Hybris software. Your code always has access to Spring context object. By adding custom extensions you create the child context object with your Spring bean containing custom logic to place a distributed order of 20 TVs.

From the software architect perspective, the ease of extending existing Hybris entities is very appealing. For example, if you need to add customer reviews features, just add a couple of fields to the Product entity, create a new entity for ProductReview and link them together. Then add a row of those yellow stars to the storefront UI and you’re set.

User Interface

With Hybris you have a complete freedom of selecting the UI platform for your online store. So far we’ve been using HTML, JavaScript and JQuery framework. But we could have used Java, Flex, or Silverlight for the UI if this would meet our needs. Hybris uses Spring MVC that can present the data as JSP pages or send the raw data as XML or JSON to the UI tier – just parse the data and display them any way you like. If you prefer an easily customizable solution, Hybris includes a CMS module, which allows you to specify the Web page layout and change it dynamically during the run-time.

Product Maintenance

Yet another interesting Hybris module is called Cockpit, which becomes quite handy in environments where the information changes quickly and the customers need to see the latest product information. We even customized Cockpit for building our own administration tool for the online auction project.

Launching Server

The launch of your Hybris server can be configured to load only those modules that are needed for your store. Our fully loaded server starts within 2 minutes, which is not bad at all. The initial install of the Hybris server comes with the in-memory HSQLDB, which is fast, but not suitable for the real-world applications. We started with MySql Server and then switched to Oracle with very minimal manual tuning.

Payment processing

Integration with the payment gateway is probably the most critical component of any online store or auction. Hybris has its own payment module, but we’ve been asked to integration with another payment processing engine – Litle.com using XML as the data exchange format. Little accepts all kinds of credit cards, PayPal, eCheck, mobile payments, and bill-me-later option. Introducing another provider in your payment workflow can make a lot of business sense, but be prepare to find yourself in the middle of the finger pointing game until you finish the payment integration. Add some more cushion there if you are making project estimates.

Scalability

Hybris comes with a clustering solution from the box. Each node of your cluster can be configured to include only those Hybris extensions that it needs. For example, you can configure a cluster with one more for the administration module, three nodes for the store UI, and one node for the data indexing.

In March of 2012 Adobe has announced its partnership with Hybris. Adobe’s CQ5 will help in creating multi-channel digital marketing campaigns and building strong brands for online stores created by Hybris.

Room for improvements

Although our overall impression after using Hybris on a couple of projects is very positive, this software has room for improvements. I’m sure, Hybris management has their reasons for keeping its community closed, but it may hurt the adoption of the software. The product documentation is not too detailed and up to date. Hybris technical experts have to pay more attention to the developer’s forum. In many cases we’ve been using the source code de-compilers to find the answers to our questions. Since Hybris is built on top of Java EE, I’d like the future versions to include a JPA-based solution that would allow using the data persistence solution of our choice rather than a proprietary ORM.

Conclusion

While finding solutions in developing software with Hybris was difficult at time, we never hit the wall, which can be credited to the engineering team. Overall, it’s a solid platform for creating modern online stores and auctions.

When we started our first e-commerce projects with Hybris, we couldn’t find any publicly available online materials about this software written by people in the trenches. I really hope that this article will help anyone who’s still in the process of selecting the right e-commerce software package for their next generation online store.

Attending QCon, a Smart Conference

The last three days I spent participating in the QCon conference in New York City. This is one of the small group of conferences catering to software developers. Running a 100-speakers conference around the world is a hugely expensive project, and I hope the organizers broke even, which is very difficult in New York. Long story short – I like this conference. Speakers are well prepared, the crowd is eager to learn, the food is good, and the Wi-Fi works (I kid you not – 20Mbps up and down).

There were six parallel tracks  at the event, which were changing each day. This is unusual, but smart. Every morning would start in the main auditorium, where the track chairs would introduce every presentation from their track. This is also something I’ve never seen before at any conference, and I can confess that these short intros changed my personal selection of the talks.The third thing that impressed me were presentation evaluation sheets. This is how they looked like:

The KISS principle in action! Instead of forcing people to fill out these annoying questionnaires from traditional evaluation sheets, the attendees were asked to pick a sheet of the appropriate color and drop it in the bowl. Green, if you like the preso, yellow means the presentation deserved to be a part of the event, and red if it sucked. If you wanted to add some comments, pens were right there – just write whatever you want on this little piece of paper. Smart. Keep it simple stupid.

During these three days I’ve attended a bunch of quality presentations:

Security weaknesses in Java was very practical, and I can apply the new knowledge to one of the projects I’m involved with.

Learning how NASA uses cloud computing to process information from Mars rovers is another fact that may finally push me into the cloud space.

I was surprised to learn that Node.js, a server-side JavaScript framework, can process 695K transaction per second. It’s really impressive even though Java did 3.5M TPS in a similar setup.

I like presentations by Cameron Purdy. This time he was talking about HTML5, Mobile, and compared the roles of Java’s and C++ in today’s IT. He’s well spoken and always add lots of appropriate jokes to his talks.  Cameron listed a couple of reasons of why Java didn’t supplant C++. But IMO, didn’t mention the most importan ones:
1. Apple’s iOS has no Java
2. Microsoft didn’t upgrade JRE in Internet Explorer since ’98 (remember that infamous Sun-Microsoft las suite?)

Arun Gupta from Oracle is an excellent speaker, and it was interesting to see his first presentation showing how Java EE moves toward HTML5 clients (JavaScript – JSON-WebSockets-JavaEE).

I like FireFox’s add-on FireBug – the HTML/DOM/CSS/Network/JavaScript inspector/debugger. Now I know that it’s safe to install Firefox nightly builds to enjoy the latest greatness of this popular browser.

Peter Bell was showing how to use Spring Data with No SQL databases. While he was talking about a hierarchical databases, I felt like déjà vu. Seasoned (a.k.a. old) software developers knew about how great the hierarchical databases were since the last century. But working with them was not for the faint of hearts. SQL looked simpler, so programmers embraced relational DBMS. The years went by, and an average programmer became a little dumber, and SQL became a tough language to learn. This resulted in the flourishing of the Object-Relational Mapping frameworks. You know Java, but don’t know SQL? Not a problem. You’ll survive on our project – just write Java and XML. It’s going to be long, painful and non-performing, but ORM will allow us to bring juniors on board. Now, it seems that Spring Data can hide the complexities of dealing with hierarchical databases and even juniors will be able to work with them. Good luck, guys!

Charlie Hunt did a great job explaining the internals of Java garbage collector. Check out his recent book “Java Performance”.

Steve Souders is THE web performance guy. This time he was talking about performance of high performance in the mobile. Not sure if you are thinking about moving your application or a Web site to mobile, but you definitely should be.

Yesterday, I went to hear the presentation by Adobe’s evangelist Christophe Coenraets. I have a rule – if Christophe present at the conference I attend – it’s a must see. No matter what he’s talking about, his presentations are clear, well prepared and up to the point. In the past he was covering various Flex-related topics, but after Adobe decided to kill Flex, he’s working in the HTML5 field. Christophe’s presentation was about using JavaScript on mobile highlighting access to the native APIs via the PhoneGap library. IMO, this is a right way to go and I enjoyed this talk.

Adobe Flex framework remains a touchy-feely subject for me regardless of my own principle “Don’t fall in love with the Phillips screwdriver”. Any tool is just a tool, but I really enjoyed working with this framework. I understand that corporations exists to make profits. I understand that if a software product doesn’t bring money to the firm, one of the solutions is to nuke it. But it shouldn’t be done in such a cynical way. Last year, at Adobe MAX conference they said that the future of Flex is rosy, a month later they announced, “We donate Flex to Apache Foundation” explaining that Adobe’s changing the direction. That’s fine. A month later, they applied a hit man technique – an additional shot in the forehead – to make sure the body is dead for real. Adobe said that the Flash Player, the runtime required for Flex won’t go to Apache, and they won’t support new versions of Apache Flex. It’s as if Oracle would donate Java to open source, but the future version of JVM wouldn’t support future version of Java. I doubt Oracle would ever do something like this. Adobe won’t run the MAX conference in 2012 – are they ashamed of themselves?

I’ve attended two sessions on the agile methodologies, and have to admit that I’m still not sold. Sure enough, if a prospective client will ask if our company runs the project in agile mode, I’ll answer, “Sure thing!” And, most likely, what we do is agile. But we don’t do it as a religion with all paraphernalia that comes with agile methodologies. We work in a highly virtualized world. A bunch of VMs runs on our servers. But let alone VM’s – in some cases our developers are virtualized. They work from different countries and some of them never saw each other. Yeah, yeah, yeah…You put and shuffle the stickers on the board daily. Stand up meetings? I don’t care if our developers work in horizontal or vertical position, if they work in the morning, evening, or after midnights. As long as they get the work done, have good communication skills, speak English, and don’t behave as prima donnas, they are super agile. Please don’t show this blog to any of our customers or we can loose the project.

Finally, I’ve attended a great inspirational talk by Mike Lee, an American software developer living in Amsterdam (as he put it, the city that San Francisco wants to be). Now I’m also thinking of spending three-four weeks living and working from Amsterdam. I never been in this city, but plan to run  JavaScript training there.

My QCon participation was not just about attending sessions. QCon organizers were kind enough to offer a meeting room to the members of the Java NYSIG – a huge users group lead by Frank Greco. I delivered the presentation “JavaScript for Java Developers” on Tuesday evening. This presentation was videotaped by the QCon’s crew and should appear at InfoQ  soon.

You might have noticed that the most frequently used word in this post was JavaScript. Yes, as of today, this is my language of choice for developing the client portion of Web and mobile applications. If you want to hear more about it, attend our fifth annual symposium on software development  in New York City. Rephrasing the well known statement about the water, “You can’t stop JavaScript – you can only redirect it”.

Good luck QCon! Hope to see you next year.

Back From The Java Conference in Kiev, Ukraine

Last week I spent three days in Kiev, Ukraine participating in a new but rapidly growing Java conference titled JEEConf.  The city of Kiev is more than 1500 years old, and will host the European Football Championship in two three weeks.  During the first two days I was running two hands-on classes: one on JavaScript and another – “Intro to Java EE 6”. The one-day class “JavaScript for Java Developers” was an intensive way to learn this interesting language that requires Java developers to re-think their way of programming. The Intro to Java EE is a quick way for people who know Core Java to get familiar with the server-side technologies. In the last moment, I threw in there some materials explaining what Ajax and JSON are. They’re not the part of Java EE just yet, but play an important part in the architecture of many of the real-world Web applications.

I’ve spent the third day at this 650-attendees-4-track conference. The organization of the event was excellent (thanks to the folks from XP Injection – a training center from Kiev). That day I was delivering a non-technical preso on “How to become a professional Java developer”. It was about how to prepare a resume, minimize failures during the technical interviews, what not to do while resigning… Long story short – it was about actively building your career.

This presentation was taken really well by the 400+ people in the attendance. After presenting for one hour I had to spend another 40 minutes in the corridor answering lots of questions. Even though the vast majority of the audience were appreciative my the honest coverage of how I see the complex game called “Looking for Job”, I need to say that there were a couple of people who didn’t get it. I’ve seen a comment stating that I was teaching people how to lie at the technical interview. It’s like accusing a football coach of teaching the team players how to make tricks with the ball.I guess, from their point of view, a player should hit the ball straight ensuring that the other team always know where the ball goes next.

I didn’t have problems explaining the audience how to negotiate their salary regardless of the fact that I’m recruiting people from Ukraine and these newly acquired skills can cost me. I call this a fair game. In about a month, the video of this presentation will be published at the conference’s Web site, and if you understand Russian, you can form your opinion of what it was about. The English-speaking audience can go through the Powerpoint slides. BTW, I delivered a similar presentation in Bangalore, India at the First Great Developer’s Conference three years ago.

I enjoyed being in Kiev, the city I’m originally from. I enjoyed talking to young Ukrainian developers. I enjoyed seeing how the audience participated in discussions in English with the world-class speakers well known in the Java community (Arun Gupta, Sander Mak, Dejan Bosanac). I enjoyed being at this young, but very promising Java event. You can find photos and more of the feedbacks about JEEConf over here.

Thanks again to the conference organizers.   IMHO, it would be nice if next year you’d create and maintain a full English version of JEEConf’s Web site. Keep growing guys!

Generating Ext JS and Java CRUD Applications with CDB. Part 1.

Clear Data Builder for Ext JS (CDBExt) is an open source tool that automatically builds Ext JS/Java EE CRUD applications given one or more annotated Java interfaces. The generated JavaScript and Java code enforce best Ext JS and Java EE practices and is deployed on the development version of the Tomcat ready to run. A tiny library of Ext JS components accompanying CDBExt – Clear components – enables transactional data sync with the application server, including deeply nested hierarchical data transaction, features not supported in native Ext JS 4.

This short video opens a series of demos that will describe various modes of generating CRUD applications with the JavaScript clients enriched by the Ext JS framework from Sencha. At the time of this writing, CDBExt is in public beta and your suggestions are welcome. Please post your suggestions and findings at the Clear Data Builder’s forum at Sourceforge. You can also send us your feedback by filling out this form at our company’s site.

We’ve just started documenting CDBExt at the Clear Toolkit’s Wiki.

To add the CDBExt pluging to Exlipse for Java EE IDE, please select the menu Help | Install New Software, then press the button Add and enter the CDBExt in the Name field and http://www.cleartoolkit.com/downloads/plugins/extjs/cleardatabuilder/4.0/site.xml as Location.

In the next video I’ll show you how to quickly create a Web application using the Ext JS framework as a client and MyBatis framework for the data persistence. If you are not familiar with the HTML5 framework Ext JS, consider attending our 2-day workshop on the subject.

Identifying Design Patterns in Resumes

Just got an email from a person who calls himself a Senior Java Developer. Two out of five pages were devoted to  describing his skills. Below is an extract from the Skills section:

Java 2 (J2EE, J2SE) rich operational experience
JDBC 2.0. rich operational experience
EJB considerable operational experience
SQL rich operational experience
JSP rich operational experience
JSTL rich operational experience
Servlets rich operational experience
Struts rich operational experience 
GWT considerable operational experience
Spring framework rich operational experience

The list would go on and on. I didn’t even need to interview this candidate – it’s clear that he can’t be senior.  He already violated the Don’t Repeat Yourself (DRY) design pattern.  I can imagine what his code will look like…