Handling CORS Requests in Flask(-RESTful) APIs

Sometimes, it is useful to make cross-origin requests when building web applications and interacting with remote APIs. For example, it may be necessary to make a HTTP GET request from awesomeapp.com to an API endpoint at api.zoo.com/v1/animals/. Such a request is considered to be a cross-origin request since it involves different domains. Ordinarily, such requests are forbidden by web browsers that conform to the same-origin security policy.

Cross-Origin Resource Sharing (CORS) allows requests for resources (e.g. JavaScript files, API calls, etc.) to be made from a domain that is outside the one from which the resource is being served. Using CORS, a web browser and server can team up to decide whether or not to allow a cross-origin request. JSONP is another way to achieve this.

This blog post demonstrates how to enable CORS when developing web applications with AngularJS (or any other front end JavaScript framework) and Flask-RESTful. Flask-RESTful is an extension to the lightweight Flask framework for building RESTful APIs in Python.

Imagine you decide to build your AngularJS front end using angular-seed as a starting point. Angular-seed and Flask-RESTful both provide built-in development servers. The angular-seed server for your app runs on by default while the Flask-RESTful server runs on  This qualifies as two different domains since the port numbers (8000 and 5000 in this case) are different. In other scenarios, the IP addresses (or domain names) could be different too. When your AngularJS app attempts to make a cross-origin request (e.g. a HTTP POST) from to one of your Flask-RESTful API endpoints at, explosions start going off everywhere eventually resulting in an error message that looks like this:

XMLHttpRequest cannot load No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘′ is therefore not allowed access.

When you make a cross-origin request, be it GET, POST, PUT, or DELETE, the browser first sends an OPTIONS request instead of the original request you made. Your Flask-RESTful server/API is expected to provide a response with headers specifying whether or not to allow the cross-origin request as well as what HTTP verbs to allow. There are other headers that can be specified as well. If the response is in the affirmative, the browser then sends the original request and your API responds as usual.

Browser Requests

Browser Requests

So how do you provide the adequate response to OPTIONS requests in Flask-RESTful? One way to do this is to specify that the required CORS headers be sent back each time your API responds to a request. This can be done in Flask by registering a function to be run after each request and then using that function to add the required headers to every response as shown in the following code snippet:

Lines 15-20 authorize cross-origin requests to the Flask-RESTful API by adding the required headers to every response.

Note that you do not need to change anything  on the front end (AngularJS).

As a Flask and AngularJS newbie in a hurry to complete a certain project, this stumped me for a short while. I hope this helps someone save time that would otherwise be spent searching the Internet and trying to make sense of questions and answers on StackOverflow.

Additional Resources

Reading: Android Programming, The Big Nerd Ranch Guide

I am finally on the verge of “completing” my self-imposed native Android app development boot camp. Phew!!! In between a hectic class schedule, a thousand and one other things to learn and a general lack of discipline on my part, I have definitely spent way too long getting up to speed with Android.

Before now, I had always wanted to dive into native Android app development, but somehow never got around to it. My approach to learning new technologies usually starts with finding a good book. My idea of a good book is one that presents its material in tutorial-style such that you get to build actual things rather than simply get buried in a deluge of concepts, facts and descriptions. Having exhaustively leafed through almost 90% (912 of 1085 pages) of Android Programming: The Big Nerd Ranch Guide, I can quite confidently say it is a good book and I highly recommend it to anyone who intends to learn how to build native Android apps.

As part of your journey through the book, you get to build a number of small apps while tackling numerous “challenges” formulated by the authors. Some of the apps you will build are:

  • CriminalIntent – a crime reporting app (complete with camera and SMS integration).
  • RunTracker – An app that tracks your route when you go on a run (via GPS and Google Maps).
  • A quiz app.
  • A Flickr client.

I have a number of little Android projects lined up and I am particularly looking forward to a particularly “serious” one I have been mulling over for some time ;-). Hopefully, I get around to these things eventually.

Basking in the glory of LaTeX…

So I finally learned how to use LaTeX after putting it off for centuries. My life has not been the same since! Now, I just want to keep writing… FOREVER. :) Nah, not really, but…

LaTeX is a popular typesetting tool especially within the academic research community. Although definitely not as easy to use as Microsoft Word or OpenOffice (Yay! for free software), I have to admit that it creates some really beautiful and professional looking documents. Now, the issue of what “beautiful” entails is entirely subjective so not everyone will  necessarily agree with my claim.

