Building TastemakerX for iOS

It's still in beta, and I'm still happily iterating over all of the features of the application, but I wanted to share the tools I used, the services I take advantage of, and overall tidbits that might be useful to fellow developers about how I've been building TastemakerX.  Maybe you can in turn share some things with me.

Tools that made my life easier.

Spark Inspector

Spark Inspector

Spark Inspector

Both it and Reveal popped up around the same time, but since then I've been using Spark Inspector as a tool to debug view-related things.  We've all done it, make a view's background bright green or whatever so it'll stand out.  Now I skip that as this allows you to visually troubleshoot, move the frame of views around, change colors... basic stuff, but very helpful.

We've all had the "That view is supposed to be right there!".  So you jump in to 3D mode, see where it actually is, and go from there.

 

Cocoa Pods

I was pretty hesitant to jump into Cocoa Pod land.  If you're not yet familiar, it's a manager for dependancies.  Somewhat akin to a "package manager" for Objective-C libraries.  Like gem, or npm, pear in other languages.  I saw it as exchanging Objective-C dependency hell for Ruby dependency hell.  And frankly, I prefer the Objective-C version.  But I experimented with it on some test projects, and saw that I had no issues.  So I made the decision to use it with TastemakerX.  I'm glad I did.   I do a "pod update" after each release, and I know I'm always up to date.  It also makes experimenting with third party libraries simple.  Add it to your Podfile, "pod install", play with it.  If you don't like it, remove it from the Podfile and move on.

Cocoa JSON Editor

Cocoa JSON Editor

If you're building the client, but not the API there's often a stage of experimentation.  This is where my experiments took place.  I was able to quickly make requests against the APIs and figure out exactly what it was I was trying to get back.  Not just for our internal API, but third party services as well.

It also really helps the scenario when you need a mocked up API endpoint.  It allows you to create data models, and the built-in web server will map it to a path.  Point your client to it and off you go.  Within seconds you went from a non-existent API to an endpoint with mocked up data.

Cocoa JSON Editor

Cocoa JSON Editor

Colorbot

Colorbot

Colorbot

I kind of wish this was a built in developer tool with Xcode.  While I'm sure you're like me, and have your UIColor+CustomColors category, it's really nice to be able to visually organize the color scheme you have for your app.  You use the colors everywhere, so they should be available, definable, and exportable.

So your UIColor category works great in your app, but where do you go when you need that color in your image editor?  Or a CSS file?  Colorbot makes exporting a color easy as a NSColor, UIColor, hex, and more.

 

Third party tools for working with Core Data

Magical Record

Both this and mogenerator was suggested to me by a friend.  While I was hesitant to throw a layer on top of Core Data I experimented a bit and saw the advantages.  The big win with Magical Record is simplifying handling Core Data across multiple threads.  You really shouldn't be doing any Core Data stuffs on the main thread, so any way to make your life easier here is nice.  It likes using blocks, and so do I, so we became fast friends.  It'll give you the managed object context for the current thread you're in, and a block to do work in.  The downside?  Documentation.  It's kind of all over the place.  Certainly read through the header files.

mogenerator

A nice little utility that will take your Core Data model and create two class files from it.  One with all the stuff a managed object should have, and one subclass where you get to put all your custom code.  It really does make things more manageable. 

 

External Services

Runscope

Run, don't walk, to get yourself an account with Runscope.  At its core, it works as a proxy between you and your API.  Don't let that scare you.  Because it's the middle man it's able to capture, in detail, the activity of your application.  Each request is shareable.  So if in testing you see something weird you can simply log into Runscope, grab the url of that request and share it with whoever may be of interest.  Even if they're not a Runscope user.

Other really useful things include bringing attention to all requests that have resulted in an error or requests that took too long to execute. Now with Runscope Radar you can turn a request into an API test template to make sure that thing that was broke stays fixed.  Oh, and it pretty prints the JSON of each request.  Could you do all of this with in-house unit tests, a copy of Charles, and your clipboard?  Sure, but not this good.  It just works.  I wouldn't be overestimating if I said it has saved me days of work.  And the same can be probably said for my teammates who I send Runscope URLs to saying "Could you look at this?"

Runscope

Runscope

Crashlytics

