Sunday, December 28, 2008

Superpowers

This vacation I've been reading Superpowers by David J. Schwartz.

I picked this book up as an impulse buy, and here's why:

First of all, it's a novel about college students in Madison, WI. Since I spent a large slice of my college career there, all the locales mentioned in this book are easily remembered. When the characters go to the SERF, I remember myself going to the SERF.

However, you don't need to know Madison to enjoy this book. The concept alone is enough to merit a read: ordinary people wake up one morning transformed into beings with superpowers. You won't find a cliche supervillain subplot here--mostly this is about what would happen if an ordinary person suddenly had extraordinary powers.

The five powers themselves make for a great conversation piece: which of the five would you choose if you could pick one of them for yourself.

1. Speed. The ability to run 20 miles in a couple minutes. When you run, objects in the world seem to be standing still, so dodging bullets isn't out of the question. Running to a nearby state is not a problem.

2. Flight. No wings necessary. The ability to soar through the sky.

3. Invisibility. Can be turned on and off at will.

4. Super strength and near invulnerability. Think of the powers of the Thing, except you still look normal.

5. Telepathy. Not just able to read the minds of those nearby, but also the ability to scan an internet-like web of thoughts.

Which would you choose?

Schwartz does a good job on this novel. It doesn't surprise me that he has a large selections of comic and science fiction/fantasy reviews that he has documented from a former blog and also a current blog. If you enjoy reading reviews, give them a try.

Tuesday, December 23, 2008

Object-Oriented Programming Example

My Java programming project is going a bit slow, but I have many excuses. The one I like to use in OOP (Object-Oriented Programming) is "well, I'm still working on some design issues before I start writing all the code."

So I'm converting Football Strategy, the old Avalon Hill game into a modern Java version, complete with opposing coach AI. OOP will allow me to extend the coach class through time, making better and better opponents for humans to face.

But that all comes later. Since I give my AP Computer Science students the whole year for their project, I too have a lot of time to develop this application. Recently I've been hitting my head against the wall trying to come up with a system for encoding play results that include all the relavent information in one result. For instance, a result of 723 may have used the 7 as a play-type indicator (say, "complete pass play that went out of bounds"), and the 23 might have been the net yardage. On the suggestion of one of my students, however, I have decided to encode all the play results as String objects. Perhaps something like "15cpno023" for complete pass no fumble out of bounds and 23 yards, with the play taking 15 seconds. I don't know, I'm not there yet.

The point of using an OOP approach, however, is to allow you to think of things as actual objects. What better way to do that then open up the Football Strategy game box and see what objects in the game may lend themselves to objects in Java. One that clearly lends itself to being a Java class is the scoreboard. Before OOP, making a football simulation would have been a long and tedious process, as the data would just be flying around the program, jumping from function to function. With OOP, though, you get to break things up and decide where the data lives. In the case of a footballScoreboard class, you can easily think of the data fields (homeScore, awayScore, down, yardsToGo, fieldPosition, etc) and the various behaviors (incrementDown, incrementHomeScore, etc). What was so nice about this, though, was that there is an actual object in the real world that is so familiar to anyone who has ever been a football fan. Ask some football fans at random to draw a football scoreboard and a lot of them would draw something like this post's image.

Coming from a procedural programming background, OOP was a bit strange at first. Now I can't imagine programming relatively large projects without it.

Monday, December 22, 2008

Ubuntu Gets Even Better

Joey Stanford's recent post about Ubuntu Ethos came at a perfect time for me.

Last night I did a fresh install of Ubuntu 8.10: Intrepid Ibex. I had avoided switching to the new Ubuntu version simply because I had a lot of things set up on my laptop that I use for teaching math and teaching programming classes.

After copying most of my home folder files to an external hard drive (I love the Western Digital Passport series), I did the install from the live cd.

After install, I did the usual updates and installed all the Linux applications I use for programming: things like Eclipse, Geany, IDLE for Python, Comix for reading comic books, and so on. I also installed the Sun Java 6 JDK using the package manager. After a nice little test of HelloWorld.java, I got the latest versions of BlueJ and Greenfoot and installed them.

Now this is where things were different than in the past. Back in the days of Feisty Fawn, I had to mess around a lot with the xorg.conf file and set some class paths for Java. I always considered these steps to be necessary evils and a small price to pay for a great, free alternatives to MS Windows.

This time, however, I didn't have to do any of those steps. None. Everything worked correctly right away. I even was able to turn off tapping on the touchpad without having to do anything on the command line.

I like the command line. In fact, I use it quite a bit. The point here, though, is that you really don't have to use it anymore. That's a good thing for helping spread Ubuntu. If you have ever considered Linux, but were intimidated for one reason or another, now is the time. The Ubuntu community can help you with the switch.

If you're a math or computer science teacher, you'll be amazed at how Ubuntu can help you with your job.

Saturday, December 20, 2008

Java for the Holidays


I've blogged about Cay Horstmann before. In the world of Java books there is no shortage of "so-so" tomes that "kind of" teach you the language. Then there are a few truly great books that are several levels above the rest. One is Head First Java, but that book is in need of a rewrite soon. The other great Java book is Core Java Vol 1: Fundamentals by Cay Horstmann and Gary Cornell.

