Link to Simon’s project in progress:¬†…

The walk begins with a white grid. Every time the walker first visits a cell, it first turns purple and the green number inside the cell increments with every next visit. Simon wants to assign a musical tone to each cell as a next step.


He started working on his own database for the tone frequencies (7 octaves in the 7 x 7 grid), but later lost all his (unsaved) work when his laptop froze. Not sure anymore whether this project will ever get finished ūüė¶ as Simon doesn’t feel like retyping the database again.


Shortest path finder in Processing

Simon created a wonderful project in Processing – a path finder that looks for the shortest path to reach the green cell, avoiding the obstacles. Every time the path finder fails, it tries again. Simon also built a counter for the number of tries. The next step is turning the grid into a game environment and training the path finder, Simon says, i.e. applying reinforcement learning. Simon thinks he should use the Q function in this stochastic environment, but is still very timid about its implementation. In the third video below, he explains how this project could help him take his first cautious steps in the direction of machine learning.



Simon develops his own programming course ‘Living Code’

Simon has come with an idea of teaching a course as part of his live streams (every two weeks on Thursdays at 17 hrs CET) and developed a website with the planning for the course (still in progress so not online yet). The course will be called “Living Code” and Simon hopes to start with the first lessons on 14 December. Below are some screenshots from that Living Code website.

The website will incorporate a code editor Simon has built with the help of the ACE lib. In the video, he shows the editor he is making:


Preparing for new course 28 Nov 2017

Preparing for new course 29 Nov 2017 1

Preparing for new course 29 Nov 2017 2

Preparing for new course 29 Nov 2017 3

Preparing for new course 29 Nov 2017 4

Preparing for new course 29 Nov 2017 5

Preparing for new course 29 Nov 2017 6

Preparing for new course 29 Nov 2017


Live Stream 30 November. Speechjs and Citius Invaders.

Below are the archived versions of Simon’s live streams today. The second part (starting with a genetic algorithm game in Processing/ p5.js) was an emotional roller-coaster, with the OBS software failing to capture sound and giving Simon a hard time jumping between scenes, and yet he didn’t give up.

Simon writes: In the first part of this live session, I redid my speechsynth.js tutorial (so it has some coding in it). In the second part (which will likely be WAY longer), I will do a Processing/p5 challenge about Citius Invaders.


Simon edits videos

Simon has done his first video editing work this week, changing his archived live streams from 16 November into two shorter tutorials. Since the YouTube video editor has been deprecated, Simon was looking for software to start editing his videos on his own, without my help. He found a program called Filmora to do the editing/formatting and a few other programs (like Ummy) that help download the videos from YouTube. He taught himself how to use them and even learned how to add annotations (see the second video). I didn’t have to help him a single bit, except for purchasing a license.

The first video is Simon’s tutorial on Speech Recognition, introducing his own speech library Speechjs:

The second video is his Supershape Morphing challenge:


DAE neural net and Keras

Simon told me today he was ready to start building his own DAE (Denoising Auto Encoder) neural network. He said he would be using a documentation page about a machine learning library called Keras at He found this documentation page completely on his own, by searching the web and digging into Python fora. I just watch him google something like “How can I install Keras 1.0?” and find¬†GitHub discussions on the subject that guide him along. Or I see him type “How to install Python on Windows?” and follow the instructions at How-to-Geek. Eventually, he came up with a list of steps that he needed to complete in order to be able to install Keras (installing Python 3 (looking up why it should be 3 and not 2), installing PIP, installing Tensor Flow, etc). It didn’t work on a mac laptop, so he tried everything on a pc and it worked! Two steps required that he used terminal. It was amazing to see him plan ahead, search and implement (notoriously difficult) steps completely independently.

He has started working on the DAE tonight.¬†Working on a node package that makes `manifest.json` files (for Chrome extensions) at the same time, so not sure he’ll finish soon. “Mom, I’ve got so many things to do! There are so many thoughts in my head!”


Problem with a Genetic Algorithm Game

Simon has been working very hard at making his version of the Citius Invaders game that Siraj Raval presented in Python during Week 9 of his “Math of Intelligence” course. It’s a simplified version that still incorporates a genetic algorithm. Simon’s plan is to code the same game in P5 during his next live tutorial (at 17:00 CET on 30 November). Unfortunately, after many lines of code in several files, when the game was nearly ready, he faced a problem he doesn’t know how to resolve. He tried getting some online help via the Coding Train Slack channel but didn’t get much feedback. The code is now on github at:

Here is how Simon describes the problem:

Hi! I’m working on a “Citius Invaders” game, and I have a problem.
In the game, there are enemies, a spaceship, and bullets that it shoots.
The parameters of the game are:
* The game starts with 6 enemies.
* The minimal amount of enemies is 4.
* The maximal amount of enemies is 100.
The rules of the game are:
* When a bullet collides with an enemy, the bullet and the enemy get deleted.
* If there are 4 enemies on the screen, you’re not allowed to shoot any bullets any more.
* If there are 100 enemies on the screen, you’ve lost the game.
* The enemies reproduce every 5 seconds (this amount of time decreases every generation).
The goal of the game is to stay as close to 4 enemies as possible.
The problem is that: After the 5 seconds, the enemies don’t stop crossing over! I think the order that I’m crossing them over is wrong.¬†They breed (cross over) forever and that makes the game pause forever. Maybe the algorithm in which I let them cross over is wrong. I have a `while` loop somewhere, maybe it became a forever loop. The `while` loop is at line 52 in `Population.pde`:

 while (!selectedEnemies1.isEmpty() || !selectedEnemies2.isEmpty()) {
 int index1 = int(random(selectedEnemies1.size()));
 int index2 = int(random(selectedEnemies2.size()));
 if (index1 == index2) {
 index2 = (index2 + 1) % selectedEnemies2.size();

Below are a some videos showing Simon at different stages of the project. In the top video, he speaks of the difficulties he encountered with the frame rate and the genetic algorithm.



Simon working on a neural networks paper

Simon was working on a neural networks paper in Jupyter Notebook on Friday evening, but didn’t finish it because the Coding Train live stream started. He says he can no longer continue without having to do too much copy-pasting from this version into a new one, as his in-your-browser time expired, so I’m posting some screen shots of the unfinished paper below. This is the way Simon teaches himself: he follows lectures and tutorials online and then goes ahead to writing his own “textbook”or recording his own “lecture”. Much of the knowledge he acquires on neural networks these days comes from Siraj Raval’s YouTube series “The Math of Intelligence”.


Neural Networks Paper Jupyter 2017-11-20 1

Neural Networks Paper Jupyter 2017-11-20 2

Neural Networks Paper Jupyter 2017-11-20 3

Neural Networks Paper Jupyter 2017-11-20 4