Category Archives: technology

Getting Into Programming

I’ve had several people ask me, “How can I do what you do?”  The answer is simple: start.  Any skill in life takes time to learn, whether that be programming, cooking, playing baseball, or playing the piano.  With any new skill you need to start somewhere.

Below, I hope to highlight a few things that will help non-programmers start on a track to becoming one, for a job or even just for fun.

 

Set Your Standards Low

I am by no means a code guru (much more of a polyglot), though I have been programming for over 10 years.  I started with basic Windows scripting, and moved on to Linux scripting when Counter Strike: Source came out.  For half of that time I’ve been developing iOS applications, with a handful on the store, published either by myself or a company I’ve worked for.

If you’re familiar with programming and you’re switching to iOS development, you can probably knock out an app in a month or two.  However, if you’re new to programming, and you don’t understand what methods, arguments, header files, and variables are, you will have a LOT to learn.  That’s not to say it can’t be done, just that unless you dedicate your whole life to it, it’s going to take a while.

If you go into development with zero background, expecting to make the next Flappy Bird in a month, you will most likely be extremely disappointed.  If you get into things expecting nothing, you’ll be happy with improvement of any kind.

 

Finding a Good Language

There are an extremely large number of programming languages, just look at this Wikipedia page.  What language you start with has a lot to do with what your goals are.  If you pick a language that is in line with your interests, you are more likely to stick with it, and more likely to succeed.  And most importantly, you never forget your first.

Figure out what you want to do with programming: get a full time job, built yourself a website for a hobby you have, or maybe have your computer automatically check you in to flights for Southwest Airlines at exactly 24 hours before departure.  Once you’ve figured that out, pick the language that will get you there.

Java

Java often gets criticized for being slow, but if you’re new to programming you most likely won’t notice it.  Android applications are developed in Java, and Java desktop applications can run on OS X, Windows, and Linux.  The idea behind Java is to “code once, run everywhere”, so you could write a Java program on one computer, transfer it to another, and easily run it.  With some modifications, you can also turn desktop applications into web applets.  Java developer jobs are also highly in demand, so if you want to make a career out of development, Java is not a bad route to go.

HTML/CSS/JavaScript

No, JavaScript is not the same as Java, though they have similar roots.  I’ve lumped that together with HTML and CSS  because those are the three main pieces that make up websites.  Think of them like layers of a cake (the cake being a website).  The HTML is the base, the content, where pictures and text reside.  On top of that is the CSS, which adds colors, applies fonts, adds in background images, and more.  It’s the colorful frosting to your website cake.  At the very top is JavaScript, which is the toy car and candles that the cake lady who also works at the deli threw on top.  JavaScript runs things like animations, images slideshows, and most of what people consider the “interactive” pieces of a website.  You’re not going to be making the next Facebook or Twitter, as contents with dynamic content are run by server languages like PHP and Ruby, but HTML/CSS are the basis for anything on the web today.

If you want to stick your toe into the pool that is JavaScript, CodeAcademy has some free lessons for beginners that are quite good.

Python

Not to be confused with the snake, Python is very powerful programming language.  It is often praised as the best programing language to start with, as it also has a clean syntax and is usually quite easy to read.  Python powers applications such as Dropbox, and is used by large companies such as Google and NASA.

Ruby

Ruby is an object-oriented scripting language.  Built on top of Ruby is Ruby on Rails, which is a framework that allows you to create dynamic websites very easily.  Over the past several years it has started to gain popularity, and many companies are hiring Rails developers.  Websites such as Twitter, Ask.fm, and GitHub have been built using Rails.  If you want to get into dynamic website creation with user generated content, you could start by learning Ruby, and working your way up to using a framework like Rails to make your code even more powerful.

CodeSchool has a great introductory course to Ruby.

PHP

PHP is a server-side scripting language.  It powers sites like Facebook, Wikipedia, WordPress, Drupal, and many others.  It first appeared in 1995, and is what runs over 20 million websites today.  It is one of the most popular web development languages, though not many consider it a beginner-friendly language.

 

Get Feedback

Once you’ve started programming, it’s hard to gauge your skill level without getting feedback.  If you have an experienced developer who can be your mentor, that is great, though not everyone has that luxury.  One way to try and get feedback is to your your code publicly online with a service like GitHub.  Doing this accomplishes two things:

1) You learn how to use version control, which is an invaluable skill once you start working on larger projects.

2) You get used to other people looking at your code.

It’s easy to think “I’m not good, nobody should look at this”, but that is a feeling you need to get used to.  When I look at some of my old code I feel slightly embarrassed, because with each passing day I improve on my skills, and my code from 6 months ago is not nearly as good as code I write today.

Another important note is that a lot of people on the internet can be pretty harsh.  Quite often other developers can be hyper critical of your work, and you’ll have to develop some tough skin to deal with it.

 

The most important thing is to just stick to it.  If you want to get better you just need to keep working at it.  Accept critiques from other developers and improve on your skills.  Once you understand the basics of the language you’ve chosen, you can use websites like Codewars which have little daily challenges on them to keep your mental blade sharp.

Happy programming!

Building an Android

Before I even get into talking about Android development, I should state that I’m primarily an iOS developer, and because of that am more accustomed to iOS development styles.

I’ve been developing Android apps for a while now, and one thing that I’ve always disliked is Eclipse.  It’s the recommended IDE from Google, so when I first started developing it seemed like an easy choice.  Since then I’ve realized that it is bloated, slow, and the exact opposite of what I’m looking for in an IDE.  For a while I just put up with it, thinking I was as locked in with Eclipse for Android as I was with Xcode for iOS (which turns out to not be as true as I once thought it was).  Then I stumbled across a beautiful thing…….

IntelliJ

My new love affair

At first I was worried, there didn’t seem to be a large amount of Android tutorials using IntelliJ, but I heard good things from Mackenzie Powers and figured I should give it a try.  The thing I had the hardest time with was figuring out how to important 3rd party Android libraries.  Eclipse was easy enough, dropping any libraries I needed into {PROJECT_ROOT}/libs.  IntelliJ required a little more setup configuring each library as a module, and then setting each module as a dependency for my application.

But there was another problem, this module/dependency layout doesn’t seem to compile the same was as Eclipse does.  My existing project that compiled file with Eclipse was giving me all sorts of errors with IntelliJ.  Errors were being thrown around saying I had already compiled the Android-support-v4  library.

Oh noes! Errors!

Weird, why was it trying to compile in the support library a second time??  It took me far too long to discover the problem.  After trying to configure a bunch of settings I gave up and tried deleting the library from my project.

Safe Deleting support-v4

I was then presenting with this error:

I can’t let you do that, Joe.

So that was it! My other 3rd party library was using Android-support-v13, which apparently includes v4 automatically.  The way to get around this in IntelliJ is to just have each module require the same .jar library as a dependency, and then it is smart enough to know to not include the same library twice.  Switching both modules to v13 fixed the issue and I was free to Eclipse!  After resolving all my IDE issues, I only have one other problem…

The Simulator

Hanging between screens

I don’t have any physical Android devices, nor do I really care to own any.  Problem is, the Android simulator SUCKS.  It’s terribly slow, and my mom’s Windows XP Pentium D outperforms this thing by a mile.  For months I dealt with the slowness and just accepted it.  But then I found a 2nd tool that would bring speed to the table: VirtualBox.  I found a guide that walked me through setting up an x86 version of Android and configure it’s network interface to be bridged with mine.

Prepped a VM for Android
The interface NEEDS to be bridged or it doesn’t work

Setting a few screen resolutions available to the VM and restarting left me with an extremely fast Android OS.

I named it 4.0 and installed 2.3 :

The only thing more difficult with this is that is doesn’t automatically connect with ADB.  You can manually connect it by running

./adb connect 192.168.56.101

I consider this mild tradeoff completely worth it, as the speed and benefits far outweigh the costs.  Hopefully others won’t feel stuck with Eclipse and the simulator and can move forward with some tools that are a little more snappy.

Designing for Mobile – Cross Platform and How to do it Right

The past two days I’ve attended MobCon2012, and it’s definitely helped me understand some more things in the mobile realm.  Overall it was a great conference, and I learned a lot while I was there.

A prominent theme that persisted across multiple talks and discussions was cross platform development.  Today development firms have a multitude of cross platform development tools that allow them to write the code once and compile apps for iOS, Android, Windows Mobile, etc.  One that I knew of previously was Appcelerator, and I was introduced to iFactr while at the conference.  Everyone (including the makers of iFactr) agreed that these technologies were best suited for business driven applications where success is not dependent on a rich UI/UX experience.

