Hung Truong: The Blog!

  • December 31, 2010

    2010: A Hung Truong Year In Review

    Looking back at 2010, this year has been one of change and growth for me. I’d like to take a post and look back at what I did this year.

    January and February were kinda uneventful. I was pretty nose down trying to become a good PM at Microsoft. Oh, and I was busy making troll posts about how the iPad was gonna suck and I wrote a lot of book and music reviews.

    In March, I attended SXSW and moderated a panel that I had submitted the year before on Student Startups. I met many of my friends who I hadn’t seen in a while and met a lot of cool new people. It was from that experience that I decided I needed to stop doing what I was currently doing and change course so that I could do what I was “meant” to do. Also in March, I was rejected from the one PhD program I had applied to. In hindsight, this was probably a good thing. I’m used to rejection anyway!

    SXSW Panel

    In April I officially resigned from Microsoft as a PM after only about 7 months (and 5 managers!) on the job. I knew this was a serious decision. In hindsight, I’m glad I did it. Quitting let me focus on other cool stuff that I was meaning to get into, like iPhone (now iOS) development. In the same month I finally released an app to the iTunes App Store, something I had wanted to do for years.

    In May, I moved back to Ann Arbor to be near to my GF, which required me to pack all my crap into my Corolla and drive the whole way. I also flew to New Mexico for a wedding and got to hang out with my family. This probably explains why I have no blog posts for May 2010.

    In June I mostly basked in the glory of my funemployment and took it easy (read: I marathoned Lost). I also tinkered with my existing iPhone app and enhanced it a bit, building up my Obj-C chops. I interviewed for some jobs here and there to test out the waters, but none ended up being fruitful. The incompetence of HR departments never ceases to amaze me, but I suppose that’s a topic for a different post.

    In July I looked for some more opportunities to work with other companies. I didn’t end up teaming up with anyone, but a conversation I had during an “interview” led me to start development on Checkmate, my second app for the iPhone. I spent a fair amount of July developing and testing Checkmate. I also took a cool part-time gig with the coolest boss in history.

    August saw the release of Checkmate, which was featured in a story on Mashable! Thanks, Pete Cashmore! While Checkmate wasn’t (and it still isn’t) the perfect app, I learned a ton from developing it and gained a lot of confidence as well. I also discovered the NPR news story of that time I went on a chocolate factory tour in Seattle!

    My September was mostly spent improving Checkmate and learning about how to handle a paid app in the App Store. Doing a paid app is a quite a bit different than a free one. I also spent some time looking for an old printing press and finally scored one on craigslist!

    In October, I started working on another app that eventually became ♥s Threadless. This was the biggest undertaking I’ve done so far on iOS, and it also required me to do more complicated work in App Engine than I had done before. I also spent October tracking down supplies for my Letterpress machine, and ended up doing my first prints ever: Giraffe Coasters!

    I split my November into days where I’d work on getting better at printmaking (and coming up with stuff like these letterpress business cards) and days where I’d work on the Threadless app. I finally ended up releasing the Threadless app at the end of November. The reception of the app has been great! So far the app has 6 perfect reviews and one 4-star review. That makes me incredibly happy.

    This brings us to the current month, December. I started another app engine project that’s not quite ready for public beta yet (though I feel it will be really soon). Because of the app, Threadless was super cool and invited me to their Chicago headquarters. I finally realized one of my lifelong dreams of becoming a Threadless t-shirt model! I’ve also been hanging out in Albuquerque and spoiling my nephew rotten for a few weeks.

    And that is my 2010 year in review. One surprising thing is that many times during 2010, I was really down on myself. But looking back, I actually accomplished some neat stuff! I think it boils down to the fact that there’s still a lot of uncertainty in my life, and that’s hard to manage. But I think I’m getting better at managing it every day. In retrospect, 2010 was a great year, maybe even the best (so far).

    Looking at 2011, I see a lot of opportunity. I’m going to continue to remind myself that minor setbacks are just that. I’ll push through them and accomplish even more than I did in 2010! My role model for 2011 is this guy:

    Hopefully I’ll have some good stuff to report in a year or so!

  • December 27, 2010

    Hung Truong: Threadless Model!

    Last week I took a train out to visit Chicago for a meeting with my favorite company, Threadless! Since I wrote that app I’ve been in contact with the founder et al, and they thought it would be cool for me to check out their offices. I won’t talk about what discussions went on (I’m being held by a “frieNd-DA“), but I can say that the Threadless office is mega sweet!

    I got to hang out with some of the developers on Threadless and talked about the site and other random stuff (like t-shirt quality through the ages). I pointed out something that actually ended up being a bug that one of the dudes fixed almost immediately! Talk about transparency. At some point we were talking about how the Threadless t-shirt models are picked. Ivan (super nice guy) mentioned that the photographer might be looking for someone to model a shirt. He ended up replying and I got to model a brand new Threadless shirt in the cold, cold December Chicago air. The shirt’s called …To The Birds. Buy it today!

    The Threadless office itself is pretty nice. They moved in relatively recently so it still looks a little bare. Apparently they have big plans for decorating. I was, once again, super star struck by seeing people who I feel I know very well through their pictures on the Threadless site. I met the beard guy, Red the dog (I think it’s a Shiba Inu) and other assorted celebrities. One of the developers I met was the guy in the Mr Tee photo and another was Mario in another shirt (I couldn’t figure out which one). Oh, and I said hi to Colleen and Kristen, who I first met at SXSW!

    They let me go down to the warehouse and pick out some shirts to take home. It kind of took all the willpower in my being not to clean them out (they probably would not have let me). I got Upso, Mister Mittens and Houndstooth. I also got a cool I ♥ Threadless shirt that they don’t really sell anymore. Limited edition!

    This is probably already obvious, but Threadless is an awesome place with some awesome people making awesome things (mostly shirts). I had a blast meeting the people behind it and I hope I can come back again really soon!

  • December 06, 2010

    Letterpress Cactus Holiday Card

    Yesterday I printed out some fun cactus holiday cards and today I put them on Etsy. This is my first time making cards using a decent quality paper (Arturo Stationery from Hollander’s). I got the cactus print block from Ebay and hand-set the type that says “Happy Holidays!”

    I’m pretty happy with the result. I may end up buying the supplies to use photopolymer plates (a metal base) because this is way, way fun!

  • December 01, 2010

    Conditional GETs in App Engine

    I’m currently working on an app in Google App Engine that polls feeds periodically and then does stuff with them. I suppose I could use that pubsubhubbub thingy but I have a feeling that most feeds aren’t using this yet.

    Anyway, I did a quick naive implementation of polling about every hour or so. Apparently the feed parser I’m using is pretty inefficient because it’s eating up a lot of resources (relatively speaking) on App Engine. I remembered that the http protocol is pretty smart, and there’s a way to figure out if stuff has changed since the last time you grabbed it.

    Google’s urlfetch doesn’t seem to support conditional GETs (someone tell me if I am wrong). I looked around and found a few tutorials on how to accomplish this in Python using urllib2. The tutorials weren’t exactly what I wanted, so I had to change a few things here or there. Here’s a snippet of code that I’m using:

    import urllib2
    feed = Feed.get() #my feed object has a etag, last_modified and url property
    req = urllib2.Request(url)
    if feed.etag:
        req.add_header("If-None-Match", feed.etag)
    if feed.last_modified:
        req.add_header("If-Modified-Since", feed.last_modified)
    try:
        url_handle = urllib2.urlopen(req)
        content = url_handle.read()
        headers = url_handle.info()
        feed.etag = headers.getheader("ETag")
        feed.last_modified = headers.getheader("Last-Modified")
        feed.put()
    except Exception, e:
        logging.info(e) #just says 304 didn't change
        return
    dostuffwith(content)
    

    This handles my use case, which is doing work if the feed is new, and ignoring it if it hasn’t been modified. I could probably wrap this into a function that returned false if it the file hadn’t changed, and the content if it was new… Probably will do that next.

  • November 28, 2010

    ♥s Threadless: iPhone App Launch!

    Today my newest app was approved for the App Store (and should be propagating quickly)! ♥s Threadless is what I’ve been working on mostly for the past few weeks or so. Hurry up and download and review it, then come back here for more info about the app.

    It’s no secret that I’ve been a huge fan of Threadless since I discovered it back in 2005 (see these blog posts for proof). I really love the fact that the community provides designs and decides which ones will be printed. The company is really only there to provide the machinery to make shirts and fulfill orders! I wanted to contribute to the community by making an unofficial Threadless app (and maybe get a little store credit to feed my t-shirt needs).

    My main reasoning for writing a native Threadless app is that I found it pretty hard to browse shirts, even in a fully fledged web browser let alone an iPhone browser. The Threadless site is by no means bad, but it’s hard to see what designs look like when the images are small and on models. I prefer viewing the actual design. So I built an app that makes it easy to 1) browse and find cool shirts and 2) share them with your friends.

    In order to do this, I needed to get a database of shirts on Threadless. It’s kind of unfortunate that Threadless doesn’t have an API. At all. Threadless does, however, has a few feeds of shirts: one for shirts that are in stock and another for the weekly additions. I parsed this list of shirts and saved them in an App Engine database along with some other metadata like image urls, category info, etc. I also figured out a way to get the list of all Threadless shirts, including the ones that aren’t currently in stock. What this means is that the ♥s Threadless app will help you find more shirts than even the official website can. You can filter by category, color and run fulltext searches on the entire shirt database.

    As far as the front end work went, I had to build a custom table view cell to scroll through shirts and a nested scrollview to view shirt images. The shirt view looks a lot like the native photo browser app for the iPhone. I also added features for sharing, including saving the image to your photo album, posting the design on Twitter and Facebook and emailing the shirt design as an attachment. I figure that covers most bases as far as sharing goes.

    So far I’ve only designed and built the iPhone version. I think an iPad version would be neat, too, but I want to gauge the interest in the iPhone/iPod app before putting more time into this. If you like the app, let me know and write up a review for it!