15,000 Downloads for Amazon-OnTheGo

October 4, 2007

We’re just wrapping up device support and SEO on our new mobile / web application (if all goes well, we’ll deploy in a week or two). Great stuff: mobile messaging, a maps mashup, location-based alerts, friend finder, and a place finder all wrapped up in one package called Swirl Connect.

In working on the SEO, I looked at Amazon-OnTheGo’s traffic stats, because it’s received a fair amount of traffic with very little effort on my part. It was always supposed to be a quick and dirty little project, but it’s attracted just over 15,000 downloads to date, and has received some good feedback along the way. Feedback I’m sorry to say I’m just getting around to seeing. Here are a few mentions:

Thanks for the feedback!

J2ME Polish 2.0 Beta 3: ScreenInfo Revisited

March 16, 2007

I thought I’d revisit Polish’s handy ScreenInfo class, as it is working as intended out-of-the-box in the beta 3 release (earlier post here).

In my current application, I’m using it a bit differently than I did before, combining it with a Timer to remove the ScreenInfo element after a specified amount of time.

As before, add the corresponding variable declaration to your build.xml file:

<variable name=”polish.ScreenInfo.enable” value=”true” />

You can also style this element in polish.css by using the “screeninfo” predefined style.

In the code sample below, I’m using images and determining margins at runtime, so I’m not utilizing this element, but it’s a quick way to add default styling and positioning.

screeninfo {
margin-top: 10
margin-left: 10;
}

A sample class file is below. In my implementation, I query for the canvas height and width during start-up (and I’d recommend you do something similar), but below is a quick and dirty way to accomplish roughly the same thing. This example could also be improved by accounting for multiple elements and related details.

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Timer;
import java.util.TimerTask;
import de.enough.polish.ui.ScreenInfo;

public class MyMidlet extends MIDlet {
public Display display;
private List mainMenu;
private Timer timer;

public MyMidlet() {
//your constructor code here
}

public void startApp() { }
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
public static void quitApp() { }

public void showScreenInfo(int icon, long timeout) {
String imagePath = null;
switch(icon) {
case 1:
imagePath = “/si_mail.png”;
break;
case 2:
imagePath = “/si_sync.png”;
break;
default:
//
}

ScreenInfo.setImage(loadImage(imagePath));

//#ifdef polish.FullCanvasSize:defined
//#= int width = ${polish.FullCanvasWidth};
//#else
int width = 176;
//#endif

ScreenInfo.setPosition(width-32, 1);
ScreenInfo.setVisible(true);

timer = new Timer();
timer.schedule(new InfoTimer(), timeout);
}

public void removeScreenInfo() {
ScreenInfo.setVisible(false);
}

class InfoTimer extends TimerTask {
public void run(){
removeScreenInfo();
}
}
}

For more information, you can check out the Polish documentation related to ScreenInfo: Overview | JavaDoc

Job Scheduling with Quartz

September 1, 2006

I’ve recently become enamored with the Quartz job scheduling framework from OpenSymphony. While Quartz can be used in many types of applications, I ran across it looking for a solution to fire scheduled events in web applications. I wanted a Cron replacement that allowed me to instantiate and run any Java class in my application.

Before Quartz, I relied primarily on Caucho Resin’s runat tag to fire events. By adding a runat tag to the application’s web.xml file, you can call a servlet extending GenericServlet. Using Timers or application server-specific solutions is another option, but for the current project, I really wanted to start out with Tomcat, and I wanted the option to easily migrate to an application server if the need arose.

Quartz just works, and integrating it with an existing project was a snap. I approach most new tools and frameworks cautiously. The feature rich, easy to configure, and mature trifecta doesn’t come along as often as one would like, and I’ve been continually impressed with how carefully executed Quartz is.

There are three pieces that make a Quartz application: jobs, triggers, and the scheduler.

  • Jobs: contain the logic or processing that you want to perform.
  • Triggers: determine when jobs are run.
  • Scheduler: the conductor that coordinates jobs and triggers.