Besides being completely free and open source, one of the most obvious and better appreciated advantages of LaTeX over more traditional systems such as Microsoft Word and OpenOffice is that it gives you the superheroic ability to produce documents with astounding typographical quality. This quality especially comes to the fore in documents that contain lots of mathematical equations/expressions/symbols, code listings and other non-traditional text that abound in scientific discourse.

In combination with BibTeX, managing lists of references and citations in LaTeX becomes such an incredibly organized task. I cannot overemphasize how important this is to the process of writing research papers.

The biggest downside of LaTeX is the fact that it is not necessarily easy to learn. Since it does not provide an interface that is point- and click-driven, it definitely takes some time and dedication to learn. Beauty does not come easy, does it? Also, it is important to note that LaTeX excels in document structure but not design. In other words, if you are looking for a tool to help you create design-intensive custom documents with flashy colors, bells and whistles, LaTeX is definitely not for you. However, if you are looking to create beautifully structured and typographically astounding documents, you are welcome to bask in the glory of LaTeX.

Since I spend a lot of my time working with Windows (yeah, I know, real men use Linux! :)), I have become most comfortable with MiKTeX and TeXnicCenter. I highly recommend them if you choose to create LaTeX documents in Windows. Also, ShareLatex and WriteLatex are pretty friendly starting points. Meanwhile, I’ll just go back to typesetting this beautiful LaTeX document I have been working on…

NB: Visit http://www.howtotex.com/howto/installing-latex-on-windows/ for some additional information on installing LaTeX on Windows, as well as other TeX resources I have found helpful.

Building an “Intelligent” Search Engine in Perl

Many months ago, I undertook the task of building an “intelligent” search engine in Perl. This was to be part of a class I was taking. Call me naive, and indeed I was! I had little to no idea how mathematically-rooted the process of searching and retrieving relevant information from documents actually is. I was quite taken aback by the amount of vector algebra I had to deal with. This turned out to be one of my most valuable learning experiences. With time, I gained a new-found respect for Google, Njorku and other companies that try to provide users with innovative ways to effectively search the web.

The specific intention was to build an “intelligent” search engine in Perl that would crawl, index and retrieve relevant web pages (as requested by a user-formulated query), from the University of North Texas web domain. The search engine was to have some sort of “intelligent component” that tries to improve the quality of search results by employing some form of heuristics. Furthermore, I had to document and explain the techniques I employed in the process of building the search engine from start to completion.

Accomplishing this task required quite a number of steps, most important of which was a clear understanding of the vector space model representation of documents and queries. Essentially, the following steps were necessary:

  • Build a web spider/crawler that gathers URLs from a web domain using a breadth-first strategy.
  • Build a text preprocessor responsible for extracting the contents of URLs, stripping the content of html tags, tokenization, removing stopwords/punctuations and word stemming.
  • Create a (word-level and document-level) inverted index that holds the vector space model representation for each of the web pages gathered.
  • Create a query engine responsible for processing queries provided by a user. This processing involves converting text queries into vectors and comparing these query vectors to the document vectors stored in the inverted index.
  • Build a web-based Graphical User Interface (GUI) for the search engine.

I have provided links to the complete project. I hope these resources serve as instructional material for anyone else trying to get up to speed with the basic information retrieval concepts demonstrated therein.

A usable demo can be found here: http://students.cse.unt.edu/~dta0022/searchengine/

The complete project report can be found here: https://www.dropbox.com/s/ru6mbawf04pl448/report.pdf

The complete source code and supporting files can be found here: https://github.com/davidadamojr/TinySearch


Implementing the MicroHaskell programming language in Java (Github Repo)

One of the most challenging things I had to do last year during my first semester of graduate studies was to implement a fully functional programming language.

This required going through all the necessary stages of building a compiler based on a BNF description of the language it was meant to compile. Most important of these stages was building a recursive descent parser, constructing a syntax tree and writing the code for the actual interpreter. Although I have been writing code for as long as I can remember, I never really appreciated all the work and drudgery that goes into making programming languages work.

The programming language I implemented is a subset of Haskell which we called MicroHaskell. Haskell is an amazing functional language and it was interesting to take the leap from the more familiar imperative languages to studying functional languages and what makes them unique and different. The implementation of MicroHaskell I worked on was done in Java. I hate Java, but I’m happy I actually pulled it off.

You can be sure that after going through the “hardwork” of implementing a “tiny” programming language, I now have a better understanding of what makes the code we write, do what we intend for it to do.

