Meme App Screenshot

Meme App for Learn It Meetup

I’m teaching a class on how to make an iPhone app with the Learn It Meetup – as part of the class, we are going to build a Meme app for iOS 7 using Storyboard and Objective-C.

I’m publishing the app on GitHub – – the v1.0 tag is the completed version for the meet up.

Some of the concepts in the app are:

  • View Controllers
  • Navigation Controllers
  • Tab Bar Controller
  • UILabel
  • Creating a View Controller class
  • Using the XCode Assistant
  • Outlets and Actions
  • UIImage and UIImageView
  • Creating a UIImage from a UIView
  • Subviews
  • UITextView
  • Sharing on Facebook
  • Sharing on Twitter
  • Working with the Keyboard
  • Using the Camera

Slash Hackathon for SXSW

On Wednesday, I got a chance to pitch my six-hour hackathon project to Slash (lead guitarist for Guns and Roses and Velvet Revolver), tech blogger (and Startup Liason Officer for RackSpace) Robert Scoble, and the inventor of BitTorrent, Bram Cohen. The idea behind the hackathon was to create an app or web site for artists to connect with their fans, and if Slash thought your idea was the winning one, he’d use it for his upcoming album in 2014.


I came down to the Slashathon with an idea all thought out and ready to go, basically an app for users to try upcoming music from albums and rate it as hot-or-not. Nothing too crazy, but I don’t particularly know what a band would want to use to engage their fans, so I wasn’t particularly tied to the idea.

This hackathon had more sponsors and API partners than I had ever seen at one event – some of them had just created API’s for this event and released them to the public. Muzik Headphones came with their developer-friendly wireless headphones, which I didn’t get a chance to include in my hack, but would like to put into a different project soon. Geeklist organized the event with The Collective, and it was held at the Capital Factory in downtown Austin.

After watching Qualcomm’s team show off their Gimbal beacons, I decided I wanted to use them for my project instead of my original idea. I’ve been involved in a few projects around location awareness and context, but haven’t had a real chance to sit down and program with any of the beacons yet. A hackathon is perfect for this sort of thing, because if I needed help, Qualcomm had a developer right there to point me in the right direction.

My first idea was to create a whole-house audio system that just used your phone, the Gimbal beacons, and the Muzik headphones with Spotify playlists. Instead of putting in an expensive whole-house custom audio installation, just put a few inexpensive beacons in the different rooms of your house, and have an app that changes up the playlist for you. Ideally, you’d smoothly transition in and out from the playlists, but in a six-hour hackathon, that’s the sort of detail that can get left for the future.

This idea worked pretty well – I had some problems with the Spotify iOS SDK, because I had a Spotify free account (a no-go for streaming, you need Premium), but once I got past all of that, I brought in the Gimbal SDK, and quickly had an app that could detect the different beacons. It was a quick jump from just printing out “New beacon detected” to switching the Spotify stream, so then I went ahead and made the app’s background switch to different iOS 7-style backgrounds, based on your location. This is a nice effect, but I don’t think anyone noticed during my demo.

After talking my idea with the Qualcomm Gimbal team, they asked how it would help artists, and then they suggested the idea of letting the musicians set up custom playlists tied to these beacons – I called them “Proximity Picks”, because they look kind of like Guitar Picks. Artists could include one with their box sets, CDs, or other physical sales, and anyone with my app could listen to the playlist, for instance if you brought the pick to the office.

My App

This was a lot better idea than just the whole-house audio, though you could certainly do that as well with this technology. Because artists could now sell these picks, I added PayPal integration to the app, and basically called it done. We only had from 12pm-7pm to work on the project, so it was a short hackathon.

Jeff Pitching

It was a little bit nerve-wracking to pitch to the hackathon judges, but I felt like I had a decent story behind the project, and Robert Scoble seemed to really like the idea behind a context-aware music mobile app. I ended up winning third place overall behind SlashTV and Retune, and then first place for the Gimbal and PayPal integrations. I also used Spotify as the music provider for the app.

Overall, I liked this hackathon – it had a lot of different API sponsors, which is great, and it’s in an area – music – where I’ve never done a project before. Now that I’ve used the Gimbal beacons, I can recommend using them for location awareness on other projects, which is always nice.

[Thanks to my wife, Cheri for the photography!]

iOS: UITableView not allowing you to reorder items?

I just ran into an interesting problem with UITableView, editing mode, and ECSlidingViewController.

I had an extremely basic UITableView that let the user reorder or delete rows. Everything seemed to be set up fine with the UITableViewDelegate and UITableViewDataSource, but the rows wouldn’t drag!

Turns out that because I was using ECSlidingViewController to create a sliding menu in my app (as is all the rage in 2013/2014), there was a pan gesture recognizer on my view controller that held the table. That pan gesture recognizer normally lets you slide the menu in from the right, but apparently, the UITableView also uses a similar gesture for reordering. The ECSlidingViewController was canceling the touches before the UITableView could get them, so all I had to do to fix the problem was to add one line of code in my view controller’s viewDidLoad: method:

    self.slidingViewController.panGesture.cancelsTouchesInView = NO;

This fixed the issue, and the sliding menu still works on the view controller.

This Stack Overflow page ( was the most useful to figure out what was happening with my app.

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!

Creating PDFs easily with RobotBridge

On several projects, I’ve run into problems creating PDF files – it’s never quite as easy as it could be. I’ve worked with PDF generation since Apache FOP and XSL-FO were the state of the art, and moved on since to wkhtmltopdf and PhantomJS. Deploying those binaries in a cloud situation can be tricky, and from a mobile app, impossible.

I’ve created my first API, RobotBridge PDF Conversion, to simplify the process of PDF creation. There are several other APIs and web services that create PDF files on demand, but the pricing for many of them is quite high, or others require a proprietary markup language that ties you into that solution.

Instead, I’m supporting standard HTML/CSS for PDF conversion. Nothing proprietary, and no lockin. Instead, for $0.01 per PDF, you can simply sign up for my API through Mashape, and have PDFs running in no time. I’ve started with the absolute simplest API possible for a PDF conversion service, but I plan to support other scenarios in the future – if you have ideas about what you’d like to see in a PDF conversion API, email me at jlinwood at

I’m in the process of writing more documentation, and some getting started guides for various platforms, but you can currently use the API quite easily using Mashape’s Unirest libraries for different languages.

Check out more on the RobotBridge home page.