I've been using Overcast as my full time podcasting app for the last week. So far I really like it. Like Marco, I really love podcasts, and I have a hard time keeping up with the good ones. This app helps you discover and organize good episodes.

The gorilla occupying 33% of the room over there is Apple's Podcasts app, which syncs with iTunes. And it's not a bad app. So, in order to make this a regularly used app in place of Apple's app, it has to be pretty good. It is. Of course, it's not perfect.


This app does a nice job utilizing Twitter. If you have an episode you'd like to comment on, you can post to Twitter within the app, and it provides a link to a nice looking Overcast shell displaying the episode.

Also, within the "Add Podcast" portion of the app, there's a "Recommendations From Twitter" that looks at your Twitter stream to find podcast you might like. That's cool.


I didn't really care about playlists before I used this app. Now I feel like I need them. When I take a walk, I like to start listening to an episode at the point I left off the last time I listened. In past, if I had 10 or 15 minutes left of "The Incomparable", I wouldn't even bother trying to finish up the rest on a walk. So I would end up with 4 unfinished episodes sitting there.

With playlists, I can finish up an episode, and it will continue to the next show. I love it.

Overall Design

Marco Arment shows good taste in the design of this app. While adhering to the typical iOS design standards, there are some delightful touches he provides in the product. For example, to give a tell of which show is currently playing, there's a nice little EQ animation (using actual FFT) which also gives you something nice to look at.

Also, when looking at the currently playing episode, you have the "album art" displaying - if you swipe up on the art, you get a wonderful animation which uncovers the episode notes. This is beautiful.

In Conclusion

I think think this will be my Podcasting app of choice for a while. There are a few annoying things in the app, for example some inside jokes like "Turns Out" themed podcasts, which is the 5by5 circle's way of picking on the type of podcasters and writers who attempt to discredit common opinion. The links to the competitors within the app appears to have been added for the sake of praise, and that's fine I guess.

Up until I have preferred to stream my podcasts (I only have a 16GB iPhone). I was a bit irritated that this isn't allowed in the current version of Overcast, yet I have adapted. In fact it eliminates the major frustrating interruptions that come from streaming over cellular data. Now I simply allow the app to delete the episode once I have finished listening.

I don't really care much about "Voice Boost" and "Smart Speed" - new affects added to the app. I've tried them out, and don't find that it adds anything to the experience. I actually find "Smart Speed" a bit annoying. Pauses are there for many reasons, and I hate removing them.

These are all minor annoyances, which can be overlooked with the satisfaction and enjoyment I get from using the app.

O'Reilly Book Review - Enterprise Web Development

Written By:

"Enterprise software never changes. Consumer software changes daily."

This is how many people feel about the state of software these days. The fact of the matter is that many new devices are showing up in the work place. Your company's web apps need to change.

Many new developers know how to scratch that itch with Javascript and HTML skills - using these tools out in the publishing world. But how do these skills translate in the enterprise?

Building a cross-platform application may not be the best approach for your enterprise application. Perhaps every one of your users is sitting in a cube with a Dell pc running Windows 7. However, if it does fit your interests, if you will need your app to work well on pcs, Macs, smart phones and tablets this book will help you make decisions on your best approach.


Following along in this book, you're going to build a non-profit application using a couple of methodologies.

What's in the Box

This book has a lot of information:

  • Where to embed Javascript
  • How to use JSON and AJAX
  • Working with JQuery
  • Using Ext JSON
  • Node.js, NPM, Grunt
  • TDD with Javascript
  • Using the WebSocket API
  • Web Security
  • Mobile Hybrid platforms like PhoneGap

The interesting thing is, the focus is on using these exciting technologies in the crusty old enterprise environment.


This book - like most O'Reilly publications makes great use of code examples and diagrams to help you get involved with the ongoing narrative. It utilizes a real-world project to help you grasp the principles.

I felt that the authors were quite honest about the pros and cons of HTML5. It's pretty messy out there right now. Demand for HTML5 is very high now, however. This book will help you dig through the absolute mess of tools, standards and libraries and get you on the right track.


Use Drafts as Your Terminal

That's right - you read correctly. You can run shell scripts right from Drafts on your iPhone.

Well, not directly, but look at this tweet:

Ok, so to accomplish this, you will need two apps on your iPhone.

First set up Pushover - within the settings of the app, you will see a PUSHOVER USER KEY. Tap on the key to save to your clipboard so you can use it later (Why not save it to drafts?)

Next - set up a folder in Dropbox that you will attach an AppleScript Folder Action to. Create a Drafts action that saves your draft to this dropbox folder. Created a folder called "RunShell" (or whatever you want).

Next, you will set up your Folder Action Script to run when ever a file is saved in your folder. Grab this Applescript from @hiilppp's gist. You will need to replace the user key on line 42 with your own user key. You might also want to set up your own app token and replace the token on line 41 with your own. Next - simply save this script to the "/Library/Scripts/Folder Action Scripts/" directory.

Attach this script to your assigned Dropbox folder (mine was called RunShell, correct?). To do this, ctrl+click your assigned Dropbox folder and click "Services/Folder Actions Setup...". Select your saved script from the list and click "Attach".

Now, all you need to do is write your shell script in Drafts and select your Drafts action that saves your draft to the RunShell folder. What should happen now is you will get a notification from Pushover with the results of your shell script and a link to open the results in Drafts.

Note - for this to work, your Mac needs to be running.

Google Prettify Syntax Highlighting Test

I'm testing out Google Prettify Syntax highlighting on this site. Here's some code from the Big Nerd Ranch iOS Book.

#import "Possession.h"

@implementation Possession
@dynamic serialNumber;
@dynamic valueInDollars;
@dynamic thumbnail;
@dynamic imageKey;
@dynamic dateCreated;
@dynamic possessionName;
@dynamic thumbnailData;
@dynamic orderingValue;
@dynamic assetType;

- (void)awakeFromFetch
    [super awakeFromFetch];

    UIImage *tn = [UIImage imageWithData:[self thumbnailData]];
    [self setPrimitiveValue:tn forKey:@"thumbnail"];

- (void)awakeFromInsert 
    [super awakeFromInsert];
    [self setDateCreated:[NSDate date]];

- (void)setThumbnailDataFromImage:(UIImage *)image
    CGSize origImageSize = [image size];

    CGRect newRect;
    newRect.origin = CGPointZero;
    newRect.size = [[self class] thumbnailSize];

    float ratio = MAX(newRect.size.width/origImageSize.width, 

    // Create a bitmap image context

    // Round the corners
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:newRect
    [path addClip];

    // Into what rectangle shall I composite the image?
    CGRect projectRect;
    projectRect.size.width = ratio * origImageSize.width;
    projectRect.size.height = ratio * origImageSize.height;
    projectRect.origin.x = (newRect.size.width - projectRect.size.width) / 2.0;
    projectRect.origin.y = (newRect.size.height - projectRect.size.height) / 2.0;

    // Draw the image on it
    [image drawInRect:projectRect];

    // Get the image from the image context, retain it as our thumbnail
    UIImage *small = UIGraphicsGetImageFromCurrentImageContext();
    [self setThumbnail:small];

    // Get the image as a PNG data
    NSData *data = UIImagePNGRepresentation(small);
    [self setThumbnailData:data];

    // Cleanup image contex resources, we're done

+ (CGSize)thumbnailSize
    return CGSizeMake(40, 40);

- (NSString *)description {
    return [NSString stringWithFormat:@"%@ (%@): Worth $%@, Recorded on %@",
            [self possessionName], 
            [self serialNumber], [self valueInDollars], [self dateCreated]];