Free Voice Guidance Navigation on the iPhone

Yesterday we became the first to offer free voice guided turn by turn navigation on the iPhone. Not Google, not Apple, not even AT&T but MapQuest! I know a lot of people will be all like, “Google’s free on Android!”, or “Verizon does this!” and “Garmin does that!” but let me tell you. There has been a monumental change within the walls of AOL. Things are moving in MapQuest. Free turn by turn is only the first step. And because you got a nut like me working on the project you can believe there’s a lot more coming. I don’t typically post a lot of specifics about AOL or MapQuest here but yesterday was highly important. We’re going to establish ground in the market of mobile. And we’re going to do so while you’re sleeping. …While you’re obsessing over whatever Motorola puts out. …While you’re tinkering with your Google Maps mashup. We’re going to release something that will have you saying “wha?? Why didn’t Tom-Tom think of that? Where was Google when they thunk that up?” If you don’t know, then you’ll know!

Swing runs slow over remote X11 sessions

I don’t know what’s more painful, constantly switching keyboards between machines and virtual machines, or trying to get work done over any kind of remote session. I’ve installed a golden VM on my desktop at the office under VirtualBox. It’s golden because it’s configured in a way that I don’t wish to repeat/re-learn/re-configure. I’m prototyping somethings there which will eventually need to be moved to a production box. So on occasion I find the need to remote log in to my virtual machine running in the office. That requires that I scale the office firewall using a special VPN, with extra secret sauce security, start a remote session on my desktop via the command line, log into the remote session, start the virtual machine from the cmd line using “VMManage” then finally log into the virtual machine. I’ve learned that using the VNC session tied to my idle desktop hardly works due to long standing bugs/issues in KRFB. Also, trying to Use a secondary VNC display (like :1 or something) and log directly into VirtualBox from that display works marginally well. I recently tried VitrualBox TerminalServices support which allows you to use a Microsoft Windows remote desktop client to access the virtual machine. The advantage here would seem that audio is forwarded to the client. After getting this working using more cmd-Fu I learned that the audio forwarding only works with a Windows guest machine. I’ll have to lose a week sometime in the future to learn how to setup esd under Linux to get forwarded audio. Other than that the terminal services client support works marginally well. My latest attempt was to use remote X11 forwarding. Launching Netbeans on a remote VM is slooow. It takes over a minute for the screen to respond to mouse clicks. Probably over three minutes! I’m not really timing, I just got impatient and started writing this post after waiting for the splash screen. I get best results working directly on the machine without the remote software in between. I probably could run the IDE outside on the host instead of the guest btu then I’d have to fight with the impossible configuration of shared folders. All I want to do is write a simple C++ program that uses an API installed on the guest! At this point I might as well have installed the OS directly on my host using a partition. I’m still thinking of going this route. Does you know of any shortcuts? Yes, you! Stop reading and give me an answer already!

Leopard/Snow Leopard and iPhone Simulator Audio drama

You’re demoing an iPhone game that you’ve run successfully for months now. You’re standing in front of your superiors but you aren’t concerned because you have unit test coverage that spans the seven seas. You managed to find and stomp out even the littlest, most insignificant bugs that only a developer will notice. You’re on your way to becoming a superstar as soon as your demo completes, wowing everyone in and near proximity to the room. You have remote viewers watching as well over a conference call to Los Angeles via WebEx. You launch your app in the Simulator and for no reason what so ever the room is silent! The updated sound track that was supposed to accompany your splash screen is not playing! Even worse, the title screen explosion sound is completely absent. Double check your audio cable, your volume controls, the system preferences. Everything is set to full blast. Playing a test clip in iTunes confirms. You get audio out of every orifice except when the simulator runs! What gives? Hi I’m Cliff. I’m going to explain why you have egg on your face.

Fold your Macbook Pro up and call the demo. You can explain later why everyone in the room wasted their lunch hour to watch you fumble nervously with network cords and make awkward hand gestures in an attempt to draw lines in the air tracing the sound that wasn’t there. Back at your desk yet? Don’t waste time linking different audio frameworks for your sim build. Don’t waste time debating AVAudio vs. Audio Queues. Instead, pay attention to the color of your shirt and the amount of creamer you add to your cup of joe. Your hair should be brushed from back to front and not to the side or you won’t pull this off at all. Also, any notes or paperwork should be stacked to the right side of your laptop when you launch the simulator. What I’m getting at is the impact of your environment on the iPhone simulator. There may be nothing wrong in your code or your make file. The problem exists with you’re environment.

Twice it has happened to me where I thought I had accidentally allowed a bug to slip through causing audio glitches. In both occasions I found a different external factor causing my iPhone simulator audio to fail. The first time I had been using a Bluetooth headset paired to my Mac to watch Ali on DVD. That caused Simulator audio to not play at all. Un-pairing the device remedied the situation. Now, just recently, I learned that leaving the iShowU screen recorder idle in the background can cause an echo effect on the simulator’s audio. Bottom line, if you have iPhone simulator audio issues that just weren’t there yesterday… double check the movie you rented from Blockbuster the night before because it could be the culprit.

The Groovy Maven Blackberry thing (written for Solaris SPARC from an Android touch screen)

