Professionally Unemployed

I used to be a workaholic. Then I quit my job. Turns out the habit is harder to kick than I thought.

flythisthing:

Hi. I decided to start keeping track of things while I learn to code. I wrote this one after the fact, so future posts will be more explicit in errors, commands, and sources.

After accepting my Friday and Saturday decisions during the morning hours, on Sunday afternoon I was ready to do work on solving an error. And I was apparently ready to break BASH, break it real good and thorough-like. I wanted to fix a problem, didn’t know what a PATH was, what a bin was, or wtf a chown was, so I rm -f’ed my way into a command line that could only cd into files.

The original error (which now, looks like a tiny inconvenience) was thrown with the jasmine-headless-webkit gem, which requires the qt library I had installed with Homebrew. It (qt) wasn’t properly accessible because it had been relegated to an Xcode directory not included in PATH. If that sounds like a bunch of pretty, made-up words to you, I felt the same way at a point I can count back to in hours.

To illustrate, this is a picture of what at one point looked like a great idea (no).

Here are some lessons I learned.

1. PATH is a really really powerful resource to understand. It is easy to access your profile in your home directory under ~/.bash_profile (I mean, when you have un-broken your system enough to get yourself an ‘ls’ command, hot damn). It’s also easy to very thoroughly ruin things.


2. RVM is a good thing.

  • Its docs were super helpful when I thought that I had killed Rails for everyone (I had only obscurred the command ‘rails’): https://rvm.io/


3. MacPorts is not my jam.

4. ‘rm’ means rm, which means remove files only when you mean it.

5. -f, —HARD, and sudo are not good decisions when your inner monologue is getting vulgar or when you’re distracted by a side game of Emoji Movie Titles.

6. Related to 4, when everything blows up, don’t get obsessed with solving it immediately. Let a friend or a kind hostage take you to ice cream. There’s no reason to sit there and bang your head against a wall that could fall away as soon as you get some raspberry sorbet and perspective away from the problem.

7. Contradictory to 5, don’t give up. If you messed it up, you can hack it back together (right?).

Block Image Loader

I ran into a problem recently when I needed to load UIImages from remote URLs into cells in a table.  I’d been using this category from Lane Roathe and it works okay for loading images into UIImageViews, minus a few issues.

  1. It’s leaky and throws runtime warnings.
  2. I needed to draw the UIImages directly onto my cell, not place them in a UIImageView.

So I decided to make a little utility using blocks that could load and cache the images for me.  I started by loading images the usual way using NSURLConnections.

Begin Load:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];

        NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

        if(connection) {

            receivedData = [[NSMutableData data] retain];

        }

End Load:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    UIImage *downloadedImage = [UIImage imageWithData:receivedData];

    [receivedData release];

    [connection release];

    [loadUrl release];

}

This works fine, but it’s pretty heavy to write over and over again, so instead I wrapped it in a class and set it up to call blocks when it’s finished.

+(BOOL)loadImageWithURL:(NSString*)url withLoadCompleteHandler:(URLImageLoadCompleteHandler)handler {

    BOOL connectivity = [URLImageCached hasConnectivity];

    if(connectivity) {

        URLImageLoadOperation *operation = [[URLImageLoadOperation alloc] init];

        [operation loadImageWithURL:url withLoadProgressHandler:nil withLoadCompleteHandler:handler];

        [operation release];

    }

    return connectivity;

}

Now things are much easier, I can load images with a call like this:

-(void)loadImage {

    BOOL loading = [URLImageCached loadImageWithURL:@”http://imageurl.png” 

                           withLoadCompleteHandler:^void(UIImage *loadedImage, NSString *url) {

                               //Handle loaded image here. Set it to a UIImageView. Whatever..

                           }];

    if(!loading) { NSLog(@”You’ll need internet for this.”); }

}

Voila, images are loaded, and I get to use blocks.

Grab the source: https://github.com/andrewzimmer906/Block-Image-Loader

XCell

A better way to create efficient and performant UITableViews.

In my journey to find the best way to populate and use UITableView’s, I’ve put together an open source framework that makes creating a tableview and populating it with standard or custom cells extremely easy.

