Journalism Hackathon 2015

The University of Texas at Austin School of Journalism and the Austin American Statesman both sponsored the first Journalism Hackathon, which was a success, especially for a first year event.

This was my first time organizing a hackathon – as part of a team including Robert Quigley and R.B. Brenner from the School of Journalism, and Christian McDonald and Andrew Chavez from the Statesman (they both also teach at the University of Texas in the School of Journalism as well). I’d like to thank Mashery, Microsoft, and Clarify for coming to the hackathon to show everyone what their technology does, and how it could apply to the changing world of journalism.

Many of the participants had never been to a hackathon before, and in fact were kind of intimidated – maybe the combination of “hacking” and “marathon” really doesn’t sound that friendly! From the beginning, we wanted to organize a friendly hackathon, where the focus was on learning something new, getting to know the other participants, and accomplishing something!

The highlight of the hackathon was the tour of the Statesman’s newspaper printing presses, led by Christian McDonald – the presses were busy churning out the next day’s paper. One of the most interesting facts we learned is that the Statesman prints many other newspapers as well – it’s just cheaper for these other papers to get rid of their printing presses, and run their paper copies off on the Statesman’s presses.


Using Javascript links with Turbolinks for Ruby on Rails 4.x

This was hard to find by Googling it, so I’ll put it into a blog post here. Turbolinks is a great page speed optimization technology that is built into Rails 4.

With Turbolinks, every page load simply replaces the HTML body tag with the contents of the next page, which means that your CSS and Javascript don’t have to be loaded again (even from cache) and then parsed.

Rails does some magic to your HTML links (basically by installing a jQuery event handler for opening links) so that this works. But what if you’re just using standard Javascript? For instance, I’m using Bootstrap Table for my admin interface, with rows of data. Clicking on a row will take me to that detail page. With, that forces a full refresh.

Instead, use Turbolinks.visit() with the URL you need to open, and your Rails 4 app will feel a lot quicker to your users.

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.

Android iPhone Development

App allows tourists to experience ‘12 Years a Slave’

Here’s a nice write-up from the Baton Rouge Advocate on an app for Android and iOS that I worked on with Frank Eakin and Justine Boyer. I did the software development for both apps, in Java and Objective-C.


App allows tourists to experience ‘12 Years a Slave’

The app officially launches at noon on Saturday, November 1, 2014 at the Louisiana Book Fair on the grounds of the State Capitol in Baton Rouge. Steve McQueen, the director of the movie “Twelve Years a Slave”, and Louis Gossett, Jr., actor and the narrator of the audiobook, are helping to kick off the app launch. On Sunday, November 2, 2014 Frank Eakin and the descendants of many of the characters in the book will take a tour of the app sites, followed by a celebration in Marksville, Louisiana.

I had a great time working on these apps, as they combined my love of history with a great design, great content, and a very interesting story. Many were introduced to the story of Solomon Northup through the movie, Twelve Years a Slave, and I hope they can now easily visit the historical sites associated with his story of being kidnapped as a free man in New York and brought to slavery in Louisiana.

Purchase the Twelve Years a Slave Tour Guide app for the iPhone and the Twelve Years a Slave Tour Guide app for Android.

iPhone Development

HTML5 Video Autoplay on iOS Sample App

Link to my HTML5 Video Autoplay on iOS Sample App GitHub repo

As part of a current project building a large hybrid native/web iPad app, some issues came up regarding iOS 7 and 8 and HTML5 content in a UIWebView with an autoplaying video.

This is an area where Mobile Safari differs from the UIWebView that iOS developers can embed into their own apps. Mobile Safari doesn’t allow video to autoplay, ostensibly to protect users on cellular data plans from large data charges. As far as I can tell, its behavior doesn’t change if the device is on a wifi network, so there may be other reasons.

There are many StackOverflow issues about this, some of which appear to be outdated, so the easiest thing for me to do was to build a quick, simple app to test out HTML5 autoplay. The key setting to know is that you must change the UIWebView to allow media playback without user interaction – you can set this in the Storyboard, or you can set it via code:

self.webView.mediaPlaybackRequiresUserAction = NO;

You don’t need any kind of Javascript to let the HTML5 video autoplay – simply set the autoplay attribute on the video tag, and you’ll be able to run the video as soon as the HTML loads.