If you're like me you've tried a few crash reporting services.  Also if you're like me you've kind of been annoyed by all of them in some way or another.  Crashlytics wasn't really on my radar until I went to the Twitter mobile dev event a while back.  They gave a demo of Crashlytics and it caught my attention.  It works just like any other crash reporting service, but the difference is it runs a service in the background on your build machine.  This may bother some people, but it's nice that it's taking care of grabbing the dSYM and keeping track of archived builds without me taking extra steps.  Because of this I've also not had to spend a single second manually symbolicating crash logs that Crashlytics hasn't been able to handle or because I forgot to upload the dSYM.

Another nice benefit, It allows you to set arbitrary keys as your user progresses through the application, so I know of things like the last artist id a user viewed, or a chart they were checking out.  Oh, and it's free.

Product Development

When I started at TastemakerX one of the first things we decided was that we'd be making a rather large change from the idea of the v1 product they had already built.  So we spent some time really knocking out what we wanted this product to be.  During this time I still wanted to be working on some useful code.  So I built some standalone sandbox apps to work out things like networking, image handling, Facebook Open Graph, playlist generation, etc as reusable classes I could seamlessly move over to a production app once we knew what the app would entail.

I know most projects don't have the luxury to start working on the application before they start working on the application, but it gave me a nice head start.  Not to mention it enforces solid design patterns when you're writing code not knowing how you'll be using it later.  There's no UI to contaminate your thinking.

 

Some things I've learned

I would hope every project I ever work on I'd learn something new.  This is no exception.  Maybe some of these might jog something you might want to look at.

  • Storyboards are fine.  Use them, or not.  I don't care.  This was my first non-sideproject storyboard from scratch application I've done and I made the mistake early on to try to *only* use the storyboard.  Know when it doesn't make sense, and go create your nib files.
  • Don't mix up objectWithID, objectRegisteredForID and existingObjectWithID.  Just saying.
  • You're probably not using NSSet/NSOrderedSet as much as you could be.
  • You're also probably not using NSCache as much as you could be.
  • Take advantage of iOS 7's performFetchWithCompletionHandler.  You have a background window of time to do some work.  So instead of just fetching new data, maybe also do some of the post-processing you would normally have to do when the UI is up.  Maybe pre-calculate the height of UITableView cells for this data and cache that for later, or if you downloaded some images that need to be resized take care of some of that.  But there's only so much you can do in this window, so be smart about it.
  • Speaking of UITableView, check out iOS 7's estmatedHeightForRowAtIndexPath if it makes sense for you.  It'll postpone the height calculation for a row until it's rendered instead of upfront.  This makes more sense on older devices, but on the flipside you might see some frames drop the first time the actual heightForRowAtIndexPath is called to calculate the real height when the row is being built.
  • Aside from the audio playback manager, almost every instance of KVO I originally implemented eventually got ripped out.  What seems like an elegant solution using KVO is probably just making things over complex.  Think about if that's really the solution for the problem.
  • I have all network calls go through a singleton and fire off completion blocks.  That's worked really well and in retrospect I wish I did the same thing with Core Data.  On the same topic, if I were to go back (and might!) I would never pass back managed objects.  Use Core Data for storage, and build standalone, separate objects out of them.  Each object can have a reference to its Core Data counterpart for CRUD operations.

So that's my little rundown on things I found useful or interesting so far with TastemakerX.  I'd love to hear things that you're using to make your life easier or things you wish you would have known when you started as well.  Have fun, mobile friends!

Iterate!

My thoughts and experiences on the Pebble Smart Watch

LIke with a lot of things in life I told myself I didn't want one.  And then when it came down to it I realized I was lying to myself and I actually did.

This was the story behind the Pebble Smart Watch.  Once people started getting them delivered, and I read this review I knew I must have it.  Luckily Criagslist exists and people were selling theirs.  Watch acquired.

@franktronic asked if I could write a mini-review of my experience thus far with the little gizmo.  I figured why not.  But you should also read the awesome Five days with Pebble by Danilo Campos as he's much more eloquent than I.

I'll be going at this from the perspective of an iPhone iOS 6 user, since that's my primary device.

Out of the box I was slightly frustrated quickly as I learned of the things that it couldn't do.  "I can get my Twee...oh.  I can get my Faceboo..oh.  Well, at least I can get my SMS."  Knowing that I couldn't get my Tweets on my phone wasn't an answer I could accept. So I went ahead and Jailbroke my phone ASAP to install BTNotificationEnabler.  Success.  Now I can get the notifications I want on my Pebble.  A huge difference.  Without this hack the Pebble sadly would be useless to me.  It's just not enough to dismiss phone calls and read text messages.

