Cycle, an iOS8 Watch App plus Apple WatchKit Development Tips

This past week Apple started shipments of the new Apple Watch, with some analysts suggesting we just witnessed the creation of an overnight billion-dollar business.  I have a strong feeling there will be an explosion of new apps designed for the watch given how easy Apple has made it to create new apps for the watch, as well as extend your existing iOS app to have a custom WatchKit extension.

I’ve started to rebuild the Spokefly hybrid app in Apple’s new programming language, Swift. I thought this would be a good way to work out some of the kinks and build something cool for the Apple Watch. Cycle by Spokefly is an iOS and Apple Watch app that tracks your cycling distance, displays the speed and distance data on your watch in realtime, all while recording your route. There were a few requirements going into this build that I set:

Cycle Requirements

  • Has to be a single view and simple (this is not Strava, people)
  • Has to track your route and total distance (and in the background!)
  • Has to sync Cycling with the Apple Health App using HealthKit
  • Has to save location data to a server somewhere for future analysis
  • Has to use the new Universal Layout in Storyboard for universal app support (great Autolayout practice, really)
  • Has to be submittable to the App Store in a weekend of work

These are a pretty simple set of requirements. I chose to build an application with a single view because I wanted to design an app “Watch first” so it would conform nicely to the Apple Watch without a lot of custom UI elements that I’d need to re-create or remove because of the size constraints of the Watch UI.  Syncing with HealthKit was high up on the requirements because of a pet peeve I have – Apple’s native Health App has a cycling distance and cycling workouts section available, but the data doesn’t auto-populate like it does for step counting – it doesn’t work at all.  The app has to track your route and total distance, as well as save the location data to a server somewhere, all in all a pretty intuitive set of features for a route tracking app. My time goal?  I didn’t meet it, the app wasn’t as polished as I’d like in the first weekend so I spent a second weekend making it a little prettier and doing some extra watch debugging.

Rails Server Setup:

Many iOS developers use Parse for their app’s backend, or utilizing an internal mobile database like iOS’ CoreData or Realm. I’ve wanted to try the Rails-api gem for a while so I created a simple rails app where I aggregate all of the location data after each User’s ride.  I’m not storing anything locally in the app, when you save data using HealthKit you can also read it later.

In the new rails app, I created a Location and Ride model to capture the user’s location and create a “ride” so I could query that data later. The idea is to use this data to plot where cyclists are riding in a given city rather than the broken data cities currently have around cycling transportation. It’s hosted on Heroku for free, and as of writing this already had about 80,000 rows just from testing, so I’m thinking it will need some optimization later….but that’s not the point of this post!

iOS and Apple Watch apps: 

These are the highlights of what I learned building the watch, with some key observations for those jumping into the Watch App development game.  For the most part, any iOS developer will easily be able to build a Watch app. Functionally it’s the same as developing your iOS app in Xcode with new terminology, e.g. WKInterfaceLabel vs UILabel.

I only targeted iOS 8.2 and up, so older iPhones that don’t support iOS8 will not be able to run this app, which is not an option for every developer.


First thing to notice is the iOS companion app are two completely separate apps, so your project will have three total folders: YourAppName, YourAppNameWatchKitExtension, and YourAppName WatchKit App. Getting these to play nicely together requires some configuration as well as creation of an app group to be shared between the apps to allow data sharing and communication. Apple’s WatchKit tips provides us a great place to start.

In short, you create an app group bundle identifier to be shared between the iOS app and Watch App through the developer portal. When you submit to the App Store, the group identifier and all of the versions in the Plist files must match for the app to bundle and be installed correctly on the end User’s device. To make sure app groups is enabled, go to each of your Build Targets, and click AppName WatchKit Extension or AppName. Under Capabilities, you’ll turn App Groups to ‘on’. Enter the App Group ID that you created, mine is in the standard “com.AppGroup.AppName”. Repeat this for each of the two app targets.

MapKit and CoreLocation

I decided to start by making the iOS app function first, and then sending that data to the watch as it’s updated on the phone in realtime. From what I understood when I started building the Watch App is that most of the heavy lifting should be done by the parent iOS application, so it seemed natural to delay any Watch implementations until the iOS app was working. What I know now is that you can call MapKit’s CoreLocation in your watch app extension almost the same way as you would in your iPhone app. This wouldn’t have changed anything for my implementation but I would take this into consideration when architecting your app. The hangup is that the user can’t currently authorize your app to have access to their location from the app, but only from the iPhone app. Hopefully this is something Apple changes.

