tel: URI scheme

As a mobile web user, when I find a phone number on a web site, I want to dial the number simply by tapping it. To embed a tappable (or clickable) phone number on a web page, use the tel URI scheme. Here's an example:
Richard's House of Pizza <a href="tel:555-555-5555">555-555-5555</a>
Your web browser renders it like this:
Richard's House of Pizza 555-555-5555


iPhone Dvorak keyboard

Update: See Read More on Dvorak for iPhone for more!

Update 2009-03-02: See iPhone Dvorak for real for notes on a true Dvorak keyboard for iPhone.

I touch-type Dvorak, and it hurts my brain when I have to hunt-and-peck QWERTY. To install a Dvorak keyboard on my iPhone, I started with Brendon Walsh's instructions. Brendon modified Slava Karpenko’s Russian keyboard package, changing the key layout from Russian to Dvorak. iTapTap's instructional video helped, but the sum of these three sets of instructions wasn't trivial to follow. Here's how I installed the Dvorak keyboard layout on my iPhone.

First, tap Settings / General / Keyboard / International Keyboards. Notice that it lists five keyboard choices, none of which are Dvorak.

Next, add Slavo's Russian iPhone source, also known as RiP Dev, to Installer. Press the button to view the home screen. Tap Installer / Sources / Edit / Add, and type the URL of the RiP Dev source: http://www.russianiphone.ru/beta/en .

Tap OK, and Installer adds the source and refreshes the packages list.

Tap Done, Install, RiP Dev, and install Mobile Enhancer.

The Mobile Enhancer installer warns you that you must reboot your iPhone. To reboot, press and hold the iPhone's top button, then slide to reboot.

Run Installer again, tap RiP Dev, and select the Russian Keyboard package. This one is written in Cyrillic; I took a guess and got lucky.

Press the button to return to the home screen. Tap Options / General / Keyboard, and notice that there are some Russian settings. This is a good sign: something Russian got installed in the Keyboard area.

Tap International Keyboards, and a sixth keyboard appears on the list: Russian.

Now copy Brendon's Dvorak keyboard files onto the iPhone:
kasper@fred /cygdrive/c/Documents and Settings/kasper/Desktop/dvorak_iphone
$ scp -r cyrillic-keyboard.men/ root@
root@'s password:
.DS_Store 100% 6148 6.0KB/s 00:00
Info.plist 100% 679 0.7KB/s 00:00
KeyboardDefinition.plist 100% 45KB 45.2KB/s 00:00
KeyboardDefinitionAlt.plist 100% 8064 7.9KB/s 00:00
sk-cyrillic-keyboard-alt-shift.png 100% 58KB 57.6KB/s 00:00
sk-cyrillic-keyboard-alt.png 100% 57KB 56.9KB/s 00:00
sk-cyrillic-keyboard-landscape-alt-shift.png 100% 36KB 35.8KB/s 00:00
sk-cyrillic-keyboard-landscape-alt.png 100% 41KB 41.2KB/s 00:00
sk-cyrillic-keyboard-landscape-shift.png 100% 45KB 44.8KB/s 00:00
sk-cyrillic-keyboard-landscape.png 100% 43KB 43.2KB/s 00:00
sk-cyrillic-keyboard-letters-shift.png 100% 12KB 11.9KB/s 00:00
sk-cyrillic-keyboard-letters.png 100% 12KB 11.9KB/s 00:00
sk-cyrillic-keyboard-popup-center.png 100% 12KB 11.9KB/s 00:00
sk-cyrillic-keyboard-popup-landscape-center.p 100% 12KB 12.1KB/s 00:00
sk-cyrillic-keyboard-popup-landscape-left.png 100% 10KB 10.0KB/s 00:00
sk-cyrillic-keyboard-popup-landscape-right.pn 100% 10KB 10.2KB/s 00:00
sk-cyrillic-keyboard-popup-left.png 100% 10KB 9.8KB/s 00:00
sk-cyrillic-keyboard-popup-right.png 100% 10KB 9.9KB/s 00:00
sk-cyrillic-keyboard-shift.png 100% 58KB 57.6KB/s 00:00
sk-cyrillic-keyboard.png 100% 57KB 56.9KB/s 00:00
SKCyrillicKeyboard 100% 87KB 86.6KB/s 00:00

kasper@fred /cygdrive/c/Documents and Settings/kasper/Desktop/dvorak_iphone
In International Keyboards, turn on the Russian keyboard. Press the button, tap Notes, tap the globe on the left of the space bar, and the Dvorak keyboard appears.

