Thursday, April 4, 2013

Absorb All Odors in the KLS



It's almost cliché now to talk about how fast things are changing in the world of the internets.  Strangely enough, it's also cliché to blog about how much things seem to stay the same. 

A few weeks ago I went to the SIGCSE national convention in Denver.  I have been very active in the field of Computer Science education, and I was able to meet up with old friends that I haven't seen in person for years.  There was the usual small talk about the last few years (and of course any mention of Java caused most educators to look quite nervous--thanks, Oracle), but something was different this time. 

I began to suspect that something had really changed in the way people use the net--and how they get their info.  In the past it was easy to Google a name and, after a few Kevin Baconish link jumps, find the good stuff--the stuff that matters.  I don't think that is true anymore. 

I have begun to purposely use other phrases for looking up info on the net.  I now will say any of the following:
  • "Well, why don't you Yahoo it and see what you can find...."
  • "Yeah, I guess I'll have to DuckDuckGo it and see what's up..."
  • [When desperate] "Go Bing it and see!"
So although I have been working diligently on creating a high school Computer Science curriculum that I feel is one of the best in the entire US, I don't think anyone could find "all my stuff" out there that I've created and shared.  People used to worry about other people "stealing" their work.  I've even had administrators that told me I was probably naive to be releasing all my stuff via a Creative Commons license.  Truth is, however, that most people would never be able to find my creations--despite having Google and Twitter and other services finding many ways to use REAL ^&*KING NAMES instead of our REAL INTERNET NAMES....

So, I've decided to go old school.  Sort of.  Rather than spread all my crap out all over the place, I'm going to put most of it on my own site, that I'll maintain from the command line, because luckily UNIX hasn't changed much in my lifetime (ahem).

Rather than split myself up into different sites and different blogs and different names, I'm just gonna put the whole pile of crap where it belongs, in the Kitty Litter Studios

Saturday, September 29, 2012

Back to GCC

I get to work with graduate fellows in Computer Science, thanks to a GK-12 NSF grant.  The last two years I was privileged to work with Jason Robison, a great, kind person who touched the lives of many of my students.  I was lucky to get Jason to help out with our Comp Sci program for two years, and we miss him a lot.

This year we are lucky to have David Knox working with us.  David supports our program wonderfully and is working with me to develop a unit on simulations in Computer Science.

David is old school--but in the best way possible.  He eschews all the typical barriers to education and makes me think hard about my effectiveness as a teacher.  One day David said, "well, what matters now is how many of them are actually engaged."  He then walked around the room, checking up on each and every student in class.

That was a gut check, really.  I don't avoid facing the hard facts of being a teacher in a country that does little to ensure our students are academically prepared for college.  We pay our sports stars salaries that put them far above the real heros in the USA.  If you touch others and (more importantly) make them think a bit, you have done well!

Oh yeah--so what does this have to do with the GCC?

Thursday, August 30, 2012

GIMP--now native app for the Mac



Swamped in the usual start-of-the-school year work, but one thing that really made my day today was this GIMP news that I read this morning.  I immediately downloaded the new native Mac version of GIMP and love it.

No more Photoshop in my Intro to Computing classes.  GIMP ubber allies!

Saturday, August 4, 2012

May as well share it...



I just came across this image I created while working through the excellent Shelly Powers book Painting the Web.  That's a screen shot from me trying out the new Nodebox application, made to look like a Web 2.0 thing.

Monday, July 30, 2012

ARGH!!! Best Practices HTML5 Canvas

I'm adding a lot of web development to the Comp Sci curriculum this year.  One thing I've been working on is getting the basics down solid for the new frameworks we'll be using.

Easier said than done.  Case in point: the many HTML5 Canvas books and their suggestions for creating a basic game/animation framework.

Without going into detail (I have a headache), let me just summarize:

Of the many books I have purchased on the HTML5 Canvas element, no two books agree on what should be considered "best practices" with programming the Canvas.  What makes it worse is that most of them speak with conviction as to why their approach makes the most sense.  In another world where I only bought one HTML5 Canvas book, I would simply see it all from one viewpoint.  Instead, I live in this world, and my current headache is mostly from going back and forth over the last several hours on various topics like:

How to best ensure the page has loaded before your script runs


Don't even get me started on this one.  In the end I just said %$&k this!--I'm using JQuery!

How to best erase the canvas between frames


Well, this one isn't really a problem of the various books suggesting different approaches.  This one is just a headache by nature.

How to control the timing of your game or animation


Oh boy.  This one really has changed a lot in the last year.  It appears the best practice now is to NOT use "setTimeout()" or "setInterval()" but to use "requestAnimationFrame()" instead--which is not even mentioned in half the books available on Canvas programming.  Sheesh.

Sunday, July 22, 2012

New GIT Project for various Generative Art frameworks

http://commons.wikimedia.org/wiki/File:Helping_hand.jpg


Sometimes I feel like I'm all over the place, sampling all sorts of new stuff and being overwhelmed with the task of weeding out the options to include in my Computer Science classes.  My only advice would be to carefully consider what Comp Sci topics you want to cover, and then look for interesting contexts in which to embed them.  For me lately, the context has been Generative Art.

I started a wiki on all the applications that I have tried for making Gen Art, but the thing quickly grew too big for me to manage, and too ... ugly ... for anyone else to seriously consider joining in on the work.  A wiki done by one person is not really a wiki.

The mistake I made, was starting too early.  Of course I was all excited from trying about a bunch of new applications, so I started putting all sorts of stuff on the wiki, including a huge table of the pros and cons of each application.  What I should have done instead was to put the whole thing off for a month while I worked in more depth on each application.  So that's what I did.  I have been working with my co-teacher in the CS department on updating our CS curriculum, so it was the perfect time to think deep about how these new apps could be used, and where they would fit into our CS curriculum.

Now things are much clearer.  I have had time to play around with all the apps and have narrowed down my list to the ones that find myself using the most.

You Can't Go Home Again

So ... I was ready to go back to my wiki and clean it up a bit and make it better.  And yet ... I didn't want to go back.  I'd look at it and think, "what a big mess--there's good stuff here, but my ADHD hates the intimidating way it's all plastered on the wiki!"  So I decided to make another change in our CS program, and I'm so glad I did.

In the past, our student developers team would use SVN and TRAC on our own server to host our projects.  We also have a private phpbb forum that we use for discussions on current projects.  But I have increasingly found myself interested in two very popular alternatives to the above approach: GIT and GitHub.

Rather than go back and redo the wiki I had already started, I created the Helping Hands project on GitHub, and I'm glad I did.  Of course I had the usual feelings of "...but this is just a simple project of my own, why put it up on a public repo and let anyone at all see it?"  And of course there was the usual guilt I have when something like GitHub is free (as long as the project is open source).  But then I spent some time reading research on the lack of women in open source projects.  I realized that my fears of putting my work out there for everyone to see was, well, normal.

Browsing GitHub, I entered some search terms like "education" to see what projects were out there that could possibly be similar to what I wanted Helping Hands to accomplish.  What I found was pretty surprising.  Of the projects I found, almost all of them were little tiny "hello world" type projects that had only one contributor.  Some only had a README file.  Others had one file of code titled "chapter01problem01.js" and no README file at all.  By "education," most were referring to the fact that the project creator was learning something and wanted to keep their work on GitHub. It was pretty clear to me that these were little experiments that someone tried and then totally abandoned. But there they are--doing nothing and not being read by anyone except ... me. Somehow that made me even more inspired to launch Helping Hands on GitHub.

Take the Chance and Share Your Work

The power of a site like GitHub is that they embrace the new business model that is totally killing off big corporations like MicroSoft. They realize that you don't have to nickel and dime users to death to be profitable. The writing is on the wall ( and it's in Chinese , btw).