The next thing I experienced was a period of learning to trust the watch.  I'm used to my phone vibrating.  Now my phone and my watch would vibrate at the same time.  I'd glance at my watch, dismiss the notification, and move on.  But a minute later my phone would vibrate again... but not the watch.  Why is that?  I had the setting enabled to remind me about missed notifications.  The iPhone had no idea I saw it on my watch and therefore was going to remind me until I look at it on my phone.  I dealt with this a couple days until I figured that Pebble was here to stay, so I turned not only repeating reminders off, but I also turned off vibrate on silent.  My watch is now telling me what's going on.  No need for my phone to duplicate that.

For controlling audio apps on iOS is works great.  I feel it to be a bit odd that you have to launch the "music app" on it.  It would be nice for it to detect that audio is playing on the device and switch to that for you.  And when audio ends for it to switch back to the watch face.  But that's a minor gripe.  I've been using it to control both Downcast for Podcast listening and Spotify.

Not that I care about its watch, time telling, functionality, but it's fine.  You can download different watch faces.  My guess as time goes by there will be some really cool ones that become available.  Right now I'm using the "Text Watch" that everyone else who owns a Pebble seems to be using where it tells the time in a "Five Twenty Two" format.

I wish it would queue up notifications.  Right now if another notification comes in before you saw the previous one you won't see the first one.  Doesn't seem like a big deal, but if you're at dinner with somebody, and trying to be polite, you may not want to check your watch every time it buzzes.  In fact a motion that looks like you're checking the time every couple minutes may actually be more insulting than pulling out your phone.  Having your phone out all the time has sadly been accepted.

As far as battery life, it's lasting about as long as I'd expect.  I think around five days'ish for me.  They're saying it should be seven, but close enough.  However, I'm experiencing an issue where the Low Battery notification comes far too late.  It's supposed to come when I have about 24hrs left, but usually it hits me when I'm around 1hr left.  Without a charger at work (you can't get an extra cable at the moment), my watch will die before I get home.  I'd prefer to get that notification in order to charge it the night before it plans on dying on me.  This seems to be a bug, and I've sent them logs.

Aside from those couple small items it's been smooth sailing.  Someone looking for me on IRC?  My watch lets me know.  Someone mentions me on Twitter?  Even if I'm half way across the office away from my phone, Pebble is letting me know.  Delivery notification for a package sent to me via Push Notification?  Now it's on my wrist.  Not to mention the regular stuff like dismissing phone calls, reading emails, and seeing text messages come in.

And it has a backlight.

Gabe's 2012 Year in Review

It's time for my mostly-annual "stuff and things" post.  I've missed some years, but I think I have more new stuff this time around.  I'll try and detail all of the software, hardware and services that I've used this year to make my personal and professional life better or more interesting.

Software

Desktop (OS X)

  • Xcode.
    Love it or hate it, I live in it.  Actually, I don't know if I love it or hate it.
  • Transmit.
    For many years in a row it's been my OS X FTP client of choice and I'm still very happy with it.
  • Textual.
    I switched OS X IRC clients this year to to Textual.  It's open source, and it's pretty customizable.  It's done me well, while admittedly my requirements in a desktop IRC client are minimal these days.  Not like the crazy stuff I used to do back in the "good ol' days".  This app doesn't seem to be actively updated on the App Store, but it's open source so I just compile it myself.
  • Tweetbot.
    The Tapbots guys can do no wrong, and I was happy to pay anything they wanted when I found they were coming out with a desktop version of Tweetbot.  
  • Chrome.  
    It has been my browser of choice.  I don't know why.  I guess it's faster?  I'm pretty browser agnostic, in general.  As long as you can build plugins for it and it's fast I'm fine.
  • Textmate / Sublime Text 2.
    I've been using the same old version of Textmate for years.  But I'm trying to move over to Sublime Text 2.  Sometimes I forget.  But Sublime Text 2 is better,  the features are handy, and it's faster.
  • 1Password.
    A great password management application for desktop and mobile, 1Password makes my life easy by managing all of the many developer accounts I have, as well as the ever growing social media world.