I have created a github repository that contains my source code, test files, BNF description, and static/dynamic semantics specifications which guided my implementation of MicroHaskell. It is my hope that this serves as instructional material for someone else who has to go through the task of learning how to build a compiler/interpreter.

You can find the github repository here: https://github.com/davidadamojr/microhaskell

OpenBooth: Restaurant Order Management (Open Source Software)

In August 2012, I started a long journey toward a PhD in Computer Science and Engineering at the University of North Texas, Denton, Texas.

In my first semester, I took a Software Development course and worked on a class project that aimed to build a system that enables restaurants easily take and process orders from customers without the need for direct interaction between customers and waiters. My team chose to call this project OpenBooth.

It was my aim to actually overdo the project and load it with all possible features I could think of. This was exactly what we achieved and we ended up with a very feature-laden restaurant order management system.

OpenBooth is built with PHP/CodeIgniter and uses MySQL as its database back-end.

In the spirit of Open Source Software, I have created a sourceforge project for OpenBooth and I encourage developers and enthusiasts who might be interested in this project to pick it up, dissect the source code and use it as they wish.

Many thanks to Quentin Mayo, Turner Andrew and Travis Frederick for their invaluable contributions to this project.

You can find the OpenBooth sourceforge project here: http://sourceforge.net/projects/openbooth


Introducing FUTA SoftXpo…

The world is in constant need of software engineering talent. Indeed, almost everything these days is driven by computer software. Unfortunately, considering just how densely populated our home planet is, and the sheer variety of individuals on earth, it is easy to conclude that undertaking the task of identifying individuals with the kind of (latent) talent and abilities required of a professional software developer would be akin to finding a needle in a haystack. In Nigeria, finding an individual with great potentials in software development is definitely more complex than picking out people with computer science degrees or professional certifications in [insert popular certification here]. There are so many reasons for this inherent difficulty in finding software development talent in Nigeria, not least of which is the poor quality of our education in the country. Beyond the inability of most Nigerian universities to live up to expectations and standards in tech education is the blatant lack of well directed initiatives for encouraging and grooming young students of Nigerian tertiary institutions, especially students who are training to be professionals within the Information Technology industry.

There is no denying the fact that a University potentially holds the greatest amount of talent and potentials that can ever be concentrated within a single geographical location at any one time. A University, amongst other things, is definitely one hell of a talent pool. The individuals with much needed talent just need to be identified. Imagine the amount of software development talent that probably lurks hidden within Nigerian universities, just waiting for a chance to showcase what they are capable of, just waiting to be identified, groomed, mentored and put to use. Unfortunately, there is an almost complete lack of mentoring available for these people. There seems to be no directed effort to focus on Universities as a high output source for “rough” computer programming talent that can then be refined, mentored and put to good use. Basically, there is a need to put systems and programmes in place to help and encourage young software developers in Nigerian universities to use and improve their skills and abilities.

The process of identifying people with great potentials in computer programming does not have to be such an ardous task. Together with Abiodun Akinbodewa and Kehinde Akinrinwa, I have set out to find a way to identify, encourage and mentor young software developers and software enthusiasts within the Federal University of Technology Akure (FUTA), and in the long run, other Nigerian tertiary institutions as well. In a bid to achieve this noble goal, we have begun putting things in place for FUTA SoftXpo. The basic aim of FUTA SoftXpo is to identify students of the Federal University of Technology Akure who have the enthusiasm, will and skill to think of and implement well thought out and realistic software ideas that would be useful in the real world. It must be noted that the aim of FUTA SoftXpo is not necessarily to identify individuals who know and can do it all, but to identify and encourage individuals who are willing to learn, improve and use the skills they already have, no matter how abysmal their skills might actually be. This is because we think that the willingness to learn, improve and use the skills you already have, is much more important than the level of skills you actually have. We are already beginning to see interest from students at FUTA and have already gotten some interesting entries. :)

Such a strategy toward achieving the aforementioned goals can only be effective with the support of individuals and organizations that are active in the Nigerian tech industry. In fact, it could well evolve into a symbiotic relationship between interested parties and University students. I also see this as a really noble project toward which University alumni can lend their unrelenting support. It is our hope that the success of FUTA SoftXpo, would spur an active and innovative community of young software developers in Nigerian universities who have the required level of enthusiasm, will and skill to be groomed, mentored and refined into professional software developers who are capable in every ramification to achieve great things within the Nigerian software industry.

Want to know what FUTA SoftXpo entails? Visit http://www.itkonverge.com/futasoftxpo.php