Since I’ve started using Quartz, I’ve offloaded much of the on-demand processing into jobs of all sorts. Some jobs are used to perform routine maintenance, in a Ronco set it and forget it fashion, e.g. backups. Some jobs are used to generate pseudo-dynamic content, by running frequently in the background and generating static pages. This takes load off of the server, and conveniently aids in search engine spidering. Some jobs are traditional batch processing. For example, in the current project, a lot of geocoding is performed. Batching these requests, and running them every hour is much more efficient than firing them off on demand.

Adding to the flexibility of Quartz is the ability to schedule jobs both programmatically and declaratively, the ability to use listeners, the ability to persist jobs in a JobStore, and very versatile triggers.

Quartz is most definitely worth a look-see. The latest stable release is 1.5.2, and 1.6.0 alpha was recently released. Both can be download via OpenSymphony.

Amazon-OnTheGo: Screengrabs & Introduction

August 4, 2006

otg-main-11.gifAmazon-OnTheGo is the result of a vanity project I undertook to port a Bluepulse widget to a full-blown Java ME application. With it, you can experience all of the best things about Amazon.com, on your phone:

  • Search for products by keyword, ISBN number, or UPC code
  • Access product details, used and new prices, images, user ratings, editorial reviews
  • Maintain a shopping cart, and submit it to Amazon for purchase
  • Find and review friends’ wishlists
  • Get suggestions on similar items to view

Say you’re at the video store trying to determine what to rent. Fire up OTG, type in the UPC code, and check out the online editorial review. Maybe you’re at the local book store, and you can’t decide between two books. Type in their ISBN numbers to view ratings and comments. While you’re at, find out what the cheapest used price is.

Learn more about it and check out a video walk-through at the OnTheGo web site: www.mywebonthego.com (yes, most on-the-go and similar domains were snapped up long ago!). Go to the “Download” section to get it on your phone in any of three ways, or open http://m.mywebonthego.com with your phone’s WAP browser to download it directly.

More screenshots:

Similar products: Scanbuy Shopper, featured on Lifehacker (coincidentally, right at the time OTG was released), except that it offers more search options

MIDP Project: Amazon-OnTheGo

August 3, 2006

logo_otg_medium.gifWhere has this post been lurking? It is incredibly past due, but better late than never.

By way of background, in May, I began a short project to convert a Bluepulse widget into a full-blown MIDP application. Read the project details here. The goals were to exercise the J2ME Polish 1.3 beta, get an application through the Verified process, and port Amazon-OnTheGo.

The project was mostly successful:

  • I learned a lot about the 1.3 beta release of Polish, and posted a few experiences I had with some of the new features. Splash Screen | Screen Info | Framed Form
  • I ported the Bluepulse widget to Java ME, and built out support for a reasonable number of devices.
  • I signed the application for a good number of models, and wrote about application signing and Java Verified signing. Java Verified | MIDP Signing 2
  • I built a web site and simple provisioning system around the application.

But I’m still in the midst of the Java Verified process, which takes longer than I anticipated. I’ll continue to post updates if I run across any discoveries during the remainder of this process.

And during this project, J2ME Polish went and released a new beta preview: J2ME Polish 2.0! Polish 2.0 adds Java 5.0 support, floating point support for CLDC 1.0 devices, and better IDE integration. It also adds some utility classes to assist with object serialization and RMS use. Considering some of the unresolved bugs from the 1.3 beta release, I have some doubts about the robustness of 2.0, but I’ll be testing it out in the coming weeks.

Within the next day, I’ll post a description of the Amazon-OnTheGo MIDP application, and instructions on how you can get it on your phone.

LEGO Digital Designer

August 3, 2006

Tell me LEGO doesn’t know their customers. LEGO’s Digitial Designer software allows you to build a 3D model of your dream creation, and then order the parts needed to make it a reality. Once built, submit your creation to their product gallery. If you’ve ever had a fantasy of creating an Oop!-like LEGO sculpture, this looks like the best way to do it.

I wonder how the revenues of the simple Lego starter kits compare to some of their advanced sets. I’ve always assumed that the sheer quantity of those starter sets are heavily favored in the revenue mix, even if their margins aren’t as high as some of the advanced sets. But LEGO most definitely does not ignore the loyal hobbyists.

This software just made it to the top of my spare time to-do list.

lego-designer1.gif

