myBloglines Now in iTunes App Store!

myBloglines Now in iTunes App Store!

The myBloglines RSS Reader is now available in the Apple iTunes App Store!

Cheap Gas! Version 1.9… Coming Soon

Cheap Gas! Version 1.9… Coming Soon

An incremental release of Cheap Gas! (Version 1.9, free version) is coming soon and is now being reviewed by Apple.

This release is mostly cosmetic, with the following changes:

  • Improved “heads up” grade pricing screen
  • GPS proximity sensitivity screen removed, because it was more confusing than helpful
  • About screen redesigned with links to other apps

UPDATE: In record time (less than 24 hours!) Apple has approved the updated version.  Schweet!

I’ve said it once

I’ve said it once

I’ll say it again.

The greatest thing about Social Media is transparency. And the worst thing about Social Media is transparency.

But on the plus side, it has kept my mouth (and keyboard) silent this morning, and we should all be thankful and grateful for that.

There. All better now.

Slow on the Uptake… Or, Why I Suck At “Where’s Waldo”

Slow on the Uptake… Or, Why I Suck At “Where’s Waldo”

Over the weekend, Rodney Rumford called me to tell me that I was on the inside flap of Seth Godin’s new book, Tribes.

I had submitted my avatar some months back and had totally forgotten to check the book when it came out to see if I made the cut.  Three months late is better than never.

I’m on the third column from the left, seven down.  Big giant cartoon head.  Can’t miss me.

Seth Godins Tribes
Seth Godin's Tribes
Interpolate iPhone App – Now Approved For Sale in iTunes

Interpolate iPhone App – Now Approved For Sale in iTunes

My new iPhone App, Interpolate, is now in iTunes App Store here!

This must be a record… I only submitted the app Tuesday morning, and it was approved a couple of days later.

Smokin’!

Seven Things You May Not Know About Me (Or Even Care)

Seven Things You May Not Know About Me (Or Even Care)

  1. I can juggle.
  2. I actually had Cat Scratch Fever as a child.  My parents thought I had cancer.  Still remember the needle they used to drain the lymph node under my arm.
  3. I was captain of my high school football team and got to kiss the homecoming queen.  We went 1-9 my Senior Year (sorry, Lebanon High School).
  4. My childhood home burned while I was in College and most of the material things I grew up with were lost.
  5. I have 20-19 vision in my left eye (though I need reading glasses for the close up stuff) and 20-90 vision in my right eye.  I had eye surgery when I was in the first grade to correct my Amblyopia, with mostly successful results.  Oddly, I have great spatial vision (played catcher and center field as a youth) though I can’t enjoy 3-D movies or ViewMasters.
  6. I love cold turkey sandwiches after the holidays more than the turkey served on the holiday itself.
  7. The first thing I bought with my first “real” paycheck was an eight track tape player from Radio Shack when I was fourteen years old.  A whopping $148 for a week’s work at a construction site.
Kudos to the RDV Sportsplex and Debby Kwasman

Kudos to the RDV Sportsplex and Debby Kwasman

Last weekend we had a great hockey tournament here in Orlando, hosted by the RDV Sportsplex.  The staff and management of the RDV Sportsplex Ice Den were wonderful hosts and every game started when they were supposed to.  Well done.

And while I am at it, I would like to extend a personal thank you to Debby Kwasman, Ice Den Director.  She took what was a negative customer service experience (mentioned here), turned it into a good teaching moment for her staff, and made a big effort to make things right by the boys and the OYHA coaches.

I had the opportunity to meet Debby and thank her for the steps she has taken to address the situation that occurred.  It’s hard doing the job she has to do – dealing with us sports parents – and I appreciate how professionally and courteously she handled this.  Well done.

Here is an extract from Debby’s letter to OYHA (redacted for personal information):

Gregg,

I was able to visit with specific members of my team during the
holidays. The individuals involved in this incident have been
appropriately disciplined as per our policies. They understand the
ramifications of their actions and they have spent time in my office
discussing what they learned from this experience and what they would
change if anything similar were to occur in the future.

I would like to extend two opportunities to the Squirt and the Pee Wee
teams to help the re-acclimate to RDV. On Thursday, January 15th, RDV
Sportsplex Ice Den would like to host a pizza party for these players
and the coaches and their immediate families after practice. We can meet
in the party rooms and RDV will provide pizza and drinks.

Secondly, I would like my skate patrol team member to have a few minutes
to address the players and coaches. She is enrolled in a class during
the pizza party, but she will be available prior to their practice on
that Thursday night. She will formally apologize directly to the players
and the coaches before they get on the ice.

