How to Find (and Land) a Job in This Economy

How to Find (and Land) a Job in This Economy

Pssst… wanna know a secret?

NOBODY can tell you how to find and land a job in this economy.

But I can say for sure the following:  It’s not gonna be a killer resume.

It’s not gonna be a memorable business card.

Or that guy you knew fifteen years ago, haven’t spoken to since, and are now hitting up for a reference.  With a cold call.

People, there are folks losing their jobs who have been doing what they do for the past 25 years because of the historic economic times we find ourselves in – you think a humorous Moo Card is gonna help you, how?

I can’t think of a single job I’ve landed – as a W-2 or a contractor – since 1985 that I didn’t get through a personal connection or through a network of people that knew my work.

(1) Knew.

(2) My Work.

If you’re just now building your network, only after you lost your job, what can I say.  You’re behind in the game.  Not impossibly behind, but I ain’t gonna lie – it’s not good.  The competition is tough.

You’re gonna have to get above whatever noise you’re contending with to get noticed.  That’s what a lot of well meaning advice on resumes and job fairs and business cards are meant to convey – stand out.  Problem is, EVERYBODY is trying to “stand out.”

The one positive benefit that working on resumes and revamping business cards has is that it does get you doing something.  Anything.  Better than sitting around moping about not having a job.

If I seem to be flippant about this, I’m absolutely not.  Quite the contrary, I genuinely want anyone reaching out to me for a hand to get a job.

But I can’t in good conscience dole out a bunch of bromides about leveraging your LinkedIn network to land gigs.  Or go to your local chamber of commerce mixer and expect to get anything other than a bunch of “come ons” to buy life insurance, financial services, or be otherwise “rushed.”

You want to land a job?

Get your story out.  Get it out in a way that tells who you are, what you’ve done, and what you’re capable of doing.

What’s the best way to do that?  How many Angels can dance on the head of a pin?  Nobody can tell you that.  And I won’t pretend to.

But chances are, you’re not going to land your dream job reading this post (or any other post) sitting in your kitchen, den, or bed room.

Get out.  Tell your story.  Show your work.  Persist.

Good luck.

Resizing a UITableView’s tableHeaderView

Resizing a UITableView’s tableHeaderView

For many who use UITableView, unless you’re doing something like a Contacts application, the tableHeaderView (and related, tableFooterView) are rarely used.

What’s even more perplexing (at least when at first experienced), is that these elements are not repainted when a [UITableView reloadData] is issued; you have to manually issue field / image resets yourself.

Sometimes – like when handling a variable amount of data in the header, say for user status messages – you even have to adjust the size of the tableHeaderView in order to accomodate a growing / shrinking amount of real estate.

Here’s the trick:

CGRect headerFrame           = self.profile.tableHeaderView.frame;
headerFrame.size.height      = self.myStatus.frame.size.height + offset;
self.header.frame            = headerFrame;
self.profile.tableHeaderView = self.header;

First, grab the current header frame.  Then, adjust the size of the frame (in my example, I’m adjusting the height only).  Then, reset the tableHeaderView with the view again.

This is important – the size will not be adjusted until the tableHeaderView (or tableFooterView) variable is reset.

That’s it.

Hope this helps some of you struggling with this not-so-well documented problem.

Cheap Gas! Version 1.91 Now Available on iTunes!

Cheap Gas! Version 1.91 Now Available on iTunes!

Cheap Gas! Version 1.91 is now available on iTunes!

Troubled Times

Troubled Times

I don’t need to tell ya – times are tough.  All over.

Every day, I talk to friends who have been with their current employer for ten years or more, either on the hunt for a new job or fearful that their job is in jeopardy.

Friends with a wealth of experience – smart, loyal, dedicated to their professions.

All fearful of the uncertainty the future holds and what this will mean for them, and for their families.

It’s been said – a recession is when someone you know loses their job; a depression is when YOU lose YOURS.

I think it’s fair to say, that for most of my contemporaries – that is, folks who came onto the job market in the early 1980s – this is by far the toughest job and economic environment we’ve faced in our professional lives.

And no one really knows where the bottom is, or where the next shoe will drop.

I’ve been doing what I do now for about 25 years or so.  And doing so as the head of my own company for the past almost thirteen years.

Even in good times, the fear of failure has been a tremendous motivator for me.  In one sense, it has been my traveling companion for many years.  I say that like it’s a bad thing; it’s not, really.  It’s simply the way it is.

I’m just used to the fact that unless I’m out there selling every day, that unless I am constantly marketing, if I don’t show up consistently, if I don’t grow continually, if I don’t execute each and every time…  I’m toast.

