Recent posts (max 20) - Browse or Archive for more

Update since October

This blog post has been a long time coming. Many of you are probably wondering why there's been practically no activity on the project for several months now. In fact, the last serious development activity was when v2.1 beta was released just prior to DevCon'2011 back in October. Furthermore, my participation on e-mail/tickets/forums has also been rather slow or absent since then.

A lot of things have been going on in my personal and professional life since early October, and these things have seriously cut into the time I used to devote to the LogicMail project. What many people often forget, is that the LogicMail project has essentially been a hobby of mine from day one. During most of the lifetime of the project, I tended to be single, work a non-mobile-related day-job with a early schedule and little overtime, and had a lot of evening, weekend, and holiday hours to devote to the project.

The long story

Starting around October, a number of things happened. Owing in large part to my work on LogicMail (and related BlackBerry developer community involvement), I got a job doing full-time BlackBerry development with a company located in California. Of course I was living in Florida, and working from home with co-workers 3 hours behind me, so work/life separation was a bit of a challenge.

Then, in November, I got married. Of course a lot of time was taken up by all the wedding planning and the honeymoon that followed the big day. (Also, don't forget that this also means that I now spend a lot of time, that use to go to the LogicMail project, with my wife.)

Now, while I was still working from home at this point, my new employer considered that to really be a temporary arrangement. They actually wanted me to be local at their office in California. So we spent most of December and January going through the whole stressful relocation process. After being quite "settled in" with our existing lives in Florida, this was understandably a major ordeal.

Its now early February, and we're finally starting to settle in at our new place. As such, I'm thinking its about time to begin to follow up on all the LogicMail activity I've mostly put on the back-burner since October.

Going forward

Now many of you are wondering what my plans are, going forward, with the LogicMail project. On one hand, my ability to continue contributing has significantly declined. But on the other hand, the project is sufficiently feature-complete for many users.

The first thing I plan to do, is to change the release model. In the past, I've attempted managed "release branches" like a more major project might do things. This meant that I would be doing active development on 2.1, while continuing to commit bug fixes for 2.0, as an example. In the future, I'm going to adopt more of a rolling-release model. So for all intents and purposes, there will be one main branch of the source code. Whenever a particular build is deemed "good enough", I'll link to it as the new "release" from the download page. Since v2.1 is really already good enough for wider-than-beta usage, I'll be starting with this version as soon as I can bring my development and build systems up to date.

The second thing I'd love to be able to do, is somehow get people other than myself to contribute (beyond translations) to the project. While I've seen plenty of users think that there's a "team" behind this project, it has really just been myself. Occasionally I get minor contributions, but really nothing substantial has come from anyone else. Now I'm pretty firmly convinced that there isn't much of an open-source culture in the BlackBerry world to begin with, so I don't know what it'll take. (I think most of my would-be contributors are either put off by the need for Windows to run the development tools, or have long since switched to Android. Heck, all my friends still wonder why I haven't switched.) I may even consider switching the repository from SVN to Git, but right now I'd be happy just to have a reason to consider that.

  • Posted: 2012-02-12 00:25
  • Categories: (none)
  • Comments (2)

LogicMail 2.1 Beta Released

Its been many months now since I transitioned from 2.0 fixes over to full on 2.1 development work. While there are still plenty of nitpicks that need to be addressed in 2.1, it is stable enough that I (and many others) have been running it on a regular basis for some time now. Since I've been telling everyone that I'd have v2.1 in beta by  DevCon 2011, I think I should make good on that promise. With that all being said...

I'm happy to announce the initial public beta release of LogicMail 2.1! This release builds on the capabilities of 2.0, and adds in the most user-requested feature of all time, background message polling. I may still add a few more minor features during the beta period, but my time is limited and I want to get this out there.

Key new features of 2.1 are:

  • Background server polling*
    • Home screen notification icon
    • Configurable refresh intervals
    • IMAP: Can check both INBOX and non-INBOX folders
    • IMAP: Uses IDLE to keep the connection open when possible
  • Can automatically connect and check for mail on application startup
  • Can auto-start on device startup
  • Improved setup wizard, including configuration of new features
  • App now hides instead of exiting closed (Exit option still available)
  • Option to mark messages read/unread without viewing them
  • Supports the IMAP COMPRESS extension (optional)
  • Support for OS7 hybrid-touch devices (e.g. Bold 9900)
  • Faster detection of stalled network connections
  • Supports OS 4.5, 4.6, 4.7, 5.0, 6.0, and 7.0

