Jul 5

A nice interview with the jaiku folks:

and they mention jaikuBerry!

May 23

JaikuBerry 0.8 is out. Changes are:

  • Added more keyboard shortcuts, and documented them on the “About” screen, so people have a chance of knowing what they are. Less scroll-wheeling needed.
  • Some internal code refactoring, getting ready for the time when jaiku enables posting comments via the API
  • Incorporated the new “entry_title” property in the JSON feeds, so that comments no longer redundantly say who the comment was from. Now it says (Re: blah…) rather than (Comment from RichardTodd on blah..) after the comment
  • Worked around a bug in the jaiku feeds, where I have to manually build the url for comments, on items that are pulled in from feeds. This is because the “URL” listed for these items is the url of the external item, rather than the jaiku post about the item.
  • Still tastes great, and is less filling.

I have gotten a lot more users lately, and the comments have been generally positive. I’ve learned more than I ever wanted to know about various mobile phone providers, trying to help you all successfully configure your phones for jaikuBerry. In all but one case, we were able to work together to make it work on your phones. I only know of one instance where the user would rather just give up than try to troubleshoot the problem. So, good!

I think I’ve said this on each of the last few releases, but I really think this is all I can do until more API features from jaiku are released. People have asked for the avatar pics, but I’m not interested in that feature. It takes up screen space, and takes time to download. I like a light-weight interface for mobile connections. Maybe 3G (or 4G) (or phones with wi-fi) will change my mind, but I don’t have any of those right now. One person would like it to pull location data from GPS, and I think that’d be awesome, but I don’t have a GPS-enabled phone to develop it with. If anyone wants to work on that feature, I’d love to help get it into jaikuBerry.

May 20

This is, I think, the limit of what I can do until more API features are released. It can be installed OTA or downloaded for installation with the Desktop Manager from the JaikuBerry page

New in this version:

  • View the public jakus stream (the “explore page”)
  • View your contacts list (great for browsing to channels that you aren’t subscribed to, etc)
  • View other people’s contacts list (for more directed exploring than the public jaikus stream)

From the contacts lists, you can browse to that user’s jaikus. It’s begging for features like “add/remove contacts”, and these will be added once the jaiku API supports it.

If you only just jaikuBerry for posting, then this upgrade won’t mean much to you. That part of the product is unchanged.

[EDIT: in response to a user request, I issued 0.7.2, with one more new feature. It allows you to store up to 5 locations in your settings. Then, you can select from your locations quickly on the posting screen.]

May 16

New version… it’s now on its own permanent page: here!. This is also where the download and OTA install links are.

Mainly this version fixes a bug, and enhances your ability to browse jaikus. You can now go to a view of any post that includes all its comments. Or if you are on a comment, it will take you to the parent post with all the comments. It keeps a “stack” of screens like a web browser, so pressing ESC takes you “back” one page. Very convenient!

As API updates roll in (like, ability to Add/Remove contacts and feeds, and ability to comment on a post), they will make their way into future versions.

May 10

[EDIT: as some web-links point to this post, I want to point out that the newest version and description of the product is always at my jaikuBerry page]

I’ve converted my jaiku MIDlet into a native BlackBerry app. As with the original MIDlet, the main reason to do this is just to learn the ins and outs of BlackBerry programming. However, there are some nice improvements already.

Improvements include:

  • All the screens generally look a little nicer. There’s some color, as in the title bars.
  • The screens for reading jaikus look much better, as far as I’m concerned. The BlackBerry UI allows me to make parts of strings bold, and put separators between strings. Plain old MIDlets can’t do that without resorting to Canvas displays (which are not worth the effort when you are just trying to display some text).
  • The HTTP/network code no longer freezes your display. This is a MAJOR improvement, which I could have done with the MIDlet as well, to be fair. I just never got around to it. And, you get nice status on the amount of data read so far, so you have some clue what’s going on while you’re waiting. And, you can also put jaikuBerry in the background and read your email when the connection is particularly slow. Sweet!