Okay, so now to our first feature, we need to get the User’s current location and plot that in the map.  After dropping in the MapView in Interface Builder and connecting it from the Storyboard to the controller via control + click, we now have mapView to set up, place the user’s location, as well as track their location when it updates.

We’ll also need to set up our CoreLocation  to track the User’s location, which requires an instance of the CLLocationManager.

Background Location Monitoring

When we set manager.requestAlwaysAuthorization() we need to make sure we have backgrounding enabled for the app. Do this by going back into your app settings > CapabilitiesBackground Modes. You’ll want to check the box that says ‘Location Updates’. Backgrounding is only allowed for certain types of functions, luckily background location tracking is one of them.

I won’t put the whole implementation of the route tracking here, but needless to say, it works by collecting the locations in an array myLocations, and with each didUpdateLocations, a new location object from the location manager is added to the array. These series of locations are what is plotted on the map, and the entire array of locations for each ‘ride’ is the data that is submitted to the server.

Route tracking works!


HealthKit and Health App Sync

Next, I needed to get Apple’s HealthKit and the new Cycle app syncing nicely. After a little research I found a simple tutorial for creating and saving workouts to the Health App to use as our starting point.  To use HealthKit you need to set the HealthKit entitlement, so go back to Capabilities and turn on HealthKit for both your iOS and companion WatchKit app. If you aren’t familiar with the Health App, developers use the HealthKit api to read and write health related data to the new Health App that iPhone users started to see on their home screen starting with iOS8.  The best example of this is the Step Counter that tracks your daily steps and charts it over time.

The tutorial linked covers everything you need, I ended up with two methods: saveCyclingWorkout and saveCyclingDistance that take data from your locations and save it to HealthKit.  The only surprise with HealthKit authorization was in the UI.  Once the User has approved (or partially approved) Health App syncing, there’s no way for them to go back from your app and change those same settings. They have to go into the actual Health App, find YourAppName and configure it there.

To let the user turn on Health App syncing in my app, I placed a simple Font-Awesome icon (yes, someone ported it to Swift). When HealthKit is not authorized, the user can tap the H and it will open the Health Authorization UIView:
Then, once the User has authorized HealthKit, we set the button interaction to a green color and disable interaction, since the user can no longer do anything with the Health App from our app.




Saving Location Data to third-party API

Okay! So we have the location data, we’re recording it, plotting it on the map, and we save it to HealthKit after the User authorizes our access.  Next up, saving the data to the server. I created a simple Location struct to make it easier to organize the location manager data, especially because I needed to clean it up to send to the server in something it could understand (read: not CLLocationManager objects).

Rather than constantly updating the server with location data, I would rather collect it all and save it to the server at once, off of the main thread, so the user can start another ride or do something else without us interrupting them. So we start out with our array of locations, which is really an array of CLLocation objects, and iterate through them to send to the rails server:

There’s a number of things going on here that are not “the right way” so I’d recommend against copy/paste. What to see here is that I’m doing a batch insert into the rails api, so it’s only one networking call, and we don’t care if it succeeds or fails because we’re really just collecting aggregate data. This is the Ruby method that takes our big array of location data and saves them all at once.

WatchKit and Watch App Development

And now we’re finally ready for the Watch! We have our location tracking, our data saving to HealthKit and the server, and the UI looks how we want. But how does the parent app get the location and distance data to the watch?

After we follow Apple’s instructions for Adding a WatchKit App to Your iOS Project, we’re ready to lay out the storyboard. You can see that when we create the watch app we have a few new folders to contend with. The YourAppWatchKitExtension folder has your two controllers, and the YourApp WatchKit App has your new Interface.storyboard file for the app.


First, let’s layout the Watch Storyboard. This is exactly the same process as configuring your views for the iOS app. Drag in the elements you want in the view and then connect them to the InterfaceController via control + drag.  You can see in the screenshot below the Main and myCategory views – myCategory was generated automatically for us and will be what our notifications would look like on the watch face if our app sent notifications.



Watch App Storyboard Layout

Essentially we re-created all of the buttons and labels that I had in my iOS app’s UI: Start, Stop, Reset, traveledDistance label, speed label, and a new authorizeLocation label.  The authorizeLocation label goes back to our earlier point that a User can’t enable location tracking from the Apple Watch, it has to be done from the iOS device. When we don’t have authorization, we’re going to show only this label until the User authorizes us to use their location. This could also be presented in a modal or other view, but toggling the labels seemed to be the simplest for our purposes.

