Dipping my toes into the future by Paulo Fierro

Last night I decided to get my toes wet with iOS 8 + Swift. There are so many, many goodies in iOS 8 as well as a whole new language to learn so I fired up the Xcode 6 Beta, put on the WWDC 2014 session on "Creating Extensions for iOS and OS X, Part1" (#205) and got to work.

A little while later I had an extremely simple app but most importantly a working Today Extension.

Oh yeah!

How many steps have you taken today?

This morning I cleaned it up and uploaded it to Github. These things really have the possibility of being awesome.

I'm very excited for the fall!

Brainfeed in the Spotlight by Paulo Fierro

A little over two months ago we launched Brainfeed — an educational app for iPad that we built for a great client in the US.

We loved the idea behind the app and worked hard to sweat the little details striving to make the app fast, fluid and fun. We collaborated with Anne-Sophie Leens on the visual design front — we'd worked with her before and knew that she'd be a perfect fit for the project.

Post-launch the app was steadily getting some attention. Interestingly it did really well very quickly in parts of Africa and South-East Asia where it shot up the charts. It got into the top 10 in a couple weeks in countries like Nigeria, Kenya, Egypt and the Philippines.

Then Europe took notice. First it started climbing the charts in the Eastern countries and slowly moved westward. Then on a Saturday afternoon our client got an email from Apple requesting artwork as the app was being considered for promotion.

This could be huge.

It was on a weekend and I was away so we couldn't provide any help but they scrambled and got the material together and submitted it right before the deadline and then we waited. And waited.

And then this happened.

App Store banner

App Store banner

This banner started appearing in the App Store in some countries. First as a small banner, but then eventually the main banner at the top of the store. Placing our app alongside other apps and games from the likes of Disney, EA and Nickelodeon.

Main banner for Kids 9-11 in the UK App Store — April 27, 2014

This was absolutely amazing.

When an app is published you have to choose two categories that it should belong to that make sense. For Brainfeed this was Kids and Education, though for Kids you have to specify an additional age range — so it kind of gets three categories.

Reaching the #1 spot for Kids 9-11 was no mean feat (its done so in 64 countries thus far), but it also started rising slowly in the more general Kids category and then Education which is massive.

While this was happening the app started to get noticed in the States and landed on the #4 spot for Best New Apps in the US App Store.

US App Store: Best New Apps — April 27, 2014

As you can imagine this was huge for visibility.

And then this weekend, the app got another major spike when Apple featured it in the iTunes Education Spotlight (in the Canadian one too). Still there as of this writing and immortalized forever in the screenshot below.

iTunes Education Spotlight featuring Brainfeed — May 26, 2014

This is the first time I've worked on an app that's gained so much exposure.

One thing is rising up the charts and reaching:

  • #1 for Kids: Ages 9–11 in 64 countries
  • #1 for Kids in 23 countries
  • #1 for Education in 17 countries
  • reaching #4 in the US in Kids: Ages 9–11

However for me getting the app featured by Apple means much more. A prominent spot in a newsletter that goes out to teachers and parents means we definitely did something right, and that's certainly something I am very proud of.

Speeding up Xcode builds by Paulo Fierro

My main development machine used to be a 2010 MacBook Pro with a 512 GB SSD. Expensive, but way fast. Unfortunately the GPU died about a year ago so I've been using a 2011 iMac. Its also fast, if not faster than the MBP for many things but disk operations are not.

A few weeks ago on Dave Verwer's brilliant iOS Dev Weekly I found a blog post explaining how you could speed up Xcode (and AppCode) build times. This is done by moving Xcode's DerivedData folder as well as iOS Simulator Data to a RAM disk.

A RAM disk is taking a chunk of memory and treating it as a if it were a drive. Now SSD's are fast, but memory is still much faster. If you have extra memory lying around I recommend giving this a shot.

I didn't go the Terminal route but instead used iRamDisk from the Mac App Store. I was skeptical, but it definitely works.

Building and running an app I'm currently working on into a clean iOS Simulator used to take 20 seconds. Using iRamDisk it now takes 7. That's huge.

Regular builds are also much faster and very noticeable after doing a Product > Clean.

DerivedData gets a gig

The Simulator gets 512MB

The dropdown menu in the menu bar also lets you know how full each disk is and you can easily flush them via a menu option.

Menu options

Menu options

If you have extra memory lying around I'd give it a shot.

Serving compressed JSON on S3 by Paulo Fierro

Last week we shipped Brainfeed, an iPad app we've been working on for a client that presents educational videos for kids. We also developed a backend system for the curators to use to add and tag videos for the app.

This backend is built in Ruby with Padrino (on top of Sinatra) and runs on Heroku. Due to the nature of the app it only needs a single dyno and pushes content changes over to a bucket on Amazon S3 which is consumed by the iPad app. This means that the app can continue to work independently from the backend and any scaling issues can be handled on the S3 side of things, which has the added bonus of keeping the overall cost down.

Previously the app was consuming a JSON file provided by the backend via an API. When you're serving JSON (or any data) you really want to serve it compressed to save on bandwidth and overall load time.

In Apache you can add a line to your .htaccess file that indicates this like so:

AddOutputFilterByType DEFLATE application/json

This gzips JSON content on the fly automatically. This is normally already set in Padrino/Sinatra apps using Rack::Deflater.

However, when I started pushing the JSON over to S3 I needed a way to tell S3 to serve the content in a compressed fashion. Using the AWS SDK for Ruby you can do this like so:

Before the gzip compression we were serving about 960KB. Now that's down to 240KB which is much more manageable. Due to the nature of the app (watching online videos) we know the users are going to be on wi-fi so its not that big a deal, but every little bit helps.

For some reason this took way too long to figure out, so here it is for next time.

Brainfeed — Educational Videos for Kids by Paulo Fierro

This week we had the pleasure of shipping Brainfeed, an iPad app I've been working on the last few months aimed at providing educational videos for kids, 7-years and older.

Brainfeed

Each video is handpicked by a team of enthusiastic educators from around the globe who are tasked with finding short (under 10 minutes) and documentary style videos that are curriculum based, entertaining & engaging, visually stimulating, age-appropriate and child-friendly.

The app itself is free, but there to unlock all of the content you have to sign up for a subscription. The videos are great so its well worth it.

We were responsible for building the iPad app as well as the Sinatra based backend system for adding and tagging videos.

Its something I'm really proud of and its now available on the App Store.