Some screenshots from my BlackBerry 8700c:

posting screen
Status Part One.
Status Part Two.
Reading Jaikus

You’ll notice, I still don’t pull down the avatar images. And, it’s mostly not because of laziness… Until mobile phone internet speeds improve a bit, I’d actually rather not display images for this particular app. It takes long enough just to pull down the JSON feed!

It’s available for download and OTA install on my software page. I will also leave the last plain MIDlet available, as it will run on non-blackberry phones. Any BlackBerry users out there should definitely upgrade!

The tar.gz will have all the source, as well as .alx/.cod files that you can use with the desktop manager to load the app onto your blackberry. I have ONLY tested on a BlackBerry 8700c. I believe it will work with most BB devices, but I have NO IDEA which ones this COD file works against. You have the source, so you should be able to build it (or get someone to build it) for any model you want. Enjoy!

May 7

A couple minor new features in this version.

First off, it tells you if you need to set up your username and personal key. Previous versions would just try to ask jaiku for username ‘unset’ and expect you to figure it out when you always got bad results.

unset!

Secondly, you have more ability to browse around jaiku. Specifically, when you are browsing your overview, you can go to the selected post’s author’s page. From there, using the ‘back’ command (also the ‘escape’ key on your blackberry if you are using one), will take you back to the overview without pulling the page over the network again. It was a cheap enhancement to make, so I made it.

Here you can see the feature in action. In my overview, my cursor is currently on a comment from user raiglstorfer, and the context menu has a command allowing me to pull up all of raiglstorfer’s recent jaikus.

Browsing Around

… all this, on top of all the other great features that version 0.4.1 had! And it’s free! Can’t beat that. As always, you can get the latest version from my software page. Still trying to find the energy to package up more of my software so you can play with it. Maybe next weekend.

As always, I’ve provided the JAR/JAD files which should work on a variety of java-enabled mobile devices. I’ve also given the ALX/COD files I built with the BlackBerry JDE 4.1. You can install it via the desktop manager. I’m sure these work on my 8700c, and have no idea which other blackberrys will be compatible. The source code is also there, if you want to change it, or build it specifically for the device of your choice.

Enjoy!

May 4

NOTE: Jaiku’s devku.org site links to this post, but newer versions are available. See the jaikuBerry page for the blackberry-specific app, and the software page for the current J2ME midlet.

As you can see from this screenshot from my actual Blackberry:

Latest Screenshot

… I am now fetching the overview feed and the “your jaikus” feed and displaying them on demand. You can also see that, once again, I’ve completely disregarded any sense of aesthetics that I may possess. I wanted to make this as lightweight and simple as possible (which is fancy talk for “I’m a lazy bastard, trying to get by with the bare minimum while I wait for the mojax jaiku moblet“).

At least I bold-faced alternating entries so it’s easier to scan across them! And, seriously, if you want a bare-bones jaiku interface with very low overhead, I think this isn’t such a bad little app. It’s still all standard J2ME/MIDP stuff which should run on some very low-powered phones. Not that I’ve got any such phones to test it with….

At this point, I think I’m calling this product feature complete (It already does a decent job of posting updates, as discussed in the previous release’s blog post). At least, until the official API is enhanced, I’m done. I’m not going to resort to screen-scraping to be able to post comments, etc.

It would be nice if I would add some sort of status as I download the presence streams, so that you can tell that the app is not frozen… it can take a few seconds to pull the whole json structure across. Maybe I will do that if I get motivated.

As always, you can download it from my software page. The package contains all the code, and the JAR/JAD suitable for transmitting to java-enabled phones. It also contains the ALX/COD I built with the BlackBerry JDE 4.1. This COD file works on my Blackberry 8700c, and has not been tested on any other blackberry (since I don’t have any others!).