For more information concerning FUTA SoftXpo, you can reach me on Twitter, @davidadamojr or send me an email: me@davidadamojr.com


FUTA SoftXpo

FUTA SoftXpo

Startup Weekend Lagos, Garage48, and the Burden of Another New Startup

I am up at 1:10am September 9 2011 struggling to craft the first few sentences of this blog post. This is one of those times when I just have to make myself write down my thoughts regardless of whether or not I actually want to. In order to get myself into the mood to write this, I have attempted to adopt a strategy that has both worked and failed at different times. I’ve got music playing softly through my surround system and I have switched off all the lights in my apartment. I just hope my country’s reliably unreliable power supply does not leave me contemplating migrating to Ghana in the middle of the night. Now, let’s see how this goes.

Startup Weekend is a startup event much like Garage48. Startup Weekend, like Garage48, is an event where designers, developers, marketers, product managers and startup enthusiasts come together to share ideas, form teams, build products and LAUNCH STARTUPS, all in one weekend. Startup Weekend is coming to Nigeria for the first time ever and this is something that has gotten the Nigerian hacker community excited. Garage48 made a similar debut a few months ago and went a long way in rejuvenating the software tech community over here in Nigeria. Expectations from Startup Weekend are therefore quite lofty and so far, the event seems poised to live up to and exceed these expectations, thanks to the hardwork of its organisers and stakeholders. Kudos to them!

Events like Startup Weekend have a wide range of benefits for those who partake in them. These benefits are so far-reaching that even those who choose to observe from a distance rather than partake also learn one or two things as well. Foremost amongst the various valuable benefits that accrue from high energy hackathons of this calibre is the unparalled opportunity it provides for like-minded people to interact with one another and build long-lasting professional relationships that could potentially result in a super successful startup. In environments such as that provided by Startup Weekend, there is always something new to learn. With the right mindset, any Startup Weekend participant regardless of whether such a person is a developer, designer, product manager or startup enthusiast, can learn valuable new skills that just might prove to be life or career savers at some point in the near future. This is in addition to the important lessons that can be learnt as a result of working as part of a team focused on launching and proving the viability of a new startup all in one short weekend, 54 hours to be more precise. Startups that seem viable stand the chance of getting much needed funding from interested parties. This is intended to spur the growth and movement of the young startups towards their established goals and objectives. Basically, Startup Weekend is the place to be if you have even the slightest entrepreneurial aspirations.

Building a startup is a delightful experience in many ways. As each day goes by, I am repeatedly and menacingly taunted by the continuous realization that building a startup that has any reasonable chance at success is a full time job. I am currently involved in two startups: Adloopz and Flippii. I am passionate about both, and I work with a different team on each of these ventures. Adloopz.com is a social advertising platform that helps advertisers leverage their social networks in order to more effectively reach people who possibly need their services or products. Flippii.com is intended to be a social idea sharing and discussion platform and was launched at Garage48 Lagos earlier this year. Between contributing my quota to keeping Adloopz.com afloat, saving Flippii.com from totally sinking and scaling through my soon-to-be-completed mandatory one year service to my country as a member of the Nigerian National Youth Service Corps (NYSC), I have all but grown weary. And to think this is just the beginning of my startup adventure!!! *sigh*

I was privileged to take part in the Garage48 Lagos event earlier this year and it was one of the defining moments in my budding career as a software developer. As I have mentioned earlier, Flippii.com was birthed at that event amongst other potential startups. Soon after the Garage48 Lagos event, I wrote a not-so-brief treatise concerning the event in whch I opined that the overall success of Garage48 Lagos would be more appropriately measured by what becomes of the various wonderful startups supposedly launched at the event. Based on this, and at this very moment, can we rightly say the event has been a success?

