<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ironpython in Action on Tony Andrew Meyer</title><link>http://tonyandrewmeyer.com/tags/ironpython-in-action/</link><description>Recent content in Ironpython in Action on Tony Andrew Meyer</description><generator>Hugo</generator><language>en-nz</language><lastBuildDate>Mon, 09 Aug 2010 18:26:49 +1200</lastBuildDate><atom:link href="http://tonyandrewmeyer.com/tags/ironpython-in-action/index.xml" rel="self" type="application/rss+xml"/><item><title>D520 Week Three - 2010</title><link>http://tonyandrewmeyer.com/2010/08/09/d520-week-three-2010/</link><pubDate>Mon, 09 Aug 2010 18:26:49 +1200</pubDate><guid>http://tonyandrewmeyer.com/2010/08/09/d520-week-three-2010/</guid><description>&lt;p>&lt;a href="http://tonyandrewmeyer.wordpress.com/2009/08/09/d520-week-three/">Last year&lt;/a> Chapter Four of &lt;a href="http://ironpythoninaction.com">IronPython in Action&lt;/a> was covered over two weeks (the lab is also a two-part exercise), and I felt that worked fairly well, so kept the same plan for this year, although the exact parts that were covered each week changed.  As usual, the students received &lt;button type="button" class="deadlink" aria-haspopup="dialog">notes&lt;/button> [PDF], and a &lt;button type="button" class="deadlink" aria-haspopup="dialog">lab exercise&lt;/button> [PDF], and two recommended reading items, both by Brent Simmons: one on &lt;a href="http://inessential.com/2009/11/23/the_non-linear_relationship_of_coding_ef">how improving quality is non-linear&lt;/a>, and one on &lt;a href="http://inessential.com/2009/07/17/on_that_moron_feeling">how your own code is always improving&lt;/a>.  The notes again cover the textbook, key points, and example code (although most of the example code is MultiDoc, so just links to &lt;a href="http://code.google.com/p/ironpython/">the online copy&lt;/a>.
This year, I left duck typing for the second week, preferring to spend more time on the IronPython introduction (and sacrificing some time for going over Lab 1).  We did cover design patterns, specifically MVC (command patterns we&amp;rsquo;ll also do in the second half), and we managed to get the MultiDoc example complete (as it is at the end of the chapter) except for the magic methods (which we&amp;rsquo;ll add once we have covered duck typing, so we know what they do; this does mean that the program doesn&amp;rsquo;t actually run at this point).  As always, this lecture was also used to hammer home the importance of doing some sort of planning before starting any large project.
Like last year, the students struggled with the first Lab (the quiz exercise); I did expect this, and it was confirmed before the class started.  I felt that going over the exercise in class worked reasonably well last year, so I did that again this year - this took longer than I hoped (over an hour), although this will be quick next week (because it&amp;rsquo;s only a design, no &lt;a href="http://ironpython.codeplex.com">IronPython&lt;/a> code), so the effect on the combined eight-hour session isn&amp;rsquo;t too bad.  Although I made available the three versions (naive, console, GUI) from last year, I again started from scratch, to demonstrate how they can progress from not really having any idea about what to do to a more finished exercise.  The versions from this year are slightly different as a result (particularly the console version, which I made a lot simpler this year), but they follow the same pattern.  Although this was expensive in terms of time, it again felt very worthwhile, and I hope the students are more confident when they begin coding for Lab 3 (next week).  Having a week&amp;rsquo;s break when they don&amp;rsquo;t need to write any new code is another benefit of splitting this material over two weeks (since they&amp;rsquo;ll be in week four by that time, and ought to be able to do something, even if it is simple).
This week&amp;rsquo;s lab exercise did change from last year, although not significantly.  For a long time, the exercise was to design an airline booking application - originally based on an example program, and then to code it based on the design the second week.  Writing the design based on an existing application never seemed right (defeating the point of the &amp;ldquo;design first&amp;rdquo; meme!), and the application was quite buggy (and I never got around to fixing everything, since it wasn&amp;rsquo;t my code); that part was removed from the lab in 2009.  In 2010 I dropped the airline booking part altogether - it never worked particularly well, because actual booking is much more complex and the students tried to include things that weren&amp;rsquo;t necessary.   The actual task (design this week, code next) remained the same, but they now have to design a Memory card game - this should be quite simple, and prepares them for the first project.  (It&amp;rsquo;s also something that they can test by playing a game).  Following the new system, they didn&amp;rsquo;t get any time to work on this in class.&lt;/p></description></item><item><title>D520 - Week Six</title><link>http://tonyandrewmeyer.com/2009/09/07/d520-week-six/</link><pubDate>Mon, 07 Sep 2009 21:31:20 +1200</pubDate><guid>http://tonyandrewmeyer.com/2009/09/07/d520-week-six/</guid><description>&lt;p>Chapter 6 of &lt;a href="http://ironpythoninaction.com">IronPython in Action&lt;/a> covers &amp;ldquo;properties, dialogs, and Visual Studio&amp;rdquo;.  This seemed an obvious place to insert the material on user-interface design that is normally covered in the course, and to look a bit more deeply than the textbook does at &lt;a href="http://www.microsoft.com/express/">Visual Studio&lt;/a> itself (and the Windows Forms controls and their properties).  I only scheduled a single week to cover this, but I suspected that it might take more than one (I left an empty slot in the schedule to cover one such over-run), and that was, indeed, the case.  The students received &lt;a href="http://files.me.com/tonyandrewmeyer/4knt5w">notes&lt;/a> [PDF], slightly longer this week (covering the UI design material not in the textbook, as well as the usual chapter summary, key points, and examples, and the steps required to install &lt;a href="http://ironpython.codeplex.com">IronPython&lt;/a> support in the &amp;lsquo;Experimental Hive&amp;rsquo; Visual Studio SDK), and a fairly simple lab exercise [PDF].
The recommended reading for this week (which I didn&amp;rsquo;t get a chance to mention, but is listed in the course material) is &lt;a href="http://www.paulgraham.com/fix.html">a very light-hearted comparison of different programming languages&lt;/a> (somewhat old, so the students probably don&amp;rsquo;t actually know many of these, but I like the underlying truths - I guess I should have tried to add languages like Ruby, PHP and Javascript myself) and &lt;a href="http://wilshipley.com/blog/2007/05/pimp-my-code-part-14-be-inflexible.html">a Wil Shipley article about the fast/good/cheap trade-off&lt;/a>.  I really enjoy Shipley&amp;rsquo;s style of writing, but even if I didn&amp;rsquo;t, I&amp;rsquo;d include this article: the point about there being many dimensions (brevity, features, speed, time, robustness, flexibility, &amp;hellip;) and that you can&amp;rsquo;t have them all is really important for starting developers to understand.  However, even more than that, I really agree with Shipley&amp;rsquo;s contention that you should always start with brevity.
The first half of the class is straight from previous offerings of the course (although a little condensed), and is basically just a 90 minute talk about user-interface design, aimed at non-designers.  As previously, I use the points from &lt;a href="http://www.asktog.com/basics/firstPrinciples.html">Tog&amp;rsquo;s First Principles of Design&lt;/a> as the outline, although I talk about more than just what&amp;rsquo;s in the article (and only skim over some parts of it).  The course isn&amp;rsquo;t really about UI/UX design, but it is an important element, and I try to emphasise it in some way each week (and many of the recommended reading articles are about some sort of UI/UX design).  For the two projects, the students will have to complete not just a development design document, but also a UI design, &lt;em>including an explanation of why they made the decisions they did&lt;/em>.  Historically, this is notoriously badly done for the first project, with most students (despite my emphasis when outlining the project, and giving them a marking schedule) submitting nothing more than a screenshot of a Visual Studio mock-up.  For the first project, all I really need to see is that they&amp;rsquo;ve considered &lt;strong>something&lt;/strong>, rather than just thrown things together - by the end of the course, I expect that they should be able to put something together that is a reasonable UI.  There has historically been an examination question on this topic as well - something along the lines of &amp;ldquo;outline three important considerations in user-interface design&amp;rdquo;.
The biggest issue was in installation - again!  I carefully tested running through the installation on a clean copy of the Windows image they have.  It was slow (so I recommended doing it before coming to class, and planned to kick it off at the start and only start using it a couple of hours later, after the UI talk), but worked fine.  I forgot, however, about the &lt;a href="http://northtec.ac.nz">Northtec&lt;/a> proxy server that blocks so much Internet functionality.  There were basically three steps required to get the &amp;ldquo;Experimental Hive&amp;rdquo; version of Visual Studio running with IronPython (1, unfortunately) support: install Visual Studio 2008 SP1, install Visual Studio 2008 SDK, compile the IronPython sample.
The Visual Studio SP1 installer is one of the &amp;ldquo;stub&amp;rdquo; installers that are popular in some circles - i.e. it&amp;rsquo;s a very small installer that then downloads whatever is necessary to complete the installation.  While there are some merits in this approach, it doesn&amp;rsquo;t work well in all situations: this was one of those.  It seems that the service pack installer only support proxies that provide auto-discovery, which the Northtec proxy does not.  That left two alternatives: force the students to download and install the service pack (many hundreds of MB) outside of the lab, or use the .iso version of the SP.  I downloaded the .iso (830 MB!), and that installed without problem in the lab.  However, I don&amp;rsquo;t really have a convenient way to distribute files of that size among the class (generally the files I provide are quite small) - if I had realised this in advance I could have had it added to the file server, but that wasn&amp;rsquo;t really feasible in the time available.
I had to fall back to copying the files on to a USB drive (1GB, so max&amp;rsquo;ing it out) and distributing them via &lt;a href="http://en.wikipedia.org/wiki/Sneakernet">sneakernet&lt;/a>.  Figuring out all of this (around the actual teaching) took most of the class, so when I left I had only got this far (i.e. halfway through step 1 of 3).  The SP installation should be trouble-free (but will probably take 30-60 minutes), so the students should have that done by next class.  We&amp;rsquo;ll continue with the SDK installation (~120 MB standard installer) and IronPython compilation at that point.  Next year, I&amp;rsquo;ll make sure that SP1 is installed on the image, side-stepping this whole problem (I hadn&amp;rsquo;t got to testing software installation when the images were created this year, because I knew that I wanted the students to do installation themselves).  Of course, I could be really lucky, and V&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=475830&amp;amp;wa=wsignin1.0">isual Studio 2010 might include built-in IronPython support&lt;/a>.
We were able to use Visual Studio in the method described in &lt;a href="http://ironpythoninaction.com">IronPython in Action&lt;/a>, however (creating class libraries in Visual Studio and subclassing in IronPython).  I think the students found this less appealing that I do - moving the generated .dll around was problematic for some of the students, for example.  I suspect that even though using IronPython directly in Visual Studio is problematic (e.g. stuck with IronPython 1) many students will elect to do that.
To me, properties seem a bit like decorators and lambdas, in that they are slightly advanced Python, and perhaps a bit ahead of where the students generally are in D520.  However, we certainly covered properties in Visual Basic, and the fundamentals are the same, really.  The MultiDoc example was very useful here, in that it uses properties to implement observers, so there was a practical use for properties, rather than the toy examples that are often used in explaining &lt;em>why&lt;/em> you&amp;rsquo;d want to hide your attributes behind getters and setters.  I think that the students understood the general idea.  As part of this, I briefly covered the observer pattern, as outlined in the textbook - perhaps it&amp;rsquo;s just the work that I&amp;rsquo;ve done, but I come across observers all the time, so I tried to get across the importance of this idea.
My plan at this stage is to find somewhere in the schedule where I can insert an &amp;ldquo;Advanced Python Refresher&amp;rdquo;, where the students can take another look at decorators, properties, lambdas, and anything else that comes up along these lines.  I doubt many (maybe any) students will use these techniques in their projects, but I do expect that they&amp;rsquo;ll feature in the final examination - and will probably be a good indicator of the good programmers (those that really understand programming and might end up doing it professionally) versus the good students (those that put in enough effort to get through, but are really suited for other IT jobs - sysadmin, testing, managing, etc).
Chapter 6 has nicely thorough coverage of the very versatile MessageBox, but it&amp;rsquo;s not really overly complicated to use, if you have a list of the icon and button options available (as in the book, or on MSDN).  Since we&amp;rsquo;ve seen MessageBox a few times already, I skipped over this material, focusing instead on the custom dialogs.  The chapter also has a section on serialising in .NET - the students are already familiar with the &lt;a href="http://docs.python.org/library/pickle.html">pickle&lt;/a> module, so this is really just a .NET version of something they already know.  I originally intended to cover this next week, but if time is short again, I might just skip it completely (since they can easily use pickle instead).
We ran out of time before I could really go over the MultiDoc code from Chapter 6, so I left that for the next week.
The lab exercise was just redesigning the Airline application used in earlier labs.  There were two aims here - firstly to get the students to try out the various controls that are available (it&amp;rsquo;s easier to explore in Visual Studio, even if you end up using the controls in hand-written code).  Secondly, the students must design their projects, including the UI, and submit that design.  This doesn&amp;rsquo;t just mean &amp;lsquo;sketch the UI&amp;rsquo; - it means consider and explain the reasons behind the UI decisions - hopefully the lab started students on the road to doing this properly in the project.&lt;/p></description></item><item><title>D520 - Week Five</title><link>http://tonyandrewmeyer.com/2009/08/24/d520-week-five/</link><pubDate>Mon, 24 Aug 2009 17:57:44 +1200</pubDate><guid>http://tonyandrewmeyer.com/2009/08/24/d520-week-five/</guid><description>&lt;p>Chapter 5 of &lt;a href="http://ironpythoninaction.com">IronPython in Action&lt;/a> deals with &lt;a href="http://en.wikipedia.org/wiki/Xml">XML&lt;/a>, although it starts out covering some of the more advanced things you can do with functions.  I considered skipping this chapter (the function material is perhaps a bit advanced, and covering XML isn&amp;rsquo;t a necessity), but decided that it was worth learning about XML in .NET (since it&amp;rsquo;s so common) and that it would make using the MultiDoc example tricky (since the file format is XML) and I really wanted to use MultiDoc.  I gave the students &lt;a href="http://files.me.com/tonyandrewmeyer/joshve">notes&lt;/a> [PDF], again covering the textbook material that we could look at, the tools (unchanged), key points, and a link to the MultiDoc example code.  We had a new &lt;a href="http://files.me.com/tonyandrewmeyer/6f2ptv">lab exercise&lt;/a> [PDF] this week (implementing &lt;a href="http://en.wikipedia.org/wiki/Conway%27s_game_of_life">Conway&amp;rsquo;s Game of Life&lt;/a>), as well as two new recommended reading articles: a &lt;a href="http://ignorethecode.net/blog/2008/05/18/preferences-considered-harmful/">Lukas Mathis post about preferences&lt;/a> and another &lt;a href="http://www.joelonsoftware.com/items/2008/05/01.html">Spolsky post, this one about &amp;ldquo;architecture astronauts&amp;rdquo;&lt;/a>.
Students again read the recommended reading (again, before class!).  There was some debate about the Mathis article about preferences.  The points I hoped they took away were the difference between configuration and preferences and that preferences don&amp;rsquo;t suit &amp;lsquo;casual&amp;rsquo; users.  I think some students were unconvinced, but I hope that I managed to get across the point that they are (by definition, as students in this course) more than casual users, and so not the sort of user that preferences don&amp;rsquo;t suit.  (However, even though I&amp;rsquo;m far from a casual user, I too generally dislike preferences - one reason I use a lot of &lt;a href="http://apple.com">Apple&lt;/a> products).
I got the feeling that the material on functions was a little advanced, as I suspected.  This was, however, the ideal place for me to cover lambdas, as I proposed doing last week, so I added that in.  I talked about functions defined in other functions, passing functions as arguments, anonymous functions (lambdas), and decorators.  These are important things to learn if you&amp;rsquo;re going to be a &lt;a href="http://python.org">Python&lt;/a> developer (or a developer in other languages that let you treat functions in this way), but perhaps belong in a more advanced class.  Next year I might skip over this (i.e. assign it as recommended reading), and just rewrite any of the textbook examples to use regular functions.  On the other hand, it&amp;rsquo;s great exam question material!
Last week, I stepped through the MultiDoc code, typing it in as I went.  I felt there wasn&amp;rsquo;t sufficient time for that this week, so instead opened up the &lt;a href="http://ironpythoninaction.com/download.html">source that Michael provides&lt;/a> and talked through it.  I don&amp;rsquo;t feel this was as successful as the previous week, so I&amp;rsquo;ll go back to typing as much as I can.  I didn&amp;rsquo;t have time to comment the code as I went, but did so after class (for the version of MultiDoc as it stands at the end of the chapter).  The &lt;a href="http://files.me.com/tonyandrewmeyer/5h54xp">commented version&lt;/a> is available under &lt;a href="http://www.opensource.org/licenses/bsd-license.php">the same license as the original&lt;/a>.  I completely skipped going over xmldocumentreader.py since it&amp;rsquo;s fairly generic and well covered in the textbook, and concentrated on documentreader.py and documentwriter.py instead.
Implementing Conway&amp;rsquo;s Game of Life wasn&amp;rsquo;t an exercise that was in the course in previous years (although it would be essentially the same task to do it in Visual Basic), although I have used it some time ago in other courses (and I think I had to do it myself back in my undergraduate years).  It seemed like an exercise that would concentrate on Python programming in general, and just happen to use some .NET classes.  Two of the classes that they would need (Timer and PictureBox) I expect they&amp;rsquo;ll want to use in their projects later on.
I particularly like to cover Timer (whether it&amp;rsquo;s Visual Basic or IronPython) because the students at this point are still working in a procedural fashion, rather than an event-driven one.  That means that their natural instinct when needing to do something like update the grid every X seconds is to have a loop with a time.sleep() call in it.  They then end up with an unresponsive GUI, because they are blocking the main thread.  A timer isn&amp;rsquo;t the only way to deal with this, but it&amp;rsquo;s a good default choice, and covering it explicitly saves me explaining it to many students individually when they come across it (e.g. in project work).
However, most of the class found that they didn&amp;rsquo;t know where to start (and were either so stuck that they really had no idea, or just didn&amp;rsquo;t feel like taking a crack on this particular day).  So I ended up working through the exercise with them (rather like I ended up doing the Quiz the week after that exercise).  I don&amp;rsquo;t mind doing this occasionally, but the students really need to start on their own eventually.  I could perhaps provide a detailed design next year, that clearly showed what functions you would use and how they would be tied together.
I wrote three versions of Life in the end (all extremely similar).  I wrote my &lt;a href="http://files.me.com/tonyandrewmeyer/jswz4s">first one&lt;/a> simply to check how difficult it would be for the students, intending it to be an example answer.  The &lt;a href="http://files.me.com/tonyandrewmeyer/viu321">second&lt;/a> was a small modification of the first, which added a bit more colour to make the display more interesting.  The &lt;a href="http://files.me.com/tonyandrewmeyer/5ejcwh">third&lt;/a> was the one I wrote during class - it&amp;rsquo;s considerably simpler (i.e. not as nice code) than the other version.&lt;/p></description></item><item><title>D520 - Week Four</title><link>http://tonyandrewmeyer.com/2009/08/15/d520-week-four/</link><pubDate>Sat, 15 Aug 2009 16:54:19 +1200</pubDate><guid>http://tonyandrewmeyer.com/2009/08/15/d520-week-four/</guid><description>&lt;p>This week continued from &lt;a href="http://tonyandrewmeyer.wordpress.com/2009/08/09/d520-week-three/">the previous one&lt;/a>, covering Chapter 4 of &lt;a href="http://ironpythoninaction.com">IronPython in Action&lt;/a>.  That meant no new notes, and no new lab exercise.  We basically did two things: worked through the MultiDoc example in Chapter 4, and worked on implementing the Airline lab designed in the previous week.
The first recommended reading for the week was &lt;a href="http://www.joelonsoftware.com/items/2007/12/03.html">Part 1 of Joel Spolsky&amp;rsquo;s &amp;ldquo;Talk at Yale&amp;rdquo;&lt;/a>, wherein he tries to relate his study to his career - the part I hoped they would find interesting was the discussion of &amp;ldquo;geeks&amp;rdquo; versus &amp;ldquo;suits&amp;rdquo;.  The second recommended article was &lt;a href="http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html">Steve Yegge&amp;rsquo;s &amp;ldquo;Code&amp;rsquo;s Worst Enemy&amp;rdquo;&lt;/a>, which is mostly about code bloat.  In retrospect, these might not be the best pairing, since Yegge is always long, and this particular Spolsky article is very long (if you read all three parts).  However, I was again pleasantly surprised to hear that students were actually reading these.
I was right to set aside a whole &amp;rsquo;lecture&amp;rsquo; section of a week for introducing MultiDoc - I used all two hours (with breaks and a late start, actually about 90 minutes) going over the code, and didn&amp;rsquo;t quite manage to finish - I got up to the very last section, but didn&amp;rsquo;t have time to go through adding the menubar/menu items (so I did that in the break and showed the working example afterwards).&lt;/p></description></item></channel></rss>