What makes a great programming book? For me, the author must get to the heart of the language. Mark Lutz and Wesley Chun have written truly "Pythonic" books about the Python language. Their books are miles ahead of many of the other books on Python programming, which seem sloppy and inefficient.

Horstmann's Core Java is a great book. So I finally went to Borders and bought my own copy. I worked through the first 138 pages today (as review) and can't wait to revisit the chapters on Swing GUI development. If you really want to understand Java, try this book.

Teachers who read this books will have a big advantage in teaching Java, no matter what textbook they have officially adopted for their class.

Monday, December 8, 2008

When Zombies Walk the Earth

Found this anthology of zombie fiction in Borders last week. Started reading "Meathouse Man" by George R. R. Martin and found it to be quite good, in a very disturbing way. I put the book back and went on my way.

Then I read the two latest issues of The Walking Dead and realized that zombies have been quite prominent in my film, fiction, and music choices lately.

What makes this such a successful subgenre? I don't know. Maybe it's got something to do with zombies traditionally being dumb and slow. I know there have been variations on this, but I still prefer the mindless wandering version over all the rest.

I think these stories work because the rules are so simple. Add on the fact that most of these take place in a post-apocalypse setting and you know have two for the price of one in horror and science fiction subgenres. Maybe it works best on people who like rainy days. Zombie stories make us thankful for what we have.

I went back to Borders yesterday and bought the anthology. The cover alone was worth the price.

Wednesday, December 3, 2008

Creating a school website

Being in charge of a school's computer science department has several perks. I get to help shape our curriculum. I get to hang out with some of the brightest students at our school. I get to occasionally play video games and call it "research."

All of those perks are great, but being the department chair also brings great responsibility. Were I just a mere computer science "teacher", I would not feel so inclined to take on the task of implementing our new website for our STEM Initiative. But now that I'm chair, hell, it's the least I can do!

Actually, I'm joking a bit here. The fact is, I was always interested in helping to bring our new STEM website to fruition. I just knew how messy large websites can become.

Thankfully, there's Joomla.

Joomla is a content management system that allows one to create and maintain an active website. It's open source, and free. You can see the current version of my Joomla STEM and VPA site here, but it's still under construction. Still, Joomla has made it easy to do what used to be a chore when I'd write HTML and CSS from scratch...

Those were the days.

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

Eraserhead

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. So...do 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.

Wednesday, October 29, 2008

Final Fantasy as Therapy

I seem to have found the perfect game for passing time while recovering from surgery: Final Fantasy. The turn-based combat means I can doze off and the game will still be waiting for me when I wake up :-). There's no intense button mashing--which I'd be really bad at right about now.

You can see me on the screenshot there. I'm the thief who tends to get slain a lot in battle. On the other hand, I'm great at running away from battles, and if I escape, the whole party of four escapes, for some strange reason only known to video game designers.

Alice 3.0

Well as I sit here at home recovering, I just got a great email that will work wonders for getting me back on my feet again: our school has a chance to pilot the 3.0 version of Alice next semester!

This is a great opportunity for our students and for the small but growing Computer Science department I am working on building. The nice part is that my classes will have a fairly high level of ELL/Latino students.

Maybe I'll recreate my ER experience in Alice. Now that would be pretty funny.

Tuesday, October 28, 2008

The ER at 3 am.

Note: After several years of attacks, I finally had my gall stones diagnosed and removed. Went to the ER this last Friday night (Saturday morning) at 2:30--in agony. They removed my gall bladder later that morning and I'm now recovering. I have only praise for the professionalism and level of care that I received. Modern medicine is spectacular. Laparoscopy sure beat the old days, when they used to split you open like a baked potato....

I had great plans to write all about my recent gall bladder removal surgery. I wanted to write all about the great staff that treated me, how interesting the ER can be at 3 am, and other details that would have been a nice exercise in descriptive prose.

Instead, I'm bummed out and feeling like crap. I'm taking the week off from school and normally that would appear to be a great opportunity to get caught up on some planning and programming. Nope. I've been pretty ineffective so far, struggling just to write one test for my AP Computer Science class.

I thought keeping up with my classes would be easier, seeing as I can do a lot of the planning online from home. What I underestimated, however, was how fatigued I'd be mentally. What a bummer, dude. :-(

Hopefully in a couple days or so I'll be writing about all the work I'm getting done.

Postscript: Back to the title of this post. There seemed to be two types of ER patients at 3 am. There were those like me that were there because of something out of our control. Then there was the usual assortment of those that made poor choices and got themselves to the ER for one reason or another: drugs, drunk, in a fight...etc.

Monday, October 20, 2008

A Visit from America's Choice

Today I had a visit from some of the people working for America's Choice. They came in to my 7th period IMP2A class and observed for a little while. Immediately after they moved on my students were full of questions:

"Who were those people?"
"Are they watching you or are they watching us?"
"What were they doing?"
"Do you know them?"

I explained as well as I could: our school is NOT doing as well as it could. America's Choice is going to help us become a better, more successful school, and that they (my students) deserved a better school.