I am excited about Startup Weekend for a particular reason. I am delighted with the fact that it would give skilled developers who for one reason or the other missed out on Garage48 Lagos, the opportunity to launch their own startups in the kind of positive environment provided by these sort of events. These developers have to make the most of Startup Weekend. I should probably be at Startup Weekend right now and indeed, it is one event I have been looking forward to for over two months. I had every intention of being part of the event until I assessed all the startups I was involved in, especially Flippii which was launched at Garage48 Lagos. I cannot authoritatively speak for other startups at Garage48 Lagos, but it is with great displeasure that I admit that the performance of the Flippii team, which I am very much a part of, has been infinitesimally shy of disappointing. However, I still have great confidence in the team and we have great plans for the platform. If only these plans can stop being just plans and do something progressive with themselves. Damn lazy plans! Unfortunately, this seems to be the case for all the teams formed at Garage48 Lagos. Would it not be quite nice if the members of the various teams at Garage48 Lagos got back to work rather than get themselves into another startup quagmire by attending Startup Weekend? If I were a judge at Startup Weekend, my first question for any team member who was a participant at Garage48 would be “What happened/is happening to your Garage48 startup?” and if that team member happens to be the team leader or the person who pitched the idea, the next question would be “What makes you think you would be able to pull this off as opposed to the painfully slow progress of your previous attempt at Garage48 Lagos?”. I sure hope there would be no silence and cricket sounds if these questions are asked at Startup Weekend. Would a VC/angel investor confidently invest in a team consisting mostly of Garage48 Lagos participants? Maybe this was why I chickened out of Startup Weekend, amongst other reasons of course. I am immeasurably saddened that I am now set to miss out on an opportunity to meet great people and learn new things. But the question we all really need to ask ourselves is whether or not we are ready to place the sometimes profitable burden of another startup on our backs. This is not something I think I am ready for. An opportunity to interact with like-minded fellows and learn new things? By all means! The responsibility of having an additional startup venture on my neck in addition to the two I am currently “struggling” with? Hell No!

Considering the many obvious benefits of partaking in Startup Weekend, one might conclude that any level-headed technology enthusiast would happily break a tooth and a leg in a bid to ensure that he or she gets a feel of the event up close. This is in no way an illogical conclusion. However, one can easily see that events such as Startup Weekend are not as much about what takes place during that one weekend as they are about what takes place over the course of the next few months after the event. Just like Garage48, participants at Startup Weekend are expected to make dedicated efforts to mold their startup “seedlings” into viable businesses over time. I believe this is the ultimate aim of events like these. If I am wrong, I humbly stand to be corrected. Building a startup from ground up is a strenuous task and typically demands the highest levels of commitment and dedication to pull off successfully. How many people participating at Startup Weekend are actually ready for this? Considering the fact that many of the participants at Startup Weekend are likely to already have themselves chin deep in some other startup venture, possibly from Garage48, how many of them are actually ready to dip their fingers once again into the steaming cauldron of boiling magma that is another new startup? How does this proliferation of seemingly over-occupied startup founders affect the future growth and development of the startup “seedlings” to be cultivated at Startup Weekend?

It is my sincere hope that every individual participating in Startup Weekend Lagos is doing so because he or she is absolutely sure that he/she is ready to make a commitment to building a viable new startup. This is essential and extremely important if Startup Weekend is going to build solid walls on the wonderful foundation laid by Garage48 Lagos.

In Defense of the Call Camp Team…

This is a follow-up blog post on My Thoughts on Garage48 Lagos.

There has been a significant amount of feedback on my blog post about the Garage48 Lagos hackathon. The fact that these discussions are taking place in the aftermath of the event, is a testament to the success of Garage48 Lagos. I am pretty sure the Ghanaians cannot wait to have the Garage48 team within their borders.

A member of the Call Camp team at Garage48 Lagos posted a beautiful exposition in defense of the Call Camp team and idea, and I deem it absolutely necessary to ensure everyone sees it. Here it is:

Lots of hate for callcamp on here! Guys, I didn’t know there was so much animosity :-D (joke)

I’ll have to warn you though: since hardly anyone has defended callcamp on here I’m about to launch into an “in defense of” article. I disagree with much of what has been said here and you can read more on callcamp on this site: http://www.portlagos.com. That said….

Seriously though- I think David should revise the article a little. The callcamp team was able to demonstrate all aspects of the system, and in terms of moving from an idea to a demonstration, I feel we achieved that.

We demonstrated a support call, routing/redirection to agent on mobile + CS broadcast, and callback. One thing you all didn’t know was we were prepared for an audience challenge and would have successfully executed callback to anyone who sent us a support SMS.

We also had logging and customer tracking up and running as well. Another thing you didn’t realise was that the judges gave us a hard time before the demos even launched- we were forced to demo/pitch the product over and over again and they seemed concerned that we were going to use a ‘scam’ approach and just make some fake phone calls.

As a result, we were under tremendous pressure to perform, and as you rightly said, its’ a pretty lofty idea and no-one expected us to get it working at all. The grand prize I believe was a reflection of that: A project such as that just does NOT start working in 48 hours and to be honest there was a lot of luck involved. You can take a look at a rough overview of the story here: http://www.portlagos.com

