Back From Ukraine

Last week I was participating in JEEConf – a Java conference in Kiev, Ukraine. It was the fourth annual conference attended by 700 people despite of the unrest on some of the Ukrainian regions. Kiev was quiet, peaceful and nice looking though.

A day before the conference I’ve delivered a presentation at the National Technical University of Ukraine (aka KPI). Only about a hundred of 50 thousands NTUU students were interested to learn about the new features of Java 8. No hard feelings guys. Let’s make it two hundred next year. 🙂

The next morning I’ve delivered the same presentation to at least 400 people at the conference, and in the afternoon I ran two consecutive sessions on HTML5 development for about 150 attendees. I’ve included   all these numbers here to draw the attention of the international speakers. Guys, you’re welcomed in Ukraine. There were many international speakers from all over the world this year too. The technical level of the conference is really good.

Due to political reasons the local currency (hryvna) is inexpensive for foreigners, but Kiev offers lots of nice places for sightseeing, has good restaurants, and night clubs. Here’s a photo of one of my dinners there (borshch, salo, vodka, and more):

budam424

 

This was my third consecutive visit to JEEConf, and the conference organizers promised not only to add a large cake to their whiskey party, which is a good reason for me to attend this conference next year!

The photos from Kiev’s conference are here and here. A nice looking guy in black FARATA t-shirt is me.

In June I’m attending the Internet of Things Expo in New York City – I’ll be presenting an approach of integrating little “things” into Java enterprise applications. I’ll be using one of the insurance business workflows. Our team builds software for insurance agents (http://www.surancebay.com), and introducing Internet-powered small devices opens lots of interesting opportunities for us.

In August I’ll be participating in a small unconference in Greece titled JCrete. In the unlikely event you haven’t heard about JCrete, watch this short video.

End of September is the JavaOne time, and Oracle kindly offered free conference passes to Java Champions. I’ve submitted a talk proposal there too. But I’m planning to attend JavaOne even if my talk won’t be accepted. Java is stronger than ever, but having yet another reassurance never hurts.

That’s all, folks. Back to work.

He calls it rude

This will be the easiest blog to write because I’ll just copy/paste one of the today’s email threads. I swear, I have not changed a word.

X. Modern Web Application development for Java Programmers: 1) Is this the first iteration of this course? 2) If no, do you have any testimonials from past students that you could share? 3) How often is this course repeated? I’m interested but concerned for my work load when the July course hits it stride. Thanks, X

Me.
1. Third
2. No
3. 4 times a year
4. If you can’t commit 20 hours a week don’t waste your money.

X.  What an offensive response ! I don’t need advice on how to spend my money. I expected you to share the date of the next course so I’d be in a better position to make a decision if July or the next iteration would be better.  You chose instead to be rude and in the process lose what was almost certainly a new customer. 

Me. You call it rude, I call it honest. It’s OK to lose a customer sometimes.

 

JMS 2.0 remote client for embedded HornetQ in Wildfly 8

While testing the new JMS 2.0 API, I wanted to see an example of the remote client connecting to a messaging server. I decided to start with the HornetQ messaging server that’s embedded into JBoss Wildfly 8. Folks from JBoss sent me a link to the the GitHub project Wildfly/Quickstart with lots of Wildfly Java EE 7 examples. The HelloWorldJMSClient was the one I was looking for.

The readme file contains detailed instructions on how to compile and run the example. Seeing a requirement to have Maven 3.1 or better looks like an overkill for a helloworld type example. Installed Maven using homebrew – it gave me Maven 3.0.5. Does it mean that helloworld wouldn’t work? Yes it does, but not because of the old maven version. The pom.xml has references to old versions of Wildfly.

In two days I’ll be teaching a JMS class online. Sending students to the maven maze is not appealing to me. Here’s what I suggest. Follow the instructions from the Readme.md to start the Wildfly server, create a user, and a queue. But then, compile and run HelloWorldJMSClient by simply adding jboss-client.jar to the classpath – it has all required JNDI and JMS classes. For example, this is how you can do it from a Terminal window (or a Command Window):

