Software Development

Jun 27, 2008

OmniFocus as a Development Management System

I'm developing software and most of the time I'm working by myself. This does not mean that I don't need to organize my work. As we all know, setting goals and staying focused is crucial. That is a challenge for me - I'm usually bursting with ideas for features and enhancements. I need to prioritize and keep tabs on what I'm doing. Still, I don't want to lose any good ideas for the future.

This is where OmniFocus comes to the rescue. OmniFocus, is, IMHO, the best task management software I've used. It is Mac only and it is based on the well known Getting Things Done method, aka GTD. I'm not a strict GTD follower, yet, I still get everything I need from OmniFocus. In this post, I'll show you how to turn OmniFocus into a development management system for tracking development tasks and bugs. For teams of developers, it cannot replace a full blown system like Bugzilla. However, if you're like me, working in a one man team (no sharing option in OmniFocus) this could be a great solution. Before we start, I recommend reading a bit about GTD if you're not familiar with its' basic concepts.

Overview
Here's an example of my "Planning View"
Planning View
My system is based on the following:

  • Product versions are shown as Folders (for grouping projects)
  • Each version will have the following projects:
    • Active Projects - Bugs and Enhancements
    • On Hold Projects - Waiting tasks - organized into 3 projects according to priority
    • On Hold Task List - Ideas for the future
    • Complete Task List - I drop finished tasks here to clear the clutter
  • I have contexts according to the product modules:
    • Main Context is called 'Dev' - to distinguish from my personal tasks
    • Under 'Dev' I have a hierarchy of modules like Front End and Back End, under Front End I'll have all the flows, etc.
  • Tasks usually have tags: when entering a task, I'll usually start with a tag, like [bug], [check], [idea], etc. This helps categorizing tasks later, but not a necessity.

Entering Tasks
I usually use the Quick Entry window to enter new tasks. The great thing about it is that I can invoke at any given time, jot down an idea, bug or just something that I need to check later, and immediately get it out of my head. I usually add a task note which contains as many details as I think I'll need to understand my original idea. I also enter a context (see hereunder), but not a project - so it will remain in my inbox for review.

Entry Window

If you want to include screen shots, you can just add it as a note to the task. I find that Skitch is the perfect companion for that, since it provides simple tools for easy annotations. You don't need to save the file, either, you can just drag it from Skitch to your OmniFocus item.

Working
I use either the Planning view or the Context View for that. I find the Planning View more natural for that. At the early days of the version you can decide to focus on Enhancements and proceed to bug fixes. That's why I find the separation to projects helpful. If I have a of lower priority, which I'm not interested in working on, I just push it to one of the Waiting projects according to its' priority.

When fixing bugs, the separation to Enhancements and Bugs becomes even more helpful as I usually have the tendency to get carried away and work on enhancements instead of fixing bugs. I have one super-task inside the Bugs project which I call "Can't Reproduce". Here I drop bug that I can't reproduce for some reason. You can also have a separate task list for that.

Contexts
The organization for contexts is critical here. When entering the context for a task I try to find the one that best fits. However, if I have a task for fixing something across the system, it will have a more general context, maybe even the top 'Dev' context.

One of the major benefits of this system is the ability to work by context. Clearly, if you have a large system, you cannot keep it all "in your head". This means that, when you're starting to work on some module, weather it is on an enhancement or a bug fix, you're going to spend some time to reacquaint yourself with the code.

When working by context, you can group tasks dealing with the same module and perform them together. Conceptually, it's the basic reason for having contexts like "@home" or "@supermarket" in GTD. You want to gather all the tasks which are relevant to your current context. That's exactly why module is the same: since I'm here, let's be productive and do everything which is in the vicinity, which is in the same context.

Context View

Review
From this point forward, it's basic GTD stuff. I have a daily review of my current tasks and I set up goals in terms of due dates. I have weekly reviews for reviewing all (hopefully) my tasks, promoting, demoting and eliminating the tasks no longer relevant.