MapRhino: The Are We There Yet App for Kids on a Road Trip!

I’ve been working on a new app that isn’t like anything else out there yet – MapRhino!

It’s an app for kids on road trips who have iPads – the parents load up the MapRhino app on their iPhone, put in their destination, and then the kids get the car’s location and the time remaining until they get there on their iPads.

The greatest part about it is that it doesn’t require any kind of wireless data plan for the iPads – the iPhone and the iPads set up their own wireless network in the car using the Wifi and Bluetooth connections built into the devices, and the iPads can get the streaming updates.

Unfortunately, it uses some Apple-only technology, so it’s only going to work with iPhones and iPads (for now), but all you need is a recent iPhone and iPad.

I’m in the process of finishing up beta testing, to get the app out into the App Store, but I’ve included a screenshot of the iPad app so you can see what it looks like.

Talks Twilio

Voice and SMS for Your Apps with Twilio – Talk for AirConf 2014

At AirConf 2014, I gave this talk on Twilio for developers who haven’t used it before, or who haven’t used it much. I also set up a few live demos for people to try, so that was fun!

Talks Twilio

Speaking at AirConf 2014 on Twilio: Voice & SMS for your Apps!

I’ve been one of the Twilio (an API for Voice and SMS) experts at AirPair for a while. AirPair is a great little service that matches up software developers with experts in the field – trying to implement in-app purchase on iOS ? There’s probably an expert on that. Want to migrate from MySQL to MongoDB for your Django application? Find that expert on AirPair. The idea is that you can hire those experts on an hourly basis for a video interview where they help you out.

Because I like working with Twilio, and I’ve done a lot of work advising developers on how to use Twilio in various projects, I agreed to give a talk during AirPair’s first conference – AirConf – on August 6th, at 12 pm Central Daylight Time/5pm Greenwich Mean Time. Why is the time so important? It’s a virtual conference, conducted over Google Hangouts. So you don’t have to be in the same physical location as I am for the conference – no travel necessary!

I’m covering Twilio for beginners, so if you’re not familiar with Twilio, this is a great talk to attend. If you’ve already used Twilio in a few applications, it’s probably going to be a lot of things you already know, like how to send or receive an SMS. I’m going to try and be as language neutral as possible in my talk – I’ve used the Twilio API from Java, Ruby, Objective-C, PHP, and Javascript, and it all basically works the same, so that shouldn’t be an issue. I’m still looking to have an excuse to use Twilio from C# or Python!


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:



Web Speed Analyzer App on the Google Play Store

Download Web Speed Analyzer from Google Play.

I was pretty excited when Google PageSpeed came out for checking web site front end performance, but I was surprised they didn’t release an Android app – just a web page and an API.


I thought it might be fun to work on an Android app that called the Google PageSpeed Insights API, and showed your score and which rules you needed help with. I have a lot of different web sites, most of which are based off themes I get from ThemeForest, WrapBootstrap, MediaLoot, or similar web sites. These themes aren’t always optimized for loading speed and performance, so it’s nice to have a set of things to fix to increase performance.

If you’re a web developer, you can use this to check the front-end performance of your sites, and generate quick score cards. There are a few other Android apps on the Play Store that do the same thing, so you don’t have to just use this one – you can also just use Google’s site as well, of course.ScreenshotNexus10-1ScreenshotNexus10-1

I optimized the app for tablets, and supposedly, it will work on Honeycomb/Android 3.2, although I don’t have access to any tablets from that era for testing – just 4.0 and above. It works well on both the 7-inch, and 10-inch form factors, although I didn’t do anything to differentiate between the two – the next version is going to show more details for each rule, so I may do a 3-pane layout on the 10-inch in landscape.

Probably the most interesting development challenges with this app came from allowing the orientation of the app to change – in Android, that tears down and rebuilds the Activity, so you lose any state information you were holding onto but didn’t explicitly save. You also need to be careful with any network connections you are making, as they could be tied to an Activity that no longer exists.

I’d like to extend the basics of this app to do other metrics/reporting solutions – one idea I had was to create an email deliverability dashboard for SendGrid I could give to clients to see how their generated emails are being delivered (or not delivered, for instance with a bad email address). Another idea would be to provide analytics or metrics for the Drupal CMS. if this sounds interesting to you, feel free to get in touch.