Mobile (iOS)

    Workclub

    • Tweetbot.
      Same as above.  But for iOS.
    • SF Climates.
      A weather application for the many micro-climates of San Francisco.  Everyone in SF should have this because it works.  Nobody outside of the city limits has a use for it.
    • Reeder.
      I don't use this because I love it, I use it because it currently works for me.  I require a RSS reader that will cache posts offline so I can read them while on BART.  This does that.  I'm always keeping my eyes out for something better.
    • Downcast.
      After moving to SF I started listening to Podcasts again.  When in Omaha I stopped listening all together, mostly due to a lack of a commute.  Here I'm listening to them just as much as I was in Chicago, and I'm again hooked.  Downcast is a really great podcast consumption application.  It has everything that I could want.  Things like playback speed, dynamic playlists and geo-fencing makes this the application for people who take podcasts seriously.
    • Highlight.
      As a fan of social-by-way-of-digital having an application that just tells me who's around is interesting to me.  I can ping those people that seem interesting, and you never know what will come of that.
    • Workclub.
      This is a new application from the Coffee & Power people.  It's something that I don't exactly know the true value of yet, but I think will become apparent before long.  As people are checking into their respective locations, it's cool to know what people are working on, and where.  I think this information can be invaluable at some point in the future when you realize "Hey, I think I saw a guy working on X at Y.  I should get in touch with him".  I almost want to think of it as virtual coworking.  I look forward to see what it does in the next year.
    • Routsey Pro.
      It tells me the when's and where's of the public transportation system of the Bay Area.  I set bookmarks of the stops and routes that I rely on and it becomes a one stop view of how much time until another one goes by.
    • Lyft / Uber.
      Lyft is my first choice for having a car pick me up and bring me somewhere,  it's cheaper than Uber.  But sometimes demand isn't in my favor and I go back to Uber.  Both are awesome services when using their application will tell someone behind a wheel where to get me.  And best part: no paying with cash.

    SF Climates

    Downcast

    Services

    • Spotify.
      I was a Spotify user years ago.  I had a fake UK account and I used a UK proxy server to access it.  Eventually they shut me down and I no longer had access to the service.  When Rdio launched I became a happy subscriber and used that until Spotify came to the US.  After comparing and contrasting side-by-side I again went back to Spotify mostly due to the API.

    • Evernote.
      I'm not sure why I pay for Evernote.  I should stop.  I use it plenty, but not enough to require the paid plan.  It's my cloud-based dropbox of text that I always know is accessible everywhere.  I use it for everything from todo lists, to just sketching down notes.
    • Cloud.ly.
      Such a rad service.  I have a little menu item that sits there waiting for me to drag something on it, and when I do it uploads it and copies the URL to my clipboard.  As simple as that.  It'll also auto-upload screenshots.  It works great and I use it a ton every day for sending files around to people.
    • Hover.
      My domain registrar of choice.  It used to be the old "Tucows Domains" from the day, but rebranded.  It's a simple, clean service.  If you think about what the complete opposite of GoDaddy would be, it would be Hover.
    • Fastmail.
      I continue to use Fastmail.fm as my email provider.  I pay them every year to do nothing but accept email and make it accessible to me.  They're not going through my email and selling the data to the highest bidder, and aren't trying to make me into a webmail convert.
    • Dropbox.
      Dropbox is kind of like the working directory of my life.  All documents, code, images, etc hang out here.  It's nice to know all my stuff is accessible from anywhere I happen to be.  Throw something in there and then grab it again from my iPhone or at work.
    • Testflight.
      TestFlight makes the life of any iPhone developer easier.  I use it both personally and professionally to send out test versions of applications I'm working on.  Without it the test process for normal users is a little more convoluted than you'd like, but using Testflight it's fast and easy.  Plus they add things like bug reporting, checkpoints and install reporting.  For free.

    Hardware

    • iPhone 5.
      The upgrade from the iPhone4S to the iPhone5 was one of the bigger ones.  It's substantially faster and the screen is a great size.  The memory bump in it makes a huge difference as well, as apps that are "in the background" take a lot longer to get killed by the OS.  Something I launch before work now is still alive when I go home.
    • Klipsch Image ONE headphones.
      The pair of headphones I've had for years, and really liked, a set of Sennheisers, finally reached their end this year so it was time to find a new pair.  I figured I'd use the Apple Store as my venue of choice to try out different options, since they had them physically there and it was easy to return if needed.  I tried a couple different ones and returned them.  I even thought I'd give a brand I wouldn't normally try, Skull Candy, a shot.  For your future reference the "Aviators" were awful.  Just awful.  More proof that headphones associated with a rapper (Jay-Z in this case) are bad.  Anyway.  I really like this pair of Klipschs.  They are over the ear, light, and mobile.  Perfect for my commuting and listening at work needs.
    • AppleTV.
      Next to my iPhone my AppleTV is the piece of hardware I use the most.  I purchase current shows through iTunes.  I stream movies through Netflix.  New movies I rent through iTunes.  If I wanted to use Hulu, that's there as well.  I've amassed a digital library of episodes of my favorite shows I can watch at any time, and I often do.  It's also a great AirTunes receiver where I send it music from Spotify from my Macbook Pro, iPhone or iPad to fill my apartment with tunes.  This piece of hardware is the most underrated Apple product, and I'm a fan.

    Misc

    • 1-800-Got-Junk.
      When I moved from Omaha to SF I had a ton of stuff I didn't know what to do with.  I hate selling things, so I figured I'd offer everything I had to friends, and anything left would just get disposed of.  1-800-Junk to the rescue.  They showed up with a truck and took everything I pointed out into their truck, and then charged me less than I expected to pay.

    Media/Music and Podcasts

    • These are the podcasts I'm currently subscribed to:
    1. Tech News Today.  A daily podcast detailing a succinct dose of what you need to know in the world of technology.
    2. MacBreak Weekly.  A weekly podcast discussing the world of Apple products.
    3. this WEEK in TECH.  A weekly podcast discussing everything that happened in tech in detail.
    4. You Look Nice Today.  A comedy-ish podcast that is just three funny guys chatting.  From the mind of Merlin Mann.
    5. MacCast.  A weekly podcast about the world of Apple products.
    6. Debug.  A new podcast that focuses on the world of iPhone development.  Great guests/interviews and really goes in depth with some of the great applications that live in the Apple ecosystem.
    • As far as the musical soundtrack of 2012, I can't say there's a ton of really new stuff that I listened to.  A lot of stuff that's just "new to me".  I can say the new Blaqk Audio album was way rad, and I listened to that a ton.  Also the first full length album from Stepdad was something I recommended to people.  Marilyn Manson came back with a vengeance with the new album "Born Villain , I enjoyed that quite a bit.  And last, but not least, Mark Mallman's epic adventure "Double Silhouette" is a masterpiece.  My favorite Mallman album, and that's saying a lot.  I feel like he's taken the songwriting and construction of these songs in a new direction that I really like.  That on top of the obvious attention to detail of the production quality makes it a must listen.
      Anyway, here's a list of songs I've listened to a lot in the past year with the help of Last.FM keeping track of that for me.

    Here are some older year in reviews to compare if you'd like.

    Respect for gender goes both ways. A rant from a modern male.

    I'll probably upset a lot of people because this is something that people just don't talk about, and would be seen as weak if said out loud.  But here it is: I'm sick of the male stereotype.

    You know how "woman, get in the kitchen!" is a totally not ok thing to say?  For so many reasons, not just because it's demeaning, and it attempts to put someone in their place, but also as a person... maybe they don't like making sandwiches.  Just because they were born a female has nothing to do with their ability, interest, or responsibility to make you a sandwich.  So why is it completely ok to expect males to be the stereotype of "masculinity", and see something wrong with them if they're not?

    This post was shared around the internet a lot today.  A terrifying story of a young woman verbally assaulted on a train.  But in her sad story of how she's repeatedly disrespected due to her gender she unapologetically stereotypes a "real man" simply as someone willing to get violent on her behalf.

    Encouraging violence is not ok.  It continues the eternal stereotype of "real men" as those who are inherently violent at their core.

    If it were me, violence would be the last thing on my mind.  If I saw a woman being harassed I'd ask the person to stop.  I'd call the police.  I'd do any number of things.  The first thought in my mind would not be to tell the woman "if they come back I'll beat them up for you."  What kind of reaction is that?  Why do women find that comforting and not terrifying?

    This is just one example.  It's commonly accepted that I should know how to fix cars.  I should enjoy going to and participating in sporting events.  "What are you, gay or something?" I get asked if I turn down a girl's advances.  A girl who sleeps with every guy is seen as a slut, but a guy who does it is expected.  If he doesn't, there's something wrong with him.

    "Man, get in the garage!" is an attempt to put a male in his place just like the sandwich making.  Both use gender stereotypes to determine their role in the eyes of another person.

    Girls, welcome to 2012.  Where guys like me enjoy going to see musical theatre, sing along to Ace of Base, don't know anything about cars, and would much rather hit up a museum than a sporting event.  You don't have to like it, but know there are a lot of us.  And if your idea of a "real man" is someone who will simply kick someone else's ass, then you're not the type of girl we want around us anyway.

    Guys, welcome to 2012.  Where guys no longer harass women on trains and you treat them as you'd want to be treated.  With respect.

     

     

    I've lived in San Francisco for a while

    I was asked a few weeks back why I haven't written a post on my blog since I've been to San Francisco. I mean, there must be a lot of stuff to talk about, right? It's a pretty significant move and maybe the world wants to hear me blab about it. But I think in general I have been blabbing about it, but in more specific channels.  But that's not to say I shouldn't have a larger periodic update.  And I'd probably miss a ton, so I'm going to do the generalizing thing instead of trying to think of every neat thing specifically.  Ok, I'll throw some specifics in too. San Francisco is like a custom-made little city that was built just for me.  The fact that I'm sure a lot of people feel that way speaks to the variety and life that this little big city brings.  I remember the first time I went to the Cat Club and the DJ played Prodigy's "Spitfire".  I looked to my friend and said "I don't remember the last time I heard The Prodigy played publicly."  It's one of those tiny moments that bring things into perspective and made me glad I was here.

    Obviously I love music, and this city is great for the music that I enjoy.  Just like Omaha is a great city for people who enjoy acoustic guitars and singer-songwriters, San Francisco is great for people who enjoy synthesizers, and electronic drums.  Other things too.  I just happen to like things I can dance to.  I can go out multiple times a week and dance all night to VNV Nation, Apoptygma Berzerk, and Nine Inch Nails from a DJ; surrounded by other people who enjoy it as much as I do.  It's a city where all the artists that I enjoy come through, and I really have to pay attention to the concert calendar so I don't miss something.  There's so much.

    One time at pride after getting backstage at a DJ VIP area I danced on stage in front of all of these people (below).

    The people here are an interesting breed.  In general they're all young, all good looking, and all full of energy.  They don't get married young, and they don't have children.  My kind of people.  It's easier to meet friends because there are just more people able to go out without finding baby sitters.  There's an overarching trend of people being "outdoorsy" here.  Like hiking, or camping, or white water rafting or whatever.  This puzzled me when I first moved here.  How is everyone doing this crap?  I don't even walk on a single blade of grass in a day (100% true), so where are they setting up a tent?  It doesn't snow, where are they skiing?  But it seems that SF is close enough to all of these places.  And while I do believe people do enjoy it, I think people make a bigger deal out of it just to fit in, since everybody else climbs mountains, there's pressure for you to enjoy that too.  FYI: I don't climb mountains.  But outside of the people who obviously try and fit in, people here are awesome.  They're crazy.  They lack in inhibitions.  They do what makes them happy.  It took me zero time to feel at home here.  These are my people.

    One time Andy Peters (@andypeters) came for WWDC and I dragged him to Bondage-a-go-go, my weekly dance club night.  It was totally rad to be able to bring one of my good Omaha friends out with me in San Francisco.  He had a blast.

    I expected when I came here to throw myself head-first into the startup culture.  I mean, this is the center of the technology world.  But that hasn't been the case.  I think it's simply because I'm enjoying myself at my current position and I'm not looking to throw myself into something else right now.  I'm making video games, and it's brand new to me.  Something new is always a ton more fun, so I'm enjoying it immensely.  My company is great, and I enjoy everybody who works there.  I tell people it's like going to summer camp every day.  You work on projects together with peers, but in this case we make money off of our projects, and still have fun.  Though I know myself well enough that somewhere down the road I will be looking for "what's next?", and I couldn't be in a better place to find out.  But I know I need to get out there and start meeting people to make that happen.  It's just hard when you work late nights in Burlingame, ya' know?

    Speaking of work, one time I launched a video game with an awesome team called Fish With Attitude.  It's a pretty fun game, if I do say so myself.  It's being rated very highly, it's ranked in the Top 10 of the Apple App Store, and the players love it.  In fact, we received a marriage proposal from someone who enjoyed the game so much the other day.  Crazy.  Here's everyone that's ever been involved with it at a bar.  And a random review someone did of it.

    Did you know there's a place where you can order almost any kind of food, completely online, at almost any hour of the day?  That place is San Francisco, and they realize sometimes you just need a calzone at 3am.  Seriously, you don't even have to call them.  Order from your iPhone if you want!  This fact cannot be overstated.

    So that's that for now.  Rock on.

    Another adventure begins. Goodbye Omaha.

    My time in Omaha is coming to an end.  On Friday, February 3rd I'll have relocated to San Francisco. When looking back at the past three years it's hard to decide what to put in this rather long retrospective post.  But I'll use it as my last opportunity to highlight, clarify, give thanks, and try to explain why I'm taking on this new adventure.

    I moved to Omaha thinking I'd have to dodge cows on the way to the office every day.  I thought I'd really dislike the city, but the job I moved here for would make it worth it.  Many of you know how quickly I discovered the opposite.  I fell in love with Omaha, its people and vowed to leave my job within a year.

    Being around the Omaha community I learned, for the first time, about taking risks, trying something new, and that putting your all into something wasn't just something for the "other guys", it's something everyone should do.  I knew quickly I needed something more than "a job".  I also learned of the support system sometimes needed in order for you to take those risks.  Omaha provided that for me.

    I attended the first Big Omaha and  left with an idea.  Something I wanted to build because I wanted to use it myself.  The idea of Hollrback was born.  With the help of my friend Kat I compiled a video to try and drum up some support for the project.  Before long project "Mysterious Dottie" was in full swing.

    Through the experience of Hollrback, among many other things, I started to learn the city that I previously decided I'd be more than happy to live in for the rest of my life may not be for me after all, at least in the short term.  I started to feel like personally I was missing out on something.  Something I've been needing to learn, not even knowing what it is.

    On top of that I've been slowly finding that my idea of the startup culture that I wanted to experience was something different than what was aimed for in the Prairie.  I wanted endless incubators, .com veterans, mentors and people willing to invest (not just financially, but that too) into the people here.  It made me realize instead of continuing my never-ending stream of regional constructive criticism, trying to turn it into what I want it to be, instead I should just go.

    This isn't easy, though.  I feel like I'm giving up on Omaha.  I care a lot about this place, the people.  I know many are probably thinking by this point "just go already and shut the hell up", but I've always only wanted the best for everyone.  I wasn't always happy with just warm fuzzies and people giving each other high fives and pats on the back.  To me it's not about how many people can think nice things about other people.  To me it's about execution.  I've failed with my first attempt at execution, but damnit I tried.  I've wanted Omaha to be full of people building awesome stuff to fulfill whatever vision they have.  But it's a very service-oriented city.  Consulting firms, financial services, branding agencies, development houses.  I'm not interested in doing work for people.  I want to build stuff to put into real people's hands.  The public.  Not ten people in an office somewhere to help them turn $1million into $2million.

    But I never would have known this about myself if it weren't for Omaha giving me the opportunity to learn it first hand.  Seeing the DownsDesigns, the What Cheers, the Princess Lasertrons, the Rahul Guptas, the Secret Penguins branch off from whatever they did before and start doing their own thing under their own rules.  Showing me that "having a job" is never the goal, and it's about doing something awesome that you care about.

    I wouldn't be moving on if it weren't for Silicon Prairie News highlighting others and giving me something to aspire to.  For highlighting little things I do, even when I tell them it's dumb.  (The post they wrote about my Chrome Plugin was the 2nd most read story on SPN last year, after I told Danny it was stupid and a waste of his time.  He did it anyway.  I was wrong.)  For creating Big Omaha and letting that inspire me to try something for myself.  Danny, Jeff and Dusty are probably sick of listening to me after three years, but I've never had anything but the upmost respect and admiration for what they're doing.  For reference: Here's the full catalog of things they felt worthy of discussing when it came to me.

    As an example of SPN picking up on the goofy things I do in the early days, here's the first interview they ever did with me to discuss "Retweet Thursday".  News was slow back then.

    Going forward I just hope something I did here in my short time has made some kind of impact. I always tried to be the best representative of the city of Omaha as I could be when going out to meet the rest of the world.  I always told them how if you need to go somewhere, and you don't know where to go, put Omaha first on your list.  This place can give you clarity that you didn't even know you needed.

    I'm not one for heady advice one liners, but I can leave with you the one thing I told myself when given this opportunity to pick up from my Omaha life and build a new one:  Live the life you'd be jealous of.  So that's what I'm doing.

    Come visit some  me time.  I can't promise I'll have room in my apartment, though.  Housing is a little tight out there.

    Embarrassment is embarrassing.

    I haven't updated many people on what i've been up to lately.  And there's a simple reason for that: embarrassment.  It's not fun to talk about being a failure.  Part of me didn't want to be dramatic in telling a story and having people read into things, but I'll try to be a little more transparent and see where that gets me. Maybe the last thing you knew was that Hollrback launched, I was traveling around talking to amazing people about it, and getting awesome feedback.  And then things kind of hit a brick wall.  I ran out of money to sustain myself, and I knew that if I could no longer eat or have a place to live that Hollrback would ultimately suffer.  So I made the really hard choice to give up with ad-hoc projects and dedicated Hollrback efforts and get a "real job" in order to keep things afloat.

    This is how I failed Hollrback.  This is how I failed Omaha.  This is how I failed my friends that had faith in me.  I had to cave and push Hollrback aside in order to survive, in order for Hollrback to survive.  I was once told by a representative of a local tech blog that Hollrback was no longer a "company", but a "small side project" due to the fact that I had to get a job.  I was completely crushed.  I'll never forget that feeling, Hollrback was now seen differently because I needed to be able to pay rent.  Now I wake up every morning, look in the mirror and see a fuckup.   Everything negative that comes to me I've seen since then as justifiable punishment for not being good at what I do.  If you've never been there I don't expect you to understand.

    I really, really tried.  It's really, really hard.

    This was months ago.  As time went on deadlines took time away from what I was passionate about and put energy into what I had to do.  Don't get me wrong, my job is great.  I'm building some neat stuff for neat people.  But Hollrback was getting farther away from me every day.  I didn't know what to do next.

    I was alone with a product that I saw as something the world could really use, and I had no idea what to do with it.  It wasn't about money, it only had to do with my inability to do anything successfully.  I have no idea what I'm doing, and I've been pretty honest about it if you've ever approached and asked me.

    Early on I was pretty confident I would build a great product, but I had no idea how to build a great business.  So my plan was to surround myself with people that would work with me on that journey.  Ultimately when it came down to it none of that really worked out. Not for any reason in particular, it's just hard.  Everyone involved has been top notch and I think highly of them.  But once I found myself stuck I put all pride aside and started to contact people that I respected, and others I didn't know but who others respected.  Some pushed me aside, others replied with an "it's ok to fail".

    And that's what you're thinking right now, aren't you?  I get it a lot.  "That's too bad.  What are you going to work on next?"  I feel pretty strongly that if you had something you were ready to jump on at the first sight of strife that you never really cared that much about what you were doing in the first place.  I don't have a plan B or a "next idea".  What's wrong with this one?  It's not Hollrback who failed.  It's me.  It's just me.

    In my mind I ask a series of simple questions.  "Is Hollrback pretty great?  Yes.  Does people think highly of it?  Yes.  Do people want it to succeed?  Yes.  Is there a competitor in the space that has succeeded where Hollrback could not?  No."  If any of the answers were any different than those I'd gladly pack up my code and move on.  But Hollrback is bigger than myself.  It has nothing to do with me, my success, or me being right or wrong.  It's about giving something to the world that I thought that it could use.  If I ever felt that it wouldn't benefit people I would have given up.  It's never been about me.

    That being said, I'm trying to figure out what's next that's in Hollrback's best interest.  In no scenario would folding it benefit anyone.  Remember when I asked if there was currently a better solution than it, and I answered no?  If there was, then I'd let them do it and I'd be a happy user of their service.  But even the people with millions of dollars behind them (and have copied some Hollrback functionality, I'm honored) can't make things take off.  To me that's called an even playing field.

    So I'm looking at options.  I think the incubator/business accelerator model is perfect for me.  I want to be surrounded by people who have done it before.  But Omaha doesn't currently have anything and the "big ones" out there care a lot about you having an awesome team, and I have no team.  It's just me.

    So that's that.

    I thought about disabling comments to this post, since I assume the responses will be over simplified (everybody seems to know what's best when they're not involved), but go ahead.  Tell me what you would do if you were me.  Keep in mind this isn't a product issue ("U SHULD ADD BADGES AND INSTAGRAM SUPPORT"), but a larger issue regarding myself and my attempt to give something to to the world.  If you know someone that might be interested in talking with me, go ahead and share this post with them, I'd love to chat.