LEGO.com Factory and Digital Designer software

Anyone not heard of Mobile Google Maps?

July 27, 2006

I haven’t seen this many similar posts since. . . the release of Google Pages.

maps-on-rojo1.gif

J2ME Polish, Just the Facts

May 9, 2006

I’m taking on a quick side project, which will begin in the next day or so, and I’ve decided to document a few pieces of that project. I’ll write more on that project later, but because most of those posts will make mention and use of J2ME Polish, I thought I’d introduce it today for those who aren’t familiar with it.

What is J2ME Polish?

J2ME Polish is a collection of open source tools used for creating wireless Java applications. Much of J2ME Polish is focused on MIDP applications, but recent releases also address Palm and RIM devices. The primary facets of J2ME Polish (from my perspective) are:

1) Build framework

J2ME Polish enables you to create builds targeted to certain devices or groups of devices. Using the device database and preprocessing, you can query for device capabilities and limitations, and fork your code at build time. Resource assembling enables you to conditionally include things like images or sound files targeted to certain devices.

Building for a device with a full color resolution of 240 x 320? Include large, full color icons. Building for a Motorola? Conditionally include an RMS size attribute in the JAD, and include 15 x 15 list icons. Want to display a fullscreen canvas? Query for fullscreen mode or Nokia UI support.

J2ME Polish also packages an extendable logging framework, giving you access to errors via emulators or the actual device; a localization framework; and takes care of the details of compiling, preverifying, obfuscating, and packaging your application.

2) GUI framework

J2ME Polish interlaces its UI classes with MIDP UI classes, enabling you to use traditional CSS techniques to style the interface of an MIDP application. This is a huge productivity booster. If your application must support MIDP1 devices, J2ME Polish transparently adjusts the MIDP2 to provide that support.

Some new custom items available include a SpiteItem, used to make animated menus, similar to web mouseover effects; a tabbed form; and a framed form, where a screen can be split into scrolling and non-scrolling frames.

J2ME Polish also packages a game engine, enabling you to quickly port MIDP2 games to MIDP1 phones.

3) Tools & Utilities

J2ME Polish brings ArrayLists to MIDP applications, and its TextUtil class offers functionality similar to that found in JavaScript array functions and Java’s StringTokenizer. The BitMapFont class and standalone editor enable you to create image-based fonts to use in your applications. Forget about Motorola’s 20 pixel system font!

J2ME Polish is available under both GPL and commercial licenses, depending on your project. Read more about J2ME Polish here.

Tags: , , , ,

Checkmates — Yahoo! beta Friend Mapping Application

March 22, 2006

checkmates-main1.jpg
Yahoo! released “Checkmates” last week, and I haven’t seen it get too much press as of yet. It’s actually a pretty slick application, with an ingenious navigation system.

It’s a mapping application, but its focus is on showing you where your friends are on the map, or more specifically, where your friends are, are coming from, or are going to. Install the application, sign in with your Flickr account, and you’re ready to go. Find your position on the map, and add a pushpin. All of your friends will be able to see your pushpin on their handsets.

checkmates-main1.jpgSubmaps are also supported, so if, for example, you and your friends are all at a large indoor venue, you can mark your place in the building for all of your friends to see. You won’t find many submaps during beta, however.

What I liked most about the application was the paddle-based approach to navigation. Clicking your paddle center brings up the paddle UI. Now you can click paddle right, left, up, or down to move to the selected submenu. Fast and intuitive.

Yahoo! Checkmates is available here

Tags: , , , , , ,

Call for Entries: JBoss Innovation Award

March 1, 2006

‘Tis the season, I suppose.

“We want to hear how developers have used JEMS products to improve existing processes, overcome technology challenges, and enhance their company’s bottom line. Winning projects across several categories will be promoted and recognized at the largest worldwide JBoss community event, JBoss World in Las Vegas, June 12-15, 2006.”

Major award categories are Partner Innovation Awards, Best Practices Innovation Award, and Technology Innovation Award. Entries judged on creativity, impact, and presentation.

Tons of publicity and a free pass to JBoss World. Let’s face it, we all need a little Vegas now and again (and again).

Award Details | JBoss World Vegas 2006

« Previous Page