Conclusion
I presented a way for turning OmniFocus into an effective development management system. What I like the most about this system:

  • The ability to quickly get things off my mind, knowing they won't be lost.
  • Gathering work by modules, i.e. contexts.
  • The outlining ability - breaking tasks into smaller and smaller sub-tasks. I think this is the main selling point of OmniFocus specially.

Hope this works for you, too. Good luck.

Jun 22, 2008

Silent June

This is my first post for June and June is almost over. I had a lot to say, so it's not that I was out of ideas for posts. The main reason is that I'm working hard on pushing a beta version of my product out the door. I'm ironing out the final bugs and soon I'll be ready to start a private beta. I'm doing my best to start testing it publicly as fast as I can. 

I have a lot on my mind these days. For me, coding was the easy part. The road ahead is going to be the real challenge. It is suffice to say that this phase will only be complete once I'll get the first payment for my launched product. Seems like a long way to go. I'll share some of these challenges in my blog.

On a different note, we're now officially in the summer. Spring brought rejuvenation to my workspace: I upgraded to Leopard, switched to Firefox 3 and started developing using Eclipse 3.4, which is still in RC status. I have a lot to say on all of these products and I'll be blogging about it soon. However, if you're reading this using Firefox 2 than just stop right there and download Firefox 3 now. I'll just say it feels like I bought an extra gigabyte of RAM. 

P.S. If you're in Israel and interested in seeing my product in action, drop me a line and we can meet for a one-on-one demonstration. I'll be happy to get some first hand feedback. 

May 29, 2008

Up to my neck in SWT GUI

Last week, I discovered, to my dismay, that I need to write my own list widgets instead of using the built-in SWT widgets. The breaking point occurred when I found that I cannot have lists with variable height rows. I decided that this is something I cannot accept in my UI. I'm a strong believer in usability.

One week later, I'm a smarter man. Building my own list was nothing short of an eye-opening experience with SWT programming. Up until now I was on the SWT expressway. Sure, it will get you from A to B in the quickest way. However, you'll be missing out on everything around you. If you want to get to know a place, you need to take the B-roads, visit the small villages and... well, metaphor exhausted. 

Looking back at the journey, here's some thoughts:

  • SWT is very complex, especially if you don't have previous experience with similar widget frameworks like Swing, AWT, etc.
  • SWT is poorly documented, considering its' complexity and magnitude. Quality information on the net is scarce. I found myself digging into the sources of SWT again and again. True, the public interfaces and methods have good Javadoc. However, the rest of the code is poorly document. It sure make things harder.
  • From the reasons above, I found that it is much quicker to take a trial and error approach than to fully understand what's going on. My "SWT enlightenment" came when I decided to ditch that approach and really understand what's going on.

Bottom line: my UI works exactly as I wanted. I took advantage of the effort and added a couple more features which I couldn't with the oh-so-limited list widgets.

Apr 30, 2008

H2 Database - Performance Tracing

I first wrote about the H2 Database last August. I've been using it since and so far I'm very happy with it. The article I wrote is still getting hits from people searching for information on H2 (here's a fun fact, if you search Google for H2, you'll get the H2 Database before the H2 Hummer) . I'm now working on improving the performance of my application. Like everything else in H2, it is very simple to trace the database performance. This article demonstrates several techniques.

Note: the tools shown here are relevant to H2 starting from version 1.0.70. Since H2 is still work in progress, this may change in the future. I'll do my best to keep this article up to date. I also included some useful links to the original H2 Tutorial.

Generating Trace Files

H2 can output trace files which include the performance information. These trace files contain all the commands executed and their execution details. In the examples hereunder, I will use a database called mydatabase.

First, you need to specify the trace level.  You do this by setting a property called TRACE_LEVEL_FILE. The best way is to simply specify this upon connection to the database. This is done by adding ";TRACE_LEVEL_FILE=n", where n is the trace level, at the end of your database connection string.  The trace levels are: 0=off, 1=error, 2=info, 3=debug. Use trace level 2 or 3 in order to get the performance information. For example:

jdbc:h2:file:~/mydatabase;TRACE_LEVEL_FILE=3

