About | RSS

Stung Eye

The eye of the bee holder.

Yesterday I bought the iOS programming app Codea and a BlueTooth iPad keyboard. This video shows my first Codea/Lua program, coded and executed on an iPad. I’ve used Lua in the past to code for my PSP, but the experience was nowhere near as slick as using Codea.

What the video doesn’t show is my use of UI sliders to control the movement, size, and colour of the bouncing ball. With a few tweaks (like touch control over the circle) this will already make an interesting game for my 21 month old daughter.

Acelyn asks for ike-ides.

The power of ideas. (at The Tom Hendry Theatre)

Music for the Eyes

Three distinct takes on the visualization of MIDI-based music.

I imagine videos of this sort would be a helpful addition to music lessons, helping students explore the structure and melody of the songs they are learning to play.

Music Visualization #1

Rimsky-Korsakov’s Flight of the Bumblebee visualized by Andy Fillebrown using AudioCarver.

This one has a Guitar Hero feel to it. It’s also the closest in feel (imo) to plain old sheet music.

Music Visualization #2

Resonant Chamber by Animusic a company that specializes in the 3D visualization of MIDI-based music.

My 19 month old daughter loves this one the most.

Music Visualization #3

Bach Little Fugue in G Minor visualized by A. P. Anderson using the MAM MIDI Player.

This is the most abstract of the three visualizations, but I feel it conveys the most information about the structure of the song.

Related: Music Visualization: Beautiful Tools to ‘See’ Sound

Kin’ cans at the watering hole.

The Dual timer 556 - one of the oldest integrated circuits still being manufactured. Part of the 555 family, a favourite amongst electronic hobbyists. These chips can be used as timers, oscillators and flip-flops. The silicon elements shown here are acting as transistors, diodes and resistors. The size of this die is 0.2066cm by 0.1576cm.

From the insides of microchips.

A Scientific Approach to Debugging

This list, taken from John Regehr’s How to Debug (via), aligns nicely with my process for debugging software.

  1. Verify the Bug and Determine Correct Behaviour.
  2. Stabilize, Isolate, and [Reproduce].
  3. Estimate [Likelihood of Probable Causes].
  4. Devise and Run an Experiment.
  5. Iterate Until the Bug is Found.
  6. Fix the Bug and Verify the Fix.
  7. Undo [Unwanted] Changes.
  8. Create a Regression Test.
  9. Find the Bug’s Friends and Relatives.

My changes/clarifications are shown within square braces. Trust me, read the full post. Each step is explained in detail.

I’ve just finished re-reading Robert Pirsig’s Zen and the Art of Motorcycle Maintenance, where a similar debugging approach (the scientific method) is explained.

“For this you keep a lab notebook. Everything gets written down, formally, so that you know at all times where you are, where you’ve been, where you’re going and where you want to get. […] Sometimes just the act of writing down the problems straightens out your head as to what they really are.

The logical statements entered into the notebook are broken down into six categories:

  1. Statement of the problem.
  2. Hypotheses as to the cause of the problem.
  3. Experiments designed to test each hypothesis.
  4. Predicted results of the experiments.
  5. Observed results of the experiments
  6. Conclusions from the results of the experiments.

“The real purpose of scientific method is to make sure Nature hasn’t misled you into thinking you know something you don’t actually know. […] One logical slip and an entire scientific edifice comes tumbling down. One false deduction […] and you can get hung up indefinitely.

As a programming instructor I help students when things go wrong with the applications they’re writing. Because of my experience with the types of apps they are coding, I’m usually quick at spotting the source of the bug. Pointing out these bugs may fix their immediate problem, but it does little to correct the error in logic that led to the bug. Perhaps before coming to me, students with buggy source code should work through steps 1 through 4 from either of these lists.

If I were to mandate this for my classes, I’d have to add a step zero:

Be Prepared to Learn From Your Mistake.

New programmers are often quick to blame the language or framework they are using when their code doesn’t work. I still catch myself thinking “IT isn’t working” when I encounter troublesome bugs in my code. However, experience has shown me two things:

  1. My tools are rarely the source of my problem.
  2. If I’m not prepared to accept responsibility for my bugs, I’m doomed to repeat them.

ʕ•ᴥ•ʔ

Recommended reading:

I first read this book thirteen years ago while backpacking in Fiji. I just finished a re-read, this time from the perspective of an educator rather than that of a new grad.

Next up is a re-read of the sequel Lila. When I first read Lila I got trapped for hours (days!) thinking about the evolution of consciousness. The end result was the essay From Instincts to Consciousness I wrote in November 2003.

Bike! - A short film about biking in Winnipeg.

We’re all part of the club
Whether you see life in pedals and spokes
Or, you’re just out for a Sunday ride
It’s about freedom
It’s not revolutionary
It’s human powered

You’ve always been a cyclist Keep moving

Art Department Rules. via

I posted these rules by the RRC BIT photocopiers.

Self-Assessment While Learning to Code

I teach computer programming in the Business Information Technology program at Red River College. Following the lead of Jody Gillis, another BIT instructor, I have added self-assessments to my student assignments.

What is self-assessment?

I ask my students to grade their own assignments using the same process I use, a weighted grading rubric. My rubrics are a collection of project requirements and instructor expectations. For each assignment a self-assessment is completed and submitted along with the project source code.

More often than not, the students assign themselves full marks with little reflection on their work. I need them to buy into the process, to see the value in it.

Why I want my students to value self-assessment.

Each week I introduce my students to new coding techniques. They must practice these new skills to learn them. Since each new set of techniques builds on skills acquired in the weeks before, a student’s ability to assess what they know and what they don’t know is essential. Insert “house of cards” analogy here. ;)

Practice Makes Better

To integrate more practice time into my courses, I’ve split assignments into two types:

  • Take Home Assignments. Five or six a term. Individual work. Assessed by me and self-assessed.
  • In Class Coding Challenges. One a week. Students can work together. Self-assessed only, but no formalized rubric.

The coding challenges provide an opportunity to experiment, to make mistakes, and to learn from direct experience. My gut feeling is that the better my students are able to self-assess these challenges and assignments, the better they will be able to direct their own learning.

My gut also tells me that my students are self-assessing once they believe no further work is needed on their assignments. I have to do a better job of explaining that self-assessment should be used throughout the development of their assignments, allowing them to reflect on and improve their code as they go.

More reading: Self-Assessment Does Not Necessarily Mean Self-Grading