(note to self: you take a screenshot of an actual blackberry by connecting it via usb and using the command: javaloader -u screenshot filename.png. It will generate a HUGE png file that you’ll want to re-encode.)

May 3

I made an update to my jaiku posting MIDlet today. Screenshots from the emulator:

BB Screenshot

picture options

settings screen

New features:

  • It counts the characters for you, while you type. Seems most posting apps do this, so why not mine? I was initially concerned about the effeciency of this operation, but it turns out the lcdui TextField interface provides a size() method which doesn’t make me request the current String. So, I assume most devices manage to perform this operation pretty efficiently.
  • Support for sending post icons. To keep things lightweight, I just gave text descriptions of the available icons. I included all the ones I myself would ever use, of the currently available set. There are 52 to choose from.
  • It also uses that status field to tell you whether the previous posting was ok, or had errors. The previous version would pop up an Alert box to tell you about the error, but if you blinked you’d miss it. Plus, it now leaves your post message alone after an error, giving you a chance to try to re-send it.

Tested on my Blackberry 8700c, but the code is all plain J2ME midlet stuff, so it should theoretically work as-is on a ton of java-enabled mobile devices. The tar.gz contains the code, the jar/jad files, and the alx/cod files. I’m not sure which Blackberrys will be compatible with the alx/cod files provided… I compiled it with RIM’s JDE v4.1. But, you (or someone else) could certainly compile it with other JDE versions for other Blackberrys if need be…

As always, you can get the latest versions of the software I release on the software page (I’ve got quite a backlog that I’d like to package up and add there, over time, now that I have a semi-permanent web page).

Apr 30

I finally got around to writing an app I can run on my Blackberry. After investigating, I decided to make a MIDlet, rather than a native Blackberry app. This way, it will run on just about any java mobile platform. Plus, on first glance I thought the user interface API was clearer. In fact, after reading just one or two articles, I felt like I could make a simple MIDlet app with no problem.

The goal was simple: use the jaiku api to post presence updates to my jaiku stream. I know there are utilities like IMified that allow you to make updates over AIM or gtalk. To preserve my battery life, though, I often keep my Blackberry’s AIM/jabber client offline. I really just wanted a simple app to make the JSON api call. There is the moblet in 24hrs project, but it started on April 14th and isn’t done yet… that’s a loooong 24 hours! I got tired of waiting.

Programming Paradise

I had already written a command-line app to post to jaiku in haskell, so I knew how to make the API call already. All I needed to do was define a screen with a text field, and a ‘post’ command that would cause the HTTP POST. Initially, I just hardcoded the username and personal key information into the app. In the next version (next weekend?) I’ll use the mobile RMS api to store those settings in non-volatile memory. At that point, I’ll put the code up here so people can use it if they want.

So, I wrote the utility in probably half an hour, just starting with one of the many ‘hello world’ MIDlets you can find online. I downloaded the newest version of the Blackberry JDE (java development environment) to compile it with. Blackberrys run ‘java’ but they don’t use a normal JVM. This means you don’t move JAR files to your phone, but rather transcoded COD files. So, blackberry-specific tools are needed even when you are careful to only use standard java classes.

Learning how to make a mobile java-based app turned out to be not only easy, but fun. I was happy to see that the way they try to map commands to phone buttons in a phone-agnostic way matched up almost exactly with the way I had suggested doing this on another mobile platform. So, I felt very “in-tune” with the MIDlet way of doing things. I am always surprised by how much code you have to write in java to do anything, though. Haskell and OCaml have spoiled me with their brevity, I think! :-)

Trouble In Paradise

I was a bit annoyed that the JDE is a windows-only app. I do almost all my coding on macs. Oh well… I do have an XP laptop, so it wasn’t a huge deal. In the JDE, my code compiled and ran perfectly in their BB 8700 emulator. So, I moved the package onto my actual phone. You can imagine my surprise when the phone immediately went into an unending series of restarts. It never got past the blank white screen, always failing after a couple seconds and starting over. Worse, removing the battery and reinserting it didn’t help. The ‘java_loader’ application that can be used to wipe the phone’s memory could not connect to the device, since it never started up.