Syncing Live Data with Apple Watch

Okay…so we have the UI, how do we get live data to it? Well it turns out natively, you really can’t without writing a lot of code using the notification center (yet). I want the watch app to reflect the current traveledDistance and speed, not occasionally update it in the background, that wouldn’t be a super useful cycling tracker app.  These are the two most important factors to get live data displaying in the app.

1. openParentApplication:reply can start your parent app in the background to enable things like background location tracking or short networking calls. Read the developer documentation.

In our WatchKit InterfaceController, we call openParentApplication:reply if the user has authorized location and they are starting the app from the Watch.

2. MMWormhole (built on top of Darwin Notification Center) is a great library for enabling live updates on the watch.

The creator of MMWormhole puts it best:

One of the areas where we are finding MMWormhole to be so valuable is passing information to the extension that is used to setup the UI on the watch. That includes things like the title or date of a label, or the contents of table cells. If the wormhole represents a set of mailboxes, the messages passed to mailboxes on the extension are a great way to tell the watch app what it’s UI state should be whether the watch app is awake or not. It can check the contents of those mailboxes when it wakes up and setup it’s UI accordingly. This is a case that can be handled all sorts of ways, including NSUserDefaults or Core Data persistent store sharing, but I think this method of passed JSON or NSCoded messages is a simple and elegant solution.

This is exactly what we need! MMWormhole creates a simple system where we can set data to NSUserDefaults and let the watch know it’s been updated using…a wormhole :) You’ll need to create a bridging header to use this in Swift, but it’s straightforward with CocoaPods and Apple’s guidance on using both Objective-C and Swift in the same project.

So what you can see here is a sort example of the Watch app listening for an update from the iOS app, at which point it reads some data from NSUserDefaults (like localStorage for iOS) and updates the Watch UI once it has new data. This is just repeated for all of the events we’re listening for.

To start the iOS app in the background, we first check if the User has already authorized us to get their location. If they have, we start the app in the background with openParentApplication:reply, then tell the iOS app to start tracking the user in the background using MMWormhole. openParentApplication:reply is a fairly new method for the Watch in response to developers needing a way to open the parent application and there are reports of it not always working as expected on the Apple Developer forums, so be sure to test that it’s working on a real device.

That’s really it! Cycle, a simple cycling tracker that works on both the iPhone and the new Apple Watch. Download it and let me know what you think!


Tagged , , , , , ,

iPhone Clean Screen, iOS home screen hack

A friend of mine showed me a cool little home screen hack for your iOS device. If you’ve ever wanted your home screen to be just a little, well, cleaner, then this hack is for you.

First, Consolidate the first “page” of your iOS device’s home screen into one group. Take all of the launch bar items and place them in this group as well.

This was my home screen before:

iPhone Home Screen Hack - iOS 7

And this is my home screen now:

Hack your iPhone's home screen with this cool trick

Simple as that! Enjoy your new, cleaner, home screen. The cool opening effect on the launch bar will wow all the nerds.

iPhone Home Screen Hack - Cluttered home screen

Tagged , , ,

time for bikes, an urban transport revolution

Today’s global population faces a daunting set of complex challenges — transportation, education, government, healthcare, and more. These problems seem obvious to many but actual solutions still illude us. When I think about transportation in America, I don’t see the fact that we are still reliant on fossil-fuel based transportation for our economic and social well being as the problem, but a consequence of a larger and more complex problem in how we live. Our food arrives via 18-wheeled truck and we arrive via SUV, even as 70% of our car trips are less than 2.0 miles [1]. We’re fat, angry, and killing ourselves with a Western Diet and long commutes. Americans are increasingly moving to cities and we are all driving less [2], yet there has been no real social change in the way people feel and talk about driving, car ownership, and our love/love relationship with gasoline.

Our addiction to car-life influences everything. Strip malls? Urban sprawl? Lack of public transportation? Crappy bike lanes? Meh bike rental and bike share programs? All a consequence of king-car, we love them more than pretty much anything else. If you live in a world where it is possible to have everything you need in a 2.0 mile radius, why would you choose to live somewhere that you have to drive 10-15 minutes to get those same things? It just doesn’t make sense. At Spokefly, we’re building a solution to make getting around more efficient, a peer to peer bike share network in Austin.

“But it’s hard to move! I have a job and a house!”

Yes, but living in suburbia and driving your car an hour each way is also killing you[4] – not to mention the rest of us. Your call, but you should probably just move before you get too old to drive.

Die, Sprawl, Die.