(* May impact battery life, since LogicMail does not use push notification)

For installation:

Note: Some of the non-English translations may be out of date. I hope to get those updated over the next few weeks.

  • Posted: 2011-10-16 14:35 (Updated: 2011-10-16 14:40)
  • Categories: (none)
  • Comments (0)

LogicMail 2.1 Status Update

Now that LogicMail 2.0 has been released for a while, I figured it was time to give everyone a little update on the progress of 2.1. Back when I first started making LogicMail publicly available, there was a certain feature everyone was asking for. In fact, people weren't just asking for this feature. They were so certain that they had to already be there, that they were actually asking me how to configure it! If it isn't obvious by now, this feature is having LogicMail sitting in the background, polling periodically for new messages, and notifying the user. Oh and it should be easy, right?

As I mentioned in  this presentation on the evolution of the project, sometimes "a simple-sounding feature may take a redesign of the whole application to implement properly." You see, LogicMail 1.x was really a very simple proof-of-concept application. It had a user interface, some mail protocol code, a thread or two to glue them together, and little else. There was simply no way to actually implement such a feature. The reason it took so long to get LogicMail 2.0 completed, was because I was building a full-blown application almost from the ground up. Oh, and I was doing it in my (limited) spare time. The longer it took, the most likely users were to have issues or make feature requests. This all made it take even longer. When LogicMail 2.0 was finally approaching completion, I had a tough decision to make. I could hold out for server polling, and delay it another few months, or I could bump that highly-requested feature to 2.1 and release what I had then and there. Since the simplicity of 1.x was making the project look stale and dated, and polling would create a testing nightmare, I decided to go ahead and just release 2.0.

Now that 2.0 is released, and out of beta, I've been able to focus most of my attention on 2.1. Work has been proceeding quite well, since I'm now building on top of a completed application. I have refactored some big things in the core, but those were things I wanted to rework for a long time.

But anyways, it didn't take me long to start by adding these configuration items:

Which leads to this screenshot, showing much requested functionality:

Now, in case anyone is curious, here's how I've implemented this "polling" so far:

  • IMAP: I actually use IMAP IDLE most of the time, monitoring the Inbox. Whenever the "refresh frequency" period elapses, I leave IDLE mode to make sure the server knows we're still alive and to check any other mailboxes. If there is a connection error, I also use this value as the amount of time to wait before trying to connect again.
  • POP: This is simply how often I connect to the server, check for messages, then disconnect shortly thereafter. Some tweaking is still needed here, so that LogicMail will disconnect slower or faster depending on user activity.

In addition to all of that, I've recently added the ability to mark messages as opened/unopened without viewing them. I've also added flashy new OS 6.0 popup context menus (for OS 6.0 devices) to the mailbox screen:

Don't worry if you have an older device, as the older menus are all still there for this. The newer ones just make for nicer screenshots.

So what is still left to do? LogicMail still needs to be able to start when your device starts up, and go to the background (instead of always wanting to exit) when you close its home screen. There are also a ton of little things that need to be worked on to have a quality user experience. (Better error recovery, timeout handling, more configuration wizard options, etc.)

There are also a lot of little end-user feature requests, most of which are likely to get pushed to 2.2 in order to get 2.1 released faster. However, since LogicMail is an open-source project, any interested developer can work on them and contribute the code back to me.

  • Posted: 2011-07-10 09:23
  • Categories: (none)
  • Comments (0)

LogicMail 2.0 Released!

Its been several months since the beta release announcement, and I'm finally ready to declare LogicMail 2.0 as released! Throughout the beta, I was able to find and fix a lot of issues. Most of these issues are listed in the ChangeLog. Throughout the beta, I've considered the application to be in "string freeze". As a result, the overall look and feel hasn't changed.

For anyone seeing this version for the first time, here are some key new features in version 2.0:

  • Step-by-step setup wizard
  • All network communications now happens in the background, and mail data is now locally cached
  • Improved look and feel
  • Support for both local and remote Sent/Drafts folders
  • Ability to copy messages between folders, even across accounts
  • Improved message composition, with an Outbox that holds messages until successfully sent
  • Keyboard shortcuts mimicking the native messaging application, and touchscreen device support
  • Able to read E-Mails written in many different languages and character encodings.
  • Full support for IMAP IDLE (while connected; background polling not yet implemented)
  • Supports OS 4.5, 4.6, 4.7, 5.0, and 6.0+
  • Translations available for: English, German, Spanish, Russian, Chinese
  • Any plenty more!

