Phonegap Twilio Uncategorized

Twilio Client PhoneGap plugin updated to support Twilio Client SDK 1.2 for Android and iOS

I just updated the Twilio Client for PhoneGap plugin: to support the latest version of Twilio’s client SDKs for both iOS and Android.

For those of you who wonder why you might need these, the native browsers for iOS and Android don’t support the technology used in the Twilio Client SDK for JavaScript, so if you want to build voice-enabled mobile applications, you will need to create native applications. You could develop these in Objective-C or Swift for iOS, or in Java for Android, or go with a cross-platform solution like Xamarin or Cordova/PhoneGap.

Cordova/PhoneGap lets you use HTML5/CSS/Javascript to build your mobile applications, and while it’s not the right choice for every application, it’s certainly one solution. The Twilio Plugin for PhoneGap lets you use the native Twilio Client SDK’s from JavaScript, with a syntax that is very close to the Twilio Client for JavaScript syntax.

Hackathon Uncategorized Wearables

Samsung Gear Smartwatch App: Knitting Puppy Row Counter

Knitting Puppy Gear App

I recently got a Samsung Gear 2 Neo smart watch – it pairs with recent, powerful Samsung phones and tablets, but without them, it’s basically a pedometer. So I’d definitely only recommend it if you already have one of their recent devices (like the Samsung Galaxy S5 or Note 3 phones), and not if you use an iPhone or a non-Samsung Android phone.

I got mine to see how the form factor could work (now that Android Wear is out, and it’s likely that Apple will release some sort of wearable device in the fall), and to try writing a few apps for it. The Gear watches run Tizen, which is an HTML5/Linux-based environment, so if you are comfortable with HTML, Javascript, and CSS, it’s pretty easy to get an app going. The biggest problem is the screen – it’s about 1.7 inches on each side, and 320 pixels on each side. So you have a limited amount of screen real estate for user interface elements.

I designed a knitting counter for my wife – there are a lot of simple plastic devices (such as this one) that do the same thing. Basically, you can keep track of how many rows you’ve knitted for a project, and then swipe across the number to reset it.

The Gear watch supports HTML Touch Events, so I was able to hook into a swipe event to do the reset. I used a swipe gesture because the screen is so small, it’s quite easy to hit the wrong button if you have two on the screen next to each other. My original design had a reset button underneath the “Rows Finished” button, and I ended up hitting the wrong button a lot. With the gesture, it’s a lot harder to make that mistake.

If you have a Gear watch, the app should be approved by Samsung soon! I entered it in the Samsung Gear App Challenge, so I’ll be curious to find out how it does in the challenge. Here’s the video submission I made for the app if you want to see it in action:


Training Uncategorized

Learn how to build an iPhone app for Drupal at SandCamp 2014!

Come to sunny San Diego for the DrupalCamp by the beach – SandCamp – January 23-25, 2014.

I’ll be teaching a training class for Drupal developers to learn how to build iOS apps (using Objective-C) that talk to Drupal. This is a class for web developers who don’t necessarily know anything about Objective-C, XCode, or mobile app development – I’ll be talking about all of these, along with the Drupal Services module.

The training class is on Thursday, before the camp starts, so show up for the training, and then spend the next two days at the camp, and then maybe spend that Sunday exploring San Diego!


Redesigned Biscotti Labs Web Site

I wanted to redo the web site for my mobile app development company, Biscotti Labs, because it had some stale design and content. DrupalCon 2013 is coming up fast, and I’d rather update the site before rather than after. Also, I wanted to make the site responsive for smartphones and tablets.

I’ve been a little bit frustrated with ThemeForest templates – they’re usually far too complex, present way too much information, and turn out to not be built on top of any kind of reusable framework. Additionally, I decided not to run the site on a CMS, but instead just make it a single page site with a static HTML file.

There are several front end development frameworks to make the job a little easier, but the one I’m most familiar with is Twitter Bootstrap. You can buy a pre-built theme for Bootstrap from several marketplaces, but I decided to give the WYSIWYG Twitter Bootstrap editor JetStrap a shot – it’s from the same great team that built Codiqa, the visual design and prototyping tool for jQuery Mobile.

JetStrap makes pretty clean HTML and CSS, and I took what they had, edited in their interface, and then downloaded the HTML and assets locally. My next step was to use some resources from my favorite design marketplace, MediaLoot. I went with a set of flat Photoshop vector icons, scaled them up to 512×512, and then used those to provide some visual context for the various solutions and services. JetStrap included some hot-linked blurred background images in the HTML, so I replaced those with blurred background images from another MediaLoot image set.

Overall, I’m pretty happy with the design of the site, though I certainly need to tweak it, and test it on a few mobile devices.

iPhone Development Uncategorized