I also used concepts discussed here: (http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/) to maximize performance of the tableview when scrolling.

The result is an open source framework that makes it super easy to create a tableview and populate it with customized, or even totally custom cells. Since everything is drawn directly into the view, the framework runs very quickly.  I’ve also included support for interacting with UITextFields in the cells, including resizing the tableview for the keyboard, scrolling to the right offset, and tabbing through cells that have UITextField’s in them.


  • Customizable Cells
  • Adjusts TableView for keyboard
  • Sorts Sections alphabetically (if you choose)
  • Handles tabbing through textfields
  • Makes it possible to get a UITableView populated in a few lines of code
  • Grouped Table View background support
  • Fast Scrolling


The github link is here. I encourage you to check it out! https://github.com/andrewzimmer906/XCell


Questions, Comments, Requests?

@andrewzimmer906

andrewzimmer906@gmail.com


image

A simple UITableView, populated using XCell.


image

A few standard cell types for simple tables.  The grouped table view supports custom backgrounds because we draw the curved corners ourselves.


image

Editing is enabled by default. The XTableViewController handles resizing and scrolling the tableview for the keyboard.


image

Customizing the standard cells is as easy as setting a few properties on the XTableViewCellModel.


image

Finally, the XTableViewCell is easy to override so you can make a completely custom cell with ease.

The steps to creating a successful mobile app

Here they are:

Marketing Plan:

0. Idea

     - Is this idea really any good?

     - Will people want or pay for this idea?

     - How do I test whether this is going to work?

1. Content

     - What makes this app different?

     - What makes this app better?

     - How is it unique from other offerings in the store?

     - What does it offer users?

2. Direction

     - Who are your users?

     - What do they want in an app?

     - What are they willing to pay?

     - What problem are you solving for them?

3. Reach

     - How can you reach your users?

     - What sort of things will they respond to in an ad?

     - Are there any good blogs around what your app does?

     - Do you already have a following from another project?

4. Channels

     - SEO?

     - AdMob?

     - Social Media?

     - Google Ads?

5. Measure

     - How many downloads are you getting?

     - Where are they coming from (mobile ads, your website, other apps, the store, etc)

     - How long are users staying on your app.

    - What are they using it for.

6. Iterate

     - Improve your app.

     - Redo your messaging

     - Get more users

Starting a company is like starting a romance

It’s all about the seasons, you see.  In the summer, the momentum comes hot and fast, it flushes you with success. Networking, funding rounds, a new idea around every corner. You aren’t sure if it’s just a fling or the start of something major, but then you don’t really care.

It’s when the days get short that your mettle is tested.  A bite of cold air forces you inside, the holidays draw you away, and you find yourself wondering if this is the right path after all.  At this point you can either double down and work harder than ever, or give way and bide your time for another spring.

I say double down.

The Walgreen’s Incident

I’d been sick you see. Not throw-up awful sick, but drowsy stuff sneezy achy bleh sick. I was rather woozy, which may in part explain the events that follow.

I’d been out at a bar with some friends, but as 10:00pm struck I decided I needed to go home and get some sleep. So I bid farewell to my compatriots, left my half finished beer on the table, and started winding my way down Mission Street.

As I was walking, contemplating the long stuffy night to come, there, like a beacon in the distance, the Walgreens stood, beaconing me with it’s inexpensive array of cold medicines. Like a fly drawn to the warm glowing light of the bug zapper, I flitted through the automatic doors into the white shiny interior.

I immediately noticed that this Walgreens, as opposed to the one on 16th street, was the real deal. Rows upon rows of medicine bottles stood at attention. Moving quietly between shelves of nail polish and laxatives, attendants darted like fleet footed Egors bearing the Walgreens blue coat of arms. 

"Can I help you," one attendant called at me.  In my stuporous haze, I didn’t respond and instead tottered towards the cold & flu section.

I spied some boxes that looked like they may contain NyQuil, and crouched down, attempting to read the letters as they danced before my drowsy eyes.

"Cold?" I said to myself.  "Allergy?" "Antihistamine?"

As I tried to decipher these boxes, I heard a man standing a few feet away from me say, “Never forget what?”

I didn’t bother looking around. I hadn’t said anything to him. Why would he be bothering me?  I continued reading the boxes.

