My first mobile Hackathon experience

On Saturday October 15th 2011 I attended the ATT Mobile App Hackathon held at the AOL headquarters in Dulles Virginia. It was quite a drive for me to get there, on top on waking up early on a Saturday morning but I figured it was worth it, I was already on a roll attending the UM Technology Startup Bootcamp the day before, which was informative in its own right. So i got to the AOL building a little after 10:00 enjoying 45 minutes or so of good reggae in my car and when I got into the building I was surprised by the “hipness” of it all. The event was held on the fifth floor and getting to the actual conference room just confirmed what I suspected at that point: AOL means business now. I met TeamAOL’s main man Christopher Gibson who gave me a card right away and let me know AOL was hiring mobile developers (A good man, if you are looking for a solid mobile dev gig, email ). After a healthy fruit based breakfast, I milled around, networking with the other developers and met others who like me were there for the first time.

At around 11:00am is my memory serves me right, presentations started and the first one was by AppMobi, who were introduced by Alex Donn of the  ATT Developer Program who did a good job introducing the platform. I got to play with their PhoneGap SDK offered as a Chrome plugin and was impressed by the whole package. Deploy to cloud options, emulators for different platforms including Iphone, Ipad and Droid among others. That presentation was followed by one from Apigee, which like AppMobi I had never heard of before and was actually impressed by their offering. OAuth seems to be giving everybody trouble coding and they offered a streamlined simplified API to work with, definitely something to consider for me in the future. There were other presentations from Pearsons who introduced their new API, and ViaFo , App47 and Sierra Wireless. To not also was the demo of the new Android app by the Winamp team of AOL Music and I have to say it was impressive software.

I got lunch (Thai s’il vous plait) and sat around, until Chris got me in touch with Omar and Amira who had ideas for apps but no technical know how, so together with Kyle, a developer from Fort Washington, and Rajish, we became Team Fresh and decided on a Recipe Finder app that would search for recipes entered by users and find a list of ingredients and nearby stores where they can be purchased. Since I was the de-facto tech lead, i set out to first find our data source and wound up on the PunchFork site which provides a recipe API with some paid extra features. I decided to go wit AppMobi as my dev platform and my first task was to get data from PunchFork. It turned out to take longer than I expected due to my inexperience with the AppMobi aUX API. Kyle left around 3:00PM followed by Omar and Amira around 5:00PM and I was left to figure things out with Rajish, who although being a backend .Net developer helped me along and was quite a good conversation partner. I went back and forth with the AppMobi support team (John and Tyler) who were gracious and very helpful. John ended sending me code for a sample app that was actually very similar in structure to what we were trying to achieve but by that time, I was already headachy and hacking the code would have taken too long to meet the 7:00PM deadline for app submission.

It was the end of the day for me, I was mad I could not finish, but the learning experience was invaluable. It made me happy to be around other developers and geek out to the fullest. It’s an environment where as a developer you are understood and it was welcomed for a change. AOL has some very fancy offices and breakout rooms, and as I told Chris Gibson and Chida Chidambaram who were our very gracious hosts, this event helped turned around my opinion of AOL. From the media coverage I assumed i would be going into old offices, populated by old people who were not in with what’s current, even dismissing calls from recruiters about possible opportunities at AOL (which is physically too far for me in any case), but it was quite the contrary. The dynamism I have seen from Chris Gibson and his team, their helpfulness, and the Winamp demo helped me change my mind. They might have taken a fall but they are definitely working their way back up and I am sure I will hear soon in the future about the things that will get done by their mobile development team. If you are counting AOL out, all I know is, as far as their mobile team, you might be surprised so hold judgement.

I left the venue a little after 7:00PM and went home happy with my day. It was productive and I learned a lot. I got some free tee shirts, something for the wife, some stickers and got to play with a Windows 7 phone, which I hadn’t had the opportunity to do yet. My advice for first timers:

  • Attend, don’t be afraid, there are other people like whose first time it is as well, so you won’t stand out, believe me.
  • BRING A LAPTOP, otherwise, you will be bored and are defeating the purpose.
  • Come prepared, if you are a developer, having an idea is good, to really make the most of your time, if you already have a time, plan it all out before hand and use the hackathon time as a collaborative development time to actually get it done.
  • Hackathon organizers: make it easier for devs/business people to create teams before hand so that time spent on design is reduced and we can get a finished product at the end of the day.
  • Fail if needed like I did, you will learn along the way. Nobody is expecting a shiny new app at the end of the day with all the bells and whistles. You’ll see that just having something that works is very satisfying.
  • Attend another one

That last point is well taken. I will be at the Education Hackday in Baltimore next month, and they have actually started building teams around ideas, so make sure to attend if you are in the area.

On expertise, self confidence and job hunting