Find Me Hotel Deals 1.0.3 available on the App Store!

The major feature in the 1.0.3 release is support for the iPhone 5 screen – it’s longer than the iPhone 4 screen, so I had to add a few autoresizing masks to get the content to flow properly.

The iPad version remains the same, and it will also work the same on any iPhone 3GS, 4, or 4S.

jQuery Mobile Phonegap Uncategorized

First chapter of the PhoneGap, Drupal, jQuery Mobile e-book is up!

I’m excited to announce progress on my new e-book on PhoneGap, Drupal, and jQuery Mobile! I gave an interview on using Drupal with PhoneGap to Brian Lewis at Modules Unraveled last month. In addition to the podcast, which I really enjoyed making, I recorded a screencast on setting up PhoneGap, which I hope you enjoy.

The first chapter of my e-book covers the same ground, so I decided to release it as a free PDF, which you can download and enjoy. I’m happy to hear any feedback you have! I also wanted to let people read the first chapter for free, because you need to have a Mac with XCode 4 to follow along with the book, and I don’t want anyone to buy the book if they can’t use it.

Download Chapter 1 (1.1 Megs)

Talks Uncategorized

Building Mobile Applications with Drupal – Dallas Drupal Camp

Slides from my presentation at Dallas Drupal Camp 2011


Every Marathon Marathon Calendar iPhone App on App Store


My new app, the Every Marathon Marathon Calendar, just got approved by Apple, and is available on the App Store!

This app came about because I’ve been planning my travel around running marathons on road and trail in all fifty states, and I’ve gotten obsessive about finding all of the most obscure marathons in the US. I kept on going to several different sites from my iPhone, and getting frustrated by the user interface. I’ve been working on my active city guide web site in Drupal, and I’d added about a hundred marathons there already….one thing led to another and I had over 400 marathons!

I certainly haven’t run every marathon in the country, but I’ve finished fifty-one marathons or ultramarathons, including the Race to the Altar Trail Marathon, which I co-race directed! A long way from when I couldn’t even run around the block in 2005!

Talks Uncategorized

Using Prezi to give a tech talk

On Thursday, I gave my first talk about Drupal! Fito Kahn organizes the Austin Drupal Newbies Meetup, and we had lunch with him at the Southwest Drupal Summit in Houston last month. I was feeling pretty inspired from watching the speakers at the Summit, so I thought I might try to give a talk myself on Displaying Recent Tweets with Drupal using the twitter_pull module.

I didn’t want to have a set of boring slides with bullet points out of PowerPoint, so I thought I’d look at a few other options – most of the speakers at the Drupal Summit had great presentations and were well prepared! Browsing through the top presentations at SlideShare is a great way to see what’s effective without having to give up your Saturday to a conference.

I was pretty excited about 280 Slides, from what I read online. Unfortunately, when I loaded it, it looked exactly like PowerPoint! Scratch that. My next thought was to use Apple’s Keynote, but then after some searching on Hacker News, I saw a few references to Prezi.

Prezi is a completely different type of tool – not slide based, instead it relies on spatial organization and relative size for your presentation. This makes organizing your presentation much easier than trying to lay it out on slides. I’m always interested in information design, and Prezi totally changes the way your presentation is organized. You can drill down into different segments of your presentation and then pop back up – everything is in context.

It’s kind of hard to explain why Prezi is so great – I made my tech talk “I’ve got Twitter in my Drupal” presentation in Prezi. I certainly don’t have everything down with Prezi just yet – there’s a lot of tweaking you can do to make your presentations pop, but I’m very satisfied with what I could accomplish in a few hours.

iPhone Development Uncategorized

Quick Tip: Adding icons to Three20 Tab Bar

I’m using the Three20 Additions to UITabBarController for the Green Ninja Active City Guide iPhone app (based on TTNavigatorDemo). This is great, except all the examples I found for tab bar images use the controller to set the tab bar item. With Three20, that didn’t work, so I had to add some code to my TabBarController to get icons.

In the code below, the first part of the method sets up the tab bar for three URLs/controllers, and the second part of the method adds the images.

Has anyone else used a different approach to get icons on a Three20 application tab bar?

- (void)viewDidLoad {

[super viewDidLoad];

[self setTabURLs:[NSArray arrayWithObjects:





NSArray *tabs =  [self viewControllers];

UIViewController *home = [tabs objectAtIndex:0];

home.tabBarItem.image = [UIImage imageNamed:@"house.png"];

UIViewController *activities = [tabs objectAtIndex:1];

activities.tabBarItem.image = [UIImage imageNamed:@"star.png"];

UIViewController *map = [tabs objectAtIndex:2];

map.tabBarItem.image = [UIImage imageNamed:@"world.png"];