Bahir Dar Maths Camp

Group shot from the Bahir Dar math camp.  The waterfall in the background is one of the major sources of the Nile!
Group shot from the Bahir Dar math camp. The waterfall in the background is one of the major sources of the Nile!

I’ve spent this last week helping with the first-ever Ethiopian math camp, hosted by the math department at Bahir Dar university. As with the Maseno math camp, we focused on giving activity-based sessions, teaching interesting math topics outside of the standard curriculum. The intention is to boost student interest in maths and to expose some teachers to different ways of thinking about mathematics. The big difference between the Maseno and BDU camps is that the students in Ethiopia are mainly Amharic speakers, with maybe a couple years of learning English under their belt. This makes it essential to build up and utilize the local staff to a degree that we aren’t forced to in Maseno. Luckily, the local staff is bright, imaginative, and ready to try new things. On the whole, it was a fantastic first attempt.

We gave thirty-ish sessions, divided into five topic areas: geometry, scientific research, card tricks, history of numbers, and ‘rules.’ I was a few days late arriving at the planning week, due to some medical exams I needed to get done in Addis, and so was mainly designing the card trick sessions. I also did a lot with the geometry group and gave a session each on cryptography and complex numbers.

Continue reading


Hashes with Salt

Passwords being cracked by some really simple python code I wrote.  Who knew 'Tigger' was such a common root word for passwords?
Passwords being cracked by some really simple python code I wrote. Who knew ‘Tigger’ was such a common root word for passwords?

(These are notes adapted from a presentation I gave at the LakeHub workshop this week.  They owe a lot of debt to this article, which inspired the talk.  If you already know that you should just use bcrypt or something similar, and why, you can just skip to the ‘conclusions’ section.)

So let’s suppose you’ve just made a hot new website from which you’ll make a million dollars a year.  You get to the point of creating a database for all of your users who will be logging in and doing things like buying airplanes, so you put together a database table.  Maybe it looks something like this:

Name Email Password
Bill Gates passw0rd

A few weeks after launch, you have two million users, and someone breaks into your server and steals the database. Of course, they don’t tell you that they did this; they’re much happier to keep the database, pull out a name and password, log in as someone else, and use your site to steal lots of money and undermine the basic building blocks of democracy and common decency.  After sending apologies to the userbase, you decide that your database structure was flawed.

Continue reading

LakeHub Game Design Workshop

Ligretto is a fast-paced game of breaking glass.  (That one in the upper-left corder exploded about ten seconds after this picture was taken.)
Ligretto is an awesome fast-paced game of breaking glass. (That one in the upper-left corder exploded about ten seconds after this picture was taken.)

LakeHub has been churning steadily along; we had our third event on Saturday, and it was quite successful according to me and everyone else I’ve talked to.  We’ve settled on a basic format for the time being, with an event happening every Saturday from 1-5pm.  Half of the time these are big group-oriented events with demos and big inclusive activities, and the other half of the time they’re ‘hang-outs’ where people get together to work with other tech-oriented people nearby, and to check in with ongoing study groups.

There are three study groups started already: one on microcontroller programming, hosted by Peter Mbari of Access Energy, one on javascript and web development hosted by Simeon Obwogo from IPA and James Odede of the Maseno ICT Guild, and finally a group doing game design, run by yours truly.  We wanted a less-technical group to complement the other two programming-heavy study groups; luckily I know some things about games, and game design is actually really useful in thinking about business and web technologies.  Especially with ‘gamification’ as a big buzz word.  So this week I’ll talk a bit about games, to get my mind going on the subject!

Continue reading

Teaching to Learn


Peter Mbira demonstrates the Arduino at a LakeHub meetup.
Peter Mbari demonstrates the Arduino at a LakeHub meetup.  LakeHub is forming some independent workshop groups, where people can learn a variety of skills in an informal setting.

Lately I’ve been spending a lot of time in matatus – the stupidly overpacked minibuses that travel between cities in Kenya – visiting students I’m working with in a few far-flung communities.  I’m trying out ideas around teaching students to become self-motivated learners, through the medium of teaching computer programming.  (Hypothesis: People who know how to learn independently can go further than those who need teachers.  Evidence: Pretty much every effective tech person I’ve met in Kenya.)  Programming, of course, is a very hands-on skill, one that you mainly learn by doing it, a lot.  So in these three locations, I’ve been giving some basic overviews and leaving the students with resources to work on, and coming back after a week or two to see what kind of progress they’ve made.