For installation:

For a walkthrough of downloading and installing with screenshots, visit the Setup Guide!

P.S. You do still need to know how to setup an E-Mail client to talk to your E-Mail service (via IMAP/POP/SMTP). This really isn't that difficult, and the settings are no different than what you'd use with any other desktop E-Mail client.

There are still a number of known issues with 2.0, which will be fixed with future patch updates. However, none of them were deemed important enough to block the release. The most noticeable of these issues is the need for better detection and handling of stalled network connections (#315, #285).

As mentioned in the beta release announcement, the most user-requested feature of all time (background server polling) had to be postponed to 2.1. It is currently under active development, however, and will be available for testing in the not too distant future.

  • Posted: 2011-05-30 11:43 (Updated: 2011-05-30 12:37)
  • Categories: (none)
  • Comments (0)

Gmail issues investigated

Every once in a while, I've seen users complain that LogicMail behaves strangely when trying to access Gmail. They usually say that it only loads the oldest messages, instead of the newest ones. While actual configuration details are rarely given, I did finally luck out on this discussion thread. The gist of it is that these users are configuring LogicMail to access Gmail via POP, and they are seeing the wrong messages at the top of their Inbox. Once reconfigured to use IMAP, this problem goes away.

That all being said, I did still want to investigate. Did I have some strange POP bug I was previously unaware of, or was something else going on? Gmail already has a pretty bad reputation in the IMAP world, as far as standards-compliance goes, possibly even likened to the reputation IE6 had on the web. However, I had not previously run into user-reported issues with Gmail and IMAP. Could there be issues with POP as well?

While I'm normally a  FastMail user myself, I do keep a Gmail account around for testing (and access to other Google services). So I decided to do a 3-way comparison.

First, let's see what the website shows for my Inbox:

Okay, looks like 154 messages, of which the first several are auto-generated Trac ticket modification notices.

Now let's see what Gmail gives us via IMAP:
(actual transcript edited for privacy and brevity)

$ openssl s_client -crlf -connect
* OK Gimap ready for requests from a.b.c.d q41if4775955yba.118
A01 LOGIN **** ****
A01 OK **** Derek Konigsberg authenticated (Success)
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]
* 183 EXISTS
* OK [UIDNEXT 208]
A02 OK [READ-WRITE] INBOX selected. (Success)
A03 FETCH 180:183 (ENVELOPE)
    "Wed, 04 May 2011 21:05:04 -0000"
    "Re: [LogicMail for BlackBerry] #170: Implement BrowserField2 for OS 5.0"
    . . .)
    "Sun, 08 May 2011 19:58:06 -0000"
    "Re: [LogicMail for BlackBerry] #301: Support updating Draft messages in local folders"
    . . .)
    "Mon, 09 May 2011 00:05:04 -0000"
    "Re: [LogicMail for BlackBerry] #79: Implement server polling"
    . . .)
    "Tue, 17 May 2011 02:05:04 -0000"
    "Re: [LogicMail for BlackBerry] #325: Add support for the IMAP COMPRESS Extension (RFC4978)"
    . . .)
A03 OK Success

This time, the Inbox contains 183 messages! Of course the web interface may present its content differently, so it may not be the end of the world. But what's important to note is that the same messages are at the top of the mailbox.

Now let's see what Gmail gives us via POP:
(actual transcript also edited for privacy and brevity)

$ openssl s_client -crlf -connect
+OK Gpop ready for requests from a.b.c.d c30pf10276912ana.19
USER ****
+OK send PASS
PASS ****
+OK Welcome.
+OK 268 1789575
TOP 266 0
+OK message follows
Date: Sat, 26 Jun 2010 13:43:04 -0700 (PDT)
Subject: Buzz from Derek Konigsberg
TOP 267 0
+OK message follows
Date: Sat, 26 Jun 2010 17:09:47 -0700 (PDT)
Subject: Buzz from Derek Konigsberg
TOP 268 0
+OK message follows
Date: Sun, 27 Jun 2010 04:30:54 -0700 (PDT)
Subject: Buzz from Derek Konigsberg

Did you see that? POP now tells us there are a whopping 268 messages, and the first couple are a bunch of old Google Buzz notifications! No wonder users accessing Gmail via POP were seeing strange results.

So what have we learned from this? It is actually Gmail's fault that POP users are only seeing old messages. The obvious recommendation is to only use IMAP when accessing Gmail.

