Avogadro 1.0.3 Released

I am pleased to be able to announce the availability of Avogadro 1.0.3! What happened to Avogadro 1.0.2 I hear you ask...shortly after tagging Michael reported an issue with i18n building/installations. So 1.0.3 contains a couple of very small build system fixes, but see the 1.0.2 release notes for details of most of the fixes.

As always, we appreciate your feedback. There are still a few issues outstanding, but many things were fixed. These binaries are also built against much newer versions of Qt and Open Babel where significant improvements have also been made. There may be one or two more releases of the 1.0 line if necessary (I have streamlined the release process with a view to making more releases), but I would like to focus our efforts on an unstable release for 1.1. Once 1.1 is stable, a 1.2.0 release will be cut and branched. There are lots of new features in master that we would love more feedback on.

CMake External Projects: Building Project Dependencies

Historically projects have attempted to minimize their dependency list, and often bundle in small third party libraries in an attempt to make things easier for new developers/users to compile their code. In the Avogadro project we have bundled a few really small libraries, but on the whole have maintained a dependency list and tried to keep it smaller. As I work on new code, I see opportunities to break off bits of functionality, such as with OpenQube, but don't want to add yet another thing a new user or developer must download, compile and install somewhere.

Linux packagers, myself included, dislike the practice of bundling in libraries. It means that instead of patching one libxml2, we get to patch one plus the three or four in our tree that have been bundled (often with different version, some local patches). The problem is less pronounced on Linux where package managers are ubiquitous and we are able to provide a list of packages to install, but even there we might be developing against versions not yet in the main distribution repository. This is one of the reasons I have always favored rolling release distributions over the periodic.

CMake's external project module helps us to deal with this issue in quite an elegant fashion. Coupled with meta repositories to bring several source trees together, CMake is able to direct the build of several projects, passing locations between projects and expressing dependencies between the projects being built. This means that something like Open Babel can build zlib and libxml2 before building the main Open Babel library. External projects and CMake allow us to download the source, create the build trees and even direct the build of non-CMake based projects like libxml2.

I have a prototype of this that I just put up to build the core of Avogadro, its working name is Avogadro Squared as I was feeling geeky that day and had no good names. One thing you should note is that everything in there is an external project, and Avogadro is the last one to be built (it depends on all of the other projects). It requires minimal changes to the projects it contains, it uses git submodules for some of the source, and CMake's download and tar functionality for zlib and libxml2. I will be adding options to simply use system versions of the libraries it can build, but Linux distributions etc can continue using the Avogadro repository directly.

As a new developer or user I can checkout the meta repository, have git download the submodules and CMake download the source tarballs. I can then build the entire project, and then continue to work in the Avogadro subdirectory of the build tree after that. That build tree is almost identical to the one I would have ended up with had I not used the meta repository, except it points to the dependencies I just built. I can then use vim, and IDE or whatever I choose to work on the inner projects. This works across Linux, Mac and Windows to get new users and developers up and running very quickly while only loosely coupling the dependencies to the Avogadro project.

I have worked on other larger projects, such as Titan and ParaView that are using this approach to a greater or lesser extent. Titan can actually built Qt, Boost, VTK, protobuf, Trilinos and a host of other dependencies before building the Titan libraries and applications. I think Avogadro Squared is an example of just how minimal a meta repository can be, although I will be extending it with more dependencies it really is just a glue repository.

Avogadro 1.0.0 Released!

It is with great pleasure that I announce the release of Avogadro 1.0.0. After many years of work we have released what we consider to be a stable Avogadro release on Mole Day, which seems appropriate given the projects's name. There are still some rough edges, but I think this is a good release. With your help we can fix bugs in the release while working on new features in trunk.

Avogadro - Code Swarm from Marcus Hanwell on Vimeo.

What better time to look back to the beginnings of Avogadro. There was a blog post made today by Sourceforge about Avogadro detailing a little of that history. I have also made a code_swarm movie visualizing the history of the Avogadro project. There have been quite some changes in that time both at a project level and a personal level.

I would like to thank Google for sponsoring me for a GSoC project in the summer of 2007. Also Geoff Hutchison for giving me the opportunity to work with him at the University of Pittsburgh on interesting computational and visualization projects. Then there is my new employer, Kitware, who have provided me with an exciting opportunity to push scientific visualization and cross platform development to its limits.

