« December 2007 | Main | February 2008 »

January 2008

Jan 30, 2008

Another training in India

I'm traveling to India again, to give a training in Pune. If any of my colleagues or former students is reading this, I'll be happy to meet. I'll be there for about 2 weeks this time. It's a great time to visit India: it's not too hot and it's not raining (unlike in Israel, at the moment). Last time I was there, I almost drowned in the streets of Mumbai.

Of course, I'll be updating my Pune Tips page while I'm there.

On the technical side, I'm using my MacBook Pro to do the presentations. The original presentations are in PowerPoint format. Converting them to Keynote worked very well. I had just minor issues which I fixed while going over the slides, which I had to do anyway. I also have Windows running as a backup, just in case.

Last time I was using the Logitech Cordless Presenter. It's a great device. You can tell that the people who designed it are giving many presentations. It's hasn't changed in years, just to prove how close to perfection this device is. I don't have it anymore, so I'll be using my Apple Remote instead. On the plus side, it is smaller. However, it works by infrared, so you have to point it at the machine and have a clear line of sight. There's also a useful piece of free software called iRed Lite which allows you to customize the remote for your needs. I'll write about my experience with the Apple Remote when I'm done.

Jan 29, 2008

Bringing agility to desktop apps development

Remember the early days of Gmail?  The team was releasing new features almost every week. Many web applications take that approach, which is the essence of agile development: instead of monolithic development of a huge application which takes years, develop a small baseline and add more small features as you move along in short iterations of a few weeks each. Once your initial application is out there, you can see what the users like, what they don't like and improve. This approach has taken the software development world by storm.

The agile process is about responding quickly to user needs. It works great in web applications, like Gmail, but when it comes to desktop application development there some challenges. From the development process perspective, it's pretty much the same. Coding is still coding and design is still design. However, there are a few technical shortcomings.

The obvious one, is deployment. Web applications need no installation. Once the sever is updated, the software is immediately refreshed on all clients. This doesn't come easy for desktop applications. Nevertheless, most modern desktop applications have automatic updates that solve the issue. There are ready-made automatic updates for most platforms and today, when I install an application, I expect to have it updated automatically.

The less obvious technical gap is usage tracking. In web applications, it's the easiest thing to do. Your sever is getting all the user requests, so the data is yours to analyze. There are companies that bring this to an art form and can show you images of where your users' clicks congregate or even entire video clips of their interaction with the system. Check out crazyegg as an example.

This usage information is critical for assessing the software. For understanding what users use and what they don't use. It is one of the best tools a product manager can have, and in the desktop world it's not trivial. There are other tools like user interviews and surveys, but these provide only partial picture, which is usually biased.

Naturally, companies can develop their own usage tracking mechanisms right into their software. Developing such a service requires some investment. Especially when it comes to setting up a server that absorbs the data from your end users. Microsoft, for example, has such a feature in Windows called Customer Experience Improvement Program. However, this is specific to Microsoft software and cannot be extended to third party applications.

Eclipse 3.4 has something similar called Usage Data Collector. It's still in an early stage, but this could be a valuable tool for Eclipse RCP application developers.

This area is underdeveloped from the wrong reasons. Most desktop applications are far more complex than web applications, so they require much more insights to improve. However, it's the business model which makes the difference. In most desktop applications you pay for the application. You buy it once. In many web applications, you don't pay. They want you to come and hang around as much as possible. This why the usage information is so critical to their business.

Jan 22, 2008

Eclipse tip: quickly navigate between method implementations

I know, this feature is not new. It's with us from around version 3.2 of Eclipse. However, I was not familiar with it and I like it very much, hence, I'm sharing.  I like it so much, I think it will make my "Top 10 Eclipse Tricks" (which is a list I should make). This one is for Java developers using Eclipse. I'm sure other IDEs have parallel tools.

A few months ago I wrote a post about Java interfaces. I dwelled over the fact that using interfaces makes it harder to trace the code with static tools. When a class invokes a method through an interface, it can be very difficult (or even impossible) to determine which implementing method is invoked.

Here's the common symptom: you're reading your code and you see a method being invoked, you hit F3 (stands for Navigate->Open Declaration) or use the favorite Ctrl/Command key shortcuts that turns the method names to links. In the normal case, you would now navigate to the method declaration. If the method was invoked through an interface you will get the declaration in the interface, not an actual implementation. Now comes the time-consuming process of looking for the implementing classes of the given interface (use F4 to open the type hierarchy for the interface) and fishing for the method implementation.

