It’s 2014. In our pockets, we carry around powerful computers packed with sensors that we use to access endless amounts of content. Despite this widespread availability of information, however, we are increasingly being bombarded by things like spammy push notifications that vie for our attention, giving rise to a new class of apps that deliver curated and personalized content. One of my favorites, Google Now, is an incredible feat that uses the vast amount of data and computing power that Google has to present relevant information to people. It works surprisingly well, but there’s one missing component: developers.
So when I went to my first hackathon last month in Santa Monica, HackTech, my team set out to build a dashboard-style app like Google Now, but with the flexibility to allow developers to create their own “cards” for others to use within the app. 48 hours later, we had created a working app, called Dash.
Dash aims to be a passive app that you can check throughout your day. Dash displays bits of information in “cards” that you can swipe away, exactly like Google Now. Developers can define custom cards based on preset styles, specify when they should appear and what content should appear on the cards. We built a few example cards to show it off, including the current weather, the nearest pizza place, top headlines from the New York Times, and an inline video.
Here’s a basic breakdown of how it works. Since iOS apps aren’t allowed to download code externally, cards are defined in property list files. Developers can specify multiple JSON data sources for their card(s), which are all fetched and stored when Dash launches. Using simple tokens, the parameters and endpoint for each data source can even be dependent on the response of another data source. Cards can be set to appear based on time of day, user location, the response of a data source, or a combination of the three. For example, a developer could build a card that uses the user’s location and the Foursquare API to first check if there’s a hiking trail nearby and show a card with a map if there is one. Developers can specify the content of the card with tokens that will be replaced at runtime with information from any data source, allowing cards to display dynamic information that can change based on a variety of factors.
Dash has a lot of flexibility in its current form but is far from ready for the App Store. It was built on the idea that information should be displayed only when it makes sense. With an overwhelming amount of information and wearable computing right around the corner, this concept of contextual awareness in software will only continue to become more prevalent.
Ever since the invention of the light bulb, people have looked for ways to simplify the light switch. Remote controls, sound activation, and most recently, internet connected switches, have all been proposed revisions.
The most interesting of the three is, of course, the internet connected switches, most of which have sprung up in the last two years. Internet connectivity allows for a wide range of new functionality through simple APIs and services like IFTTT. Recently I’ve been thinking a lot about the potential of Bluetooth Low Energy and Apple’s iBeacon technology but wanted to find a specific use case before building something with the iBeacon API. Enter Switched.
Using Bluetooth Low Energy and the Belkin WeMo Local SDK, I wrote a simple app that automatically turns the lights on when I walk in a room and turns them off when I leave. The iPad acts as a BLE beacon, and when the iPhone detects that it’s nearby, it turns on the lights using the WeMo SDK. When it goes out of range, it turns them off.
Though I initially used the iBeacon APIs, they don’t work in the background, so I switched to using CoreBluetooth instead and use signal strength to estimate the proximity of the beacon. Like most sensor data, the readings have some inaccuracies so I used some averaging code that I wrote over summer at Sension to smooth out the readings over time into useful information. Though it works very well in the foreground, iOS significantly hinders it in the background by providing much fewer signal strength updates, causing the app to respond much more slowly.
So that’s Switched: an easy way to control the lights with Bluetooth. Most importantly, it was a fun overnight project that exposed me to new APIs and made me smile at the same time. With 2014 just around the corner, I think that Bluetooth LE will only continue to get more interesting in the new year.
It goes without saying that the food at college dining halls isn’t so great. After living at UC Santa Cruz for two months, it seemed like a decent idea to write a simple app that lets you judge which dining hall has the best food on campus.
Over a few nights in early October, my friend Garrett Trevers and I wrote a simple backend that scrapes menus from the UCSC website and a simple and fast iOS app for accessing it. We built it for ourselves to use back then, but since others have asked for it, we finally polished it up and sent it to the App Store.
It has all the basic functionality you’d expect: it shows menus for each dining hall and nutrition facts for each meal, but it also does some neat things: it shows the most relevant meal based on time of day and fetches data in the background so it loads instantly after the first launch. And we made it free so that our friends can enjoy it too. Go get it here.
As a child, I was really enthusiastic about First Lego League, the Lego robotics organization that spans across multiple countries. It was where I first learned the concepts of programming and development. When I built my first iOS app in 2009, it was a simple scoring app that reflected that year’s First Lego League “challenge”. I was nervous about how it would be received, but in the years following, I’ve received so many encouraging emails that I release a new version of the app every year, updated for the new challenge.
For this year’s version, I went through and rethought a lot of the way the interface works, simplifying it while also allowing more content to be shown on screen. It’s been mostly rewritten and designed with iOS 7 in mind from day one. And, of course, it’s made to work with the new First Lego League challenge, “Nature’s Fury”. Go get it here.
Here’s some client work I did for national Future Business Leaders of America. The old app was non-native, slow, and buggy. The new one is brand new and built from the ground up with some great features for members of the club, including news and events sections as well as a way to easily find local points of interest at conferences. Check it out here.
I previously wrote that I was no longer going to maintain active development of the Chrome extension that I wrote, Aside. A few developers and others who use the extension wrote to me asking about open-sourcing the code base, so it is now available on GitHub under the MIT License for anyone who wants to mess with it or help to update/maintain it in the future.
When I first started programming, I worked on a number of different projects that never ended up shipping. They helped me learn and explore the iPhone SDK, and though they didn’t make it to the App Store, they were entirely worthwhile. But once I started sending apps to the App Store, I felt a compulsive need to have a formal website. I decided I would publish as “gzmo apps,” and so I set up a website for the world to see. Unfortunately, the site I made was clunky and hard to update–more often than not, the website went months without an update after I released something new. Even worse, so many of the side projects I worked on ended up being a waste. Unlike the countless others who code for a living, “gzmo apps” was a side project, and I neglected it.
At the same time, I’ve been wanting to write longer content for some time now. Last Fall, I ended up writing a lot of essays for college applications. It was a stressful process, but it was liberating to have my ideas written down and structured on paper.
Starting today, I will no longer be publishing anything under the “gzmo apps” name. Instead, I plan on using this blog to post about my coding projects (even those that don’t end up shipping) and writing an articles every once in a while. I’ve never kept a blog for more than a month, but I think that writing more will be end up being a worthwhile exercise. If you’d like, you can follow along with me here on WordPress, via RSS, or on Twitter, where I’ll be linking to articles as I post them.