To finish off a great day, my wife has informed me my new espresso machine has arrived! I am going to Camp KDE in January too!

The Big Move and New Position at Kitware

On Monday 21 September we packed the majority of our belongings into the back of a Penske truck and made the 500 mile drive (in convoy - Louise, William, Dax and myself) from Pittsburgh, PA to Clifton Park, NY. Since then we have been unloading the truck, unpacking our things into our new home and doing all those things you have to do when you move house, and several things necessary when moving between states and jobs.

Me in the Penske truck before returning it

This is certainly the most rural house I have lived in since I was very young. We found a nice duplex on the outskirts of Clifton Park, it uses well water and I am the proud owner of the contents of two full propane tanks (no natural gas lines run out to the house). We also have a really nice wood fire in the living room, and I snagged the family room and am using it as a large home office! Thankfully they were able to hook up a cable Internet connection on Tuesday last week, and so I was not offline for too long.

Tomorrow is my first day with Kitware, I will be attending a training course being run by Kitware for the remainder of the week and so won't have my first day in the office until next Monday. I will be working in the scientific visualization group on projects such as ParaView, and have had lots of ideas for future Avogadro development over the last few weeks. I am very much looking forward to working in some new areas, but also to enhancing the previous research and development I have done in the area of visualization in chemistry. I am also looking forward to working on CMake.

Avogadro 0.9.7 Released

Avogadro 0.9.7 was released on 18 July 2009. You can download Avogadro here. I have been less involved in the development of Avogadro in the last six weeks due to a major event in my personal life. Still this release has some great new features in it, several of which I squeezed the time in to implement.

Some of the highlights include fixing a long standing rendering bug for our Linux users (me included) where garbage would be rendered right below the tab labels. This was a fix added to Qt 4.5.0 that I discovered while looking into the issue. A nice side effect is the new inline close buttons on view tabs. I also finally got detached OpenGL views into Avogadro, as shown in the screenshot to the right. It is a little clunky right now as you need to open a new view, and then detach it. I will clean up the interface for the next release hopefully. This allows for multiple views of the same molecular scene, which can be extremely useful for certain kinds of work.

Another long standing feature I wanted to implement is in too, the inline configuration buttons for our display types. If you can see the little wrenches, you can now click on them to configure that display type. This code was inspired by the inline close buttons that are in the Qt Creator open file list. Geoff worked making the configuration docks easier to hide, we now default to devoting roughly 90% of screen space to the 3D view, which I think is great. There have been several changes to how molecules are loaded/saved too, I am still hunting down some issues but this allows us to read multiple molecule files for example.

Today is the last day that you can vote for Avogadro in the SourceForge Community Choice Awards! Please cast your vote if you think that Avogadro is a great tool for Academia. Tim (one of our other dedicated Avogadro developers) posted about the release and the awards too. I would like to thank several people in the chemistry community who expressed their support for Avogadro on their blogs - Peter Murray-Rust, Richard Apidoca and Jan Jensen, along with so many others who have helped to promote Avogadro on Twitter, FriendFeed and other online services.

We hope you enjoy the release, whatever happens with the SourceForge Community Choice Awards it was an honour to be nominated. It was great to see all the support for the Avogadro project in the wider community too. It has inspired me to go on and do more with Avogadro - thanks to all of you.

Avogadro Nominated for SourceForge Community Choice Awards

I am very pleased to announce that Avogadro has been nominated as a finalist in the SourceForge community choice awards this year. We are in the "Best Project for Academia" category, and I would like to encourage you to vote for Avogadro.

This is a real honour for all of us, and I appreciate all of you who nominated Avogadro. We are all pushing very hard on polishing Avogadro, getting ready for our 1.0 release. It would be absolutely amazing to see Avogadro win this award, so please vote for us.

Avogadro collage

There are also some other really nice projects in there too, such as Lancelot, ClamAV, phpMyAdmin and RepRap. So please take a few moments to place your vote, and tell your friends!

Update: You can vote even without a SourceForge account - just enter your email address and verify your vote.

Avogadro 0.9.5 Released

