Blog

Dropbox is the most important application I use because it keeps all my files in the cloud, syncs them across devices, shares them with my team and backs them up. It's spoiled me, because now I expect all my applications to be in sync no matter what computer I use.

The problem with native software (as opposed to web-based software) is that your data is stored locally. If I use an app for an hour on my desktop then pop open my laptop, I can't expect to open the same app and see all the data I just worked on because it's a different computer.

Several applications circumvent this problem by syncing your data with Dropbox or another online source. 1Password and Things are good examples of Dropbox support, while an app like Evernote syncs your data with it's own servers.

For apps that don't have a way to sync your data, there is a slightly less perfect (see below) solution at your disposal. It's worth trying if you don't have another way to keep things in sync.

In this example we're going to sync the Address Book application, so that your contacts are available on any computer you have setup with Dropbox. The same steps are involved in syncing most any other Mac app also.

Step One

Close the application you want to sync. Then click on your home folder and navigate to Library/Application Support/. Drag the AddressBook folder into your Dropbox. You can put the folder anywhere.

Sync Dropbox

Step Two

Open the Terminal application. Type in:

cd ~/Library/Application Support/	

This just tells Terminal to "change directory" and navigate to the Application Support folder we were just in.

Step Three

We're creating a "symlink", aka a symbolic link. It's sort of like creating an alias in OSX, but an alias won't solve our problem in this case.

Now type this code in Terminal:

ln -s ~/Dropbox/AddressBook .

This creates a symlink permanently connecting the AddressBook folder in your Dropbox with the AddressBook folder in your Application Settings.

Step Four

Test your symlink by navigating to Library/Application Support/Address Book in the finder. If you see the files, your symlink worked!

Sync Dropbox

Now your Address Book is being synced with Dropbox! The only thing you have to remember now is to not open the application on another computer until your Dropbox has finished syncing. Opening the app before it syncs can sort of blow everything up, which is what makes this solution shaky.

Deleting a Symlink

Keep in mind the actual files are now being stored in Dropbox. The AddresBook folder in Application Support simply points to those same files. So if you want to undo everything we just did, you can delete the AddressBook folder in your Application Support folder. Then move AddressBook from your Dropbox back to it's original location in Application Support.

I use this solution to sync applications like Billings or even my iTunes music library. Hopefully it can help if you use multiple computers. Rest assured that in "the future" stuff like this will get much easier as software becomes more web-connected.

Posted in Apple - Software - Join the Discussion

Apple does a lot of things right. Over the last several years they have made some unpopular decisions that turned out to be good ones. For instance, their refusal to support Flash on the iPhone OS is criticized by many, but it's the right call. Most people know Flash sucks, but up until now no one has had the balls to do something about it.