Many people might ask “why?”  If you’re going to have two native apps, why the need for two different designs when it’s the same application?  The heart of the matter is that Android and iOS have two completely different design paradigms which can be easily briefed by going over their human interface guidelines.  Below I will highlight a few of those subtle but noticeable differences in these platforms, and hope that designers keep these kinds of differences in mind when designing for different mobile platforms.

Searching

At first search fields may seem simple.  Tap in them, type some text, and click search.  These behaviors and how users interact with them are different on Android than on iOS.

It’s typical for a UISearchBar to be set as the header on a UITableView.  It is easily dismissed while scrolling down, and can be quickly pulled up by tapping the magnifying glass in the alpha scroller (list of characters/icons on the right).  Need to search the list you’re in, just scroll up!

Search on Android is a little different.  First there is the matter of accessing it.  Search Dialogs are not shown by default in the UI.  They are brought up on the screen via the use of a hardware or persistent software search button (though with device fragmentation it’s also possible your users will have NO search button).  Next, they are not usually in a scrollable portion of the screen, they become a part of the ActivityBar at the top of the screen, with results shown below.  Finally, it is common for the search itself to be more global.  Where iOS returns results for the view you are on, Android searching often returns results from within any potential part of your application.

Tab Navigation

This is pretty simple, but often overlooked.  iOS has separate UI elements for navigation bars and tab bars.

Android typically merges tabs and navigation bars

Navigation Stack

The mobile terms for the navigation stack are push and pop for adding and removing views respectively.  Selecting elements/buttons are commonly used for pushing views.  The difference lies in how each OS pops back.

iOS shows a back button in the top left of the navigation bar, labeled with the title of the previous view controller.  Android has…. well…. nothing.  They don’t show a back button, they don’t show the title of previous activities.  Apps (should) just pop an activity off the stack each time the hardware/software back button is pressed.

Two exceptional talks at MobCon that discussed these differences (on a higher leve) were done by Mike Bollinger, and Andrew & Jon from the Nerdery.  Mike’s slides can be viewed here, and I’m still waiting for the Nerdery slides to go up.

I hope designers start to take note that mobile apps can be designed similar but different across multiple platforms.  Doing so will bring richer and fuller user experiences to mobile users, and will be beneficial to your applications in the long run.

Threading in iOS

Threading in applications is important, even more so when your main thread is in charge of doing all of your UI updates.  One common area to experience weak iOS code is in an UITableView that loads content from a remote source.  This post will go over a short sample app that displays a list of the five generations of Camaros, with a picture from each generation.

Now available in the App Store for $4.99!

First, let’s take a look at an example of using no threading whatsoever to load UIImages from a URL.

cell.imageView.image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]];

Since tableView:cellForRowAtIndexPath: is called on the main thread, doing this sort of image load will completely lock up our app until all of the images have been loaded.  iOS only loads UITableViewCells in view though, so our problem gets much worse once we start scrolling.

[kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://blog.pintozzi.com/wp-content/uploads/2012/11/no_threading.swf" width="480" height="873" targetclass="flashmovie"]

Get Adobe Flash player

[/kml_flashembed]

The video is recorded smoothly, it’s the application that causes the jagged scrolling as each image loads for every cell brought into view.

Until recently I always backgrounded tasks with [NSThread detachNewThreadSelector:ToTarget:withObject:].  While this isn’t necessarily a bad solution, it gets really hairy when you start trying to pass multiple arguments.  To background load those images we could use something like this:

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:urlString, @"urlString", cell, @"cell", nil];
[NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:params];
cell.textLabel.text = name;

And then defining the loadImage: method

-(void)loadImage:(NSDictionary*)params{
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[params objectForKey:@"urlString"]]];
    UITableViewCell *cell = [params objectForKey:@"cell"];
    [cell.imageView performSelectorOnMainThread:@selector(setImage:) withObject:[UIImage imageWithData:data] waitUntilDone:NO];
    [cell setNeedsLayout];
}

The result is definitely smoother.

[kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://blog.pintozzi.com/wp-content/uploads/2012/11/detachThread.swf" width="480" height="873" targetclass="flashmovie"]

Get Adobe Flash player

[/kml_flashembed]

Still, the code is somewhat convoluted, and if we start trying to do multiple things in the background it will become very messy very fast. Enter our savior, Grand Central Dispatch.

All aboard the ^()block train!

With the release of iOS 4 us developers have had the wondrous tool that is GCD.  Sadly, I have not realized it’s full potential until iOS 6.  The same background threading can be achieved with much cleaner code.

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
    dispatch_async(queue, ^{
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]];
    dispatch_sync(dispatch_get_main_queue(), ^{
        UIImage *image = [[UIImage alloc] initWithData:imageData];
        [[cell imageView] setImage:image];
        [cell setNeedsLayout];
    });
});

It looks scary because some of it follows closer to a C syntax than Obj-C, but if you read it line by line it’s quite simple.  dispatch_get_global_queue() fetches us a queue that we can dispatch tasks (blocks) onto.  Creating an async call with an execution block allows us to perform code without worrying about blocking the UI.  From there we fetch the image data and then dispatch another call on the main thread/queue (retrieved with dispatch_get_main_queue()).  Within that block we can update the UI and let the cell know it needs to layout.  The best part about this method is that variable pointers are usable in each block.  We don’t need to worry about messy pointing passing, instead we can just reference each object with ease.

I’ve only recently started using Grand Central Dispatch, but it’s already helped me refactor my code to be cleaner and faster.  I’m sure I’ll be using it more heavily as time goes on and I become more comfortable with dispatch queues.

iPad Mini, or iPod Jumbo??

Yet another iDevice has been unleashed upon us.  This time it’s the iPad Mini.  A few people joke that it’s just a large iPod, but that’s hardly true, atleast from a development standpoint.  While it has no retina display, the 7.9″ screen packs the same number of pixels as the iPad 2 (1024×768).

Courtesy of www.apple.com

What does this mean for developers?  Pretty much nothing.  UISplitViewControllers are still used for Master/Detail style views, and there won’t be any changes to the SDK.  One thing designers will definitely have to keep in mind though, is that everything is smaller.  Yes that button you designed will remain 90 x 44 pixels, but with a smaller screen that target will be physically smaller for your end user.  If your users had a hard time with small controls before, get ready for them to fail miserably when those controls are an additional 21% smaller!

It’s an interesting move by Apple.  Steve Jobs seemed to scoff at the idea of a 7″ tablet, but with the recent success of sub-10″ tablets being manufactured by other companies Apple may not have a choice.  I think it will be interesting to see the Mini play out.  It’s been a while since Apple has had a product flop (think Newton), and with the iPad’s overall success I doubt it will do poorly.

I look forward to working on some slightly smaller iPad experiences to add to the GoKart Labs portfolio!

Faster than a Speeding Bullet

Yesterday my Retina MacBook Pro finally came in the mail. Needless to say, I’m very excited, and this machine definitely performs as well as I hoped it would.

Unboxing, a geek’s wet dream

Two two biggest differences are the screen and the flash memory (replacing what used to be a hard drive).

She packs a ton of pixels

The amount of pixels blows away competition. 2880×1800 on a 15″ display? Never been done before. And the flash storage crushes other SSDs.

13″ MacBook Pro with a 64GB OWC SSD
i7 Hackintosh with a 128GB Crucial M4 SSD
15″ Retina MacBook Pro with “Flash Memory”

Boot times simply cease to exist. EFI takes longer to initialize than it does for the OS to load.

Obviously CPU is a big factor as well. I paid the extra $100 for an upgrade from 2.3 GHz to 2.6GHz and it’s noticeably snappier. While it doesn’t crush an overclocked Hackintosh for speed, it definitely keeps up (which is impressive as it’s over 1.1GHz slower!).

Busy Beyond Belief

Things have been busy, but also extremely exciting in the Twin Cities.  Saint Paul is a great place, and for my anniversary with Erin we went to Heartland Restaurant & Farm Direct Market.  I think my favorite part of the meal was when I started picking up the bottle of wine to pour Erin another glass, and a waiter promptly walked over and said “let me get that for you, sir”.  With a smile on his face he refilled both our glasses.  While it wasn’t anything absolutely extraordinary, it was one of those little things that really completes a dining experience.