From that point, H2 will start writing trace logs to the directory where the database file is located. The trace file is called mydatabase.trace.db. Once the file reaches the maximum size, it is rotated to mydatabase.trace.db.old (the old one is erased). You can set the size of the log file by setting TRACE_MAX_FILE_SIZE. My connection URL, looks like this:

jdbc:h2:file:~/mydatabase;TRACE_LEVEL_FILE=3;TRACE_MAX_FILE_SIZE=20

H2 is very tolerant regarding trace files. You can rename the file and it will create a new one instead. You can set the trace level at any given time, not only upon connection. You can use the H2 console for that, just connect to your database instance and execute the command:

SET TRACE_LEVEL_FILE=3

Using the Trace Files

SQL commands in the trace files will have the following format:

04-30 11:47:14 jdbc[10]:
/*SQL l:61 #:14 t:1*/SELECT * FROM EMPLOYEES WHERE EMP_ID = ? {1: 243};

The first line shows the date and time. The second line shows the following information:

  1. l:nn - The length of the SQL. Will not appear if there are no parameters (see below).
  2. #:nn - The number of rows returned or affected. Will not appear if no rows were found or affected.
  3. t:nn - The execution time in milliseconds. Will not appear if the time was less than 1 ms.
  4. The SQL command itself with all the parameters, in case you're using a prepared statement. You can simply copy the SQL with the parameters and execute it through the H2 Console, which is very handy for debugging.

The trace file is your first stop when checking your performance. You can check every single command and see how it performs.

SQL Command Statistics

H2 includes several tool, among them a utility that generates statistics from a trace file. The tool is called ConvertTraceFile. The tool takes a trace file as input and has two outputs: a Java class (not relevant) and an SQL script which contains all the SQL commands and the execution statistics.

The ConvertTraceFile is invoked in the following manner:

java -cp h2.jar org.h2.tools.ConvertTraceFile -traceFile mydatabase.trace.db

You should specify full paths for h2.jar and your trace file if necessary. Alternatively, make sure h2.jar is in your CLASSPATH. The SQL script will be in a file called mydatabase.sql. You may also specify a different file name (use -? to see all the available options). 

The SQL script file holds all the SQL commands which were executed when the trace file was active. At the end of the file, you will find the command statistics section which has the following form:

-- self accu time count result sql
-- 89% 89% 3309    12     234 SELECT * FROM EMPLOYEES WHERE EMP_ID = ?;
--   5% 94% 192 1015   1015 UPDATE EMPLOYEES SET NAME=?, DEPT=?, MANAGER=? WHERE EMP_ID=?;
--   2% 97%   87   421    421 UPDATE DEPARTMENTS SET NAME=? WHERE ID=?;
--   0% 97%   26 8123   8123 CALL AUTOCOMMIT();
--   0% 98%   16    18    736 SELECT * FROM DEPARTMENTS WHERE ID = ?;
--   0% 98%   14   424    740 SELECT COUNT(*) FROM DEPARTMENTS;

The columns are:

  1. Self - The percentage of the given command's time from the total time.
  2. Accu - The percentage of the accumulated time from the total time. The accumulated time is the time of the commands listed so far.
  3. Time - The total time of the command executions in milliseconds.
  4. Count - the number of times the command was executed.
  5. Result - the total number of fetched or affected rows.
  6. SQL - the command itself

Needless to say, the statistics you get can easily be imported to OpenOffice Calc or Micsoroft Excel for further manipulation (you can use a fixed column import).

Conclusion

I like simplicity and this is one of the main reasons I enjoy using H2. The above tools enable you to get statistics and detailed information on SQL queries and commands executed in H2.

Good luck with your performance tuning.

Apr 24, 2008

You've gotta love Platform Independence

It has been a rough week. Last week my MacBook Pro burned his logic board and then I managed to brick my PC. This week, though, I got a new mother board (with a decent Core 2 Duo processor) for my PC and I'm up and running.

