Dec 29, 2005

BuildServer: Queue reordering

The build queue of the BuildServer, which serves IDEA project, was rather long until we've set up 10 build agents for it. But before that, the queue was long enough to add some management operations for it, like move build up/down and remove build from the queue.

So, each build in the queue had links "move up", "move down" and "remove". Guess, how many mouse clicks were needed to move build from the tail of the queue to the first position when there are 5 builds in the queue? Too many anyway. After the first attempt to do such a trick it became obvious that the "up/down" solution was wrong.

The first simple modification I intended to make was to add "Move to the top" link and remove "up/down" ones. That would remove some flexibility but save the screen space and make the interface more use-case-oriented. But Sashka convinced me that Drag-n-Drop is much more flexible solution in this situation. It took one day to implement it, including update of the queue on the server after reordering (thanks to scriptaculos again).

There was a couple of diffuculties, because Drag-n-Drop support cannot be safely done for table rows, so I had to convert rows to the list of div's. But anyway, now it works and you can see the result on the following screenshot (in the middle of DnD operation in my test environment).

There are still some areas for improvement, like adding a visual hint that D-n-D operation is possible and removing duplicates for "Remove" link.

Dec 10, 2005

Build Server: Web

Dmitry Jemerov made a very good overview of what kept me busy for the last couple of weeks.

The initial Web-interface of the Build Server was ugly and hardly usable, and the current version looks and works much better.

Sashka had created an accurate sketch for the build status overview interface, and described its behaviour. I just had to make it real. Thanks to prototype library, AJAX updates were implemented mostly painless. But is was much harder with visual effects (in fact, I spent a couple of days trying to expand/collapse a table row in IE using aculos. I solved the problem by patching prototype.js).

And what with IDEtalk? Well, I'd love to work on it but Build Server currently has higher priority. I've made several Jabber-related fixes, sending code pointers for library sources, and viewing a diff between local and remote version of arbitrary project file.

If you happen to visit JavaPolis next week, Max Shafirov and Mike Aizatsky will give you an overview of the forthcoming Demetra and Build Server features, answer your questions and even give you a chance to win one of 20 free IDEA licences.

Oct 17, 2005

Things do change

And sometimes they are not nice. No more Fabrique. No more IDEtalk. Both will migrate in some form to IDEA 6 (Demetra).

Anyway, I've released IDEtalk - most likely it is the last release of IDEtalk as a separate plugin.
The good thing about all of that - to develop IDEA collaboration features I'll spend not night hours but work ones.

Sep 30, 2005

Writing unit tests for IntelliJ IDEA plugins

According to some old saying, if code can be broken, it should be tested. Unfortunately, writing tests for IntelliJ IDEA plugins is not that obvious. I've spent some noticable time trying to setup enviroment for IDEA-specific code in the IDEtalk plugin and now I'd like to share what I've learned.

First of all, if you have a chance to write isolated tests, that don't require implementation of IDEA interfaces from OpenAPI - just do it. Such tests will be much faster, because they won't require ~10 seconds of setUp() execution.

But if you really have to write integration tests (in my case, I wanted to be sure that IDEtalk's internal file representation is syncronized with IDEA's VirtualFiles) - welcome to IDEA's TestCases. IDEA's distribution contains a number of base TestCase classes, placed in the com.intellij.testFramework package. The most noticeable of them are IdeaTestCase and LightIdeaTestCase. The lightness of LightIdeaTestCase springs from the fact, that tests derived from this class share the same virtual IDEA application and opened project. So, after the long startup of the first test, subsequent ones will run quite fast. IdeaTestCase - derived tests share only the application, and each test run includes the overhead of another IDEA project setup.

Guess, which base class is recommended for your tests?

OK, you've chosen the base TestCase and now eager to run your tests. Not so fast. Please make sure that:
  1. tools.jar from your JDK is in your classpath
  2. all jar files from $IDEA_HOME/lib are in your classpath
  3. you've added -Didea.plugins.load=false -Xbootclasspath/p:$IDEA_HOME/lib/boot.jar to your VM parameters. The first parameter can be skipped, but in this case you'll have to add all IDEA plugins to classpath.
So, now can get your tests working.
Good luck :)

Jul 19, 2005

IDEA 5.0 release candidate/First Powered by Fabrique site

Finally, the first release candidate of IDEA 5.0 aka Irida is out. I'd like to congratulate my colleagues from IDEA team with this hard milestone. The "official" list of new features is available on the Jetbrains site, plain list of changes is also available from the EAP site.

BTW, you can get IDEA 5.0 for free if you buy IDEA 4.5. Moreover, if you're working on an open source project, you can try to get a free open source license.

Another nice thing is that our friends from MIIK Ltd. have released a new version of JNIWrapper site. And this site is powered by Fabrique, the product I'm working on!

These news are good, but I have a better reason for celebration - my son has a birthday today :).

Jun 21, 2005

IDEtalk status

Recently I made a bad move - release of IDEtalk 0.5.6 without proper testing of the distribution. Moreover, I announced this release at Javalobby and