Yesterday I tagged the Avogadro 0.9.5 release, you can grab the latest downloads from here. Life has been hectic this last couple of months, and to be honest I have not gotten as much done as I would have liked. Still there are some great additions such as the experimental cartoon ribbon display ported by Tim from the Zodiac Zeden project.

Avogadro 0.9.5

Geoff also worked on getting more screen real estate for the actual display, after we bounced some ideas around over the last few months. I think that looks great, and have always tried to ensure the maximum amount of screen space was devoted to displaying the molecule. I still have a few more ideas, but fear I do not have the time to implement them. Geoff also added a new peptide builder and David has been working tirelessly on plotting spectra.

I have been working on decidedly less glamorous and less visual aspects of Avogadro. This includes improvements to our build system, I added the infrastructure required to find and build plugins/applications against the system installed Avogadro library. I also uploaded a few examples to GitHub, and David is actively working on an external plugin for a summer project.

I worked on getting a CMake project that included and compiled both Avogadro and OpenBabel. I then turned my attention to making a relocatable, self-contained app bundle for the Mac. This is working quite well, although there are a few parts of the build system I would like to clean up. It does mean we have relocatable applications that can run from a USB stick on both Windows and Apple systems now.

I crushed quite a few bugs too, worked on API improvements and fixed Noel's long standing feature request - to disable the visual cues when navigating around a molecule. The original Windows installer shipped with a data loss bug, when saving a molecule the original could be erased and you would be left with a zero length file. This was a Windows specific bug that slipped through, I spent half of today tracking this issue with a few other Windows bugs and updated installers have been uploaded (Tim made the Python enabled installer). Please ensure you update to Avogadro-0.9.5-win32a.exe or Avogadro-0.9.5-python-win32.exe. Hacking on Windows has to be one of my least favourite activities, and I need a couple of days away from that whole platform before I can go back and finish some of the work I have been doing...

We are pushing to a 1.0.0 release, targeted for July. We would appreciate feedback on the interface, bugs encountered, the public API that is installed along with any other suggestions or offers of help. Our translations are now doing very well too, and any help improving them further would be appreciated.

Enjoy the new release, another is likely only a week or two away as we crush the remaining bugs. I am also fighting to find time to implement a few more features I would really like to see in Avogadro 1.0.0.

Vote for Avogadro

I just got an email from Sourceforge about their community awards. If you are a user, fan or developer please vote for Avogadro in the Best Project for Academia category. They even provided me with a nice graphics to put on the page, you can just click on it to register your vote.

In other news lots of exciting things happening in Avogadro, hopefully I will find some time to blog about them soon!

Qt Creator, CMake and C++/Qt Development

I have been experimenting with Qt Creator since the first release. I have always preferred a minimal editor for development work, with my main needs being good syntax highlighting, the ability to switch between different files quickly and something that stays out of my way as much as possible. Previously I had used Vim, Kate and several konsole instances the majority of the time.

Recently I have been looking for something with better integration, and so had been slowly keeping an eye out for a lightweight IDE. My main requirements were something lightweight, good C++ support, ideally good Qt support and CMake integration. Over the weekend I tried the latest Qt Creator 1.1 release and was really impressed.

Seb Ruiz made a great post on Qt Creator 1.1 that summed up many of my thoughts, and gave a quick walkthrough. It was not immediately obvious how to import a CMake project, I was looking for an import project option. All that is necessary is to go to file and open. You can then open the base CMakeLists.txt file for your project and the CMake plugin will do the rest.

From there on in you get great integration with the build system, version control (Git and friends), and your friendly GDB debugger. Under projects you might want to quickly add -j5 (if you are lucky enough to have a quad core machine) to the additional arguments input for make, and select the main executable target for your project if you also have several other executable targets (unit tests etc).

The first time you debug a project you will be prompted to build the Qt debugger helper. Then the integration with GDB really wins over using GDB directly, or using ddd which I had been using more and more recently. I would highly recommend trying Qt Creator if you are looking for a lightweight, cross platform IDE. There are certainly other great IDEs out there, but I think that Qt Creator is a great fit for my development style (and may be yours).

CMake Performance with Open Babel

