Presented at 4th Geek Fest Panama

This evening I enjoyed the forth Geek Fest Panama and contributed with a talk about the SCRUM methodology for agile development in Spanish (slides as PDF).

After the presentations everybody started networking and talking about geeky stuff. I enjoyed very much the interest in my favorite topics (SCRUM and advanced Java development) and had some good conversations with a number of interesting people.

Lots of pictures were taken as well. I'll see where they will be posted and will then update this blog entry with some links.

Update: Here is a picture of me (on the left) talking with two Panamanians about Java development.

Checking a bean's health

Sometimes the little details get overlooked. While I'm working on my book about Acegi Security I read a lot of its source code and that's always a refreshing learning experience. In fact I'd like to recommend anyone to take advantage of open source and take it literally: read the source. It educates and stimulates.

What did I find? Nothing big, but still something I had overlooked in a past project when I wanted to make sure that beans that were vital to the system have been properly initialized. In Spring there is the InitializingBean interface, which defines the afterPropertiesSet() method. Spring will call this method on all beans implementing this interface after it has set the bean's properties.

Now you can use Spring's Assert class to perform checks and have an exception thrown, if something is wrong. It's all built-in and free.

UXcamp: Information Architects in Panama

Yesterday I attended the first session of UXcamp in the City of Knowledge. It was a gathering of Panamanian Information Architects presenting to eachother some new ideas and details about successful projects they've made. My guess is that about 30 persons from several agencies and client companies were present. All speakers were associates of Bootstudio, which happen to be the company that created the event. It wasn't a clever set up sales venue though. Instead it was peer to peer and everybody participated and exchanged ideas with the speakers. After all Panama City is a very small town and everybody knows eachother anyway. :-)

Information Architecture is an interesting topic and important when you are working on web applications. It doesn't matter so much what technology (PHP, J2EE or .NET) you use to implement your application. From a software developer's perspective IA is about narrowing down the specification for the application and define the user interface (the user experience as they say, hence "UX"). To a lot of other people who do not create applications, but merely static websites IA is about structuring the information and creating a proper navigational structure. Note that it's not about graphics design. This is the last step and one of the goals of UXcamp is to teach people that the actual design comes last.

I could touch base with a few people with interest in Java. But I have to admit that I got the impression most of them are about 5 years behind. For example they were talking about raw servlets and not about web frameworks. But probably one reason is that most Panamanian clients do not order web application to generate and conduct business, but just a web site with some interactive elements to be present on the Internet and get some leads. That reminds me of the attitude towards the Internet and web applications in particular in Germany in the late 1990s. The local market is small and many business leaders look for vendors in the US or Europe than in their own country and language. Still I am convinced that there are smart brains here in Panama. They just need a chance to work on a real project and get the right training on todays technologies.

Update: Find more posts about this event

Tags :

Most common mistake: start Swing applications off the right thread

While reading Improve Application Performance With SwingWorker in Java SE 6 from the Sun Developer Network I found that I made the most common mistake in Swing programming myself as well.

All Java programs start with an initial thread out of the main() method. A lot of people - including myself - will create the application main window as a JFrame there in main() and show the UI. That's wrong!

The correct way is to use the Event Dispatch Thread (EDT) for all user interface related stuff. So creating the application main window outside of the EDT is wrong, because it might lead to thread synchronization problems later. The right way to do it is to use the invokeLater() method from SwingUtilities:

public class MainFrame extends javax.swing.JFrame {
 
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new MainFrame().setVisible(true);
      }
    });
  }
}

Doing so has another advantage. The call to invokeLater() returns immediately allowing your application to perform other initialization tasks without delay. If a wait is required, one can use invokeAndWait() instead.

Smart brains in Panama

Over the last few months I made a unique experience here in Panama. I had the opportunity to train a team of Panamanian Junior Developers on the Scrum development process and the use of Spring/Hibernate/JMS/JMX/Swing/Lingo and more to build an Option Trading System from scratch. Training was given in Spanish, while communication with management and another Senior Developer was in English.

This work was certainly something special. It allowed to do some reality check in a real life situation on the skill level of Panamanian developers. And for me personally it was special as it was the first time I had to use Spanish in a technology related environment. I believe it turned out very well.

With regards to the Panamanian Junior Developers I have to say: whow! They really had to catch up with a lot of complex stuff that is usually not taught in any university or other institution in Panama. And they did well given the steepest learning curve one can imagine. The project was about an enterprise class application for the financial services industry. We created a standalone server application using the Spring Framework as a replacement for the usual J2EE application server. For the users we created a Swing based desktop application and used JMS to distribute financial data from the server to the client. Our client application talks to the server via Lingo RPC, which is an extension to Spring Remoting to allow you to use JMS as the transport. Other technologies used were JMX to manage internal server processes plus a bit SpringMVC for a webapp to manage users and other resources. For the database layer we used Hibernate and Spring's Hibernate template. To someone who never were exposed to ORM this is a challenge in its own. Adding all the other technologies and new patterns for designing an application it creates an exciting environment. And the Panamanians - straight out of school - not only had to learn these technologies, but the problem domain as well, did very well.

I do hope they will proceed on that way and I am certain they will become world-class developers really soon.

For me this means I have now much more time on my hands to work on the book project about Acegi Security. It was planned a few months ago, but I was too busy to get started. Now that my engagement with the team of my client is reduced to a few questions here and there I can concentrate on writing. It's another "first" for me as it's my first book project.

Nonetheless at some point I need to find a new commercial project again. I would love to train a team on the Scrum development process, test-driven development/design or some of the technologies I have expert knowledge in. Or - even better - assemble a new team of Panamanians and do an offshore project for a US/Canadian company. As I can tell first hand, Panama has a lot of smart brains. You don't have to go to India and can take advantage of a team located within the same time-zone as yourself.

Tags :