java -cp “.:/Users/yfain11/wildfly-8.0.0.Final/bin/client/jboss-client.jar” org.jboss.as.quickstarts.jms.HelloWorldJMSClient

That’s all. Look ma, no Maven! I sent a GitHub pull request to the Wildfly folks to add this solution to their readme file.

If you like working in IntelliJ IDEA IDE, just add the jboss-client.jar as an external library to your module. If you are an Eclipse fan, go to Project Properties | Build Path and add the jboss-client.jar as an external jar.

A bit later I’m planning to do the same test against GlassFish/OpenMQ combo. I know that in the past they were suggesting using appclient for these purposes, but there should be a simpler way to do stuff.

Submitted a proposal to IoT track at Cloud Expo New York

In June a large expo and a conference Cloud Computing comes back Javits Center in Manhattan. This year it includes a new track Internet of Things, which promises to be “The Next Big Thing”. In our company we have enough of early adopters of anything related to software development, and we’d like to present what we can do in this field. Here’s the proposal I just submitted to the IoT Expo:

ABSTRACT

Case Study. IoT In The Field Force Automation

From software development perspective IoT is about programming “things”, about connecting them with each other or integrating them with existing applications. This case study will show you how small IoT-enabled devices from multiple manufacturers can be integrated into workflow of an enterprise application. This is a practical demo of building a framework and components in HTML/Java/Mobile technologies to serve as a platform that can integrate new devices as they become available on the market.

BIO

Yakov Fain is a co-founder of two software companies: Farata Systems and SuranceBay. He authored several technical books and lots of articles on software development. Yakov is Java Champion. He leads Princeton Java Users Group. Two of Yakov’s books will go in print this year: “Enterprise Web Development” (O’Reilly) and “Java For Kids” (No Starch Press).

Keeping my fingers crossed…

Free Java Training Videos

After years of running traditional in-classroom and online trainings “Intro to Java and Java EE” I decided to try something different: I’ll record training videos and will be publishing them once a week for free. These lessons will have references to my powerpoints, all classroom walkthrough, and each lesson will end with with the homework. Will you do the homework? It’s up to you. Most people won’t. As a matter of fact, most people wont’s even watch more than a couple of these video lessons. Is this too cynical? This is how free stuff works, and I’m perfectly fine with this. But.

But, there will be a small percentage of motivated people who really want to learn Java for finding well paid job whatever reason. These people need the instructor’s feedback. These people may even plan to do all the homework assignments. These people need to be able to interact with someone who’s more experienced in Java than there are. These people can purchase support for this course for a small fee.

This training will consist of 18 recorded videos, and the paid support will consist of the 18 corresponding online group sessions, where I’ll be answering questions and commenting on homeworks. Those who are interested in purchasing such support can register here (English speaking) or here (Russian speaking). If you’ll just want to watch the videos, subscribe to my youtube channel, where I’m publishing these videos in English and in Russian in parallel.

I know about this MOOC movement. I really like the fact that Coursera, Udacity and major universities publish videos of their lectures on different subjects. I don’t expect hundreds of thousands downloads of my videos. But I know for sure that I’m a really good and modest instructor. I explain stuff well. My Java video lessons will be competitive. Hope you’ll enjoy them too!

Java Swing Has to be Deprecated

Every time I start teaching my new Java class I’m looking at the Swing units in the manual asking myself, “Why my students need to know Swing framework?” Well, I need to teach them how to program GUI, event listeners, asynchronous worker threads and event loop that are pretty much the same in every programming language that deals with UI. My students create applets and test them in appletviewer, then they are going through hard times trying to run them in Web browsers… In the end, I tell them that they won’t be going doing Swing programming in the real world projects. I also tell them that if Amazon.com would decide to re-write their UI in Java they’d be out of business in no time.

If not with Swing framework, how should my Java students learn GUI programming? There is another Oracle product called JavaFX. It’s a better looking wrapper for Swing. It still runs on JVM, so Amazon would go out of business as quickly as with Swing, but at least with a better looking UI.