Going back to Windows is annoying as expected. The worst annoyance comes from the difference  in the location of the Mac "Command" and the Windows "Ctrl", especially when it comes to copy/paste: in OS X it's Command-X and in Windows it's Ctrl-X, but the Command is placed where the Alt key is in Windows. I also miss Quicksilver and Exposé. I know, there are alternatives, but I just couldn't be bothered to install any.

On the upside, my environment is surprisingly the same. Here's some examples:

  • Eclipse - exactly the same. Right down to the plug-ins. The keyboard shortcuts are a bit different which takes some time to get used to.
  • Subversion - I just got my repository from my Mozy backup, installed the Subclipse Eclipse plug-in and that's it.
  • H2 database - completely cross platform. I didn't even bother to install it, just downloaded the generic package and unzipped it. Works beautifully and exactly the same (maybe faster?).
  • Firefox - yes, I have all my add-ons running. It's feels at home.
  • Open Office - I had to work on some documents. On the Mac I use NeoOffice. My very complex spreadsheet didn't even notice the platform change.
  • I use Cygwin which gives a Unix prompt, much like the one I get in OS X. Cool.

After some minor tweaking the application I'm developing was up and running. It was working beautifully. I was working fluently and almost forgot I switched the platform. I made some progress this week, but...

  • All my tasks are managed in OmniFocus - I couldn't find anything that can open my backup files on PC.
  • All my brainstorming and designs are in OmniOutliner format - again, I couldn't read it. Not even close.
  • I had some notes in xPad. I managed to partially recover the ones I needed.

Some after thoughts after this "fun" week:

  • The Mozy backup service allows downloading backups through a web clients. However, Mac backups are downloaded as DMG files. It took me time to open these on Windows. I finally used IsoBuster, which isn't free. I'm just wondering what's wrong with plain-old ZIP files.
  • I have backups of my sources and documents. I missed out on some important stuff - like Eclipse workspace settings (including launch configurations and what not), my test projects, etc. Luckily, I'm going to get my MacBook Pro early next week with the hard-disk intact.
  • It took me hours to install the Eclipse & Firefox with all the plug-ins and settings. This gave me a great idea - write a plug-in which synchronizes the settings and plug-ins. You could then download a distribution of Eclipse/Firefox with this plug-in and the plug-in will install your other plug-ins and do all the configuration for you. Sounds like a million dollar idea to me.

Finally, this is the price of going solo and not having an IT department behind you. I knew that when I "signed up". This helped reduce the anger and pain involved. I knew this is going to happen some day and I just said to myself: "well, today is the day".

Apr 17, 2008

I'm switching after all...

In an unfortunate turn of events, my MacBook Pro has decided to take a vacation. It's spring time, so there must be something in the air. Maybe it's the upcoming Passover, which is known to be "the festival of freedom". Anyway, it just died on me. The Apple service in Israel has room for improvement: they promise to fix it in two weeks. Two weeks. What am I going to do in the mean while?

I wasn't really shocked when it happened. My personal experience tells me that laptops, no matter how good they are, will need service every year or so. It's probably because all the miniature and delicate components cramped in this overheating space, which constantly gets rattled and banged. My previous laptop was an IBM ThinkPad T41. It was a good and sturdy machine, but I did visit the IT department every now and then. The advantage of working in a big company is that I got a replacement laptop (with my hard drive) whenever such a mishap occurred, so I could keep on working. Now, I'm decommissioned.

I'm making the best of this time to finally test my product on Windows. It took me a few hours to restore my environment. I backed up my source repository, but not much else, which means I have to restore my workspace. I had to download all the relevant products (Eclipse, Spring, H2, ...) and install them. I also had to work around issues of platform compatibility, mainly resource locations. However, once all this was done, I was up and running.

I appreciate the platform compatibility, but It's not perfect. The Eclipse UI is based on SWT. SWT is much better looking than Swing since it is wrapping native UI controls. Which means it may behave a bit different under each platform. It is cross-platform, but it is far from being bug free and requires the developer to test and debug the product on all platforms. My product is running, but not without glitches. Well, I have the upcoming two weeks to get rid of those. And maybe I'll get a little freedom myself.

