This Friday my wife is graduating from Christian Brothers University with her MBA. It has been a long road over these past few years, but she emerged victorious. The next chapter in her life is to move her current consulting career back to corporate America and it is interesting to see that process again...and when I say interesting I mean SAD and PATHETIC. It amazes me just how unusable these online job applications are. First she is asked to create an account on CompanyXYZ's site as if it is some online community that she will be frequenting often and sharing recipes with friends. Second she is asked for her personal meta information, Name, Address, etc. and in some cases her SSN (which no one should ever give unless they are given a job offer and the company needs a background check) and then she has to enter in all of her previous employment, education and then FINALLY upload her resume. Some want the resume plain text, some require it in PDF or DOC. Nothing is ever consistant. All of this is redundant and unnecessary. You want someone's contact information, it is in the resume. You want someone's previous work history, it is in the resume. You want someone's qualifications and awards, IT IS IN THE RESUME. Why does an applicant HAVE to give you this information again?!
One of the biggest gripes that I have with working with the FBConnect iPhone SDK, and really the Facebook API, in general was having to deal with a very inefficient REST implementation. Callback after callback, protocol after protocol, major bugs (that have yet to be fixed as far as I know), and my biggest issue is the nasty user experience having to login a user. I was very excited to hear when last month Facebook announced they had came out with a new API that would allow great security, ease and flexibility. The pains of having to go through currently working functionality and refactor the code to accommodate the new features wasn't too much of a problem for me because it would mean a reduced code set on my part and I would be able to get rid of the Facebook Connect SDK. I set out to test my theories and functionality via a quick web app. No problems. Then I proceeded over to my native iPhone app. EraseUrX v2.0. The new authentication mechanism utilized in Open Graph is OAuth2.0. While many of the headaches and complexities of using OAuth are addressed and the documentation for using it in a mobile web app are well documented with Facebook they TOTALLY dropped the ball on providing any direction on using it with a native iPhone app and they don't provide an updated SDK.
I am currently working on a photo gallery/slideshow app and one of the requirements is for the main gallery listing page to have static header and footer that shows the app name, contact information and adverts. The logical first method of attack is to just setup a UITableViewController subclass, slap some views and subviews to the table view header and footer and get on with the day. However, the table itself should scroll, but the "header" and "footer" views should remain stationary. My first approach, I found out quickly, did not work. Surprisingly, there are a lot of people having issues with custom sized uitableviews in general and the discussions that I saw online didn't provide a very straight forward solution so I decided to create one.
The first big problem that most people run into is that they can't seem to resize the uitableview no matter what frame size they set. It doesn't matter if you do it programmatically or through Interface Builder it still takes up the ENTIRE screen. That is because they have subclassed UITableViewController. To be honest I am not sure that happens "under the covers", but the custom frame sizes/locations are ignored. You must make your controller a subclass of UIViewController and then add your UITableView as a subview to the your controllers view.
For example:
At this point your frame size and height will be respected.
In my example I setup a simple UINavigationController project with two controllers. The first has a header view, footer view and uitableview. The second "detail" controller just has a UILabel with placeholder text. Everything is built programmatically so that you can adjust frames and positions easily as well as any other customizations you would like. Comments/suggestions are always appreciated.
Being that my passion for development and design are usually centered around mobile apps I am always interested in any new platforms and handsets that poised to make any impact on the current market. As such I was really interested in the article posted over at Engadget yesterday: Dell Lightning: the ultimate Windows Phone 7 device leaks out. However, my enthusiasm faded after the first sentence and twindled down to zero by the end of the first paragraph.
"Hot damn, people. The mother of all Dell leaks just dropped into our laps, and the absolute highlight has to be the Lightning, a Windows Phone 7 portrait slider."
I can overlook the fact that the device is running Windows and some of the on screen usability issues because I haven't used one, but what bothers me the most is that handset manufactures can't seem to understand handset design. This phone is presented as having a "revolutionary" device design, but once again you have the same tired, inefficient slide-the-handset to show the qwerty keyboard. Really?! That is the best you have. That is NO different from all the other handset designs that are offered by ever manufacturer in the world for the past 5 - 10 years. Dell and Microsoft combined have more money than most European countries. Why they don't or can't find/recruit/steal the BEST designers and developers to come out with a real competitor to the iPhone is beyond me? However, what this does mean that within 6 months of this device launching you will see it sitting next to the Dell MP3 player that was supposed to be so great.
Looking over some of the other features that the device offers, once again there is nothing that I can't get, and probably better, with an iPhone or Nexus One.
::NOTE::
When I was attempting to find a link to the dell jukebox from their website it didn't come up.
Over the past week there has been quite a bit of news coming out of the Twitter HQ. First it was announced that Twitter has acquired Tweetie and subsequently hired it's author Loren Brichter. They also have launched the promoted tweet service and for you real bird watchers out there the ability to add meta data to tweets using the API. Finally, it was confirmed that Twitter is going to launch their own URL shortener and stop using bit.ly. A recently published article on Mashable summaries one tech startup's frustration with the announcement of Twitter now coming out with it's own "official" Twitter client. Why is there so much frustration? Because developers, at times, feel they have been sabotaged by the very companies they are using. Just to be clear, they are upset because a service that Twitter owns, that they allow developers to use for free, is now being used by the very company that created it in the first place to promote their own brand!
I'm just saying...
I am developer and know what it is like to have that great idea or great app and to have some MUCH bigger/better company come along and launch their own version which inevitably kills mine before it got off the ground. However, those are the ropes. Don't put all your "1"'s and "0"'s into one app or service. That goes for everything in life. This animosity towards Twitter, and any other information service, is quite misdirected. As mentioned earlier, Twitter didn't go out and build their own app, they chose, quite possible the best Twitter client in the AppStore today. Did developers really expect Twitter to NOT have an official app. I am surprised it has taken them this long. That is like Apple releasing the iPod, but not iTunes.
What does that really mean? If you create something that is TRULY great then there is a good possibility that it will get picked up. Just look at all the startups and other mashups that have been acquired by big companies lately. Twitter has just released a site for developers that will aid the creation of new mashups and services to use with the information they provide not hinder innovation.
It is an unfortunate price that one has to pay when the service you rely on for your mashup comes out with their own official app that does the same thing and my sympathies are definitely with you, but if all you do is rely on that ONE great idea then you weren't going to last that long anyway.
As my experience, and hopefully skill, in iPhone development has matured over the past year and half I am in the constant search for the best techniques for my apps to run better, faster, and consequently more efficient. Of the top developers that I follow they all make references to the importance of utilizing subclasses of UIViews and the underlying subsets of views in general.
I love the UI elements that are used on the phone. I didn't realize the awesome power of CoreAnimation and the flexibility that it gives you to manipulate and create graphics as such a granular level. I set out to see if I could recreate a common iPhone UI element completely programmatically: a glossy gradient button that still responds to touch events.
The end result was a success and a great learning experience. I still need to add in more testing to make sure that interacting with all these views is more efficient than interacting with standard pngs.
This biggest issue that I ran into was "re-enable" the button actions.
Simply subclassing UIButton did create a problem when dealing with the UIControlEventTouchUpInside/UIControlEventTouchUpOutside methods that you associate with buttons.
I was able to overcome this issue by implementing the touchesBegan and touchesEnded methods. Remember...UIButton inherits from UIControl, which in-turn inherits from UIView.
Problem solved.
Update - 03.31.2010
I decided that I didn't like the accuracy of the location from the browser. It is isn't as good as the MapKit or default Google Maps app on the phone. I added a button the directions page to open default maps application.
One of the best features used in Google Maps is the turn-by-turn directions. Unfortunately, I haven't seen, and don't even know if it exists without proprietary code, an effective way to show turn-by-turn directions using the MapKit API in the iPhone SDK. Though Google announced that they have included it in their Android platform they were vague about if/when it might come to the iPhone SDK. No matter, where there is CoreLocation there is a way.
One of the best iPhone reference books on the market today is iPhone SDK Development by Bill Dudney and Chris Adamson, published by Pragmatic Programmers. The examples are real-world, easy to follow and cover just about any area of development that one needs. In my earlier projects and example code I tended to use a lot of graphics for buttons and backgrounds because I need something with rounded corners and/or a gradient. However, in my latest project I have wanted to get away from that and utilize CoreAnimation and more UIView drawing techniques and the results have been outstanding. Load time on my views are much faster because all the drawing and rendering are done on the compiled view level and not from the rendering of an image.
If I can't get to Google then why not bring Google to Memphis. The latest project that I worked on is the promotional site to campaign for the Google Fiber project to select Memphis as one of the cities for the it's ultra-fast network infrastructure. It, by-far, has been one of most rewarding endeavors that I have had the privilege to be apart of. Not only because of the different technologies that were used for the site (jQuery, Google Docs, Google Buzz, Twitter, Facebook, YouTube, my custom ZF CMS), but also I was able to give back something to the community in hopes of growing not only the local economy, but also foster greater innovation for the rest of the world. Support Memphis in it's bid for Google Fiber. Due your small part in something BIG.http://memphisgoogle.net/site/submit-ideas
http://www.youtube.com/mcan901