One of the best ways to get batter is practice.  But practice can be an escape environment where you feel all safe and isolated and no one will make fun of your skills.  I just want to encourage you to take your work and open it up to others.  When I saw a few typical GitHub projects, I got a perspective that GitHub (and open source projects in general) are just as varied as we are as people.  If you only see GitHub from an occasional blog post linking to a successful and large project hosted there, well, you tend to think that anything you could create would be laughable.  Truth is, laughable is the norm, and on all those flimsy "education" projects there was not one troll on there saying, "this is a bunch of crap, just give up!"  The trolls are in our heads, for the most part (or posting comments on CNN.com).  The majority of people you will meet on open source projects are willing to help you get started into the exciting world of open source development.

It's not the real world, it's nicer.







Wednesday, July 11, 2012




Okay, I'll admit: I'm a blow-bag and can talk for a long time once I get going on something I am interested in.  When I was asked recently to define "computational thinking", I told the interviewer that I would get back to her on that one, as we had less than 15 minutes left to talk.  Here's what I ended up sending to her:

Q: What is Computational Thinking?

I would say that CT is the act of applying computational approaches to solve problems and to further understand how things work.  I don't want to say it's ONLY about problem solving, as it can also be a recreational activity, like when I play around with Structure Synth and Processing (and Nodebox and Context Free Art).  Certainly observing patterns is involved.  

I used to wimp out and say, "well, I recognize it when I see it."  That, however, seems to have some validity, and it led to me wanting to create a CS class that involved no text editors and no coding.  Education misses out terribly on the one thing that really helps get people thinking computationally: capturing that feeling you get when you start playing a game and you're not really sure how the game works.  The process of interacting with the game environment is very similar to how people best ACQUIRE languages (as opposed to LEARNing languages).  It's involves trial and error, and mistakes are not a big deal.  If mistakes are a big deal (like on a high pressure test, or when someone is uncomfortable during language immersion), learning almost completely stops.  

Think of a good puzzle.  Or here's something I witnessed once at a youth leadership-type conference:  after we had finished most of the activities from the day and were just relaxing in a cabin (in northern WI), one student asked another to "play a tricky game" with him.  Those two students discussed what they would do for a while and then they worked as a pair to show us a game.  Student A left the room and student B explained the game to us.  We were to select some object in the room and see if student A would be able to identify our "secret" object.  We discussed it and chose something like a light-switch.  Student A came back into the room and student B began asking questions like "is it that lamp?", to which A said, "nope."  This went on for a while, through many seemingly random objects, until student B asked "it it that light-switch?"  "Yes!" said A.  

Alright, we had to figure out how that happened.  For the next 40 minutes or so we worked together to impose constraints on A and B to rule out different ways they could be accomplishing their trick.  We had A turn and face the wall.  We made A not talk at all--instead he could only point at objects.  They always got it right.  But we figured it out eventually.

Why bring up that example?  Because those 40 minutes are still clear in my mind and that was 25 years ago.  I have no clue at all what the activities were that day, nor what the lessons were supposed to be.  But I remember that game, because it had all the makings for a successful lesson.  Players A and B did not lecture us for 30 minutes before we played the game.  They did not give us hints.  They also made it clear that they were willing to keep up the game, but we would have to figure it out--they weren't going to TELL US.  

Was it computational thinking?  Well, it certainly was logical thinking that got us the answer.  I have played similar games with students that WERE more overtly numerical in nature, but computational thinking embraces discrete mathematics, and discrete math is simply ignored at the secondary level (except for a little bit of probability, but that's only to pass a "there are 4 colored balls in a sack" type questions on standardized tests.

What's more important to take from that example, though, is the HUGE difference in that activity and a typical class for a student.  Students are much more likely to remember the "Bejeweled" game they were playing under the table on their smart phone than they are to remember the lesson.