The question is how to transform students into self-guided learners, given the cultural expectations of lecture-based, teacher-driven classrooms.  With the math camps, we’ve been attacking the ‘lecture-based’ part of the formula, by introducing fairly radical beyond-curriculum activity-based methods.  But the camps are still ultimately teacher-designed and teacher-driven.  In the math camp context, we’re seeking to change attitudes around math education, so that’s fine.  But there’s a real question of what happens after the camp ends, and the students go back to the same-old same-old.  How can we best foster and facilitate independent learning amongst our students?

Continue reading

Moving Beyond Standardized Testing

Students at the Maseno Math Camp in 2012 copy down puzzles to work on in their free time.
Students at the Maseno Math Camp in 2012 copy down puzzles to work on in their free time.

Consider the KCSE, the national exam taken by hundreds of thousands of Kenyan graduating secondary students each year. It is the sole determinant of whether a student will go to university, which in turn determines whether the student has a chance at a good job and a healthy life. Because of its centrality, the secondary school system in Kenya is almost entirely oriented around trying to cram information from the exam syllabus into student’s heads.

But this approach has two major problems. The first is that no one can force a student to learn. The second is that a single standardized test gives the illusion of a fixed body of knowledge that people need to understand in order to succeed in life. This simply doesn’t reflect the world we live in. The economy of Kenya and the world in general is changing at an incredible rate, and those graduating under the current academic regime simply aren’t getting the skills to compete. And worse, even if the curriculum were to drastically change, it would quickly be obsoleted again. How do we address this?

Continue reading

Towards a Sage Problem Server

Layout of resources for a hypothetical Sage problem server.
Layout of resources for a hypothetical Sage problem server.Django

Problem Statement.

I’ve finally been making some progress towards building a Sage-based ‘problem server,’ as we were talking about way back in January.  It’s clear that the tools developed have a wide scope of use.  Before building something that gives open questions and reacts in really interesting ways to input, a stepping-stone is to build something that serves up individual math problems and asks for an answer.  In some sense, such things are already done by Webwork and Moodle with varying degrees of success, but building a nice implementation would allow some new directions.

Now, I should stress that I think WeBWorK is pretty awesome, and has some really transformative potential.  I’ve been encouraging its use in Kenya, and it’s been extremely interesting seeing it used in service courses in Strathmore University and now Maseno.  These are places with ever-increasing class sizes, and a well-designed online homework tool promises to greatly improve student comprehension of the course material.  The big database of existing problems in WeBWorK is also really helpful; there are over 26,000 problems in the Open Problem Library.  There are three issues with WeBWorK that a new implementation could/should address:

  1. Modularity: WeBWorK is a pretty monolithic piece of software.  It includes three essential components: a problem server, a problem database, and a learner management system (LMS).  Basically, these should be busted out into three genuinely separate components.  Breaking out the problem server allows easy integration into Moodle or another well-thought-out LMS, or else integration directly into things like online textbooks.
  2. Modernization: The WeBWorK codebase was mainly developed some time ago, and new versions are slow to come out.  (The last stable release is from December, 2010, over two years ago.)  The interface is also decidedly…  Clunky.  There’s a natural question of how one could improve the system using modern AJAX-type tools.  Better interactivity will lead to a much better user experience.  Things like one-button signup with Google or Facebook accounts is one thing I can think of off the top of my head that would greatly improve the user experience.
  3. Ease of Writing Problems:  Currently, WeBWorK problems are written in a highly idiomatic version of Perl.  I was interested in writing problems a couple years ago and got the feeling that it was, in the end, a bit of a black art.  The documentation is a bit scant, and most mathematical objects have their own idiomatic libraries.  Switching to a python/sage framework would mean that writing problems should become much easier: Sage already recognizes all of these mathematical structures.  And if the problem definitions are in python, we’re really using the same syntax as our Sage work.  This should make it much, much simpler to pick up a bit of Sage and then start writing problems.

Continue reading

Amagoro Library Visit

Playing Set with primary students.
Playing Set with some primary school students at the new Amagoro library.

This weekend I took another trip out to Amagoro to meet see the new Amagoro library, opened by a joint effort of Kiwimbi Global and the Amagoro city council.  The library opened on February 15th, while I was on a trip to Nairobi, and by all accounts has seen heavy traffic ever since.

I set the groundwork to leave a couple Raspberry Pi computers at the library some time after elections; right now they’re still working on getting electricity together.  In the meantime I left a Pi with Jevin, the tech-guy for the Elewana project, so that he can become familiar with the system.

I also met with three groups of primary school students, about to take their final exams before going on to secondary school.  With all of the groups, I talked about how computers work, and the importance of math and computers to all of the various future occupations they were dreaming about, ranging from nurses to engineers.  (One students wants to be a ‘computer wizard’ when he grows up!)  Hopefully planting some Pi’s with interesting resources will help some of the students get where they want to be.

Continue reading