This one is purple, does that mean it’ll help me feel better?

"Never forget what?" the man said, louder this time.  I had an inkling that he may be addressing me, but I wasn’t sure, so I continued perusing the medicines in my crouched state.  It wasn’t long before I felt an ominous tap on my shoulder.

I turned around, I man in a large tan coat, perfect for revealing your naked body to strangers on the subway, towered over me. “Never forget what?” he said, pointing to the tattoo on my arm.  I glanced at my forearm and back to him, “Virginia Tech”.

He gave me a blank stare, his mouth pursed beneath his wiry black beard.  I waited a few seconds, then said again, “Virginia Tech, the school”.  He continued to look at me quizzically, no acknowledgment in his gaze.

I stood. “Virginia Tech, the shootings,” I said finally.  He nodded, “Oh.”

I waited for more, an “I’m sorry” or “Well how about that”, maybe even an explanation as to why he was pestering Walgreen’s patrons at 10:08pm at night, but instead silence. Finally, after what must have been 5 drawn out seconds, he said, “It looks new.”

I shook my head, “It’s about two years old.”

He nodded sagely, “It’s held up very well.”

"Yes", I said.

After another long 5 second pause, he took my hand in a vise like grip, shook it, and started to turn away.  Relief flooded through my every pore as this awkward human interaction came to a close.  Then came the hug.

Just as I was sure to escape undamaged, he turned back and caught me in a bearlike hug.  My arms doodled uselessly on his back, trying to pat the stripper coat or fly away from me in horror (I’m not sure which).  The hug held strong for maybe 4 seconds, before breaking, ending our casual encounter.

"Well, bye," I said, and walked down another aisle, grabbing a medicine box at random and sprinting for the register.  When I arrived at home, I ate some raw pastry dough, took my medicine and fell into a troubled, socially awkward sleep.

What a coincidence, I love aliens too!

As some of you may or may not know, I’ve been lurking craigslist quite a bit of late. Not for anything creepy like a mail order bride or piano made of jello, but instead for a place to live. After searching for a week, I was pretty sure I had found the place.  Nice neighborhood, solid house, it seemed like a dream.  I headed over on a nice Saturday afternoon to check it out. Little did I know what awaited me.

Actually, to give you a bit of foreshadowing, I got the house (which I turned down) by making a joke about painting a mural with the owners blood. It fit into the conversation. Let’s just leave it at that.

Anyway, I walk in and things seem a little strange. The owner has a pink streak in her hair. There is mediocre art everywhere, something which made more sense when I realized she was an artist. And the room I’d be staying in was windowless and painted like deep sea water. (She called it the water room, I call it the drowning room).  Overall however, things seemed in place. So we sat down and started talking. This is where things fell apart.

You see, Laura believes that all humans are aliens. No, she’s not a Scientologist.  She’s an artiiist. When I pressed her, she launched into a soliloquy that would have made Shakespeare weep tears of literary mirth.

"I think that all people are aliens, because if aliens do come to earth, then we’d be the aliens to them, you know. So we are really all aliens. I try to get an alien in every piece of art I do to show the connectedness between people."

I nodded and smiled hiding the WTF ringing around in my head. I soon found that she also paints cyborgs (which is like the cousin of the alien). On the way back through the alien shrine (which is actually shaped like a spaceship) I noticed about 80 red balls in the corner of the living room. “What are those,” I asked, only slightly afraid of the answer.

"Wasp nests," she said.  "My boyfriend started pulling them down from the trees in the park, but then he had 80 of them so he sold them to me. So then I painted them red and now I’m not sure what to do with them."

THROW THEM AWAY! my brain screamed silently. But like a nightmare, my feet were glued to the floor.

"I think I might make a baby mobile out of them. They look like tomatoes"

Wondering

One: How babies and tomatoes are related.

Two: What sort of eye infection a wasp nest could give to a newborn.

I said,”Oh, I’ll get back to you about the room. Okay. Bye.”

These are pictures from the shrine:

Alien

image

Work Crack

I find that when I’m stressed out or confused or can’t figure something out, I like to bury myself in something.