Recently, Luca made a post comparing the speed of CMake and autotools in which some timings were posted. I have to say that I am not sure I agreed with the conclusion and have had a very different experience with the projects I am involved in. As with anything your mileage may vary, and I have not looked at Wesnoth.

I think it is questionable at best to include the time it takes to build CMake, but not autotools. Seems like this is a one time cost and the build time is not that high for either. All tests were performed on my quad core Gentoo box at work. Each step is for the first cold run as would normally be the case when compiling Open Babel from source. The make step used `time make -j5` and I have listed the real time in each case.

The timings are shown in the table below. They seem somewhat similar to the experiences of the QGIS developers who made this move quite some time ago. All times shown are in seconds and are the real time reported by the time command.

  Autotools CMake
Configure time 20.39 4.79
Compile time 116.45 102.23
Install time 28.39 4.19
Total time 165.23 111.21

For those interested, on this system the total CMake compilation/installation time (cmake-gui disabled) was 1 minute and 54 seconds. The compilation/installation time for automake, autoconf, libtool, m4 was 2 minute and 14 seconds. I am not sure how relevant either of those times are, other than to show neither of them take that long to compile and install. Gentoo users/developers may or may not have CMake installed, most other developers will install the binary packages for either one and are likely to be much more interested in how well it integrates with their development environment, compile and install times.

As a developer I prefer CMake, and have been using/maintaining the CMake based build system for Open Babel for over a year now. It was originally contributed by the KDE Windows porting team, but I found that I spent less time waiting for it to do things when I was working on code too. Add to that the extras CMake comes with, such as CTest, CDash and CPack I think it makes a very attractive option for many projects. I am also hoping that it will allow Open Babel to drop maintaining a totally separate build system for MSVC.

I am sure the Open Babel autotools build system could be optimized (I never tried), but when you add in the additional benefits mentioned above, support for multiple targets such as makefiles, XCode, MSVC, Eclipse etc, one shared language/syntax for all build files and an increasingly polished competitor to autotools, I honestly think it is a sensible choice for projects to move to CMake. There are a few less well known features such as Fortran module dependency parsing that I think are fairly unique and valuable, in scientific coding at least (and I have used the Fortran module dependency parsing at least once and was pleasantly surprised).

Full disclosure: I recently accepted a job offer with Kitware, and will start in the Fall assuming all the visa paperwork falls into place. The opinions expressed here are my own. I think it is great to discuss issues like this objectively, and hope to be a part of making CMake a better build system. As with most software - there are areas that need improving.

Avogadro 0.9.3 Released

Avogadro 0.9.3 on Linux/KDE 4

Yesterday, on April 1, we tagged and released Avogadro 0.9.3 exactly one calendar month after 0.9.2 was released. This has been quite a big month for Avogadro - I took it to the APS March meeting and the Q-Chem workshop. To the left is a screenshot of the latest release showing the electron density of a vitamin C molecule with the approximated electrostatic surface potential mapped onto it.

Ray traced mystery molecule

We made quite a few fixes and improvements leading up to the APS and Q-Chem meetings. The highlights are in the release notes. Some of my favourites are the animation of molecular vibrations, plotting of IR spectra, improved rendering/handling of surfaces including meshes with colours mapped to their vertices. The Windows build is also fully relocatable, meaning it can even run off of a USB stick. I am hoping to do the same for the Mac and Linux builds too. I made several improvements to the super cell builder, surfaces and even made a start on a z matrix editor (not ready yet).

Ray traced benzene molecule with electron density and electrostatic surface potential mapped onto the density surface

To the right is the ray traced image of a larger molecule and one of its molecular orbitals. The POV-Ray rendering code has also seen quite a few improvements. I have been experimenting with generating movies from POV-Ray rendered images too. I am planning to make improvements to our build system on Windows and Mac in order to make packaging easier. My main focus is still Linux development, but so many people insist on using other operating systems. Other more exciting things include producing videos of molecules rotating, vibrating, trajectories and using GLSL to improve the rendering performance with big systems (>25,000).

