I’ve spent part of my development schedule over the last few months rebuilding the iPhone app for NYC based startup Clean Plates. The Clean Plates iPhone app v2 is now available on the app store so check it out. Clean Plates offers professional restaurant reviews and a series of email newsletters with a healthy eating focus. The app allows users to search nearby or by neighborhood to find restaurants (think Yelp’s app but with more advanced filtering options and only professional reviews).
From a development perspective it was an interesting project in one way in particular: it was a brand new re-write of an existing app. Why re-write instead of extending the existing code base? Read on…
The old app was originally built several years ago and consisted of 475 classes and 79,889 lines of code. If that sounds like a lot of code that’s probably because it is. Because of it’s age there was no use of Storyboards and art assets were fixed in size (no Auto Layout). Combine this with poor performance, frequent crashes and heavy usage of an old un-upgradable version of RestKit and you have a perfect case for a brand new build.
The new app uses Storyboards and Auto Layout so it is compatible with the newer, larger iPhone models. It has been redesigned to be more in line with iOS 7+ style guides and even has more advanced features, including better restaurant filtering and the ability to save favorite restaurants. It is also only has 52 classes and 6,910 lines of code. With the new updates I tried to not to leave any existing users behind so it is still compatible with iOS 7.1+ devices, including hardware compatibility with the iPhone 4 and it’s shorter form factor. Finally, there are no major dependencies on third party libraries such as RestKit so future upgrades should be relatively smooth. The app is not perfect and at least one update will be needed for minor improvements but I consider everything here a big win.
After taking a two month break, Teach History Sunday is back. On Sundays I enjoy blogging about the history of technology. As my seventh entry, here are some excerpts from the 1985 Playboy interview of Steve Jobs.
The year was 1985. Steve Jobs was not yet 30, was reporting to new Apple CEO John Sculley and just came off of launching the Macintosh. The trajectory of both Apple and Jobs would change course soon as Steve Jobs would find himself fired by the company he founded. Because of this critical period of time it is particularly insightful to read the 1985 Playboy interview of Steve Jobs. My favorite quote is the following:
You know, Dr. Edwin Land was a troublemaker. He dropped out of Harvard and founded Polaroid. Not only was he one of the great inventors of our time but, more important, he saw the intersection of art and science and business and built an organization to reflect that. Polaroid did that for some years, but eventually Dr. Land, one of those brilliant troublemakers, was asked to leave his own company—which is one of the dumbest things I’ve ever heard of. So Land, at 75, went off to spend the remainder of his life doing pure science, trying to crack the code of color vision. The man is a national treasure. I don’t understand why people like that can’t be held up as models: This is the most incredible thing to be—not an astronaut, not a football player—but this.
Steve Jobs was very prescient of recognizing the coming Internet revolution even back in 1985 as expressed in this quote:
The most compelling reason for most people to buy a computer for the home will be to link it into a nationwide communications network. We’re just in the beginning stages of what will be a truly remarkable breakthrough for most people—as remarkable as the telephone.
Jobs wasn’t right about everything though. His view that IBM would crush the clone makers had it backwards – it was actually IBM that would get beat:
A lot of people thought we were nuts for not being IBM-compatible, for not living under IBM’s umbrella. There were two key reasons we chose to bet our company on not doing that: The first was that we thought—and I think as history is unfolding, we’re being proved correct—that IBM would fold its umbrella on the companies making compatible computers and absolutely crush them.
The whole interview is worth reading. Read the interview in it’s entirety here.
When I first started messing around with WordPress many years ago it was simply known as a powerful blogging platform. Today, WordPress is a highly configurable content management system that can handle almost any type of web based platform (though not necessarily the best choice for everything!). One of the best aspects of WordPress is the unbelievable number and variety of plugins. For a client project I was tasked with build a custom Content Management System (CMS) utilizing the WordPress plugin Pods.
Pods utilizes the existing WordPress admin interface and supporting MySQL database to allow for the creation and management of custom objects. Objects can be very complex in nature and can take the form of many fields with customizable data structures. Complex relationships can also be defined between objects, such as many-to-many. Pods can also reinforce simple object creation and editing validation, such as required fields.
In general I like Pods but I did find a few negatives. First, performance can be rather slow so make sure you have a respectable WordPress hosting provider. Second, object customization is not always straight forward and some of the settings can be rather arcane and without much in the way of documentation. Third, I found a number of bugs such as cases where objects were not updating properly and the data export / import process plain broke. Finally, the underlying database objects created by Pods is somewhat non-standard and not exactly how you would personally build a well designed normalized database.
One final thing to note: development on a WordPress JSON restful APIs has been ongoing for several years and is set to become a default component soon. Leveraging upon this work, there is a Pods JSON API plugin. I made an attempt to configure the Pods JSON API plugin but I had several issues. Couple this with the fact that the Pods database structure is not ideal at all for fast queries that are needed to support an efficient API and I decided to handle my API by leveraging the Slim PHP Micro Framework.
In the end, I think Pods is an interesting choice for those wishing to leverage their existing WordPress infrastructure and expertise to build a highly customizable and powerful content management system. With it’s bugs and quirks, however, be prepared to spend at least a minimal amount of time getting setup and running.
As an independent software consultant I get contacted by companies and individuals from all walks of life looking for technical help. Everyone has their own skills and experiences and thus different methods for evaluating candidates. If you are looking to hire a consultant, follow these steps and you are sure to land your dream consultant from Hell. All of these are based on actual experiences.
- Upon first contact, fail to address the consultant by name, introduce yourself or explain your needs in any way. Bonus points for requesting an in person meeting at your office to begin discussions.
- Ask the consultant to sign an NDA before even discussing the basics of the project
- Have no budget and be unable to provide one when asked
- Ask the consultant to take a “coding test” that is actual code that you want to use for your production website. Clarify that it should only take an hour so it’s “no big deal.”
- Meet your consultant in person for a requirements discussion without a laptop or writing materials. Ask to borrow a pen and paper.
- Provide requirements specifications on wrinkled up notebook paper that you pulled from your pocket. Bonus points for offering to scan the papers.
- Describe yourself as “brilliant” without a whiff of sarcasm
- Heavy usage of the following terms: “paradigm”, “disrupt”, “billion dollar idea”, ”the next Facebook”
- Trash multiple consultants that you worked with in the past. Bonus points for trashing a consultant that you are still currently working with but are looking to replace.
- In the work contract’s indemnification clause ask the consultant to protect you against any and all ill consequences of your business, related to the consultant’s work or not