After a lot of searching, I found a way to reinstall the OS while the battery is not in the device. Thankfully, I had backed up all my data just prior to this adventure. But, when I re-loaded the app, the same problem arose, and I had to reinstall the OS again. This takes like 20 minutes, so I was not happy.

Problem Solved

After a lot of searching, I finally found the suggestion that the JDE version 4.1 was appropriate for 8700 phones, while the newest version (4.2) was not compatible. Apparently, the JDE versions are tied to the phone versions, even though I couldn’t find anything in the release notes about this. Not to mention, the JDE 4.2 comes with an 8700 simulator (and older models as well)! I was extremely skeptical that switching JDEs would do the trick. But, I tried it and sure enough, my phone was happy.

I guess RIM has never heard of cross-compiling. I can imagine that it must be terribly confusing to host an app for many blackberry models, if they all must be compiled with different JDE versions. It would be much better if the phone itself would transcode any JAR files you give it, I think…

Success!

I didn’t think to grab an emulator screenshot from my XP laptop, and I’m writing this from one of my macs. But, you can see the first successful post to jaiku!

Apr 18

Problem

Some feeds are updated rarely. For these, however often jaiku wants to poll them is just fine. Other feeds, though, like last.fm feeds, can be updated very often. Jaiku seems to poll my last.fm feed every 10 to 12 hours (or maybe it just feels like that long, but it’s often several hours), which means lots of songs never get sent posted to my presence stream. Some twitter-users are very prolific, as well, which means that when you see their updates it’s always bunched together in “and 19 more” form.

Solution?

It seems to me that you could set up an adaptive structure like this:

  • Define some range of poll rates (say, minimum once per day and maximum once per hour, or something)
  • When you poll a feed, note whether there was anything new to post
    • if there was something new 3 of the last 5 times, then move to the next higher poll rate
    • if not, then move to the next lower poll rate
  • repeat, adjusting the poll rate to track the update rate of the feeds

So feeds that change a lot will get polled more often, while feeds that do not change will get polled less often. And, most importantly, jaiku would adapt to feeds that are updated in spurts. So, for instance, twitter and last.fm feeds will naturally update a lot more often when people are awake, and then go dormant when people are asleep.

Maybe a different algorithm would be better to capture the irregularity of the update rate:

  • When a feed has updates in it, bump this feed up to the highest poll rate
  • When a feed has no updates twice in a row, move to the next lower poll rate

So, in this scenario, say a last.fm feed has no updates all night. So, over the course of the night, jaiku polls their feed less and less often. When the user wakes up and starts listening to music, their feed will have updates again. The first time jaiku pulls the feed, it sees the changes and bumps the feed up to the “once per hour” poll rate. Each hour, there continue to be updates, since the user is awake. Once the user stops listening, jaiku will poll the following two hours, and not see updates. Then it will start polling every 2 hours, then every 3 hours, until an update is spotted again, and the cycle starts over.

For feeds (like most people’s netflix queues, for instance) which are usually updated once a day at most, the algorithms would usually not poll the feed very often. It only really affects the feeds that do get constant updates.

I haven’t done any research or modelling… probably there are some adaptive algorithms out there that would work better than these two ideas. But, it seems like it would improve the user experience…

Update: further ideas

Perhaps in addition to the above: when a person makes a jaiku post for the first time after a long break, schedule a person’s feeds for a couple test polls starting 30 minutes after that. The idea is, “this person maybe just woke up, or came back from some offline break, and is now active again.” This would help catch the start of an active period for their feeds quickly, since the poll rate might have gone down quite a bit during the downtime (which would mean a lag of up to 3 or 4 hours before jaiku would notice their feeds are active again).

« Previous Entries