Two weeks ago (whooaaaa, jumping back in time!) we had a great camping adventure with some good friends from Marquette.  Erin and I usually end up cooking breakfast while camping with friends, and this most recent time was no exception.  Bacon, eggs, eggs-in-a-basket/sunshine-toast, pancakes, we made it all!

Devil’s Lake Campgrounds (click to enlarge)

While we didn’t do as much extreme climbing as last year, it was definitely just as enjoyable.  Lacking a tent, I grabbed this one off Amazon.  I originally thought, “there is NO way that can hold 8 people”, but I was wrong, it most certainly can.  Unrolling it out I kept muttering, “when will it end?!?!?!”  Eventually it did and it was monstrous!  Two full days of campfires and adventures followed.

Fire!!

Today we went to a pet adoption event and picked up a puppy!!  He’s two months old and we’ve named him Tucker.

Erin and Tucker

He’s a little ball of energy, and the best part is that he seems potty trained!  He sat at the door today and whimpered, and after we let him out onto our patio he went straight for a vine/bush and pooped in it!  It’s maybe not a “pretty” thing to talk about, but it’s definitely something I’m appreciative of!

WARNING:Most of what follows is tech, so you might just want to skip over it.

I’ve been racking my head against against DDWRT almost the whole day.  I’ve been wanting to get a simple wireless client-bridge up and running, as I don’t have my box of CAT5e cable with me up here (it’s on its way).  I have a TP-Link MR-3020 and a WRT54GL, which have OpenWRT and DDWRT respectively.  On each one I tried setting up a bridged network via command line and the web GUI, but neither one seemed to be able to connecting to my existing WPA2 secured network.  After 4 hours of getting frustrated at it not working, I went to the Apple store in Uptown and grabbed an Airport Express, drove home, and have it configured and working 5 minutes after I got back.

And it automatically did what I wanted it to.

With that setup I now have wired access in both bedrooms in the apartment without running cables all over the place.  Additional good news is that with the ESXi update to version 5.1 the motherboard in my tower has a supported LAN chipset (RTL8111E), so I threw in a spare 500GB hard drive and have been messing around with it for fun.  I’d like to build a new desktop and transition this machine into a ESXi server full time, but I’d rather not stretch funds too thing and wait a few more weeks.

All in all, life is grand and I couldn’t be happier.

Why my next phone will be an iPhone

With the iPhone 5 on the horizon, and the Samsung Galaxy S3 already here, many people are asking me what phone should be their next.  While I can’t make that decision for everyone, and while the S3 is an amazing phone, I’ll be sticking with the iPhone when I upgrade.

In Samsung’s recent advertising efforts, they make a point of stating “The Next Big Thing is Already Here”.

http://www.youtube.com/watch?v=nf5-Prx19ZM

The longer list is better, right???

I agree that the Galaxy S3 comes with a formidable list of features, but the new and existing features of iOS (ones completely ignored by Samsung’s commercials) are really what make the iPhone 5 the winner to me.

1. Apps

Both Android and iOS have impressive app marketplaces.  While the Android Market (now Google Play) hasn’t been around as long as the iTunes App Store, the amount of apps it holds has grown at an increasingly fast rate.  That said, there are a handful of apps that I use on a regular basis that draw me towards iOS.

Alien Blue

Reddit in its best form

What can I say?  I love reddit.  It’s been an integral part of my career, helping me find side jobs when I first started developing, and even landed me one of my first full-time jobs out of college.  Oh yea, and it’s coined as “The Frontpage of the Internet”.  Reddit is a wonderful aggregate of information, allowing me to combine different sub-reddits to bring me hot-and-fresh info each day.  While Android has apps like BaconReader, nothing comes close to being as good as Alien Blue.  It is by far the #1 used app on my phone, and one of the biggest reasons I’ll be sticking to an iOS device as my next purchase.

iStat

Just checking up on the server

It may seem like like an app that gives you basic stats about your phone, something many free apps already do, but iStat does something more: it also displays information about remote servers.  Personally I use it to check real time stats of my Mac Mini, the one that hosts this blog!  The server component is a free download and runs on both OS X and Linux.

iNet Pro

APOS = A Piece Of Shit