That being said, if your mail service of choice supports IMAP, then you really should never use POP. The reasons have absolutely nothing to do with the above issue, however. IMAP is a far more sophisticated and efficient protocol, and will work a lot better with clients like LogicMail that try to optimize their data usage and local storage needs.

  • Posted: 2011-05-18 20:33 (Updated: 2011-05-18 20:49)
  • Categories: (none)
  • Comments (0)

LogicMail 2.0 (Beta) Released!

Its been a long time in the making, but I'm please to announce that LogicMail 2.0 has now gone into beta. This beta marks a major milestone in the project, and is the recommended version for all new installations. For anyone still running 1.1, or anyone seeing this application for the first time, here are some key new features in version 2.0:

  • Step-by-step setup wizard
  • All network communications now happens in the background, and mail data is now locally cached
  • Improved look and feel
  • Support for both local and remote Sent/Drafts folders
  • Ability to copy messages between folders, even across accounts
  • Improved message composition, with an Outbox that holds messages until successfully sent
  • Keyboard shortcuts mimicking the native messaging application, and touchscreen device support
  • Able to read E-Mails written in many different languages and character encodings.
  • Supports OS 4.5, 4.6, 4.7, 5.0, and 6.0
  • Any plenty more!

For installation:

For a walkthrough of downloading and installing with screenshots, visit the new Setup Guide!

P.S. You do still need to know how to setup an E-Mail client to talk to your E-Mail service (via IMAP/POP/SMTP). This really isn't that difficult, and the settings are no different than what you'd use with any other desktop E-Mail client. (I am investigating some  autoconfiguration options for future versions.)

Its been over a year since the last 1.x maintenance release, and more than two years since the bulk of my effort shifted to the 2.0 code. With all the people that have been actively running the development builds over the past year, its about time that this code went out to the masses! Through the beta period, we'll be working on fixing any remaining bugs and bringing all the translations up to date. While this first beta build is English-only (for the application text), I hope to have many more translations included in future beta releases.