I really want to follow up on my Groovy Maven Blackberry work and so far this is all I can do. Yesterday I managed to actually run it for the first time in over a year or two since I wrote it. My earlier blog post was completely inaccurate, indicating that all you needed is the plugin source. It has a HEAVY dependency on RAPC, and I am not authorized to distribute RAPC. (I am also not authorized to distribute breakfast cereal to to my children because I’m not as calorie conscious and portion aware as I should be… says the wife.) In order to actually use my plugin you have to create one of various “rapc-compile-tools” bundles and list it as a dependency of the plugin. It’s very important the you be version aware when building and listing the “rapc-compile-tools”. Let me elaborate.

My plugin looks in its CLASSPATH under a folder “/Blackberry-utils/” for the following files:
“rapc.jar”, “net_rim_api.jar”, “SignatureTool.jar”, “sigtool.csk”, “sigtool.db”, “sigtool.set”
In order for the magic to work you must create a Maven jar artifact which includes a “/Blackberry-utils/” folder holding these files. The plugin expands the files from the dependency into the system’s temp folder and then uses all of these files to actually perform the compile to cod format. It does a bunch of other (probably unnecessary) hickery-doodle to create a jar identical to what will be in the final cod.

What you need to do is download a version of the JDE. Then create a “Blackberry-utils” folder somewhere on your hard drive. Copy each of the above listed files into this folder then jar the folder. You can find most of them in your JDE download which can be expanded by running the installer. (See my earlier post about running the Simulator on Mac for details on running Windows installers on Mac.) The sigtool files are created after you build and receive a RIM certificate. (If you don’t have a RIM certificate you can fake these files by renaming empty text files but they must be present for the plugin to work.) Finally deploy the jar to your Artifactory (or other) Maven repository. If you don’t use a local hosted Maven repository then you can manuallly create a pom file place a copy in the jar (I forget exactly where it goes but I think it belongs under /META-INF) and place both the pom file and the jar in a Maven conventionally formed path under “$HOME/.m2/repo”. The final path will probably look like “$HOME/.m2/repo/your/group/artifactid/version”. It’s to your benefit to install Artifactory or something equivalent to simplify both this deployment and future license restricted dependencies like javax.mail and commercial APIs.

Its a rather involved process to create the rapc-compile-tools and I hope to simplify in the future. Also be version aware and you may want to create multiple versions of the rapc-compile-tools to support various Blackberry devices and OS versions. For instance, you may want to build version 4.3.0 for older Blackberry curve devices and 4.5.0 and 4.7 for the newer Storm, Bold, and Tour devices. What you DO NOT want to do is compile against 4.7 and deploy to a Storm running an older 4.5 OS. remember your target audience on blackberry is far less likely to update their firmware than an iPhone user. You’re also likely to run into users sporting the 4.2.1 and older OSes so use the lowest possible version of the RIM apis possible to build your application.

You might be a moron if…

…if you can’t set the clock to 6:15. I set the clock to 6:15! Finally, after many months of not understanding this step on the Moron Test. I love Moron Test! It was the 1st and probably the only app I’ve purchased for the iPhone. On the first update of the app, when they added the second section there was a step that had me stuck for… well, for months! I couldn’t figure out how to set the clock to 6:15. I just figured it out. Wow, this game is really clever! They should charge more for it. I’ve always had a thing for brain teasers. There’s another similar app I just downloaded for free which is comparable to Moron Test. It’s called Imbecile Test. It has the same look and feel, just different steps and different music. That one had me stumped on a step too. Now that I figured out the clock I was finally able to get passed that wierd step in Imbecile Test. I’m not going to give away the answers like I did last time. I’m sure you can Google for the answers but I’m not going to cheat. Check ’em both out if you haven’t already.

JNI, C++, Idea, and Netbeans looks good

I’ve been trying to get comfortable with C++. I’m finding quite a few native libraries that I need to talk to… programmatically. So I tried GEdit. Then I moved on to Windows and Eclipse. Everytime I want to install an Eclipse plugin I somehow find it easier to just grab an Eclipse bundle. (Plugin conflicts can burn so much clock.) Grabbing the Eclipse CDT, I found myself accidentally expanding and overwriting my Blackberry Eclipse install. (I always expand to C:\eclipse, it’s just a habit.) Frustrated, I decided to boot back into Linux and try Idea. I tried out the C++ plugin under Idea and had some minor trouble because there’s no documentation on it. I then tried KDevelop. Then something came over me. I decided to try out Netbeans. Netbeans…

Once upon a time there was an IDE I kinda liked. It was Forte (based on Netbeans). That was my first Netbeansy experience. Back then I was satisfied but then I found Eclipse and later got hooked on Idea. Netbeans was something I always toyed with here and there. I liked it but it lacked the refactoring support in Idea. Still it was kinda cool.

Fast forward a couple of years and now I’m all about Eclipse and Idea. I use Eclipse only because others force it on me. RIM tools are built for it, most people in my company swear by it. Every time I need to do something slightly different there seems to be an Eclipse bundle for that. It’s pretty full featured only falling behind Idea in a couple of spots. It’s just a pain to configure/setup. Idea has always been my tool of choice. If I could write ObjC in Idea I’d pitch XCode in a minute.

Today I tried Netbeans for the first time since it turned 5. I almost fell out my chair when I instinctively hit Alt+Enter to fix a syntax error. It worked! Just like Idea! Then I started looking at the right click and refactoring menus. I got really happy! Netbeans is now starting to feel like Idea felt back in the day. To be honest, Idea has been giving me lots of trouble these days with plugin “Blame this plugin” error pop-ups and the AWT_TOOLKIT thing that causes the text area to become uneditable. Overall Netbeans is looking much improved! I am totally impressed… I want to write more about both, my experience with Netbeans and my use of the C++ plugin under Idea.