Java developers look down at the HTML/JavaScript crowd. Yes, programming in JavaScript is not as productive as in Java, but HTML5 applications usually look nice. HTML5 developers know that having a Web designer producing professionally looking CSS is a must. Whereas Swing components are ugly by default. They are so last century.

Recently I was attending a presentation on a particular Eclipse plugin that could produce Web reports. The speaker was using Twitter API to demonstrate how easy it was to generate a report finding tweets based on a certain hashtag. Tada….Report is generated, the Web browser opens the report’s URL and pops up the modal dialog asking to enter the search parameter. What an ugly dialog box that was! Eclipse grey style, 90% of its real estate was empty with an input field on top prompting to enter the parameter’s value. No one in the audience (all Java developers) seemed to care. They are all used to ugly GUI in enterprise applications. OK, this product was using RCP UI components, but the Swing ones are definitely not better.

The sooner Swing is deprecated the better. Even if JavaFX has no future in the Web or mobile applications, it has to become a mandatory replacement for Swing. Just because it promotes a better looking UI. Just because it promotes better taste among Java developers, who live in two different realities: the ugly depressive GUI at work and the eye candy world of iOS or Android applications. Let’s make a first step toward merging these worlds by killing Java Swing framework.

Healthcare.gov: Who Crafted the Suit?

I’m sure every person who is involved with development of commercial Web application knows about this huge failure – release of the healthcare.gov. I’ve been following this story too, because it’s about the software development – my bread and butter.

I don’t have experience of building Web applications that have to serve tens of millions of customers. I’m just a co-founder of two IT companies: one created software product that’s by more than 100K insurance agents, and the other one is an IT consultancy that helps customers in creating large online stores. But when it was reported that people can’t even login to the system, it was clear to me that the application would require some serious redesign. It’s not just about applying some patches here and there.

People who developed this site made their mistakes, but let’s not simply badmouth them – based on bits and pieces of information we’re getting, the roots of the problem are in the product owner – the government. The product requirements kept changing as recent as six months ago. Initially, the healthcare.gov was supposed to allow browsing insurance marketplace anonymously. WSJ wrote that the requirement to force people login just to enter the application was given only a month(!) ago, which required a very serious change in the application architecture. Now the IT contractors were tasked to introduce the infrastructure of authentication servers capable of processing millions of people.

The fact that this was a pet project of Barak Obama put tremendous pressure on people who were building this system. All these fanfares about October 1st opening were not credible as many other speeches by the President of the USA. CNN reports that the Web site was crushing during the tests with several hundred users, but the administration decided to go live anyway. WAT? Did they expect a miracle? A couple of years ago a prospective client called us for help stating that they’ve developed an online casino, which was supposed to go live in a month, but worked fine only if… there was a single user.

The statement that “our team is bringing some the best” and the brightest minds to fix the issue is promising, but it’ll take time to not fix, but redesign the system. I’m not the best and brightest mind, but I know how the best and brightest started working on this issue. They need time to learn the current version of the system, which some people say is a half-million lines of code. Three weeks after healthcare.gov went live it’s still not working. If a system can’t be fixed in three weeks, it has very serious design flaws. Sending navy seals won’t help here.

It’s funny to hear from people who were developing different component of the system statements like “We’ve developed only the UI portion of the system. After the user hits the button Apply Now, it’s not our code”. Other people happily report that the data hub is operational.

kostym
Forty years there was a popular Russian-speaking comedian Arkady Raikin. He had a sketch appearing in a very poorly crafted suit. He came to this made-to-measure suit store asking, “Who crafted this suit?” One of the craftsmen shows up asking “Do you have problems with the buttons?” “No, the buttons are sewn really well, but who crafted this suit?”

