Category Archives: Python

Project Bangla Pi: Why I Care about Affordable Computing

It is ironic that similar to the way computers understand the world with compiled instructions in binaries (0s and 1s), they have divided the world into a binary group system– the group that knows how to use computers and the one that does not.

Most of the supporters of computer education these days start their pitch with teaching everyone coding and claiming that everyone will be computer scientists. While I would love that future, I feel that this pitch is coming from a first world perspective where most of the kids already owns an expensive computer and know about computers and smartphones from an early age. With this we are majorly discounting the rest of the world, where many kids have never seen computers.

bangla_pi2

Currently the world literacy rate is 84.1% (2013), but the digital literacy rate is much lower than that. With more and more computers being used every day from tasks as simples as writing emails or applying for jobs over internet to more complex tasks such as writing programs or using computers in factories, I don’t think I need to convince anyone that we need to teach young kids how to use computers. These basic computer skills are becoming as important as learning how to read and write. For that purpose we need computers accessible to all kids.

There is no doubt that the world needs more quality educational materials. Khan Academy clearly showed us how we can empower individual students if we just give them access to quality educational contents. The kids can learn themselves. Especially in many parts of the world getting a quality education is hard because of the lack of good teachers. While I don’t believe that MOOCs (online video lectures) can be as effective as direct classroom education and solve all of our problems, I believe augmenting classroom study contents could be a great use. For example, when a kid learns about history we can reinforce the learning experience with some multimedia contents. I believe flipped classroom model could be hugely successful if we can find a channel to deliver those contents to the students.

bangla_pi3

Finally I’d get back to the coding part. The kids who are already using computer for years, they should really learn to code or understand coding. They might not need to write thousands of lines of codes in future, but in this age of machine learning and massive automation, learning to code is going to be an invaluable skill for understanding the world. For example at Harvard, less than hundred students major in computer science every year, but this year 889 Harvard students took CS50, the legendary introduction to computer science class! This clearly shows why you should learn about computer science if you are already privileged to have computers.

The reason for this long and (hopefully) obvious discussion about the necessity of computers is that if we want to solve the problems of the world through better education, using computing devices is necessary. If I use the terms of Economics, computer is not a luxury good anymore– it is a necessity good for everyone. But with the average price of a good laptop being about a thousand dollar, buying computers might be a bit hard even for some people from the first world country. Now consider the countries like Bangladesh, where the average annual income per capita is 1044 USD, buying a computer for their kids is next to impossible for most of the families.

 

bpi_logo

 

As a naive young college student, I have been thinking about this digital divide issues for a while. Last semester, when I was playing with a raspberry pi at my dorm at Harvard, I was thinking why we cannot just use these and some cheap LCD panels to make some small computers for the young students. For those who do not know what this is, Raspberry Pi is a computer board with 900 mhz (overcloked) CPU, 512MB ram, and 8 GB disk space. Basically this is equavalent to the computing power of a mid range smartphone or tablet. But do we really need that much computing power for teaching kids? It turns out–not really.

So I decided to do this over the winter break and got 15 raspberry pi boards and imported some cheap lcd panels from China (getting them cleared from customs was hard, but that is a story left for another day!). Then I scouted all over Dhaka to find cheap peripherals such as keyboards, mouse, and micro sd cards. With all these parts and many hours of labor (plus wooden frame made by the local photo frame makers), I finished assembling 15 devices and custom built a power supply system for all of them.

bangla_pi1

While assembling these was nontrivial, making the OS ready was another challenge. I have been working on using different flavors of debian for a while, but running the OS on the ARM chip is a bit hard given the resource constraints. So I had to do a bit of modification of the debian based raspbian OS and had to make sure we have everything in the Bangla Pi OS that I distributed with the 15 prototypes. The great thing is that you can do almost anything you can do with a typical computer. While this is does not have a lot of CPU power, so far they proved them to be adequate for most of the educational purposes.

So this winter I am running three pilot projects to see what we can do with these devices. We are running these workshops in three places. One in Dhaka (where all these kids have been using computers for years), another in Pakundia, a upozilla (sub-district) in Kishoregonj, and finally one in a small village of Sylhet. I am just trying to see how all these kids with very different computer literacy level interact with computers and how we can use these devices to improve education for them. I am teaching Python programming to the students in Dhaka and for the other students I would limit it to Scratch, which is a visual programming tool developed by MIT media lab.

bangla_pi4