But for a lot of my friends, friends who have been with maybe one or two employers their entire professional career (don’t laugh – it USED to be normal), this is probably the most stressed that they have ever been.  Ever.

I really struggle for words of comfort to share with them.  Words with meaning and solace.

And I guess, my only useful advice, is that every day you gotta get up, and DO.  Do something constructive.  Network with friends.  Use slack time to learn a new skill.  Go out on a limb and take on a project WAY outside your comfort level.  Build something on spec.  Mentor someone.  Talk to a counselor.

DOSOMETHING.

No one is immune to this market.  And I honestly gotta tell you, not a day goes by that I’m not worried that things can totally go to Hell.

But it doesn’t rule my business approach, and it doesn’t rule my reason, and it doesn’t rule my judgment.

It simply makes me aware that every day I need to be generating the maximum amount of value in everything that I do, so that I can keep doing what I do, the way I want to do it.

Or else.

And that is motivation enough.

Updates Submitted to Apple for Cheap Gas! and Cheap Gas! Plus

Updates Submitted to Apple for Cheap Gas! and Cheap Gas! Plus

Updates have been submitted this afternoon for both Cheap Gas! and Cheap Gas! Plus to the Applie iTunes App Store for approval.

Both versions have changes for improved location services and improved checking for being under Airport Mode.

Sorry for the delay – have been busy, busy, busy.

iPhone Email Attachments – Revisited

iPhone Email Attachments – Revisited

My solution for sending messages via email on the iPhone – detailed here – works for every mail client… except Gmail.

Gmail simply will not let you see embedded images.  Period.

Since this kinda crap really grates on my nerves, I started digging a little deeper.  Plus, I really think there should be a 100% universal way to attach stuff to email messages from the iPhone… and I’m not the only one.  My embedded images solution is workable, but is not wholly satisfying – because it is not a 100% solution.

So, like I usually do when trying to sniff out how a particular piece of web software works without having access to the source, I see what is being sent “over the wire.”  And since I knew that iPhoto on the iPhone WAS able to send an attachment, I sent myself a picture… and then checked the raw message source to see how Apple was doing it.

I sent myself a picture, with no accompanying text, and this is what the “interesting” pieces looked like:

Content-Type: multipart/mixed;
boundary=Apple-Mail-1-782786827
X-Mailer: iPhone Mail (5H11)
Mime-Version: 1.0 (iPhone Mail 5H11)
Date: Wed, 11 Mar 2009 12:13:43 -0400

–Apple-Mail-1-782786827
Content-Type: text/plain;
charset=us-ascii;
format=flowed
Content-Transfer-Encoding: 7bit

–Apple-Mail-1-782786827
Content-Disposition: inline;
filename=photo.jpg
Content-Type: image/jpeg;
name=”photo.jpg”
Content-Transfer-Encoding: base64

Notice the Content-Type of “multipart/mixed.”  No real surprise there… just that when you send a message using the Email client launched by an iPhone application, this is almost always “multipart/alternative”.  First “hmmm.”

Secondly, when I used my methodology of using embeded images (<img src=”data:image/png;base64[my data here in base64]”>), this gets cobbled out as

Content-Type: text/html;
charset=utf-8
Content-Transfer-Encoding: quoted-printable

by the Apple Email Client.  By contrast, Apple creates it’s image attachments by doing the following:

Content-Disposition: inline;
filename=photo.jpg
Content-Type: image/jpeg;
name=”photo.jpg”
Content-Transfer-Encoding: base64

So – why not just do the same thing?

Boundaries.

I don’t know what MIME boundaries (the “Apple-Mail-1-782786827” above) Apple is using to segregate its constituent email pieces (text, html, images, attachments) ahead of time – and they are generated dynamically by the email client when putting together it’s messages.

Bummer.

If I knew what the boundary tag was, I could fake out the client, create my own inline image, and boogey on down.

Now, even though this does seem like a serious roadblock, it may not be a total loss, because it presents both

  • (a) a possible direction to look (fake out a boundary, unlikely though it may be) and
  • (b) it presents another solution path (go down to the socket level and code my own SMTP alternative, so that I can create the MIME code directly to send out my attachments).

(a) looks to be a total non-starter, as it looks like the boundary is made – in part – of a timer component, and there is no way to guess how long someone will keep the message open before sending to reliably fake this out each and every time.  (b) will absolutely work – provided you are motivated to write this dude.  Looks like a commercial opportunity for a Cocoa Touch class, and I may yet do this.

A final and as yet unspoken work around would be to know how Apple preps an image in their email client before sending, so that it’s Mail.app knows to wrap the image up as an inline attachment.  Unfortunately, I don’t know of anywhere I can look to see how they compose their messages (no view source – dang!).