I recently started living a car-free life, not because I’m some hippie (sorta), but actually because my car was totalled in an accident.   So it wasn’t really an active choice, although I didn’t fight the transition, I just decided not to get another car.  I now commute primarily via bicycle. I’ve become convinced that bike riding can solve all of our transportation problems. As more of America’s cities achieve population density, an urban population without cars is entirely possible. If we’re going to make this transition, we need to embrace another form of transportation — the bike.

Don't Crash Your Car - Rent a Bike “Ouch.”

Some naysayers will tell you it’s too hot to bike to work or that cars offer freedom not found elsewhere. Bullshit. Cars trap you and suck your soul (and wallet) while you angrily curse at that stupid person who doesn’t know how to drive. Increased stress hormones and exactly what you need – another hour in a sitting position each day.

It’s time to change how you live, get out of your car and onto a bike.

“But I don’t live in an urban utopia such as you have described!”

Then move. Come to Austin, everyone else is.

Global Urbanism

If you didn’t know, there were 2.1 Billion internet users at the end of 2012, or 29% of the global population.(1) Another way to look at that is: 70% of the people alive today are about to get their first broadband connection. That’s 5 Billion people who have yet to send their first Tweet, not to mention the billions that will be moving into cities in the next decade.  There is still explosive growth necessary to connect us all together, and it will only amplify our combined global issues. I believe there is a way forward, but we need to prepare for this change, together.

Be a Bike Rider

After the accident, I was car-less, but not without transportation. The next day I caught the bus into downtown Austin to Capital Factory and that 11-minute stop to stop trip became my norm for the next month. I also signed up for Car2go, the service that allows you to rent smart cars by the minute for point to point trips (no round-trip required).

After a surprisingly smooth insurance process, I decided that rather than get a new car, I would become a bike rider instead.  Austin is full of trails and bike lanes, and I already have friends who ride their bikes to work, so I knew what I needed to get to get started. A solid commuter bike, enough gears for hilly Austin, with a rack and saddle bag for my computer. I also purchased lights (headlight and taillight) for those late nights coming home from downtown.  I ended up with a pretty good setup.

Try renting a bike

I’ve had my bike for over a month now and love it. I’m relying mostly on my Austin designed Fairdale bike for transport and commuting to work, with bus and car2go on the side, although I still haven’t completed a grocery store trip without a car. I generally hate traffic and think cities should be completely car free, which may not be the norm. Everyone should try bike riding, just rent a bike for a day. Hell, if you’re in Austin, rent a bike from me. You’d be surprised how far you can get in your city on a bike during your typical workday. In 2012, Over 70% of American’s car trips were less than 2 miles (3). Portland is one of the United States’ most bike-friendly cities, but it doesn’t even compare to the numbers from Amsterdam. The NYTimes reports, reports there are 800,000 residents, approximately 880,000 bikes. What would Austin be like with no cars and more than 1 bike for every resident? I like the sound of that.

How can we get started?

As Americans increasingly move to cities in search of jobs, good education, healthcare, and educational opportunities our urban core will continue to grow.  We should make the transition to city life as easy as possible by encouraging the use of public transportation, ride-sharing technology, electric vehicles, and most of all, bikes. This means making biking not only the easiest form of alternative transportation, but the easiest form of transport, period. Sometimes people forget what riding a bike is like, and how much fun it can be. Maybe you’re a little like me, maybe you just need a little jolt to get them started and back in the saddle. It’s time to get out of your car and wake up to a world where you don’t have to sit in traffic every day.

Sometimes you just have to get started. We may not be able to solve the entire world’s problems through bike riding, but it would be a start. A start towards a car-free, fossil-fuel free, sustainable world for all of us.

Plus, who would rather sit in traffic when you could be a bike rider?



(5) – “Air Quality and Exercise-Related Health Benefits from Reduced Car Travel in the Midwestern United States”


Tagged , , , ,

Changes for Developers in iOS7 from Apple’s WWDC

As usual, the 2013 Apple WWDC event had quite a few announcements, notably the changes in iOS7 for iOS app developers.  There are significant changes in overall vision of iOS, from design to how developers build their apps for iOS7.

Apple released a full developer transition guide for Apple Developers (available if you have an account). After reading the document, I have to say that there are some impactful changes, mostly for the better.

iOS 7 introduces many UI changes, such as borderless buttons, translucent bars, and full-screen layout for view controllers. Using Xcode 5, you can build a project for iOS 7 and run it in iOS 7 Simulator to get a first glimpse of the way the app looks with iOS 7 UI.



