Michael Yuan

“Science is a wonderful thing if one does not have to earn one’s living at it” — Albert Einstein

April 25th, 2007

Google Mobile Maps versus Yahoo! Go

Mobile local search is obviously one of the biggest opportunities for Internet search companies like Google, Yahoo, and Microsoft. According to this New York Times article:

“The biggest growth areas are clearly going to be in the mobile space,” Eric E. Schmidt, chief executive of Google, said when asked about new opportunities at a conference here this week. In case his point wasn’t clear, Mr. Schmidt drove it home: “Mobile, mobile, mobile.”

Well, I have been using both Google Maps and Yahoo! Go for some time. They are both excellent J2ME applications. Here are some of my thoughts:

What I like about both apps

Both Google Maps and Yahoo! Go are very usable mapping applications. They can find locations by address or business names (even incomplete ones), display area map, support multiple levels of zooming, and support easy scrolling / panning. Leveraging the multi-thread mobile application runtime, they both fetch new map images tiles in background — and hence they are much more usable than displaying static maps on a mobile web page.

Local business search is built into both applications. When you enter a search phase, the application searches for businesses in the vicinity of your current location and marks the business locations on the current map. You can then access information of those businesses by pressing the corresponding number key. You can call any business from the app if it has a phone number listed. You can get driving directions to/from that location. You can also see reviews and ratings in Yahoo! Go.

The turn-by-turn driving directions are handled very well on both applications. You can view each turn instruction with its corresponding map like a slide show — using your keypad to navigate to the next/prev turn. The experience is quite like having a real GPS in your hand.

Screenshot0061.jpgScreenshot0060.jpg

What I like about Google

While Google Maps is not full screen (this seems to be a big oversight), it manages to display maps in finer details than Yahoo (see below). I think high map resolution is crucial for mobile phones — it reduces the need to zoom in and out just to see a street name. Somehow, the maps from Yahoo! Go look very clumsy on the mobile and there are too few street names on the Yahoo Map — you have to zoom really close to see the street name and then zoom back out to see the overall area.

Typical Google Maps:
Screenshot0055.jpgScreenshot0054.jpg

A typical Yahoo map:
Screenshot0051.jpg

Google Maps is more stable than Yahoo! Go. The Yahoo application occasionally freezes if you try to do too many things too quickly (it even freezes if you try to zoom too quickly). That is highly annoying on a mobile phone. I almost never encountered a freeze on the Google application.

The overall workflow of Google Maps is also more efficient than Yahoo! Go due to the support for “saved” locations. In Google, you can save any address (or search result) in a “favorite” list. You can then go to any saved point directly to view its surrounding map, get driving directions to/from it, and search businesses / locations around it. When you select a search result anywhere on the map, you can also easily choose a location from the favorite list to calculate the driving directions. It is very useful if your trip has several stops. Yahoo, on the other hand, do not provide an easy mechanism to save locations temporarily. You can only save Yahoo locations on the Yahoo web site and then access the saved list from the phone. That quite severely limits the usefulness of the mobile client. Of course, Yahoo has a very nice “auto-completion” feature in its input box that makes finding previous locations a little easier (see more on this later).

Google Maps makes better use of the numeric keypad to provide quick access to saved address lists, search results, driving directions, zooming, and other important menu functions. Yahoo! Go requires you to use the softkeys (or the joystick) to navigate, which is just a lot slower than shortcut numerical keys.

Google Maps provides satellite images as well as street maps. I find that quite useful when the streets are confusing. Yahoo does not offer that feature.

Screenshot0062.jpg

Mapping applications are bandwidth intensive. I can easily consumer more than 1 MB of data in one day while I am on a trip. The kilobytes gauge on Google Maps is useful when you are on a metered Internet connection. It allows you to see how much bandwidth you have consumed in the current session. It would be nicer if the bandwidth gauge is saved in a persistence storage and collect data across different sessions.

What I like about Yahoo

Now, you might think that I like Google Maps much more than Yahoo! Go. But that is far from the truth. ;) Mobile applications are like icebergs — they are 10% mobile UI and 90% server support. IMO, the strong point of Yahoo! Go is its tight integration server services. In contrast, Google leverages little server services other than geo-coding, map rendering, and local business searching.