Computer World magazine wrote an article stating that healthcare.gov “didn’t have a chance in hell“. 94% of projects that cost $10M or more fail(!). The author of this article writes, “The healthcare.gov contractor was initially awarded more than $93 million for the project, but costs have been soaring above that.” OK. Was this a typical situation when the salesman of this IT firm was tasked to win this project at any cost, and later on “our guys would figure out how to deliver”? Or the IT firm signed off on a project scope that was substantially increased later on? This is a super high-visibility project, so there is a hope that we’ll find out who did the initial estimate of the job, and who changed the scope. Interestingly enough, at this point nobody remembers who and when introduced the requirement to force people to create an account first and then browse the insurance marketplace? Was it even in writing? Maybe an email? No? Nada? Nyet?

Recently Barak Obama said that the good part of being a president is that people always return your phone calls. There is another advantage of being president. When your subordinates deliver really bad software, you get to simply say “Nobody’s madder than me about the website not working as well as it should”. What do you thing would happen if I’d deliver to the client a non-working Web application and said, “Nobody’s madder than me?” Who am I. Definitely not the president of the USA. Sometime people don’t return my calls too. Oh well.

Actually it’s not that bad. You need to give credit to the administration that was able to quickly put together a team of people who take people’s insurance applications over the phone, and the wait time is not more than one minute. Another help is on the way too. According to a reputable online publication The Onion, the new and improved Obamacare program released on 35 floppy disks.

Something’s gotta give. But what’s going to happen with this nice looking girl from the Web site? Is she even married?

girl

Update. I was trying to give a benefit of a doubt to the team developed healtcare.gov site, but when a congressman said this morning that he couldn’t enter the date because the Web site was constantly complaining about the wrong date format, it clearly shows me that healthcare.gov was developed by a bunch of rookies that either have no clue (or don’t care) about how to do a basic validation. In this case the Web site should be redesigned from scratch.

Java unconference in Crete. Day 4.

The fourth day started with the session “Scaling up teams. Motivating people to learn new languages”. It was a discussion about why not too many developers are willing to learn new programming languages. We were talking about two real-world situations:
1. The team lead gives developers 30 min a day to learn whatever software they want, but they use this time for coffee.
2. The team lead makes arrangements with the management to take 5 people to a hackaton instead of going to work at the firm’s expense – only three out of 60 people signed up for it.

IT managers often face the choice: either hire professional contractors experienced in specific language/framework/tool or train their own employees. IMO, lack of motivation is damaging to any IT shop, and people who are unwilling to keep their skills up to date should be let go. The sooner the better.

The next session was “Embedded Java”, which presented another proof that the unconference format works really well. Four people gathered in the room and everyone said that he was interested in this subject and hoped that someone else had a real-world experience working with embedded Java. No one knew much about it, and the session lasted for 10 minutes. Mattias Karlsson had this little chip with Java SE embedded. One of the use is to hang it on the trees in the forest. If the chip’s moving it’s a signal that some intruders are illegally cutting these trees. Programming for embedded devices is an interesting trade that requires software developers to write efficient code that can run in the devices with limited memory and slower CPUs.

Then I’ve joined the session titled “Devops Tooling”. Devops are species that beside writing code are curious about how it’ll run in production. Typically devops are breeded in startups. Do you care if your programs log messages that can be useful for people from operations and customer support? If yes, you have a chance to join devops population. If you went as far as setting up monitoring tools so people from operation could be aware of the status of your app without the need to bother your highnessy – you have arrived to your destination. On the photo you see three Carl Quinn, Mattias Karlsson, and Kirk Peperdine participating in the devops discussion.

SONY DSC

For me the technical part of the conference finished in the room labeled “Functional programming in the post JDK 8 world” convened by Andres Almiray.
Andres stated that if you like it or not – you’ll be doing functional programming.
Juergen Strobel noted that in Java you should think first of a proper immutable structure, and then use functions. Java 8 has lang constructs and API to allow functional programming.
IMHO, for functional programming should be done in a self-contained modules using other JVM languages like Scala. Sven Reimers noted that the level of interoperability between Java and Scala running in the same VM is immature yet.

Then we spoke about Java 8 lambdas. Initially Java was a created as a blue collar language and now blue collars evolve. But I’m wondering how to teach the new Java 8 features to newcomers? I usually start with explaining object-oriented programming from Lesson 1 of my trainings. Mixing OOP and functional style of programming in the intro courses doesn’t seem right. It would be like teaching a two year old to drink beer – at this age kids have an impression the milk is the right beverage.