Apr 14, 2008

Who Needs an Online IDE?

[Note: I wrote this article for EclipseZone.]

We've seen some hype lately around the next Eclipse release dubbed E4. The theme of E4 would be to take Eclipse online. This is not the first attempt (I wrote about it 6 months ago), however, now it turned from a sporadic effort to a full blown platform migration.

The Eclipse Duality

Before looking deeper into this trend, there's a much needed distinction to be made. Eclipse, as a brand, stands for two different entities: the Eclipse IDE (Integrated Development Environment) and the Eclipse RCP (Rich Client Platform). It's easy to get confused, but it's not the same thing. It's almost like the difference between Microsoft VisualStudio and the .Net platform.

The Eclipse IDE is a great tool for software development. You can use it to develop in Java, C++, Ruby and many other languages. On the other hand, the Eclipse Platform is a framework for developing Java based cross-platform desktop application. The Eclipse IDE uses the Eclipse Platform as its' base. The Eclipse IDE is the best tool for developing applications for the Eclipse platform, however, one may use any IDE which supports Java development for that purpose.

In this post, I will focus on the Eclipse IDE, looking forward to E4.

Who Needs an Online IDE?

The trend of taking desktop applications online and providing them as a service (SaaS) is not new. It was only a matter of time until it gets to the IDEs. It's taking longer for the IDE market to be affected, probably because it is a much smaller market than, let's say, word processors. The online word processors market is already saturated with products like Google Docs and Zoho Writer.

Zoho-creator-user-defined-functions

Most online IDEs are very specific (unlike generic IDEs like Eclipse), geared towards a given service or platform. The IDE is not the service being provided, but rather a tool for the user to consume other services. For example, the service can be an online database and the online IDE would allow developing solutions on top of this service: database definition, screen design, coding and even debugging. The deployment is seamless, using the provided service.

Examples for such services are Coghead, Zoho Creator, Bungee Builder, Microsoft PopFly and Yahoo Pipes. These are all proprietary services. Some use their own languages and all of these services are restricting the deployment to their servers. This is usually their underlying business model: providing the service for executing the complete application.


Heroku-code-editor

There are a few services which are more generic by nature, based on standard languages. For example, Heroku is using Ruby on Rails (RoR) and can be used develop and deploy a full RoR application. A unique feature in Heroku is the ability to export your code. Since the code is generic RoR, you can then deploy it on any server that supports RoR. Heroku is based on Amazon EC2 platform. I won't be surprised to see Python-oriented services based on Google's AppEngine soon. Another interesting example in this area is AppJet which uses JavaScript.

This online IDE roundup cannot be complete without mentioning CodeIDE and ECCO. Both provide completely generic online IDEs. They seem like perfect tools for people learning how to program, allowing the user to instantly start coding and see the results. Although these are not complete IDEs, they provide a glimpse of what a generic online IDE might look like.

All the services above have mainly two thing in common: they do not require any installation and moving from coding to execution is just a few clicks away. Usually, there are considerable overheads in IDE installation, environment configuration and server deployment and execution. This can all be avoided, saving a great deal of time (and agony, speaking from personal experience).

Nevertheless, none of these services is even close to the rich feature set you get from a true desktop IDE like Eclipse or VisualStudio. This gap is not unique to IDEs, though. People switching from Microsoft Word (or Apple Pages) to Google Docs will feel the difference. Sure, Google Docs has all the basic features. However, it is still very far from a full-fledged desktop word processor.

You can expect this to change. The following extract taken from an article in CIO magazine, quoting Gartner analyst Neil MacDonald:

The move to server-agnostic applications is still in its infancy but will soon have a major effect on enterprise computing. The legacy applications won't go away, even if the exciting stuff is being done on Internet-based apps, they said. But it won't stay that way. Today, 70 percent to 80 percent of corporate applications require Windows to run, but the Gartner analysts expect a tipping point in 2011, when the majority of these applications will be OS-agnostic, such as Web applications.