It would be an understatement to say that organizing these has been just difficult. Thanks to my mom, and volunteers, who have been working tirelessly to help organize these workshops and create the curriculum. Also thanks to Harvard South Asia Institute for their winter grant that enabled me to do this project.

Currently the computers cost about $85 to make, but if we could mass produce them (at least couple of thousands), it is very possible to drive down to the cost with the new technology we have in R&D. This could be a great step toward making computers accessible for all. For the poor this could be a great first computer and for the privileged ones this could be a programming sandbox.

I believe that some people are better than others in some areas because of their inherent ability to excel in that. I also believe that these talented people are fairly randomly distributed regardless of geolocation or income level. So with affordable computing for everyone if we could get rid of the digital divide and make education a level playing field for the kids from the first world to those from the third world, we would be the best talents from all over the world to solve our important problem. Then we will be one step closer to having the world we all want to live in.

Play with Python (Part 3): Magic Starts with Variables

(After the previous part: Part 2: Preparing for the Magic)

Summary: Learn about variables, types in python, type changing, input methods, and how to impress friends!

Variables:

Now you can open code in a fancy text editor like a real programmer and show your friends the nicely color coded texts. But how do we to write programs with more than one lines? For that we need to learn the concept of variables.

A variable is nothing but a fancy, geeky name for a box with a label. You can put values (and/or objects) in it and label it by a variable name. It is a good way to keep track of all the numbers you are going to use in a program. These things are called variables because you can vary (change) them anytime. Before I bore you, let’s type up some real examples in IDLE:

Now these a, b each are called a variable. Now with that assignment what computer has done is that is has created two boxes (with labels a, b) in its memory. Then it put the numbers in the box. (One great thing about python, you don’t need to tell the computer about the size of your box. Python is so smart that it can figure out itself!)

3-var-boxBy the way, in python you can write variables with a mix of letters, numbers, and underscore, but no spaces (i.e. num_3 is a valid variable name, but num 3 is not); so they don’t necessarily have to be just one letter. In fact, in future we will try to write meaningful variable names so that the code is easy to read and understand.

Now let’s see what happens when you assign variables to another variable.

So you can see how python copied the value of another variable to b. Then after you changed a, b had the old value of a. (Oh and you can print variables separating with comma. It even adds a space. How nice of python!)

Changing is the value of one variable using the value of itself is a very powerful idea. We will use it so much that python has a shortcut for it! Try (also might want to use print to see values, if you are using text editors!):

More on Commenting:

You already know that we can write one line of comment with a hashtag sign and python ignores when it runs the code. But what if we want to write multiline comments? There is a way too! For that you need to put all the contents within a pair of three quotation marks.

For examples:

Integers and Floats (Data Types):

In IDLE command prompt just type  3 / 2  and see what you get! You get 1, but it should be 1.5, right? What is wrong?
It turns out that because both 3, 2 are integers, when you ask Python to divide it does integer division. So the result is just the quotient (and of course the remainder is 1). If you know some arithmetic then you probably learned at some point that

3-division

Now type:

I now it is clear how the whole thing works for integer math.

So in python there are two types of numbers

  1. Integers: Known as type ‘int’. Type on IDLE: type(2)
  2. Floats: Floating points. The type of numbers are decimal number with ‘points’. For example: 2.0 is a float. Type: type(2.0)

(There is another called ‘long’ type, but it is not really important unless you are working with really large numbers.)

While there are many good reasons why python (and most other languages) does integer division, you can see that the result can make our calculations wrong (for example if it is a bank, it just did not calculate a dollar when dividing–the numbers surely add up!). So the way to do it correctly is to make sure when dividing at least one of the numbers are ‘float’. We can do it in two ways:

  1. Type them as float: Set both a = 2.0 , b = 3.0 or at least one of them with that .0.  (Try all the combinations yourself!)
  2. Or change them to float using float() function: try using  a = float(a) .

The second way is the standard way to do it for long programs because it has hard to make sure that everything we entered are floats. This method also brings us to data-type changing also known as typecasting. So you can interchange between int and float using int(), float() functions. Try:

 Screen input and output:

We have already learned how to output something to screen with  print  function, but you may ask how to enter data to a program. This is done by  raw_input()  function. This is the way the function works:

raw_input('optional: The text you want to show')

Now try:

So the raw input function shows the query text and gives a text object (in fact it is called a string and we will learn about it in the next part).