Here's the solution: instead of hitting F3, hit Ctrl-T (Command-T on Mac). This is equivalent to choosing Navigate -> Quick Type Hierarchy. What happens next is pure magic:

  1. Eclipse searches for all the implementors of the interface.
  2. Among those implementors, it will search for those who implement the selected method
  3. It will pop-up a small tool-tip like box that shows the relevant implementors hierarchy. In this hierarchy, the interfaces and classes that don't implement the method are grayed out or not shown.
  4. You can now select a class. It even provide a quick-type selection: start typing the name and it will focus on the matching class.
  5. You navigate to the method implementation in the selected class.

Here's how it looks like.

Eclipse_quick_type_hierarchy

The "Quick Type Hierarchy" feature works in other contexts as well. Here's some examples:

  • When you're on a class or interface - it will show the hierarchy.
  • If you're on field, it will show where the field is defined in the hierarchy

Check it out, it's a very useful feature.

Jan 21, 2008

Enterprise Java customers are getting the Microsoft treatment

One of the inherent differences between the Java enterprise market and the Microsoft market is choice. When developing under .Net you're essentially bound to Microsoft products: operating systems, server software, etc. They even prefer that you use their database software and they'll provide better integration with it.

In the Java world, you have a choice. You can choose vendors and it's easier to mix and match software from different vendors. This is the meaning of having "open standards".

Last week, we've seen two deals:

  • Oracle is finally buying BEA Systems. Now, Oracle can offer the full package: database, server software, middle-ware, the works. And they probably have the best products out there. Personally, I'm a fan of WebLogic and I hope they'll keep developing it.
  • Sun is buying MySQL. This is another step forward for Sun in building an end-to-end open source solution with GlassFish as the application server. Of course, it will all be optimized to run on Solaris.

There's a famous Israeli song that says that being free means you're totally alone. This can be very true in the world of open standards. Small, innovative companies may appreciate the freedom without the fear. Looking danger in the face is part of the daily routine for small companies. However, large software companies prefer to minimize the risk.

From my experience, many customers in the enterprise world prefer to have a "one stop shop" rather than mix and match ingredients from different vendors, hoping they will work well together. This is what Microsoft is giving its' customers for years. This is what enterprise Java customers are going to get, as well.

Jan 16, 2008

Following the Macworld 08 Keynote

It seems that Steve Jobs' keynotes are becoming increasingly popular. I wouldn't be surprised if next year we will see a live broadcast of the event. I followed the keynote in several live blogs. Most of them couldn't accommodate the load and broke down at some point.

It was a mixed feeling. People were expecting more. Most of the people I interact with are very technologically oriented. For them, the introduction of a wireless router with integrated NAS (Time Capsule) or rental of movies from an online store (iTunes) using a digital media receiver (Apple TV) seem like yesterday's news. They're correct, nothing new from the technological point of view.

But there is something new here. This time, Apple is doing it. This means it will be simpler and work smoother. This makes the technology accessible by the majority of the population. When I'm training developers writing web applications, I have a motto: "when you're doing the UI, think about your old aunt sitting at home and trying to use it". It's hard for us techies to see that. Great technology is worthless without the correct packaging.

The new MacBook Air seems like Apple's attempt at entering the corporate world. It was missing. I'm thinking about executives who roam around the office all day, from one meeting to another. It is exactly what they need: it's light, it's ideal for e-mail and web surfing, it has a very long battery life. Just perfect. And the icing: it will make the correct impression on your customers, competitors, employees, colleagues. Again, the correct packaging.

The one thing missing is a VGA connector for presentations. This is essential in the corporate world. Even if you arrive at the meeting and you were not planning to do a presentation, you may still want to connect your laptop to a projector and bring up a document. I haven't seen a non-Apple laptop without a VGA connector, but you won't find it in any of the Apple laptops. They moved on to a digital connector and you need to use an adapter (included). It's a real annoyance for those who like to travel very light. Just pick up your laptop and go to the next meeting. Don't think about other things you need to take.

I'm glad that my beloved MacBook Pro did not become obsolete 6 months after I bought it. It's still one of the best laptops out there. I'm just wondering:

  • The current MacBook Pro touch-pad already supports multi-touch. For example, scrolling is done with two fingers. Will it support the new "gestures" interface by a software upgrade?
  • Will Time Machine be able to work over the air even without the new Time Capsule?  I would really prefer having a router and hard disk combination.

Many people are asking these questions. I'm guessing I'll have my answers soon enough.

Jan 01, 2008

Self discipline...

I came across this great post, which concluded with a paragraph I must quote:

The world is an interesting place, and we live in a time that is very exciting for entrepreneurs. There are lots of cool problems to solve. Don't let a lack of self-discipline interfere with your capacity to do great things.

Whenever, I talk to people about my startup, the most common reaction is "oh, I don't think I could discipline myself to work alone at home". It's tough. Sentences like the one above can help. Hang it over your head if you have to.

Have a creative & productive year.

Zviki