<div>I'm numbering from 0, Python style, so this was actually our third meeting</div>
<div>in the boyhood home of 2x Nobel laureate Linus Pauling, sitting around</div>
<div>the big table, with projector (Optoma), speakers (including woofer), and </div>
<div>laptop (Toshiba Satellite, WinXP w/ Python 2.5, VPython, POV-Ray 3.6,</div>
<div>wxPython and PythonCard).</div>
<div> </div>
<div>The course for adults parallels my Saturday Academy course to some </div>
<div>degree and I again showed Code Guardian as an opening cartoon feature,</div>
<div>to show what one guy and some friends could now accomplish with a </div>
<div>rendering engine, given sufficient talent, skills and commitment (can't</div>
<div>trivialize any of those, if the end result is great art, which Code Guardian</div>
<div>certainly is (<a href="http://cee-gee.net">cee-gee.net</a>)).</div>
<div> </div>
<div>By way of intro on the whiteboard (erasable colored pens), I drew three</div>
<div>partially overlapping circles, Venn Diagram style (each overlapping </div>
<div>the others, a place in the center where they all overlappped). In the</div>
<div>circles I wrote M, V, C for Model, View, Controller. </div>
<div> </div>
<div>I quickly connected MVC to a history of programming we'd already </div>
<div>developed: </div>
<div>(i) wild west spaghetti code era, deriving from hard wiring</div>
<div>(ii) compiled imperative languages (COBOL, Hopper)</div>
<div>(iii) structured programming (Djikstra), </div>
<div>(iv) then more sophisiticated paradigms, including OO and then DP, </div>
<div>where DP = design patterns, let's say premised on OOP, and where</div>
<div>MVC is one very common design pattern people talk about.</div>
<div> </div>
<div>In this class, M, our model, depends mostly on the XYZ Cartesian</div>
<div>style math kids already learn as a part of middle and high school, </div>
<div>i.e. the usual pre-college analytical geometry pioneered by Descartes,</div>
<div>Fermat and folks like that, already very entrenched, and later, </div>
<div>via Hamilton, Gibbs, Heaviside and others, becoming today's</div>
<div>"vector algebra" from whence the term "vector graphics" is derived.</div>
<div> </div>
<div>So for a Model, we're using high school analytic geometry and</div>
<div>vector algebra. Good way to lean both, with Python mediating.</div>
<div>Start with Dog and Monkey as subclasses of Mammal, to get</div>
<div>familiar with a few __rib__ special names, the whole idea of </div>
<div>classes, subclasses and objects, then move to "math objects"</div>
<div>(more abstract) such as Vector, Edge and Polyhedron.</div>
<div> </div>
<div>V, our view, comes in two basic flavors: </div>
<div> </div>
<div>(A) real time and </div>
<div>(B) render time.</div>
<div> </div>
<div>In real time, you get such as OpenGL, with a simplifying VPython</div>
<div>facade, and/or DirectX or whatever. Engines that respond in real</div>
<div>time to give a game-like experience (or a game). Doom by id set </div>
<div>the standard when PCs were still new, showing what intelligent </div>
<div>coding could accomplish, in terms of a first person shooter, </div>
<div>with the minimal hardware of the day. The games have only </div>
<div>gotten more impressive since then.</div>
<div> </div>
<div>And yet when it comes to attention to small detail and photo-</div>
<div>realism, the real time games still can't reach the level of a rendered</div>
<div>movie, like 'Shrek' or 'Cars' or 'Over the Hedge'. That's because in</div>
<div>render time we have all the time we need to trace every ray of </div>
<div>light, to get those photo-realistic frames, which only at the end</div>
<div>get strung together and projected at a real time frame rate. </div>
<div> </div>
<div>So this counts as our other broad category of View -- not like</div>
<div>these are the only two, plus many times we interleave them, </div>
<div>i.e. a real time game will suddenly switch to a canned loop</div>
<div>developed with ray tracing.</div>
<div> </div>
<div>To give students "cave painting" [1] insight into both kinds </div>
<div>of view, we use Python as our controller (C). Python talking </div>
<div>to VPython represents real time animation and simulation, </div>
<div>ala the game engines, whereas Python talking to POV-Ray</div>
<div>represents render time animation ala the movies, movies</div>
<div>like Code Guardian. </div>
<div> </div>
<div>Python also implements a lot of the Model, in that the polyhedra</div>
<div>and vector algebra we need is all exposed in source code, in </div>
<div>the form of stickworks.py and polyhedra.py. There's a minimal</div>
<div>Vector class, wrapped around VPython's, which we actually</div>
<div>keep using when writing Scene Description Language for </div>
<div>POV-Ray -- because in terms of the model, a vector is a vector</div>
<div>and all we need is to be able to add and scale them (__add__</div>
<div>and __mul__ them).</div>
<div> </div>
<div>In sum, I'm seeing these major themes emerge from this course,</div>
<div>which I'm regarding as open source and transferrable, usable </div>
<div>by other teachers and/or peers teaching peers (which explains</div>
<div>the screencasts):</div>
<div> </div>
<div>(1) history of computer programming, emergence of OO and DP</div>
<div>(2) MVC as a DP example, with broad categories of V being</div>
<div> (a) real time (games, some simulations, musc visualizers, </div>
<div> screen savers)</div>
<div> (b) render time (cartoons, some simulations, Animusic,</div>
<div> photo-realistic static screen savers)</div>
<div>(3) Python is implementation language</div>
<div>(4) Vector graphics and analytic geometry for controlling the model</div>
<div>(5) Python playing well with others, gluing together different kinds</div>
<div>of engine (in this case OpenGL and POV-Ray).</div>
<div> </div>
<div>All of the above I think proves quite an eye opener for middle and</div>
<div>high schoolers, not only in terms of reinforcing their everyday </div>
<div>math and giving them entre to a powerful programming language,</div>
<div>but in terms of giving a "how things work" overview of a lot of</div>
<div>state of the art technology. </div>
<div> </div>
<div>Other courses will showcase different aspects of course. Like </div>
<div>in my course for Winterhaven (Portland Public), we focused </div>
<div>on XML (xml_rpc), GIS (Google Earth), and even a little on </div>
<div>MySQL (my geographic quiz showcases USA states and </div>
<div>capitals, very traditional, but with this Pythonic layer between </div>
<div>a database and the web, ala LAMP) [2].</div>
<div> </div>
<div>Kirby</div>
<div> </div>
<div>[1] "cave painting" means "enough of a semblance to give</div>
<div>the idea but minus much detail" (say "dumbing down" if </div>
<div>you like but I prefer "homomorphism" (vs. an "isomorphism"))</div>
<div>i.e. an analogy with many dimensions missing by design).</div>
<div>Example usage: </div>
<div><a href="http://mathforum.org/kb/thread.jspa?threadID=1418476">http://mathforum.org/kb/thread.jspa?threadID=1418476</a></div>
<div> </div>
<div>[2] <a href="http://mail.python.org/pipermail/edu-sig/2005-November/005533.html">http://mail.python.org/pipermail/edu-sig/2005-November/005533.html</a></div>
<div>
<div><a href="http://www.4dsolutions.net/ocn/geoquiz.html">http://www.4dsolutions.net/ocn/geoquiz.html</a></div>
<div> </div></div>