Now try:

 

Oops! Something is wrong. Python should show '''TypeError: cannot concatenate 'str' and 'int' objects'''. So you made a mistake. This is called a bug. When you are trying to do programming you will see a lot of these, try reading the messages and checking the line number to see where problems and fix those bugs! So here the problem seems to be that python cannot add str and int data objects. The problem is the age value you got is a text string (‘str’ object) and python does not know that it is integer. So you need to change it to integer. Now try:

Fantastic! Now that you know how to enter something to a program, let’s do something that could be useful in real life. This is getting exciting!

Real world application: Temperature Converter:

Assume you have a British friend (with ‘niec ack’cent, of cou’se’!) and you are American. They are big on weather and you want to impress him by talking to him about temperature in degree Celsius instead of Fahrenheit. But it takes a quite a bit of effort to calculate that every time. But now you know how to program. So you can just ask your computer to do it every time!

But before that you need to solve the problem and give it an algorithm (oh, fancy!).

The equation for turning Celsius to Fahrenheit is °C = (°F  -  32)  x  5/9

So basically the algorithm should be

  1. Take Fahrenheit as input.
  2. Subtract 32 and multiply with 5/9
  3. Finally print the result

Simple, right? Let’s try it:

Oops! You see a type error. Remember how we fixed it the last time (hint: typecasting)? Nice!

But still the problem is you will always get 0. What is wrong? The issue is that when you 5/9, python does integer division and gives 0. So the whole thing becomes 0! As explained earlier, you can fix in two ways, but the easiest is changing to

cel = (fahr - 32) * 5.0 / 9.0

Awesome! Now you know how to impress your friends with your coding skills!

Exercise: You need to know the volume of a sphere. You know from math that the answer is  . Write a program like the previous one which asks for radius and gives you the volume.

(Hint: Remember to typecast that 4/3 part!)

Happy coding!

Previous Part: Part 2: Preparing for the Magic

Next Part: Coming…

All parts: Play with Python

Play with Python (Part 2): Preparing for the Magic

(After the previous part: Part 1: The Magic Behind Computers)

Summary: Install python, learn how to start coding, and plan to successfully finish the tutorial!

How to install Python:

I have lectured enough about the reasons for learning programming and the theories behind computers, but I know that you are not here for those! You want to learn how to make that game, right? But before you do so, you need to install python in your computer. First, you need python installer (skip if you are using ubuntu or linux). Get the python installer from this link: http://www.python.org/getit/

2-website-installer

You can see a lot of installers here. Don’t get confused! For this tutorial we will use 32-bit python 2.7 (at the time of the writeup the latest version is 2.7.6). So download the correct installer file to your computer (see the image above).

Windows:
As usual double click on the installer and let it get installed (click ‘next’ and ‘ok’ many times!).

OS X:
Double click on the package manager and install the package.

Ubuntu/Linux:
If you are using Ubuntu you’re all set, because Ubuntu comes with python pre-installed!

Basics and Sanity Check:

So when you write code, Python has an engine (interpreter) that turns your code into instructions that computers can read (those are basically collections of 0’s and 1’s and only computers can understand them). To give commands to computers python has a program (interface) called IDLE. Now to check if the installation worked properly, open IDLE from your programs.

2-select-idle

(Windows: Start Menu>All Programs > Python2.7>IDLE (Python GUI), in general you should get it in the list of programs in any operating system).

Now you should see the following window (minus the code text):

2-idle

Now the “>>>” is the terminal where you can enter any valid python command and it will show you the output. Now type:

print "Hello world! I am learning to code!"

And you should see the output text. Congratulations! You have written your first piece of code!

So what you just did is that you outputted some text on the screen and  print is the command for doing so in python. We will explain all these in a lot more details in the next chapters, but for now enjoy your new super power of being able to code!

Now try to do these math with python (We have also included the output. Of course you don’t need to type those!):

First thing you noticed is that I have added white space in between everything. You don’t really need to do this, but this makes your code look a lot cleaner. So before and after arithmetic signs we add these spaces. Finally, what let’s figure out what these signs are doing. The first one  + = addition, - = subtraction, * = multiplication, / = division. Let’s stop for a second– “but what are the next two?” you may ask. and you probably have not seen these before. Don’t worry, they are easy to understand!

