Sunday, November 30, 2008

Surprise Birthday Party

Yesterday I took part in a real surprise birthday party (You can see my profile in the photo, not sure what I was looking at offstage to the left...).

This was one of those parties where you get a bunch of friends and family together and you all hide in the dark and wait for the unsuspecting party (this time it was Cjturt) to arrive. Then you all yell and turn on the lights: "HAPPY BIRTHDAY!!!!!"

Turned out to be a lot of fun.

I've published a set of photos for the party. If you're family, email me for the access info. If you're not family, feel free anyway to see my public albums at my photo page which runs on the open source Zen Photo program.

Friday, November 28, 2008

Traffic Jams for no reason at all

If you've driven through a major traffic area like I25 south of Denver, you know what it's like to get in a jam. You come upon red taillights and suddenly you're stopping and going in little spurts that can take over an hour if you're unlucky.

Sometimes you find out why. You see a crash scene and a bunch of emergency workers. Or a lane that's closed for construction.

At other times, though, you have no idea what caused the backup. I had long had a theory that there really was no major cause: all it takes is for one person to get to close to the vehicle in front of her and she taps her brakes. Then my wife says, "hey, they're stopping up there." So I slow down a little, as does the guy behind me. Apparently that's all it takes.

When I saw this article and video I found it fascinating. Watch the video clip. All they do is have a bunch of cars driving around a big racetrack circle. Doesn't take long before someone hits their brakes and send a wave back behind them. When it's on a circle it's even cooler, as the wave comes back to get you again.

Can you tell I did some commuting this Thanksgiving break?

Wednesday, November 26, 2008


Want to hear a funny one? For years I avoided watching David Lynch's Eraserhead because I thought it would be too ... normal.

Let me explain. I really started to notice Lynch back in the early 90s, when I was watching Twin Peaks and thinking it was the best thing on TV since St. Elsewhere. Since then there have been the great movies like Blue Velvet and Mullholland Drive. I even went to see Fire Walk With Me the day it debuted.

So, why did I avoid Eraserhead? Two reasons. First of all, I'm not that into black and white movies, although that's a very minor reason. The main reason was that I thought it would just be a simple drama. I had watched The Elephant Man and assumed that Lynch was just getting stranger as time went by.

Boy was I wrong.

Last night when I watched Eraserhead for the first time, it felt like it could have been filmed yesterday. In fact, it almost makes more sense to watch it now, I would think, than to have seen it back in 1977. Now, when we see the small woman performing on the stage insided Henry's radiator, it almost seems natural. The ligthing effects were almost exactly the same as the scene in the Roadhouse on Twin Peaks when Cooper sees the Giant.

By now I "get it" when I watch a Lynch movie. Things make sense because they're consistent throughout his entire career. What used to elicit a response of WTF!? now seems ... normal.

What a great movie.

Tuesday, November 25, 2008

Designing a high school computer science curriculum

For years I have run a computer programming club at different schools. From the days of QBasic on IBM 486s to Java and Python on duo core laptops--well, I've been there.

I would teach math during the day and then the fun would start after school, when the programming students would stop by to program and/or just hang out.

This year, however, is different: 75% of my time is spent teaching programming classes. Sure I still have the programming club, but now I don't have to wait until the school day is over before I get to work with students creating cool programs--it's part of the curriculum now.

Our school is working on becoming a Science Technology Engineering and Math magnet school. The funding is finally starting to appear, so now the real planning is starting to take place. We'll be adding a lot of classes for our STEM program, including more computer science classes. Because I'm pretty much the entire CS department, I get to work on designing a high school computer science curriculum for our STEM program.

I plan on getting help with this. I have some contacts at the CU Boulder CS department that I hope to work with. I'll also be in touch with the Alice team from Carnegie Mellon, as we're about to pilot Alice 3.0 at our school. Also, there are recommendations from the CSTA that I'll be using.

At the same time, though, I'm trying hard to see what I can come up with on my own. May as well enjoy this freedom of choice while it lasts. Maybe there are possibilities here that have never been attempted, or thought of. So when I was asked to come up with a list of possible computer science classes to offer, I spent a lot of time brainstorming.

Here are some of my rambling thoughts:

  1. A class in video game creation would be cool (using Pygame or Greenfoot?).
  2. AP Computer Science will remain in our curriculum.
  3. A class in programming that could directly support our math department would be cool. Maybe something on Algorithms and discrete math problems.
  4. A class on Web design would be nice (XHTML, CSS + PHP + JavaScript?).
  5. The Intro class with Alice should remain the first class in our curriculum.
  6. A class that focuses heavily on digital media could complement our Visual and Performing Arts academy.
  7. A class that combines linguistics and programming would be interesting....

I will also need to train more teachers for teaching these classes. Most of the teachers that are possibilities have no experience with Object Oriented Programming, so I think some professional development there may be necessary....

Sunday, November 23, 2008

Mike in the Corner

If you saw this for the first time with the lights out, I guarantee it scared the crap out of you....

Saturday, November 15, 2008

Converting a Classic

In my AP Computer Science class, one student has been working overtime on a pet project of his that deals with cryptography. Watching his project evolve over time made me assign a project (of their choosing) to all my students. Not wanting to be left out, I decided to join in with my own Java case study project: converting the 1972 Avalon Hill game Football Strategy to a computer version.

