I've just released LogicMail 1.0.3, which is another bug fix release along the 1.0 branch. The fixed bugs include two IMAP server compatibility issues (#113, #114), and one memory issue (#115) I discovered as a result of some things I learned at the recent conference. For every good bug report I get, several poorly described and impossible to reproduce bug reports are written, so I hope that many of those issues are magically covered under the things I've fixed in this release.
As I'm now back home and settled from the conference, I've started integrating some of the changes I made to the trunk on my laptop. I've basically been reorganizing the source tree to better fit with how RIM's Eclipse plugin wants to look at your project. As such, the code on the trunk now has the following top-level structure:
|.BlackBerry||BlackBerry workspace||Configures Eclipse for BlackBerry projects|
|lib||Support libraries||Support for ant-based builds|
|LogicMail||Library (project)||Application code|
|LogicMailStartup||CLDC Application (project)||Application entry point|
|J2MEUnit||Library (project)||Unit test framework|
|LogicMailTests||CLDC Application (project)||Unit test entry point|
This new organization is primarily designed to make the RIM Eclipse plugin happy. The plugin is currently not very flexible on how you organize your project, and is easily confused. (I really don't think RIM even yet tested it on projects whose source is littered with hidden source-control support directories.) In order to make all the application code available to the unit-testing project, I had to basically make everything but the main() method into a library project. Also, so it wouldn't throw tons of unused-method warnings on the J2MEUnit itself, I had to move that into its own library project.
One thing to keep in mind is that all of this complexity is only to support working and debugging in the development IDE. I intend to keep actual official builds fully ant-based, and ant gives me far more flexibility. When building through ant, the only generated artifacts will be a complete "LogicMail" CLDC Application, and a complete "LogicMailTests" CLDC Application.
The BlackBerry Developer Conference just ended yesterday afternoon, and I have to say I'm extremely glad that I went. It was an excellent conference all around, even if it was the first one. I learned a ton of useful information about development on the BlackBerry platform, made some good connections, and got a free BlackBerry Bold!
It'll take a good week or two to finish digesting all the information I learned, review all the conference proceedings, and follow up on various things. However, right now I'm already thinking of a few interesting tidbits that should directly benefit LogicMail:
- The ALX format can let me build a single download for the desktop application loader that can include builds for multiple BlackBerry OS versions.
- The new Eclipse Plug-In is greatly improved, and I now know how to use it to profile for memory and performance issues.
- They're now supporting a preprocessor in the build tools which will make it much easier to support newer BlackBerry features and devices from a single code base.
Here's the presentation I gave at the conference, and an older presentation I gave about LogicMail itself at the local Linux User's Groups:
The upcoming BlackBerry Developer Conference begins this Monday, and I'm going to be there in person. It should be a great opportunity to network with the rest of the BlackBerry software world, meet a lot of interesting people, and learn a lot of useful things.
I should also mention that I'm actually going to be presenting at the conference, so look for the following in the session catalog:
|Session ID||Title||Scheduled Day/Time|
|B10||Writing Open Source Software for BlackBerry||Tues, 11:15 AM|
If any of you will be there, and would like to run into me in person, just look for the badge! Of course, I'll also be regularly checking my E-Mail.
P.S. I finally put my real name on the main page, since a few too many of you were calling me by my randomly chosen online nick.
I know I've been fairly quiet these past few months on discussion of actual progress on 2.0, and really haven't even been updating related tickets on this website. However, I've actually been making significant progress on the actual implementation. Since far too many highly desired features have been pushed off into the 2.0 plan, I feel its only fair to keep everyone updated on where things are going.
To give you all an idea of just how big of a change 2.0 will be, I'll start by explaining just how simple 1.0 really is. LogicMail 1.0 is basically a UI coupled almost directly to a collection of mail (IMAP/POP/SMTP) clients. There isn't much of a data model (beyond what's necessary for the pieces to talk to each other), and there certainly aren't any persistent program threads running in the background when you're not downloading something. Now don't get me wrong, developing and testing that mail client code has been a lot of work. E-Mail really is a royal pain, between different server behaviors, far too many data encoding formats, complex message structure, etc. However, what you all really want is a full-featured mail-handling application. With 2.0, I intend to give that to you.
The 2.0 project all started with a million variations on the simple feature request... "How do I get LogicMail to notify me when I get a new message? It should be pretty simple to implement, right?" Now that you've read the preceding paragraph, it should be obvious that it really isn't that simple. Just take a look at the design page to get an idea of how I began to flesh out my ideas for how LogicMail should be built. If you've read a famous book by Fred Brooks on software engineering, this is probably already starting to look like the Second System Effect
Okay, now to let you know what I've actually done thus far... (Yes, I'll try to give the brief version of what's in my notebook.)
- Retooled the build process to be fully Ant-based and not IDE-dependent. (and switched to Eclipse as the preferred IDE)
- Implemented a fully threaded, request-driven, asynchronous mail protocol engine to sit on top of the IMAP/POP/SMTP client code
- Implemented a complete mail object model to sit at the core of the application, providing a user-visible object based request/event driven facade on top of the mail protocol engine.
- Reimplemented most of the 1.0 functionality on the new 2.0 architecture
- Did initial implementation of IMAP IDLE!!! (currently only works for the last-selected folder, and doesn't do keepalives yet, but its a start)
- Did the draft implementation of a new account setup wizard, to hopefully ease the currently awkward setup process.
In terms of code-size, SLOCCount shows the 2.0 trunk to be approximately 5,000 SLOC larger than the 1.0 branch.
Of course at this point, if you want to try 2.0, the best way is to build from source and run it in a BlackBerry Simulator. Its far from ready for prime-time, but I'll eventually get to the point where I start offering up technology-preview releases. The code is still littered with "TODO" comments, and error handling/recovery gets a lot more complicated on the 2.0 architecture.
Now for some screenshots:
|New home screen||Account setup wizard||Folder selection dialog|
Welcome to the LogicMail Development Blog
Since everyone else is blogging these days, and since I really should be keeping all of you better informed of what I'm up to, I've decided to add a blog to this website.
Assuming I regularly update it, this blog should give me a way to keep you all posted on what I'm up to with LogicMail development. It should also give you a good way to talk back and start a discussion on anything I post. I know we already have a Discussion section on this site, and that should still be everyone's primary outlet for help requests and general project discussions. This blog will supplement that by letting me more regularly talk back to the community and provide my own updates.