Babel Fish for Twitter – New Twim Release

Google Translator is a great translator tool which has a very simple AJAX API that can be easily used from mobile apps. Compared to other translator tools it has one feature which other services don’t have, the auto detection of language.

The API is really easy to use. All you need to do is to pass three parameters to the API call:

  1. Version, v=1.0
  2. Translated text, q=Hei maailma!
  3. Language pair (if source is empty then language is automatically identified), langpair=|en

In the end you end up with the following URL:

http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=|en&q=Hei+maailma!

And if you click the link you’ll see that it returns the translated text in JSON format which is pretty easy to parse.

{ "responseData": {
"translatedText":"Hello world!",
"detectedSourceLanguage":"fi" },
"responseDetails": null,
"responseStatus": 200}

This made it pretty easy to integrate the API call to Twim. So now in Twim 1.6 you can select a tweet from status list and select “Translate to English” from status menu and Twim will display the translation to you in seconds. Pretty handy if you are following people from other countries in Twitter. Go ahead and download the latest Twim to your mobile phone from here.

…and by the way, new feature also has the “paging” feature for home screen and search results as a bonus! Happy Twittering!

Posted using Mobypicture.com

Coding Touchscreen Scrolling in Java ME

Here’s the trick how you can add touchscreen scrolling to your J2ME applications. The key to touchscreen support is the Canvas class and its’ methods pointerPressed, pointerDragged and pointerReleased. These events are called when user puts finger on the screen (pressed) and drags the finger (dragged) and finally when removes the finger (released). Each method has the x and y coordinates for the pointer action.

The scrolling is implemented with the pointerDragged event. We store the current location of the canvas to variables verticalLoc and horizontalLoc. When finger (pointer) is dragged then location is changed according to the dragged amount. Variables are used on paint method to draw the area so that it is scrolled that correctly. You can also see from the sample code how you can draw background with repeatable pattern image.

  1. public class ScrollingCanvas extends Canvas {
  2.  
  3.  // Current location
  4.  private int verticalLoc, horizontalLoc;
  5.  // Last pointer (finger) location
  6.  private int lastX, lastY;
  7.  // Background image size
  8.  private static final int IMAGE_WIDTH = 183;
  9.  private static final int IMAGE_HEIGHT = 183;
  10.  
  11.  public ScrollingCanvas() {
  12.    verticalLoc = 0;
  13.    horizontalLoc = 0;
  14.    setFullScreenMode(true);
  15.  }
  16.  
  17.  protected void paint(Graphics g) {
  18.  
  19.    // Draw background with pattern image
  20.    int x = horizontalLoc % IMAGE_WIDTH;
  21.    if(x>0) {
  22.      x -= IMAGE_WIDTH;
  23.    }
  24.    int origX = x;
  25.  
  26.    int y = verticalLoc % IMAGE_HEIGHT;
  27.    if(y>0) {
  28.      y -= IMAGE_HEIGHT;
  29.    }
  30.  
  31.    boolean verticalDone = false;
  32.    while(!verticalDone) {
  33.      boolean horizontalDone = false;
  34.      while(!horizontalDone) {
  35.        g.drawImage(
  36.          ImageRepository.getBackground(),
  37.          x, y, Graphics.LEFT|Graphics.TOP);
  38.        x += IMAGE_WIDTH;
  39.        if(x>getWidth()) {
  40.          horizontalDone = true;
  41.        }
  42.      }
  43.      x = origX;
  44.      y += IMAGE_HEIGHT;
  45.      if(y>getHeight()) {
  46.        verticalDone = true;
  47.      }
  48.    }
  49.  }
  50.  
  51.  /**
  52.  * Finger is pressed on screen
  53.  * @param x coordinate
  54.  * @param y coordinate
  55.  */
  56.  protected void pointerPressed(int x, int y) {
  57.    lastX = x;
  58.    lastY = y;
  59.  }
  60.  
  61.  /**
  62.  * Finger is dragged on screen
  63.  * @param x coordinate
  64.  * @param y coordinate
  65.  */
  66.  protected void pointerDragged(int x, int y) {
  67.    // Calculate how much we moved horizontally
  68.    int deltaHorizontal = lastX – x;
  69.    horizontalLoc -= deltaHorizontal;
  70.    lastX = x;
  71.  
  72.    // Calculate how much we moved vertically
  73.    int deltaVertical = lastY – y;
  74.    verticalLoc -= deltaVertical;
  75.    lastY = y;
  76.  
  77.    // Repaint the screen since we have scrolled
  78.    repaint();
  79.  }
  80.  
  81. }

Here is a video of running this demonstration app in Nokia N97 SDK emulator:

Twim with Touchscreen Support

Here is the new version of Twim, the mobile Twitter client, now with experimental touchscreen support. I don’t own a real touchscreen phone (yet) so I had to test touchscreen functionality with emulators like Nokia N97 SDK (v1.0) and Microemulator. There were also few good people in Twitter that tested the beta version with N97 and Nokia 5800.

New 1.14 also includes other new features like Search, Twitvid, and Follow/Unfollow support. There are also minor improvements like now you will only have to answer to less security popups when uploading files since now it is only using READ mode instead of READ/WRITE that popped up tons of popups on my E71.

Go ahead and download the latest binaries from here and start Twittering! Let me know how the touchscreen support feels like on a real device since I can’t test it myself :)

Twim v1.14

Twim v1.14

New search feature in action

Search feature - GIF animation

Getting Things Done – With Mobile App

Splash Screen

Splash screen of the new GTD application.

I like to get things done. For years I’ve followed my own action management methods but recently I’m leaning towards the David Allen‘s GTD method which he describes in his book Gettings Things Done: The Art of Stress-Free Productivity. I have used many tools to store the actions like traditional pen and paper and several desktop apps, like MiniTask and Evernote. I haven’t found any decent (and simple) mobile apps to do the same. I have used the Groceries app for this purpose but it was lacking in some areas of usability. This was the reason I created the Mobile Task Manager application.

I got good feature ideas from Jorge Ledesma who is a blogger at NokiaMobileTalk.com. The current set of features include:

  • Create actions
  • Edit actions (with 3 key)
  • Mark action as done (with fire key)
  • Purge done items
  • Create folders
  • You can add notes to actions (with 9 key)
  • You can rearrange the actions (with left/right keys)
  • Mark action as favorite (with 7 key)
  • Backup actions to CSV file

Check out the software page for additional screenshots and download links.

New Twim with Twitgoo Support

New release of Twim is once again out of the door.

Twitgoo Service

Now you can post photos from Twim to Twitgoo

With the latest version (v1.11) you will gain the following new features:

  • Twitgoo support. Now you can take a photo and send it directly to Twitgoo service.
  • Retweet feature fills up the status update box with the selected tweet.
  • Clock is shown in the bottom of the menu screen so you know what  time it is even if you Tweet with Twim 24/7.
Photo services

Photo services

Download the latest version from Twim page here. Tweet me (@tlaukkanen) if you like the new features :)

For the next versions I have planned on implementing an option to upload existing photos from your memory card as then you will have much more higher quality photos to upload to TwitPic and Twitgoo. This is because Java MMAPI doesn’t let application to take full resolution pics within Java application for unknown reasons.