Thank you, Brendon, Slava, and iTapTap.

Here are some screen shots to guide you through the instructions.


iPhone contacts sync with Funambol

Yesterday, I synchronized my contacts list from GooSync to my iPhone using Funambol. Here's how I did it.

First, I ran Installer. Inside Installer, I found and installed Funambol. On the iPhone home screen, I tapped Funambol to run it, and then I tapped Settings. The Settings screen appeared, displaying the defaults:
Server http://my.funambol.com/sync
Username guest
Password *****
Following this helpful tip, I changed the settings to
Server http://sync.goosync.com/
Username my-goosync-username
Password my-goosync-password
and tapped Save.

Unfortunately, my settings didn't get saved. A few other people have had this problem, and Emanuel Preda had the best clues for changing the settings.

His instructions involved editing files, so I installed Vi IMproved (vim) through Cydia. Then, to make sure the iPhone wouldn't go to sleep while I was logged in, I tapped Settings / General and set Auto-Lock to Never.

Emanuel's instructions told me to edit the .sync4j file, so my next step was to find it:
# find / -name .sync4j
I edited .sync4j following his instructions:
# cd /private/var/mobile/.sync4j
# vim .sync4j/evolution/funambol/spds/syncml/config.txt
After making the changes, I saved the file and exited vim by typing ZZ.

Next, I had to find the addressbook configuration file:
# find / -name addressbook
I edited that file, again following Emanuel's instructions:
# vim .sync4j/evolution/funambol/spds/sources/addressbook/config.txt
I saved the file and exited vim.

Back on the iPhone home screen, I tapped Funambol to run it again. This time, the settings looked correct. I tapped Contacts to synchronize my contacts, and the result was:
Synchronization failed
I tapped View Log to check for clues. The log display was like this, reporting exactly the same problem that SoftIce encountered:
21:11:05 GMT +0100 [INFO] - Synchronization URL: http://sync.goosync.com
21:11:05 GMT +0100 [INFO] - Preparing synchronization of addressbook…
21:11:06 GMT +0100 [ERROR] - Alert Status from server = 404
21:11:06 GMT +0100 [ERROR] - Error in preparing sync:
21:11:06 GMT +0100 [ERROR] - sync failed without an error description, check log
My past experience with GooSync trained me that whenever there was a synchronization error, I should view the log on my GooSync account. I logged in to the GooSync web site and viewed my Device page. The GooSync log read:
2008-05-22 16:28:33 Syncing Error 404: Device "sc-iphone" is not associated with this account
That was the clue I needed--I previously had been syncing with my Pocket PC. I clicked Change Device, selected Apple iPhone, and clicked Save Device.

Back in Funmabol, I tapped Contacts, and the display read:
Synchronizing Contacts...
After two or three minutes, the display changed to:
Synchronization successful
I tapped to the iPhone contacts list, and there they were: all 235 of my contacts from GooSync.

Now there are only a few more things left to do to complete my initial iPhone configuration:
  • Install a Dvorak keyboard
  • OTA sync the iPhone calendar with Google Calendar
  • Create and install a Bang Camaro ringtone

iPhone MMS on T-Mobile

I ran Cydia and installed Installer earlier today. The default Installer sources list a gazillion cool applications, including a few that I couldn't live without: Guitar Tuner and iPhone Video Recorder. I'll also install Funambol and see if I can sync my contacts list between GooSync and iPhone.