More recently Apple has been criticized for updating their terms of service to block applications created by 3rd-party frameworks that allow people to write code in another language, then compile it into Objective-C (Apple's native programming language). Again, it's the right call. It may be convenient for some to write Mac and Windows apps in Flash or ASP or Hebrew for that matter, but that's not how it works. Apps should be created in the language they were intended for. It's a ballsy move, but in my opinion it's absolutely the right one.

Now that Android phones outnumber iPhones and Apple has some legitimate competition, it's time Apple makes another bold move: fix the App Store.

What's the Problem?

Great developers have already ditched the iPhone OS by the boatload because of the App Store's flaws. Here are just a few:

  1. Developers are 100% at Apple's mercy with regards to the approval process, which has been inconsistent at best. They can't release products, bug fixes or so much as a launch date for their apps because they are restricted to a vague approval timeline controlled by Apple.
  2. Marketing efforts are limited because you can't give out promo codes or even 30-day trials
  3. It's costly to have a customer refund policy because Apple keeps their 30% cut either way
  4. App Store exposure is difficult to say the least and developers have little to no control over marketing their app from within the proprietary store
  5. Forget the prospect of measuring conversion and analytics surrounding the sale of your application because you can't even sell it on your own website

Imagine buying OSX apps this way ... what a nightmare! Imagine having to drop by the Apple store just to check out an app you read about, then pay more than you normally would because Apple takes 30%. I believe this process stunts both application developer growth and Apple's growth of the iPhone OS. It may be profitable in the short term for Apple, but could be devastating in the long term.

Solution #1: Make Inclusion Optional

  1. Selling your product in the App Store should be optional.
  2. Developers need the means to distribute, promote and sell their application however they want. Apple only gets their 30% cut for products sold in their store.

The App Store would still exist as a formidable way to sell your app without having to worry about payment processing or a website. But if some developers prefer do it all on their own, they deserve that opportunity.

Solution #2: Make the Approval Process Optional

Apple's argument against this suggestion is all about security and performance. They want the ability to keep the iPhone OS as secure and bug-free as possible. I totally get that, which is why application approval/certification should still be available to all developers whether they sell their product in the App Store or not.

As a developer, even if I don't want to sell my product in the App Store I should be able to pay a flat fee structure for Apple to review and approve my product just like all the ones in the App Store. Developers that pay the fee get the exact same treatment as App Store products.

While I completely understand the approval process and why it exists, I still believe it should be optional. iPhone users don't lease the devices from Apple, they own them. Therefore it's my right to screw it up with applications Apple doesn't support or approve if I want. Apple could limit the APIs and access in the SDK for unapproved apps, or throw up a big warning before installation; either would be reasonable. I just don't see why this has to be any different from installing an application for OSX.

Solution #3: Ditch iTunes

iTunes was awesome 10 years ago. Since then it's progressively morphed into the slowest, most bloated app on the Mac platform. It makes no sense for iTunes to serve all the purposes it does today. It should be scaled back to the music player/organizer it was always meant to be. Here's how:

  • Make the iTunes Store web-based. The irony of Steve's open letter blasting Flash is that he talks about Flash being a proprietary platform. Guess what iTunes is? Proprietary! Thanks to all the great technologies talked about in that letter (HTML5, web standards), the store would lose nothing if they transitioned to a web app. Hopefully that's the direction they are headed by acquiring LaLa.
  • Re-work iSync. Apple's iSync used to be pretty good at syncing Macs with other devices. iPhone OS devices should use a dedicated application like iSync to keep all their data in check. Furthermore, developers should be granted access to sync their applications through iSync as well, instead of forcing users to do it over WIFI as a completely separate process.

I could learn to love iTunes again if it just did what it was intended to do and played/organized my music.

In the end I have no problem with the iPhone OS being proprietary. So are OSX and Windows. But I think developers must continue to publicly challenge Apple's unfair practices with regards to the App Store. The iPhone OS will not scale or perform at it's full potential as long as it's constrained by the App Store bubble. When Apple decides to put developers in a position to succeed, they in turn will achieve a greater level of success.

Posted in Apple - Business - Join the Discussion

If you create websites or web apps for the iPhone OS (iPhone, iPad, iPod Touch), it's important to setup a solid local development environment for testing. Using a desktop web browser (even Safari) or one of the many available "emulators" for testing is worthless because the real thing looks different.

The only way to test properly is with Apple's iPhone Simulator. Since you can't just type a local file path into the simulator, I'll show you step-by-step how to get it working (on a Mac).

What You Need

1- Install the SDK (with Xcode) and MAMP

The SDK is about 2.8GB so you should give it a while to download. Installation took about ten minutes for me.

What's MAMP?

MAMP is a great little application that gets you up and running with the local server environment on your Mac in about five minutes. All you need to do is install it like any other application.

2- Setup the location of your website or web app

Create a folder for your project. It can be anywhere on your computer. Place an index.html file in it with "hello world" or whatever you need to test that it's working when we open the simulator.

For this tutorial I'm going to call my folder "iphone-site" and put it in /Users/Nick/Sites/ on my computer.

Folder

3- Create an alias in MAMP

Go to the location where you installed MAMP (probably Applications), then open this file: /MAMP/conf/apache/httpd.conf. Around line 655 you should see the following code:

Alias /MAMP "/Applications/MAMP/bin/mamp"

<Directory "/Applications/MAMP/bin/mamp">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Add a line of space after this code, then create your alias with this code:

Alias /iphone-site/ "/Users/Nick/Sites/iphone-site/"
<Directory "/Users/Nick/Sites/iphone-site/">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

Replace the file path above with the file path to your site in both places.

Save the file and close it. Please note that if you ever make edits to the httpd.conf file while your MAMP server is running, you will have to restart the server to see those changes take effect. Also, if you ever change the location of your site, of course this file will have to be updated with the new file path.

What this does is keep the URL clean and easy to remember. Setting up an alias is not technically required, but I highly recommend it. Instead of the URL being this:

http://localhost:8888/Users/Nick/Sites/iphone-site/

The new, clean URL would look like this:

http://localhost:8888/iphone-site/

4- Test It

Launch MAMP and make sure that the server is running. The window should look like this:

MAMP Window

Now it's time to open the iPhone simulator. Open a finder window and navigate to the drive you installed the developer kit on (eg. "Macintosh HD"). The simulator is in the /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/ folder. It's a good idea to add it to your dock so you can access it easily in the future.

Once the simulator is running, open Safari. Navigate to http://localhost:8888/iphone-site/. Of course you will want to substitute iphone-site in the URL for the name of your project. You should see "hello world" (in very tiny text), which means you are good to go!

iPhone Simulator

Now you can develop iPhone websites and web apps without depending on an internet connection, which should speed up development time significantly. Whenever you start another iPhone project, simply add another alias to your httpd.conf file and get started!

Testing on the iPad

The iPhone OS SDK version 3.2 and up includes support for the iPad in the iPhone Simulator application. It's a little confusing, but think of the iPhone as more of an operating system rather than a device in this context. From the iPhone Simulator, click "Hardware" in the main menu, then "Device" and you can select between the iPhone and iPad.

Device Menu

What about debugging?

Mobile Safari has a debugging console, but I didn't find it too helpful for basic front-end development. There isn't a substitute for Firebug or Safari's developer tools, so I would suggest continuing to use those in a desktop browser if you get stuck. Using the same localhost URL will work in other browsers as well as the simulator.

Resource Library

Once you have your test environment going, it's important to familiarize yourself with the mobile Safari browser and how to make the most of it. Here is a set of articles to get you started:

Posted in Apple - Code - Join the Discussion (11 Comments)

Thanks to my two partners Jared and Denny, I recently joined the masses of early adopters and became a proud iPad owner. Big shocker, I think it's an outstanding device that will change how we do things.

The iPad is so useful in fact that I think that's the biggest problem. It's another device that keeps me in perpetual "connectedness" with all things digital. At what point does this become a detriment to my attention span, productivity and physical well-being? I don't want to be more comfortable working in front of a screen than reading a new book or having an engaging dinner conversation, yet sometimes I feel that way.

This reminds me of a great scene in the movie Wall-E. Remember the spaceship all of the humans are on in the "future"? They are all plugged into these little pods and glued to a screen 24/7. They all get fat, no one uses the swimming pools and no one even talks face to face anymore. It's like they are zombies.

I feel more and more like the zombies in Wall-E every day. I wake up to an iPhone, exercise to a DVD, work in front of a screen 8-12 hours, then come home and regretfully spend at least a couple more hours in front of a screen of some sort.

Of course, this isn't the iPad's fault. I'm responsible for how I spend my time each day. I just find it amazing that technology is at a level where people have to purposefully make time to unplug and do things that are truly worthwhile in life.

Today I'm making a decision to try and unplug for at least 4-6 hours per day. No screens of any sort, except for the Kindle because I can read books on it without being disturbed. On weekends I hope it will be more like 8-10 hours. The iPad rocks, but nothing that creates lasting happiness can be found there.

Posted in Apple - Fun - Join the Discussion (4 Comments)

Jan 15, 2008

Making Mistakes

A defining characteristic of great organizations is the ability to handle mistakes well. Mistakes are a part of everyday life both personally and professionally; yet very few truly understand the value of taking responsibility, and the effect it has on others.

I believe it's human nature to struggle with taking responsibility or admitting a mistake. But nothing worthwhile comes easy, right? Being mindful your inordinate ability as a human to make mistakes is the first step to handling them well.

In a technical business such as web development, mistakes, errors and bugs happen relatively often. It's the nature of our business in a sense, because the web is still in it's infancy. Great developers find them before the client or the user does, but there is only so much testing that can be done. Sometimes mistakes happen, and handling these situations with integrity and humility is of the utmost importance.

When confronted with a situation where you could be responsible for a mistake, it helps to ask yourself the following questions:

  • What role did I or my team play in this situation?
  • What are all of the potential ways I could be responsible for what happened?
  • If this is not my fault, how can I prove it and work towards a resolution with the responsible party?

Asking these questions always forces me to look into the situation and find an answer, rather than take the lazy, hands-off approach that can be frustrating for others. If you ARE responsible for all or part of the problem, handling it well means following up on 3 crucial levels:

1. Take Responsibility

Simply explain what happened, and apologize. Make sure you NEVER use "but", "if" or anyone else's name. Taking responsibility is not an opportunity to make excuses. Even if the problem was only 10% your fault, most times it is more appropriate to take full responsibility for your mistake(s) so that both sides can hopefully move on without hard feelings.

2. Make it Right

Steve Jobs recently did a great job turning a mistake into a great publicity statement for his company. Apple's environmental policy had came under harsh criticism for quite some time, and he responded with a public letter. This letter not only addressed the problem, but he made it right by revealing their new environmental plan to remove toxic chemicals from their products and recycle them at a higher rate.

What it takes to make a situation right varies, but don't hesitate to go over and above the status quo to keep the person or client's confidence. This might mean a discount, a refund, a public apology or simply a heartfelt letter/email.

3. Prevent it From Happening Again

Early last year, JetBlue had a customer service nightmare on their hands after a winter storm. Hundreds, if not thousands of customers were stranded in the Northeast, and subjected to awful delays and phone hold times. This was a defining moment for CEO David Neeleman and the 7-year-old company at the time. The letter he wrote to customers can be found here.

Not only did they accept full responsibility and attempt to make the situation right with their customers, but they took pro-active steps to prevent problems like that from happening again by introducing the customer bill of rights. Considering the situation, I felt that Neeleman's response was well executed.

When mistakes are made, apologizing and making the situation right is not quite enough. Very clear steps must be taken internally to ensure that the mistake does not happen again.

Our Mistakes

This article was written solely because this is something I struggle with daily, as most people do. We've made some bad mistakes too. Here are a couple of them:

Early last year, many of our clients experienced about 12 hours of downtime from a hard drive crash on one of our servers. It was the first crisis we had ever experienced with regards to our servers, and we were not prepared. About a week of work was lost, and it took weeks to get everything back the way it was.

Not only did I call each and every client personally to apologize and outline the plan to get back up, but we made sure it would not happen again. Now each of our servers has a RAID real-time backup drive, and each site is backed up every 24 hours to a separate server across the country.

Another mistake we recently made had to do with one of our clients losing a number of form submission emails from their site. A combination of about 5 separate things contributed to the problem. Were we responsible for all those things? Nope. But if we did our job as a server host and monitored our mail queue, we could have prevented it. Currently we are writing a script to monitor mail queues more closely so the problem does not happen again.

Posted in Apple - Business - Project83 - Join the Discussion

May 25, 2006

I love apple

Not to be overly geeky or anything, but I love apple. Not only was the company founded on my birthday, but they are truly the branding marvel of the 21st century thus far. It is a privilege to watch as they captivate the world with their every move. Others do their best to follow, but it never rings true. From the commercials to the innovative products, their brand is in a league of their own.

As a loyal user and follower of all their major announcements, I have become a huge fan of Steve Jobs. You would think the Rolling Stones were about to take the stage before he makes a presentation. I mean this guy says the word and Disney cuts off their 10-year relationship with McDonald's because their food sucks.

Apple store

All this to say that they never cease to amaze, and their latest apple store is certainly no exception. The store is technically underground, but above ground is a gorgeous glass box. To my knowledge it is absolutely one of a kind. You must see it, and you can visit the website for more cool pictures.

Posted in Apple - Join the Discussion