It started as books.  I could dig into a good book and disappear for days at a time. When I did finally surface, I’d be dizzy and disoriented, but stress free. Later it became television series, and most recently it has been work. Not all kinds of work, but coding work specifically.

I find myself drawn to work because it removes all doubt in my life. I’m good at it. I know the best way to accomplish it. And these are positive things (it allows me to charge people to do something I enjoy), but when I find myself tumbling into work like Alice tumbling down the rabbit hole, sometimes it is important to stop and see the bigger picture. This one project is something I can get lost in. It can remove my doubts and raging insecurities, but is it the right move in my career? Is it taking me where I want to go?

Sure, I can spend hours nudging a button to the right pixel, but shouldn’t I spend 5 minutes thinking about whether I should be?  

I recently started a book (I know 2 drugs, yikes!) about hiking the Appalachian Trail, and the main thing I’ve gathered is the simple repetition of it.  Wake up, walk for a while, go to sleep, repeat.  Walking is so slow, it seems like you never really get anywhere, so there isn’t really a rush. Work can be the same way. Months, years to get to your next goal. But you are moving. So make sure you’re going the right way.

Turns out I have a homeless person phobia

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}

Good news internet.  I realized today I have a phobia of being killed by homeless people.  Let me explain.

I headed out for a nice evening stroll right around twilight, down towards some docks that have an Improv place “Fort something”.  The Improv Classes weren’t running, so I found a few sweet long piers into the ocean, most of which were guarded by chained gates.  One was open and I thought to myself, what the hell, and started the trek to the end of the unlit pier.

I started to get nervous about halfway out, What am I doing out here?  This is where people get murdered!  But of course I’m waay too cool to turn around and give up, so I continue to the end.  As I reach the end, I hear laughing and talking and think to myself, Why that sounds like a perfectly normal group of people enjoying the starlight that is so clear at the end of this pitch black pier.  I’ll just go say hi and we can laugh about how stupid it is for us normal people to be out here.  I round the corner and find, much to my dismay, five homeless people, smoking, laughing, and generally waiting for their next victim.  For those of you with a clown phobia, this is akin to walking down a dark alley and finding five sad faced clowns who want to rip your arm off (don’t follow the sailboat).

Luckily, I take a step back into the shadows and escape before anyone sees me.  I hide in a dark corner until my heart stops pounding, and then begin the long straight walk back, looking over my shoulder.  Upon returning from the elephant graveyard, I could hear a woman singing opera in the distance and was happy to still be alive.  I then continued to the salt water fountain that is supposed to show you what the Bay tastes like, and it just tasted like normal water.  Damn.

Here is a link to give you an idea of where I was.  http://www.google.com/maps?q=san+francisco&hl=en&ll=37.80864,-122.430654&spn=0.004916,0.007027&sll=40.060074,-105.214176&sspn=0.076203,0.112438&z=17

How to Generate Opportunities

Being unemployed is all about opportunity. You need freelance jobs. You need money. You need stuff to do. Opportunity doesn’t just drop from the sky (well it does, but you need to be in the right place to catch it).

Rule 1: Be awesome at what you do.

This rule extends beyond skill into personality. It’s not enough to just be good at what you do, you need to be so good that people can’t stop talking about you. You need to be awesome. The first step here is to ask for advice and learn as much as possible from the people around you. Remember, any type of success is a team sport, you can’t go it alone. From there make sure that you make good on any promises, and your work is consistently solid.

Rule 2: Be open and ready

If you don’t appear available, people won’t bother to throw opportunities your way. Why would I ask someone who appears incredibly busy to help me design a website. That’s a good way to get rejected. No, I want to talk to the people who are open, ready, and available. I want to talk to the people who are professionally unemployed.

Rule 3: Be Loud

Here is my soundbyte. “Hi! My name is Andrew Zimmer. I’m a freelance iPhone Developer who specialized in custom UI’s. Let’s talk mobile.” Now I just have to broadcast this everywhere I go. Sometimes opportunities don’t find you, you have to scare them out of hiding. So talk about yourself. Learn to network. Make sure that everyone you know has heard your own soundbyte at least once. Get excited about what you do, get other people excited.

Go find some new opportunity!  I’ll post what I find on this blog.

More Information