The Eclipse IDE is just joining the crowd. We're going to see an increasingly large number of online applications replacing their desktop counterparts. IDEs that won't offer an "online option" will be falling behind.

The Future

As I mentioned, there are some immediate benefits from having an online IDE, especially: no installation and instant deployment. IMHO, this is just the tip of the iceberg. Here are just a few thoughts of what we might expect:

     
  • Online IDEs open new capabilities of sharing and collaboration. Consider doing pair-programming with your colleague, which is sitting in another continent.
  •  
  • This can be even more useful when it comes to outsourcing and your coworker is an occasional developer. For example, I need the services of an expert DBA. I can find one online in elance and work together on my project immediately.
  •  
  • On-demand services open new possibilities: instead of buying a profiler for $500, maybe I'll just pay for the time which I'm using it.   
  •  
  • Mash-ups: I can use Google Page Creator to design my project's web pages and Yahoo Pipes to define a web service. All as part of the same project. Today, Eclipse is already a mash-up of OSGi services. Tomorrow, it may be a mash-up of web services or REST.
  •  
  • All the online services I mentioned in this post had to developed their own IDEs. I'm sure future vendors will be more than happy to use an existing online IDE and develop plug-ins on top of it. As the number of online services provided grow, the need becomes more imminent.

I'm just guessing here, but it does open up new directions and opportunities.


Mar 31, 2008

Too many tabs? Go vertical!

If you're a bit like me, you now have about 20 tabs open in your browser. Let's not go into the psychological reasons for that, but it probably have something to do with a very short attention span.

FirefoxwithtreestyletabI found this cool Firefox extension which changed my browsing experience. It's called "Tab Tree Style" and it shows the tab headers on the left side rather than on top. The result: I can have more tabs and easily see all of them at a glance. Navigating between the tabs is easier than ever and I get full size tab headers, so if a site shows information in the header I can see it. For example, GMail shows the name of the current folder. No more cramped headers on the top of the page. The cost is screen real-estate on the left. This is not a problem for me since I use a wide screen and more web sites are designed for regular resolutions. Highly recommended.

I was so pleased with this transition, that I immediately thought about my IDE. I usually have at least 20 files open. Even on my wide 20" monitor, I see about 7 headers. In most cases, I work with two files, side by side, which means I see even less headers. Navigating the rest of the files is a pain. So, I looked for a solution.

EclipsewitheditorsviewI found an interesting plug-in called "EditorViewer". This plug-in provides a list of open editors. Since this is a separate view you can place it where you please. I placed it to the left of my editor.

It's close to what I was looking for, but not exactly. The plug-in seems to be deserted. Nobody touched it since it 2005. You can download it here (download link is missing from the site). There's no "Eclipse update site", but it does work on Eclipse 3.3.1 (and on a Mac). I think it should take less than a day to write something which fits my needs, so maybe I'll write myself, if I can find some spare time :-)

Mar 16, 2008

The Road to Eclipse 4

This week, EclipseCon 2008 takes place at Santa Clara, California. Not all of us are fortunate to have the means or sponsors to participate. One of the interesting sessions will be an open discussion of the future of Eclipse 4, aka "e4". Since I won't be able to participate, here's some of my opinions on the future of the platform.

The Future of Desktop Apps and Eclipse

IMHO, Eclipse RCP today is probably the best framework for cross-platform desktop apps development. It's simple: if you want true cross-platform development, Java is your best bet. If you're writing a desktop app in Java, Eclipse is your best option for a decent UI. Almost every time I see a new cross-platform desktop application written in Java but not using Eclipse, my immediate reaction is "it's so ugly, why didn't they use Eclipse?". I've seen Eclipse RCP based applications which look so good that it's hard to tell that Java is behind the scenes (e.g. XMind).

There's a bigger question: what's the future of desktop apps?  I don't want to open the debate, but it is my opinion that they're not dead yet. Nevertheless, products like Microsoft Silverlight and Adobe AIR, are a big threat to Eclipse in this area. They provide the richness and ease of development of a desktop app with the deployment capabilities of an online app.