Football Strategy was a great game. Luck played a very small role in the game and both teams were equal and ... generic. The game was not like most football simulations like the Statis Pro games or even Paydirt, which attempted to reproduce the results of a real NFL season, statistically basing it on the real NFL results. No, Paydirt ignored that and instead based the game entirely on your playcalling and your opponnent's playcalling, resolving each play by cross referencing your choices on an ingenius 10 by 22 matrix. If you thought your opponent would call a long pass, you could call the appropriate defense to stop him cold. However, if he suspeced you would call that defence, he may instead call something like an End Run and bite off a big chunk of yards. you stick to the long pass defence or switch to a spread defense--or choose something else entirely? That's what made the game so fun.

Without an opponent, though, Football Strategy was a real bore. For solitaire play I prefered Paydirt. In fact, I'm still finding on the net some old text files I wrote describing the AI solo play system I developed for Paydirt. Yes, I was a lonely boy.... :-)

Anyway, the goal is to write up a good version of Football Strategy in Java. The focus on OOP will allow me to develop the game through time, having the AI Coaches evolve to get better and better. That would have been nearly impossible in the past, when Football Strategy was just a paper and dice game.

Thursday, November 6, 2008

Zombie reclining in the school gym!

That has got to be one of my strangest blog post titles ever, but look at the picture. That was created by a student of mine today in my Intro to Programming Class. We've completed the 9 week Python curriculum and are now enjoying programming with Alice, a great tool for teaching the concepts of programming.

Having already learned loops, functions, and decision structures in Python, it has been a breeze to watch them dive into Alice. Although I do like the suggested curriculum for the Alice software, I have modified it somewhat. Here's how:

A while back--actually several years ago--I started writing math quizzes that had four problems on them. Those four problems corresponded to the four levels of proficiency that we used on the Colorado CSAP exam: 1=Unsatisfactory, 2=Partially Proficient, 3=Proficient, and 4=Advanced. There's really no point to link those to a traditional grading scale, but if you did, it could roughly translate to 1=D, 2=C, 3=B, and 4=A.

So my four math problems on the quiz were chosen with those proficiency levels in mind. The level three problem was one that if they could solve it I would consider them to be proficient in the task at hand. Level 1 problems were so easy that if a student missed them I'd know we had real problems. If a student could get to level 2 but not 3, I'd know we were getting close to our goal and I'd have to work more with those students. Of course the level 4 questions were usually pretty tough--challenging enough for those few students that can quickly complete the first three levels. [I hate to have my brightest students bored--they need to be pushed, too!]

Anyway, I've using a similar approach in my programming classes. Whether it be Python, Java, or Alice, you can go far by creating a set of four programming challenges--one for each level of the proficiency scale. For instance, our first group of challenges in Alice were simply designed to get students familiar with the positioning of objects in the 3D world of Alice. Here's what I came up with:

Level 1: Character Pyramid: make a pyramid of characters in Alice so that the characters are properly placed, with their feet on the shoulders of the people below them. [I showed them an example of this.]

Level 2: Salute! Make a character look as if he or she is giving a proper military salute. The more real it looks, the better. [Again, I showed an example for this one.]

Level 3: Shoot out at the So So Saloon. Using the Sheriff and Cowboy characters from the Old West folder, set up a scene that looks as cool as you can. Your goal is to make the scene look like a real action scene, not stiff characters in a primitive video game. If you don't like the western theme here, go ahead and choose your own scenario--a pillow fight on the moon, for instance!

Level 4: Sitting at the Table. Position at least three characters sitting as naturally as possible at a table, seated in chairs. The more you can make them look like real people, the better.

Now, that was their assignment. Nearly every group of students reached level 4, and had a lot of fun getting there. There were questions--plenty of questions. Some I answered by showing a mini lesson to the whole class (for the setVehicle, orientTo, and drop dummy object methods, for instance). These mini lessons were short, though, and often demonstrated with the help of students. As much as possible I try to let students learn from doing, and then have them help each other with their challenges.

What has worked so well with this approach, is that I actually have time to walk around and visit with pairs of students as they program--which allows me a little extra time to work with my English Language Learners. So far my ELL students have soared with this approach, and my energy level has never been higher.

Sunday, November 2, 2008

Website Updated!

I must be getting better, as my productivity has just increased. This morning I got some grading done and revamped my teaching website. I had a lot of help from fonrus, one of my students. Fonrus has good taste in HTML and design, so things I do usually look a lot better with the fonrus touch--like they're actually from this millenium, not 1996.

I think what really helped me get going this morning was that one of my AP Java students shared the source code for a basic cryptography application he has created. You can see the application here, which is pretty nice. Nothing makes a teacher prouder than to see his students making contributions to the world of programming. Now hopefully other students will view the code and maybe get ideas for their own Java GUI applications--or ways to improve the code as it is. The code used is very basic cryptography, but last year another student wrote a nifty RSA encryption approach in Python that could easily be used with this application. At any rate, I now have more material for discussion during our next AP Computer Science class. :-)

One of the things I did this morning when working on my website was to install Zen Photo for managing my digital photos online. Zen Photo is a nice and streamlined open source application that will allow me and my students to easily share our digital creations. You can go straight to my gallery here.

Thanks to all the kind emails, messages and cards that people have given me the last week. You've helped me recover and I'll be back in the classroom in a day or two--I'm almost ready.