Yahoo! Go incorporates a complete Yahoo search engine. You can search any term and get a list of businesses / locations back. You can view the details of each search result including its ratings, reviews, or even go to its web site — Yahoo! Go reformats the web site and fits it into your mobile screen. Google, on the other hand, offers a much less sophisticated local search engine. When you enter a search term in Google, it just marks the returned locations on the map. Each Google location only has an one-line title. It is sometimes woefully inadequate — I tried to search for USPS post offices on Google Local Mobile: it returns some shipping supply shops and USPS pickup locations, but gives me no way to tell which one is the real post office.

Screenshot0058.jpgScreenshot0059.jpg

In addition, Yahoo! Go integrates personalized news, stock quote, email etc. from your Yahoo account all into one application. Of course, that is beyond the scope of a “mobile map” application but I find the highly integrated user experience very appealing.

Besides tight server integration, Yahoo! Go also offers several mobile UI features Google lacks: The Yaoo app is full screen — very important for mobile phone apps. The text input box in Yahoo! Go remembers all the phrases you typed in the past and offers auto-completion suggestions as you type.

The verdict

I guess the bottom line is that I liked both applications. I find myself using Google Maps more often while I am driving / walking around since it has better maps. But when I am at a place and try to plan the next destination, I almost always use Yahoo! Go to take advantage of its better search features.

April 24th, 2007

The missed opportunities with Yahoo! Go

Yahoo! Go is a mobile application that I use every day. It integrates with my personal online Yahoo account to provide mobile access to Yahoo email, customized news and RSS feeds, stock quotes, local maps, flickr photos from friends, and local search. It has a very slick mac-like UI that allows me to thumb through the screens quickly. Overall, the Yahoo! Go rich client user experience is much much better than the Yahoo Mobile thin client web site.

Screenshot0063.jpg

Yahoo! Go is only available on a selected list of Java devices — the idea is that the application will be “ported” and customized for each device for the best user experience. For instance, on my Nokia N80, the application graphics are optimized to look good on the large screen. However, IMHO, Yahoo! Go’s device-specific port is superficial at best. It misses some real opportunities to take advantage of what the device has to offer.

For instance, my Nokia N80 supports the J2ME File Connection and PIM API. That means the Java app will have permission to write to the local file system. Then, why on earth did the N80 version of Yahoo! Go NOT offer an option to save a Flickr image to the device gallery? If the image could be saved to device gallery, I would have been able to use it as the wallpaper or do any number of cool things with it.

Screenshot0065.jpg

Instead, Yahoo! Go took a “lowest common denominator” approach with the application — it only provides features that are common to all the phones it support and focuses the porting effort on polishing the UI. I believe that is the wrong approach. If we are porting a J2ME app to multiple devices, we should take max advantage of the device’s built-in features.

April 23rd, 2007

Photo-realistic 3D driving games on Java mobile phones

It seems that all major game developers have ported their best 3D driving games from consoles to Java handsets in the past couple of months. For less than $10 / game, you can now enjoy “Project Gotham Racing”, “Need for Speed: Carbon”, “Asphalt Street Rules” and more on your mobile phone — all in stunning 3D graphics.

NFSCarbon_176x208_anim.gif pgr3D-s5.jpg asphalt-street-rules-anim.gif

I have tried a couple of them on my Nokia N80, and have to say that they are exceeding all my expectations. In terms of graphics, well, they rival the original games on my XBOX. Of course, the keypad controls on the phone are not as good as the Xbox controller, the phone CPU is occasionally slow to render complex 3D scenes (i.e., buildings pop up ahead of you as you drive), the frame rate is probably low at less than 10 frames / second, and battery life is a concern if you play the game for a couple of hours a day. However, the ability to play photo-realistic driving games while you are in a boring meeting is priceless. :)

Now some people might ask: how is it possible to run photo-realistic 3D video games on a mobile phone? Isn’t the screen too small for that? Well, the mobile phone screen may be small but it certain has enough pixels to render complex graphics. My Nokia N80 has a resolution of 352×416 pixels — that is significantly greater than the resolution of standard TV signals. If you can play video game on your standard big screen TV, you can certainly play it on the high end phone! The screen shots shown above are at the lower 176×208 resolution.

With new devices like the Nokia N95, which provides hardware 3D acceleration support, Java 3D experience can only get better on mobile phones!

If you have a highend Nokia / Sony Ericsson phone and not done mobile gaming, you need to check out those games. They are truly eye openers.

April 22nd, 2007

Remeber the Blue Angels

It is very sad to hear that one of the Navy Blue Angels F-18 jets crashed today in an air show. I remember the first time I watched Blue Angels perform in south Texas almost 5 years ago. It was very inspiring and I was hooked in air shows since then. Here are some Blue Angels pictures we took over the years.