Another important application is SwirlyMMS, an MMS client. (Why doesn't iPhone include a native MMS client? The lack of a video recorder and an MMS client almost stopped me from buying the iPhone). To configure SwirlyMMS, I used these settings:

MMSC and Proxy Server Settings

MMS-specific APN Settings
MMS-APN: wap.voicestream.com
User: empty
Pass: empty

I successfully sent an image from the iPhone to my email address, so I think it works.

I replied, sending email from my PC to my phone number and attaching a different image file. The iPhone received it as an MMS. To view the MMS, I installed MobileFinder and MobilePreview.

It's a little crufty, but it works.


Practice plan #9 (passing and shooting)

Themes: Passing, shooting

We have a match on Wednesday night and a weekend tournament. There is a good chance we will skip Thursday night training, so tonight's session combines passing and shooting instead of focusing on one or the other.


  1. Warm up & stretch
  2. 6-squares passing game
  3. Shooting drills: Players stay warm in a box above the area, either dribbling individually or passing with a partner. A goalkeeper defends the goal. Call a player's name, and he shoot on goal. Variations: player gets 1 touch and shoots; player shoots first touch; player passes to keeper, who pass to him on the side, and player shoots; two players attack together, one touch each; add a defender. Tip: shoot quickly, don't take an extra step.
  4. 8v8


Getting started with iPhone on T-Mobile

My iPhone arrived on Monday. The Pocket PC was almost four years old, and Opera Mobile stopped working, so I rationalized the iPhone as a good replacement.

The first thing to do was to get it working with my T-Mobile SIM. I connected the iPhone to my office PC and let Windows XP semi-automatically update the iPhone driver. To pair the iPhone with iTunes, I simply ran iTunes, and the device showed up in the iTunes device list.

I downloaded and installed iLiberty+ for Windows and ran it with these options turned on:
  • Jailbreak
  • Activate
  • Unlock
The iPhone dowloaded the boot code, but didn't reboot itself. I was afraid I had bricked my iPhone in less than five minutes.

I disconnected the iPhone, restarted iTunes, and reconnected the iPhone. iTunes noticed that the iPhone was stuck booting and offered to restore the iPhone to factory settings. I took it up on the offer, and a few minutes later, the iPhone was good as new.

I ran iLiberty+ again, this time throwing all caution to the wind and turning all options on:
  • Jailbreak
  • Activate
  • YouTube fix
  • Unlock
  • Downgrade bootloader from 4.6 to 3.9FakeBlank
  • Cydia
This time, everything worked flawlessly. I switched SIMs, and T-Mobile worked fine.

To get the EDGE connection working, first I turned off Wi-Fi so I could test the the EDGE-only network connection. To turn off Wi-Fi, I selected Settings/General/Network/Wi-Fi and Wi-Fi OFF. Back up at the Network menu, I selected EDGE, and typed wap.voicestream.com into the APN box, leaving Username and Password empty. I tested the connection in Safari and Google Maps, and everything worked perfectly.

As a geek bonus, I turned Wi-Fi back on used Cydia to install OpenSSH, and roughly followed Do It Scared!'s instructions to log in and have a look at the file system. Pretty cool! Naturally, I used Cygwin's ssh client instead of Putty.

There is no native tasks application on iPhone, so I moved my to do list to Todoist. I added a Todoist shortcut to the Home screen, and it's almost as good as a native tasks app.

To access my notes and spreadsheets, I used ActiveSync to copy them from old Pocket PC to my PC, and then I uploaded them to Google Docs.

Despite the cruftiness of the Pocket PC, there are at least two things I miss:
  • Google Calender integration: Google Calendar is great, but the mobile view doesn't give you full control--you can't edit and delete events, and adding new events is a pain. I want something like GooSync on iPhone for two way OTA sync between the native calendar and Google.
  • Pocket Excel: The iPhone Notes app is good enough for text editing, but there is no replacement for Pocket Excel. For now, I use Google Docs to view spreadsheets in Safari, and edit them at home or at the office.
Here are my next steps:
  • Contacts: I need to copy my contacts database from the Pocket PC to the iPhone. My Pocket PC won't let me copy the contacts database to the SIM, and I'm not sure whether iPhone can read the SIM's contacts database anyway. For now, I use the GooSync contacts page from the last time it synced with the Pocket PC. I might use ActiveSync and iTunes, or I might try SyncJE or Funambol/SyncEvolution.
  • Dvorak keyboard: I use the Dvorak layout on my PC. It would be nice to use the same keyboard layout on the iPhone soft-keyboard.
  • Google Calendar OTA sync: I might be able to use SyncJE for this, too.
  • Custom ring tones: What good is a ringer if it doesn't sound like Bang Camaro?


Practice plan #8 (shooting)

Theme: Shooting


  1. Warm up & stretch
  2. Shooting drills: Players stay warm in a box above the area, either dribbling individually or passing with a partner. A goalkeeper defends the goal. Call a player's name, and he shoot on goal. Variations: player gets 1 touch and shoots; player shoots first touch; player passes to keeper, who pass to him on the side, and player shoots; two players attack together, one touch each; add a defender. Tip: shoot quickly, don't take an extra step.
  3. 6 goal width and depth game: With cones, make 6 goals on the field. Two at the sidelines, and one in each corner. Divide into two teams. Teams get 1 point for every time they pass the ball through a set of cones (twice in a row doesn't count), and 3 points for scoring on the real goals.
  4. 8v8


Fulham FC: America's team

The Gaffer at EPL Talk has it right: Fulham is our team. Jake and I started paying attention after Clint Dempsey tranferred to Fulham from the Rev's. We enjoyed watching this season of EPL, and we're glad they'll be back next year.


Practice plan #7 (passing)

This is the same as Practice plan #5 (passing), but with different variations and tips for the 8v8 activity.

Theme: Passing

  1. Warm up & stretch
  2. 1v1+1, 2v2+2
  3. 5 goal game: 4v4+2; or N+1 goal game, with NvN+N/2, where N is the number of players per side
  4. 4-corners passing game
  5. 6-squares passing game: Like the 4-corners passing game, but with 6 squares instead of four. Place the 4 corner squares at the corners of the field, and add 2 squares at midfield. The idea is to simulate moving the ball from the back third to midfield to the attacking third.
  6. 8v8: Variations: Must pass to all players before shooting; bonus points for back-pass; bonus points for pass back to GK. Tip: GK, take your time, wait for your players to set up, pass to weak side.


ThinkPad T43 error 2010

When I boot one of the ThinkPad T43s at the office, this text appears on the screen:


2010: Warning: Your internal hard disk drive (HDD) may not function correctly on this system. Ensure that your HDD is supported on this system and that the latest HDD firmware is installed. Press to continue

Press to Setup

I press F1, Windows XP boots, and everything seems OK, but I worry about it nonetheless.

According to Lenovo support, this is a known issue, and it's not a big deal--they just want you to know that some utilities might not work with your hard drive. Other people report frustration with the error message and wish Lenovo would offer complete support for all hard drives.

Lenovo offers a hard drive firmware update, which purports to fix the problem on a particular set of hard drives. I burned a CD of the ISO and gave it a try, but my hard drives are not supported.

I'm going to ignore the problem for now and hope for the best.


Practice plan #6 (shooting)

Theme: Shooting


  1. Warm up & stretch
  2. Triangle goal game: 2 goalkeepers
  3. Volley & shoot: Attackers vs. defenders, with more attackers. One attacker plays the ball through to two more attackers in the area. A group of defenders try to break up the attack. The attackers in the area shoot on net.
  4. 8v8 offense vs. defense: Offense attacks the real goal, defense tries to play the ball through two small goals at the edges of the midfield. More attackers than defenders.
  5. 8v8


Mobile advertising for developers


I gave a talk on mobile advertising from the application developer's perspective at Mobile Camp Boston in March. These are my rough notes.

Why I care
  • The applications that we build at Nellymoser depend on recurring revenue as part of their biz model--we have skin in the game.
  • Monthly recurring charges (MRC) don't work well enough, a la carte purchasing isn't good enough--MRC is a barrier to user.
  • We need better revenue source, and in-app ads provide an interesting alternative.
  • Richard Kasperowski
    • Nellymoser Engineering Manager
    • Mobile since 2003
    • Founder of Boston Mobile, etc.
  • Nellymoser
    • Mobile 2.0
    • Rich mobile app's
    • Audio & video on demand
    • Social networking
    • Personalization
Want to share my experiece with mobile advertising, including the challenges, and hear how you do it.
Compare mobile app's to the ISP I use at home. I pay for a data connection--I don't have to pay by the month for every web site or app I use.

  • Let's be honest: the mobile app is itself an ad, reinforcing someone's brand. For example, the CBS Sports Mobile app is branded to distinguish it from ESPN; the Virgin Mobile Headliner music app is branded to distinguish Virgin Mobile from other carriers.
In-app through an ad supplier/ad agency
  • Immature: unreliable, not documented well, etc.
  • Ad supplier offers library that you include in your app
    • Benefits
      • guaranteed to work?
      • Rich media ads
    • Challenges
      • Too large--your app won't fit on target handsets when combined with the ad library
      • Rich media ad inventory not available
  • Ad supplier offers simple RESTful web service
    • Inputs: app ID, handset user agent, end user ID
    • Outputs: sized banner ad, sized full screen ad, URL for click-through to related WAP site
    • Challenges
      • Custom
      • Scant documentation
      • Reliability of ad service: hard to cope with reliability issues, given handset constraints
        • e.g. if ad server is down, can't necessarily timeout gracefully on mobile handset
    • also report impressions via RESTful interface
  • Players: Third Screen, MillennialMedia
  • Paid for impression of banner ad, paid more for impression of full screen ad, paid more for click-through to related WAP site
In-app, app-specific
  • E.g., featured artists UI element at top of screen in a music app
  • E.g., featured artist start page widget in a music app
  • Ad suppliers: how can we integrate better?
  • Developers: what coping strategies do you use?
Actual user demographics difficult to know
  • Carriers guard this information.
  • Difficult to obtain end user phone number


Related Posts with Thumbnails