Apple thinks that when you start using iOS7, a few things will become clear about the main purpose and vision of the new iOS version:

Deference. The UI helps users understand and interact with the content, but never competes with it.

Clarity. Text is legible at every size, icons are precise and lucid, adornments are subtle and appropriate, and a sharpened focus on functionality motivates the design.

Depth. Visual layers and realistic motion heighten users’ delight and understanding.


As the smartphone and app era matures, we’re seeing a push towards simplicity with a goal of reducing noise. I strongly believe the future of technology lies in “natural” tech — technology and products designed to improve our lives that fit in as a natural part of our environment. This can be applied to small wearable technology, like the Fitbit, or an extremely simple UI design that gets out of the way, like the Moves app. You can go back and forth over design aesthetics in the new iOS version but I will never argue with a push towards simplicity and ease of use.

iOS7 also introduces dynamic type, which resizes text throughout iOS based on user preferences. This should make text appear more natural and be easier to read for each individual user.


iOS7 Dynamic Type Example

Automatic adjustments to weight, letter spacing, and line height for every font size.

The ability to specify different text styles for semantically distinct blocks of text, such as Body, Footnote, or Headline1.

Text that responds appropriately to changes in both the Dynamic Type and accessibility settings for user-specified text sizes.

Issues for developers

The changes in iOS7 will impact existing applications the most, especially those apps that rely heavily on the system-based templates for the application UI. This would include any app that relies on system styled buttons, navigation bars, and UI buttons. If your application uses these elements, when users upgrade to iOS7, they will see the new iOS7 buttons with the framework you intended for use in iOS6. This is obviously not great for existing apps – you will have to test your app on iOS7 and likely maintain a separate version for iOS6 in your development tree. If you need to maintain multiple versions of an app, Apple’s Xcode 5 allows developers to manage multiple versions of an app in addition to allowing you to compare the differences using Apple’s Auto Layout. A primary example of an app that will need some updating is Facebook’s mobile application. Their app relies heavily on default system buttons for some of its actions, and on iOS7 the system styled elements look completely out of place in the older framework.

iOS7 Button Containers

If you have built an iOS app before from scratch, you’ll know that programming in Cocoa to build iOS apps involves learning about a few iOS idiosyncrasies, to say the least. Well, another big change that will affect nearly every app – Apple has removed the concept of a button container, so your application buttons are now only text. Basically iOS7 would consider the container (and custom code and design) around your ‘Back’ button in the navigation irrelevant. This is a big change because most apps are using either custom code or background images to create buttons in the navigation and they will now look completely out of place on the new version of iOS.


We’re in the middle of the icon design process for Recipeas and there are a few things worth noting from a design and aesthetic perspective. Apple decided to change the radii of the icon corners on iOS7, they’re now 12pt as opposed to iOS6’s 10pt corners. Any icons based on one iOS will end up looking bad on the other. Love it or hate it, iOS7 is on its way to us, and more importantly our users. To make sure your app is iOS7 ready, Apple recommends every app review this “to do” list before launching your app for iOS7.

Things Every App Should Do

  • Make sure that app content is discernible through translucent UI elements—such as bars and keyboards—and the transparent status bar. In iOS 7, view controllers use full-screen layout (to learn more, see “Using View Controllers”).
  • Redesign custom bar button icons. In iOS 7, bar button icons are lighter in weight and have a different style.
  • Prepare for borderless buttons by moving away from supplying button background images and by reassessing your layout.
  • Examine your app for hard-coded UI values—such as sizes and positions—and replace them with those you derive dynamically from system-provided values. Use Auto Layout to help your app respond when layout changes are required. (If you’re new to Auto Layout, learn about it by reading Cocoa Auto Layout Guide.)
  • Examine your app for places where the metrics and style changes of UIKit controls and views affect the layout and appearance. For example, switches are wider, grouped tables are no longer inset, and progress views are thinner. For more information on specific UI elements, see “Bars and Bar Buttons”, “Controls”, “Content Views”, and “Temporary Views”.
  • Scope the ProjectAdopt Dynamic Type. In iOS 7, users can adjust the text size they see in apps. When you adopt Dynamic Type, you get text that responds appropriately to user-specified size changes. For more information, see “Using Fonts”.
  • Make sure your app doesn’t respond inappropriately to the new Control Center gesture or to a navigation contoller’s swipe to go back gesture, especially if you perform custom touch handling.
  • Revisit the use of drop shadows, gradients, and bezels. Because the iOS 7 aesthetic is smooth and layered—with much less emphasis on using visual effects to make UI elements look physical—you may want to rethink these effects.
  • If necessary, update your app to best practices for iOS 6—such as Auto Layout and storyboards—and ensure that the app uses no deprecated API.