One reason why you would not see anything on the website is: we did not demo (or build) agent signup- and agents will be the primary users of the website. The real meat of the product is on the CSU side (which we had running for message tracking and CS broadcast) and on the agent side (which we had fully functional, with HTTP notiifcations still working even till today) on the android side.

Also, you should not belittle the work of our visual designer (Deji..an awesome guy!) who demonstrated an flair for clean and eye-catching presentation. As developers we have a tendency to look down on aesthetics but I can assure you- half of the victory of callcamp was assured when the audience sees the glossy JPEG on the landing page and the JQuery stuff we had on the menu page, even if functionality there was low.

Our backend developers, Dami and Ibrahim demonstrated a level of competence I find really hard to corellate with what I have gotten used to in Nigeria. Dami had to wipe and restart several times- he actually had agent signup modules up and running on day ONE, and we had to cut it out because it was outside scope and other infrastructure would not have been possibnle to complete in 48hrs. Several times he had to throw code out and start from scratch.

Ibrahim had to learn and code up a twilio API engine with a tight deadline: we didnt give him marching orders till the very end. And I had to condemn an entire SMS server architecture I built for the android app and rebuild to use JSON and web services on the last day. Ibrahim was awesome about syncing up the twilio API with the app and in the end we had notifications, broadcast, callback up and running. The mentors witnessed all this firsthand and I’m sure whatever other factors that were there, those guys would have earned us points for effort. Not to mention the fact that Temi had her vision for the project so concrete and clear that anyone she engaged on it had no problem grasping what we were doing in no time at all. And what about buzz? Kole, our marketing guy worked miracles as far as buzz was concerned and I found myself swamped with messages asking what callcamp was…. and even then I found myself overwhelmed by the wave of audience support that followed.

In the end, does it really matter that callcamp won? Honestly I feel the real reason why there is no prize for the winner is that ALL teams efforts are recognized. Personally I have a softspot for three projects: City explorer, parkbench and mycash. All three are projects I would not have regretted being a part of, and would not begrudge a win. As for the others, I cant think of one that is not an excellent idea, and I cannot judge the level of functionality anyone achieved because as far as I am concerned, as a forum for bringing out the best in all Nigerian developers, garage48 was a massive success.

What we need to do now is forget about the competition aspect of things and get to work. The spirit that led us to even bother to work on callcamp was “Nothing is insurmountable, and oyinbo nor get two heads”. We ignored “difficulties” and forged ahead with whatever seemed possible to do in the short term. When we are done with callcamp, you may not recognize it (we may abandon some ideas that end up not being workable, we may put in stuff that makes more sense in nigeria such as SMS-initiated chat-based support…etc. For example imagine using BBM as a support platform? Imagine being able to have a BBM session created between you and a savvy user of your chosen technology after sending one generic SMS? With the infrastructure we have ALREADY on ground, that is possible with a single additional plugin)

Sorry to go off like that, but the truth is, there’s more to callcamp’s success than Temi’s excellent presentation skills! Peace

It is a pity that most people (including me), did not get to see the intermediate demonstrations made to the Garage48 mentors by the Call Camp team. Maybe if we did, we would better appreciate the amount of work the Call Camp team seems to have been able to get done in 48 hours.

The Twilio API seems to be the same one used by Opeyemi “Kehers” Obembe in building Goahoy which has existed for a while now. A similar service worthy of mention is Chatslab developed by Klein Devort. So, the question of whether or not Call Camp is technically feasible (in terms of programming) is actually a close-to-stupid one.

Basically, I have almost no doubt in the ability of the Call Camp team to ace the technical side of the Call Camp project judging from the amount of work they seem to have already done, as stated in the detailed statement by Wale Awelenje. Furthermore, judging from the wealth of experience the members of the Call Camp team have been able to acquire before now (judging from their profiles on their blogs/websites), it would be easy to come to the conclusion that technical ability is not lacking in the team.

I mentioned in response to one of the comments on my initial blog post about the Garage48 Lagos event, that the difficulties faced by Call Camp are not just technical. In fact, the technical aspects are probably not as formidable as the business aspect of things. I would also be quick to note that Call Camp would either make it really really big, or would become a great idea executed in a less than stellar fashion. Call Camp fundamentally has a lot of smart decisions to make in adjusting the service as necessary in order to match the technical and business reality it faces.

After all is said and done, I really cannot wait to see Call Camp become a full working service. The fact that they are getting so much attention is actually a possible sign of good things to come. It has its downsides though. Expectations are lofty.