iNet is a great app for doing quick network diagnostics.  I often throw up headless devices on my network, like a Raspberry Pi or an Arduino with an ethernet shield, and it’s super easy to scan and get info about each device on the network.  There are other nice bundled features, including the ability to ping servers, a Bonjour Browser, port-scanner, and Wake-on-LAN system.  All in all it’s a great network utility app and I haven’t found anything yet that can replace it’s ease, function, and elegance.

Find My iPhone

Soon to be on this list: Joe’s iPhone 5

Yes, this one is a little biased, but I felt it’s important enough to include.  Find My iPhone allows me to track all my Apple devices with ease.  It also comes in handy when a friend loses their phone, just log into their iCloud account and track down their device.  Lock it, play a tone regardless of the phone being silenced or not, or send a message.  There are many stories of people reclaiming their phones using Find My iPhone, and while I realize that Android has many apps that act similarly (Plan B, for example), nothing ties all of my devices together nicely.

2. iTunes

While iTunes is an app on iOS, I am speaking of iTunes as a music platform that spans both mobile devices and desktops.  When I purchase a song on my iPhone or iPad it is instantly downloaded/synced to my desktop, Macbook Pro, and other iOS devices.  Many people bash on iTunes, saying it’s a locked garden, but I find the opposite to be true.  In 2009, Apple switched all of its songs to being DRM free.  I am free to transfer the music to any device I like, make by Apple or otherwise.  Quick and easy audio media that syncs across all my components wirelessly is wonderful.

3. It’s only taller

The iPhone 4 feels like a perfect fit in my hand.  My middle and ring finger wrap at the first knuckle around the side of my phone, while my index finger supports it from the back.  I’ve always used my thumb to navigate, but my thumb can easily reach past the top of the screen.  With the iPhone 5 keeping the same width as the 4/4s and only increasing the height, I do have no to become used to a new grip in my hand, but still am given a screen increase upwards to display more content.  Also, by only increasing it’s height, the iPhone obtains a screen aspect ratio almost exactly equal to that of the S3.  By changing to a 1136×640 display, the iPhone 5 hits a 16:9 ratio, a very common widescreen video format. I watch a good amount of movies/TV shows on the bus, so it’ll be nice for them to not be letterboxed.

4. The Apple Eco-system

It’s nice sticking with Apple.  The Samsung commercials advertise a ton of cool features, like instant video and picture sharing.  The problem is that those features can only be used with other NFC enabled devices.  I personally don’t know many people with those sorts of devices (and only one with an S3 specifically), but I know tons of people with iOS devices. My grandma has an iPad, so we can iMessage each other for free.  It’s faster and more convenient than email, and she loves using it.  iMessage also doesn’t traverse SMS paths, so sending messages that way doesn’t count towards my SMS plan.  I also find FaceTime to be far superior than Skype, and it’s extremely simple to video call my sisters or friends with the tap of a button.

5. The New Connector

