Archive for the Category Project

 
 

Version 1.0 is out!

Rem version 1.0 is ready to use! This version just supports the creation, storage and retrieval of use case diagrams, but the source code is ready to be extended, to support the creation of other types of diagrams.

Download and enjoy!

Reading and Writing

Rem is every day closer to version 1.0, officially scheduled for August 28th. This past month I’ve been adding lots of functionality to the software, including the ability to read and write its own files. Remember that Rem files are actually SQLite databases, which ensures that files are cross-platform, and can be read and modified in any platform where Rem works.

Next week I’ll release version 1.0; the final adjustments here and there, and the software will be ready for prime time!

Release 0.1 is here!

I’ve just uploaded the binaries, source and documentation for Rem release 0.1! The GUI architecture is quite stable now, and I’m extending the system with new features every week. Feel free to download and comment! This is an early beta, so crashes might happen. Use with caution!

Missing libraries, fixed (again)

But this time for Linux. Somehow Poco and Juce cannot be linked together as static libraries (there are duplicate symbols conflicting when linking) so I have changed the Linux x86 distribution, including a copy of the libPocoFoundation.so.5 file (which is the exact version needed by the Rem executable), and I also included a shell script (which should be executed with administrative privileges) to copy the library to its require location. Feel free to try it out!

With this manipulation, Rem can be installed in any Linux system and run flawlessly. Time to add more features!

Missing libraries, fixed

If you downloaded yesterday the Windows installer, it lacked some important libraries that are part of the redistributable runtime for applications built using Visual C++ 2008 Express Edition. This has been fixed now, so you can download the installer again, and it should work flawlessly. As always, feel free to post comments in this site.

Announcing Release 0.0.2 Alpha!

Here’s a new (preliminary) release of Rem! The big news is that, thanks to CPack (the packaging utility bundled with CMake) Windows and Leopard users have now installers to setup the application in their systems easier than ever.

There are also lots of bug fixes, small modifications, a grid background on grids, a new internal messaging architecture (using the Poco::NotificationCenter class), compatibility with Mac OS X 10.4 “Tiger” and many other things. Feel free to see the current screenshots, download the binaries, checkout the source code, build, run and enjoy!

Toolbar

I’ve just committed a first version of Rem’s toolbar; the icons and the toolbar itself were designed using the Jucer, “Juce’s UI component builder application. It comes along as part of the Juce source tree.” as Jules describes it:

The Jucer is an awesome tool; I could customize the C++ templates it uses, to generate code that matches the project standards, and it works perfectly well! It is much faster than creating those components manually, yet it allows to have a tight control of the final source code.

ActiveRecord and Unit Tests

Unit tests are a great thing.

Today I’ve committed a revised version of the implementation of the ActiveRecord pattern, which saves instances of objects in SQLite databases. This new architecture replaces the “Curiously Recurring Template Pattern” used before, where ActiveRecord inherited (via template parameters) of the BelongsTo and HasMany classes:

Client classes used to have the following (ugly) syntax in their declarations; watch out for the brackets at the end of the declaration, and the duplication of one of the parameters in the old HasMany declaration!:

The whole thing was rather obscure and hard to understand, and even ugly, and I was looking for a different way to do things.

Hopefully, today I stumbled upon the entry #25.10 of the C++ FAQ Lite, “What does it mean to “delegate to a sister class” via virtual inheritance?” and I refactored the whole family of classes, which now look like this (check out the new ActiveRecord, BelongsTo and HasMany classes):

And this means that now, client classes are defined in this (much more readable) way:

The Persistable class is an “Abstract Base Class”, providing (via public virtual inheritance) a common interface to all the template classes, which finally tremendously simplified the code. ABCs are better defined by as defined by Meyers:

Bill Venners: Let’s define ABC. ABC means abstract base class. So what would you call in C++ that special case of an ABC that has no data and nothing but pure virtual functions, which have no implementation.

Scott Meyers: The C++ community does not have a name for that. There is no commonly accepted term for that kind of class. Some people call it “interface class.” Some people quite incorrectly call it a virtual base class, but as long as we are among friends and know what we are talking about, that’s OK. But the notion of essentially a C++ implementation of an interface in Java or C# does not have a name in C++.

Of course, this whole refactoring thing would not have been possible without the complete suite of 32 unit tests, testing most code interfaces in a straightforward way. This has helped me complete a rather obscure refactoring in a very short amount of time, with the certainty that the code still does what it should do. When the tests ran without throwing errors, it meant that I had been able to keep the interfaces intact, and to provide a whole new architecture to the framework.

And that’s simply great.

Going Forward

Rem is advancing every day a little bit. The ActiveRecord implementation is more stable and usable than ever, and now a new member joins the family of classes that make Rem: a Controller, that will complete the MVC trio.

By the way, I’m going to WWDC next month (from June 9th to 13th) so feel free to drop a comment below if you want to meet.

Stay tuned for more updates soon!

Release 0.0.1 Alpha is Here!

I’ve just published the Linux, Windows and Mac binaries (as well as a source code archive) of a preliminary and highly experimental version 0.0.1; you can download them from the Downloads page! You can also get more details in the Documentation page.

As always, feel free to leave me your comments below!