From kirby.urner at gmail.com Thu Jul 1 01:01:15 2010 From: kirby.urner at gmail.com (kirby urner) Date: Wed, 30 Jun 2010 16:01:15 -0700 Subject: [Edu-sig] Updating some more... Message-ID: Yeah, Python 3.x is not ready for prime time in several respects, all talk of Eclipse aside, but that's to be expected as it's still pretty new. I've seen some buzz regarding the #python channel on Freenode, where I gather some bots have been automatically steering people away from the 3.x series. edu-sig doesn't have any real time channel for assisting educators or their students I don't think. Too over-specialized maybe. Asynchronous is good enuff, no need to compete with #python eh? Belated congrats to Vern Ceder for stepping up to lead poster session at usa.pycon 2011 in Atlanta per PSF blog. http://pyfound.blogspot.com/2010/06/leadership-for-pycon-us-2011.html I think py-dev is aware of the situation with Python 3.x and those planning to use that product for production roll outs will continue encouraging its swift evolution. As I was mentioning, the O'Reilly School of Technology has already made the switch, as have the authors of Mathematics for the Digital Age.[1] Where I'm focused a lot goes back to spatial geometry and VPython which I think gives just the right amount of "right brain" gratification to let the "left brain" keep exercising those lexical skills (programming, like algebra, like bash/posix/gnu, is highly lexical). Geometry + Geography is how the simulation games tend to work, with a geography being potentially fantastic, a fantasy, like Alice (in Wonderland) or Uru.[2] Or a game might be closer to real, as when running macro and micro economics simulations (e.g. electrical grid management vs. home appliances management).[3] You'll find me on mathfuture (Google group) and math-teach @ Drexel among other places. A lot of times I don't think the material is Pythonic enough to merit any notes to this list. Sometimes I meet up with other posters to this list. Using the Decimal class to explore limits some more is in my queue. For example, the number e, as in "e ** (1j * math.pi) = -1" may be expressed as lim (1 + 1/n) ** n. >>> import math >>> math.e ** (1j * math.pi) (-1+1.2246467991473532e-16j) >>> n = 10000. >>> (1 + 1/n) ** n 2.7181459268249255 >>> math.e 2.7182818284590451 >>> My first exercise with the Hubble folks was to look at phi to some 100 places and do a string match against a text file with phi to some 100K places. http://www.4dsolutions.net/presentations/holdenweb/decimaldemo.py http://www.4dsolutions.net/presentations/holdenweb/PhiTo100000Places.txt I did something similar with a Ramanujan series converging to pi, however I felt my coding style was too ugly.[4] This is a kind of real world convergence investigation that computational math might include (as an exercise in coding skills), whereas in the calculator era we stayed happy with much larger epsilons. Kirby [1] http://www.skylit.com/mathandpython.html [2] http://en.wikipedia.org/wiki/American_McGee's_Alice http://en.wikipedia.org/wiki/Uru:_Ages_Beyond_Myst [3] http://mathforum.org/kb/message.jspa?messageID=7111960&tstart=0 [4] http://worldgame.blogspot.com/2008/02/reflective-fragment.html (has a link back to this archive) From vceder at canterburyschool.org Thu Jul 1 03:09:22 2010 From: vceder at canterburyschool.org (Vern Ceder) Date: Wed, 30 Jun 2010 21:09:22 -0400 Subject: [Edu-sig] Updating some more... In-Reply-To: References: Message-ID: <4C2BEAC2.9040300@canterburyschool.org> Hey Kirby, kirby urner wrote: > Yeah, Python 3.x is not ready for prime time in several respects, > all talk of Eclipse aside, but that's to be expected as it's still > pretty new. > > I've seen some buzz regarding the #python channel on Freenode, > where I gather some bots have been automatically steering > people away from the 3.x series. > > edu-sig doesn't have any real time channel for assisting educators > or their students I don't think. Too over-specialized maybe. > Asynchronous is good enuff, no need to compete with #python > eh? > > Belated congrats to Vern Ceder for stepping up to lead poster > session at usa.pycon 2011 in Atlanta per PSF blog. > http://pyfound.blogspot.com/2010/06/leadership-for-pycon-us-2011.html Thanks. And I'm not forgetting that you played some part in getting me into the poster session business in the first place... ;) We'll be issuing the poster session CFP around the same time as the regular talk CFP, and I really hope some edu-sig-ers will consider proposing a poster. The whole idea behind posters at PyCon, IMO, is to give a voice to speakers and topics that otherwise wouldn't make it through the tough competition of regular talks, so don't be shy. And it was quite frankly a blast! If you weren't at PyCon it's hard to describe the super-mega-hallway-track-on-steroids atmosphere that developed. So start working on those posters! > I think py-dev is aware of the situation with Python 3.x and > those planning to use that product for production roll outs will > continue encouraging its swift evolution. Yeah, I gave a talk to a group of Pythonistas in Indy last week, http://learnpython.wordpress.com/2010/06/26/indypy-meetup-and-python-3/ focusing on Python 3.x. They were an accomplished bunch, but not very familiar with 3.x, except for one who was excited about the use of Unicode, particularly in source code. His observation was that it made Python much more accessible for speakers of, say, south Asian languages. And yeah, I did mention your experiments along those lines. There are some in the Python community who think that having to port things to 3.x is going to sap the fun out of the language. I don't agree - Python 3 is (deservedly) the language of the future and the future WILL get here. ;) > As I was mentioning, the O'Reilly School of Technology has > already made the switch, as have the authors of Mathematics > for the Digital Age.[1] And I gather that at least one class at UCLA is using my book, which is solely Python 3.x (further book info in my sig). Cheers, Vern > Where I'm focused a lot goes back to spatial geometry and > VPython which I think gives just the right amount of "right brain" > gratification to let the "left brain" keep exercising those lexical > skills (programming, like algebra, like bash/posix/gnu, is > highly lexical). > > Geometry + Geography is how the simulation games tend to > work, with a geography being potentially fantastic, a fantasy, > like Alice (in Wonderland) or Uru.[2] Or a game might be closer > to real, as when running macro and micro economics > simulations (e.g. electrical grid management vs. home > appliances management).[3] > > You'll find me on mathfuture (Google group) and math-teach > @ Drexel among other places. A lot of times I don't think > the material is Pythonic enough to merit any notes to this list. > Sometimes I meet up with other posters to this list. > > Using the Decimal class to explore limits some more is in > my queue. For example, the number e, as in "e ** (1j * math.pi) = -1" > may be expressed as lim (1 + 1/n) ** n. > >>>> import math >>>> math.e ** (1j * math.pi) > (-1+1.2246467991473532e-16j) > >>>> n = 10000. >>>> (1 + 1/n) ** n > 2.7181459268249255 >>>> math.e > 2.7182818284590451 > > My first exercise with the Hubble folks was to look at phi to > some 100 places and do a string match against a text file > with phi to some 100K places. > > http://www.4dsolutions.net/presentations/holdenweb/decimaldemo.py > http://www.4dsolutions.net/presentations/holdenweb/PhiTo100000Places.txt > > I did something similar with a Ramanujan series converging to pi, > however I felt my coding style was too ugly.[4] > > This is a kind of real world convergence investigation that > computational math might include (as an exercise in coding skills), > whereas in the calculator era we stayed happy with much larger > epsilons. > > Kirby > > [1] http://www.skylit.com/mathandpython.html > > [2] http://en.wikipedia.org/wiki/American_McGee's_Alice > http://en.wikipedia.org/wiki/Uru:_Ages_Beyond_Myst > > [3] http://mathforum.org/kb/message.jspa?messageID=7111960&tstart=0 > > [4] http://worldgame.blogspot.com/2008/02/reflective-fragment.html > (has a link back to this archive) > _______________________________________________ > Edu-sig mailing list > Edu-sig at python.org > http://mail.python.org/mailman/listinfo/edu-sig -- This time for sure! -Bullwinkle J. Moose ----------------------------- Vern Ceder, Director of Technology Canterbury School, 3210 Smith Road, Ft Wayne, IN 46804 vceder at canterburyschool.org; 260-436-0746; FAX: 260-436-5137 The Quick Python Book, 2nd Ed - http://bit.ly/bRsWDW From litvin at skylit.com Thu Jul 1 03:49:07 2010 From: litvin at skylit.com (Litvin) Date: Wed, 30 Jun 2010 21:49:07 -0400 Subject: [Edu-sig] Updating some more... In-Reply-To: References: Message-ID: <7.0.1.0.2.20100630205813.03fb1a38@skylit.com> At 07:01 PM 6/30/2010, kirby urner wrote: >I did something similar with a Ramanujan series converging to pi... Since you mentioned Ramanujan... He and Hardy worked quite a bit on the partition function: p(n) = the number of different ways n can be represented as a sum of positive integers. The sequence p(n) starts like Fibonacci numbers, 1, 1, 2, 3, 5... but the next one is 7. Nice try! At some point around 1916, an amature mathematician Major MacMahon, who was "good with numbers" calculated _by hand_ for Hardy and Ramanujan p(n) for n = 1 through 200. p(200) happens to be 3,972,999,029,388. An interesting story. It is possible, of course, to write a recursive function to calculate p(n), but a more fun way is to use the generating function (1 + x + x^2 +x^3+...x^n)*(1+x^2+x^4+x^6+...)(1+x^3+x^6+...)*...*(1+x^n) (due to Euler, as most everything else...) When you distribute, the coefficients at x, x^2, ... of the resulting polynomial give you p(1), p(2), ... So this could be a basis for a meaningful project on lists and polynomials. If you plug a large enough number into the generating function, say, x = 10000, you get a number whose groups of five digits (from the right) give you p(n) as long as p(n) < 10000. So for a relatively small n instead of multiplying polynomials you can multiply "periodic" integers 100010001...0001*100000001...00000001*... It is easy, of course, to generate these numbers using strings. Then this becomes a meaningful exercise on strings. I am currently working on a "test package" for the Math and Python book and I've just added a question based on a small peace of this, so I felt like sharing. Not sure whether this is for the left brain or for the right brain; these periodic strings are kinda cute. :) Gary Litvin www.skylit.com -------------- next part -------------- An HTML attachment was scrubbed... URL: From kirby.urner at gmail.com Thu Jul 1 18:28:26 2010 From: kirby.urner at gmail.com (kirby urner) Date: Thu, 1 Jul 2010 09:28:26 -0700 Subject: [Edu-sig] Updating some more... In-Reply-To: <7.0.1.0.2.20100630205813.03fb1a38@skylit.com> References: <7.0.1.0.2.20100630205813.03fb1a38@skylit.com> Message-ID: Totally mind-boggling Gary. Tracing through On-Line Dictionary of Integer Sequences I figured out how to do it recursively, which might not be as much fun. For one thing, it takes forever to run. I despair of ever reaching p(200) this way. Major MacMahon rocks 'n rules (Hardy and Ramanujan too). This song about Ramanujan's life is both funny and kinda sad: http://www.archive.org/details/Ramanujan (play control in upper right) Kirby >>> gen = a000041() >>> [next(gen) for i in range(60)] [1, 1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56, 77, 101, 135, 176, 231, 297, 385, 490, 627, 792, 1002, 1255, 1575, 1958, 2436, 3010, 3718, 4565, 5604, 6842, 8349, 10143, 12310, 14883, 17977, 21637, 26015, 31185, 37338, 44583, 53174, 63261, 75175, 89134, 105558, 124754, 147273, 173525, 204226, 239943, 281589, 329931, 386155, 451276, 526823, 614154, 715220, 831820] Here's the code: def a000041(): gen = a137683() while True: yield sum(next(gen)) def pascal(): row = [1] while True: yield row row = [i+j for i,j in zip(row + [0], [0] + row)] def invpascal(): gen = pascal() while True: row = next(gen) if len(row)%2: yield [row[i]*pow(-1,i) for i in range(len(row))] else: yield [row[i]*pow(-1,i+1) for i in range(len(row))] def a137683(): gen1 = invpascal() gen2 = a026794() n = 1 ipmatrix = [] # inverse pascal triangular matrix while True: ipmatrix.append(next(gen1)) result = [] row = next(gen2) for i in range(n): col = [0 for j in range(n)] for k in range(i,n): col[k] = ipmatrix[k][i] result.append(sum([i * j for i,j in zip(row, col)])) yield result n += 1 def a026794(): n = 1 while True: row = [] for k in range(1, n+1): row.append(T(n,k)) yield row n += 1 def T(n, k): """ T(n, k)=if(k<1|k>n, 0, if(n==k, 1, sum(i=k, n-k, T(n-k, i)))) """ if k < 1 or k > n: return 0 if n == k: return 1 else: return sum([T(n-k, i) for i in range(k, n-k+1)]) # bonus, not used def a010054(): n = 0 incr = 0 tri = incr while True: if n == tri: yield 1 incr += 1 tri = tri + incr else: yield 0 n += 1 On Wed, Jun 30, 2010 at 6:49 PM, Litvin wrote: > At 07:01 PM 6/30/2010, kirby urner wrote: > > I did something similar with a Ramanujan series converging to pi... > > Since you mentioned Ramanujan... > > He and Hardy worked quite a bit on the partition function: p(n) = the number > of different ways n can be represented as a sum of positive integers.? The > sequence p(n) starts like Fibonacci numbers, 1, 1, 2, 3, 5... but the next > one is 7.? Nice try! > > At some point around 1916, an amature mathematician Major MacMahon, who was > "good with numbers" calculated _by hand_ for Hardy and Ramanujan p(n) for n > = 1 through 200.? p(200) happens to be? 3,972,999,029,388.? An interesting > story. > > It is possible, of course, to write a recursive function to calculate p(n), > but a more fun way is to use the generating function (1 + x + x^2 > +x^3+...x^n)*(1+x^2+x^4+x^6+...)(1+x^3+x^6+...)*...*(1+x^n) (due to Euler, > as most everything else...)? When you distribute, the coefficients at x, > x^2, ... of the resulting polynomial give you p(1), p(2), ... So this could > be a basis for a meaningful project on lists and polynomials. > > If you plug a large enough number into the generating function, say, x = > 10000, you get a number whose groups of five digits (from the right) give > you p(n) as long as p(n) < 10000.? So for a relatively small n instead of > multiplying polynomials you can multiply "periodic" integers > 100010001...0001*100000001...00000001*... > It is easy, of course, to generate these numbers using strings.? Then this > becomes a meaningful exercise on strings. > > I am currently working on a "test package" for the Math and Python book and > I've just added a question based on a small peace of this, so I felt like > sharing.? Not sure whether this is for the left brain or for the right > brain; these periodic strings are kinda cute. :) > > Gary Litvin > www.skylit.com > From kirby.urner at gmail.com Tue Jul 6 06:50:02 2010 From: kirby.urner at gmail.com (kirby urner) Date: Mon, 5 Jul 2010 21:50:02 -0700 Subject: [Edu-sig] Python script to generate whole cities in Blender Message-ID: We haven't discussed Blender much on edu-sig, but thought I'd share this link anyway: http://arnaud.ile.nc/sce/index.php With thx to synchronofile.com Kirby From philhwagner at gmail.com Wed Jul 7 05:41:59 2010 From: philhwagner at gmail.com (Phil Wagner) Date: Tue, 6 Jul 2010 20:41:59 -0700 Subject: [Edu-sig] Fwd: Art of Problem Solving Programming/Computer Science In-Reply-To: References: <106f4c5fa7c7acba207d9125afef57fb@www.artofproblemsolving.com> Message-ID: Thought I would share this in case anyone had not heard of it. ----Start Forwarded Message---- Greetings, This fall, Art of Problem Solving will offer its first course in computer science/programming. ?We are starting with Introduction to Programming using Python. ?The 12-week course is intended for students who are new to computer programming. ?This course covers basic procedural techniques such as variables, data types, selection, iteration, and functions. ?It will also introduce students to the object-oriented paradigm. We???ll also look at various computer science concepts. ?By the end of the course, students will be able to construct a moderately-sized Python program with a graphical user interface. ?We expect to offer more advanced courses in the future. We will offer two sections of the course this fall, one on Thursday nights, 7:30 - 9 PM ET (4:30 - 6 PM PT), starting September 16, and the other on Wednesday nights, 7:30 - 9 PM ET (4:30 - 6 PM PT), starting September 22. ?We expect both sections to fill relatively quickly, so don't wait too long to enroll if you plan on taking the course. More details about the course are available at http://www.artofproblemsolving.com/School/courseinfo.php?course_id=cs:intro If you have any questions about this course, or any other Art of Problem Solving course, please contact us at classes at artofproblemsolving.com. Sincerely, Richard Rusczyk To leave this mailing list or manage your mail list settings, please go ?to http://www.artofproblemsolving.com/Company/maillist.php -- www.brokenairplane.com (Education and Technology Blog) -- www.BrokenAirplane.com (Education and Technology Blog) From kirby.urner at gmail.com Sat Jul 10 10:32:37 2010 From: kirby.urner at gmail.com (kirby urner) Date: Sat, 10 Jul 2010 01:32:37 -0700 Subject: [Edu-sig] Gearing up (Python course...) Message-ID: I'm gearing up to do another Python course. PSU seems more locked down than ever BTW. I've gotta be met by an official to hand out user logins, as these cannot be transmitted electronically. That's not how it used to be when I taught there before. We're going back to hand carry and paper delivery for more sensitive information apparently, kinda retro. I should wear something sensibly 1940s. A primary technique is to teach enough basic syntax, after startup and shutdown practice, to enable "doodling". This means I get to talk about one thing, while they multi-task, checking out arithmetic ops, range(), slice, a few string ops, check the error messages. Chatting about help & dir helps some, but probably more useful is I doodle some too, projecting up front. We cover a few bases, then they doodle while I ramble. Maybe I talk about PEPs, go over some history, yak about Pycons, poster sessions, user groups... Then we cover a few more bases and repeat. Doodle while hearing some talk about open source, GNU, GPL, MIT, OLPC... chime in with news and views? We'll get to Lightning Talks later (a way for students to voluntarily share about projects). A goal is to develop comfort with simple interactivity, you could say "using Python as a calculator". Saving to site-packages, importing the namespace (different ways to import) should round out this first section. In terms of content, things to program around, I tend to wander into spatial geometry, but not with any coordinates or turtles at first. I've got this "geometry plus geography" heuristic goin' where these are the only two subjects under the sun (per posts to mathfuture, a Google group), so it's easy for me to frequent this area. Geometry is thinking (imagination) and Geography is the real world (i.e. everything else). I'm a big fan of "gnomon studies" [0] which includes figurate and polyhedral numbers. 'The Book of Numbers' by Conway & Guy was influential. I've already filed hundreds of posts about this in this archive, so probably shouldn't get too verbose. 10 * f * f + 2 is a good one to play with. >>> [10 * f * f + 2 for f in range(11)] [2, 12, 42, 92, 162, 252, 362, 492, 642, 812, 1002] The initial 2 should be a 1 if you wanna match up with Encyclopedia of Integer Sequences.[1] I like having polyhedra going, via figurate numbers, because they're the paradigm "objects" or "action figures" of the cybernetic vista. Figurate or polygon numbers become polyhedral numbers, i.e. we go from triangular numbers to tetrahedral numbers pretty easily, or squares to half-octahedra (Egyptian pyramids). [ Actually, over on Math Forum, I've got a curriculum guy telling me polyhedra just don't relate to anything, that he can see, so I realize it's sometimes an uphill battle to champion their relevance, chemistry and biology notwithstanding (all geography in the two- subject framework) ] Any "sim" or screen character may be thought of as an animated, multi-faceted avatar, a "puppet" of behind-the-scenes software (screen-as-theater, one of the oldest motifs, so familiar from television). However, aside from a few Youtubes (e.g. [2]), other static web pages, I'm mostly relying on student imaginations to provide the visuals at first. It's like learning to read without pictures, engaging the imagination while focusing on a purely lexical activity (reading). I'm pretty adamant that programming is a more lexical and/or algebraic activity, and whereas I'm a big fan of right brain mental geometry, I'm concerned that too many resources pander to an anti-lexical bias, feeding student aversion to "straight text". At some point, it pays to stop trying to make every experience some kind of video game. Better to get back to games with words themselves (more like crossword puzzles) and cultivate an awareness of those. Messing with fonts may come in handy (in Portland we have Bram Pitoyo, a total font head, frequents the conferences). I always like to show off Akbar font, mention The Simpsons and Matt G. (from around here). There's a kind of stunting or atrophy of the left brain we need to worry about as well (cuts both ways). That's why I want early "doodling" to be chiefly lexical, with no immediate "turtle gratification" (nor VPython at first, much as I love to use that add-on). Remember, these are teenagers, not tiny children. They likely know how to type some, and won't have a problem spelling out words. Having these "words" (expressions, short programs) "laugh and play" i.e. "talk back" because of the interpreter environment, is supposed to be a game in itself (a kind of "language game"). It's supposed to be interesting to reverse lists (play with palindromes), pop a stack, feed a queue or whatever. Look up in a dict. import cos and sqrt. >>> from math import sqrt as root2 >>> root2(4) 2.0 >>> def root3(x): return pow(x, 1.0/3.0) >>> root3(27) 3.0 To uphold my reputation as an "objects first" kind of teacher, I'm going to focus at least part of my patter on what OO is about and why it was supposed to be an advance. Functional programmers voice their concerns that OO is potentially messy, doesn't do enough to save us from ourselves. But the goal was to imitate "the real world" in some way (the geographic realm). Knowledge domains naturally fragment into "things" with behaviors (capabilities) and attributes (properties). OO isn't a computer thing, it's a "natural habit of thought" thing. Here's one flavor of logic that aims to capture "natural language" to some primitive extent. Philosophers please take note (they haven't been, mostly). And it's potentially messy because the real world is messy. The idea of objects with state, with APIs to change state, is reflective of everyday encounters, adventures in Geography (where even insects have state). I suppose that could be read as a defense of crummy programming, but that's not my intent. We do need to learn about pitfalls and the difference between beautiful code and gnarly unmaintainable code (the latter more likely what a solo programmer will write, and think clear as day -- why we think a minimum of two coders per project is a serious benefit to all concerned). What behaviors and attributes do polyhedra have? Their number of vertexes V, edges E and faces F (simple counts) are good examples of attributes. Verbs would be "scale" (grow / shrink), "translate" (move about, accelerate) and "rotate" (symmetries, great circles of spin, axes, cleaving into parts). Even without doing any graphics, we might implement a method called "dual", which appears to transform a polyhedron into its dual (I say "appears" because in these simple "cave painting" examples we might just switch the values of V and F, keeping E the same --- one line of code basically). Showing off Google Sketchup might be worthwhile at this juncture, even if it's more of a Ruby thing (we like Ruby just fine). I introduce "dot notation" as following these patterns (sort of): noun.verb(args); noun.adjective. I'm influenced by J here, which although more functional in some ways, is all about using parts of speech, grammar, as a way of talking about the J language.[3] Language teachers will love computational math all the more if it reinforces the importance of learning parts of speech, so I figure this is a win-win when it comes to inter-departmental relations. The DOM relates to language arts as well. A lot of computer topics are intrinsic to the humanities these days (e.g. ConceptNet).[4] More later, Kirby [0] http://www.flickr.com/photos/17157315 at N00/3195670892/in/photostream/ http://www.flickr.com/photos/17157315 at N00/sets/72157617745459466/with/3195670892/ [1] http://www.research.att.com/~njas/sequences/A005901 [2] http://mybizmo.blogspot.com/2010/07/blog-post.html http://www.flickr.com/photos/17157315 at N00/sets/72157622797118549/with/3201379449/ [3] http://www.jsoftware.com/help/dictionary/contents.htm (I'm playing with the idea of using this in my Martian Math class at Reed College) [4] http://controlroom.blogspot.com/2010/06/aristotle-was-right.html From calcpage at aol.com Sat Jul 10 14:37:07 2010 From: calcpage at aol.com (Calcpage) Date: Sat, 10 Jul 2010 08:37:07 -0400 Subject: [Edu-sig] Gearing up (Python course...) In-Reply-To: References: Message-ID: Wow, Kirby, thanx for sharing all that you do! I am relatively new to python, but not new to teaching with technology. I've been teaching computer math and computer science since 1975. Often times, however, I have done so in a vacuum. It's nice to see what others are doing in this vein other than myself! I am a math teacher by trade, but some how was fortunate enough to be involved with this sort if curriculum too. That said, I do teach math in these courses but these are courses geared toward new programmers and an intro to syntax and semantics whether it be functional or object based programming. In fact, this coming year I am starting a new course where math comes first but is python based. I will be teaching a Calculus Lab using http://www.sagemath.org . So, your descriptions of curriculum and pedagogy re pythonic math are most enlightening! If interested, please see the link on the right side of my blog entitled "Calculus Research Lab" Thanx, A. Jorge Garcia Applied Math & CS Baldwin SHS & Nassau CC http://shadowfaxrant.blogspot.com http://www.youtube.com/calcpage2009 Sent from my iPod On Jul 10, 2010, at 4:32 AM, kirby urner wrote: > I'm gearing up to do another Python course. PSU seems > more locked down than ever BTW. I've gotta be met by an > official to hand out user logins, as these cannot be > transmitted electronically. > > That's not how it used to be when I taught there before. > > We're going back to hand carry and paper delivery for > more sensitive information apparently, kinda retro. > I should wear something sensibly 1940s. > > A primary technique is to teach enough basic syntax, > after startup and shutdown practice, to enable "doodling". > > This means I get to talk about one thing, while they > multi-task, checking out arithmetic ops, range(), slice, > a few string ops, check the error messages. > > Chatting about help & dir helps some, but probably > more useful is I doodle some too, projecting up front. > > We cover a few bases, then they doodle while I ramble. > Maybe I talk about PEPs, go over some history, yak > about Pycons, poster sessions, user groups... > > Then we cover a few more bases and repeat. > > Doodle while hearing some talk about open source, > GNU, GPL, MIT, OLPC... chime in with news and views? > We'll get to Lightning Talks later (a way for students > to voluntarily share about projects). > > A goal is to develop comfort with simple interactivity, > you could say "using Python as a calculator". Saving > to site-packages, importing the namespace (different > ways to import) should round out this first section. > > In terms of content, things to program around, I tend > to wander into spatial geometry, but not with any > coordinates or turtles at first. > > I've got this "geometry plus geography" heuristic > goin' where these are the only two subjects under > the sun (per posts to mathfuture, a Google group), > so it's easy for me to frequent this area. > > Geometry is thinking (imagination) and Geography > is the real world (i.e. everything else). > > I'm a big fan of "gnomon studies" [0] which includes > figurate and polyhedral numbers. 'The Book of > Numbers' by Conway & Guy was influential. > > I've already filed hundreds of posts about this in this > archive, so probably shouldn't get too verbose. > > 10 * f * f + 2 is a good one to play with. > >>>> [10 * f * f + 2 for f in range(11)] > [2, 12, 42, 92, 162, 252, 362, 492, 642, 812, 1002] > > The initial 2 should be a 1 if you wanna match up > with Encyclopedia of Integer Sequences.[1] > > I like having polyhedra going, via figurate numbers, > because they're the paradigm "objects" or "action > figures" of the cybernetic vista. > > Figurate or polygon numbers become polyhedral > numbers, i.e. we go from triangular numbers to > tetrahedral numbers pretty easily, or squares > to half-octahedra (Egyptian pyramids). > > [ Actually, over on Math Forum, I've got a > curriculum guy telling me polyhedra just don't > relate to anything, that he can see, so I realize > it's sometimes an uphill battle to champion > their relevance, chemistry and biology > notwithstanding (all geography in the two- > subject framework) ] > > Any "sim" or screen character may be thought of > as an animated, multi-faceted avatar, a "puppet" > of behind-the-scenes software (screen-as-theater, > one of the oldest motifs, so familiar from television). > > However, aside from a few Youtubes (e.g. [2]), other > static web pages, I'm mostly relying on student > imaginations to provide the visuals at first. It's like > learning to read without pictures, engaging the > imagination while focusing on a purely lexical > activity (reading). > > I'm pretty adamant that programming is a more lexical > and/or algebraic activity, and whereas I'm a big fan > of right brain mental geometry, I'm concerned that > too many resources pander to an anti-lexical bias, > feeding student aversion to "straight text". > > At some point, it pays to stop trying to make every > experience some kind of video game. Better to > get back to games with words themselves (more > like crossword puzzles) and cultivate an awareness > of those. > > Messing with fonts may come in handy (in Portland > we have Bram Pitoyo, a total font head, frequents > the conferences). I always like to show off Akbar > font, mention The Simpsons and Matt G. (from > around here). > > There's a kind of stunting or atrophy of the left brain > we need to worry about as well (cuts both ways). > > That's why I want early "doodling" to be chiefly > lexical, with no immediate "turtle gratification" > (nor VPython at first, much as I love to use that > add-on). > > Remember, these are teenagers, not tiny children. > They likely know how to type some, and won't have > a problem spelling out words. > > Having these "words" (expressions, short programs) > "laugh and play" i.e. "talk back" because of the > interpreter environment, is supposed to be a game > in itself (a kind of "language game"). > > It's supposed to be interesting to reverse lists (play > with palindromes), pop a stack, feed a queue or > whatever. Look up in a dict. import cos and sqrt. > >>>> from math import sqrt as root2 >>>> root2(4) > 2.0 > >>>> def root3(x): return pow(x, 1.0/3.0) > >>>> root3(27) > 3.0 > > To uphold my reputation as an "objects first" kind > of teacher, I'm going to focus at least part of my > patter on what OO is about and why it was supposed > to be an advance. > > Functional programmers voice their concerns that > OO is potentially messy, doesn't do enough to save > us from ourselves. > > But the goal was to imitate "the real world" in some way > (the geographic realm). Knowledge domains naturally > fragment into "things" with behaviors (capabilities) > and attributes (properties). > > OO isn't a computer thing, it's a "natural habit of > thought" thing. Here's one flavor of logic that aims > to capture "natural language" to some primitive > extent. Philosophers please take note (they > haven't been, mostly). > > And it's potentially messy because the real world > is messy. The idea of objects with state, with APIs > to change state, is reflective of everyday encounters, > adventures in Geography (where even insects have > state). > > I suppose that could be read as a defense of crummy > programming, but that's not my intent. > > We do need to learn about pitfalls and the difference > between beautiful code and gnarly unmaintainable > code (the latter more likely what a solo programmer > will write, and think clear as day -- why we think a > minimum of two coders per project is a serious > benefit to all concerned). > > What behaviors and attributes do polyhedra have? > > Their number of vertexes V, edges E and faces F > (simple counts) are good examples of attributes. > Verbs would be "scale" (grow / shrink), "translate" > (move about, accelerate) and "rotate" (symmetries, > great circles of spin, axes, cleaving into parts). > > Even without doing any graphics, we might > implement a method called "dual", which appears > to transform a polyhedron into its dual (I say > "appears" because in these simple "cave > painting" examples we might just switch > the values of V and F, keeping E the same > --- one line of code basically). > > Showing off Google Sketchup might be worthwhile > at this juncture, even if it's more of a Ruby thing > (we like Ruby just fine). > > I introduce "dot notation" as following these patterns > (sort of): noun.verb(args); noun.adjective. I'm > influenced by J here, which although more functional > in some ways, is all about using parts of speech, > grammar, as a way of talking about the J language.[3] > > Language teachers will love computational math > all the more if it reinforces the importance of learning > parts of speech, so I figure this is a win-win when it > comes to inter-departmental relations. The DOM > relates to language arts as well. A lot of computer > topics are intrinsic to the humanities these days > (e.g. ConceptNet).[4] > > More later, > > Kirby > > [0] > http://www.flickr.com/photos/17157315 at N00/3195670892/in/photostream/ > http://www.flickr.com/photos/17157315 at N00/sets/72157617745459466/with/3195670892/ > > [1] > http://www.research.att.com/~njas/sequences/A005901 > > [2] http://mybizmo.blogspot.com/2010/07/blog-post.html > http://www.flickr.com/photos/17157315 at N00/sets/72157622797118549/with/3201379449/ > > [3] > http://www.jsoftware.com/help/dictionary/contents.htm > (I'm playing with the idea of using this in my Martian Math class at > Reed College) > > [4] > http://controlroom.blogspot.com/2010/06/aristotle-was-right.html > _______________________________________________ > Edu-sig mailing list > Edu-sig at python.org > http://mail.python.org/mailman/listinfo/edu-sig From kirby.urner at gmail.com Tue Jul 13 07:54:53 2010 From: kirby.urner at gmail.com (kirby urner) Date: Mon, 12 Jul 2010 22:54:53 -0700 Subject: [Edu-sig] class notes (post facto) Message-ID: The login process was pretty smooth at PSU. On first login, they're asked to change passwords. I kept harping on their needing to not forget the new passwords, but of course it's the user names, not the passwords, they're likely to lose. It's all coming back to me now (I've taught this class, or one like it, before). I got to park blocks way early, visiting Libyan coffee shop to get a some "joe" and the time of day (of all days to leave my cell phone at home...). Took the bus 14, then hopped a light rail to get closer. PSU is right in downtown Portland. I decided to spend really quite a bit of time on the 1/2 == 0 business, still using Python 2.6. Why? In part because showing them how to get an answer of 0.5, without doing the "from __future__" trick, is a great segue into talking about types, i.e. to have an answer of 0.5, enter something like: 1.0/2 1./2 1/2. or 1/2.0 or even 1.0/2.0 This leads directly to querying some named object as to its type. First go over assignment of names, using the assignment operator, e.g. a = 2, then ask for the type of a -- type(a) -- to get . I consider "type awareness" sort of the alpha and omega of this kind of computer programming (yes, being vague about "this kind"). After yakking about both ints and floats, it's time to introduce strings, which makes the learning curve go steep like a rocket. So much to do with strings. I got into palindromes, and string reversal. Had to ask if anyone knew about Napoleon. One student did, gave us some history. It's that old "able was I ere I saw elba" back story, purely fictional. I want to talk about Napoleon again soon, in connection with The Turk, the first chess playing automaton (or so Napoleon supposedly thought he was playing, when he lost to it -- if true, that coulda been traumatizing on some level eh?). Before getting to all that stuff about strings though, I was into telling other stories. Guido naming the language after Monty Python (whom most had heard of -- also looked at xkcd) and then getting DARPA funding to write IDLE: a good way to introduce IDLE itself, which we're using. These are Windows XP boxes and IDLE tends to work OK on those. It's a disaster on some versions of Mac though, found that out at STScI. Steve Holden, PSF chairman, is raising this question in the community: is it time to retire IDLE, remove it from the standard library? Does it hurt Python more than help it at this point? Anyway, I like to tell stories. If you ever wanna track down the 52 minutes of me on Blip TV, from the International Room of a Hyatt Regency near O'Hare in Chicago, you'll find me plotting "lore" and "technical" as orthogonal axes, with a kind of "opportunity cost" curve representing finite bandwidth and a freedom to keep varying the mix. Get really technical for awhile, then go back to sharing lore, then gradually add in more skills building... We went on to function defs, which gets into indentation heavy duty -- and the story of how Python is *not* a curly-brace language. I talked about the XO and OLPC, about Sugar, showed a favorite picture. I talked about the downward pressure the XO had exerted in the calculator market, to where now people had these 2- and 3 hundred dollar netbooks, though without the swivel screen the XOs had usually. I'll keep returning to these themes over the next few days I'm pretty sure. We did quite a bit with the arithmetic operators, but so far not an excessive amount. "Using Python as a calculator" (interactively in a shell) seems to be the "out of the box" experience many of us expect to start with. Good segue to Sage I would suppose. One kid went 2**2**2**2**2.. **2 a few times, which quickly maxed out computer memory. Another kid hacked into his laptop at home, ran Python there or some such. This is a school that attracts some of the freakishly gifted and otherwise weird. My job is to keep it all moving right along. Lots of chatter about the C language, which several of these students have tackled already. I brought up APL and J as in some ways "other end of the spectrum" (way alien) so they could appreciate how different computer languages can be. On the other hand, Python and APL have quite a bit in common too (especially when you add in numpy). I talked about Scheme and LISP and how these would have been your languages at MIT if just starting into computer science. Python has joined that list of elite languages (presuming one looks up to MIT, which by this time I've linked to OLPC, so at least there's some credibility there). The function I most wanted to have them define would eat any string and return the same string in reverse. This is fun for playing with palindromes. They'll probably dream about it tonight (I know I will). One kid, who also asked about SSL (secure sockets layer), a 7th grader, found out about "join" just by browsing docs in a hurry (and asked them to shoot for a solution out of the blue). A solution is like: def rev ( s ): mylist = list ( s ) mylist.reverse( ) return "".join(mylist) Having already worked on s.capitalize( ) and s.title( ), both of which return strings while leaving s unchanged (how strings are), coming upon mylist.reverse( ) is a bit of a show stopper. You mean some methods actually change an object "in place"? Change it's state? No copies, no output? No "back up"? That's right. This is one of the things a functional programming purist might most hate about OO in general, Python in particular: there's so much state, and so much changing of state. Some objects return (give birth, remain unaffected), others morph before your eyes. How might any of this be pure logical, versus too messy-biological? My thought on that is OO is aiming to mirror the real world and the real world is messy in this way too. Logical abstraction only gets us so far in the OO model. FP promises to free us of state. The Great Lambda tribe to the north of Python Nation, sees our little iconic lambda, and thinks about rescuing us from ourselves. "Liberate them from state" think our would be rescuers. The final activity was saving lesson1.py containing this rev function into site-packages. We'll pick up with it tomorrow, by the end of which I'm hoping to have crafted a Snake class already, using __rib__ syntax (special names). Getting this bit in pretty early helps clear up some of the mystery as to why dir( object of some type ) keeps dumping lists of names looking __like__ __this__. Doing a snake class with __repr__ and __init__ starts to clear that up. Showing off __add__ and __mul__, maybe as some Integer Modulo N type of object, might even further lift the veil. I talked quite a bit about "dot notation" in general terms, suggested that Python is a great gateway to myriad other languages, in that how it uses dot notation is common to all of them. We imported the random module and started playing with randint, shuffle and choice. One student demanded to know how to reset the seed, but I bravely suggested we'd postpone that discussion, but he was most welcome to study the docs. Kirby From litvin at skylit.com Tue Jul 13 10:31:47 2010 From: litvin at skylit.com (Litvin) Date: Tue, 13 Jul 2010 04:31:47 -0400 Subject: [Edu-sig] class notes (post facto) In-Reply-To: References: Message-ID: <7.0.1.0.2.20100713041545.040028c0@skylit.com> At 01:54 AM 7/13/2010, kirby urner wrote: >You mean some methods actually change an object >"in place"? Change it's state? No copies, no >output? No "back up"? I've found it disconcerting that in Python 3 lst1 += lst2 changes lst1 in place, while lst1 = lst1 + lst2 makes a copy. Gary Litvin www.skylit.com From vceder at canterburyschool.org Wed Jul 14 05:16:56 2010 From: vceder at canterburyschool.org (Vern Ceder) Date: Tue, 13 Jul 2010 23:16:56 -0400 Subject: [Edu-sig] class notes (post facto) In-Reply-To: <7.0.1.0.2.20100713041545.040028c0@skylit.com> References: <7.0.1.0.2.20100713041545.040028c0@skylit.com> Message-ID: <4C3D2C28.9040105@canterburyschool.org> Litvin wrote: > At 01:54 AM 7/13/2010, kirby urner wrote: >> You mean some methods actually change an object >> "in place"? Change it's state? No copies, no >> output? No "back up"? > > I've found it disconcerting that in Python 3 > lst1 += lst2 changes lst1 in place, while > lst1 = lst1 + lst2 makes a copy. Actually this behavior has been in Python since augmented assignments were introduced in version 2.0. The official wording on this (buried in the language reference) is (2.7 version, emphasis mine): "An augmented assignment expression like x += 1 can be rewritten as x = x + 1 to achieve a similar, *but not exactly equal* effect. In the augmented version, x is only evaluated once. Also, when possible, *the actual operation is performed in-place*, meaning that rather than creating a new object and assigning that to the target, the old object is modified instead." It *is* a bit disconcerting, but I can't at the moment think of a likely scenario where it would be a real problem. Cheers, Vern > > Gary Litvin > www.skylit.com > -- This time for sure! -Bullwinkle J. Moose ----------------------------- Vern Ceder, Director of Technology Canterbury School, 3210 Smith Road, Ft Wayne, IN 46804 vceder at canterburyschool.org; 260-436-0746; FAX: 260-436-5137 The Quick Python Book, 2nd Ed - http://bit.ly/bRsWDW From litvin at skylit.com Wed Jul 14 06:39:39 2010 From: litvin at skylit.com (Litvin) Date: Wed, 14 Jul 2010 00:39:39 -0400 Subject: [Edu-sig] class notes (post facto) In-Reply-To: <4C3D2C28.9040105@canterburyschool.org> References: <7.0.1.0.2.20100713041545.040028c0@skylit.com> <4C3D2C28.9040105@canterburyschool.org> Message-ID: <7.0.1.0.2.20100714003643.03fe1da0@skylit.com> At 11:16 PM 7/13/2010, Vern Ceder wrote: Actually this behavior has been in Python since augmented assignments were introduced in version 2.0. The official wording on this (buried in the language reference) is (2.7 version, emphasis mine): Vern, I was comparing Python 3 with 2.5; the latter doesn't seem to do += for lists in place. Gary Litvin From vceder at canterburyschool.org Wed Jul 14 15:26:28 2010 From: vceder at canterburyschool.org (Vern Ceder) Date: Wed, 14 Jul 2010 09:26:28 -0400 Subject: [Edu-sig] class notes (post facto) In-Reply-To: <7.0.1.0.2.20100714003643.03fe1da0@skylit.com> References: <7.0.1.0.2.20100713041545.040028c0@skylit.com> <4C3D2C28.9040105@canterburyschool.org> <7.0.1.0.2.20100714003643.03fe1da0@skylit.com> Message-ID: <4C3DBB04.5030908@canterburyschool.org> Litvin wrote: > At 11:16 PM 7/13/2010, Vern Ceder wrote: > Actually this behavior has been in Python since augmented assignments > were introduced in version 2.0. The official wording on this (buried in > the language reference) is (2.7 version, emphasis mine): > > Vern, > > I was comparing Python 3 with 2.5; the latter doesn't seem to do += for > lists in place. > Gary Litvin > According to the documentation it does. The documentation has pretty much the same wording (see http://docs.python.org/release/2.5/ref/augassign.html). I just tried it with 2.5.2 and I got: Python 2.5.2 (r252:60911, Oct 5 2008, 19:24:49) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a = [1,2] >>> b = [3,4] >>> c = a >>> a += b >>> c [1, 2, 3, 4] >>> So yeah, Python does += in place for all versions starting with 2.0. Cheers, Vern -- This time for sure! -Bullwinkle J. Moose ----------------------------- Vern Ceder, Director of Technology Canterbury School, 3210 Smith Road, Ft Wayne, IN 46804 vceder at canterburyschool.org; 260-436-0746; FAX: 260-436-5137 The Quick Python Book, 2nd Ed - http://bit.ly/bRsWDW From da.ajoy at gmail.com Thu Jul 15 02:02:26 2010 From: da.ajoy at gmail.com (Daniel Ajoy) Date: Wed, 14 Jul 2010 19:02:26 -0500 Subject: [Edu-sig] Directed Graphs data to analyze the World Cup Message-ID: http://www.maths.qmul.ac.uk/~ht/footballgraphs/index.html Daniel From kirby.urner at gmail.com Thu Jul 15 18:24:17 2010 From: kirby.urner at gmail.com (kirby urner) Date: Thu, 15 Jul 2010 09:24:17 -0700 Subject: [Edu-sig] source code from SA:10648 Message-ID: Here is some of the code we will be using in class today. After that, a source code file from yesterday's class: Some Games """ from random import randint, choice # a list of (question, answer) tuples quiz1 = [("What is the capital of Oregon?", "Salem"), ("Is Portland north of Salem?", "Yes"), ("Does I-5 go to Seattle?", "Yes"), ("Does I-5 go to Pendleton?", "No")] quiz2 = [("What is the capital of Washington State","Olympia"), ("Are kangaroos native to China?","No"), ("Who is the president of the USA?", "Obama"), ("What computer language is named for Monty Python?", "Python")] quizzes = [quiz1, quiz2] # list of possible quizzes def askq(quiz = quiz1): score = 0 possible = len(quiz) while len(quiz) > 0: pickone = randint(0, len(quiz)-1) print(quiz[pickone][0]) answer = raw_input("Your answer? ") if answer.upper() == quiz[pickone][1].upper(): # yes and Yes would both count (but not Y) print("Correct!") score = score + 1 else: print("Correct answer was %s" % quiz[pickone][1]) quiz.pop(pickone) print("Your score was %s out of a possible %s" % (score, possible)) def guessing(a=0,b=10): thenumber = randint(a,b) while True: print("I'm thinking of a number between %s and %s, what is it?" % (a,b)) answer = raw_input("Guess (q to quit): ") if answer == "q": print("Thanks for trying, the number was %s" % thenumber) break # escape loop if not answer.isdigit(): # trap non-integer answers print("That's not a number!") continue # loop again answer = int(answer) # convert to integer if answer == thenumber: print("That's it!") break # escape loop elif answer < thenumber: print("Try larger!") elif answer > thenumber: print("Try smaller!") def mainmenu(): while True: print(""" What game would you like to play? 1 Take a Quiz 2 Guess a Number 0 Exit""") sel = raw_input("Your selection? ") if sel == "0": print("OK, Good Bye") break elif sel == "1": # randomly choose a quize askq(choice(quizzes)) elif sel == "2": guessing() else: print("Huh? Please try again") if __name__ == "__main__": # askq(quiz1) # guessing() mainmenu() ======= from random import randint, random, choice allcolors = [color.orange, color.red, color.magenta, color.yellow, color.blue, color.white, color.green] def randcolor(): return (random.random(), random.random(), random.random()) def junk(n=100): for i in range(n): draw = choice(["ball", "box"]) if draw == "ball": manyspheres(1) else: manyboxes(1) def manyboxes(n=100): """ make random boxes.... mybox = box(pos=(x0,y0,z0), length=L, height=H, width=W) """ for i in range(n): thebox = box( pos=(randint(-100,100), randint(-100,100), randint(-100,100)), size = (randint(1, 10),randint(1,10),randint(1,10)) , color = randcolor()) def manyspheres(n=100): for i in range(n): theball = sphere( pos=(randint(-100,100),randint(-100,100),randint(-100,100)), radius = randint(1, 10), color = randcolor()) def xyz(n=10): posx = cylinder(radius = 0.1, pos=(0,0,0), axis = (n,0,0), color = color.white) negx = cylinder(radius = 0.2, pos=(0,0,0), axis = (-n,0,0), color = color.white) posy = cylinder(radius = 0.3, pos=(0,0,0), axis = (0,n,0), color = color.white) negy = cylinder(radius = 0.4, pos=(0,0,0), axis = (0,-n,0), color = color.white) posz = cylinder(radius = 0.5, pos=(0,0,0), axis = (0,0,n), color = color.white) negz = cylinder(radius = 0.6, pos=(0,0,0), axis = (0,0,-n), color = color.white) def circle(): print "Making a circle" theball = sphere(pos=(2,0,0), radius = 1, color = color.red) for i in range(10000): newx = 2 * math.cos(math.radians(i)) newy = 2 * math.sin(math.radians(i)) theball.pos = (newx, newy, 0) rate(30) def clock(): bighand = cylinder(radius = 0.1, pos=(0,0,0), axis = (0,10,0), color = color.green) littlehand = cylinder(radius = 0.1, pos=(0,0,0), axis = (0,5,0), color = color.white) clock = ring(pos=(0,0,0), axis = (0,0,1), radius = 10, color = color.red, thickness = 0.1) for i in range(0, -10000, -1): newx = 10 * math.cos(math.radians(90 + i )) newy = 10 * math.sin(math.radians(90 + i )) bighand.axis = (newx, newy, 0) newx = 5 * math.cos(math.radians(90 + i/12.)) newy = 5 * math.sin(math.radians(90 + i/12.)) littlehand.axis = (newx, newy, 0) rate(30) # student code sent by email from another workstation, # appended and converted into a function (vs. top-level) from visual import * import random window = display(title="Random Sphere", width = 1024, height = 768) window.select() class mysphere(): def __init__(self, my_color, my_pos, my_name, my_radius): mysphere_name = sphere(pos = my_pos, color = my_color, radius = my_radius) def test2(): t = 0 while t < 100000: my_color = random.choice(((255, 255, 255), (255, 255, 0), (255, 0, 0), (255, 0, 255), (0, 255, 255), (0, 0, 255), (255, 0, 0))) my_pos = (random.randrange(-1000, 1000), random.randrange(-1000, 1000), random.randrange(-1000,1000)) my_radius = random.randrange(5, 20) new_mysphere = mysphere(my_color, my_pos, t, my_radius) t += 1 rate(50) if __name__ == "__main__": # test2() junk() # manyboxes() # manyspheres() # xyz() # circle() # clock() From missive at hotmail.com Fri Jul 16 01:20:42 2010 From: missive at hotmail.com (Lee Harr) Date: Fri, 16 Jul 2010 03:50:42 +0430 Subject: [Edu-sig] [ANNC] pynguin-0.9 (python turtle graphics application) Message-ID: Pynguin is a python-based turtle graphics application. ??? It combines an editor, interactive interpreter, and ??? graphics display area. It is meant to be an easy environment for introducing ??? some programming concepts to beginning programmers. http://pynguin.googlecode.com/ This release has focused on improvements to usabilty and ??? user-friendliness, with much input and many reports ??? from actual users. Thanks Alec! There is a huge list ??? of bug fixes and new features. Pynguin is tested with Python 2.6.5 and PyQt 4.7.2 and ??? will use Pygments syntax highlighting if available. Pynguin is released under GPLv3. Changes in pynguin-0.9: ??? Pynguin API ??????? - added pythonic accessors for .x .y and .heading ??????? - added methods for getting heading: xyh() and h() ??????? - added promote() method to change which pynguin is primary ??????? - added remove() to get rid of unneeded pynguins ??????????? - also enables removing pynguin, but keeping its drawing ??????????? - added reap() method to remove all other pynguins and ??????????????? take charge of all their drawings at once ??????? - made turnto() instant, like goto() ??????? - plain reset() now only affects single pynguin ??????????? - restores as much as possible to initial state ??????????? - use reset(True) or reset(full=True) for complete reset ??????? - square() is now built in ??????? - added avatar() to access setImageid() more reliably ??????? - changed onclick() API slightly ??????????? - updated onclick examples and added new examples ??? Canvas ??????? - added ability to zoom and pan the canvas ??????? - added ability to track pynguin if it draws off the screen ??????? - pynguins can now be dragged in to position ??????? - now passes mouse clicks to all pynguins ??? Integrated Editor ??????? - fixed problem with editor undo entries being lost ??????? - better recognition of when document has actually been modified ??????? - automatically strips prompts when pasting to code editor ??????? - allow changing font size and word wrapping in editor ??????? - fixed tabifying/untabifying selection in editor ??? Integrated Console ??????? - fixed copying from console area (shortcut and context menu) ??????? - KeyboardInterrupt is now quiet by default ??????? - fixed tab/backtab in console area ??????? - added keyboard shortcuts for scrolling in console ??????? - added ctrl-d shortcut for exiting when typing in console ??? General ??????? - added periodic automatic saving ??????? - better control-c handling ??????????? - code that never uses Pynguin methods can now be stopped ??????????? - limits print rate to keep console responsive ??????????? - fixed prompt alignment after ctrl-c on non-function code ??????? - made .png default export and improved error message on failure ??????? - now allows unicode in code area and console ??????? - added command line switch to enable debugging ??????? - added Save As, New, and Open shortcuts _________________________________________________________________ Hotmail: Trusted email with powerful SPAM protection. https://signup.live.com/signup.aspx?id=60969 From kirby.urner at gmail.com Fri Jul 16 04:10:12 2010 From: kirby.urner at gmail.com (kirby urner) Date: Thu, 15 Jul 2010 19:10:12 -0700 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: Message-ID: On Thu, Jul 15, 2010 at 9:24 AM, kirby urner wrote: > Here is some of the code we will be using in class today. After that, > a source code file from yesterday's class: > > > Some Games > """ > > from random import randint, choice > > # a list of (question, answer) tuples > quiz1 = [("What is the capital of Oregon?", "Salem"), > ("Is Portland north of Salem?", "Yes"), > ("Does I-5 go to Seattle?", "Yes"), > ("Does I-5 go to Pendleton?", "No")] > > quiz2 = [("What is the capital of Washington State","Olympia"), > ("Are kangaroos native to China?","No"), > ("Who is the president of the USA?", "Obama"), > ("What computer language is named for Monty Python?", "Python")] > > quizzes = [quiz1, quiz2] # list of possible quizzes > > def askq(quiz = quiz1): > score = 0 > possible = len(quiz) > while len(quiz) > 0: > pickone = randint(0, len(quiz)-1) > print(quiz[pickone][0]) > answer = raw_input("Your answer? ") > > if answer.upper() == quiz[pickone][1].upper(): > # yes and Yes would both count (but not Y) > print("Correct!") > score = score + 1 > else: > print("Correct answer was %s" % quiz[pickone][1]) > > quiz.pop(pickone) > > print("Your score was %s out of a possible %s" % (score, possible)) > > So there's a not-so-subtle bug in the above loop, in that the quiz.pop method exhausts the target list -- forever and for good, so that next time you run the quiz, either quiz1 or quiz2 (both global variables) will have been commended to the ether. As a class exercise, I was encouraging students to use this scaffolding to think of other quizzes and add them as quiz3, quiz4 etc. Note that the menu loop picks one at random: elif sel == "1": # randomly choose a quiz askq(choice(quizzes)) So the chances are good that one will get an empty quiz (list of (Q,A) tuples). The program doesn't crash, but you get a score of 0 out of a possible 0. The remedy, one of them, is just to use a copy of the list internally. At this point, a student discussed his travails wanting to copy a dictionary, after getting bit in the butt by the "multiple references to same object" feature. He'd discovered the copy module on his own. However in this case, with a list, I went with thelist[:] way of doing it. Here's the remedied function: def askq(quiz = quiz1): score = 0 possible = len(quiz) thequiz = quiz[:] # from hence forth, use thequiz, leave quiz alone while len(quiz) > 0: pickone = randint(0, len(quiz)-1) print(thequiz[pickone][0]) answer = raw_input("Your answer? ") if answer.upper() == quiz[pickone][1].upper(): # yes and Yes would both count (but not Y) print("Correct!") score = score + 1 else: print("Correct answer was %s" % quiz[pickone][1]) thequiz.pop(pickone) print("Your score was %s out of a possible %s" % (score, possible)) Now of course it's problematic to be popping off a list just because you wanna not hit the same question twice, and are picking questions randomly. Sure, this is one way to prevent duplicates. Even the while loop is pegged to the list length. Didn't have to be this way. Just as good if not way better, is to shuffle the indexes ahead of time e.g. indexes = range(len(thelist)); indexes.shuffle(). That'll give you a random sequence on a "primary key" with no need to mess with popping data off a list copy. Remember that in Python 3.x, range no longer returns a list but a range object, a kind of iterable, but not an iterator (you can't run next on it): >>> indexes = range(20) >>> indexes range(0, 20) Some older Python...? >>> indexes.next() Traceback (most recent call last): File "", line 1, in indexes.next() AttributeError: 'range' object has no attribute 'next' However, next(indexes) is still no good, because an iterator needn't be nextable: >>> next(indexes) Traceback (most recent call last): File "", line 1, in next(indexes) TypeError: range object is not an iterator OK, make us an iterator then: >>> theiter = iter(indexes) >>> next(theiter) 0 >>> next(theiter) 1 Now we're in business. Start over if we like: >>> theiter = iter(indexes) >>> next(theiter) 0 You can have lots of iterators off the same iterable and they'll iterate independently... >>> [next((theiterA, theiterB)[randint(0,1)]) for x in range(10)] [0, 1, 2, 1, 2, 3, 4, 3, 4, 5] >>> next(theiterA) 5 >>> next(theiterB) 6 >>> next(theiterA) 6 >>> You can't shuffle an iterator though: >>> theiter = iter(indexes) >>> shuffle(theiter) Traceback (most recent call last): File "", line 1, in shuffle(theiter) File "C:\Python31\lib\random.py", line 267, in shuffle for i in reversed(range(1, len(x))): TypeError: object of type 'range_iterator' has no len() >>> So before using shuffle, you need to turn this range object into a list. >>> from random import shuffle >>> help(shuffle) Help on method shuffle in module random: shuffle(self, x, random=None, int=) method of random.Random instance x, random=random.random -> shuffle list x in place; return None. Optional arg random is a 0-argument function returning a random float in [0.0, 1.0); by default, the standard random.random. >>> shuffle(indexes) Traceback (most recent call last): File "", line 1, in shuffle(indexes) File "C:\Python31\lib\random.py", line 270, in shuffle x[i], x[j] = x[j], x[i] TypeError: 'range' object does not support item assignment >>> indexes = list(range(20)) >>> shuffle(indexes) >>> indexes [11, 3, 16, 2, 4, 13, 17, 9, 19, 1, 12, 8, 10, 14, 18, 15, 0, 5, 7, 6] Or is there something we wanna to check out in itertools? Permutation? Nah, we're done. Kirby Note: more genteel writers may prefer indices to indexes. I also prefer vertexes to vertices. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mark.engelberg at gmail.com Fri Jul 16 04:26:53 2010 From: mark.engelberg at gmail.com (Mark Engelberg) Date: Thu, 15 Jul 2010 19:26:53 -0700 Subject: [Edu-sig] class notes (post facto) In-Reply-To: References: Message-ID: On Mon, Jul 12, 2010 at 10:54 PM, kirby urner wrote: > FP promises to free us of state. The Great Lambda > tribe to the north of Python Nation, sees our little > iconic lambda, and thinks about rescuing us from > ourselves. "Liberate them from state" think our > would be rescuers. This bit cracked me up. I definitely see a bit of myself in that parody. I've been heavily influenced by the essays and presentations by Rich Hickey: http://clojure.org/state http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey so now I mostly perceive OO as a land in which people are woefully confused about the distinction between identity and state, because their languages don't allow them to make a distinction. Thinking along these lines, your story could be extended as follows: Rich from the Great Lambda tribe was visiting his friend Guido down in Python Nation. At the end of his vacation, he pulled out his camera to take a photo of Guido as a memento. Guido shook his head, "Cameras don't work properly here. You can't take a snapshot of me, it won't work." "Why won't it work?" asked Rich. "Because the photo will continue to change as I change. Tomorrow, if I grow a beard, your photo will show me with a beard. If I get sick or die, your photo will disintegrate." "So what do I do if I want to remember you as you are now?" "Hmmm," thought Guido, scratching his chin. "I suppose you could make a clone of me and take the clone back with you." "But the clone isn't really a snapshot of you," retorted Rich. "It's another living, changing being with its own identity, and it will continue to have its own experiences and diverge from you over time." "Well, maybe you could keep my clone in a dark closet, and isolate him from having any new experiences...." Rich returned home to the Great Lambda tribe, and told everyone about the absurd state of affairs in Python Nation. Everyone had a good laugh, followed by a sense of pity for their oppressed neighbors. But the Great Lambda tribe knows it would be fruitless to launch a full-scale liberation mission -- the population of Python Nation wouldn't know what to do if liberated from their state oppressor. For now, the Great Lambda tribe has decided that the best course of action is to make frequent flyovers in propaganda-loaded planes, dropping educational pamphlets which enlighten the populace about the freedom that exists in other parts of the globe. :) From tim.peters at gmail.com Fri Jul 16 04:37:28 2010 From: tim.peters at gmail.com (Tim Peters) Date: Thu, 15 Jul 2010 22:37:28 -0400 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: Message-ID: [kirby urner] ... > Here's the remedied function: > def askq(quiz = quiz1): > ?? ?score = 0 > ?? ?possible = len(quiz) > ?? ?thequiz = quiz[:] ?# from hence forth, use thequiz, leave quiz alone > > ?? ?while len(quiz) > 0: > ?? ? ? ?pickone = randint(0, len(quiz)-1) > ... > ?? ? ? ?thequiz.pop(pickone) You're working too hard ;-) > Now of course it's problematic to be popping off a list just because > you wanna not hit the same question twice, and are picking > questions randomly. ?Sure, this is one way to prevent duplicates. > Even the while loop is pegged to the list length. ?Didn't have to > be this way. > Just as good if not way better, is to shuffle the indexes?ahead > of time e.g. indexes = range(len(thelist)); indexes.shuffle(). > That'll give you a random sequence on a "primary key" with no > need to mess with popping data off a list copy. Still working too hard ;-) Why not shuffle the quiz guts directly? def askq(quiz = quiz1): thequiz = quiz[:] # from hence forth, use thequiz, leave quiz alone shuffle(thequiz) for q, a in thequiz: # marches over the questions in a random order # `q` is the question, `a` is the answer In fact, if you don't mind permuting the quiz each time, there's no need to make a copy of the quiz then either (because nothing is ever removed from it): def askq(quiz = quiz1): shuffle(quiz) for q, a in quiz: # marches over the questions in a random order # `q` is the question, `a` is the answer From kirby.urner at gmail.com Fri Jul 16 06:48:53 2010 From: kirby.urner at gmail.com (kirby urner) Date: Thu, 15 Jul 2010 21:48:53 -0700 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: Message-ID: On Thu, Jul 15, 2010 at 7:37 PM, Tim Peters wrote: << snip >> > In fact, if you don't mind permuting the quiz each time, there's no > need to make a copy of the quiz then either (because nothing is ever > removed from it): > > def askq(quiz = quiz1): > ? ? shuffle(quiz) > ? ? for q, a in quiz: ? ?# marches over the questions in a random order > ? ? ? ? # `q` is the question, `a` is the answer Yep, Tim's way is so much more Pythonic. Here's a new version for tomorrow's class: def askq2(quiz = quiz1): score = 0 possible = len(quiz) shuffle(quiz) for question, answer in quiz: print(question) user_answer = raw_input("Your answer? ") if user_answer.upper() == answer.upper(): # yes and Yes would both count (but not Y) print("Correct!") score = score + 1 else: print("Correct answer was %s" % answer) print("Your score was %s out of a possible %s" % (score, possible)) Onward! Kirby From jjposner at optimum.net Fri Jul 16 15:17:07 2010 From: jjposner at optimum.net (John Posner) Date: Fri, 16 Jul 2010 09:17:07 -0400 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: Message-ID: <4C405BD3.7020104@optimum.net> Kirby wrote: > for question, answer in quiz: > print(question) > user_answer = raw_input("Your answer? ") > Kirby, will the class be using Py2 or Py3? It looks like you're mix-and-matching, using the *print* function (Py3) along with the *raw_input* function (Py2). Do you really want to inflict "from __future__ import print_function" on your students? Best, John From kirby.urner at gmail.com Fri Jul 16 15:59:59 2010 From: kirby.urner at gmail.com (kirby urner) Date: Fri, 16 Jul 2010 06:59:59 -0700 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: <4C405BD3.7020104@optimum.net> References: <4C405BD3.7020104@optimum.net> Message-ID: Good question John. My lengthy post was confusing because I want on the riff about how range() doesn't return a list in 3.x (but a range object, iterable but not an iterator). In point of fact, I'm using Python 2.6 from start to finish in this class, with only allusions and honorable mentions of 3.x features. Using print as a function is optional in 2.6 without importing anything special. Here we are: >>> import sys >>> sys.version '2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)]' >>> "{0}".format(1) '1' >>> print(1) 1 I'm actually forgetting what we might need to import anymore, to make 2.6 behave like 3.x, when it comes to print and string formatting. Kirby On Fri, Jul 16, 2010 at 6:17 AM, John Posner wrote: > Kirby wrote: > >> ? ? for question, answer in quiz: >> ? ? ? ? print(question) >> ? ? ? ? user_answer = raw_input("Your answer? ") >> > > Kirby, will the class be using Py2 or Py3? It looks like you're > mix-and-matching, using the *print* function (Py3) along with the > *raw_input* function (Py2). Do you really want to inflict "from __future__ > import print_function" on your students? > > Best, > John > > From tim.peters at gmail.com Fri Jul 16 16:27:37 2010 From: tim.peters at gmail.com (Tim Peters) Date: Fri, 16 Jul 2010 10:27:37 -0400 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: <4C405BD3.7020104@optimum.net> Message-ID: [kirby] > ... > ?Using print as a function is optional in 2.6 without > importing anything special. Nope! `print` is a statement in all 1.x and 2.x versions of Python. When you do, say, print(1) before Python 3.x, you're not calling a print function with an argument of 1, you're giving the expression (1) to the print statement. (1) is the same thing as 1, so it just prints "1". Maybe the difference is clearer here: print(1,2,3) Before 3.x, tjat's the same as _x = (1, 2, 3) print _x That is, it's not passing arguments 1, 2 and 3 to a print function, it's giving a single expression - the 3-tuple (1, 2, 3) - to the print statement - and is very different from print 1, 2, 3 (which gives 3 expressions - not just 1 - to the print statement). It's really the same as doing, e.g., return(1) `return` and `print` are statements, and tacking "(1)" on does not magically turn either into a function call, it's just adding redundant parentheses to the expression "1". From kirby.urner at gmail.com Fri Jul 16 16:43:12 2010 From: kirby.urner at gmail.com (kirby urner) Date: Fri, 16 Jul 2010 07:43:12 -0700 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: <4C405BD3.7020104@optimum.net> Message-ID: On Fri, Jul 16, 2010 at 7:27 AM, Tim Peters wrote: > [kirby] >> ... >> ?Using print as a function is optional in 2.6 without >> importing anything special. > > Nope! ?`print` is a statement in all 1.x and 2.x versions of Python. > When you do, say, > > ? ?print(1) > Ouch, thank you for clearing up a basic confusion Tim! I knew this only a month ago when I *did* use from __future__ import print_function in another Python 2.6 class, but in the fog of battle was lapsing into a more punch drunk state. I could feel when I was writing that last post that I was saying something wrong. But what? I'm glad to be performing in the role of "dunce clown" here -- somebody's gotta do it (?), might as well be me. While I'm being in this mode, here's another basic question. Is there a way, after importing from __future__, to revert to the "old ways" later on in the same script? Here was my (failed) experiment along those lines: >>> 1/2 0 >>> from __future__ import division >>> 1/2 0.5 >>> del division >>> 1/2 0.5 >>> division Traceback (most recent call last): File "", line 1, in division NameError: name 'division' is not defined >>> from __future__ import division >>> division _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192) I'm not saying this would ever be a good idea, just wondering about possibilities... Kirby > before Python 3.x, you're not calling a print function with an > argument of 1, you're giving the expression (1) to the print > statement. ?(1) is the same thing as 1, so it just prints "1". > > Maybe the difference is clearer here: > > ? ?print(1,2,3) > > Before 3.x, tjat's the same as > > ? ?_x = (1, 2, 3) > ? ?print _x > > That is, it's not passing arguments 1, 2 and 3 to a print function, > it's giving a single expression - the 3-tuple (1, 2, 3) - to the print > statement - and is very different from > > ? ?print 1, 2, 3 > > (which gives 3 expressions - not just 1 - to the print statement). > > It's really the same as doing, e.g., > > ? ?return(1) > > `return` and `print` are statements, and tacking "(1)" on does not > magically turn either into a function call, it's just adding redundant > parentheses to the expression "1". > _______________________________________________ > Edu-sig mailing list > Edu-sig at python.org > http://mail.python.org/mailman/listinfo/edu-sig > From jjposner at optimum.net Fri Jul 16 18:31:44 2010 From: jjposner at optimum.net (John Posner) Date: Fri, 16 Jul 2010 12:31:44 -0400 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: <4C405BD3.7020104@optimum.net> Message-ID: <4C408970.2040206@optimum.net> On 7/16/2010 9:59 AM, kirby urner wrote: > ... Using print as a function is optional in 2.6 without > importing anything special. > Kirby, I believe you're confusing these two invocations: * Using the print *statement* with a single argument (or expression) enclosed in parentheses. * Using the print *function* with a single argument Using multiple arguments clears things up: > python Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print 1,2,3,4 # statement with multiple arguments 1 2 3 4 >>> print(1,2,3,4) # statement with a single argument (a 4-tuple) (1, 2, 3, 4) >>> from __future__ import print_function >>> print(1,2,3,4) # function with multiple arguments 1 2 3 4 -John P.S. The fact that the keyword "print" doesn't require a trailing SPACE reminds me of the old DOS documentation for the command that changes to the root directory: cd\ That caused a lot of needless confusion! From kirby.urner at gmail.com Fri Jul 16 22:41:44 2010 From: kirby.urner at gmail.com (kirby urner) Date: Fri, 16 Jul 2010 13:41:44 -0700 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: <4C408970.2040206@optimum.net> References: <4C405BD3.7020104@optimum.net> <4C408970.2040206@optimum.net> Message-ID: On Fri, Jul 16, 2010 at 9:31 AM, John Posner wrote: > On 7/16/2010 9:59 AM, kirby urner wrote: >> >> ... ?Using print as a function is optional in 2.6 without >> importing anything special. >> > > Kirby, I believe you're confusing these two invocations: > Yes, you're correct, that's precisely what I was doing. > * Using the print *statement* with a single argument (or expression) > enclosed in parentheses. > > * Using the print *function* with a single argument > > Using multiple arguments clears things up: I'm glad we're touching on this at length, as people flooding into our pool find themselves waste deep with backward / forward compatibility issues, and may fall for the same self-deception I did for a moment. For another response, see: http://mail.python.org/pipermail/edu-sig/2010-July/010040.html Our class concluded today, although I still have some paperwork to send in, will do that in a few minutes. I've got an initial blog write-up here, planning another follow-up post likely later today, also uploading to Photostream. Today we talked about RSA a lot, played my silly Google video, a rambling blather through group theory etc. (8+ mins). We also wrote generators for cuboctahedral numbers and Fibonacci's, both times going of Encyclo- pedia for Integer Sequences. If that sounds like a total geek out, it was. Also screened two cartoons. One student got file sharing to work between his hosting and guest operating systems on VirtualBox. Another got his random forest of cylinder/cone VPython objects to work. I lectured at quite some length on the history of the Internet as a succession of protocols, though I was somewhat vague on the sequence: smtp, nntp, ftp, http... whatever (this was before screening 'Warriors of the Net', one of the two cartoons). I'll return to post a link to my followup post. Kirby Urner 4dsolutions.net/ocn/cp4e.html From kirby.urner at gmail.com Tue Jul 20 00:15:40 2010 From: kirby.urner at gmail.com (kirby urner) Date: Mon, 19 Jul 2010 15:15:40 -0700 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: <4C405BD3.7020104@optimum.net> <4C408970.2040206@optimum.net> Message-ID: On Fri, Jul 16, 2010 at 1:41 PM, kirby urner wrote: > > I'll return to post a link to my followup post. > So here are my two write-ups of the just completed Programming in Python (SA:10648): http://worldgame.blogspot.com/2010/07/teaching-again.html http://worldgame.blogspot.com/2010/07/finish-line.html Also, the math teachers on math-teach @ Math Forum are starting to ramp up again, on the whole idea of pre-college computer science or digital / discrete math or whatever we call it: Here's a link to the?thread (public archive). http://mathforum.org/kb/thread.jspa?threadID=2095707&tstart=0 You'll see me weighing in?with my familiar (to some here) views, but also expressing?this new angst about IDLE. Excerpts: """ Steve Holden, chairman of the Python Software Foundation, has been suggesting the it may be time to retire IDLE, removing it from the standard distro. Indeed, on Ubuntu I'm pretty sure one needs to install it separately... """ """ When learning programming for the first time, you can dive into object oriented thinking right away, because this style of thinking was modeled on ordinary human grammar. noun.verb( ) and noun.adjective correspond to things (nouns) having behaviors and attributes (what could be more natural)? """ I talk about some of my history lobbying for a new discrete math course here -- how I first become aware of the Litvins text (at a planning workshop with Chris Brooks just about one year ago): """ For those new to this list, I've been putting myself out there as a kind of lobbyist trying to get something called computational, digital, discrete and/or fill-in-the-blank math that is for-credit in equal measure with any of the pre-calc or calc track classes. I've done a lot of writing about this, describing my network and our political tactics. I won't go into all that again here. """ http://mathforum.org/kb/thread.jspa?threadID=2095937 Kirby > > Kirby Urner > 4dsolutions.net/ocn/cp4e.html From kirby.urner at gmail.com Tue Jul 20 00:30:35 2010 From: kirby.urner at gmail.com (kirby urner) Date: Mon, 19 Jul 2010 15:30:35 -0700 Subject: [Edu-sig] open source admin in academia? (editorial) Message-ID: I'm becoming more aware of the fact that one reason universities need to charge those tuitions is to pay licensing fees to private vendors who provide them with such basic services as the ability to store and schedule classes, record student enrollment and grades, record instructors etc. The catalog needs to be published on-line. There might be a lot of extended education options, e.g. non-credit courses open to anyone willing to sign up. Some of these proprietary programs are pretty old, lack features departments need, and so various intermediating applications grow up around the edges to fill in the gaps. Maybe the big dino system doesn't record student evaluations for example, or keep track of which courses are in the pipeline, but still haven't found a place in the sun. One would think that universities in particular, which pride themselves on having advanced knowledge of state of the art skills, would band together in various consortia to pool resources and "eat their own dog food" as it were. A school that teaches medicine actually practices medicine (the "teaching hospital"). Shouldn't schools that teach computer science and business administration actually walk the talk in some way? Maybe many of them do, I don't actually know. To outsource something so core to one's business, to pay licensing fees while not having the power to make design modifications, just seems more than a tad on the ironic side. It's like a bank outsourcing everything it does around money. I realize not every college or university wants to reinvent the wheel around something so basic, but I do wonder to what extent there's some open source sharing going on, around these core utilities. Are universities so competitive they won't share? So does that mean they all pay the same licensing fees to use the same private vendor offerings? I remember Zope / Plone and SchoolTool. http://en.wikipedia.org/wiki/SchoolTool Is there something even more comprehensive that's out there, suitable for college and university use? Does it come in modularized components? Is it an over-the-web database? Or do few if any universities really eat their own dog food? Like I say, I'm new to this business, just trying to get oriented. Kirby From echerlin at gmail.com Tue Jul 20 02:29:57 2010 From: echerlin at gmail.com (Edward Cherlin) Date: Mon, 19 Jul 2010 20:29:57 -0400 Subject: [Edu-sig] open source admin in academia? (editorial) In-Reply-To: References: Message-ID: It frequently happens that the Computer Science Dept. uses Free Software for almost everything, and everybody else uses proprietary software. CS can't talk to the others effectively, because they are "just geeks". I have more hope for elementary schools. There are exceptions, such as Moodle. On Mon, Jul 19, 2010 at 18:30, kirby urner wrote: > I'm becoming more aware of the fact that one > reason universities need to charge those > tuitions is to pay licensing fees to private > vendors who provide them with such basic > services as the ability to store and schedule > classes, record student enrollment and grades, > record instructors etc. ?The catalog needs to > be published on-line. ?There might be a lot > of extended education options, e.g. non-credit > courses open to anyone willing to sign up. > > Some of these proprietary programs are pretty > old, lack features departments need, and so > various intermediating applications grow up > around the edges to fill in the gaps. > > Maybe the big dino system doesn't record > student evaluations for example, or keep track > of which courses are in the pipeline, but still > haven't found a place in the sun. > > One would think that universities in particular, > which pride themselves on having advanced > knowledge of state of the art skills, would band > together in various consortia to pool resources > and "eat their own dog food" as it were. ?A > school that teaches medicine actually practices > medicine (the "teaching hospital"). ?Shouldn't > schools that teach computer science and > business administration actually walk the talk > in some way? ?Maybe many of them do, I don't > actually know. > > To outsource something so core to one's business, > to pay licensing fees while not having the power > to make design modifications, just seems more > than a tad on the ironic side. ?It's like a bank > outsourcing everything it does around money. > > I realize not every college or university wants to > reinvent the wheel around something so basic, > but I do wonder to what extent there's some > open source sharing going on, around these core > utilities. ?Are universities so competitive they > won't share? ?So does that mean they all pay > the same licensing fees to use the same > private vendor offerings? > > I remember Zope / Plone and SchoolTool. > http://en.wikipedia.org/wiki/SchoolTool > > Is there something even more comprehensive > that's out there, suitable for college and university > use? ?Does it come in modularized components? > Is it an over-the-web database? > > Or do few if any universities really eat their own > dog food? > > Like I say, I'm new to this business, just trying > to get oriented. > > Kirby > _______________________________________________ > Edu-sig mailing list > Edu-sig at python.org > http://mail.python.org/mailman/listinfo/edu-sig > -- Edward Mokurai (??/???????????????/????????????? ?) Cherlin Silent Thunder is my name, and Children are my nation. The Cosmos is my dwelling place, the Truth my destination. http://www.earthtreasury.org/ From tim.peters at gmail.com Tue Jul 20 03:55:27 2010 From: tim.peters at gmail.com (Tim Peters) Date: Mon, 19 Jul 2010 21:55:27 -0400 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: <4C405BD3.7020104@optimum.net> Message-ID: [kirby urner] > ... here's another basic > question. ?Is there a way, after importing from __future__, > to revert to the "old ways" later on in the same script? > ... > I'm not saying this would ever be a good idea, just > wondering about possibilities... In general it's not possible. At least CPython compiles an entire file into bytecode before anything is executed. That's why __future__ imports have to be the first non-trivial statements in a file: they can change just about anything, including the bytecode that gets generated. For example, here's a little program: def f(): print x / y import dis dis.dis(f) That defines a tiny function, then displays the bytecode generated: 2 0 LOAD_GLOBAL 0 (x) 3 LOAD_GLOBAL 1 (y) 6 BINARY_DIVIDE 7 PRINT_ITEM 8 PRINT_NEWLINE 9 LOAD_CONST 0 (None) 12 RETURN_VALUE It's not necessary to know what any of those mean, although they should be pretty obvious ;-) If you change the program by putting: from __future__ import division at the top, the output changes: 4 0 LOAD_GLOBAL 0 (x) 3 LOAD_GLOBAL 1 (y) 6 BINARY_TRUE_DIVIDE 7 PRINT_ITEM 8 PRINT_NEWLINE 9 LOAD_CONST 0 (None) 12 RETURN_VALUE Note that the third operation changed, from BINARY_DIVIDE to BINARY_TRUE_DIVIDE. This is all done before anything in the file is executed, so after execution begins it's too late to change any of it: the opcode will remain whatever was generated at the start (BINARY_DIVIDE or BINARY_TRUE_DIVIDE) no matter what you do while the program is running. After all, the instant after you import the future, it becomes the past, and nobody can change the past ;-) From kirby.urner at gmail.com Tue Jul 20 05:44:17 2010 From: kirby.urner at gmail.com (kirby urner) Date: Mon, 19 Jul 2010 20:44:17 -0700 Subject: [Edu-sig] open source admin in academia? (editorial) In-Reply-To: References: Message-ID: On Mon, Jul 19, 2010 at 5:29 PM, Edward Cherlin wrote: > > It frequently happens that the Computer Science Dept. uses Free > Software for almost everything, and everybody else uses proprietary > software. CS can't talk to the others effectively, because they are > "just geeks". I have more hope for elementary schools. > Yes, I understand. Actually I suppose my query has two components, one having to do with the self sufficiency of educational institutions when it comes to the core software needed to run their operations... and the other having?to do with free and open source software, which is one way communities band together collaboratively, in order to co-develop?said core software. Like maybe MIT has some big programs for scheduling courses, registering students, keeping info on financial aid / scholarships, and publishing the catalog, all of which was developed in-house over?many iterations -- but none of these applications have been released under?GNU or other open source license. In that case, MIT would be self?sufficient by criterion (a), but is not in?the business of helping?other schools ramp up using customized?versions of said?FOSS software (b). ?Maybe it's too site?specific? MIT's in-house solutions might use?open source (e.g. Python) but the solutions themselves are?the closely guarded secrets of MIT?(likewise a private company or?government agency, like Industrial Light and Magic, or NASA,?might use Python but not see any reason to share code). This is all familiar ground by now -- we're all aware of?these distinctions. I'm just thinking back to all those OSCON talks by R0ml Lefkowitz and others, connecting FOSS practices and ethics to the culture of the liberal arts. If FOSS is about empowering and enabling local control, then why would any self-respecting academy want to outsource its core functions? What kind of message does that send? One could imagine that big strong?universities would be somewhat self-sufficient, semi-autonomous, when it came to managing their own admin internals. ?Do we have some well known examples? Having the?system completely open for tweaking to those on the premises potentially means faster?evolution, more expression of the human imagination,?a tighter coupling between theory and practice, drawing?board and realized features. ?Schools could develop a reputation for the ingenuity of their internal applications, which might also help students coordinate their own schedules, promote events, submit work etc. Teachers would have access to multiple resources as well, including tools no one has thought of yet... Beyond that, it means a culture that knows first hand about collaborating on large projects, complete with version control, division of responsibilities and all the rest of it. Shouldn't universities be centers of innovation, starting with the bread and butter applications that define their institutional relationships? I remember a panel discussion I attended at a previous OSCON, about open source in Africa. The institutions in that picture were quite keen to do as much of their own programming as possible, as the whole point was to develop the skills and understanding needed for self sufficiency. Licensing fees can be a huge drain, and are in principal avoidable in this day and age, given sufficient commitment to local control. I also remember CERN having some conference scheduling software the EuroPython tried to repurpose for some context outside CERN, and how frustrating that was. Not every inhouse tool is equally adaptable. Similar question on Slashdot, re FLOSS conference management software: http://ask.slashdot.org/article.pl?sid=05/07/02/1954247 > > There are exceptions, such as Moodle. > I suppose the argument could be made that universities charged with teaching just don't have the time and resources to compete with private industry, when it comes to developing software for production use, bug?free enough to entrust with student records and finances. However, given how Linux, FreeBSD and GNU got off the ground, you'd think there'd be a ready-made culture of developers here, at least in some schools. Add the open source ethic and model for sharing, and one wonders why there's not already a lot of free and open solutions out there -- like frameworks. Here's something obscure that's at least in the ballpark: http://tinyurl.com/2dpr6eb """ This paper describes a WAP-based course registration system designed and implemented to facilitating the process of students' registration at Bahrain University. The framework will support many opportunities for applying WAP based technology to many services such as wireless commerce, cashless payment? and location-based services. ...so is Bahrain University somewhat self sufficient when it comes to admin software? Kirby > > On Mon, Jul 19, 2010 at 18:30, kirby urner wrote: > > I'm becoming more aware of the fact that one > > reason universities need to charge those > > tuitions is to pay licensing fees to private > > vendors who provide them with such basic > > services as the ability to store and schedule > > classes, record student enrollment and grades, > > record instructors etc. ?The catalog needs to > > be published on-line. ?There might be a lot > > of extended education options, e.g. non-credit > > courses open to anyone willing to sign up. > > > > Some of these proprietary programs are pretty > > old, lack features departments need, and so > > various intermediating applications grow up > > around the edges to fill in the gaps. > > > > Maybe the big dino system doesn't record > > student evaluations for example, or keep track > > of which courses are in the pipeline, but still > > haven't found a place in the sun. > > > > One would think that universities in particular, > > which pride themselves on having advanced > > knowledge of state of the art skills, would band > > together in various consortia to pool resources > > and "eat their own dog food" as it were. ?A > > school that teaches medicine actually practices > > medicine (the "teaching hospital"). ?Shouldn't > > schools that teach computer science and > > business administration actually walk the talk > > in some way? ?Maybe many of them do, I don't > > actually know. > > > > To outsource something so core to one's business, > > to pay licensing fees while not having the power > > to make design modifications, just seems more > > than a tad on the ironic side. ?It's like a bank > > outsourcing everything it does around money. > > > > I realize not every college or university wants to > > reinvent the wheel around something so basic, > > but I do wonder to what extent there's some > > open source sharing going on, around these core > > utilities. ?Are universities so competitive they > > won't share? ?So does that mean they all pay > > the same licensing fees to use the same > > private vendor offerings? > > > > I remember Zope / Plone and SchoolTool. > > http://en.wikipedia.org/wiki/SchoolTool > > > > Is there something even more comprehensive > > that's out there, suitable for college and university > > use? ?Does it come in modularized components? > > Is it an over-the-web database? > > > > Or do few if any universities really eat their own > > dog food? > > > > Like I say, I'm new to this business, just trying > > to get oriented. > > > > Kirby > > _______________________________________________ > > Edu-sig mailing list > > Edu-sig at python.org > > http://mail.python.org/mailman/listinfo/edu-sig > > > > > > -- > Edward Mokurai (??/???????????????/????????????? ?) Cherlin > Silent Thunder is my name, and Children are my nation. > The Cosmos is my dwelling place, the Truth my destination. > http://www.earthtreasury.org/ From echerlin at gmail.com Tue Jul 20 06:53:29 2010 From: echerlin at gmail.com (Edward Cherlin) Date: Tue, 20 Jul 2010 00:53:29 -0400 Subject: [Edu-sig] Directed Graphs data to analyze the World Cup In-Reply-To: References: Message-ID: I think that learning to analyze sports statistics is the best possible introduction to the math, which can then be applied to politics. That plus poker was Nate Silver's path to starting FiveThirtyEight.com. On Wed, Jul 14, 2010 at 20:02, Daniel Ajoy wrote: > http://www.maths.qmul.ac.uk/~ht/footballgraphs/index.html > > Daniel > > _______________________________________________ > Edu-sig mailing list > Edu-sig at python.org > http://mail.python.org/mailman/listinfo/edu-sig > -- Edward Mokurai (??/???????????????/????????????? ?) Cherlin Silent Thunder is my name, and Children are my nation. The Cosmos is my dwelling place, the Truth my destination. http://www.earthtreasury.org/ From kirby.urner at gmail.com Tue Jul 20 07:00:02 2010 From: kirby.urner at gmail.com (kirby urner) Date: Mon, 19 Jul 2010 22:00:02 -0700 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: <4C405BD3.7020104@optimum.net> Message-ID: On Mon, Jul 19, 2010 at 6:55 PM, Tim Peters wrote: > [kirby urner] >> ... here's another basic >> question. ?Is there a way, after importing from __future__, >> to revert to the "old ways" later on in the same script? >> ... >> I'm not saying this would ever be a good idea, just >> wondering about possibilities... > > In general it's not possible. ?At least CPython compiles an entire > file into bytecode before anything is executed. ?That's why __future__ > imports have to be the first non-trivial statements in a file: ?they > can change just about anything, including the bytecode that gets > generated. > > For example, here's a little program: > > def f(): > ? ?print x / y > > import dis > dis.dis(f) > > That defines a tiny function, then displays the bytecode generated: > > ?2 ? ? ? ? ? 0 LOAD_GLOBAL ? ? ? ? ? ? ?0 (x) > ? ? ? ? ? ? ?3 LOAD_GLOBAL ? ? ? ? ? ? ?1 (y) > ? ? ? ? ? ? ?6 BINARY_DIVIDE > ? ? ? ? ? ? ?7 PRINT_ITEM > ? ? ? ? ? ? ?8 PRINT_NEWLINE > ? ? ? ? ? ? ?9 LOAD_CONST ? ? ? ? ? ? ? 0 (None) > ? ? ? ? ? ? 12 RETURN_VALUE > > It's not necessary to know what any of those mean, although they > should be pretty obvious ;-) ?If you change the program by putting: > > from __future__ import division > > at the top, the output changes: > > ?4 ? ? ? ? ? 0 LOAD_GLOBAL ? ? ? ? ? ? ?0 (x) > ? ? ? ? ? ? ?3 LOAD_GLOBAL ? ? ? ? ? ? ?1 (y) > ? ? ? ? ? ? ?6 BINARY_TRUE_DIVIDE > ? ? ? ? ? ? ?7 PRINT_ITEM > ? ? ? ? ? ? ?8 PRINT_NEWLINE > ? ? ? ? ? ? ?9 LOAD_CONST ? ? ? ? ? ? ? 0 (None) > ? ? ? ? ? ? 12 RETURN_VALUE > > Note that the third operation changed, from BINARY_DIVIDE to BINARY_TRUE_DIVIDE. > Thank you Tim, that's uber-clear and enlightening. I notice that in IDLE, even a shell restart (menu option) does not reset division back to the old way. IDLE 2.6.5 >>> 1/4 0 >>> from __future__ import division >>> 1/4 0.25 >>> ==== RESTART ==== >>> 1/4 0.25 I also recall how special name __div__ will be triggered by default in Python 2.6 until division is imported from __future__, then __truediv__ gets triggered instead: >>> class Foo (object): def __truediv__(self, other): print "__truediv__ triggered" def __div__(self, other): print "__div__ triggered" >>> o = Foo() >>> b = Foo() >>> o/b __div__ triggered >>> from __future__ import division >>> o/b __truediv__ triggered If all you've done is define __div__ for your object, that'll work by default, until you import division, then unless you have __truediv__ defined, you'll be getting those error messages: >>> class Foo (object): def __div__(self, other): print "__div__ triggered" >>> a = Foo() >>> a/3 __div__ triggered >>> from __future__ import division >>> a/3 Traceback (most recent call last): File "", line 1, in a/3 TypeError: unsupported operand type(s) for /: 'Foo' and 'int' >>> a/a Traceback (most recent call last): File "", line 1, in a/a TypeError: unsupported operand type(s) for /: 'Foo' and 'Foo' > This is all done before anything in the file is executed, so after > execution begins it's too late to change any of it: ?the opcode will > remain whatever was generated at the start (BINARY_DIVIDE or > BINARY_TRUE_DIVIDE) no matter what you do while the program is > running. ?After all, the instant after you import the future, it > becomes the past, and nobody can change the past ;-) > I'm a little surprised that resetting the IDLE shell doesn't reset division "back to factory". It does disappear from the namespace: >>> dir() ['Foo', '__builtins__', '__doc__', '__name__', '__package__', 'a', 'division'] >>> ======== RESTART ======= >>> dir() ['__builtins__', '__doc__', '__name__', '__package__'] >>> division Traceback (most recent call last): File "", line 1, in division NameError: name 'division' is not defined >>> 1/4 0.25 Maybe it shouldn't be allowed to disappear from the namespace (del division raises an exception) as long as its effects are enforced. That way a program could test for it. But then I supposed there's another way. Reading from PEP 238: The true and floor division APIs will look for the corresponding slots and call that; when that slot is NULL, they will raise an exception. There is no fallback to the classic divide slot. In Python 3.0, the classic division semantics will be removed; the classic division APIs will become synonymous with true division. Testing in 3.1, I see __div__ is indeed gone as a special name for integers. Only __truediv__ ( and __floordiv__ and their =/ =// semantics) have been retained. __div__ may be in your code, but it's not a special name (nor is it a mangled private function given the trailing __ prevents mangling). Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> class Foo (object): def __truediv__(self, other): print ("__truediv__ triggered") def __div__(self, other): print ("__div__ triggered") >>> o = Foo() >>> o/3 __truediv__ triggered >>> dir(3) # showing __div__ is all gone ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real'] >>> o .__div__(3) __div__ triggered What's in __future__ anyway? >>> import __future__ >>> dir(__future__) ['CO_FUTURE_ABSOLUTE_IMPORT', 'CO_FUTURE_DIVISION', 'CO_FUTURE_PRINT_FUNCTION', 'CO_FUTURE_UNICODE_LITERALS', 'CO_FUTURE_WITH_STATEMENT', 'CO_GENERATOR_ALLOWED', 'CO_NESTED', '_Feature', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'absolute_import', 'all_feature_names', 'division', 'generators', 'nested_scopes', 'print_function', 'unicode_literals', 'with_statement'] Kirby From millman at berkeley.edu Tue Jul 20 07:31:37 2010 From: millman at berkeley.edu (Jarrod Millman) Date: Mon, 19 Jul 2010 22:31:37 -0700 Subject: [Edu-sig] open source admin in academia? (editorial) In-Reply-To: References: Message-ID: Hello, There are several open source, community developed projects widely-used in higher ed. For example, moodle is a widely-used course management system: http://moodle.com/ Sakai is another course management system for use in higher ed: http://sakaiproject.org/ The Jasig consortium provides several applications used in higher ed: http://www.jasig.org/ The following, while not specifically focused on higher ed, are also widely deployed in higher ed environments: http://roundcube.net/ http://squirrelmail.org/ http://www.list.org/ http://www.isc.org/software/bind Best, Jarrod From kirby.urner at gmail.com Tue Jul 20 10:34:12 2010 From: kirby.urner at gmail.com (kirby urner) Date: Tue, 20 Jul 2010 01:34:12 -0700 Subject: [Edu-sig] open source admin in academia? (editorial) In-Reply-To: References: Message-ID: On Mon, Jul 19, 2010 at 10:31 PM, Jarrod Millman wrote: > Hello, > > There are several open source, community developed projects > widely-used in higher ed. ?For example, moodle is a widely-used course > management system: > ?http://moodle.com/ > Sakai is another course management system for use in higher ed: > ?http://sakaiproject.org/ > The Jasig consortium provides several applications used in higher ed: > ?http://www.jasig.org/ > > The following, while not specifically focused on higher ed, are also > widely deployed in higher ed environments: > ?http://roundcube.net/ > ?http://squirrelmail.org/ > ?http://www.list.org/ > ?http://www.isc.org/software/bind > > Best, > Jarrod Thank you Jarrod, exactly the kind of doorway into this topic I was looking for. You've saved me some time. Here's a random example of a commercial vendor and all with a list of features I'm wondering if some universities supply themselves (in-house), and/or what's out there that's open source (perhaps with support services). http://www.verdexsoft.net/university-software.htm I'm seeing dribs and drabs. I notice Yale invented Centralized Authentication Service (CAS) and that Princeton is involved somehow. Berkeley DB is from Berkeley, used in OpenLDAP (originally from Umich). These kinds of things. Maybe there's a whole literature I've yet to unearth. I like to see universities taking the lead in some way... (they call it "non-commercial"), eating their own dog food. Same thing with hospitals. They seem to not want to develop much inhouse, even for research -- or maybe I've not been inside the right hospitals? You'd think the open source ethic and health care would be more hand in glove. Then you get a bevy of commercial companies offering expertise with these open source tools, e.g.: http://www.unicon.net/company/about#Domain_Expertise Note: Oracle now owns Berkeley DB and has put the Sqlite3 API in front of it (as an option). Costs big bucks looks like. Kirby PS: I came across this useful discussion on Dr. Chuck's blog (he posts here sometimes -- we met at Pycon2009 in Chicago). Reading: http://scholarworks.umass.edu/cgi/viewcontent.cgi?article=1000&context=opensource From calcpage at aol.com Tue Jul 20 14:48:04 2010 From: calcpage at aol.com (Calcpage) Date: Tue, 20 Jul 2010 08:48:04 -0400 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: <4C405BD3.7020104@optimum.net> <4C408970.2040206@optimum.net> Message-ID: <63B4A28C-3AE0-4044-8BD8-416C2F0F8B13@aol.com> Regarding your discussion of Grace Hopper, you may find the videos I posted on YouTube of interest: http://www.youtube.com/cistheta2007 HTH, A. Jorge Garcia Applied Math & CS Baldwin SHS & Nassau CC http://shadowfaxrant.blogspot.com http://www.youtube.com/calcpage2009 Sent from my iPod On Jul 19, 2010, at 6:15 PM, kirby urner wrote: > On Fri, Jul 16, 2010 at 1:41 PM, kirby urner > wrote: > > >> >> I'll return to post a link to my followup post. >> > > So here are my two write-ups of the just completed > Programming in Python (SA:10648): > > http://worldgame.blogspot.com/2010/07/teaching-again.html > http://worldgame.blogspot.com/2010/07/finish-line.html > > Also, the math teachers on math-teach @ Math Forum > are starting to ramp up again, on the whole idea of > pre-college computer science or digital / discrete math > or whatever we call it: > > Here's a link to the thread (public archive). > > http://mathforum.org/kb/thread.jspa?threadID=2095707&tstart=0 > > You'll see me weighing in with my familiar (to some here) > views, but also expressing this new angst about IDLE. > > Excerpts: > > """ > Steve Holden, chairman of the Python Software Foundation, > has been suggesting the it may be time to retire IDLE, > removing it from the standard distro. Indeed, on Ubuntu > I'm pretty sure one needs to install it separately... > """ > > """ > When learning programming for the first time, you can > dive into object oriented thinking right away, because > this style of thinking was modeled on ordinary human > grammar. > > noun.verb( ) and noun.adjective correspond to things > (nouns) having behaviors and attributes (what could > be more natural)? > """ > > I talk about some of my history lobbying for a new > discrete math course here -- how I first become aware > of the Litvins text (at a planning workshop with > Chris Brooks just about one year ago): > > """ > For those new to this list, I've been putting myself out > there as a kind of lobbyist trying to get something called > computational, digital, discrete and/or fill-in-the-blank math > that is for-credit in equal measure with any of the pre-calc > or calc track classes. I've done a lot of writing about this, > describing my network and our political tactics. I won't > go into all that again here. > """ > > http://mathforum.org/kb/thread.jspa?threadID=2095937 > > Kirby > >> >> Kirby Urner >> 4dsolutions.net/ocn/cp4e.html > _______________________________________________ > Edu-sig mailing list > Edu-sig at python.org > http://mail.python.org/mailman/listinfo/edu-sig From echerlin at gmail.com Wed Jul 21 04:54:30 2010 From: echerlin at gmail.com (Edward Cherlin) Date: Tue, 20 Jul 2010 22:54:30 -0400 Subject: [Edu-sig] open source admin in academia? (editorial) In-Reply-To: References: Message-ID: On Tue, Jul 20, 2010 at 04:34, kirby urner wrote: > I like to see universities taking the lead in some way... > (they call it "non-commercial"), eating their own dog food. > > Same thing with hospitals. ?They seem to not want to > develop much inhouse, even for research -- or maybe > I've not been inside the right hospitals? ? You'd think > the open source ethic and health care would be more > hand in glove. MUMPS (Massachusetts General Hospital Utility Multi-Programming System), now sometimes just M, is the basis for the VA and DoD hospital systems. it was taken to Free Software via the Freedom of Information Act, and is now available as openVistA. This is a full medical system suite, with more than 200 modules for imaging, medical records, billing, pharmacy, and so on. M is unusual among programming languages for including its own database engine. Its more recent competitor is OpenMRS (Open Medical Records System) being developed for Partners in Health in Haiti and other such organizations. Harvard has a hand in its development. > Kirby > > PS: ?I came across this useful discussion on Dr. Chuck's blog > (he posts here sometimes -- we met at Pycon2009 in > Chicago). > > Reading: > http://scholarworks.umass.edu/cgi/viewcontent.cgi?article=1000&context=opensource > _______________________________________________ > Edu-sig mailing list > Edu-sig at python.org > http://mail.python.org/mailman/listinfo/edu-sig > -- Edward Mokurai (??/???????????????/????????????? ?) Cherlin Silent Thunder is my name, and Children are my nation. The Cosmos is my dwelling place, the Truth my destination. http://www.earthtreasury.org/ From kirby.urner at gmail.com Wed Jul 21 05:06:50 2010 From: kirby.urner at gmail.com (kirby urner) Date: Tue, 20 Jul 2010 20:06:50 -0700 Subject: [Edu-sig] open source admin in academia? (editorial) In-Reply-To: References: Message-ID: Ah yes, MUMPS. I have some history around that one. It haunts me. Poor Haiti. Kirby On Tue, Jul 20, 2010 at 7:54 PM, Edward Cherlin wrote: > On Tue, Jul 20, 2010 at 04:34, kirby urner wrote: >> I like to see universities taking the lead in some way... >> (they call it "non-commercial"), eating their own dog food. >> >> Same thing with hospitals. ?They seem to not want to >> develop much inhouse, even for research -- or maybe >> I've not been inside the right hospitals? ? You'd think >> the open source ethic and health care would be more >> hand in glove. > > MUMPS (Massachusetts General Hospital Utility Multi-Programming > System), now sometimes just M, is the basis for the VA and DoD > hospital systems. it was taken to Free Software via the Freedom of > Information Act, and is now available as openVistA. This is a full > medical system suite, with more than 200 modules for imaging, medical > records, billing, pharmacy, and so on. M is unusual among programming > languages for including its own database engine. Its more recent > competitor is OpenMRS (Open Medical Records System) being developed > for Partners in Health in Haiti and other such organizations. Harvard > has a hand in its development. > >> Kirby >> >> PS: ?I came across this useful discussion on Dr. Chuck's blog >> (he posts here sometimes -- we met at Pycon2009 in >> Chicago). >> >> Reading: >> http://scholarworks.umass.edu/cgi/viewcontent.cgi?article=1000&context=opensource >> _______________________________________________ >> Edu-sig mailing list >> Edu-sig at python.org >> http://mail.python.org/mailman/listinfo/edu-sig >> > > > > -- > Edward Mokurai (??/???????????????/????????????? ?) Cherlin > Silent Thunder is my name, and Children are my nation. > The Cosmos is my dwelling place, the Truth my destination. > http://www.earthtreasury.org/ > From kirby.urner at gmail.com Wed Jul 21 23:14:08 2010 From: kirby.urner at gmail.com (kirby urner) Date: Wed, 21 Jul 2010 14:14:08 -0700 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: <63B4A28C-3AE0-4044-8BD8-416C2F0F8B13@aol.com> References: <4C405BD3.7020104@optimum.net> <4C408970.2040206@optimum.net> <63B4A28C-3AE0-4044-8BD8-416C2F0F8B13@aol.com> Message-ID: Really excellent 60 Minutes excerpt, thank you. I should show that in my next math class. Kirby On Tue, Jul 20, 2010 at 5:48 AM, Calcpage wrote: > Regarding your discussion of Grace Hopper, you may find the videos I posted > on YouTube of interest: > > http://www.youtube.com/cistheta2007 > > HTH, > A. Jorge Garcia > Applied Math & CS > Baldwin SHS & Nassau CC > http://shadowfaxrant.blogspot.com > http://www.youtube.com/calcpage2009 > Sent from my iPod > > On Jul 19, 2010, at 6:15 PM, kirby urner wrote: > >> On Fri, Jul 16, 2010 at 1:41 PM, kirby urner >> wrote: >> >> >>> >>> I'll return to post a link to my followup post. >>> >> >> So here are my two write-ups of the just completed >> Programming in Python (SA:10648): >> >> http://worldgame.blogspot.com/2010/07/teaching-again.html >> http://worldgame.blogspot.com/2010/07/finish-line.html >> >> Also, the math teachers on math-teach @ Math Forum >> are starting to ramp up again, on the whole idea of >> pre-college computer science or digital / discrete math >> or whatever we call it: >> >> Here's a link to the thread (public archive). >> >> http://mathforum.org/kb/thread.jspa?threadID=2095707&tstart=0 >> >> You'll see me weighing in with my familiar (to some here) >> views, but also expressing this new angst about IDLE. >> >> Excerpts: >> >> """ >> Steve Holden, chairman of the Python Software Foundation, >> has been suggesting the it may be time to retire IDLE, >> removing it from the standard distro. Indeed, on Ubuntu >> I'm pretty sure one needs to install it separately... >> """ >> >> """ >> When learning programming for the first time, you can >> dive into object oriented thinking right away, because >> this style of thinking was modeled on ordinary human >> grammar. >> >> noun.verb( ) and noun.adjective correspond to things >> (nouns) having behaviors and attributes (what could >> be more natural)? >> """ >> >> I talk about some of my history lobbying for a new >> discrete math course here -- how I first become aware >> of the Litvins text (at a planning workshop with >> Chris Brooks just about one year ago): >> >> """ >> For those new to this list, I've been putting myself out >> there as a kind of lobbyist trying to get something called >> computational, digital, discrete and/or fill-in-the-blank math >> that is for-credit in equal measure with any of the pre-calc >> or calc track classes. I've done a lot of writing about this, >> describing my network and our political tactics. I won't >> go into all that again here. >> """ >> >> http://mathforum.org/kb/thread.jspa?threadID=2095937 >> >> Kirby >> >>> >>> Kirby Urner >>> 4dsolutions.net/ocn/cp4e.html >> >> _______________________________________________ >> Edu-sig mailing list >> Edu-sig at python.org >> http://mail.python.org/mailman/listinfo/edu-sig > From calcpage at aol.com Thu Jul 22 00:00:21 2010 From: calcpage at aol.com (Calcpage) Date: Wed, 21 Jul 2010 18:00:21 -0400 Subject: [Edu-sig] source code from SA:10648 In-Reply-To: References: <4C405BD3.7020104@optimum.net> <4C408970.2040206@optimum.net> <63B4A28C-3AE0-4044-8BD8-416C2F0F8B13@aol.com> Message-ID: <28ACDF36-E506-4C55-9F46-B662B67291F6@aol.com> There's a lot of content on YouTube regarding Ada Lovelace Day as well. There was some discussion on the AP-CompSci listserv about making a Grace Murray Hopper Day as well. The problem IIRC was that Hopper's and Lovelace's (or is it Byron) birthdays were very close if not, in fact, the same day (not year of course). Regards, A. Jorge Garcia Applied Math & CS Baldwin SHS & Nassau CC http://shadowfaxrant.blogspot.com http://www.youtube.com/calcpage2009 Sent from my iPod On Jul 21, 2010, at 5:14 PM, kirby urner wrote: > Really excellent 60 Minutes excerpt, thank you. > > I should show that in my next math class. > > Kirby > > > On Tue, Jul 20, 2010 at 5:48 AM, Calcpage wrote: >> Regarding your discussion of Grace Hopper, you may find the videos >> I posted >> on YouTube of interest: >> >> http://www.youtube.com/cistheta2007 >> >> HTH, >> A. Jorge Garcia >> Applied Math & CS >> Baldwin SHS & Nassau CC >> http://shadowfaxrant.blogspot.com >> http://www.youtube.com/calcpage2009 >> Sent from my iPod >> >> On Jul 19, 2010, at 6:15 PM, kirby urner >> wrote: >> >>> On Fri, Jul 16, 2010 at 1:41 PM, kirby urner >>> wrote: >>> >>> >>>> >>>> I'll return to post a link to my followup post. >>>> >>> >>> So here are my two write-ups of the just completed >>> Programming in Python (SA:10648): >>> >>> http://worldgame.blogspot.com/2010/07/teaching-again.html >>> http://worldgame.blogspot.com/2010/07/finish-line.html >>> >>> Also, the math teachers on math-teach @ Math Forum >>> are starting to ramp up again, on the whole idea of >>> pre-college computer science or digital / discrete math >>> or whatever we call it: >>> >>> Here's a link to the thread (public archive). >>> >>> http://mathforum.org/kb/thread.jspa?threadID=2095707&tstart=0 >>> >>> You'll see me weighing in with my familiar (to some here) >>> views, but also expressing this new angst about IDLE. >>> >>> Excerpts: >>> >>> """ >>> Steve Holden, chairman of the Python Software Foundation, >>> has been suggesting the it may be time to retire IDLE, >>> removing it from the standard distro. Indeed, on Ubuntu >>> I'm pretty sure one needs to install it separately... >>> """ >>> >>> """ >>> When learning programming for the first time, you can >>> dive into object oriented thinking right away, because >>> this style of thinking was modeled on ordinary human >>> grammar. >>> >>> noun.verb( ) and noun.adjective correspond to things >>> (nouns) having behaviors and attributes (what could >>> be more natural)? >>> """ >>> >>> I talk about some of my history lobbying for a new >>> discrete math course here -- how I first become aware >>> of the Litvins text (at a planning workshop with >>> Chris Brooks just about one year ago): >>> >>> """ >>> For those new to this list, I've been putting myself out >>> there as a kind of lobbyist trying to get something called >>> computational, digital, discrete and/or fill-in-the-blank math >>> that is for-credit in equal measure with any of the pre-calc >>> or calc track classes. I've done a lot of writing about this, >>> describing my network and our political tactics. I won't >>> go into all that again here. >>> """ >>> >>> http://mathforum.org/kb/thread.jspa?threadID=2095937 >>> >>> Kirby >>> >>>> >>>> Kirby Urner >>>> 4dsolutions.net/ocn/cp4e.html >>> >>> _______________________________________________ >>> Edu-sig mailing list >>> Edu-sig at python.org >>> http://mail.python.org/mailman/listinfo/edu-sig >> From kirby.urner at gmail.com Thu Jul 22 00:24:55 2010 From: kirby.urner at gmail.com (kirby urner) Date: Wed, 21 Jul 2010 15:24:55 -0700 Subject: [Edu-sig] women in computer (was: source code from SA:10648) Message-ID: On Wed, Jul 21, 2010 at 3:00 PM, Calcpage wrote: > There's a lot of content on YouTube regarding Ada Lovelace Day as well. > ?There was some discussion on the AP-CompSci listserv about making a Grace > Murray Hopper Day as well. ?The problem IIRC was that Hopper's and > Lovelace's (or is it Byron) birthdays were very close if not, in fact, the > same day (not year of course). > > Regards, > A. Jorge Garcia > Applied Math & CS > Baldwin SHS & Nassau CC > http://shadowfaxrant.blogspot.com > http://www.youtube.com/calcpage2009 > Sent from my iPod We have other ways to honor people besides having days in their honor. Given Ada and Hopper, I'm happy to circle "computer science" as "belonging to women", which of course just gets me in hot water with some of the guy-centric storytellers. I posted some essays to math-thinking-l about this, some here, some on Python's diversity list (private archive -- you have to join it to read it, unlike edu-sig). Lots about "FOSS witches", which came up around here awhile back as well: http://www.mail-archive.com/edu-sig at python.org/msg05726.html The New Yorker magazine once published a cover story slamming Ada, trying to withdraw her title as "first computer programmer". I rallied to her defense: http://www.grunch.net/synergetics/adaessay.html Of course one might argue "it doesn't mean anything" to say women control computer science. Likewise men don't control anything I suppose one could say (least of all themselves). However, in terms of seeking balance, I'm happy to develop this narrative line. Our next truly creative bursts (if we have any) will all have to do with using computing technology to take better care of "women and children" (the signature civilians) and less to do with world domination through brute force (a male specialty). OLPC etc. Caring about community. Mesh networking etc. Yes, sounds like a "party line" ("pirate party"?).[0] I am heartened to see open source moving into health care, even if that's just MUMPS leading the charge. At the hospital I worked at, I tried to envision a more contemporary SQL based approach [1], but then I think the future of medical records will be more like Facebook (except more private and with medical devices and imaging systems for "friends" -- along with physicians and their case notes).[2] Kirby [0] re Pirate Party http://controlroom.blogspot.com/2007/08/which-hollywood-star-for-president.html [1] Django / Python instead of MUMPS? http://www.4dsolutions.net/presentations/charting_a_future_sysadmin.pdf [2] Medical records in Cassandra or one of those "schema-less" databases http://controlroom.blogspot.com/2009/06/medical-privacy.html From kirby.urner at gmail.com Thu Jul 22 03:05:20 2010 From: kirby.urner at gmail.com (kirby urner) Date: Wed, 21 Jul 2010 18:05:20 -0700 Subject: [Edu-sig] more ruminations... (Python and physics etc.) Message-ID: More ruminations regarding Python and math teaching, at the Math Forum, with stuff about Smalltalk, OLPC etc. Excerpt: """ I'm thinking Arthur Siegel (on edu-sig / Python Nation) was on the right track in always insisting that VPython become a part of the standard distro. Having something relatively easy, user friendly that's OpenGL, is gonna do wonders for your geometry classes, and after geometry + geography, what else is there? Me 'n Sir William thought the same way. [William Colby -- KU] """ http://mathforum.org/kb/message.jspa?messageID=7133134&tstart=0 Also, after two days with the physics teachers, I'm again impressed with how far ahead the community seems to be, vis-a-vis most of the math teaching community, in terms of embracing social networking, other tools. http://worldgame.blogspot.com/2010/07/physics-conference.html I was sorry to miss Ruth Chabay's VPython presentations. She was among the presenters. http://www4.ncsu.edu/~rwchabay/ I did see stuff happening with Python though. Even my own work was mentioned (Studies in Human Motion, using Python + POV-Ray, with input from a spreadsheet getting from sensors attached to a dancer's body). The movies: http://physics.doane.edu/hpp/Resources/UHMCD/UHMCDMedia.htm http://physics.doane.edu/hpp/Resources/UHMCD/UHMCDPeople.htm (includes me in the credits) Then there's this software called Logger Pro by Vernier that a lot of physics teachers are using. Venier is to physics teaching sort of what TI is to math teaching? Kirby From vceder at canterburyschool.org Thu Jul 22 03:20:04 2010 From: vceder at canterburyschool.org (Vern Ceder) Date: Wed, 21 Jul 2010 21:20:04 -0400 Subject: [Edu-sig] more ruminations... (Python and physics etc.) In-Reply-To: References: Message-ID: <4C479CC4.7050201@canterburyschool.org> Hi Kirby, kirby urner wrote: > > Then there's this software called Logger Pro by Vernier that a > lot of physics teachers are using. Venier is to physics teaching > sort of what TI is to math teaching? > Yeah, and chemistry as well. Basically, they sell sensors... and the hardware to interface with them... and the software to read (and plot) the data. There may be other companies out there, but Vernier is just about all you hear of. They do publish the tech info on all of their devices, but I don't know of any Python libraries for reading them. Should be do-able, though. Their software used to be pretty proprietary and Windows-centric, but they have shown signs of opening things up a bit. They have a version of Logger Pro that runs on Linux available for free as part of a public beta: http://www.vernier.com/soft/lpl/ And even a lite version that runs on the OLPC XO. Cheers, Vern > Kirby > _______________________________________________ > Edu-sig mailing list > Edu-sig at python.org > http://mail.python.org/mailman/listinfo/edu-sig -- This time for sure! -Bullwinkle J. Moose ----------------------------- Vern Ceder, Director of Technology Canterbury School, 3210 Smith Road, Ft Wayne, IN 46804 vceder at canterburyschool.org; 260-436-0746; FAX: 260-436-5137 The Quick Python Book, 2nd Ed - http://bit.ly/bRsWDW From kirby.urner at gmail.com Sun Jul 25 02:29:26 2010 From: kirby.urner at gmail.com (kirby urner) Date: Sat, 24 Jul 2010 17:29:26 -0700 Subject: [Edu-sig] open source admin in academia? (editorial) In-Reply-To: References: Message-ID: On Mon, Jul 19, 2010 at 3:30 PM, kirby urner wrote: > I'm becoming more aware of the fact that one > reason universities need to charge those > tuitions is to pay licensing fees to private > vendors who provide them with such basic > services as the ability to store and schedule > classes, record student enrollment and grades, > record instructors etc. ?The catalog needs to > be published on-line. ?There might be a lot > of extended education options, e.g. non-credit > courses open to anyone willing to sign up. > Of course it takes time/energy to develop such software no matter who is doing it. If a university can afford a system architect and to pay developers, fine. I know Reed College had an ad in the paper for Open Source Developer (PHP centric). But that doesn't mean the fruits of this labor are shared with a wider community (might not be relevant). "Open source" may just mean that the tools themselves are open (e.g. a LAMP stack), not that anything developed is going to escape the silo. > Some of these proprietary programs are pretty > old, lack features departments need, and so > various intermediating applications grow up > around the edges to fill in the gaps. I interviewed this system architect from a large community college and he talked about how their in-house people used to run everything to do with admin (courses, enrollment, scholarships, instructor compensation...) using FORTRAN on a mainframe. Over time, components were modernized, moved to other technologies. Just before he left, the school signed on with a major vendor. He said this was a result of some political wheeling and dealing and that the in-house people were still using their own systems, but stuffing data into the vendor product to keep the politicians happy in some way. The vendor product was quite lame in the opinion of most staffers. > Maybe the big dino system doesn't record > student evaluations for example, or keep track > of which courses are in the pipeline, but still > haven't found a place in the sun. > This is a real life situation I'm facing. To make up for what's missing in the vendor product, they have a one-of-a-kind custom application written in FoxPro. FoxPro has been a rather popular language in the Microsoft world, though Microsoft has tended to be ambivalent about it (competes with Access, is in so many ways better than Access). The decision was to not commit to any VFP 10 (no more releases), while putting most developer tools into Codeplex (the "shared source" repository). Some FoxPro developers decided to code a development environment that was rather similar, in Python. That's Ed Leaf and Dabo. I've been to a couple of his talks, shared Vietnamese food in Washington DC that time. In any case, the concepts are all familiar if you do RDBMS. Xbase, originally developed in connection with some JPL satellite project (interesting lore) had it's own non-SQL way of talking to tables though -- with SQL grafted on later. > One would think that universities in particular, > which pride themselves on having advanced > knowledge of state of the art skills, would band > together in various consortia to pool resources > and "eat their own dog food" as it were. ?A > school that teaches medicine actually practices > medicine (the "teaching hospital"). ?Shouldn't > schools that teach computer science and > business administration actually walk the talk > in some way? ?Maybe many of them do, I don't > actually know. > That seems a boldly correct statement on the face of it maybe, but I've been listening to the counter-arguments. One smart exec I know put it this way: "a university's main mission is to prepare a large number of students for entry level positions in various professional walks of life, NOT to write sophisticated software that tries to compete with Microsoft Word -- it takes a veritable army to write industrial grade code, and who's got that kind of time or resources within academia?" > To outsource something so core to one's business, > to pay licensing fees while not having the power > to make design modifications, just seems more > than a tad on the ironic side. ?It's like a bank > outsourcing everything it does around money. > As another co-worker put it, universities won't lean on something so nebulous as an "open source community" if that means there's no one on the hook to hold accountable if something goes wrong. This is the chief advantage of having a vendor: if the system breaks, there's someone specific to call. In the eyes of your supervisors, you've done all you need to do: report the problem and keep the pressure on. People on some other payroll are responsible. One alternative is to get into a finger pointing war as to which component is to blame and who the maintainer might be. This is the stereotyped picture of the open source world, fed by some vendors. If something breaks, no one knows who to contact. You're dead in the water without a service contract. >From one of Microsoft's own memos: As far as forming a partnership with a third-party is concerned, we've heard from a number of large FoxPro customers that this would make it impossible for them to continue to use FoxPro since it would no longer be from an approved vendor. We felt that putting the environment into open source on CodePlex, which balances the needs of both the community and the large customers, was the best path forward." http://en.wikipedia.org/wiki/Visual_FoxPro That's another stereotype of open source I'm afraid: a hodge podge of older / used technologies, maybe on their way out, every dime extracted, and so now given away to the community for the die-hards to "maintain" for free (good luck to 'em). Is that what's happening with MUMPs I wonder? > I realize not every college or university wants to > reinvent the wheel around something so basic, > but I do wonder to what extent there's some > open source sharing going on, around these core > utilities. ?Are universities so competitive they > won't share? ?So does that mean they all pay > the same licensing fees to use the same > private vendor offerings? > Putting on my idealistic hat again, I'm imagining universities as throbbing centers of innovation. Rather than simply point students to Facebook, Youtube, Blogger and Flickr as ways to build one's ePortfolio (as I was hearing about at the recent AAPT meeting (physics teachers)), the university itself could have it's own social networking tools. Student organizing and collaboration would be all that much easier because some of the brightest, freshest minds were doing custom project development in-house. A senior thesis may be increasingly something multi-media that needs to run (as in execute). The possibilities, for an art scholar, would depend in part on what the art school might provide, in the way of electronic infrastructure. Music schools need good instruments. As a metaphor, that works in computing. Hot new ideas would germinate in the university (like Linux did) and then feed the larger community. The liberal arts perspective means lowering barriers to entry across the board. MIT's OpenCourseware is indicative of this commitment. > I remember Zope / Plone and SchoolTool. > http://en.wikipedia.org/wiki/SchoolTool > > Is there something even more comprehensive > that's out there, suitable for college and university > use? ?Does it come in modularized components? > Is it an over-the-web database? > Nothing has come to my attention so far. There's no GLOBAL U app written in Django, ready for download and customization, complete with Students, Courses, Sections, Instructors, TAs, Scholarships, Supplies, Catalog, Users, Security... all the myriad relational tables and modules it'd take to turn this into a complete system, with maybe PostgreSQL for a back end (or another). I do think it'd be a boost for a university's reputation to have a lot of self sufficiency around its core business. Students could learn about the guts of the very systems that are used to run the university. Of course the actual data is protected in various ways (open source does not mean open data), but with pseudo-data students could work on enhancing and documenting in a collaborative environment. The mandate to "follow your curiosity" should extend into the heart of whatever system you're into, no? Learning how a university works is a great lesson in microcosm management, and could be a key to community development across the board, given how schools are akin to villages or towns (with sprawling network components, given distance education). Learn about the guts of a university in your formative years, and maybe you'll become a system architect for some semi-utopian oasis in a beleaguered world (yes, more inspiring rhetoric). > Or do few if any universities really eat their own > dog food? > > Like I say, I'm new to this business, just trying > to get oriented. > > Kirby > My tentative conclusion so far is a lot of universities were among the first to have mainframes and these were put to use to run the universities, a way of paying their own way (mainframes were and are quite expensive). What's happened more recently though, is as these first generations retire, more core functions are being outsourced to external vendors. Large cultural tides are at work. Another conclusion I've reached, and maybe this is well known in management circles, is that it would behoove large (and smaller) institutions to chronicle in-house lore, with an emphasis on the choices of technology. I'm getting some hits on Google (how self-documenting is Google (the company)?). This would be retrospective / historical information and not just "eyes only" to a few executives. A liberal arts institution, and/or a government of/by/for the people, might aim to be especially transparent in its operations as a matter of self definition and long term accreditability. Kirby More ruminations: http://controlroom.blogspot.com/2010/07/book-of-lore.html