Credit CNET (http://reviews.cnet.com/8301-19512_7-57514454-233/apples-lightning-connector-and-you-what-you-should-know/)

The one thing everyone seems to be complaining about, I’m rejoicing for.  The new Lightning connector is reversible and completely digital!  Like in the Samsung commercial, I’m sure most people don’t even care about that fact, and will be quite upset by the fact the iPod-Out system doesn’t work anymore, but as a computer engineer I’m happy they are moving forward with a completely digital system.  You know what else switched from an analog to a completely digital system?  Cable TV.  Sure, people hated it for a short while, but now everyone can’t get enough of their 9,001 HD channels.  And have you seen the 30-pin adapter schematic??  There are 5 ground pins!  Two are reserved and one is “?”.  That’s a terrible design, and I’m glad they have improved upon it with the digital 8-pin Lightning connector.

Like any advancement in technology, I realize this will be a hump that people hate to get over, but I look forward to seeing what sorts of things lie ahead once we get past it.  I am a little disappointed that it will fail to import my song titles when playing music in my car, but I’ll be able to happily use Bluetooth audio from here on out.  And if I absolutely need to, I can pop my original 5g iPod into the center console and use that as my music library.

If Bluetooth doesn’t cut it for you, you can always use an adapter to get it working with your older devices.

Convert!

6. Color

 

It’s available in black anodized aluminum.  ‘Nuff said.

7. I’m an iOS dev

I’m an iOS developer, it’s how I make a living.  It’s important to have devices available for testing.  While a simulator does a good job, it can only take you so far.  Having a physical device allows me to test inner-city cellular network speeds, do more advanced work with the accelerometer, touch more than two points on the screen at once, and many other things.  Without it, I really wouldn’t be able to test as many features as I can with just the simulator.

Most of all, the new iPhone is just clean.  Almost every app I use on my phone looks pretty, and while it’s nothing something I notice on a regular basis, I DO notice it when I borrow a friend’s Android phone.  The UI is a tad more responsive (as a developer, Android ListViews kill me), and I never feel like my phone is playing catch-up with me.  I appreciate the social share buttons that are easily accessible but just pulling down on the status bar at the top.  All of the complex systems come together to form an interface and user experience that is so simple you don’t even notice how much work goes into it.

Just pull down!

I can’t say everyone should have an iPhone, and there are plenty of people out there who should get an Android.  I appreciate Samsung and what they do, because competition drives innovation.  I hope the Android OS and the hardware it runs on continues to develop and grow, forcing Apple to continue to enhance their products and make the best devices they can.  A day may come where I may switch and pick up a Samsung device, but today is not that day.

Damn You DRM!

I hate DRM of all kinds, but the most frustrating recently has been Windows 7 activations.  While I don’t have a problem with product keys themselves, Window’s self-checking of changed hardware has been driving me crazy when dealing with virtual machines.  My VM software of choice is Parallels (though VMWare Fusionis also a good one), and since the hardware in my physical desktop and virtual machine differ, Windows finds a hardware change and deactivates itself.

Damn you Windows!

“OK”, you might think, “Just reactivate online, not a huge ordeal.”  That works, but only a handful of times, in my experience thrice, before online activations stop working.  Then you have to call the Microsoft activation hotline and talk to someone on the phone.  Again, not the worst thing ever, but due to the fact I use this instance of Windows both on physical hardware an inside of a VM, I have to do this whole song and dance about once a week.

Getting frustrated with this I figured something had to be done.  I knew that Windows activations were stored in files somewhere, so backing up the activations before they self-destroy should be as simple as copying a few files, right?  It is!  And it becomes even easier with Advanced Tokens Manager.

Back dat act(ivation) up!

Hardware changes will still be recognized, with with ATM I can backup the activation files relating to each hardware setup.  Once copied over onto my NAS I can restore either activation simply by running ATM again.

Safely backed up!

Goodbye Microsoft Activation Hotline!

Breaking When It Should

Everything breaks, that’s just the nature of life.  It’s something you just need to learn to accept, and once you accept that you can learn to work with it.  There is a very important piece of our world that breaks quite often.  That’s right, I’m talking about fuses.

While working on putting my motorcycle back together, the electrical system suddenly stopped working.  I didn’t have time at the moment to look over everything, but I had some time today and two things.

  1. Occam’s Razor holds true
  2. Sometimes Honda likes to hide fuses in random spots

There is a fuse box on the front of my motorcycle, right underneath the headlight.  There is also a rogue fuse that is clipped inside of the ignition solenoid wiring harness.  After tracking that down I found it to be blown, and while it’s a bit of a pain as I don’t have any spares at the time, I’d rather have the fuse blow than have to replace all of the electrical mechanics that could have been fried.

Tonight Erin and I also were fortunate enough to have dinner with one of my former coworkers Nate, and his girlfriend Toni.  We went to Matt’s Bar, which is a bit of a famous place in town.  They are home to the Jucy Lucy, which is two hamburger patties with American cheese melted in the core.  It is absolutely delicious, and matched with a pitcher of Summit and a basket of fries, it makes quite the meal.

The bummer news of the week is that I tied for 3rd place in the CloudSpokes challenge I competed in.  Since my code wasn’t accepted as a winner, I’m free to do what I want with the source written for the contest, so here it is!  It’s definitely not the prettiest code, but it was a fun challenge in storing OAuth tokens in a postgres database, and then using those access tokens to transfer information at a later time.  Maybe when my server is behaving better I’ll do a write up the project, but for now I’m just releasing the source.  If you want to see a working implementation, check out e2b.herokuapp.com.  User credentials can be deleted at any time, so if you become uncomfortable with the access that the webapp has, you can revoke their access.

No one is going to be able to read this for another two weeks anyways, but I’ll keep trying to post so that there is content once this server is WAN accessible again.