“Well done” to the call camp team. Please keep working. Keep making the Nigerian tech community proud. And for the Garage48 team, thanks for giving us the opportunity to showcase a little bit of what we can do, as well as learn a huge number of valuable lessons that can only be learnt within the structure of an event such as Garage48.

Wale Awelenje, a member of the Call Camp team (and the same person who came up in defense of the team’s hardwork), has a great article on his experience working on Call Camp at Garage48 Lagos. You should check it out here.

My Thoughts on the Garage48 Lagos Event

Garage48 is a “hacking” event that aims at bringing programmers together to pitch innovative ideas and then go from idea to working service in 48 hours. At the end of 48 hours, teams are expected to have come up with a working service based on their initial ideas. For the first time ever, the Garage48 event came to Africa, specifically Lagos, Nigeria.

I am typically not one to take part in these vents, especially because I do not live in Lagos. However, I was opportuned to take part in the Garage48 Lagos event and I have to say I had a great time.

Considering how difficult it is to organize such an event in Nigeria and in a city such as Lagos, it is necessary to say that the Garage48 team really did quite a good job in making sure the event became a reality. I particularly liked the food at the event ;-)

Garage48 Lagos gave me the opportunity to meet and work with great people including Ahmad Mukoshy, Ernest “Namzo” Ojeh, Jesse Oguntimehin, Damilare Akinlaja, Ayo Olaniyi and Akinwande Adegbola. We were all part of the Flippii team at the event. This team was an awesome one made up of people with undeniable individual capabilities.

Namzo, Mukoshy and I Hacking it out at Garage48 Lagos

I had met Ernest once before Garage48 Lagos. Ernest “namzo” Ojeh is a superb UI/UX designer and co-founder of devedgelabs. He created the beautiful Flippii interface showcased at Garage48 Lagos. I do not think I have ever worked with a faster UI/UX designer, and the interesting thing about the way he works is that you hardly ever see him doing it and being serious about it. I do not know how to explain his work style any better than this.

Jesse Oguntimehin is one of the most energetic and enthusiastic individuals I have ever met. He always had a way of infusing a great deal of energy into the team. I would love to have a person like him as a marketing partner any day, any time.

At Garage48 Lagos, Ayo Olaniyi pitched an idea very similar to a startup I co-founded (adloopz.com). After he pitched his idea, I went over to him to tell him about adloopz and we somehow ended up on the same team working on Flippii. Working with him, I could see that he was a soft spoken, smart and business savvy fellow.

Damilare Akinlaja is someone I had met and spoken to at length before Garage48 Lagos. He has a strong passion for mobile technology and mobile software. I have met only a few other people with the kind of willingness to learn and experiment with new technology that Damilare has.

Akinwande Adegbola was the Android guru at the Flippii team. One thing I noticed about him was that he was not one to talk very much. However, his willingness to get things done was absolutely evident from the way he got things done.

Have you ever had a mentor younger than you are? For me, Ahmad Mukoshy is one (He might be 21 just like me, but I am slightly older than he is, by a few months). Before Garage48 Lagos, I had never met him. But without ever meeting him, I had learnt one important lesson from the things he had achieved: IT IS NOT HOW MUCH YOU KNOW THAT REALLY MATTERS, BUT WHAT YOU DO WITH THE “LITTLE” YOU KNOW. That said, I was glad to finally meet and work with him.

After the Flippii team was formed, it was interesting to see tweets on Twitter about how it was unfair to have all of us in the same team.

@harkinlarjar: RT @mambenanje: @harkinlarjar who are your team mates ? namzo mukoshy wande davidadamojr and two product managers

@mambenanje: @harkinlarjar waooh you guys are cheating… why take the best and put in one team ?

@mayorbrain: @namzo, @davidadamojr and @mukoshy in the same team? Now that’s just unfair to the others. #smh #garage48

@mukoshy @mayorbrain hahahaaa not really, other teams also got geeks ;)

A few people were of the opinion that the team was a little bit too high powered and indeed a good amount of red bull and coffee went down human drains on this team.

There was no denying the fact that this was a team full of technical power. However, I think this resulted in a team that could not focus on effective presentation and communication of the Flippii idea instead of focusing on technical details. It later became apparent that technical ability was really not what was going to make a team come out tops at Garage48 Lagos. The final results of the Garage48 event made it pretty obvious that the metrics for judging the demos definitely did not center around technical skill and use of innovative technologies but rather on strength of idea and the “wow factor” resulting from sound presentation of a strong idea.