Every time I go through a job search as I am going through right now, it is always surprising to me how much of an humbling experience it becomes. Reading job descriptions is a good way to quantify and effectively gauge what you have accomplished, that you might not even value as actual skill, and how to express it to a potential employer. My own conundrum is, to express it in a medical allegory, that as far as my web development background, I am a generalist, I’ve dealt with different architectures, frameworks and languages, and reached a point where I am trying to become a specialist. It is a little like trying to go from being a family doctor, to a foot surgeon.

I am trying to focus on front end development techniques, and especially Javascript, which I think that off all languages I have worked with, feels more like a natural fit to me because of its mix of flexibility and power. I just think that Javascript is cool.  The problem now lies in the fact that for the most positions I am considering, and given my length of experience, most companies are looking for “experts” and the way it translates is somebody that has been doing daily Javascript programming for the past let’s say five years. My experience is varied, the type of 5 years of 5 different experiences compared to 5 years of the same 1 year experience, and when given a skills matrix by a recruiter for example, I don’t feel comfortable giving myself a 5 on a scale of 1 to 5 in Javascript because I don’t feel I know everything there is to know about Javascript, not even remotely close. The truth is as far as job functions most companies are trying to gauge is you are good enough to handle all of the client side scripting their application will require, which for most front end developers and designers is definitely possible, the main differences being in quality and style of coding. So strictly from a technical point of view, I definitely know I could handle the job but I just have a hard time labeling myself as an 5-level expert on a 1-5 scale  in Javascript.

That brought me to this excellent article here I ran into today called “Do You Suffer From The Dunning-Kruger effect“,  by Jeffrey Waywhich to makes a long story short, totally related to what I am feeling right now. The Dunning Kruger effect, as defined in the article:

“The Dunning–Kruger effect is a cognitive bias in which unskilled people make poor decisions and reach erroneous conclusions, but their incompetence denies them the metacognitive ability to recognize their mistakes. The unskilled therefore suffer from illusory superiority, rating their ability as above average, much higher than it actually is, while the highly skilled underrate their own abilities, suffering from illusory inferiority.”

and  it manifests itself through “self-proclaimed” experts in a way that they:

  •     tend to overestimate their own level of skill
  •     fail to recognize genuine skill in others
  •     fail to recognize the extremity of their inadequacy
  •     recognize and acknowledge their own previous lack of skill, if they can be trained to substantially improve.

The author really hits it home for me when he expresses that “to my personal web development heroes, I feel like a hack.”, which is how I feel most of the time when seeing some of the cool stuff that is getting done out in the web development feel and it pushes me to learn more and become better. I did run into technical challenges, of various difficulty level and did solve them, and for most I shared the solution on this blog, and it gives me an ego boost but I always have a nagging feeling behind of “Is this the best way I could have handled this?”. So even if 5 years down the line of absolutely working with Javascript on a daily basis I grow to be quite good, I still doubt that I will label myself as an expert. In the mean time, my personal challenge is not to downplay my own experience (“Actual competence may weaken self-confidence“) and being able to convince the right company that I can handle the job.

Read the full article here and also consult the Wikipedia entry on Dunning-Kruger.

Set up JSON action output in CakePHP 1.3

Working  on setting up the Rest Plugin for CakePHP helped me realize that i wanted to set up JSON output for some of my actions. This way, if you request for example “” in the url, you will be returned the JSON post data. This excellent tutorial here will help you achieve it. The steps are simple:

  • Enabling JSON parsing in your app/config/routes.php: Router::parseExtensions('json');
  • Enable the RequestHandler component in your app_controller.php:
    //Only enabling json response parsing for url requested with the .json extension
    if ($this->RequestHandler->ext === 'json')
        $this->RequestHandler->setContent('json', 'application/json');
    //Prevent debug output that'll corrupt your json data
        Configure::write('debug', 0);
  • In your app/layouts folder, create a json folder with the default.ctp (so the file path should be app/layout/json/default.ctp) file with the following content:
    < ?php
    header("Pragma: no-cache");
    header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
    header('Content-Type: application/json');
    echo $content_for_layout;
  • Now for all controller actions that you want the json output enabled for, set the variable  in the viewVars for examples in my PostsController view action, i return the post data I want to view as:
    $this->set('post', $this->Post->read(null, $id));
  • Now second, we need to create the json view for this data. I created a "json" folder in my "views/posts" folder and created a "view.ctp" file (views/posts/json/view.ctp) with this content:
        echo $this->Js->object($post); 
    //Some old posts you will find have this as echo $javascript->object($aPosts); This was done with the old Javascript helper, doing some //might give you trouble as it did for me. use the new JS helper syntax as of 1.3
  • And that’s it you are home free, json output a go go for your action. Access and you will get your regular html output, access and you will be returned your Json output, to view the Json file in Firefox install the JsonView extension.

Now you will notice that for all json views, we will be re-using the same code, basically just changing the name of the variable to output. This call for a JsonView, and I will post aboutit once i get it implemented correctly.