The first one is “%” is modulo sign. In python a % b means you are asking for the remainder of a upon division by b. For example: 3 % 2 gave us 1 because that’s the remainder you get when you divide 3 by 2. This is a great way to check if a number is odd or even! If the remainder is 1 the number is odd, and even if it is 0!

The next one, ** means to the power. So a ** b means ab in math. And that means you are multiplying b number of a’s together. More explicitly: 2 ** 3 means 23 = 2 x 2 x 2 (i.e. multiplying 3, 2s).

Play with both the modulo and power operations on the terminal before these concepts make more sense!

Starting to Code:

Now you’re probably thinking, if you enter one line at a time and do simple addition and subtraction then probably you cannot do much. You are absolutely right! That’s why programmers write their programs in a simple text file and then make the language compiler software to run it. As we are becoming pros, we will do the same!

Select File > New Window (or press control + N). You should see a blank screen. This is just a fancy text editor (like notepad), but as you type you will see that the text contents are getting nice color coding (the color coding has a fancy name– syntax highlighting)! Now type:

Finally select: Run > Run Module or press F5 key on keyboard and it will probably ask you to save the file. Now give the file any name and end the name with .py (we named it first.py). It is the python file extension (like .pdf, .exe etc) and if you do this the computer will understand that it is python code! Now you can see the output printed in the terminal. Neat!