The fact that the teams at Garage48 Lagos were not provided with accommodation for the 48 hour duration of the event made it seem more like a Garage30, since we really did not have a 48 hour coding marathon. Teams could not be together during the entire 48 hour period and I believe this affected the quality of demos shown on the Garage48 Lagos live demo day.

As I have earlier noted, I was part of the Flippii team. I sincerely think Flippii was the most misunderstood idea at Garage48 and was believed to be a platform for Nigerian software developers to share their ideas and get feedback. At least, this was how it was described on the Garage48 Lagos “projects” page. Flippii is a whole lot more than this.

Flippii is a software platform that puts systems in place to encourage a culture of idea sharing, collaboration and innovation amongst different people around the world, between individuals and companies, or just among employees within a particular company (intranet or “cloud”-based). It just a matter of time before Flippii is launched fully. Flippii is currently host here and is still under active development.

There were many great ideas pitched at Garage48 Lagos. My team shared a room with the MyCash team. The MyCash idea centered around expense tracking and enables people track how and where they spend their cash. MyCash is a great idea and had a great team even though they once came close to throwing blows at each other. Personally, the MyCash idea is something I had made plans to work on before Garage48 Lagos but somehow never got around to doing so.

The concept of MyCash would make for an excellent mobile application. Little wonder the MyCash team won the best mobile app category at the event. I am hoping against hope that the MyCash team would give me the devices that Nokia promised them. :|

Another interesting idea was Extramiles which aims to make it easy for volunteers to signup for volunteer service. I think this is a really noble idea. The Extramiles team won as runners up for “best execution”.

Cook ‘n Chop was a beautiful idea that proposed a solution that creates an online database of Nigerian food recipes. These recipes would be available in text, video and audio. I like the angle taken during the cook and chop presentation which made the Cook ‘n Chop project seem like the saviour that had come to save Nigerian food recipes that were dying away. I really would not want my grandmother to die and be buried without passing on those magical food recipes of hers. Cook ‘n Chop is a superb and realistic idea and the team would have no insurmountable challenges getting it to a working service in very little time. The Cook ‘n Chop project was a fantastic one from many perspectives. It was excellent because of its focus on local content and it is good to know that the Google representative at the Garage48 Lagos event readily acknowledged this fact. I see Google supporting this project because it might become mutually beneficial for both parties.

Call Camp came out overall winners at Garage48 Lagos. Call Camp aims at taking away the problem of inadequate and inefficient customer care personnel by enabling individuals serve as customer care agents wherever they are and at anytime. The Call Camp idea sounds excellent and “heavenly” in theory but in practice, the difficulties to be encountered are a little less than exciting. The jury, in my opinion, was a little short sighted (too farsighted??) or rather over-excited, and disconnected from the realities of Nigerian society and the Nigerian business climate in judging Call Camp overall winners of the event. Or maybe they were just being visionary :s

“Visionary” is one way to look at the call camp idea. The problem is Call Camp has so much to do in order to make their service a reality. They have a sh*t load of thinking and implementation to do. After 48 hours, on demo day, call camp was as far from a working service as they could ever be, not due to laziness or anything of the sort, but simply due to the realities of putting up such a system. The demo day presentation of Call Camp is here.

I believe the concept of Garage48 is to achieve a useable service in as little a time frame as possible. I do not see myself becoming an ad hoc customer care agent using Call Camp anytime soon. Not because I do not want to be, but because the service is probably not likely to function anytime soon. Basically, I am quite pessimistic about the ability of Call Camp to become a fully working service in the next 48 weeks.

If the actual idea of Garage48 does not center around getting a full working service in as little time as possible, then definitely Call Camp deserved to be overall winner of the event due to the strength and innovativeness of the idea as well as the undeniable existence of the problem they are trying to solve. Call Camp got the idea part of Garage48, but the working service part??? I’d like to see them make that happen. Frankly, I am not a believer in Call Camp for Nigeria (especially considering the fact that the angle they want to attack from is the telecommunications industry in Nigeria, MTN, Airtel and the like). It might be feasible in a few other countries with more stable infrastructure, but probably not in Nigeria.

For me, the fun part of Garage48 is the part where we get to see which of the applications showcased at the event gets to live up to expectations in the long run. Even though all the teams at the Garage48 Lagos were short-term winners in one way or the other, we just have to wait and see who the long-term winners are. This is something only time can reveal.

A member of the Call Camp team, Wale Awelenje, has posted a beautiful comment in defense of the team. It has spawned another interesting blog post here.