Now in the past I've criticized those that leave the classroom and become consultants. Still, when it comes down to it, today we had our entire math department together talking about student achievement. That doesn't happen every day--and I believe it should.

Although our meeting with AC was relatively short, one thing they pointed out was that with our student demographics (high ELL, high number of free and reduced lunch, high minority), we'd do best to focus on the 90 minutes during class when we have the students in our room, rather than fighting the homework battle and dwelling on things we CAN'T control. That was refreshing for me to hear.

I've spent my entire career at schools like my current school. At one point in the past I had reached the conclusion that I could raise test scores by focusing my energy entirely on my classes. At one point I even gave up on the headache of homework--partly due to the fact that I myself hated homework when I was a student. I stopped wasting energy trying to police the homework situation--and I had a lot of research evidence that said it was okay to do so [and I'm well aware that someone can find a lot of evidence FOR homework]. Still, my students did well during that period, and they seemed ... well, happier.

Currently I do assign homework--and it's a struggle. I go along with my department, though, being the good soldier that I am :-) Still, I can't help but welcome the beginning of this discussion at our school.

What would be cool would be to put it all on the line and base teachers' pay on their students' achievement, measured by a fair and accurate test. How different would our methods of instruction be if that was the rule? Teachers are darn influential on the lives of their students, and perhaps it's a bit too easy to just coast along, rather than pushing ourselves to constantly improve.

Doesn't help that we don't earn much, though....

I recently found these articles here to be really helpful. They're a little dated, but still very relevant.

Wednesday, October 15, 2008

Not Your Best Moment, Bocephus....

I just heard about Hank Williams Jr. singing praise for both McCain and Palin yesterday.

I had to read all about it. At first I thought, well, maybe he just made an appearance and showed some support. Nope, he kind of made a fool of himself. Which is too bad, really, as I must admit I like a lot of his music. Since I heard "Dixie on my Mind" back in 1980, I've been a Bocephus fan. I own more than 30 of his albums in various forms, ranging from vinyl to cds. Some of my favorite songs are Hank Jr. songs.

Now at times Hank has seemed like a big dummy of sorts, like when that mugshot was taken, but I try not to be a jerk and judge other people. Mostly, I like to give them the benefit of the doubt. I have students of all types in my classroom and I've never been accused of being unfair to them, whether they are Black, Hispanic, poor, athiests, overtly religious, or...well, fans of hickish-sounding music. So I'd look past Hank's negative aspects and enjoy him for being one of the best entertainers of our time.

But today I was pretty dissappointed. That song is just plain dumb. I've probably bought more of his albums than 95% of his "fans", my parents went and saw him perform live, and now he blasts me because I don't support a political platform that has just resulted in eight years of embarassment for our country. I looked past his flaws in the past and will again, I'm sure. However, I edited my Google profile when I realized that I had him listed in my favorite music category. I like a lot of music, after all. So I deleted Hank Jr. and put in another one of my favorite musicians: Thelonious Monk. Monk's music is friggin' awesome.

