E-Learning Africa 2012 to happen in Benin

E-Learning Africa 2012
E-Learning Africa 2012 - Copyright @icw

Tech Event of note on the continent:

eLearning Africa is the continent’s largest gathering of high-level policy makers, decision makers and practitioners from education,business and government. It is the key networking event for developing eLearning capacities in Africa.

eLearning Africa 2012 will take place from 23rd to 25th May in Cotonou, Benin, which has a rich cultural heritage and significant record of achievement in education over the last decade.

 

eLearning Africa 2012 is under the patronage of Hon. Max Ahouêkê, Minister of Communications and New Technologies, Benin.

Focusing on eLearning and Sustainability, eLearning Africa 2012 will explore creative ways in which eLearning can support development and help to build a sustainable future. eLA 2012 will focus on the key themes of sustainable technologies and infrastructure; eLearning for sustainable communities; sustainable change management; eLearning and sustainable resources; and sustainable economy, culture and society.

Check the website for more information.

Lessons in unsuccessful African startup creation

In a blog entry,  developer Pascal Ehitie Aito from Nigeria shares some insight in the best ways not to create a successful startup. It is funny and definitely makes sense. Highlights:

When developing your startup idea, ask yourself, “is what I am creating a solution to a NEED or a WANT?”  According to the Nigerian Bureau of statistics 60.9% of Nigerians in 2010 were living in “absolute poverty” i.e. less than $1 per day. Do you think that taking a hiatus to create a music startup to enable these people living in abject poverty listen to music amounts to a good use of your time? or “skills”?

Why would you clone when there are a myriad of problems you could develop solutions for? If you are developing a clone, ask yourself this question “why would anyone use this (***insert the name of your clone***) instead of the main thing (***insert the name of the website you cloned***)?” .

Reading too much of Techcrunch et al. These tech blogs are written by elitist white techies who live in silicon valley where the difference between over there and here is like light and day.

That last point makes sense, it’s easy to get overly enthusiastic reading the likes of TechCrunch and Venture Beat. Head over and also check out the comments on the article.

Code Hero: A video game gun that shoots Javascript?

Code Hero world
Code Hero

This was cool enough for me to mention it, Primer Labs, a company that “makes games that teach and inspire to make all knowledge playable” has release their flagship product, Code Hero. In their words:

Code Hero is a co-op first-person science shooter where you use the code gun to manipulate code. Your code gun can copy code like new items and fire it like ammunition to do new things.

You can edit new code to do anything you can imagine. You’ll learn how to blast the enemy, manipulate the world, and build structures creatively to create the games of your dreams and recruit an army of coders to save the world from rogue AI.

The game can be played without prior programming experience, but as the player skills increases in the game he or she can pick up on enough of the language to bring custom solutions to the challenges posed by the game. This is an interesting project by all means and I encourage you, especially non technical and younger people to try it out!

Code Hero

African Tech Tidbits: Week of February 13th 2012

X-Net The first Cameroonian created cell phone
X-Net The first Cameroonian created cell phone

It’s the middle of the week, I’ve been busy with life and wanted to post a few articles but never got time, so  decided to start a new, hopefully weekly series of articles aggregating articles that I find interesting related to Africa and Tech. So for this week:

Over at Forbes, a list of the top 20 African Tech startups: A good variety in terms of business models and technologies, going from social networks, job portals and mobile shops/apps to payment solutions, but the overall trend is definitely in the mobile space.

The lucrative skills African talent should acquire in 2012: An interesting article at Appfrica on what skills techies and non techies should acquire in the ongoing year. From a developer perspective I found it pretty much accurate and in line with the trends I am seeing in the US especially with the re-emergence of RoR and Python/Django as viable alternative. Food for beyond thought, action. There is also a set of skills for non techies that are good to possess.

Internet Outages in Benin(in French): The Internet is out again in Benin with no warning, back in January the whole country went off the grid for a whole week because of a fire at one of the routing hubs, and the problem seem to be back. My friend Senam at Etrilabs has been living this from the front lines and this is a highlight of one of the biggest issues with trying to do tech business in certain African countries, which is one, the lack of supporting infrastructure and two, outdated or counter-productive government regulations. Can you imagine trying to run a tech hub with no internet access for a week? And when we’re talking about Internet, we’re not talking about your run of the mill cable connection that they’d be happy to have, we’re talking about the low rungs of the scale ADSL connections. The other alternative is satellite internet connections, but this too is heavily regulated (as pay us a very hefty, does not make business sense,  license fee) by the Beninese government which even has a sniffer truck driving around looking for illegal SAT setup to impose heavy fines.

Meet X-Net, the first African designed cell phone: Created by a three Cameroonian expatriates in the US and Germany (manufactured in China), this cell phone features two SIM card slots, an MP3/MP4 player, an optional camera, FM radio and a flashlight. It’s already being sold in Cameroon by Lekoua & Fils for about $21 to $25 depending on the camera option. The engineers behind this basic phone worked on it for a year and wished to remain anonymous as they are currently working for western cell phone makers.

 

 

Speed up your CakePHP application by using Memcached

In anticipation of heavier traffic and also just for performance reasons, I’ve started looking into ways of caching data for Nouchi.Mobi. Since this is a CakePHP application, I naturally looked into PHP cache based solutions and you’d be hard pressed not be recommended Memcached(Used by Facebook, Twitter, Youtube, Flicker amongst others). Why would you want database caching? If you’re using a framework to build your application or just from building any type of decently functional custom coded dynamic application nowadays, chances are you will make numerous calls to retrieve the data you want to display (the average Drupal site issues 300/400 queries!). Some pages do actually make more SQL queries than others and caching the result of these queries would give your application a significant performance boost. Memcached is a high performance in-memory data caching system that works by storing data as key-value pairs, meaning :

  • Store the value V with the key K
  • Retrieve the Value V identified by the key K

