I've created these resources for use in teaching computer programming to secondary students in Tanzania. If you wish to use or adapt these for your own purposes, you are free to do so without restriction.


Hacking / InfoSec Exercises


These exercises are for students interested in learning about hacking into servers and computers; they assume familiarity with the command line and basic knowledge of computer programming. Needless to say, every target mentioned herein is mocked up and independent of actual production systems.

1. Cracking UNIX Password Over SSH to Gain Shell Access
html
2. Cracking UNIX Password Over SSH to View PHP-Hardcoded Credentials
html
3. Breaking WEP Encryption on a WiFi Router
html
4. Website Session Hijacking via Base64 Encoded Credential Cookie
html
5. Exploiting Buffer Overflow in a C Program to Bypass Password Prompt
html


Advanced Domain-Specific Exercises


These challenges are for individual students who voluntarily requested practice with more advanced topics. They are of varying difficulty based on the backgrounds of the students I designed them for.

Math

Inspiration credit due to projecteuler.net.

Math1: Open Problems and the Collatz Conjecture
docx
 | pdf
Math2: The Fibonacci Sequence
docx
 | pdf
Math3: Sum of Cubes, Cube of Sums
docx
 | pdf
Math4: Series of Self Powers
docx
 | pdf
Math5: Champernowne's Constant
docx
 | pdf

Biology

Inspiration credit due to rosalind.info.

Bio1: Reconstructing DNA Strands
docx
 | pdf
Bio2: RNA Transcription
docx
 | pdf
Bio3: GC Content of DNA
docx
 | pdf
Bio4: Translating RNA into Proteins
docx
 | pdf
Bio5: Calculating Protein Mass
docx
 | pdf

Cryptography

Crypto1: One-Time Pad with Known Key and Somalian Pirates
docx
 | pdf
Crypto2: One-Time Pad with Unknown Key and Somalian Pirates
docx
 | pdf
Crypto3: Repeating-Key XOR and State Secrets
docx
 | pdf

Chemistry

Chem1: Tuples and Propane Combustion
docx
 | pdf
Chem2: Octane Combustion
docx
 | pdf

Python

Python1: Lists and Tanzanian Leaders
docx
 | pdf

Linux

Linux1: Basic Web Page with Nginx
docx
 | pdf


Minecraft and Python


In which students use Python to programmatically interact with the popular Minecraft game. This is Form 1's first exposure to text-based programming, using a customized implementation of Google's Blockly to bridge the gap from block-based programming. Form 2 already knows the basics of Python but will hopefully benefit from continuing to learn Python in an environment like Minecraft.

Forms 1 and 2

Daily Plans and Reflections
docx
pdf


Lesson Plans


These are traditional-style lesson plans that I designed and used when first starting out. I eventually found this manner of teaching to be too rigid and inflexible, instead choosing to adopt log-style plans and reflections for topics spanning at least one month of instruction (i.e., Blockly, Scratch, Minecraft, etc.).

Form 1

LP1: Introduction to Lab
docx
pdf
LP2: Typing Practice
docx
pdf
LP3: Typing Assessment
docx
pdf
LP4: Typing Reinforcement
docx
pdf
LP5: Typing Reassessment
docx
pdf
LP6: Independently Finding MS Word Features
docx
pdf
LP7: Independently Finding LibreOffice Writer Features
docx
pdf
LP8: Word Processing Assessment
docx
pdf
LP9: Introduction to MIT Scratch
docx
pdf
LP10: Independently Working with Sprites in MIT Scratch
docx
pdf
LP11: Introduction to Scripts in MIT Scratch
docx
pdf
LP12: Concept of an Algorithm
docx
pdf
LP13: Independently Drawing Shapes with Scripts
docx
pdf
LP14: Graded Assessment of Shape Scripts in Scratch
docx
pdf
LP15: Discussion of Project Ideas
docx
pdf

Form 2

LP1: Review of Form 1
docx
pdf
LP2: Introduction to Networking
docx
pdf
LP3: Basic Commands on Lab-wide Network
docx
pdf
LP4: LAN Chatting with Netcat and Wireshark
docx
pdf
LP5: Web Server Introduction with Nginx and Wireshark
docx
pdf
LP6: Assessment of Networking Fundamentals
docx
pdf
LP7: Using Network Sockets in Python
docx
pdf
LP8: Group Problem-Solving with Network Sockets
docx
pdf
LP9: Fundamentals of Threading
docx
pdf
LP10: Using Threads in Python
docx
pdf
LP11: Group Problem-Solving with Threads
docx
pdf
LP12: Introduction to the PyCharm IDE
docx
pdf
LP13: Chatrooms with Python
docx
pdf
LP14: Modified Chatroom: Identify Senders by IP
docx
pdf
LP15: Discussion of Project Ideas
docx
pdf


Group Projects


Students recommended and chose project ideas of their own interest, then joined together in long-term groups to implement those ideas.

Form 1

Game in MIT Scratch
docx
pdf
Movie in MIT Scratch
docx
pdf
Blockly Games
docx
pdf

Form 2

School Website
docx
pdf
Python Game
docx
pdf
School ID Cards
docx
pdf
Facebook Lite
docx
pdf
Academic Grade Calculator
docx
pdf


Class Discussions


Internet Connectivity

I gave the following maps of Tanzania's submarine Internet links to groups of students and had them identify the countries connected by each link. Groups wrote their lists up on the board and discussed the purpose of the links and how they are used. Three of the five will be complete in 2018, so discussion also touched on what that will mean for Tanzania and what it says about government and economic priorities.

Africa-1 Link Map
png
Djibouti Africa Regional Express Link Map
png
East Africa Submarine System Link Map
png
Liquid Sea Link Map
png
SEACOM Link Map
png

Economics Case Study

Students were given the following article about two schools in Oklahoma - one with increased funding due to Google's construction of a data center in their town, and the other without. Class discussion centered on the differences between the two schools, comparisons to similar situations in Tanzania, and the global effects of increased use of technology without the concomittant employment of increased numbers of people.

"Google Effect Rubs Off on Schools in One Rural Oklahoma Town" (credit NYTimes)
pdf


NyokaTofali


An open source, block-based web interface I forked from an existing project that aims to make the transition from MIT Scratch to Python coding easier. I made several changes based on my particular requirements and situation. For more details, see this section.