We would appreciate feedback on this release from the wider community. I am really pleased to announce we have gained at least one new contributor this month, David Lonie, who worked on the new IR spectra plotting code. I have made a new ebuild for Gentoo, prepared a Windows installer, Geoff has made a new Mac package and there is ofcourse source. I am sure other distros will have packages ready soon too. Hope you enjoy the graphics - videos to come soon!

Avogadro 0.9.2 Released

I just finishing tagging Avogadro 0.9.2 earlier today. I possibly procrastinated on tagging this one a little as February has not been my finest month. I didn't see any reason to make another release in that hellish month when I could wait a day. This release is a little earlier than we had scheduled, but it contains lots of bug fixes and improvements along with a couple of new features.

Avogadro 0.9.2

Among the highlights I tracked down our orphaned tools and extensions, so Avogadro closes down far more gracefully now than it once did. I went hunting for memory leaks and QObjects with no parents. I added some initial support for building supercells such as the zeolite structure shown in the screenshot. I also fixed some bugs with electron density calculation and this works much better and faster now. I also improved the Linux desktop user experience by adding a .desktop file, icon and mime type associations. Looks very swish.

I built a new Windows release without Python, Tim will put one up with Python support soon, bumped the Gentoo ebuild as 0.9.1 was bumped by someone else and it could not locate its plugins. I have made a number of improvements to our plugin loading to ensure that it is relative to the binary location. This should make relocatable binaries on all platforms quite feasible. March is a busy month but I hope to be able to make some more big improvements. If it goes as badly as February I may consider hibernation as an option though!

I will be presenting some of this work at the APS and a quantum chemistry workshop in March too, both here in Pittsburgh. We always love to have feedback, bug reports, patches or be invited to give talks at conferences in far off places! Here is hoping for a better month...

New Addition to the Family

On Monday we had a new addition to the family arrive - an Asus Eee PC 1000! So far I am pretty impressed with the hardware. The Linux installation was pretty disappointing but I never really intended to keep that anyway. I played around with it on Monday as I built a chroot for the new arrival (pictured below).

Asus Eee PC  1000

I went for the 10" model as I was worried about the size of the keyboard on the smaller ones. I also liked the sound of the SSD drive and it looked like a great little unit. I ended up building a custom stage 4 Gentoo tarball for it on my desktop and installing it here. I have it running the new KDE 4.1.2 ebuilds along with a few KDE 3 apps I can't do without.

All in all it seems to be working pretty well. I only got round to installing Gentoo on it yesterday. So far I have the webcam, wired and wireless networking working. I am using WICD to control networking. I would love to see a Qt4/KDE 4 frontend that integrates better but it is an awesome little app.

This is my first post on it, the screen isn't a bad size and the battery life seems to be good. I am on the road today and my wife acted as an unwilling hand model. I still haven't managed to get the asus_laptop or asus_acpi modules to load and so am missing all those devices. It claims no such device.

I will hopefully be able to post more at some point in the future. I certainly think this is great for being on the road and Skype is working with the webcam. I did use the 2.6.27 kernel whicih made things a lot easier I suspect. I might try building a vanilla kernel soon to see if that lets me insert the asus_laptop module successfully.

For now I have quite a few hours to kill in the BA lounge at JFK!

KDE 4.1.2 Unmasked in Gentoo

FHS where it clearly states, "Large software packages must not use a direct subdirectory under the /usr hierarchy." We currently do, the FHS KDE install really is FHS compliant. Please not that is not the primary reason we would like to do this. It is however one of several benefits.

I thought I had made it quite clear that slotting of minor versions was not going to be removed. Jorge and I have been working hard on getting the KDE 4.1 ebuilds into shape, and after Jorge worked with Zac on a few ideas it appears that new portage behaviours to do with blocking effectively allows us to use the original multislot idea I implemented using a different implementation (avoids variable slots). Some of the changes could do with EAPI 2 but it looks like we can implement much of what we need now and impove things when EAPI 2 is available.

Thanks to those who commented on my post in a constructive fashion. Not sure how to respond to a few of you who just don't seem to have read my post (or the FHS). Just to say that we are working on it. Jorge, myself and several interested users have been doing what we can with the time we have available to get the ebuilds into shape. If you would like to take a look at what we are doing you can check out the kde-testing overlay using layman, otherwise we will be working on getting KDE 4.1 into the tree as soon as we can.