In the context of CakePHP, follow these instructions to get Memcached up and running in your local development environment. The trickiest steps in this set up will probably enabling the memcache support in your PHP configuration (getting and enabling the php_memcache.so extension in Linux). Keep in mind that for your production environment, unless you have your own Virtual Private Server, you’d be hard pressed to find any  host that will let you run Memcached in a shared hosting environment, but this is a scaling issue, and a problem you want to have, meaning your application is getting popular. Next you’d need to enable it in CakePHP in your app/core.php

Cache::config('default', array('engine' => 'Memcache'));

Once it’s up and running what you have to remember about using caching is that it is not magic. You have to code with caching in mind, and caching works best for queries that return the same data or that don’t change often. Teknoid has a good article on explaining what I mean by that with an example. Hope that’s enough to get you started and you can also take a look at this excellent Nettuts tutorial on the matter.

Rails console not starting up in Ubuntu 11.10

On trying to launch the Rails console from the command line by running the “rails console” command I got this error:

/home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler/runtime.rb:136: warning: Insecure world writable dir /media/DATA/Development/www/cakephp/cake/console in PATH, mode 040777
/home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/irb/completion.rb:9:in `require’: no such file to load — readline (LoadError)
from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/irb/completion.rb:9:in `’
from /home/abou/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands/console.rb:3:in `require’
from /home/abou/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands/console.rb:3:in `’
from /home/abou/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands.rb:20:in `require’
from /home/abou/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands.rb:20:in `’
from script/rails:6:in `require’
from script/rails:6:in `’

So the issue was that for some reason, my install of the readline library was not getting picked up in my RVM 1.9.1 Ruby install, even thought i had these libraries installed through Aptitude. The next three hours were spent practicing extreme skills of google fu, with various workarounds that did not work for me, but this StackExchange post had something that worked for me, with some tweaks of course:

Edit ~/.rvm/scripts/functions/pkg file and remove this piece of code (Lines 65-81):

 if [[ “${rvm_skip_autoreconf_flag:-0}” == 0 ]] &&
which autoreconf >/dev/null 2>&1 &&
which libtoolize >/dev/null 2>&1 &&
[[ -f configure.ac || -f configure.in ]]
then
if [[ -z “${rvm_autoconf_flags:-}” ]]
then
if uname -s | grep -iE ‘cygwin|mingw’ >/dev/null
then # no symlinks on windows 😦
rvm_autoconf_flags=”-ivf”
else
rvm_autoconf_flags=”-is –force”
fi
fi
__rvm_run “$package/autoreconf” “autoreconf ${rvm_autoconf_flags}” \
“Prepare $package in $rvm_src_path/$package-$version.”
fi

Now install the REE Dependencies libraries, which include Readline:

rvm pkg install ree_dependencies 

Now uninstall 1.9.2

rvm remove 1.9.2

Now undo the code deletion you did in the pkg file

Reinstall 1.9.2

rvm install 1.9.2

You should be good. I wasn’t. The post recommended reinstalling 1.9.2 using the following command, which i think was the source of my issue:

rvm install 1.9.2 –with-readline-dir=$rvm_usr_path –with-iconv-dir=$rvm_usr_path –with-zlib-dir=$rvm_usr_path –with-openssl-dir=$rvm_usr_path

On running “rails console” again, i got this error:

/home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’: no such file to load — zlib (LoadError)     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/package/tar_input.rb:7:in `<top (required)>’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/package.rb:78:in `<top (required)>’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/format.rb:7:in `<top (required)>’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:7:in `<top (required)>’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler/source.rb:3:in `<top (required)>’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler/dsl.rb:14:in `initialize’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler/dsl.rb:6:in `new’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler/dsl.rb:6:in `evaluate’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler/definition.rb:17:in `build’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler.rb:138:in `definition’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler.rb:126:in `load’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler.rb:110:in `setup’     from /home/abou/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.22/lib/bundler/setup.rb:7:in `<top (required)>’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:59:in `rescue in require’     from /home/abou/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require’     from /media/DATA/Development/rails_projects/demo_app/config/boot.rb:6:in `<top (required)>’     from <internal:lib/rubygems/custom_require>:29:in `require’     from <internal:lib/rubygems/custom_require>:29:in `require’     from script/rails:5:in `<main>’  

I had again to remove 1.92. and reinstall it with the argument less syntax to get it to work. Pfff….

Installing MongoDB on Ubuntu 11.10

If you’re like me new to Ubuntu, you’d rather install your software through Aptitude instead of dealing with editing various config files and moving files and archives around, so needing to get up to speed on MongoDB, i looked for a quick way to get it set up and sure enough:

http://www.stehem.net/2012/01/16/how-to-install-mongodb-on-ubuntu-11-10.html

This link will get you up and running real quick on Ubuntu 11.10 with Mongo 2.0.2 and if you are ready to start learning MongoDB, head over to NetTut’s two part tutorial on the topic:

http://net.tutsplus.com/tutorials/databases/getting-started-with-mongodb/

http://net.tutsplus.com/tutorials/databases/getting-started-with-mongodb-part-2/

Fire away!