We are looking forward to a great MLK tournament and that will have my
attention next week as well.

Debby Kwasman
Director
RDV Sportsplex Ice Den

Embedding Images in Outbound Email Using Cocoa Touch

Embedding Images in Outbound Email Using Cocoa Touch

One of the more commonly asked questions about iPhone SDK development is “how do you send attachments in Email using the iPhone SDK?”

The answer is: you can’t.  At least, not yet.

Well, then how are developers seemingly able to do this?  Many of you have seen apps where this looks like this is being done.  The Apple Photos app, for example, seems to be able to do this.

What’s the secret?

Come closer.  You Ready?

Embedded Images.

Embedded images are most commonly seen in your junk email and are a favorite trick used by spammers to circumvent your email filters to slip content in that can’t be scanned textually.

Here, we will use them for good and not evil.  Promise.

Let’s look at some screen grabs and code from my upcoming iPhone App Interpolate.  Interpolate is a numerical analysis app that finds missing range points given a table of data points representing some function, like y=x squared.  In addition to calculating interpolants, it also produces cartesian graphs of each function set, and allows you to send the chart to your friends using email.

img_0012

The code below is from a function call to create my email message.  In my app, I am taking a UIView (or at least, a class derived from UIView) and converting it into a PNG image.  Once I convert the view to PNG, I then convert the image data to a Base64 string, and use that Base64 string as the source for my embedded image in the email.


ChartView *cv = (ChartView *)cvc.view;


UIGraphicsBeginImageContext(cv.bounds.size);
[cv.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();


NSData *imageData = UIImagePNGRepresentation(viewImage);
char encodeArray[64 * 1024];
memset(encodeArray,'', sizeof(encodeArray));

// Exercise for the reader - encode takes the image data buffer and encodes it to base64.

// I can't do everything for you - that spoils the fun.
encode([imageData length], (char *)[imageData bytes], sizeof(encodeArray), encodeArray);


NSString *dataStr = [NSString stringWithCString:encodeArray length:strlen(encodeArray)];


// Save to photo library... maybe another time!
// UIImageWriteToSavedPhotosAlbum(viewImage, self, nil, nil);


NSString *body       = [@"" stringByAppendingFormat:@"<b><img src='data:image/png;base64,%@' alt='Interpolate Chart'></b>", dataStr];
NSString *encoded    = [body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *title      = [[@"" stringByAppendingFormat:@"Interpolate: Function %@", cvc.title] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString * urlString = [@"" stringByAppendingFormat:@"mailto:me@you.com?subject=%@&body=%@", title, encoded];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

The really interesting bits are:

  • Converting the UIView to a UIImage using UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
  • Converting the UIImage to NSData using NSData *imageData = UIImagePNGRepresentation(viewImage);
  • Convert the NSData to Base64
  • Converting the Base64 encoded image data into an NSString using NSString *dataStr = [NSString stringWithCString:encodeArray length:strlen(encodeArray)];
  • Embedding the image into email using NSString *body       = [@"" stringByAppendingFormat:@"<b><img src='data:image/png;base64,%@' alt='Interpolate Chart'></b>", dataStr];

IMPORTANT: the <b> and </b> in the embedded image code above must be present, or mail will strip your image.  Don’t ask me why – it just does.

Wait a minute… where is the Base64 encoding mumbo-jumbo done?

Hey – like my old math teacher used to say – the rest is left as an exercise for the reader.

But if you’ve followed along this far, finding a Base64 C routine to use in your own code is the easy part.

Happy Coding.

Interpolate – Submitted to iTunes App Store for Approval

Interpolate – Submitted to iTunes App Store for Approval

Just finished submitting a new iPhone app, Interpolate, to Apple iTunes Connect this morning for approval into the App Store.

Couple of interesting technical tid-bits that I’m debating about blogging about.

On the one hand, some of it’s a bit of a trade secret. On the other hand, it’s pretty sweet.

I’ll prolly wind up blabbing.  Gonna give myself some time for self-reflection.

Interpolate iPhone App – Getting Closer

Interpolate iPhone App – Getting Closer

I had really hoped to get a lot further along with my Interpolate iPhone App this weekend.  I was able to solve a technical issue – embedding charts in an outbound email – and do most of the interface cleanup.

Really and truly, if I bear down a little more this evening I can solve the last item that I’m not satisfied with – scaling – and can get it ready for QA testing before submitting to iTunes later this week.

Here are the screen shots from the oh-so-close-to-being-a-release-candidate.