Consider this: you'll be able to use simple tools like Visual Basic to develop a rich desktop application and then deploy it over the web to your users and run it on multiple platforms. If Eclipse plans to stay in this game, this means that developing an Eclipse application should be as easy as developing a Visual Basic one. I'm talking about wizards, WYSIWYG editor, etc. It's possible that we will never get there, and that's fine. However, the focus should shift back from Eclipse as a Rich Client Platform to Eclipse as (the best) IDE.

Top Five Challenges for Eclipse 4

Performance - speed of execution, responsiveness of the platform and memory footprint. This has always been the Achilles Heal of Eclipse. It must be improved. I don't care how. Write a dedicated JVM optimized for Eclipse. Just make it work.

Easier Deployment - installation, automatic updates, plug-ins installation, configuration sharing between team members. It simply doesn't work well. No wonder there's a market for "Eclipse Distributions" like Genuitec Pulse. Take an application which works well with updates and add-ons, like Firefox, and follow its' model.

Cool UI - I want rich UI in my IDE. I want animations, fading elements and cover flow. As a plug-in developer, I want an arsenal that will enable me to quickly create an application that will dazzle my users. Spend some time on a Mac OS X and you'll quickly see my point.

Better Customization (for the end-user) - I want to change my toolbar, change my menus, record and edit scripts to automate repetitive tasks. I want these changes to apply to new workspaces that I open. I want to be able to share my scripts with teammates. Oh, I should be able to do that without reading a book about it.

Documentation - As a plugin developer, I often find myself struggling to get my hands on decent and up-to-date developer documentation. Code should not be allowed into production without proper documentation. This includes not only Javadoc, but also proper online help, tutorials and reference. Moreover, the information should be easily accessible from the IDE. I think about how easy it was to get this information in Visual Studio.  Follow this model.

This is from the top of my head. What's on your list?  the comments are open.

Mar 13, 2008

Microsoft plays nice on the web, heading for Eclipse?

I read a number of Microsoft related articles in the passing weeks that really surprised me. It seems that there's a different wind blowing from Redmond. The best way I can describe it is that Microsoft is trying to fit in the Web ecosystem rather than reinvent it. They do innovate, but they finally understand that they're not operating in a vacuum. When it comes to the web, they're not the biggest player out there.

Two major developments that we've seen:

  1. IE8 will finally be based on standards and will render pages by the standards as a default. True, the first thing that all the nonstandard sites will do would be to tell IE8 to use "IE7 standards". So, it's not that big of a deal, bug it's a step in the right direction.
  2. Silverlight is released simultaneously for Mac OS X and Windows. Linux and mobile devices support is on the way.

The battle for Silverlight dominance is not going to be easy. The main opponent is Adobe AIR. The tools are racing to become mainstream by getting an increasingly large sites be based a particular platform. Adobe got a head-start with Flash and they will not give up without a fight.

There are two aspects here: technology and marketing. I'm not a marketing person, so I'll focus on the technology. Even I can see that, to market their product, they need all the right answers to the technical questions. Back in the 90s, when ActiveX was introduced, when you asked: "Will my ActiveX-based site support Mac/Unix?", the answer was: "Dude, we are Microsoft". These type of answers just don't cut it anymore. Even Microsoft realized it and they offer broad support for a wide range of end users.

There's still a question of the development tools. There are many web designers and developers using different platforms. Mac OS X is very popular among creative professionals and freelancers with no corporate obligations (like myself). Adobe is providing all the right answers with cross-platform development tools: Dreamweaver CS3 and Aptana Studio Adobe Air Eclipse Plugin, which is free (at least in the base version) and open-source.

Microsoft is saying: use Visual Studio or Expression Studio. Expensive tools. Windows only. Hmmm... not quite the answer developers are expecting.

On an entirely different note, a Microsoft executive is scheduled to give a keynote at the EclipseCon conference next week. He will probably focus on interoperability between Microsoft products and Eclipse.

Are we going to see a Silverlight development tool based on Eclipse?  Let's wait and see.