Leave a comment or question below and let me know your thoughts on Apple’s latest update!

Tagged , , , , ,

POTUS at Capital Factory

Very happy today to be part of the amazing and booming entrepreneur community here it Austin. It was an honor to meet President Obama. Let’s export Austin’s success, like our 5% unemployment and amazing tech community.

POTUS in Austin by Nate McGuire

President Obama visits Capital Factory in Austin, by Nate McGuire


Tagged , , ,

Are You Looking for a Unicorn? How to Find the Right Web Developer

When you PSD to HTML with The Site Slinger and convert your designs into code, you have completed a crucial part in the web development process — you now have pixel-perfect HTML and CSS code that matches your Photoshop designs! But if you aren’t a web developer, or are not already working with one, how do you get your HTML implemented?

Rather than look for a unicorn (i.e., a web developer who can do it all!), you should select your development team based on the type of site you are building and your requirements. We’ve outlined the three most common projects that come our way and recommend the web developer you would need for each below.


 How to Find the Right Web Developer for Your Project


Implement your project as static HTML

Most websites today will need more than just static HTML. You can think of HTML and CSS as the paint on a car — it makes it look pretty but it doesn’t actually do anything. With static HTML and CSS you can use an FTP client to upload your HTML code to a server, giving you the ability to access it from the internet, but there will be limited interaction and functionality.

This requires a front-end development team to turn your designs into code.

Implement your project as a WordPress site or other Content Management System (“CMS”)

Most sites, like those for a business, portfolio, or a personal website, can be implemented into a WordPress site. These sites are great if you are looking to develop your web presence, need contact form functionality, and dynamic content management. Perfect for content (SEO friendly), WordPress sites make it easy for non-technical people to maintain, update, and configure their own site.

This requires a front-end web developer for HTML and a WordPress (or other CMS) developer.

Implement your project as a Web Application

Web applications give you the most flexibility and are the most complex of the implementations.  Building a web application allows for complex user functionality, highly scaleable sites, payment processing, dynamic business logic and much more. Web applications consist of tiers, typically 3, written in different programming languages that perform various functions for the application.

The first tier is HTML / CSS (and sometimes JavaScript) and consists of what you see on the screen (presentation).  The middle tier utilizes dynamic programming languages, such as Ruby, ASP, .NET, PHP, Python, Java, etc., to provide the business or application logic for your web application.  The third tier acts as a data storage tier that holds your application data.

Web Applications requires a front-end developer to turn your designs into code, a Web Developer for business logic and interaction, and a back-end developer for data management and storage.

Don’t make the mistake of thinking one type of web developer has all the skills you need. A front-end developer, application developer, and back-end developer possess vastly different skill-sets. Unless you are lucky enough to have a unicorn of your own, you will need to consider all of the implementation possibilities when you are starting your next project and select the right combination of web developers for your needs.

Tagged , , , , ,


Tweeting live from Capital Factory in Austin, Texas

I <3 responsive

It was fun making this site, *mostly* done tinkering for now.  I built it extra special for the responsive web, from my Retina MBP to iPad to iPhone it places nicely on all devices. Now I have no excuses to not to write. The next step will be implementing a photo gallery that will serve my HiDPI photos (mmm food) for users with HiDPI / Retina screens which is about 0.00001% of web users…I have to make sure I’m on the path Towards a Retina Web. I have my eye on Retina.js but we will see.


iPhone 4


iPhone 5





Tagged , ,


Some screens for our the landing page of What the Food’s first app, Recipeas. We’re getting ready to deploy, check out screenshots and the website of the app below.

Check out some of the food on the site and keep up to date at










Tagged ,

Longhorn Startup Camp

Longhorn Startup Camp in action on the 2012 Startup Pub Crawl!

Great job by Nick Spiller of uThinkTank and all of the UT student entrepreneurs.  I’m very jealous of all the opportunity and resources coming together to make UT and Austin the place for entrepreneurs – keep your eyes on them, big things are happening.  With Bob Metcalfe and crew pushing student entrepreneurs towards a tipping point, the University will be able to encourage the growth of innovative technology startups and incubate student entrepreneurs on an unprecedented scale.

Stanford total enrollment: 20k

The University of Texas at Austin: 50k

Plus, you’re in Austin and not Palo Alto.

Tagged , , ,