To my taste, Java remains the best language to teach the “Intro to Programming” course. People in the room suggested that Python or Scala could be used as the first one. Sure, the newbie’s mind is not cluttered with the Java way of doing things so the concepts of functional programming will be easier to digest.

In the evening the entire conference has gathered in the Heinz’s house. A Greek folk band was playing, some people were dancing while the others were eating, drinking and chatting Java.

SONY DSC

Carl Quinn from Java Posse showed photos of the 3D printer he was building at home. I’ve asked Carl about Bruce Eckel’s Java unconference. He said it’s a similar event, but people are not allowed to bring laptops to the sessions and there are no formal presentations – it’s just a mike in the middle of the room – people discuss stuff.

For most of us this unconference is over, but some people are staying one more day for a hackaton were they’ll be explore Java 8 lambdas hands on.

JCrete is a well done and interesting event, and such format is more appealing to me than a formal conference setup. Between you and me, I liked it more than JavaOne. It’s a lot more interactive, and you meet and talk to many well known and respected people willing to share their experience. For me it was a new conference format, and I’ve enjoined every bit of it. The informal discussion format of the Java Specialists Symposium works perfectly for me. While traditional Java conferences can be useful too, the JCrete unconference gives me the biggest bang for the buck let alone those beautiful beaches and Greek hospitality. The future JCrete unconference may have different disorganizers, but meanwhile, my hat off to Heinz Kabutz for disorganizing this wonderful event three years in a row.

I’ll be back!

Java Unconference in Crete. Day 3.

In the morning of the third day I was running a session about developing HTML5 applications. The main discussion was on pros and cons of developing HTML5 vs native applications for the mobile devices. IMO, going native is right if you can afford it. This recommendation is as good as saying that driving Mercedes S-class is better than driving a Fiat, which I mistakenly rented. But hey, not only this small car was taking me over over the Cretan hills, but I was giving rides to other Java developers too. If you’re interested in HTML5 development, I can offer you to read unedited drafts of our upcoming O’Reilly book.

Then I joined a session on Java frameworks. I believe that frameworks should be used if they allow developers to write less code and are not intrusive. The audience has divided into two camps – those who don’t like Hibernate and the camp that I belong to. I won’t repeat my reasoning here, but will rather give you a couple of links to my older blogs on the subject. Here’s the first one, and here’s one more.

I’ve completed the technical part of the day attending the session by Morris Naftalin titled “Navigating Streaming API”. This is a new Java 8 feature, which looks interesting as long as you can find a use case for it. This was the only session where I didn’t have anything to say. Yet. Actually, silent attendees are in minority at this unconference. I believe only one out of four of the participants didn’t say a word at the technical sessions. For these people the JCrete unconference was even more interesting and useful – they were in the learning mode.

Here’s one more thing that turns this conference into unconference. This morning JCrete organizers were wearing t-shirts of Jfokus – another Java conference.

SONY DSC

At JCrete the afternoons are for tanning and swimming, and we went to the local beach. The
water was warm and clean. For under two euros you can get a nice cup of Greek coffee, which is a treat.

In the evening I took my wife out – we’ve visited a lively city of Chania. What do you eat in the restaurant located in the sea port? You got it – the fish. The owner of the restaurant opened the fridge and showed us the fresh catch they got an hour ago. We picked a red snapper and a similar fish, which starts with a B. In addition to the grilled fish we had Greek salad, an octopus, fried cheese and a bottle of local wine. When I asked for the bill, they brought a watermelon, grapes and a small bottle of raki, which is a better version of grappa. It was on the house. Nice!

SONY DSC

The evening finished as usual by the pool. This time Kirk treated us with an expensive Tokaj wine, which he brought from Hungary. If you can’t afford drinking expensive wines, enroll into one of the Kirk’s training classes on Java performance optimization. It seems that the demand for such skills is pretty high.

One more day, and the conference is over.