By the way, the gray texts after the hashtags (#) are called comments. When python runs the code, it goes from top to bottom, but ignores the comments. The goal of these comments is to make the code more clear to the human readers, but you can choose not to type them.

How to a complete this tutorial successfully:

Remember the last time you sat down to learn something? Yes, I do too! And I did not finish it! So it is important that you follow these instructions to learn python successfully:

  1. Set one hour (or maybe half an hour of time daily). This will make sure you are learning everyday.
  2. Go through one or two lesson(s) at a time. You might be tempted to go through everything in a single sitting, but that way you will forget everything really fast. So don’t rush and take your time.
  3. Type everything up yourself. I know it is really tempting to copy-paste the code, but don’t do it! Typing up will ingrain the lessons and commands to your brain as so called muscle memory. So after a while you will be able to code without looking at any tutorial or help!
  4. Remember the cool game we will be making at the end? Good!
  5. Finally don’t be disappointed if you don’t understand anything. Especially if you find anything unclear leave a comment below and I will try my best to help.

I know it was  lot of materials for a single lesson. But hey! Now you know how to write a legit piece of python code! If you did not understand anything– no worries, because we will cover everything in details. Just wanted to make sure you know how to run code and where to write code to run them!

Happy coding!

Previous Part: Part 1: The Magic Behind Computers

Next Part: Part 3: The Magic Starts with Variables

All parts: Play with Python

Play with Python (Part 1): The Magic Behind Computers

(After the previous part: Part 0: Introduction)

Summary: Introduction to programming and algorithms, reasons for choosing python.

What is programming?

In simple words, programming is just talking to computers. It is similar to learning a new language in the sense that you learn how to order a computer to do something for you. However, the problem is computer itself is really dumb (no matter how smart things it can do after getting programmed!). So you have to give it painfully clear and explicit instructions to make it do anything.

Before I give a concrete example of programming, imagine you have an assistant who does everything for you. However, the only problem is that he is really dumb (still smarter than a computer). Yesterday you asked him to make simple peanut-butter sandwich for your breakfast and he made a mess! So today you are giving him instructions:

  1. Get whole-grain breads
  2. Put peanut-butter on them
  3. And finally put those breads together

No matter how dumb your assistant is, hopefully after this instruction he will be able to make a sandwich, but if you ask a computer (assume it is a robot with hands!) to do this job, it will still fail because all of the statements are still ambiguous. Let’s go through them again:

  1. Get whole-grain breads:  How many? 1, 2, 100?
  2. Put peanut-butter on them: Both side single side? How to put peanut-butter? What to use? How much peanutbutter to use?
  3. And finally put those breads together: How should we put them together?

So let us write another instruction, which is very explicit and clear:

  1. Get 2 whole-grain breads, 1 peanutbutter jar, 1 butter knife, 1 table spoon
  2. Take one of the breads and put 1 table spoon on peanutbutter on it.
  3. Then smooth out the butter with a knife.
  4. Similarly do the other loaf.
  5. Finally put two breads so that the faces with peanutbutter on top are facing each other!

Now you understand what I mean by painfully unambiguous and clear! Watch the video from CS 50 to see how things can go wrong if you don’t have a precise algorithm.

 

The recipe you just made is called “algorithm” in computer programming. Before you solve any problem you need to solve it yourself and give the computer all the ingredients and the recipe (algorithm) to solve it.

Now you may ask, why do we use computer if we need to solve the problem ourselves first. Very good question! The answer is that a computer is very, very fast compared to a human being. Once you teach the computer how to solve 1 class of problems, it can solve any of those problems in future extremely fast. This great advantage of fast automation is what made computers so popular.

If you want to know a bit more about algorithms you should check this nice animated tutorial video by Dr. David Malan, the famous CS50 course instructor from the Harvard University.

 

 

Why python?

harry-1

 

You probably thought about a big snake when you heard the name python. Here we are of course talking about the computer programming language Python. Like there are many languages in the world, there are many programming languages to talk to computers. So you may ask, why I chose python and why you should learn python instead of any other languages. In general, people use different languages for different purpose, but python is one of the very few languages that is used for almost everything. So if you learn python you can pretty much do anything!

That is probably the main reason python got so popular in the last few years.

python-perc-1

 

Apart from that here is my laundry-list of reasons for which I love python and you should too:

  1. Python is smarter. In python you don’t need to tell the computer that you are working with a number when you can clearly see that it is a number.
  2. As a result, you need to write a lot less code than most other languages for doing the same work, which is great if you are lazy like me!
  3. As python is very popular people have written a lot of code in it and made many libraries (extra functionalities) that are freely available for your use. So basically no matter what you want to do with python almost always you will find a library. So instead of working hard and coding that functionality, you can work harder on real problem solving and do more with less code!
  4. Finally according to xkcd, python helps you to fly! :D fly-python

Previous Part: Part 0: Introduction

Next Part: Part 2: Preparing for the Magic

All parts: Play with Python

Play with Python: A Beginner’s Guide to Programming- Part 0

Why Programming?

Why learn coding when you can learn so many other things like playing a guitar, watching a movie, or just chatting with your friends on Facebook? I am not asking you to stop doing any of those, but just think for a second how cool it would be if you learned a bit of programming and could make your own games, animation, website, or even a guitar tuner that helps you to tune your guitar! If you do any of these, I can guarantee you that it would be one of the most fun things you have ever done. And that’s why I am writing this tutorial to help you learn programming.

If you look around, you will realize that everything is becoming so computer dependent now. From your cellphone to traffic lights on your way to school, everything is run using computers. Do you know who made computers do these amazing jobs? Those are smart people like you, but they know how to write programs to make computers work for us.

From mathematics, economics, physics to political science and history, people are using quantitative methods and computer programs to analyze data and find new theories based on those. So basically no matter what field you are interested in computer programs can be very useful. Plus if you look at the mainstream technology companies, you will see that they are doing really cool works to make our life easier by creating products like facebook, Instagram, or google search! And if you need inspiration from them about why you need to learn coding watch the video made by superstars!

 

Maybe you are thinking that when you grow up you will do business or become an artist and live in Paris (or maybe you already are a businessman or an artist). You can probably hire someone to do these. That is true, but you still need to know how computer works to even understand what you need. Plus if you can code you can make your own website or understand what you need to add to your website! If you are a business-person, you will understand better how to run your company better. Moreover, at a basic level learning coding teaches you problem solving skills, which are valuable no matter what you do in life. Watch this video by Scientist to learn how learning programming or science in general can rewire your brain! Watch the video by Neil deGrasse Tyson if you need more convincing.

Who can Learn?

You! If you were patient enough to read up to this point, you can learn programming! The approach to teach problem solving and programming python will be similar to story-telling. I will try to tell real life stories and problems that you will solve with your coding skills. And at the end of the course you will work on a final project that will need all the ideas you will learn throughout the course.

This tutorial will not have any advanced math component, so if you know how to count — I mean add, subtract (and sometime multiply and divide!) numbers, you should be fine. In terms of age group, this is most suitable for 12 – 18 years old people (mostly middle to high school students), but I don’t see why people of other age group will not be able to learn from it.

game

Finally, as I have mentioned the final project, what is the final project, you may ask! Wait for a surprise— you will make a full blown computer game (with nice graphics, animation, and sound) from zero knowledge of programming! And I will help you to go through this journey to be able to do so. Imagine from less than a month from now, you will be able to create your own game and show it to your friends! How cool is that!

Next Part: Part 1: The Magic Behind Computers

All parts: Play with Python