[Update Oct 17th: After watching the videos on Youtube of this incident, it appears almost comical and not nearly as mean-spirited as the lyrics are read by themselves. Besides--no one really thinks Hank is going to decide the election. It's probably even debatable whether this was a positive incident for the McCain campaign or not. Kind of like having Ozzy endorse you, I guess. Do you really want his endorsement?]

Saturday, October 4, 2008

My Three Name Tags

I've now been teaching long enough at my school to have accumulated three name tags--all different in their job titles.

Although all are for teaching roles, one is for MATH, one COMPUTER SCIENCE, and one is for ELL (English Language Learners--formerly called ESL).

Each one of those name tags is special to me, and I still wear them all--not at once, though.

Teaching computer science is the most recent role of the three. Still, my background teaching math is clearly on display when I have students writing code. Recently we've been having fun with the classic number theory problem "Getting Down to One." Also, my programming classes have a large number of ELL students in them. My graduate research was specifically aimed at teaching ELL students to learn programming languages. During the research, though, I was able to calmly calculate and plan various tactics and strategies for supporting ELL students in my programming classes.

That was the plan. Now, the reality is a little different.

Even though I have filled quite a toolbox of ELL techniques through the years, I'm still amazed at how challenging it can be to shelter instruction properly for ELL students to have the same chance at success as mainstream students.

Case in point: Mayra (not her real name). Mayra's English level is clearly lower than her peers. She's at level 2 in our school, which means she's just starting to use conversational English at a basic level. Her academic English level, however, is much lower. Still, she has a great attitude and never complains.

Still, it ain't easy. Python is one of the easiest languages to learn, and yet syntax errors are so much more numerous for Mayra and my other ELL students. Then, Mayra had a little bad luck of sorts. Although she had virtually the same code as the students next to her (they were programming in pairs), Mayra's code wouldn't run. It was driving her nuts and I couldn't figure out the problem either, as all her code looked fine. Then, I realized that she must have named her program the same name as a built-in module in Python that she was importing in the code itself. This makes Python import the program itself, rather than the module she was trying to import. A simple change of name for the program fixed the problem, but it was unfortunate that it had to happen to Mayra, when syntactical errors are tough enough without a little bad luck thrown in.

Teaching ELL students at the high school level can be really tough. As much as you love the students, you realize that they are somewhat caught between worlds. Their literacy skills in both English and their native language (usually Spanish in our school) are often low. Their thinking skills may be advanced, but literacy problems often trip them up. They have so much to say, they just have a tougher time saying it.

So I guess in many ways I'm most proud of my ELL teacher name tag. I may not feel successful as often with my ELL students, but that's only because the challenge is so much more difficult. The successes we do share, we share in our hearts and our minds.

[This post's image is a GIMP original.]

Sunday, September 28, 2008

Tube Worms on the Ocean Floor

Had a lot of school work to do this weekend. Nonetheless, I still got to play with the GIMP a little and make some desktop backgrounds. I've been working on a certain technique I came up with almost at random, combining gradients, iWarp, and the Cubism effect. It produces things that look like tube worms embedded in the ocean floor. Click on the image for more detail.

Topic shift: If you like Old Time Radio, head on over to the Internet Archive and browse the collection of thousands of old radio shows available in a variety of formats (including mp3s). Some of the series on there are simply wonderful, like Dimension X or The Creaking Door.

Thursday, September 25, 2008

Programming Turtles to Paint in good taste

My Intro to Programming classes are finally getting to be a lot of fun. Having learned the basic tools of functional programming (control flow, types, functions...), my students can finally reap the rewards using the turtle module that's included in Python--and learn some OOP at the same time.

Teaching students to program turtles goes way back, but for me it never gets old. The image shows what a turtle can do when it moves to a random location, puts down it's pen tip and draws a somewhat randomly colored circle. I say somewhat because the parameters are tweaked in ways to prevent total random ugliness that comes from choosing colors totally randomly. Here, you see some beautiful shades of blue and purple blending together.

It hasn't been all that easy in my first semester teaching Python to students new to programming. My ELL students really struggled with syntax errors. Now, however, all my students have some of the basic tools of programming. Now it's time to let 'em go and be creative. At this point it's fun to write 3 or 4 sample programs and then watch as the students copy them, run them, and then start to alter them. When I learned to program I never had a teacher give me code to alter. Not sure why. Seems like a natural form of communication between teacher and student. It's fun to put comments in code like:

## Okay, try messing around with these variable settings
## and see what you can come up with. If you find
## something cool, share it with others!

Sunday, September 21, 2008

Scorching Through the School Year

This year is my busiest ever. Of course that means that the year is flying by at a speed approaching a Subaru WRX sizzling a rally course. [I was playing Colin McRae 2005 last night with CJTurt--hence todays blog theme].

Yesterday I worked all morning developing a scoring guide to use for students to grade themselves on their AP Java programs. I'm trying to use JUnit testing, but I'm not quite there yet. I also wrote a test study guide and worked on the chapter 2 test for the Java Software Solutions book.

But all of that work was just for one class. I still have IMP planning to do, and I need to write a test for my Intro to Programming class.

I only have three preps. So why am I so busy? Well, two of them are classes that I'm teaching for the first time ever, and the Intro to Programming class is my own creation, mostly. I'm also using technology like never before, so I have to keep class web sites up to date, answer emails, post student work, etc. In time this will make me more efficient--and I must admit that I'm doing more pre-class work this year, so my classes are going much smoother than in the past. Still...busy, busy, busy.

Okay, back to work. It's before 6 a.m. on a Sunday and I'm the only one up. Prime time to get some work done.

Saturday, September 20, 2008

The Rise of Ubuntu

Next weekend is the Ubucon in Boulder. Had to miss last years Ubucon, but I won't miss this one.

What an exciting year it has been on the grassroots level. Last year I had two or three students that decided to try Ubuntu and ended up staying with it as their main OS. This year, however, the growth is phenomenal. I've installed at least 15 copies of Hardy Heron that are being used by students to blog and to write programs for my various programming classes. Whereas last year I felt the need to show others what Ubuntu can do, this year I have more and more students coming to me telling me that they already have Ubuntu running at home.

Besides these students--those that take the Linux plunge--there are huge numbers of students abandoning MS Office and running Open Office or Google Docs instead. Also, the GIMP is really being used by a lot of students.

Our computer club meeting this week was awesome. Fonrus presented Beatesthesia, a cool open source java project for music mixing and visualizations. Then, Kaerulynn did two presentations on the GIMP and Terragen.

Tuesday, September 16, 2008

A Strange Sense of Foreboding

Today I had a two hour annual meeting for the mentoring program that I'm part of here in our district. If you are a teacher, consider being a mentor to a new teacher. Not just to help out the newcomer, but also to help keep your own teaching fresh. I'm always surprised by how much mentoring (and that's with me as the mentor) makes me reflect about my own teaching.

When asked to pick one word that described my day today, I chose "foreboding." Why? Well, teaching is tough enough as it is, but this week is especially brutal. Tonight was the 2-hour mentor training, and tomorrow I have parent/teacher conferences from 2:45 until 8:00 pm. Now, both the mentor training and the conferences are good experiences and I enjoy them. Still, to lose two nights in a row has an effect on a guy. So today when I'd get done with a class or be sitting at my desk and feeling good--well, something in me always snuck up to say, "don't feel too good--it's hellweek."

Foreboding. It's why Saturdays were always so much cheerier than Sundays when you were a kid. It wasn't just the cartoons. It was because Sunday meant Monday was coming.

Sunday, September 14, 2008

Sunday Morning Java: Cold-Brewed.


Got an email from my Mom this week along the lines of "still waiting for the cold-brewed coffee recipe..."

I will never use our auto-drip coffee maker again--nor any other hot-brew method. The coffee produced in this cold-brew way seems to taste so much better, and it's not a lot of work. Here's how:

First, you need a large container, like a one-gallon jar. I like glass but plastic seems to work fine. Fill that container with 12 or so cups of room temperature water. Now float three cups of ground coffee on the top (see the photo).

Now leave it sit for several hours. I tend to make mine early in the morning and let it sit for 12 hours. Overnight would be perfect. You may be tempted to shake it up, but I don't think that's necessary--the grounds tend to slowly fall down one by one to the bottom over time. This gives every ground a good chance to let off its flavor. If I look at it after several hours and don't see much of it falling, though, I give it a shake to mix it. I tend to shake it a few times before straining it, also. Not sure if it helps or not.

Now, when you're ready to harvest the coffee, you'll need some kind of filter. You could, at this point, simply pour the mixture into a drip coffee filter over a coffee pot. I use a steel mesh coffee filter and a funnel I bought in the automotive department at Wal-Mart. I pour the mixture into the filter sitting in the funnel and let it drain into an empty glass jug. I get about three quarts of "coffee concentrate" from this process. It will look like very thick, black coffee. I store it in the fridge for a week, using it when I want. Here's how to enjoy it:

For Hot Coffee: Fill a mug one fourth to one third full with the concentrate. Boil water in a teapot and top off the mug with the boiling water, leaving a little room for milk or cream.

For Cold Coffee: Mix one part concentrate with one part cold water, adding ice cubes.

For Kathy's Favorite: Put several ice cubes in a large mug. Pour some coffee concentrate in, filling the glass about one third full. Now add chocolate milk to fill the mug two thirds full. Add a little skim milk and stir. This makes the absolutely best tasting iced mocha you'll ever have--trust me.

A few notes:

1. For best results you can use distilled or spring water. I don't, though, and it still tastes great.

2. Even cheap coffee will taste better this way than expensive coffee that is scalded in an automatic drip pot that is allowed to heat the coffee after it is brewed. Some say the coffee produced this way has less acid.

3. If you grind the coffee yourself, you can grind it a little coarser than usual. Or not.

Special thanks to David Adamson, who mentioned cold-brew coffee to me one afternoon in a little cafe in Pittsburgh. Thanks, Dave! You sure know your Java (both types).

Sunday, September 7, 2008

Sunday Morning Java

Spent this morning drinking java and programming Java.

BlueJ and Greenfoot are great student IDEs for programming Java. Traditionally I would just use a good text editor (Geany is my favorite) and then compile from the command line. These IDEs, however, make it a lot easier in many ways to write simple Java programs. At first I had a real aversion to BlueJ, but I've become more comfortable with it over time.

The other java--as in the coffee--is the real delight. I learned how to cold brew coffee a while back and can't believe how much better it tastes. I'm no coffee snob--I just wondered why our coffee always came out bitter and tasting a lot worse than a cup you buy at Borders or Starbucks. Give me some time and I'll post my method here, along with photos of the process. If you like a good cup of coffee (and I do drink mine hot--even though it's cold-brewed) you'll have to give it a try.

Monday, September 1, 2008

Labor Day Weekend

Yes that's the Sneetch converter machine from the Doctor Seuss book. I'm using that image on a presentation for chapter 3 of Think Python, which is all about function calls in Python.

Had a busy Labor Day weekend. In fact, I'm tired. Vacations can be so ... rushed. We were visiting family and friends in Colorado Springs. Necrophagist was playing at the Black Sheep, but we had seen them in Denver less than a year ago with Cannibal Corpse, so I passed. Five Finger Death Punch will be at the Black Sheep for two shows in late September. I may go. Springs has long had a better metal scene than even Denver has, IMO.

Joe Haldeman is working on the Obama campaign. Haldeman has long been one of my favorite science fiction writers, and his online journal is always fun to read. While in Springs I picked up a copy of Cryptonomicon by Neil Stephenson. It's a bit intimidating at 900 + trade paperback pages--and we know I'm a relatively slow reader--but I've heard it's quite good. It was fun to open it up at random and come upon some PERL source code in there.

Checked up on CJTurt, who switched to Ubuntu a while back. Not only is he not having any real problems with Linux, he's also gone and installed Limewire on his own. I tend to go to the command line a lot, but Ubuntu has made living with Linux so easy that you can really almost forget it's there. Heck, I often use it now by choice, passing up on some GUI application just for old time's sake. Anyway, I ramble. The cool part was that CJTurt's wife has had enough of watching him happily surf the net using Firefox on Ubuntu, while her identical laptop slugged along with IE running on Windows and suffering from, well, something (viruses, spyware, bloat). By the time I left, her laptop had been properly Ubuntu-ized. Installing Hardy Heron has become a very easy process that takes under an hour. I just wish my friend Jim had more luck installing Ubuntu on his ASUS EEE PC.

Didn't get all my schoolwork done, which stinks. I've heard English teachers propose that they alone should be given a half-time employee to help them grade all their papers. Many people have the view that teaching math and computer science means I just have to correct multiple choice exams or have some fancy computer grader. Well, try teaching IMP math and a constructivist approach to teaching programming. Sheesh.

Haven't talked to my parents in days. Unforgivable. Gotta write to them tonight. I remember the Labor Day a couple years ago when they came out here and helped us re-shingle our house. That was a massive job. They'll be coming out soon. I'll take a rare day off of school to visit with them.

Thursday, August 28, 2008

All-Day Training

The image (a bit lame, I know) is the first page in a presentation I just made for my students in my IMP2A math class, for tomorrows review of the homework on counterexamples. I thought it was a funny joke at the time, but now after working on this presentation for 20 minutes it seems a bit old.

I spent the day today with a fellow ELL teacher (Oakley Rocks) getting trained on the Interactive Whiteboard software from Promethean. I got home wanting to work more and create a few things to use tomorrow in class. That may seem like a lot of work, but in reality it isn't.

The presentation I just made states several conjectures about geometric figures, like "if two polygons have their corresponding angles equal, then the polygons are similar." Students then have to, in groups, go up to the board and state whether that conjecture is TRUE or FALSE. Then, if they think it's false, they have to draw a counterexample that proves it false. If they believe it's true, they need to state why.

Took me about 20 minutes to make the presentation, and it's the first I've ever made (although I have done a lot of stuff like this using Open Office, so I'm not a total noob). Twenty minutes is hardly anything compared to what I'll get out of this in class. When you get students up at the board using the straight line tools and grid background to draw geometric counterexamples--well, let's just say it sure beats pencil and paper. The buy-in by the students is incredible compared to before, when a group would maybe make a poster or draw on the chalk board.

After creating the original, I saved it. Then, I make two copies of it for each of my IMP2 classes. That way I can save the student drawings and responses right on the presentation, export it in a variety of formats, and post it on the web that same day. Now THAT is cool.

For those of you that are regulars in the edublogosperical universe, you may find it interesting to know that Bud the Teacher did the training. You can't have Bud. He's at OUR district and we won't let him leave.

Wednesday, August 27, 2008

Just in Time!

Some teachers may resist change and not like learning something new, especially new technology. Not me, man. Despite my rant about Promethean not supporting Linux yet, I have seen the future, and it's pretty cool.

The wall panel on my Promethean board malfunctioned shortly after I started to use it. However, our ITS department was quick to respond and the panel was replaced earlier today. I had to find our school tech contact to have her update the Promethean drivers (I don't have the proper access rights), and a few fellow Interactive Whiteboard Teachers (IWTs, I guess) also helped out.

The result: Back to School Night starts in less than an hour, and I will be able to wow my students' parents with the IWB. It really is an impressive tool when it's running correctly. In fact, having to step back to a normal projector (with no interactive element) was downright depressing.

Tomorrow I'll attend an entire day of training on the IWB. I hate to miss school and would prefer the training be after school or on a weekend. I have to miss teaching my AP Computer Science class, which is my favorite class :-(

Monday, August 25, 2008

Freddie and Me

I'm a sucker for graphic novels.

Something about the immense amount of work that goes into making them means I just can not resist them. My favorite graphic novels are those that are blatantly honest and biographical in nature.

Freddie and Me
is a prime example. Mike Dawson tells his life story through a filtered lens that sees the world in terms of the rock group Queen. Childhood memories are told in reference to Queen. Some memories are even rewritten with Queen in them. Everywhere throughout this book you can see the influence of Queen on an impressionable fan.

And yet, I recommend this book to people who couldn't care less about Queen. Really. Read this to laugh and enjoy Mike's funny childhood. Mike moves from England to the U.S. and experiences some culture shock. He finds friends where he can and never loses his overtly optimistic view of life. This book made me feel good. Mike is just darn likable.

On the other hand, if you are a Queen fan, this book can only make you nod your head as you read it. You know how it feels to think Queen is THE GREATEST BAND IN THE WORLD (or at least in the top ten).

Saturday, August 23, 2008

Oil Change Saturday


Sometimes it's nice to leave the high tech world behind and get your hands dirty. That's what I did today, changing the oil in both of my Toyota vehicles. To be honest, there was something downright soothing about working on something so simple and basic and ... uncomplicated. You drain the oil, replace the filter, replace the drain plug, and put in the new oil. Not too much to go wrong there.

In my classes this week, it was a bit different. Having finally bit the bullet and decided to just use the Windows XP laptop ("lil crappy") with the Promethean board, I had a rather disturbing result. For about 15 minutes it was pretty nice. I was showing my students the web pages I had created as resources for them (on Firefox, of course--can't stand IE), when suddenly a student said, "hey, Mr. G, that looks like a disco over there!" She was referring to the wall interface for the Promethean board, which has a series of push buttons for selecting combinations of input sources and other parameters. All the buttons on the panel were rapidly flashing. It DID look like a disco floor. Then, it all went black. My Promethean board blinked out and ... well, hasn't been back since. Sure was nice to use during its 15 minutes of fame, though. I wonder if this happens with Smart Boards.

Meanwhile, all the free and open source software was finally installed in our computer lab. Of course I would have done this a year ago, but I don't have the right install privileges--something that drives me nuts every day of my teaching career. The software was installed, and it was even checked to make sure it worked. The only problem was this: when students tried to use it, they didn't have the proper security clearance for sections of the hard drive that the software had to use. Half of the eight applications installed simply won't run for students. Kind of hard to teach AP Computer Science when your students have to do all their Java compiling at home.... :-(

Ah well, at least Python is working.

Tuesday, August 19, 2008

Migrant Blog About to Launch

With thanks to the AILF and MESA, who are helping with funding, I'm almost ready to launch what I believe will be a major undertaking--we're about a week or two away.

Using Wordpress and Dreamhost, I've set up a blog for migrant students and other English Language Learners to tell their stories. Right now the working title is Lost in Translation, but the students will be able to change that and also change the look and layout of the blog. It's their blog. You can find the blog here, but it will soon change greatly when the students take over.

The funding so far has been used to purchase two Acer Apire One netbooks that the students can use for their writing. These are ultra-portable little laptops (yet the keyboard is 95% the size of a regualr laptop keyboard) that run on Linux and are very easy to use for web applications. Once you hack them a little, it's easy to modify them even more for your student needs, opening access to many open source software packages that are not enabled by default.

So far I have five students committed to this project, and each one of them alone could write a spectacular blog about their lives. I will get more students in time, but I'm also limiting it to students that will be dedicated to the blog. I'm going to try to get more laptops, also, and also revamp some older laptops with Ubuntu.

I envision the blog being about the individual students' lives. They can write what they want to, but the focus is on telling their stories--what matters to them. Each entry will be tagged with their "name", so that a reader can filter out all the blog posts by that particular student and read just their story. Although I do have several prompts, I'm going to let this one evolve on it's own a bit and we'll see what happens. Part of the fun will be watching the data from Google Analytics as more and more readers are found. I'm leaving it up to the students to promote the blog after it's launched.

If you have suggestions or comments, please leave them here, as I will pass them on to the students.

Monday, August 18, 2008

Report from the Trenches.

Today was the first day of school. I have a full teaching schedule, which is something to wear with pride.

One of my major annoyances with the education field is that too many good teachers leave the battlefront right in the middle of the war.

This can happen in several ways. They can become professional mentors and help new teachers do do their new job. They can become consultants of types, traveling around and basically telling other teachers how to do their jobs. Or, they become administrators and enforce that teachers actually do their jobs--or something like that. :-)

The point is: they leave the classroom. The second they do, they are no longer on the front line, and their impact on students immediately is diminished. I know, we try to justify these moves, saying things like, "but this way she can help other teachers improve their classes and, in turn, help a lot of students." I think that's pretty much a load of crap.

The minute they leave the responsibilities of the classroom, their impact on the lives of students takes a huge nosedive. Something changes in their heads. They become one of "them" and not one of "us". They've left the front. They've been discharged. They've become brass.

My father retired a teacher, which is really amazing, as he's now the Village President in my hometown and seems to do well in the administrative role. He never considered leaving the classroom prematurely, however, nor will I.

Today I had three full 90 minute blocks of programming classes. That was 75 students or so--my numbers will no doubt increase to 90 by mid semester. Not all of them are easy students to teach. Not all of them are really thrilled to be in my class (yet). But, they are all MY STUDENTS. Those who leave the classroom behind can't say that anymore.

Teachers, if you are worth your weight in gold--like any excellent teacher is--please stay in the classroom. Your students need you.

Wednesday, August 13, 2008

We're waiting, Promethean...we're waiting....


This year I was awarded an Interactive Whiteboard made by Promethean. Sounds great, huh?

Not so fast.

Promethean is a for-profit company. Their products run on either Windows or Macs, but not Linux. The Linux community is frustrated by this, especially since Promethean has supposedly been on the verge of releasing a Linux version for several years now. Here, I'll show you what I mean....

Back in 2004 Promethean announced they were working on a Linux version. These rumors continued for a while, but with little detail.

This is what Stephen Walder blogged about in October of 2007:

"It's been almost a year now since Promethean revealed that they're working on Linux drivers for their range of ActivBoards and still no news of when and if it's to be released to the public."
Then, in January of this year, ACTIV employee Stuart Collins wrote this in a forum:

"Well I'm posting this from Ubuntu, which is on my main work laptop. So that should tell you that yes, we're taking Linux seriously. From what I've seen of the software so far it's looking good."
Wonderful, Stuart. It's now friggin' August and the best I've ever heard is "we're working on it!" Then you hear the usual excuses: there are far too many different distributions of Linux to work on, we want it to work on all of them.

Do you really think any Slackware users are going to applaud you for including them in the great world of interactive whiteboards? Or how about Yellow Dog--be nice to run Promethean through a PS3! Will it run on Damn Small Linux or Puppy? Will you have support for the Khmer language?

Here's a hint for Promethean: Just go to Distrowatch and pick some of the top distros. Hell, even Stuart has been charmed by Ubuntu, so pick Ubuntu. Pick Debian. Pick something like, say, Mepis or Fedora or Open Suse. Or just pick any two of those. If you get your software to run on them, I'll install one of them.

Okay.

So I begin the school year with two laptops. Old Faithful, running Ubuntu Linux, which I use for EVERYTHING, and Little Crappy, a Dell running Windows XP that ... well ... I don't use. However, Little Crappy is the only choice I have for my Promethean board software.

To be honest, I'll probably just connect Old Faithful most of the time and use the whole setup as a glorified projector.

The sad part about this, though, is that Promethean is too wrapped up in its proprietary ways to realize that there is a community of Linux users that could help them to actually develop the Linux version. But Promethean won't budge. Smartboards have Linux support.

I think askvictor made the best statement about Promethean:

"With all due respect, I've heard it before, and it'll be too late by then. You've been saying 'real soon now' for well over a year... If the linux driver that is supposed to be in development actually exists, release it now and let us linux geeks play with it... Linux development works very differently to windows and mac development (at this stage anyway) - many linux users are OK with drivers or apps that don't quite work perfectly all the time - it doesn't give a bad impression of your product. What does give a bad impression of your product is not releasing anything (driver/specs/etc)."

Amen.

P.S. If you really explore all the links in this post, you get an A.

Tuesday, August 12, 2008

The Joys of a nice Programming Environment

If you click on the image for this post you can see a full size screenshot taking by me while programming today.

One thing that strikes me about programming is how important it is for the student to feel comfortable in their programming environment.

This was made very clear to me when I attended the AP Java workshop at Carnegie Mellon a few weeks ago. I left my Ubuntu laptop at home and used Macs exclusively that week. The first day I was feeling shell-shocked trying to code there. Things that I never think about were so hard to figure out. I use multiple desktops on Ubuntu and can quickly jump from my IDE to Firefox if I need to look something up. Of course I have Amarok playing in the meantime.

Now, all of that is absolutely easily done on a Mac--it just takes a while to get used to the new environment. By the end of the week at CMU I had developed a new like for Macs and I kind of miss using one at times. I've never really liked the Windows environment for programming, although I'm sure some people do.

The point is: students need time to adjust to the environment you use in class. This is even more true when you are using IDEs that students are not familiar with--like Eclipse.

NOTE:

The program I'm writing there on the screenshot is one of the programs from Think Python: An Introduction to Software Design by Allen B. Downey. If you have not read any of Allen's books on programming, check it out. Think Python is the main textbook for my Introduction to Programming class.

Student Artwork

The image you see here was just sent to me by one of my students. One thing I love about digital art is how free it allows the artist to be. I can see great variations in my own creations, and yet none of them look anything like this image. You never know what you'll get when you let students go with the flow. This image is by a student codenamed "Cloudy".

I came out of the DIY movement of the 80s. I think we have the means to create our own art and music and writings like never before.

Saturday, August 9, 2008

The Ruins by Scott Smith

I really wanted to LOVE this book. I wanted to be totally engrossed in a fast-moving story of terror and dread in rural Mexico. This one had all the makings of a great read. Five twenty-somethings decide to take a detour in their Mexican vacation and wind up outside a creepy Mayan village, on some old mining site that seems to be hiding more than a few secrets.

Smith writes in a very straightforward style, although his paragraphs are a bit long and dialog just gets thrown into them. There are no chapters in this book, it just rolls along from start to finish. You get the feeling that you should just read the whole thing at once, and, more or less, I did.

What I like about this book is that it keeps moving forward. Although there are a few flashbacks, you really feel like you're reading the book in real-time. It reminded me of Stephen King's excellent short story The Raft. It had that oh-crap-we're-in-over-our-heads sense of dread that just built itself up steadily. The characters make some dangerous choices in the book, but none that seem all that dangerous at the time. Each next step seems...well, justified. Before too long, though, you know they are in a lot of danger.

To be honest, this will be the type of book that I'll grow to like more after reading it, as time goes on. You have to appreciate a modern suspense/horror novel that is not too cleverly plotted. If there's one thing that can quickly get me out of an interesting story, it's feeling that I'm being manipulated by a writer that feels the need to have a whole lotta plot twists. Smith doesn't do that, thankfully. This book is not predictable, the characters are interesting, and he doesn't blow the ending. The best part of the book, however, is the setting. That little hill back in Mayan country is pretty memorable.

I'll watch the movie, I guess, although I have my doubts that they're gonna get it right: for one thing, the hill looks too dry--where's all the vegetation?

I'm going to hide my main complaint in the comments, as it contains some spoilers and you may want to read this one.

Final grade: B- (but rising).