As a result, in the same day I got a bug report that release was unusable (some class files were missing from the distribution) so I made a fix - IDEtalk I have to admit that my "quick fingers" sometimes make me sorry, and that was one of the worst cases :(. Well, I'll be much more careful in the future and never release a distribution without proper testing of the very file I'm going to release.

Work on the Jabber support in progress. I've come to a conclusion that Jabber contact list entries in IDEtalk should be synchronized with server-side Jabber roster of the user and I'm very close to imlementing this behaviour. So IDEtalk will work as a normal Jabber client + will have code-related extensions for those contacts who use IDEtalk as well.

Unfortunately, it seems that my initial estimates for 1.0 were somewhat optimistic. But I hope to release 1.0 in July or at least in August.

Jun 9, 2005

IDEtalk 0.5.5

.. has been released. This is a bugfix release with minor improvements, please see this message for details.

Download as usual either at plugin site or via IntelliJ IDEA's plugin manager.

May 12, 2005

Evaluate Expression in IntelliJ IDEA

Recently I found out another cool feature of IntelliJ IDEA's debugger - evaluate expression of the selected in the Frame view item.
Every IDEA user knows that you can select some expression and evaluate it via Alt-F8 while debugging. But I didn't know that I can use Alt-F8 for any selection in Frame view of IDEA's debugger. Using this feature, you can, for instance, evaluate/set runtime value for collection items or map entries.
See screenshot.

Apr 29, 2005

IDEtalk 0.5.4 / JSE7 integration?


I've released IDEtalk 0.5.4. This is bugfix release, for details please see this mailing list post.

Recently I've found a message from Alexis Moussine-Pouchkine regarding collaboration in Sun Java Studio Enterprise 7. If Sun will open their collaboraiton API, I'll probably implement the transport which would allow IDEtalk to talk with JSE 7. But not earlier than Jabber transport will be ready :).


IntelliJ IDEA as HTML editor

Do you know that well-known Java IDE IntelliJ IDEA gradually becomes really cool XHTML/CSS editor? Especially for those hackers who prefer hand-code-writing instead of big mighty fat wizards and predefined hard-coded templates?

My better half reveals some new Web-oriented features of forthcoming IDEA 5.0 aka Irida.

I think it is time to try IDEA EAP :)

Apr 12, 2005

IDEtalk 0.5.3 - bugfix release

I've released a bugfix release of IDEtalk plugin. It fixes those known issues in 0.5.2 I mentioned in the previous post, namely, MacOS, IPv6 problems and several memory leaks.
So now I focus on 1.0 and Jabber support. It looks like Smack is a really great XMPP library to use for it. At least, it has nice API, debugging facilities and allows to create XMPP extensions easily.

The sad story is that I'll have to ask user to register on a server to use Jabber transport. From Cooper's point of view, it is true excise, but I have no idea on how to eliminate it. Anyway, security issues become important when communication goes outside the local network.

Apr 7, 2005

IDEtalk 0.5.2

I've released IDEtalk 0.5.2. I even tried to sell it in IntelliJ plugins newsgroup, but failed (probably, Apr 1 is not the proper date for such announcements ;).
What's new:

- URLs in icoming messages are recognized (browser opens only in
Irida - lack of OpenAPI in 4.5)
- Hard wrapping for sent messages
- Send stacktrace dialog size honors stacktrace text size
- Fix D-n-D for several users
- Next button for the case of several messages from the same recipient
- Add notification label for future IDEtalk versions. So you'll
get notified right after release of tbe next version of the plugin.

Known issues:
- Works unstable when IPv6 is used
- Startup-time exception on MacOS
- Memory leak (holds reference to project after project closing)

Download and enjoy!

Mar 4, 2005

IDEtalk 0.5.1 is released

Hi again,

After more or less intensive bugfixing IDEtalk 0.5.1 has been released. Comparing with 0.5 it has only one new feature - it allows to send code pointers and see file diffs even if local and remote project names differ. So your peer doesn't have to have the same .ipr file as you, only relative path for the file matters.

In the future version (1.0?) I plan to allow sending code pointers between Java classes from libraries, so requirement to have same relative path for the file will be eliminated.

0.5.1 is available via plugin manager on on the site.


Feb 28, 2005

Fabrique EAP / IDEtalk RC

I have two good news.

The first one is that after a half-year delay we managed to release another public EAP of Fabrique.

The second one - I've uploaded release candidate of IDEtalk 0.5. Comparing with the last beta, it features a separate dialog for incoming messages with reply facility.

Download and enjoy!

Feb 23, 2005

Blog is moved

I've changed the URL of my blog to . Please update your bookmarks.

IDEtalk 0.5 beta

I wanted to do is ten days ago, but I'm doing it only now. Now you can try the beta of IDEtalk plugin 0.5 - probably the last version before 1.0.
New features are:
  • Separate toolwindow for incoming/outgoing messages.
  • Diff between local and remote version of the file in View User Files dialog.
  • Send plain messages (try double-click on user name).
  • Send code pointers/selection (right-click in Editor area). Uses diff algorithm for better positioning when local and remote files differ.
  • Reply to the last opened message.
You can get 0.5.beta1 here:

The complete changelog is available in this Yahoo groups message. If there won't be any critical issues, I'll release 0.5 on this weekend.

Jan 27, 2005

Public release of IDEtalk plugin

After several months of non-intensive work I managed to make a public release of the IDEtalk plugin for IntelliJ IDEA.

You can exchange stacktraces, view open files of a user from your contact list, and open local version of the user's file. Currently it supports IntelliJ IDEA 4.5.x/5.0 EAP and uses P2P connections in the local network (no specific server installation is required).

I'm going to add chat and Jabber support in the next release.

More information and installation instructions can be found at

Looking forward for your comments and feature requests!