All in all, this has stimulated me to investigate some additional paths for a problem that I thought I had a reasonable solution for – and for many, I do and did.

Onward and upward.

Objective-C and HTTP Basic Authentication

Objective-C and HTTP Basic Authentication

For all the really nice stuff Objective-C lets you do on the iPhone, there are many, many holes left for very common tasks.

One of those tasks is Base64 encoding.

Base64 encoding is used to convert binary data into text that can be transmitted using HTTP (like, say, for embedding images in email) or for somewhat obfuscating user ids and passwords to be sent “in the clear” over HTTP (like for Basic Authentication).

Without much further ado, I present one of a gagillion implementations of Base64 encoding in C:

static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789"
"+/";

int encode(unsigned s_len, char *src, unsigned d_len, char *dst)
{
unsigned triad;

for (triad = 0; triad < s_len; triad += 3)
{
unsigned long int sr;
unsigned byte;

for (byte = 0; (byte<3)&&(triad+byte<s_len); ++byte)
{
sr <<= 8;
sr |= (*(src+triad+byte) & 0xff);
}

sr <<= (6-((8*byte)%6))%6; /*shift left to next 6bit alignment*/

if (d_len < 4) return 1; /* error - dest too short */

*(dst+0) = *(dst+1) = *(dst+2) = *(dst+3) = '=';
switch(byte)
{
case 3:
*(dst+3) = base64[sr&0x3f];
sr >>= 6;
case 2:
*(dst+2) = base64[sr&0x3f];
sr >>= 6;
case 1:
*(dst+1) = base64[sr&0x3f];
sr >>= 6;
*(dst+0) = base64[sr&0x3f];
}
dst += 4; d_len -= 4;
}

return 0;

}

And here is how one may transmit a user id and password (using NSURLConnection) to establish a connection using Basic Authentication:

myApp.loginString    = (NSMutableString*)[[NSUserDefaults standardUserDefaults] stringForKey:kloginKey];
myApp.passwordString = (NSMutableString*)[[NSUserDefaults standardUserDefaults] stringForKey:kpasswordKey];

NSMutableString *dataStr = (NSMutableString*)[@"" stringByAppendingFormat:@"%@:%@", myApp.loginString, myApp.passwordString];

NSData *encodeData = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
char encodeArray[512];

memset(encodeArray, '\0', sizeof(encodeArray));

// Base64 Encode username and password
encode([encodeData length], (char *)[encodeData bytes], sizeof(encodeArray), encodeArray);

dataStr = [NSString stringWithCString:encodeArray length:strlen(encodeArray)];
myApp.authenticationString = [@"" stringByAppendingFormat:@"Basic %@", dataStr];

// Create asynchronous request
NSMutableURLRequest * theRequest=(NSMutableURLRequest*)[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.somewebdomain.com"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[theRequest addValue:myApp.authenticationString forHTTPHeaderField:@"Authorization"];

NSURLConnection * theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
if (theConnection) {
receivedData = [[NSMutableData data] retain];
}
else {
[myApp addTextToLog:@"Could not connect to the network" withCaption:@"MyApp"];
}

Hopefully, this will help people get cracking that were having a hard time getting a handle on the fact that Objective-C is really C – albeit with funky class extensions.

Coming soon… a post on Base64, because sometimes Google just isn’t enough

Coming soon… a post on Base64, because sometimes Google just isn’t enough

Since every Objective-C app that needs Basic Authentication needs this, you’d think there’d be a built in method in one of the NSURLConnection family of classes to do this little transform.  There’s not, so you gotta build this yourself.

Even given the fact that Googling “Base64 encoder C” yields 191,000 hits, it seems like implementing this in Objective-C hangs up a lot of people.

It shouldn’t.

Objective-C syntactically is, at it’s heart, just C.

Therefore, it is easy to find most any routine in the wild coded in the last 30 years in C – somewhere – to do most anything you need to do.

A little later today I’ll post a Base64 encoder example that will hopefully clear away some roadblocks and cobwebs for some of my commenters.

Passages

Passages

My dad passed away five years ago today.

I don’t really mark these anniversaries – at least, intentionally.

But this morning, one of my childhood friends, Brian Sanders, posted a picture of one of our youth baseball teams, showing my dad at an age younger than I am now.

Circa 1976
Circa 1975

My dad is the guy in the blue shirt, and I’m in the front row (#11).

It’s odd now to see my dad – around 34 years old at the time of this picture – coincidentally about that same amount of time later, without thinking about how impermanent things really are and how quickly time passes.

I find it hard to imagine my sons doing the same thing, thirty odd years on.  I just hope that when they do, they have only happy memories.

Hopefully, a happy future memory
Hopefully, a happy future memory