Now for the caveats... Unfortunately, the most user-requested feature of all time (background message polling, #79, #79, #169, #212) had to be postponed to 2.1. This was a difficult decision, and it took a lot of thought to arrive at it. It took a lot of time and effort to bring the application's architecture up to the point where it was possible to implement this feature in the first place. Now that we're there, its simply a matter of time and resources. Its the sort of feature that may not be too difficult to implement now, but will be a nightmare to test and debug. If I had held out for it, then 2.0 might take another few months to get to release. Given how long its been since 1.1, I felt it was more important to get 2.0 out now, in its current form, and just make 2.1 my next priority.

  • Posted: 2011-01-02 14:18
  • Categories: (none)
  • Comments (0)

Minimum supported OS is now 4.5

Note: This only affects the pre-2.0 version (known as 1.9.x, or the development builds)'

As of the latest development build (, the oldest version of BlackBerry OS supported by LogicMail is now 4.5. (It had previously been 4.2.) If you are one of the very few people still running an older BlackBerry with OS 4.2 or 4.3, please try to upgrade to 4.5.

Here are the reasons I made this decision:

  • The official BlackBerry development tools (i.e. the Eclipse plug-in) does not support anything older than OS 4.5 on a new installation
    • I only have OS 4.2/4.3 on my systems because I have older installs that I've updated.
    • It only pretended to support OS 4.2 and 4.3 in the past. I could build, but the simulators never worked right, so I never tested on anything older than 4.5 anyways.
    • This is an annoying dependency issue to figure out for a new developer freshly checking out the source code to LogicMail.
  • OS 4.5 cleaned up some API calls for device/network information that look very kludgy on OS 4.2. (technically 4.3 fixed some of these)
  • Pretty much all OS 4.2/4.3 devices are upgradable to OS 4.5.
  • Download statistics show that hardly anyone is using anything older than OS 4.5 anymore.

So I've already done the following:

  • Modified the automated build files to change the base OS to 4.5 (Ant build.xml and files)
  • Modified the Eclipse projects to that used to have a 4.2.1 dependency to now have a 4.5.0 dependency (LogicMail, LogicMailTests, J2MEUnit).
  • Reconfigured the build server to generate 4.5.0 instead of 4.2.1.

I'm now in the process of upgrading my oldest physical test device (an 8820) to OS 4.5. Over the next several days I'll be renaming any source files ending in "BB42", and trying to clean up my use of APIs marked as deprecated in 4.5.

  • Posted: 2010-10-29 21:01
  • Categories: (none)
  • Comments (1)

Incremental message loading

I recently had the chance to do another marathon coding week of LogicMail development. These rare opportunities allow me to make real progress, instead of just incremental fixes and features. While the majority of the work was deep in the guts of the application, the actual user impact should be quite welcome.

To sum things up, I managed to accomplish the following:

  • Complete rewrite of the folder message cache (#213)
    • This is where I store message headers (not contents) so refreshing your view of a mailbox is faster than re-fetching everything from the server.
    • I now use the device's internal persistent store for this, instead of the filesystem. (which will eventually make filesystem-less operation possible, for #167 and #232)
    • This cache can be intentionally wiped with a "Clear" button at the bottom of the main configuration screen.
  • Complete rewrite of the code that refreshes mailbox contents and reconciles with the cache, when the user clicks on a mailbox
    • Makes this behavior far less messy and far more error-tolerant, allowing improvements in the future.
    • Keeps cache better synchronized with the server (#209)
  • Implementation of a new "Load more messages..." feature, for incremental mailbox loading
    • The message list on the mailbox screen now shows a special "Load more messages..." item whenever there's a gap at which more messages can be loaded.
    • If your mailbox has messages which are not ordered by date on the server, this item might appear in weird places.
    • This now adds three new configuration options to the advanced account settings:
      • "Messages to load" - How many messages to load/update at the front of a mailbox, when the user selects it. (the equivalent of the old global messages-to-load option)
      • "Load increment" - How many more messages to load when the user clicks on the new "Load more messages..." item on the mailbox screen
      • "Messages to retain" - How many messages (total) to keep in the local cache (and reconcile with the server) if they've already been loaded.
    • Feel free to offer suggestions for better naming
  • Opening a POP message now marks it as opened in the local cache.
    • POP servers don't store flags, so this should be a welcome feature
    • Eventually I'll probably implement fake support for other flags on POP accounts this way

And now for the few screenshots I can share:

  • Posted: 2010-10-24 13:38
  • Categories: (none)
  • Comments (0)

BlackBerry Developer's Conference Wrap-up (2010)

I recently attended the 2010  BlackBerry Developer's Conference, something I seem to be making a habit of, and had an overall good experience. It wasn't quite as eye-opening as previous years, probably because new developer tool announcements weren't aligned with the conference. However, there was still some good content. The best part? They've finally decided to make some of the content publicly available this time. You just need to go to the somewhat hidden  BlackBerry Developer Portal, login, and find the link for "DEVCON10" in the middle of the page.

I also had the privilege of presenting again this year. I spoke on a fairly technical topic, sharing a lot of my lessons-learned from building LogicMail across such a wide range of OS versions.

COM12 - Layout, Configure and Build Strategies for BlackBerry Apps

Supplemental files Download
  • Posted: 2010-10-24 13:36 (Updated: 2010-10-24 13:38)
  • Categories: (none)
  • Comments (0)

The march towards a first beta...

I'm long overdue for another official post about the status of the LogicMail 2.0 project. So far, most of my commentary has been scattered between the forums, ticket system, mailing lists, and private E-Mails. As such, I think its about time I explained where everything currently stands.

As many of you have observed, I've been working towards a 2.0 release for far too long. There are really three main reasons for this:

  • 2.0 really is significantly more complex than 1.x
    To put things in perspective, using the  SLOC metric (as calculated by  this tool, the final 1.1 release comes in at 13,579 SLOC. Meanwhile, as of today, trunk is at 31,427 SLOC and growing.
  • I do this as part-time adventure
    A few hours here and there is plenty for following up on E-Mails, fixing minor bugs, or adding small features. However, the bigger stuff requires me to be able to dedicate whole days of development time. While I can do this on occasion, I am limited in how often I get the chance.
  • As a direct side-effect of taking so long, the following additional things tend to happen:
    • More time is spent dealing with end-user issues and requests
    • New BlackBerry platform features come out that I want to take advantage of

Despite everything mentioned above, I am optimistic about being able to finally get 2.0 to the beta stage some time this year. The end is in sight, and I actually know what else needs to get done. In short, the following are my must-haves for 2.0 being "feature complete":

  • Various performance and memory management enhancements (connection read/write #221, IMAP parsing #222, cache loading #213, memory management #212)
  • Incremental loading of mailbox data (#211)
  • Running in the background and auto-fetching new data (#79, #78)

Anyone who follows the development builds has probably noticed some of the slush after build [build:199] and hopefully ending in build [build:202]. This is where I implemented #221. It has made actual network loading much faster, but has had the side effect of making the post-processing seem slower. Hopefully #222 (a work in progress) should fix this.

Now, we all really want 2.0 to actually get to a beta release sometime this year. As far as I'm concerned, the beta milestone is where the application is feature-complete, and most of the more major bugs are fixed (and/or well documented). In order to get there, I really need to focus on the core features. This may mean that every little user-request or issue won't get acted upon immediately. However, if they are documented in well-written tickets, they can still be mostly addressed prior to a final 2.0 release (or moved over to 2.1).

  • Posted: 2010-08-08 14:59
  • Categories: (none)
  • Comments (0)

BlackBerry 6 (and build consolidation)

If you follow any of  the  usual  enthusiast and  official websites, its hard to miss what's happened this past week. Amongst all the buzz, they also finally remembered to release an actual  SDK to go along with it.

So what did this mean for LogicMail?

  • I wanted a BlackBerry 6 build, to take immediate advantage of some new APIs:
  • The number of existing LogicMail builds was growing out of control.
    • I already had separate builds for OS 4.2, 4.6, 4.7, and 5.0
    • I also had separate touchscreen builds for 4.7 and 5.0.
    • The first 6.0 device is a hybrid slider, making it unclear what to do

So I started thinking to myself... Why do I actually have separate touchscreen and non-touchscreen builds? What am I actually saving by doing that? Apparently, only about 32kb! In an era where other developers can't figure out how to write a toy app in less than 1M, and I'm only in the 300-400kb range, it seemed silly to fuss over that little memory.

If you now look at the main page of this site, you'll notice that I've done the following:

  • Combined the touchscreen and non-touchscreen builds (which icons or fields to use will now just be decided at runtime)
  • Added an OS 6.0 build, using those new APIs

Of course its best to see screenshots:

  • Posted: 2010-08-08 09:44
  • Categories: (none)
  • Comments (0)

BlackBerry Developer's Conference Wrap-up (2009)

I just spent the better part of a week at the  BlackBerry Developer's Conference, and had an overall good experience. Had good times hanging out with Ronen from  BerryReview, Jessica from  CNET, Simon from  IntoMobile, Monica from  BlackBerry Motion, and even got to see the infamous  Crackberry Kevin! Of course I also met up with Eddie from  Weatherbug and Travis from  GWAVA, both of whom I first met at last year's conference.

A lot of exciting things are going on with the BlackBerry platform, many of which are continuations of what we started to hear about last year. As a developer, one of the most interesting items is the completely rewritten  Eclipse Plug-in 1.1 that is now in beta. The original plug-in was considered to be a forceful mashing of the JDE and Eclipse, and did have its quirks. The new plug-in has been rewritten from the ground up, and integrates much better into the whole Eclipse framework. I've already installed it, of course, and will soon be migrating the LogicMail trunk over to using it. I recommend checking out the full list of  Tools Announcements from the conference.

Many new features are going into BlackBerry OS 5.0, and I fully intend to embrace some of them. (Don't worry, I'll still jump through the hoops to support 4.2) Some of the more notable features include:

  •  Network API - This fixes the #1 gripe of us developers, and will help magically solve the "make LogicMail auto-detect which network connection to use" problem. I might still have to solve it manually for older devices, though.
  •  FilePicker API - This will provide a more polished alternative to my current attempt at the same thing, for saving/loading attachments
  •  BrowserField API version 2 - This will provide a clean and easy to use mechanism for displaying HTML content. The current Browser Field is an abomination of a hack to get working, and I'm looking forward to having a cleaner option for newer devices.
  •  AutoCompleteField API - I'm sure I'll find some place to use this, possible for choosing message recipients, depending on how it works.

While they weren't giving out free phones anymore, at least this year's presentations came with a lot more sample code. I'm drooling at getting back to the code now, and also eagerly awaiting the  BlackBerry Bold 9700 coming to my carrier (T-Mobile) on  Monday.

Now I just need to find an unlocked  BlackBerry Storm 9550 for testing, to cover all the bases...

  • Posted: 2009-11-15 12:22
  • Categories: (none)
  • Comments (0)

Storm support (a.k.a. support for multiple build targets)

As many users want support for the BlackBerry Storm to be useful, I've been working on improving the UI for touch-screen devices. While I still have a long way to go, I've finally put all the necessary hooks into the code itself to make actually doing all of this possible. So, here are some pretty pictures, before I discuss some of the gory details:

Quick question: Has anyone actually seen an example of a tree widget that actually works well on a touch-screen device? Particularly one like the LogicMail folder tree, where each node can be expanded/collapsed as well as clicked?

One of my constant side-projects that has finally come to fruition is support for building LogicMail against multiple versions of the BlackBerry API. The challenge is keeping a single code-base, while continuing to implement new features that become available. The initial drive for this, of course, is offering a better UI on the BlackBerry Storm (OS 4.7 and up).

Towards achieving this goal, two approaches were initially investigated: using the preprocessor in RAPC to separate chunks of code, or using a fancier approach based on multiple libraries and class inheritance. While tempting up front, I wound up disregarding the preprocessor approach due to its sheer inelegance and the quirkiness of Eclipse IDE support for it. So what I've implemented is a variation on the library approach. I separate out the code for different API versions when working in Eclipse, but merge it all together in multiple full-up builds when actually using Ant to compile LogicMail on the build server. Got it? :-)

My first implementation of this approach involved some of the UI screens. I wanted to offer specific functionality on touch-screen devices when necessary, while maintaining as much common code as possible with the base implementation. Of course the API to even find out if you have a touchscreen doesn't exist until 4.7, so that posed a bit of a challenge. What I essentially did was completely refactor how screens are created, from an inheritance-based approach to a composition-based one. This had the effect of separating the screen implementations from the RIM API. A somewhat confusing UML diagram attempts to explain this:

P.S. I've also updated the development page with instructions on how to use this new structure when working with the source code.

  • Posted: 2009-08-24 09:18 (Updated: 2009-08-24 09:20)
  • Categories: (none)
  • Comments (0)

LogicMail 1.1 Branched

As some of you may have noticed, I now have a second automated build of LogicMail up and running. On the main page, its referred to as the "Maintenance branch," and it reports its version as LogicMail 1.1. By now you may be wondering what this is, and how it relates to LogicMail 1.0.x and LogicMail 2.0 (a.k.a. "trunk" or 1.9). Well, I realized that 2.0 is still a ways away from being ready, and that I was starting to get more contributions for 1.0.x.

The build process for 1.0.x was a bit of a pain, and debugging it was even harder, mainly because it was configured using  this hack for  Netbeans 5.5. Now that RIM actually has a usable  Eclipse plug-in, life has gotten a lot easier.

So, what exactly is the LogicMail 1.1 branch, you may ask? Well, I basically took the 1.0 branch, and did the following:

  • Updated the project structure and build files to closely match 2.0 (trunk)
    • Development is now in Eclipse, with the same setup instructions as for 2.0 (trunk)
    • Simple builds through  Ant is now possible
  • Configured the  Bitten automated build system on this site to build it whenever updated
  • Began backporting the internationalization updates from 2.0 (trunk)

Going forward, the goals for 1.1 are simple:

  • Full internationalization support
  • Integration of any contributed simple features
  • Occasional backport of simple things from 2.0
  • Continued bug fixes
  • Regularly available automated builds, avoiding the need for formal releases
  • Keep everyone happy, while major work continues to target 2.0 (trunk)
  • Posted: 2009-05-03 17:34
  • Categories: (none)
  • Comments (1)

International character set support

One of the best (or worst) things about developing an E-Mail application is dealing with internationalization issues. The early Internet protocols tend to assume that 7-bit  ASCII US English text is the default, and everything else is the exceptional case. To this end, there have been many  character sets and  encoding formats created over the years. Today, we've at least managed to consolidate all the character sets into a standard known as  Unicode.

Now the BlackBerry API only claims to support the following character sets:

In addition, it has been discovered that East Asia localized BlackBerry devices also support  GB2312.

To make matters more interesting,  Vietnamese characters will only display correctly if they are represented as decomposed Unicode characters. Meanwhile, most Vietnamese text on the Internet is represented as canonically composed Unicode characters.

Users of LogicMail have occasionally run into issues where their non-English E-Mails do not render correctly. The most recent example involved a message that used the  CP1251 character set for Cyrillic. However, I suspect that other similar issues have been noticed and have gone unreported.

Assuming you haven't fallen asleep yet, you are probably just wondering whether I can just wave my hand over the code and make your E-Mail render legibly. Well, I can, but there are some drawbacks. Basically, I need to include two things in the LogicMail code:

  1. Unicode translation tables for all unsupported character sets
  2. Unicode compatibility decomposition normalization (NFKD) tables

Believe it or not,  Java SE 6 already includes libraries for this. But, the BlackBerry API does not. Including this in its complete form would dramatically increase the size of the LogicMail application, most likely by an unreasonable amount.

So what do I want to know from you? What unsupported character sets do you all normally receive E-Mails written in? If I can scope the effort to just a few translation tables, the size penalty may be acceptable. (If you don't know where to look, check the raw message headers.)

  • Posted: 2009-02-13 17:40 (Updated: 2009-02-13 17:40)
  • Categories: (none)
  • Comments (0)

Automated Builds Back Online!

Yes, that's right. I've finally gotten automated builds working again. This time I've decided to use the  Bitten continuous integration system, which better integrates with  Trac.

It took a lot of frustrating work, spending too much time playing with  Apache Ant build configurations, using  BlackBerry Ant Tools, upgrading the  Python installation on the server, and upgrading  Trac itself for the heck of it, but its now all fully functional!

The links for downloading builds are on the main wiki page as before. The actual build details can be found on the Timeline and Build Status tabs above.

Now some of you are probably eager to go ahead and give it a try. Well, I'll warn you that its still not really ready for production use. At this point, I'd recommend only running it on a  BlackBerry Simulator. If you want to use a real device, I suggest a spare or secondary unit.

To actually track the progress towards 2.0, I've created the LogicMail 2.0 Progress page. I'll eventually scrub out all the relevant tickets, but for now this will serve as a more convenient checklist of sorts.

  • Posted: 2009-01-19 20:00
  • Categories: (none)
  • Comments (0)

What BlackBerry OS versions is LogicMail running on?

As a developer, I constantly have to ask myself this question. LogicMail 1.0.x currently supports 4.0 and 4.1. Most shipping devices run 4.2 or 4.3, the latest version that actually works on most of them is 4.5, and the newest BlackBerry models run 4.6 (Bold) and 4.7 (Storm).

Collecting statistics from the actual application is impossible, since I really don't want LogicMail to ever "phone home." Collecting statistics from the SourceForge download page isn't useful either, since it only offers 4.0 and 4.1. Also, I suspect a large number of people are accidentally downloading the 4.0 build. However, one place I actually can collect statistics from is the OTA download page. Ever since I moved that from SourceForge to my own web server, I gained the ability to do data mining on the log files. Thanks to the User-Agent string on every hit to "LogicMail.jad," I now have some useful numbers:

(Collected between 12-OCT-2008 and 20-NOV-2008)

From this its obvious that very few people still run 4.1, and almost no one runs 4.0. Also, a few Storm users have tried it. I've been considering making 4.2 the minimum version for LogicMail 2.0, and this data validates that thought. Making 4.2 the base version allows me to depend on 4.2-and-up capabilities for some core features, like using the FileConnection APIs for local mail storage. I'm also considering offering additional builds for newer versions that incorporate extra features, such as SVG images and field borders that are now supported in 4.6.

  • Posted: 2008-11-20 18:38
  • Categories: (none)
  • Comments (1)

Translators Wanted

One of the big features of LogicMail 2.0 will be internationalization. That means I'd like the user interface to work in more than just US English. However, I'm personally only fluent in US English, so I'm going to need help with this one. I know I have a lot of users all over the world, so it shouldn't be too hard to find a few of you to help out with this aspect of the project. So what do you need to help?

  • Be familiar with the technical terms used in E-Mail clients between US English and your native language
  • Be able to edit a text file in Unicode
    • Being able to build and run LogicMail in the BlackBerry simulator is also useful, but not strictly necessary
    • If you're curious,  this is the actual file you will need to translate
  • Be willing to revisit your translation as I add features and need more text translated

So if you're interested and willing, please write me at and we'll get started.

  • Posted: 2008-11-04 20:21
  • Categories: (none)
  • Comments (1)

LogicMail 1.0.3 Released

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.

  • Posted: 2008-10-28 21:38
  • Categories: (none)
  • Comments (0)

Trunk code reorganization

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:

.BlackBerryBlackBerry workspaceConfigures Eclipse for BlackBerry projects
libSupport librariesSupport for ant-based builds
LogicMailLibrary (project)Application code
LogicMailStartupCLDC Application (project)Application entry point
J2MEUnitLibrary (project)Unit test framework
LogicMailTestsCLDC 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.

  • Posted: 2008-10-27 21:48
  • Categories: (none)
  • Comments (0)