Extracting Raw Location Data from Android Mobile Phones

Some months ago, a friend of mine told me about a research study that required some analysis of location data that was to be potentially gathered from participant’s mobile phones. This got me thinking about building a simple Android mobile app that gathers location information, stores it in a database and allows this data to be exported in an appropriate format. I eventually built a working prototype called LocMon. This prototype does the following:

  • It enables users to start and stop the collection and storage of location information.
  • When users initiate data collection, the app collects and stores finely grained longitude and latitude information about the device’s location. The user can stop this data collection at any time by pressing a stop button.
  • Users can erase all collected data.
  • The application allows users to export all collected location information by sending a JSON file to a specified email address.

This was simply a learning experiment for me. However, it is possible that others might find the app and source code useful either for personal amusement, learning about Android or for research studies that require real-world location information. Below is a brief video of how the application works. You can find the application source code here on Github. An APK file is also available here for download.

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.