May the force be with the Blue Angels!

p4060533.jpgp4060562.jpgPicture 2.pngp9011060.jpg

April 17th, 2007

First Release of Seam Plugin for NetBeans!

Update: Use the 0.2 version of the plugin for Seam 1.2.1 GA and JBoss AS 4.0.5 GA.

Petr Pisl of Sun has just released a first-look Seam Gen plugin for NetBeans. It allows you to generate complete Seam CRUD applications in NetBeans much the same way Red Hat Developer Studio allows you to do in Eclipse. I am extremely excited. So, here is a mini tutorial with some screen shots (taken from a Vista box — NetBeans look pretty good on Windows Vista).

Tutorial

1. Download and install the Seam module in NetBeans 5.5.1. We recommend you to install the Facelets support modules as well. Use “Tools -> Update Center -> Install Manually” to install those nbm files.

2. Install JBoss AS 4.0.5 with EJB3 support and set up a database with some existing data. Register the JBoss server and database connection in NetBeans. This is standard NetBeans stuff. If you are not familiar with that, read the Notes at the end of this post. You should see something like this in the Runtimes window after you are done.
seamgen01.png

3. Use “Files -> New Project” to create a new Seam project. You need to point it to the Seam 1.2.0 PATCH1 installation directory. You need to also specify the JBoss AS instance and the database connection registered in NetBeans.
seamgen02.png
seamgen03.png
seamgen05.png

4. The project is then created. You can open any XHTML file to see the capability of the Facelets support module (e.g., syntax highlighting, auto-completion etc.)
seamgen06.png

5. Right click on the project and select Deploy to build and deploy the project to the selected JBoss AS instance.
seamgen07.png

6. Start the JBoss AS server in the NetBeans server manager.
seamgen08.png

7. You can see the basic web page in your browser.
seamgen09.png

8. Select “New -> Files” in the project and select generate-entities to generate a complete CRUD application based on the data in the database connection.
seamgen10.png

9. Java classes and UI XHTML files are generated into the project.
seamgen12.png

10. Deploy the app and refresh your browser. You now have a complete AJAX CRUD application (see it in action here).
seamgen13.png


Notes: Set up JBoss and database server

a. Install JBoss AS 4.0.5 GA from the installer and choose the EJB3 profiler when asked.

b. Register the server in NetBeans via “Runtime -> Servers -> Add Server” in context menu and select the JBoss AS installation directory.

c. Download and expand the following zip file for a HSQL database, and start the database by running the runDBServer script. Of course, if you have an existing DB running, you can skip this step.

d. Add the DB driver via “Runtime -> Databases -> Drivers ->New Driver” in context menu and select the hsqldb/lib/hsqldb.jar file. If you are using other DB servers, you need to add its JDBC driver.

e. From the context menu over the added HSQLDB driver, select “Connect Using …”

- Database URL: jdbc:hsqldb:hsql://localhost:1701

- Username: sa

- and the schema is PUBLIC

That’s it!

April 16th, 2007

Appforge and Oracle?

Appforge is a mobile application tool developer that provides an IDE to cross-compile VB/C# code for Windows Mobile, Symbian, and Palm devices. It is a very nice cross-platform mobile app development tool. I reviewed it for the Jolts award in recent years.

Recently, it seems that Appforge is bought by Oracle and Oracle apparently decided to ditch the AppForge product — leaving a lot of unhappy customers. It is especially troubling since applications developed in Appforge need a CLIENT license to run (e.g., think of the JVM license in the Java world). If Oracle decides not to sell Appforge CLIENT licenses anymore, that would mean all Appforge applications in development would have to be abandoned. If I had built my mobile app development skills around the Appforge platform, I’d be very frustrated. Fortunately, Java ME is not going away anytime soon.

One thing Oracle can really do to help the Appforge community is to open source it. It does not cost Oracle anything since it does not plan to sell any more copies or support. But Oracle has been given more lip service to open source than to actually contribute anything. Will they do the right thing this time?

April 12th, 2007

Taxation without Representation

I just filed our 2006 tax return. According TurboTax, Ju and I are paying more tax than 98% of all US tax payers. I guess much of it would go to pay for the “iRack”. In the meanwhile, as new immigrants, we have no say on how our tax money is used — cannot vote, cannot even travel aboard freely. In another day and age, wouldn’t this be a cause for a revolution? ;)