<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-548613718636739636</id><updated>2012-02-27T11:48:25.390-05:00</updated><category term='space'/><category term='ruby'/><category term='domain model'/><category term='immersive learning'/><category term='education'/><category term='assessment'/><category term='books'/><category term='community'/><category term='gwt'/><category term='entity system'/><category term='object-oriented design'/><category term='youtube'/><category term='design thinking'/><category term='cs345'/><category term='strategic planning'/><category term='software development'/><category term='women in computing'/><category term='evaluation'/><category term='agile'/><category term='bloom&apos;s taxonomy'/><category term='cs315'/><category term='grading'/><category term='gamedev'/><category term='family'/><category term='bowling'/><category term='deus ex'/><category term='uml'/><category term='cs222'/><category term='eec2'/><category term='learning'/><category term='vbc'/><category term='xp'/><category term='usability'/><category term='recordmydesktop'/><category term='teaching'/><category term='linux'/><category term='state pattern'/><category term='xml'/><category term='computer science'/><category term='dinosaurs'/><category term='higher education'/><category term='visualization'/><category term='autobeans'/><category term='ivgda'/><category term='java'/><category term='programming'/><category term='igda'/><category term='csedweek'/><category term='ada lovelace day'/><category term='parenting'/><category term='games'/><category term='slick'/><category term='devede'/><category term='mythtv'/><category term='imagination'/><category term='rubrics'/><category term='game design'/><category term='scrum'/><category term='auralboros'/><category term='theora'/><category term='morgan&apos;s raid'/><category term='planning poker'/><category term='religion'/><category term='dsl'/><category term='unit testing'/><category term='ggj12'/><category term='design'/><category term='vorbis'/><category term='json'/><category term='unity'/><category term='screencast'/><title type='text'>Paul Gestwicki's Blog</title><subtitle type='html'>a blog for reflective practice that was cleverly named after its author</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default?start-index=101&amp;max-results=100'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>109</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-2659611856350667329</id><published>2012-02-05T10:28:00.000-05:00</published><updated>2012-02-05T12:44:05.983-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='vbc'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>Visual representations of team prototyping efforts</title><content type='html'>The most important task for&amp;nbsp;&lt;a href="http://gameandlearn.blogspot.com/2012/01/welcome-from-faculty-mentor.html"&gt;my VBC students&lt;/a&gt;&amp;nbsp;during the first two-week &lt;a href="http://scrummethodology.com/scrum-sprint/"&gt;sprint&lt;/a&gt; was game prototyping. We had six themes in which we worked: geology, biotechnology, collecting/museums, &lt;a href="http://www.childrensmuseum.org/themuseum/powerofchildren/html/index.html"&gt;children making a difference&lt;/a&gt;, trains, and dinosaurs/paleontology.&amp;nbsp;Rather than dictate specific targets for each theme, I decided to allow them to explore any themes they like, using their preferences to gauge where they are finding interest and inspiration. The best of these would be subject to analysis by the whole team, and we would choose a small subset of those to move forward into the next sprint.&lt;br /&gt;&lt;br /&gt;One of the students suggested using a table to track progress, similar to the task board we are using as part of Scrum. Based on this sound advice, I used the day before the start of the sprint to draw the table shown below.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-fXYq9Ag9BNQ/Txi54lMLScI/AAAAAAAAA5s/BBIxYZp0YHQ/s1600/IMG_20120116_104533.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-fXYq9Ag9BNQ/Txi54lMLScI/AAAAAAAAA5s/BBIxYZp0YHQ/s320/IMG_20120116_104533.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Prototype Development Board, version 1.0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;The rows represent the themes, and the columns represent phases of design: planning, production, testing, and done. In this case, "done" meant ready for more careful evaluation by the whole team. The idea was that each student would write his or her name on a sticky note and march it across the board as it is developed.&amp;nbsp;After a few days of prototyping, the board looked like this:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-g6ZLIsum22c/Ty6UQ_Ck4OI/AAAAAAAABFk/d8Z4hyDNmi0/s1600/IMG_20120119_102605.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-g6ZLIsum22c/Ty6UQ_Ck4OI/AAAAAAAABFk/d8Z4hyDNmi0/s320/IMG_20120119_102605.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Prototype Development Board, version 1.1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Then the question arose: what to do with a game that, after testing, needed more work? I advised the student to simply move the sticky note to the appropriate column on the left, and that this was an expected part of the process. It hit me like a ton of bricks: the tabular format assumed a left-to-right progression that was wholly incompatible with &lt;a href="http://paulgestwicki.blogspot.com/2010/11/design-thinking-graphic.html"&gt;a cyclic design process&lt;/a&gt;. I yanked all the sticky notes from the board and revised it into the following:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Vwpu3kW1TQE/Ty6UUSrgOdI/AAAAAAAABFs/C6CvK7xR-9w/s1600/IMG_20120119_104042.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-Vwpu3kW1TQE/Ty6UUSrgOdI/AAAAAAAABFs/C6CvK7xR-9w/s320/IMG_20120119_104042.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Prototype Development Board, version 2.0&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Now, game concepts start in the upper-left &lt;i&gt;ideate&lt;/i&gt; phase and progress clockwise through &lt;i&gt;build&lt;/i&gt;&amp;nbsp;and &lt;i&gt;playtest&lt;/i&gt;. After testing, they either go back into &lt;i&gt;ideate&lt;/i&gt;&amp;nbsp;or, if they are abandoned, they end up in the &lt;i&gt;graveyard&lt;/i&gt;. This presentation clearly captures the cyclic nature of design thinking. Topologically, it's still a table—you could cut it at any of the red lines and spread it into a conventional rows-and-columns approach—but the visualization of the data makes all the difference.&amp;nbsp;Later, we added a &lt;i&gt;shelf&lt;/i&gt;&amp;nbsp;(as in "put it on the shelf") for those concepts that were complete enough for this first pass, those that could be evaluated by the team at the end of the sprint.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-MPy77kZM9ck/Ty6UX6JdNZI/AAAAAAAABF0/RcgRCPdxI_s/s1600/IMG_20120130_144416.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-MPy77kZM9ck/Ty6UX6JdNZI/AAAAAAAABF0/RcgRCPdxI_s/s320/IMG_20120130_144416.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Prototype Development Board, version 2.1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;At the end of the sprint, the 13 students had created 29 prototypes. We spent the afternoon before the end of the sprint playtesting thirteen&amp;nbsp;candidate prototypes. In this case, a simple tabular view was used to list the games, their creators, the number of players, and whether or not any given student had tested it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-PdDUMZg9Dao/Ty6cILLQAUI/AAAAAAAABF8/cIvmkR1KHJs/s1600/IMG_20120126_144343.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-PdDUMZg9Dao/Ty6cILLQAUI/AAAAAAAABF8/cIvmkR1KHJs/s320/IMG_20120126_144343.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the &lt;a href="http://www.mountaingoatsoftware.com/scrum/sprint-review-meeting"&gt;Sprint Review meeting&lt;/a&gt;, seven of these were discussed as fitting within our mission and scope. For the record, the discussion of each candidate should have been &lt;a href="http://en.wikipedia.org/wiki/Timeboxing"&gt;timeboxed&lt;/a&gt;: sitting in comfortable chairs around a fireplace can get people talking longer than necessary to make a decision. Be that as it may, for the first pass, each student was asked to mark which game was their first choice for moving forward.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-SIw3fNw6SZU/Ty6dRAXlEjI/AAAAAAAABGM/_bcCmjsBD_k/s1600/IMG_20120127_100325.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://3.bp.blogspot.com/-SIw3fNw6SZU/Ty6dRAXlEjI/AAAAAAAABGM/_bcCmjsBD_k/s320/IMG_20120127_100325.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;With one exception, the students clustered around three ideas. The one outlier consented to abandoning her first choice, and so with just one iteration, we had selected our three to move forward. In the subsequent &lt;a href="http://www.mountaingoatsoftware.com/scrum/sprint-planning-meeting"&gt;Sprint Planning&lt;/a&gt; meeting, we rearranged personnel so that each team had a mix of students from Computer Science and Arts &amp;amp; Humanities. As I write this post, we are midway through Sprint 2, and the students have explored many variations on the core mechanics of the three prototypes.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-2659611856350667329?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/2659611856350667329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2012/02/visual-representations-of-team.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2659611856350667329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2659611856350667329'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2012/02/visual-representations-of-team.html' title='Visual representations of team prototyping efforts'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-fXYq9Ag9BNQ/Txi54lMLScI/AAAAAAAAA5s/BBIxYZp0YHQ/s72-c/IMG_20120116_104533.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-1669597064272963897</id><published>2012-02-02T13:07:00.000-05:00</published><updated>2012-02-02T13:07:20.578-05:00</updated><title type='text'>Agile, Commitment, and Interviews</title><content type='html'>A few weeks ago, one of my &lt;a href="http://gameandlearn.blogspot.com/2012/01/welcome-from-faculty-mentor.html"&gt;VBC seminar&lt;/a&gt; students had a casual "pre-interview" with a human resources specialist. The conversation went well, and so they began discussing a time for a formal on-site interview. My student reported that almost any afternoon would work, but mornings were not ideal due to our &lt;a href="http://www.mountaingoatsoftware.com/scrum/daily-scrum"&gt;Daily Scrums&lt;/a&gt;, and every other Monday and Friday were out because these were &lt;a href="http://www.mountaingoatsoftware.com/scrum/sprint-review-meeting"&gt;Sprint Review&lt;/a&gt;, &lt;a href="http://www.mountaingoatsoftware.com/scrum/sprint-retrospective"&gt;Sprint Retrospective&lt;/a&gt;, and &lt;a href="http://www.mountaingoatsoftware.com/scrum/sprint-planning-meeting"&gt;Sprint Planning&lt;/a&gt; meetings.&lt;br /&gt;&lt;br /&gt;If I were a human resources specialist from an agile software development company, this would knock my socks off. Not only does this student know the principles of&amp;nbsp;&lt;a href="http://agilemanifesto.org/"&gt;agile software development&lt;/a&gt;&amp;nbsp;and &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;Scrum&lt;/a&gt;, the student also recognizes the critical importance of these meetings to effective collaboration. When I heard this story, I swelled with pride; I hope the student is likewise rewarded with a good offer!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-1669597064272963897?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/1669597064272963897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2012/02/agile-commitment-and-interviews.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1669597064272963897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1669597064272963897'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2012/02/agile-commitment-and-interviews.html' title='Agile, Commitment, and Interviews'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6344536437852219776</id><published>2012-01-31T15:13:00.000-05:00</published><updated>2012-01-31T15:13:22.542-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='auralboros'/><category scheme='http://www.blogger.com/atom/ns#' term='gamedev'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><category scheme='http://www.blogger.com/atom/ns#' term='ggj12'/><title type='text'>Auralboros and Global Game Jam 2012</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;On January 27–29, six of &lt;a href="http://gameandlearn.blogspot.com/2012/01/welcome-from-faculty-mentor.html"&gt;my seminar students&lt;/a&gt; and I participated in &lt;a href="http://globalgamejam.org/"&gt;Global Game Jam 2012&lt;/a&gt;. For those who don't know about the annual event, it is a 48-hour period during which people from around the world collaborate to make digital or analog games. All of the artifacts from the jam are made available under a &lt;a href="http://creativecommons.org/licenses/by-nc-sa/3.0/"&gt;Creative Commons BY-NC-SA-3.0&lt;/a&gt; license. The closest location to us was in &lt;a href="http://globalgamejam.org/node/17107"&gt;Indianapolis&lt;/a&gt;, but we decided to make the trip to &lt;a href="http://globalgamejam.org/node/17332"&gt;Columbus&lt;/a&gt;. This was partially to avoid the congestion due to the start of the pre-SuperBowl parties but also to give us some geographical change: putting ourselves in a completely new place allowed us to treat the whole event as a kind of retreat.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;After a fun &lt;a href="http://www.youtube.com/watch?v=7XL-yY11Vnc"&gt;pre-recorded keynote&lt;/a&gt;&amp;nbsp;and some comments from game designer, author, and GGJ organizer &lt;a href="http://teachingdesign.blogspot.com/"&gt;Ian Schreiber&lt;/a&gt;, the theme was announced:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-X5Dwg0VBI5U/Tygx82lrn4I/AAAAAAAABEc/M661SF-xdrE/s1600/Ouroboros.preview.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="319" src="http://3.bp.blogspot.com/-X5Dwg0VBI5U/Tygx82lrn4I/AAAAAAAABEc/M661SF-xdrE/s320/Ouroboros.preview.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The GGJ2012 Theme&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I love the fact that the theme is a picture with deep symbolic and historical meaning. This is, of course, an &lt;a href="http://en.wikipedia.org/wiki/Ouroboros"&gt;ouroboros&lt;/a&gt;, a word which I only know as a player of &lt;a href="http://boardgamegeek.com/boardgame/10547/betrayal-at-house-on-the-hill"&gt;Betrayal at House on the Hill&lt;/a&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;After everyone had a chance to think for a bit, people began pitching their game ideas. Some were closely tied to literal interpretations of the theme and others to the symbolic meaning of the theme. Many discussions began with the theme but then wandered away. I found the creative challenge to be in capturing the spirit of the theme in a game, especially with respect to the combination of endlessness across generations. Based on this, I pitched an idea for a game with rich audio experience. For the next 42 hours, I worked with Ryan Thompson on what would become known as &lt;i&gt;Auralboros&lt;/i&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-b3IVw8Z5xh4/TyXAQny5RTI/AAAAAAAABBk/1nDwTRkMoKU/s1600/Auralboros+logo1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-b3IVw8Z5xh4/TyXAQny5RTI/AAAAAAAABBk/1nDwTRkMoKU/s320/Auralboros+logo1.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Auralboros Logo by &lt;a href="http://justmightsaveyourlife.blogspot.com/"&gt;Rebecca Austin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;You can &lt;a href="http://www.cs.bsu.edu/homepages/pvg/games/Auralboros/"&gt;play the game on the Web&lt;/a&gt;, or you can go there indirectly &lt;a href="http://globalgamejam.org/2012/auralboros"&gt;through its GGJ entry&lt;/a&gt;. Note that it requires &lt;a href="http://unity3d.com/webplayer/"&gt;Unity Web Player&lt;/a&gt;, which is only available for Windows and Mac OS X, unfortunately. I encourage you to play the game before you read on, lest I give away some of its secrets. There are not many secrets, so you can understand why I'd want to keep them safe.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;We decided to use &lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt; very early in the project. We knew that this would let us easily produce a game that could be hosted on the Web. We also figured that it would be easy to add pizzazz once the core mechanics were done. We invested several hours into the core gameplay &lt;i&gt;sans&lt;/i&gt;&amp;nbsp;audio, and it wasn't until midday on Saturday that we realized that Unity's audio API is practically non-existent. To be clear, you can very easily play back audio—including 3D audio—within Unity, but it does not support synthesis. In the end, after painful struggles with my laptop to try to get full-duplex audio to work, we ended up using &lt;a href="http://musescore.org/"&gt;MuseScore&lt;/a&gt; to drop notes onto the staff and then export WAV files. I had hoped to test the game with both &lt;a href="http://en.wikipedia.org/wiki/Chromatic_scale"&gt;chromatic&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Pentatonic"&gt;pentatonic&lt;/a&gt; scales, but we never got that far.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I had been looking for an excuse to practice some of the tips in &lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;Clean Code&lt;/a&gt;, but the truth is that I don't program anywhere near as much as I would like to. Working with Ryan provided a great opportunity. This was also my first time &lt;a href="http://www.extremeprogramming.org/rules/pair.html"&gt;pair-programming&lt;/a&gt;. I've been having my students pair-programming for years, but I've always been forced into a "mentor" role rather than a "peer" role. For Auralboros, Ryan and I were simply working together as a team, and I'm happy with the results. He caught a few of my errors, and I caught a few of his. I definitely took the lead on some of the more abstract software design ideas, but none of them were so wild as to be outside of his understanding once we had them down.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;We had the core game experience working by early Sunday, and so we turned our attention to beautification. I knew from early in the design that I wanted to have feedback based on a player's matching their own sounds. That is, Auralboros does not force you to do anything specific with it, but if you make yourself a rhythm game, then you get positive feedback. Our first attempt involved counting right and wrong notes, but after this failed, I realized that what we needed was a physics simulation. We created a "gravity" value as a constant downward acceleration. Each time you get a note right (&lt;i&gt;i.e. &lt;/i&gt;you hit that key again when its cube is at the top of the screen), you get a boost to upward acceleration. This affects a velocity, which in turn affects a point. We map the point first through a series of greyscale values for the background, and then for increasing opacity on the two feedback orbs. After capping acceleration and velocity, this worked like a charm. Along the way,&amp;nbsp;&lt;a href="http://justmightsaveyourlife.blogspot.com/"&gt;Rebecca Austin&lt;/a&gt; joined our efforts, designing our logo and textures on the two feedback orbs.&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xTT4kcC8tKM/TyhEo4Ot3sI/AAAAAAAABEk/5MPFyzSX6sQ/s1600/IMG_20120129_144532.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-xTT4kcC8tKM/TyhEo4Ot3sI/AAAAAAAABEk/5MPFyzSX6sQ/s320/IMG_20120129_144532.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Auralboros Team&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;For the most part, we kept to the headphones as we developed the game. It was always fun when someone would ask to see the latest build, leading to strange sounds and usually laughter filling the room, though I don't blame anyone for being a bit miffed at the distraction...&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-PE26SngV4sw/TyXAUk0LtcI/AAAAAAAABBs/CYE719w1wn4/s1600/Josh's+Reaction+to+Auralboros1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-PE26SngV4sw/TyXAUk0LtcI/AAAAAAAABBs/CYE719w1wn4/s320/Josh's+Reaction+to+Auralboros1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://jdhurst.blogspot.com/"&gt;Josh&lt;/a&gt;'s reaction to Auralboros during GGJ, as captured by &lt;a href="http://justmightsaveyourlife.blogspot.com/"&gt;Rebecca Austin&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A few hours into development, Ryan and I started using &lt;a href="https://trello.com/"&gt;Trello&lt;/a&gt; to manage our tasks. I had read about this tool and recommended it to others, although I had never quite found a use for it myself. This was a perfect application, and it helped that sharing between two Google Accounts was seamless. We had three sections to our board: &lt;i&gt;defects,&lt;/i&gt;&amp;nbsp;for those things that were broken; &lt;i&gt;to do&lt;/i&gt;, for features we wanted to add but could live without; and &lt;i&gt;paulish&lt;/i&gt;&amp;nbsp;for ideas that would make the player experience more glossy. There was only one &lt;i&gt;to do&lt;/i&gt;&amp;nbsp;item that we didn't have time to add, and that was having the cube halos fade in and out based on distance to the apex. We finished our game about an hour before the deadline, so we may have been able to squeeze this in, but it would have meant re-exporting and uploading, and that was just not worth it. The GGJ servers were getting hit pretty hard.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I think it was good for all of us Ball State folks to have a classic &lt;a href="http://en.wikipedia.org/wiki/Research_I_university"&gt;R1&lt;/a&gt;&amp;nbsp;campus experience as well. We were at two different buildings for the event. On Friday, Parking was hard to find, and we walked around the building once due to poor signage. It happened to be a teaching building, and it was cluttered and musty. The classroom in which we met had grimy walls and inadequate blackboards. We did appreciate that we could lean back in the chair-desks, which would make it easier to rest during boring lectures. The next day, we were in the &lt;a href="http://ohiounion.osu.edu/"&gt;OSU Union&lt;/a&gt;—not a teaching space, but a place for events, meetings, and chats with alumni and benefactors. It was absolutely gorgeous, my favorite part being the totally gratuitous projector-that-descends-from-the-ceiling in our meeting room.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Special thanks goes out to Brian Orchosky, the site coordinator: if you see him, buy him a drink.&amp;nbsp;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-dbVl5mG-wBg/TyhI4t0C2UI/AAAAAAAABE0/s7XbFt2MFPQ/s1600/IMG_20120129_161022.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-dbVl5mG-wBg/TyhI4t0C2UI/AAAAAAAABE0/s7XbFt2MFPQ/s320/IMG_20120129_161022.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Site coordinator Brian Orchosky&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Global Game Jam 2012 was the largest game jam ever, and it was great to be a part of it. You can check out all 2000+ games at the &lt;a href="http://globalgamejam.org/games"&gt;GGJ Web site&lt;/a&gt;. Note that you can search by site, so you might want to take a look at &lt;a href="http://globalgamejam.org/og/games/17332/list"&gt;the other games created in Columbus&lt;/a&gt; or in a city near you.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YR_yxPYc55E/TyhHSQBH3DI/AAAAAAAABEs/FEifjY2u1sI/s1600/IMG_20120129_163658.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-YR_yxPYc55E/TyhHSQBH3DI/AAAAAAAABEs/FEifjY2u1sI/s320/IMG_20120129_163658.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Ball State University contingent in Columbus at the end of GGJ 2012&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;It was a great event, and we all enjoyed the weekend together. Thanks to Phil and Kristen for stopping in to see us, even if you couldn't participate in the whole jam.&amp;nbsp;The only real downer was that when I got directions to the &lt;a href="http://jenisicecreams.com/"&gt;Jeni's Splendid Ice Cream&lt;/a&gt;&amp;nbsp;on our route home, it turned out to be the one in the &lt;a href="http://www.northmarket.com/"&gt;North Market&lt;/a&gt;, which was closed by the time we got there. I suppose we'll just have to go back sometime.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6344536437852219776?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6344536437852219776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/auralboros-and-global-game-jam-2012.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6344536437852219776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6344536437852219776'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/auralboros-and-global-game-jam-2012.html' title='Auralboros and Global Game Jam 2012'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-X5Dwg0VBI5U/Tygx82lrn4I/AAAAAAAABEc/M661SF-xdrE/s72-c/Ouroboros.preview.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7605892385816325861</id><published>2012-01-30T12:02:00.001-05:00</published><updated>2012-01-30T12:02:28.454-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='vbc'/><category scheme='http://www.blogger.com/atom/ns#' term='immersive learning'/><title type='text'>135 Hours</title><content type='html'>Last Friday marked three weeks at the &lt;a href="http://www.bsu.edu/vbc"&gt;Virginia B. Ball Center for Creative Inquiry&lt;/a&gt;. The students and I have been working together in roughly an 8–4 schedule. In the first week, I ran a workshop on games and learning, and the next two weeks were run as a &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;Scrum&lt;/a&gt;-style sprint. At the end of these three weeks, the students have produced some good prototypes, sufficient for us to have chosen three to carry forward; more importantly for the learning process, they produced many, many more prototypes that are not being carried forward.&lt;br /&gt;&lt;br /&gt;The students worked roughly nine hours a day for fifteen days. Given that a fifteen-week, three-credit course should involve nine effort-hours per week, the students' effort has been equivalent to a complete conventional three-credit course. Unlike a conventional course, my students have had practically limitless space, budget, and mentor availability. The only structural benefit that a longer class would have is more calendar days to consider the concepts, but I posit that the number of distractions that occur in a longer period far outweigh the benefits. Therefore, the result of my students' effort on Friday in terms of both understanding and artifact production can be considered&amp;nbsp;the best one could possibly hope for in a three credit-hour course&lt;i&gt;.&lt;/i&gt;&amp;nbsp;Yet, we still feel like we have barely scratched the surface of the conceptual space: the prototypes we created are still very rough and will require significant iteration prior to engaging in final production.&lt;br /&gt;&lt;br /&gt;This should not come as a surprise to anyone who understands game design and learning: it's only been three weeks! One would never expect that after a three-week intensive study, a novice would transform into a great painter, or be able to work as an architectural consultant, or to commercially compete in any creative design field.&amp;nbsp;Three weeks of intensive study just gets you to the point where you can start to understand how far down the rabbit hole goes, how much there is to understand and how much practice you will need to advance.&lt;br /&gt;&lt;br /&gt;This stands in stark contrast to the pressures of &lt;a href="http://cms.bsu.edu/Academics/UndergraduateStudy/BeyondtheClassroom/ImmersiveLearning.aspx"&gt;immersive learning&lt;/a&gt;, in which we faculty are asked to guide students through a process to create useful products for or with community partners. Keep in mind that I am an advocate of immersive learning, having written several papers and a book chapter on its benefits to Computer Science and interdisciplinary education. However, I also know that if we had taken any of these prototypes and started production halfway into our three weeks together, it would have been painfully premature. It's true that we could have made &lt;i&gt;something&lt;/i&gt;&amp;nbsp;by switching all our resources to production rather than understanding, but it certainly would not have resulted in anything academically substantial. We know that we can make a Bejewelled clone and slap a quiz on it, and many people will applaud this as "educational game design," but we're trying to do something much more significant.&lt;br /&gt;&lt;br /&gt;I am eager to see how the team advances through this next sprint, as our focus narrows and we collaborate on three design. The goal is that two weeks from now, one of these will have risen to the top, and we can move into production, with executable releases every two weeks thereafter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7605892385816325861?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7605892385816325861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/135-hours.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7605892385816325861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7605892385816325861'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/135-hours.html' title='135 Hours'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7404149830524150571</id><published>2012-01-16T08:34:00.001-05:00</published><updated>2012-01-16T08:34:55.894-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vbc'/><title type='text'>Moving in</title><content type='html'>The week before the semester started, I moved into &lt;a href="http://bsu.edu/vbc"&gt;my temporary office&lt;/a&gt; in the &lt;a href="http://www.bsu.edu/directory/buildings/default.asp?buildingcode=KC"&gt;Kitselman Center&lt;/a&gt;. I found &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/ComputerScience/FacultyandStaff/MeadowsMary.aspx"&gt;a department systems administrator&lt;/a&gt; so that I could borrow a cart to haul my workstation, books, plants, and miscellany from the fourth floor down to my wife, waiting by the loading dock with our van. I took the cart from the third floor up the elevator to the fourth and loaded it up, and when I returned to the elevator, I found this.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-q_MI2y2CMrs/TxQlkw2RSWI/AAAAAAAAA2I/aHa0HbcVNuM/s1600/IMG_20120103_094450.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-q_MI2y2CMrs/TxQlkw2RSWI/AAAAAAAAA2I/aHa0HbcVNuM/s320/IMG_20120103_094450.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Here's the whole scene.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-IqevV_cqFqY/TxQlys98bbI/AAAAAAAAA2Q/KVwrCc761SE/s1600/IMG_20120103_094505.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-IqevV_cqFqY/TxQlys98bbI/AAAAAAAAA2Q/KVwrCc761SE/s320/IMG_20120103_094505.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Unsure of what to do, I walked downstairs to tell my wife we would be indefinitely delayed. On the ground floor, the elevator doors were open, and there was a technician standing atop the elevator car, tinkering with the system. He told me it would be quite some time before he was done, but he offered to help me if my need was urgent. In about fifteen minutes, he was able to bring the elevator up to four and back down for me. I've never had any interaction with &lt;a href="http://murphyelevator.com/"&gt;Murphy Elevator Company&lt;/a&gt; technicians before, but this gentleman was helpful and polite, and we had a nice chat about elevator maintenance on the way down.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My wife helped me load the van, and we drove the ~2.5 miles to the Kitselman Center to unload. Here's a glimpse of my office for this semester.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-uXSwxOlFvHo/TxQnAtMaEpI/AAAAAAAAA2Y/nrCwnUutcIo/s1600/IMG_20120103_101707.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-uXSwxOlFvHo/TxQnAtMaEpI/AAAAAAAAA2Y/nrCwnUutcIo/s320/IMG_20120103_101707.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not too shabby. To the right is a gas fireplace. Yes, that's right. On Friday, I walked to work in the snow, and when I got there, took off my boots and set them by the fireplace. &lt;i&gt;In my office&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7404149830524150571?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7404149830524150571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/moving-in.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7404149830524150571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7404149830524150571'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/moving-in.html' title='Moving in'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-q_MI2y2CMrs/TxQlkw2RSWI/AAAAAAAAA2I/aHa0HbcVNuM/s72-c/IMG_20120103_094450.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7892421982486011817</id><published>2012-01-08T09:05:00.003-05:00</published><updated>2012-01-08T14:35:14.883-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='vbc'/><title type='text'>Anticipating tomorrow</title><content type='html'>This Spring semester, I am a fellow with the &lt;a href="http://www.bsu.edu/vbc"&gt;Virginia B. Ball Center for Creative Inquiry&lt;/a&gt;. Yesterday I &lt;a href="https://plus.google.com/103828843747057637757/posts/QTrrLYWE1Hc"&gt;made public&lt;/a&gt; &lt;a href="http://gameandlearn.blogspot.com/"&gt;a blog&lt;/a&gt; that my students and I will use to write about the experience, and &lt;a href="http://gameandlearn.blogspot.com/2012/01/welcome-from-faculty-mentor.html"&gt;my post&lt;/a&gt; there explains the context. In a draft of that post, I had two paragraphs about how I got here, but this topic seemed more appropriate for this blog. The VBC blog is for the project; this one is for me to reflect. So, without further ado, here's a reflection of how I got to this point as a Computer Science professor at &lt;a href="http://www.bsu.edu/"&gt;Ball State&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My first Summer here, I led a graduate seminar on game engine programming. I have always been one to tinker with game development ideas, though at that point, I had not finished and published any game-related projects. I was and am still interested in object-oriented design, especially design patterns, and so I used the Summer to investigate the relationship between classic software design patterns and game development. Looking back, this was my first experience with pure project-based learning, although I would not have known to call it social constructivism at the time; my intuition told me that if I got a bunch of interested grad students together for a few weeks with an interesting topic, we would all learn something. And we did. In fact, it was this Summer that I developed the essential components of &lt;a href="http://www.cs.bsu.edu/homepages/pvg/games/eeclone/"&gt;EEClone&lt;/a&gt;, my case study for design patterns in games.&lt;br /&gt;&lt;br /&gt;I continued this line of inquiry with a group of undergraduates and my colleague, &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/ComputerScience/FacultyandStaff/SunFuShing.aspx"&gt;Fu-Shing Sun&lt;/a&gt;. Each of the students developed their own game based on the design patterns that I introduced. I am still proud of the systems that these students created. Although the game designs were primitive, the software architectures were beautiful. Of course, software architecture was the focus of the course, so this is to be expected.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.bsu.edu/honors"&gt;Honors College&lt;/a&gt; was supportive of our desire to investigate multidisciplinary game design and development. &amp;nbsp;For two semesters, Fu-Shing and I team-taught a pair of courses, one on game design and one on game programming. The first semester, we were assisted by graduate student &lt;a href="https://plus.google.com/115929986212422493501/posts"&gt;Ben Dean&lt;/a&gt;, and so we were able to create three small multidisciplinary teams, each mentored by one of us. The three games created out of this experiment were quite good, capable of being polished and released although none of the students were interested in continuing with them past the end of the semester. The other semester of this experiment, we created one larger team working in two parallel units: design and programming. This allowed us to focus each unit's attention on mastering their side, but the results were predictable in retrospect. Because the groups were working separately, there were several communication problems, and no amount of content expertise can overcome the challenges of bad communication patterns. It was a good learning experience for all involved, but the quality of the end result did not scale up with the number of people on the team.&lt;br /&gt;&lt;br /&gt;These two semesters provided me with a great experience, and we took the opportunity to write a few papers about our experiences. My future direction for this line of inquiry was unclear, but I knew I wanted to be more involved in both the design and development sides of the class. It was around this time that I met&amp;nbsp;History Professor &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/History/FacultyandStaff/MorrisRonald.aspx"&gt;Ronald Morris&lt;/a&gt;, who convinced me that there were ample opportunities in history education game development for elementary school students. This led to the &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; project, which I have blogged about extensively; &lt;a href="http://paulgestwicki.blogspot.com/2011/06/morgans-raid-postmortem.html"&gt;the postmortem&lt;/a&gt; is a good starting place if you're new here. As I've mentioned before, the Spring semester of Morgan's Raid—during which I led a team of ten students in a studio learning experience of finishing the game design and development—was the most rewarding activity of my professional career.&lt;br /&gt;&lt;br /&gt;That's my reflective summary of how I got here. &amp;nbsp;Many semesters, proposals, and research papers later, I feel as ready as I can be to mentor my team this Spring. I feel like all of these previous experiences have led me to the VBC, a dramatic next step for my teaching and my scholarship.&amp;nbsp;My mild nervousness about an untested team is tempered by the fact that I know half of them quite well, and the rest have shown themselves to be bright, polite, and motivated students. I have planned a workshop on games, fun, and learning for the first week of the semester, and I am eager to see how the team engages with the readings, discussions, and activities. On Tuesday, we meet with our community partner, the &lt;a href="http://childrensmuseum.org/"&gt;Indianapolis Children's Museum&lt;/a&gt;, to sort out the details of the project with respect to schedules, expectations, and capabilities. This will help direct the discussions through the rest of the week, and after that, I switch from teacher to coach, handing the reins to the team of students.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7892421982486011817?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7892421982486011817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/anticipating-tomorrow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7892421982486011817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7892421982486011817'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/anticipating-tomorrow.html' title='Anticipating tomorrow'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3013644140829066609</id><published>2012-01-05T19:41:00.002-05:00</published><updated>2012-01-05T19:41:50.218-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Board games with young kids</title><content type='html'>&lt;div&gt;I was discussing board games for kids with a colleague yesterday, and I sent her a list of recommendations. It struck me that this may be useful to others as well, so I've decided to provide the list here, with some extra details.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To give some context, these are played with my wife and nearly-five-year-old son, Alex. We have been playing some of these games since Christmas 2011, when he was in his late 3's. I have provided links to&amp;nbsp;&lt;a href="http://boardgamegeek.com/"&gt;Board Game Geek&lt;/a&gt;, where you can find good summaries, discussions, reviews, and images of the games. Rather than repeat that information here, I've provided some tips on how we have modified the game to make it more fun for our family.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://boardgamegeek.com/boardgame/14441/kinder-bunnies-their-first-adventure"&gt;Kinder Bunnies&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This is a kid-friendly version of &lt;a href="http://boardgamegeek.com/boardgame/3699/killer-bunnies-and-the-quest-for-the-magic-carrot"&gt;Killer Bunnies and the Quest for the Magic Carrot&lt;/a&gt;. It comes with two decks, blue being the basic one and yellow adding a bit more complexity. This helped scaffold my son's learning, as he was able to get comfortable with the blue before getting into the yellow. He does not really read them; he knows the cards by their pictures.&lt;/div&gt;&lt;div&gt;We did make one significant change to the rules. The game contains Safety Hazard cards, analogous to weapons in Killer Bunnies. Each has a numeric value, ranging from 1 to 10, and the severity of the hazard clearly scales with this number. The rulebook recommends that to overcome a Safety Hazard, one should roll the five 10-sided dice and try to match the number. This means that all the Safety Hazards are mechanically equivalent, which is rather dull. We imported the mechanics from Killer Bunnies instead, rolling a 12-sided die and considering the hazard overcome if the roll exceeds the hazard's value. This is much more fun, though you will have to supply your own 12-sided die.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://boardgamegeek.com/boardgame/822/carcassonne"&gt;Carcassonne&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This is a great game all around, and I was a little surprised at how well and quickly Alex learned the rules. His strategies are rather simple, and he frequently makes moves just to entertain himself rather than for points—but the point is to have fun, so it's no big deal. We also have the &lt;a href="http://boardgamegeek.com/boardgameexpansion/15158/carcassonne-the-princess-the-dragon"&gt;Princess and Dragon expansion&lt;/a&gt;, which he tends to like to use because it has an awesome red wooden dragon. However, we have noticed that with these added bits, he has a harder time focusing on the rules: I think it's more complexity than he has patience for. Still, he does love to eat meeples with that dragon, and can you blame him?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://boardgamegeek.com/boardgame/1219/the-amazeing-labyrinth"&gt;The Amazing Labyrinth&lt;/a&gt;&lt;/div&gt;&lt;div&gt;We have fun with this one, although my son sometimes has trouble picking out moves. There is still a good balance, however, as we let him use the "kids" rule (all six treasure cards face-up) while my wife and I use the "adult" rule (only one treasure face-up at a time).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://boardgamegeek.com/boardgame/5697/reiner-knizias-amazing-flea-circus"&gt;Reiner Knizia's Amazing Flea Circus&lt;/a&gt;&lt;/div&gt;&lt;div&gt;We've been able to enjoy this game for some time, but I feel like more recently the strategies have become more apparent to Alex. &lt;a href="http://paulgestwicki.blogspot.com/2011/03/day-my-son-subtracted.html"&gt;As I wrote before&lt;/a&gt;, we put it away for a few months, but now he has no trouble counting the dogs as two points and the cats as one. Perhaps most importantly, you can use a plastic dog from this game when you play &lt;a href="http://boardgamegeek.com/boardgame/10547/betrayal-at-house-on-the-hill"&gt;Betrayal at House on the Hill&lt;/a&gt;, and the cats too if it's the right haunt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://boardgamegeek.com/boardgame/2653/survive-escape-from-atlantis"&gt;Survive!&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This is a game from my wife's youth, and we have the 1982 printing. I have not played the 2011 re-release, but looking over the pics on Board Game Geek, it looks like the same game. When we play with Alex, we ignore the point values on the bottom of the guys and focus on getting them off the island. That is, we treat each person as one point. We have never actually tried to play the "full" game with him, but I suspect this would be frustrating.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://boardgamegeek.com/boardgame/13/the-settlers-of-catan"&gt;Settlers of Catan&lt;/a&gt;&lt;br /&gt;This one is the most recently added, a bit of a risk as we were looking through the cabinet for something Alex might enjoy. He requires a bit of coaching on effective road placement and initial settlement placement, but he really enjoys it, especially building new things. Since he is not a strong reader, we also have to help with development cards. We orient all of the number discs to face him, and this provides good practice at number recognition; he's known his numbers for some time but still gets confused between '6' and '9', as well as '11' and '12'. When Alex rolls the dice, he has to count all the pips to find the total, and I'm hoping that with repeated play he will start to see the patterns more easily.&amp;nbsp;Despite the extra effort it takes us to help him play, we all tend to enjoy it.&lt;br /&gt;&lt;br /&gt;Happy gaming!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3013644140829066609?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3013644140829066609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/board-games-with-young-kids.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3013644140829066609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3013644140829066609'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/board-games-with-young-kids.html' title='Board games with young kids'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-8501119906876487330</id><published>2012-01-05T10:19:00.001-05:00</published><updated>2012-01-05T10:20:59.113-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='assessment'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><title type='text'>La Fin du CS222: An Assessment in Three Acts</title><content type='html'>In &lt;a href="http://paulgestwicki.blogspot.com/2010/12/cs222-what-we-learned-and-how-we.html"&gt;December 2010&lt;/a&gt;, I wrote about an experimental approach for assessing a course's effectiveness, using convergent and divergent exercises and mind maps as a replacement for traditional written exams. Since then I have used this approach a &lt;a href="http://paulgestwicki.blogspot.com/2011/05/what-they-think-they-learned-spring.html"&gt;few&lt;/a&gt;&amp;nbsp;&lt;a href="http://paulgestwicki.blogspot.com/2010/12/cs315-what-we-learned.html"&gt;times&lt;/a&gt;, with only minor alterations.&lt;br /&gt;&lt;br /&gt;For last Fall's CS222: Advanced Programming final, I was inspired by &lt;a href="http://en.wikipedia.org/wiki/La_Fin_du_Monde_(beer)"&gt;a recent purchase&lt;/a&gt;&amp;nbsp;to present the assessment to my students as &lt;i&gt;La Fin du CS222: An Assessment in Three Acts&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Act I, Scene I&lt;br /&gt;Each student constructed a mind map on the topic of&amp;nbsp;&lt;i&gt;programming&lt;/i&gt;. They had done the same exercise on the very first day of the semester.&lt;br /&gt;&lt;br /&gt;Act I, Scene II&lt;br /&gt;In this scene, I distributed to the students their original mind maps back to them. The main source of conflict in this scene was that it was the final assessment of how well I had learned their names.&lt;br /&gt;&lt;br /&gt;Act I, Scene III&lt;br /&gt;Each student wrote an essay comparing and contrasting the two mind maps.&lt;br /&gt;&lt;br /&gt;The essays were generally well-written and insightful, especially those where there was not much change. One student commented, "Now I know that this random assignment we did at the beginning of the year was not so much for you but for us." This is great evidence of metacognition, that the student has learned to think about the value of reflection&amp;nbsp;&lt;i&gt;to himself&lt;/i&gt;&amp;nbsp;rather than to some arbitrary authority.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Act II, Scene I&lt;br /&gt;I hung my giant, flip-chart-sized sticky notes and told the students that we were going to list, in twenty minutes, all of the things we learned this semester that were somehow connected to the course. I briefly explained that this was a divergent thinking exercise, meaning that anything could be listed and there would be no debate or criticism at this stage. We ended up with 119 items, which may be a new record.&lt;br /&gt;&lt;br /&gt;Act II, Scene II&lt;br /&gt;I asked the students whether there were any items on the list that should be consolidated. Many suggestions were made, though not all were chosen by the majority. After this process, we were left with 113 items.&lt;br /&gt;&lt;br /&gt;Act II, Scene III&lt;br /&gt;Each student was given four stickers, and they were asked to place these by the four items that they found most significant. It was made explicitly clear that significance was subjective.&lt;br /&gt;&lt;br /&gt;Act II, Scene IV&lt;br /&gt;We identified at the top elements by vote, which are given in the table below. I have provided clarifying links for the curious.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Votes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Object-oriented design&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.oracle.com/technetwork/java/codeconv-138413.html"&gt;Coding conventions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683"&gt;Effective Java&lt;/a&gt;&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test-Driven Development&lt;/a&gt;&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://blog.mountaingoatsoftware.com/advantages-of-the-as-a-user-i-want-user-story-template"&gt;User Stories&lt;/a&gt;&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt;&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Act II, Scene V&lt;br /&gt;The students were challenged to write an essay about what they actually did to learn these items that the community had chosen as the most significant.&lt;br /&gt;&lt;br /&gt;I believe that it is important to help students understand the connection between what they personally do and what they have learned. Last year, &lt;a href="http://paulgestwicki.blogspot.com/2010/12/cs222-what-we-learned-and-how-we.html"&gt;the first time&lt;/a&gt; I did an exercise like this, we did another round of divergence and convergence to determine what actions helped learning. I was not very happy with the results because they became too generic: I was hoping for more specifics than "the project," for example. Unfortunately, most of the essays were written in generalities rather than specifics. In part, I think this is human nature: if we write in specifics, we make statements for which we are accountable and that may be shown to be false. Writing in established generalities, such as "I learned a lot by working on a team," is certainly easier than identifying specific times, places, and situations with the team that led to learning about a particular topic. I realize now that, if I want the students to write about specifics, I need to provide more explicit guidance to this end. I also need to narrow the focus: taking the top ~10% of items is too many: even though students were told they could pick from among the eight listed above, many wrote vague statements about all eight or a majority of them, as if they would get points for coverage rather than quality.&lt;br /&gt;&lt;br /&gt;Some of the essays did contain interesting insights. My favorite comment was on the hassles of merging in Mercurial. We had previously discussed in class how tool-supported merging could be frustrating, but that it was a necessary evil—and actually not evil at all compared to the manual, ad hoc alteratives. This student identified how the frustrations of merging made him focus on learning encapsulation, because he realized that the better encapsulated and more modular his team's system was, the fewer times they would have to merge. Excellent!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Act III, Scene I&lt;br /&gt;Cinnamon Rolls, courtesy of my lovely wife.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-8501119906876487330?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/8501119906876487330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/la-fin-du-cs222-assessment-in-three.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8501119906876487330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8501119906876487330'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2012/01/la-fin-du-cs222-assessment-in-three.html' title='La Fin du CS222: An Assessment in Three Acts'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3947560716339458320</id><published>2011-12-22T12:54:00.000-05:00</published><updated>2011-12-22T15:08:00.095-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gamedev'/><category scheme='http://www.blogger.com/atom/ns#' term='assessment'/><category scheme='http://www.blogger.com/atom/ns#' term='cs315'/><title type='text'>CS315 Final Assessment: Games about Beneficence</title><content type='html'>For the last eight weeks of the Fall semester, the eleven students in my CS315 Game Programming class had been working as one team, following &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;Scrum&lt;/a&gt; to complete a version of&lt;a href="https://sites.google.com/site/morgansraidgame/"&gt; Morgan's Raid&lt;/a&gt; implemented entirely in &lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt;. The team worked very well together,&lt;a href="http://paulgestwicki.blogspot.com/2011/10/new-teams-first-daily-scrum.html"&gt; as I have written about previously&lt;/a&gt;. At the end of the semester, they had produced a reasonable facsimile of the Morgan's Raid release, given our constraints.&lt;br /&gt;&lt;br /&gt;Regardless of their collective accomplishments, I still have to assign individual grades to each student, and I take this responsibility seriously. We used &lt;a href="http://paulgestwicki.blogspot.com/2011/11/rubric-based-self-and-peer-evaluation.html"&gt;self- and peer-assessments&lt;/a&gt; during our four two-week sprints, and these helped me approximate students' individual contributions to the project. However, I still felt that I was missing hard, individualized evidence, and so I presented my students with a novel form of final assessment that we called &lt;i&gt;Mini Ludum Dare&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ludumdare.com/"&gt;Ludum Dare&lt;/a&gt; is the Rapid Game Development Community, most well known for hosting regular 48-hour game development competitions. Each competition begins with the announcement of a theme, and all games must incorporate that theme. For our Mini Ludum Dare, I told the students to spend no more than four hours on digital prototypes, my rationale being that I wanted to see what they could get done in about a half-day's work. This seems like an appropriate assessment, that at the end of a game programming class, one can individually produce a proof-of-concept for an idea. Because I was grading strictly on technical issues, I also provided a "default" game design that students could use if they were not feeling inspired by the theme. They were allowed to complete the prototype in Unity or &lt;a href="http://slick.cokeandcode.com/"&gt;Slick&lt;/a&gt;, these being the two primary technologies of instruction for the semester.&lt;br /&gt;&lt;br /&gt;The theme was "Beneficence." This can be interpreted &lt;a href="http://en.wikipedia.org/wiki/Beneficence"&gt;in a few ways&lt;/a&gt;, the most obvious connection being to &lt;a href="http://en.wikipedia.org/wiki/Beneficence_(statue)"&gt;the statue&lt;/a&gt; who also graces&lt;a href="http://bsu.edu/"&gt; Ball State University&lt;/a&gt;'s logo.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Beneficence072711b.jpg/800px-Beneficence072711b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Beneficence072711b.jpg/800px-Beneficence072711b.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;During our university-assigned final exam slot, the students each had a few minutes to show off their creations. It was inspiring to see how creative our Computer Science majors could be! The Java-based solutions are &lt;a href="http://www.cs.bsu.edu/homepages/pvg/misc/slick_jws_tutorial.php"&gt;a bit tricky to get online&lt;/a&gt;, but with some coaxing (and peer pressure from the community on the department's Facebook page), the Unity-based games are online. Here are some links:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.praxistek.com/bennyjump/WebPlayer.html"&gt;&lt;span id="goog_1217140561"&gt;&lt;/span&gt;Jumpin' Beneficence&lt;span id="goog_1217140562"&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;by Jason Buie&lt;/li&gt;&lt;li&gt;&lt;a href="http://sputn1k.dyndns.org/ZombBenny"&gt;ZombBenny&lt;/a&gt;&amp;nbsp;by Thomas Mast&lt;/li&gt;&lt;li&gt;&lt;a href="http://sputn1k.dyndns.org/KnowledgeHunt"&gt;Beneficence: The Hunt for Knowledge&lt;/a&gt; by Phil Wingham&lt;/li&gt;&lt;li&gt;&lt;a href="http://sputn1k.dyndns.org/BennyTheKilla"&gt;Beneficence the Killa&lt;/a&gt;&amp;nbsp;by Craig Bavender&lt;/li&gt;&lt;li&gt;&lt;a href="http://sputn1k.dyndns.org/WhackABenny"&gt;Whack-a-Benny&lt;/a&gt; by Matt Waters&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;A pretty amazing selection of game prototypes built in only a few hours each. Nice work, gentlemen!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3947560716339458320?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3947560716339458320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/cs315-final-assessment-games-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3947560716339458320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3947560716339458320'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/cs315-final-assessment-games-about.html' title='CS315 Final Assessment: Games about Beneficence'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7799096428755527316</id><published>2011-12-22T11:28:00.000-05:00</published><updated>2011-12-22T11:28:04.910-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bloom&apos;s taxonomy'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><category scheme='http://www.blogger.com/atom/ns#' term='igda'/><title type='text'>Bloom's Taxonomy of the Cognitive Domain</title><content type='html'>Two nights ago, I gave a presentation at the 2011 &lt;a href="http://www.meetup.com/IGDA-Indianapolis/events/44009852/"&gt;IGDA Indianapolis Charity Toy Drive&lt;/a&gt;, a great event that I hope becomes an annual tradition. My presentation was entitled &lt;i&gt;Fun, Learning, Games, and Responsible Design (in under 20 minutes).&amp;nbsp;&lt;/i&gt;I gave an overview about the relationship between games and learning, and my core message was a rallying cry, asking designers to seriously consider what players learn by playing their games. My perspectives on this are heavily influenced by &lt;a href="http://www.raphkoster.com/"&gt;Raph Koster&lt;/a&gt;'s work, and as I told the crowd, every designer should read &lt;a href="http://www.theoryoffun.com/"&gt;Theory of Fun for Game Design&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I generally don't post slides from my talks because the slides don't stand alone: you could not reconstruct the message by only looking at the slides. I agree with &lt;a href="http://martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;, &lt;a href="http://martinfowler.com/bliki/Slideument.html"&gt;that "slideuments" are flawed by definition&lt;/a&gt;. However, there was one slide from my talk that really seemed to resonate with the crowd. I based much of my presentation on applications of &lt;a href="http://en.wikipedia.org/wiki/Bloom's_Taxonomy"&gt;Bloom's Taxonomy of the Cognitive Domain&lt;/a&gt; toward gameplay experiences. Wikipedia has &lt;a href="http://en.wikipedia.org/wiki/File:BloomsCognitiveDomain.svg"&gt;a nice, simple diagram that presents the taxonomy&lt;/a&gt;, and I have used this in presentations and handouts before---but this was always when using &lt;a href="http://www.openoffice.org/"&gt;OpenOffice.org&lt;/a&gt; or &lt;a href="http://www.libreoffice.org/"&gt;LibreOffice&lt;/a&gt; directly. For the IGDA presentation, I needed a PDF, and something about the conversion to PDF left the diagram quite jaggy. To solve my problem, I made my own variant on &lt;a href="http://en.wikipedia.org/wiki/File:BloomsCognitiveDomain.svg"&gt;the public domain image&lt;/a&gt; within LibreOffice, and it looks a little something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--iIKBr8cNH8/TvNYvY745XI/AAAAAAAAAyQ/EZvfoeAYX2A/s1600/bloom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://1.bp.blogspot.com/--iIKBr8cNH8/TvNYvY745XI/AAAAAAAAAyQ/EZvfoeAYX2A/s320/bloom.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This variation is CC-BY in case you want to insert it directly into your own presentations, papers, posters, etc. &lt;a href="https://docs.google.com/open?id=0BzmiDU0yxmJwZGJkNzQzZmEtOTZjMi00NWVjLTk4MWMtMTRlY2NkODEzYjQ4"&gt;An ODG version is available as well&lt;/a&gt;. Full license terms below.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://creativecommons.org/licenses/by/3.0/" rel="license"&gt;&lt;img alt="Creative Commons License" src="http://i.creativecommons.org/l/by/3.0/88x31.png" style="border-width: 0;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span href="http://purl.org/dc/dcmitype/StillImage" property="dct:title" rel="dct:type" xmlns:dct="http://purl.org/dc/terms/"&gt;Bloom's Taxonomy of the Cognitive Domain&lt;/span&gt; by &lt;a href="http://www.cs.bsu.edu/~pvg" property="cc:attributionName" rel="cc:attributionURL" xmlns:cc="http://creativecommons.org/ns#"&gt;Paul Gestwicki&lt;/a&gt; is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/" rel="license"&gt;Creative Commons Attribution 3.0 Unported License&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: center;"&gt;Based on a work at &lt;a href="http://en.wikipedia.org/wiki/File:BloomsCognitiveDomain.svg" rel="dct:source" xmlns:dct="http://purl.org/dc/terms/"&gt;en.wikipedia.org&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7799096428755527316?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7799096428755527316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/blooms-taxonomy-of-cognitive-domain.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7799096428755527316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7799096428755527316'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/blooms-taxonomy-of-cognitive-domain.html' title='Bloom&apos;s Taxonomy of the Cognitive Domain'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/--iIKBr8cNH8/TvNYvY745XI/AAAAAAAAAyQ/EZvfoeAYX2A/s72-c/bloom.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-4537107798773723488</id><published>2011-12-19T09:44:00.000-05:00</published><updated>2011-12-19T09:44:03.761-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Books for practitioners</title><content type='html'>At the end of the semester, a few students asked me for technical book recommendations. I have listed below the books that I tend to reference most often in my teaching and in my practice. Links to Amazon's listings are provided, not because I specifically endorse Amazon, but they sure are convenient.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Agile-Software-Development-Cooperative-Game/dp/0321482751"&gt;Alistair Cockburn.&amp;nbsp;&lt;i&gt;Agile Software Development: The Cooperative Game&lt;/i&gt;. Second edition. (Addison-Wesley, 2006).&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Holub-Patterns-Learning-Design-Looking/dp/159059388X"&gt;Allen Holub.&amp;nbsp;&lt;i&gt;Holub on Patterns: Learning Design Patterns by Looking at Code&lt;/i&gt;. (APress, 2004).&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Pragmatic-Thinking-Learning-Refactor-Programmers/dp/1934356050"&gt;Andrew Hunt.&amp;nbsp;&lt;i&gt;Pragmatic Thinking and Learning: Refactor your Wetware&lt;/i&gt;. (Pragmatic Bookshelf, 2008)&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X"&gt;Andrew Hunt and David Thomas.&lt;i&gt;&amp;nbsp;The Pragmatic Programmer: From Journeyman to Master.&lt;/i&gt;&amp;nbsp;(Addison-Wesley, 1999).&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/"&gt;Robert C. Martin. &lt;i&gt;Clean Code: A Handbook of Agile Software Craftsmanship&lt;/i&gt;. (Prentice Hall, 2008).&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;All of these books are worth reading, but where you start depends on your interests. If you are interested specifically in object-oriented design, definitely start with &lt;i&gt;Holub on Patterns&lt;/i&gt;. &lt;i&gt;Clean Code&lt;/i&gt; and&lt;i&gt; The&amp;nbsp;Pragmatic Programmer&lt;/i&gt; are replete with bite-size tips that can immediately make you a better professional. &lt;i&gt;Pragmatic Thinking and Learning&lt;/i&gt; is not about technology &lt;i&gt;per se&lt;/i&gt;, but rather it is about how to be a more effective learner. Finally, Cockburn's book is the largest and most academic on the list, but it provides tremendous insight into how one can approach software development methodologies from a perspective that is both humanistic and scientific.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-4537107798773723488?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/4537107798773723488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/books-for-practitioners.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4537107798773723488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4537107798773723488'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/books-for-practitioners.html' title='Books for practitioners'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3166917729774936282</id><published>2011-12-12T20:04:00.000-05:00</published><updated>2011-12-13T09:06:56.311-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='deus ex'/><category scheme='http://www.blogger.com/atom/ns#' term='game design'/><title type='text'>Thoughts on Deus Ex: Human Revolution</title><content type='html'>I've been playing &lt;i&gt;Deus Ex: Human Revolution&lt;/i&gt;, and I had a few game design thoughts to share. This post contains minor spoilers. You have been warned.&lt;br /&gt;&lt;br /&gt;A lot of people have commented on the incongruous "boss fights" in Human Revolution, and rightly so. They are quite embarrassing, really. They force the player out of the story, thrusting you through the fourth wall to realize that &lt;i&gt;yes, this is a game, you just finished a level, and so there's a boss fight.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Not that I've scoured the Internet for reviews, but I have yet to see anyone else address the issue of the game's beginning sequences. In a game that prides itself on cleverness of storytelling, how am I supposed to believe that Adam Jensen is actually the head of security in a multinational biotech company? In the first level after the prelude, my boss—the man who runs the company—gives me a choice of exactly one weapon to take with me into an unknown situation. I take it for granted when I have dozens of inventory slots that I can probably carry more than just a short-range stun gun. We can let this one slide because it's a tutorial level, but notice that this is a foreshadowing of the narrative-jarring boss fights: this is a game that knows it's a game and won't let you forget it.&lt;br /&gt;&lt;br /&gt;The next scene has Adam Jensen, Head of Security, back in his office building. Once I realized I had an office, I checked my email and found out that someone has been stealing office supplies. So, what's a Head of Security to do? Obviously, the answer is break into some offices and search for clues. Break into offices?! I'M THE HEAD OF SECURITY. I should be able to get into anyone's office, and I sure as hell shouldn't have to CRAWL THROUGH DUCTWORK to do so!&lt;br /&gt;&lt;br /&gt;Aha, so the game wants me to learn about breaking and entering in a safe place, where there are no armed enemies. It felt wrong to crawl through ductwork in my own building, especially when every office has windows, through which you can see people chatting in the hallway. So in the spirit of "it's just a tutorial," we could let it go. However, there was one part of this scene that completely snapped me out of the game.&lt;br /&gt;&lt;br /&gt;There was money everywhere.&lt;br /&gt;&lt;br /&gt;It seems that in the future, people only use gift cards, and they leave them all over the place. It made me wonder, if I were to walk through my building (or crawl through its ample ductwork) and look at my coworker's desks, how many would have hundreds of dollars on their bookcases or in their desk drawers? But it wasn't just the presence of the money that bothered me: it was the &lt;i&gt;gameness&lt;/i&gt;&amp;nbsp;of it. I found myself staring at a credit chit, wondering if I should take it or not. More specifically, I wondered, &lt;i&gt;Does this game have a karma system, and am I going to lose morale or reputation for taking this?&lt;/i&gt;&amp;nbsp;See, this stuff wasn't credits or money at all—it's just a mcguffin that I can collect. And because it's there, I need to take it, because I know how the economics of these games is balanced: if you want to get the best goods, you need to be an explorer and take everything you can find. I'm not taking cash from my coworkers. I'm just collecting arbitrary units that I can use to get the bigger gun I know I'm going to need, because the only other thing I know about the game at this point is that there's going to be rough boss fights. (Thanks, Internet!)&lt;br /&gt;&lt;br /&gt;I finish exploring every nook and cranny of the building that I can access without leveling up my hack skill. After all, I don't want to actually hack my own building's security system, I just want to explore its ductwork. The next mission has me leaving the building and getting out into the streets of Detroit. (The Assassin's Creed developers know how to make a city feel crowded; Human Revolution pays homage to the empty streets of the original Deus Ex.) One of the first places I visit is a weapons dealer in an abandoned gas station. I am Adam Jensen, Head of Security, and I'm buying a tranquilizer rifle with stolen money from a guy in an abandoned gas station. I cried a little and almost stopped playing, but at this point, I haven't seen one of those famous boss battles yet, so I felt obligated to carry on.&lt;br /&gt;&lt;br /&gt;They did do a nice job allowing for multiple solutions to problems, and I did have fun playing the game. I'm going to jump ahead to the ending. The spoilers get more serious here, so be warned.&lt;br /&gt;&lt;br /&gt;Ninety percent of the story involves Adam looking for Dr. Reed. Whether it's love or curiosity doesn't matter: it's Reed that he's after. You see her for a brief moment, right before going into the endgame. If you've read this far in my post, then you probably already know that the ending is determined solely by one decision at the very end of the game. This was the worst part of the original Deus Ex, that everything you did amounted to nothing except for your very last decision. Again, Human Revolution pays homage to the wrong part of the original. This one was even worse, though, since what screamed out to me as an obvious option was completely missing. All I wanted to do was stop the transmission. That's it. Stop the transmission, then go get picked up by Malik, go find Reed, and talk to her. I don't want to send Crazy Cripple Guy's message, or lie about terrorists, or something else I don't care about, and I certainly don't to kill myself and everyone else that I just painstakingly avoided killing.&lt;br /&gt;&lt;br /&gt;The original Deus Ex ended with you having to chose one of three options, none of which were appealing, but all of which were inevitable. This one felt completely contrived, as though the designer just couldn't wait to show me B-roll of starving kids in Africa. I guess I am the sap. I actually empathized with Adam, and I actually wanted to know why he cared so much for Reed, and how she really felt for him. I thought they would come to some understanding about where Adam came from. The character development in this game was awfully shallow, but I fell for it, because I play these games for the RP part of RPG.&lt;br /&gt;&lt;br /&gt;In conclusion, my recommendation is, after finishing Human Revolution, go play The Missing Link DLC. At first, I was upset to hear that some really good content was left of the game and released as DLC; I think this is a bad direction for games, especially for elements that happen chronologically in the middle of the main story. However, in this case, it was a blessing. The Missing Link was quite fun, with interesting levels and much more believable and interesting characters. When Missing Link ends, you can pretend that you don't actually know what happens next, and your imagination can then give you a satisfying conclusion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3166917729774936282?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3166917729774936282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/thoughts-on-deus-ex-human-revolution.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3166917729774936282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3166917729774936282'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/thoughts-on-deus-ex-human-revolution.html' title='Thoughts on Deus Ex: Human Revolution'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6381113526341507974</id><published>2011-12-09T15:06:00.001-05:00</published><updated>2011-12-09T16:31:23.235-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='csedweek'/><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>CS Ed Week: Reflections on a busy week</title><content type='html'>&lt;a href="http://paulgestwicki.blogspot.com/2010/12/cs-ed-week.html"&gt;Once again&lt;/a&gt;, we've reached the end of &lt;a href="http://www.csedweek.org/"&gt;CSEdWeek&lt;/a&gt;, and I'm pushing to get this post in before it's over.&lt;br /&gt;&lt;br /&gt;I attended two blogworthy public events this week. On Monday, I went to the &lt;a href="http://www.indianahistory.org/"&gt;Indiana Historical Society&lt;/a&gt;'s Annual Founders Day Dinner and Awards celebration, along with my collaborator &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/History/FacultyandStaff/MorrisRonald.aspx"&gt;Ronald Morris&lt;/a&gt; and our Dean, &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/PoliticalScience/FacultyStaff/Faculty/MaggiottoMichael.aspx"&gt;Michael Maggiotto&lt;/a&gt;. The &lt;a href="http://bsu.edu/csh"&gt;College of Sciences and Humanities&lt;/a&gt; at &lt;a href="http://bsu.edu/"&gt;Ball State University&lt;/a&gt;&amp;nbsp;was awarded the Outstanding Project of the Year award for &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UElrckYLkso/TuJvwSQu3XI/AAAAAAAAAtg/UgYaMSNRU_Q/s1600/Ball+State.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://3.bp.blogspot.com/-UElrckYLkso/TuJvwSQu3XI/AAAAAAAAAtg/UgYaMSNRU_Q/s320/Ball+State.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Among the other recognized individuals and organizations were eight Centennial Businesses, Indiana companies celebrating 100 years of operation. Not surprisingly, none of these were software development companies. However, I'm willing to wager that all of them now rely upon software for their daily operations. In 2111, will they be looking back at 100-year-old software development shops?&lt;br /&gt;&lt;br /&gt;Wednesday was the BSU &lt;a href="http://cms.bsu.edu/About/AdministrativeOffices/BBC/"&gt;Building Better Communities&lt;/a&gt; Project Showcase, where about twenty student teams showed how they worked with faculty mentors and community partners. Several of my students were there to demonstrate the Digital Archaeology Simulation project. A poster provided the background and rationale for the project, and the software is still under development&amp;nbsp;by &lt;a href="http://cms.bsu.edu/About/AdministrativeOffices/EmergingTechnologies.aspx"&gt;Emerging Technologies&lt;/a&gt;. A prototype was available, and while I didn't take the opportunity to run the latest build, several passers-by told me that they were quite impressed. Ball State University &lt;a href="http://cms.bsu.edu/Giving/BSUFoundation/About/MeetBoard/BOD/Gora.aspx"&gt;President Jo Ann Gora&lt;/a&gt; spent a few minutes with members of the team to talk to them about their work—a great opportunity for the students to show some of their best work (even if the photo is rather poor).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-I9u0g52-PMM/TuJyv6HxvKI/AAAAAAAAAto/Kf5cJOWg5Io/s1600/IMG_20111207_170700+%25281%2529.jpg" imageanchor="1"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-I9u0g52-PMM/TuJyv6HxvKI/AAAAAAAAAto/Kf5cJOWg5Io/s320/IMG_20111207_170700+%25281%2529.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This week was also the final project presentations in CS222: Advanced Programming. Each team of four had to pitch a project and complete it in six weeks, with two three-week milestones. Several of the teams impressed me with their hard work and dedication, investing significant amounts of their own free time in order to create the most impressive systems they could.&lt;br /&gt;&lt;br /&gt;Rather than make any grand conclusions, I think the best way to close this post is to say that I have a great job. My students rise to the challenges I set before them. They appreciate learning how to learn, and they respect the fact that I respect them. We all get a bit stressed this time of year, but it feels good at the end of a busy week to reflect on all the great learning experiences I have had with my students this year. Thanks to my students for sticking with me, for trusting me even when my methods are unconventional.&lt;br /&gt;&lt;br /&gt;Happy CS Ed Week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6381113526341507974?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6381113526341507974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/cs-ed-week-reflections-on-busy-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6381113526341507974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6381113526341507974'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/12/cs-ed-week-reflections-on-busy-week.html' title='CS Ed Week: Reflections on a busy week'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-UElrckYLkso/TuJvwSQu3XI/AAAAAAAAAtg/UgYaMSNRU_Q/s72-c/Ball+State.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3232105703314448607</id><published>2011-11-30T13:53:00.001-05:00</published><updated>2011-11-30T13:58:03.758-05:00</updated><title type='text'>With great power comes great responsibility</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;This was discovered in RB369, the Computer Science lab, and shared on the department's Facebook page.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-jRZCKX_Mn9g/TtZ7qoWRW1I/AAAAAAAAAoI/mMxv4uCmI58/s1600/382711_10150386614492007_512092006_8815240_198940149_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-jRZCKX_Mn9g/TtZ7qoWRW1I/AAAAAAAAAoI/mMxv4uCmI58/s320/382711_10150386614492007_512092006_8815240_198940149_n.jpg" width="239" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I wonder if I can include this as a student evaluation in my promotion and tenure materials?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3232105703314448607?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3232105703314448607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/with-great-power-comes-great.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3232105703314448607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3232105703314448607'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/with-great-power-comes-great.html' title='With great power comes great responsibility'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-jRZCKX_Mn9g/TtZ7qoWRW1I/AAAAAAAAAoI/mMxv4uCmI58/s72-c/382711_10150386614492007_512092006_8815240_198940149_n.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-8761600905867071822</id><published>2011-11-14T15:25:00.001-05:00</published><updated>2011-11-14T15:31:15.063-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><title type='text'>All the UML you need to know</title><content type='html'>Each semester, when I teach CS222, I give a one-class lecture on UML class and sequence diagrams. It always goes the same: I introduce some ideas, then give the students some time to draw some diagrams, and I critique them. It works well, except for the lecturing part. That part is boring, for me and for the students.&lt;br /&gt;&lt;br /&gt;This year I am trying something different. I have created a Web site off my BSU space called "&lt;a href="http://www.cs.bsu.edu/homepages/pvg/misc/uml/"&gt;All the UML You Need to Know&lt;/a&gt;." Actually, I've only half-created it. We already discussed sequence diagrams in class earlier this semester, so I didn't take the time to write that section yet.&lt;br /&gt;&lt;br /&gt;I sent out the link to my students earlier today. Tomorrow, we'll talk about class diagrams, and I will direct them to this site as a resource as they play with the ideas. It took about eight times as long to write as it does for me to talk through it, which is actually not as bad as I had feared.&amp;nbsp;Hopefully this will save me time in the long run, but more importantly, it will give the students accurate notes about the parts of UML I expect them to know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-8761600905867071822?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/8761600905867071822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/all-uml-you-need-to-know.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8761600905867071822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8761600905867071822'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/all-uml-you-need-to-know.html' title='All the UML you need to know'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-2677640602503402013</id><published>2011-11-11T10:59:00.001-05:00</published><updated>2011-11-12T12:49:52.291-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><title type='text'>Social networks, fairies, and Club 369</title><content type='html'>One of the CS222 project teams is working on &lt;i&gt;Club 369: The Game&lt;/i&gt;. "Club 369" is a reference to the Computer Science undergraduate lab, RB369, and the camaraderie that the space affords. The game is a Computer Science quiz constructed of multiple-choice questions.&lt;br /&gt;&lt;br /&gt;On Thursday, the team gave their milestone presentation. Here's a screenshot of their executable release.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kwU1fPHxEVk/Tr1IPJECV-I/AAAAAAAAAlw/1_eikHQH-HQ/s1600/club369game.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="326" src="http://2.bp.blogspot.com/-kwU1fPHxEVk/Tr1IPJECV-I/AAAAAAAAAlw/1_eikHQH-HQ/s400/club369game.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Club 369: The Game, Milestone #1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;That guy on the bottom-right is "The Dr. G. Fairy". Let's take a closer look...&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6W8fQx8_6Bo/Tr26S55YNRI/AAAAAAAAAl4/D8dHYokcgdA/s1600/296902_10150475376472489_642427488_10961635_1503761605_n.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-6W8fQx8_6Bo/Tr26S55YNRI/AAAAAAAAAl4/D8dHYokcgdA/s1600/296902_10150475376472489_642427488_10961635_1503761605_n.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Dr. G. Fairy&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Clicking on him removes two of the incorrect choices, leaving the player with a 50/50 chance if they guess. Needless to say, this presentation got quite a reaction from the other students.&amp;nbsp;When a student asked, incredulously, "Why?" a team member responded, "He's Dr. G. He helps you learn Computer Science." This is the nicest complement I've received in some time!&lt;br /&gt;&lt;br /&gt;After class, one of the students posted the picture to the Ball State Computer Science Facebook Group, where it became a hit. It may seem a bit silly, but as I see it, it's a great success for the department. We created the Facebook group to help foster a sense of community among our students and alumni, and we've had some luck with members sharing informational links, job opportunities, and the like. The fact that students feel they can share this kind of fun content as well shows that we have succeeded in our goal. (I had to do a bit of legwork to understand the &lt;a href="http://bulbapedia.bulbagarden.net/wiki/Butterfree_(Pok%C3%A9mon)"&gt;Butterfree&lt;/a&gt; and &lt;a href="http://zelda.wikia.com/wiki/Navi"&gt;Hey! Listen!&lt;/a&gt; references in the comments, but this made it even more fun for me.)&lt;br /&gt;&lt;br /&gt;Of course, I immediately changed my Facebook profile picture to the Dr. G. Fairy. This led some old friends to reminisce about the classic "Get Paul some shirts with color" Flash animation—a reference to my proclivity to wear black when playing at Higher Grounds Coffeehouse. I think we all assumed the animation was lost to the ages.&amp;nbsp;My clever and creative friend Matt was able to find the old image and recreated the animation with a brand new feature.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" height="650" id="butterfree" width="400"&gt;&lt;param name="movie" value="http://www.cs.bsu.edu/homepages/pvg/pub/paulCS3.swf" /&gt;&lt;embed src="http://www.cs.bsu.edu/homepages/pvg/pub/paulCS3.swf" width="400" height="650" name="butterfree" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-2677640602503402013?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/2677640602503402013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/social-networks-fairies-and-club-369.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2677640602503402013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2677640602503402013'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/social-networks-fairies-and-club-369.html' title='Social networks, fairies, and Club 369'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-kwU1fPHxEVk/Tr1IPJECV-I/AAAAAAAAAlw/1_eikHQH-HQ/s72-c/club369game.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-1824132563449586957</id><published>2011-11-11T09:20:00.001-05:00</published><updated>2011-11-11T10:24:56.264-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubrics'/><category scheme='http://www.blogger.com/atom/ns#' term='evaluation'/><category scheme='http://www.blogger.com/atom/ns#' term='grading'/><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><category scheme='http://www.blogger.com/atom/ns#' term='cs315'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Rubric-based self- and peer-evaluation on team programming projects</title><content type='html'>I have &lt;a href="http://paulgestwicki.blogspot.com/2011/08/peer-evaluation-rubric.html"&gt;written&lt;/a&gt; &lt;a href="http://paulgestwicki.blogspot.com/2010/08/student-evaluation-plan-for-game.html"&gt;before&lt;/a&gt; about grading rubrics, and I am taking this opportunity to share some of my recent developments here. In my game programming class (CS315), I have eleven students working together on one project. We're using &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;Scrum&lt;/a&gt;, and it's &lt;a href="http://paulgestwicki.blogspot.com/2011/10/new-teams-first-daily-scrum.html"&gt;still&lt;/a&gt; going well. The early part of the semester was ungraded, formative, small-project work, and I found myself needing a way to assign grades to the students. It may be worth mentioning that I don't actually want to assign grades to them, but it is a requirement of the course, and so I must do it responsibly.&lt;br /&gt;&lt;br /&gt;I happened to stumble across &lt;a href="http://www.cs.bsu.edu/homepages/pvg/misc/group_eval.shtml"&gt;a rubric I created in 2008&lt;/a&gt;, before my blogging days, while I was cleaning up my Web space. As I recall, this was an amalgam of several other rubrics I had found on the Web with an ounce of invention. This was my inspiration to create the following rubric:&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;3&lt;/th&gt;&lt;th&gt;2&lt;/th&gt;&lt;th&gt;1&lt;/th&gt;&lt;th&gt;0&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Commitment &lt;/th&gt;&lt;td&gt;Attended all scheduled team meetings or notified the team of absence. &lt;/td&gt;&lt;td&gt;Missed team meetings, with notifications, with enough regularity to be problematic. &lt;/td&gt;&lt;td&gt;Missed one or more team meetings without notifying the team. &lt;/td&gt;&lt;td&gt;Regularly missed team meetings without notifying the team.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Participation &lt;/th&gt;&lt;td&gt;Contributed to sprint planning, sprint review, and sprint retrospective meetings. &lt;/td&gt;&lt;td&gt;Did not contribute to one of the following: sprint planning, sprint review, or sprint retrospective meetings. &lt;/td&gt;&lt;td&gt;Did not contribute to two of sprint planning, sprint review, and sprint retrospective meetings. &lt;/td&gt;&lt;td&gt;Did not contribute to any of sprint planning, sprint review, and sprint retrospective meetings.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Communication&lt;/th&gt;&lt;td&gt;Clear standup reports on what was accomplished, what is planned, and identification of impediments, to allow the team to continue to make progress. &lt;/td&gt;&lt;td&gt;Some unclear standup reports that inhibit team progress. &lt;/td&gt;&lt;td&gt;Regularly unclear standup reports that inhibit team progress. &lt;/td&gt;&lt;td&gt;Did not give standup reports.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Technical contributions &lt;/th&gt;&lt;td&gt;High quality technical contributions that facilitate success of the team. &lt;/td&gt;&lt;td&gt;High quality technical contributions that do not directly facilitate the team's success. &lt;/td&gt;&lt;td&gt;Low quality technical contributions that frequently require redress by other team members. &lt;/td&gt;&lt;td&gt;Low quality technical contributions that inhibit success.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Attitude and Leadership &lt;/th&gt;&lt;td&gt;Listens to, shares with, and supports efforts of others, and actively tries to keep the team together. &lt;/td&gt;&lt;td&gt;Listens to, shares with, and supports the efforts of others. &lt;/td&gt;&lt;td&gt;Frequently fails to listen, share, or support teammates. &lt;/td&gt;&lt;td&gt;Displays an antagonism that inhibits team success.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I created this after the team's first sprint, and parts of it are reactions to problems the team was having. For example, in the team's first sprint retrospective, they identified that many had spent inordinate time on aesthetic issues that were unrelated to the user stories. Hence, there is a distinction between those technical contributions that facilitate success and those that do not. Note that the numbers across the top relate to &lt;a href="http://www.cs.bsu.edu/~pvg/misc/grading.shtml"&gt;my triage grading approach&lt;/a&gt;; some day I will write a blog post about my experiences with it, but for the time being, suffice it to say A=3, C=2, D=1, F=0.&lt;br /&gt;&lt;br /&gt;I shared this rubric with the team during Sprint 2, and at the end of the Sprint, I asked each person to do a personal evaluation. This was designed as a formative evaluation for the student as well as a trial run of the rubric. From reading the students' self-evaluations, I think the instrument worked as intended, and we're going to do self- and peer-evaluations at the end of this sprint.&lt;br /&gt;&lt;br /&gt;In my other course (CS222), students are working in teams of four on six-week projects of their own design. They just finished their mid-project milestone presentations, and I've modified and distributed the rubric to this other group as well. I've highlighted those cells that have changed.&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;3&lt;/th&gt;&lt;th&gt;2&lt;/th&gt;&lt;th&gt;1&lt;/th&gt;&lt;th&gt;0&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Commitment &lt;/th&gt;&lt;td&gt;Attended all scheduled team meetings or notified the team of absence. &lt;/td&gt;&lt;td&gt;Missed team meetings, with notifications, with enough regularity to be problematic. &lt;/td&gt;&lt;td&gt;Missed one or more team meetings without notifying the team. &lt;/td&gt;&lt;td&gt;Regularly missed team meetings without notifying the team.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Participation &lt;/th&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="background-color: lime;"&gt;Contributed to project planning, implementation, testing, and milestone presentations. &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="background-color: lime;"&gt;Did not contribute to one of the following: project planning, implementation, testing, and milestone presentations. &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="background-color: lime;"&gt;Did not contribute to two of the following: planning, implementation, testing, presentation. &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="background-color: lime;"&gt;Did not contribute to three or more of the following: planning, implementation, testing, presentation.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Communication&lt;/th&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="background-color: lime;"&gt;Clear reports on what has been accomplished, what is in progress, and what stands in the way, thereby facilitating progress. &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="background-color: lime;"&gt;Sometimes is unclear about what has been done, what is in progress, and what stands in the way, creating minor impediments to progress. &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="background-color: lime;"&gt;Is regularly unclear about what has been done, what is in progress, and what stands in the way, creating significant impediments to progress. &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="background-color: lime;"&gt;Communication patterns directly disrupt team progress.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Technical contributions &lt;/th&gt;&lt;td&gt;High quality technical contributions that facilitate success of the team. &lt;/td&gt;&lt;td&gt;High quality technical contributions that do not directly facilitate the team's success. &lt;/td&gt;&lt;td&gt;Low quality technical contributions that frequently require redress by other team members. &lt;/td&gt;&lt;td&gt;Low quality technical contributions that inhibit success.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Attitude and Leadership &lt;/th&gt;&lt;td&gt;Listens to, shares with, and supports efforts of others, and actively tries to keep the team together. &lt;/td&gt;&lt;td&gt;Listens to, shares with, and supports the efforts of others. &lt;/td&gt;&lt;td&gt;Frequently fails to listen, share, or support teammates. &lt;/td&gt;&lt;td&gt;Displays an antagonism that inhibits team success.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;These students are not using and are not familiar with Scrum, and so the Scrum-specific references needed to change. I am not that happy with the articulation of participation above, in part because we invested a lot of time on &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;test-driven development&lt;/a&gt;, and I fear the students will be confused about separation of testing and implementation. The "communication" entry is clearly influenced by the idea of the &lt;a href="http://www.mountaingoatsoftware.com/scrum/daily-scrum"&gt;Daily Scrum&lt;/a&gt;, but I have not previously suggested this particular reporting strategy to the students. &amp;nbsp;My hope is that by asking them to conduct rubric-based self- and peer-assessments, they will gain some insight into better ways to organize themselves. As with the game programming students, I am using this first pass as a formative assessment, and also as an instrument to help me identify teams that are having problems with team members—an unfortunate but oft-inevitable situation.&lt;br /&gt;&lt;br /&gt;The students in CS222 had their first group experience with rubric-based evaluations this week when they evaluated each others' milestone presentations using this instrument:&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Presentation requirement&lt;/th&gt;&lt;th&gt;Satisfactory (3)&lt;/th&gt;&lt;th&gt;Probationary (2)&lt;/th&gt;&lt;th&gt;Unsatisfactory (1)&lt;/th&gt;&lt;th&gt;Unacceptable (0)&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Executable release&lt;/th&gt;&lt;td&gt;Stable and appropriate demo of executable release&lt;/td&gt;&lt;td&gt;Unclear demonstration of stable executable release&lt;/td&gt;&lt;td&gt;Unstable executable release&lt;/td&gt;&lt;td&gt;No demo&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Milestone #1 Estimate &lt;/th&gt;&lt;td&gt;Clearly met milestone estimates &lt;/td&gt;&lt;td&gt;Clearly met a reasonable subset of milestone estimates &lt;/td&gt;&lt;td&gt;Did not meet an adequate subset of milestone estimates &lt;/td&gt;&lt;td&gt;Progress on initial estimates was not addressed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Milestone #2 Estimate&lt;/th&gt;&lt;td&gt;Clear presentation of well-articulated estimates for next milestone&lt;/td&gt;&lt;td&gt;Clear presentation of poorly-articulated estimates for next milestone&lt;/td&gt;&lt;td&gt;Unclear presentation of poorly-articulated estimates for next milestone&lt;/td&gt;&lt;td&gt;Milestone #2 estimates not addressed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Software architecture&lt;/th&gt;&lt;td&gt;Good presentation of reasonable software architecture&lt;/td&gt;&lt;td&gt;Decent presentation of reasonable software architecture&lt;/td&gt;&lt;td&gt;Unclear or awkward software architecture&lt;/td&gt;&lt;td&gt;No presentation of software architecture&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I printed these on small slips of paper. On Tuesday, we had four presentations, so I instructed the students to pick up four slips as I talked through the structure and purpose of the rubric. On Thursday, we had five presentations, so I left the slips in the same place in the back of the room and I put on some mood music.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/BwNrmYRiX_o/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BwNrmYRiX_o&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/BwNrmYRiX_o&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;I was a little disappointed that none of them stopped to tell me how incredibly clever this was.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-1824132563449586957?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/1824132563449586957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/rubric-based-self-and-peer-evaluation.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1824132563449586957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1824132563449586957'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/rubric-based-self-and-peer-evaluation.html' title='Rubric-based self- and peer-evaluation on team programming projects'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5460179658512009048</id><published>2011-11-06T20:58:00.001-05:00</published><updated>2011-11-06T20:58:26.138-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Morgan's Raid on CD</title><content type='html'>We recently received a request to make &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; available to a school that has blocked Internet connections from its lab machines.&amp;nbsp;Morgan's Raid was built for distribution via &lt;a href="http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136112.html"&gt;Java Web Start&lt;/a&gt;&amp;nbsp;(JWS), which simplifies the process of dealing with native libraries. However, as the name implies, the technology was designed for computers with Web connections. Distributing as an &lt;a href="http://download.oracle.com/javase/7/docs/technotes/guides/jar/jarGuide.html"&gt;executable jar&lt;/a&gt; is not possible because they do not adequately handle native libraries.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://download.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/syntax.html"&gt;JNLP&lt;/a&gt; file contains all of the configuration information for JWS. This includes &lt;i&gt;codebase&lt;/i&gt;, through which JWS determines where to find referenced resources. The Morgan's Raid codebase points to the server that hosts the jar files, for example.&amp;nbsp;Turns out that if you leave out the codebase, it will default to the same path as the JNLP file itself.&lt;br /&gt;&lt;br /&gt;My next step, then, was to revise the Morgan's Raid JNLP file for local files. I created a CD containing all the requisite jar files and the revised JNLP file. Running the JNLP file off of the CD almost solves the problem. The game runs, and it creates a desktop and start menu shortcut in the process. However, it also records the fact that the jar files came from the optical drive. As a result, the game will then only run with the CD in the drive, even though all the jars have been copied to Java's cache: JWS still tries to check the codebase to see if there's any changes to the files or configuration.&lt;br /&gt;&lt;br /&gt;The problem is easily solved by having the user copy the CD contents to any folder on their hard drives and running the JNLP from there. Now it's &lt;i&gt;this&lt;/i&gt; path that is recorded by JWS, so using the desktop shortcut or start menu shortcut will happily run the application locally. This gets the desired result that I can hand someone a CD, and they can put it on as many machines as desired, without my having to fiddle with installation software beyond JWS. (I guess that changing the location of those files would break the installation, in the same way that removing the CD did before, but I did not verify this.)&lt;br /&gt;&lt;br /&gt;With my CD experiments successfully concluded, and after a little help from my department's friendly system administrators, the result looks like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VTBVnj5JSFo/TrP4kxBbMcI/AAAAAAAAAlU/nW66uGrmH7o/s1600/IMG_20111102_143216.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-VTBVnj5JSFo/TrP4kxBbMcI/AAAAAAAAAlU/nW66uGrmH7o/s320/IMG_20111102_143216.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I found it deeply satisfying to hold this disc. Physical media doesn't change the existential state of the software system, but there's something about holding this disc in my hands that made the software more real.&lt;br /&gt;&lt;br /&gt;As I was printing the CD, a sysadmin asked, "Does it have to be on CD?" Her reason for asking was that she had blank white DVDs, on which the printed label would be more crisp, but I thought she meant, "Can't it be on something other than a disc, like a thumb drive?" I laughed aloud when I realized that&amp;nbsp;I had never considered anything but an optical disc for this project, because, you know, software comes on discs!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5460179658512009048?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5460179658512009048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/morgans-raid-on-cd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5460179658512009048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5460179658512009048'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/11/morgans-raid-on-cd.html' title='Morgan&apos;s Raid on CD'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VTBVnj5JSFo/TrP4kxBbMcI/AAAAAAAAAlU/nW66uGrmH7o/s72-c/IMG_20111102_143216.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6986585718850620399</id><published>2011-10-31T21:46:00.001-04:00</published><updated>2011-10-31T21:46:51.489-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Chasing Dragons</title><content type='html'>A few days ago, my wife and I watched&amp;nbsp;&lt;a href="http://www.getlamp.com/"&gt;Get Lamp&lt;/a&gt;, a documentary on the rise and fall of text adventures and the persisting genre of &lt;a href="http://en.wikipedia.org/wiki/Interactive_fiction"&gt;interactive fiction&lt;/a&gt;. I had &lt;a href="http://www.youhaventlived.com/qblog/2011/QBlog220911A.html"&gt;heard about it&lt;/a&gt; on &lt;a href="http://en.wikipedia.org/wiki/Richard_Bartle"&gt;Richard Bartle&lt;/a&gt;'s blog and have been eager to watch it.&amp;nbsp;I grew up playing text adventures on my &lt;a href="http://images.google.com/imgres?q=c64&amp;amp;hl=en&amp;amp;biw=1210&amp;amp;bih=918&amp;amp;gbv=2&amp;amp;tbm=isch&amp;amp;tbnid=0pshnwoagJZ4iM:&amp;amp;imgrefurl=http://oldcomputers.net/c64.html&amp;amp;docid=XqK3A_p_X3hNpM&amp;amp;imgurl=http://oldcomputers.net/pics/C64combo.jpg&amp;amp;w=349&amp;amp;h=300&amp;amp;ei=XrWuTqfmL4mtsQLslbHdDA&amp;amp;zoom=1"&gt;C64&lt;/a&gt;. Although I spent a lot of time reading &lt;a href="http://en.wikipedia.org/wiki/Byte_(magazine)"&gt;Byte&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Compute!"&gt;Compute&lt;/a&gt; magazines—mostly typing in BASIC programs and reading advertisements for games, as I recall—I did not have a larger context to understand the industry and the personalities behind it.&lt;br /&gt;&lt;br /&gt;I found the documentary fascinating, but I'm not sure how strongly I can recommend it to those who didn't cut their teeth on text adventures. The documentary assumes a certain amount of tacit knowledge: how could a viewer appreciate the discussion of mapping if they had never been &lt;a href="http://en.wikipedia.org/wiki/Zork_I"&gt;in a maze of twisty little passages, all the same?&lt;/a&gt;&amp;nbsp;I'll definitely bring it up for a potential movie night next semester when I'm at the &lt;a href="http://bsu.edu/vbc"&gt;Virginia Ball Center for Creative Inquiry&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The documentary consists almost exclusively of interviews, and one of the interviewees was &lt;a href="http://en.wikipedia.org/wiki/Chris_Crawford_(game_designer)"&gt;Chris Crawford&lt;/a&gt;. I had previously only known him by reputation as a respected game designer and as the author of &lt;a href="http://en.wikipedia.org/wiki/The_Art_of_Computer_Game_Design"&gt;The Art of Computer Game Design&lt;/a&gt;. I enjoyed his interview in the documentary as well as the extended interview in the DVD extras, so I decided to read more about him.&lt;br /&gt;&lt;br /&gt;Of course, I turned to &lt;a href="http://en.wikipedia.org/wiki/Chris_Crawford_(game_designer)"&gt;Wikipedia&lt;/a&gt;, on whose page there is a section devoted to Crawford's &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Chris_Crawford_(game_designer)#The_Dragon_Speech"&gt;Dragon Speech&lt;/a&gt;&lt;/i&gt;. &amp;nbsp; Wikipedia's summary piqued my curiosity. Thanks to the wonder of the Internet, this 1992 speech &lt;a href="http://www.youtube.com/watch?v=_04PLBdhqZ4"&gt;is available on YouTube&lt;/a&gt;, despite its having been given a year before &lt;a href="http://en.wikipedia.org/wiki/Mosaic_(web_browser)"&gt;Mosaic&lt;/a&gt; ushered in the &lt;a href="http://en.wikipedia.org/wiki/World_wide_web"&gt;World Wide Web&lt;/a&gt; revolution. I've embedded part one here; parts two through five should come up as recommended links after.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/_04PLBdhqZ4/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_04PLBdhqZ4&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/_04PLBdhqZ4&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This goes immediately into my &lt;a href="http://paulgestwicki.wordpress.com/2010/01/28/great-presentations/"&gt;list of great presentations&lt;/a&gt;&amp;nbsp;(which someday needs to migrate from &lt;a href="http://paulgestwicki.wordpress.com/"&gt;my old blog&lt;/a&gt; to &lt;a href="http://paulgestwicki.blogspot.com/"&gt;this one&lt;/a&gt;). Crawford is clearly a master of the topic and has carefully crafted the presentation. I could go on about the specifics, but really, you should just take some time to watch it.&amp;nbsp;I am envious of the opportunity he had to study under another one of my heroes, &lt;a href="http://en.wikipedia.org/wiki/Alan_Kay"&gt;Alan Kay&lt;/a&gt;. I'd love to have a day to shadow either of these visionaries, to get a better sense of how they see the world and of what drives them.&lt;br /&gt;&lt;br /&gt;Crawford is passionate about his work, and it's his well-calculated passion that helped me to understand that this presentation isn't really about &lt;i&gt;games&lt;/i&gt;&amp;nbsp;at all. It's about dreams.&amp;nbsp;It's about working to identify what it is that you really want, and then consciously and intentionally deciding to pursue it, even if it means making painful decisions.&lt;br /&gt;&lt;br /&gt;Presentations like this make me uncomfortable, but that's a good thing. They induce introspection, resulting in an honest evaluation&amp;nbsp;of what I am doing and where it is leading. I feel like I am in Crawford's six years at Atari: I'm working diligently on what seems right for now, but every now and then I see the shadow of the dragon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6986585718850620399?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6986585718850620399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/chasing-dragons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6986585718850620399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6986585718850620399'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/chasing-dragons.html' title='Chasing Dragons'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7763791732495235102</id><published>2011-10-23T20:06:00.001-04:00</published><updated>2011-10-23T22:15:32.438-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gamedev'/><category scheme='http://www.blogger.com/atom/ns#' term='ivgda'/><category scheme='http://www.blogger.com/atom/ns#' term='igda'/><title type='text'>Notes from the Indiana Video Game Developers' Business/Game Design Panel</title><content type='html'>Yesterday, I went down to &lt;a href="http://www.meetup.com/IVGDA-IN/events/34910442/"&gt;Indianapolis for the Indiana Video Game Developers Business/Game Design Panel&lt;/a&gt;, hosted by the &lt;a href="http://www.meetup.com/IVGDA-IN"&gt;Independent Video Game Developers Association&lt;/a&gt; and the &lt;a href="http://www.meetup.com/IGDA-Indianapolis/"&gt;Indianapolis Chapter&lt;/a&gt; of the &lt;a href="http://www.igda.org/"&gt;International Game Developers Association&lt;/a&gt;. &lt;a href="http://www.meetup.com/IVGDA-IN/events/34910442/"&gt;The bios of each of the panelists are available online,&lt;/a&gt; so I won't &amp;nbsp;summarize who&amp;nbsp;they are here, but it is noteworthy that there was a great mix of expertise, including those interested in corporate branding, serious games, independent self-funded development, and even an IP lawyer.&amp;nbsp;One of my students was there with me, but it was a great discussion and I wish more could have come.&amp;nbsp;I will use this post to share some of my notes, both for my own use and to share with those who could not be there.&lt;br /&gt;&lt;br /&gt;The topic of iterative design came up several times, with the folks from &lt;a href="http://www.studiocypher.com/"&gt;Studio Cypher&lt;/a&gt; especially advocating for physical prototyping. Most of the panelists strongly advocated for focus groups throughout the development of a game. I was tempted to ask about specific methodologies: no one mentioned "agile" by name, but the spirit of it was strong. I ended up holding my question, in hopes that I could follow up with some of the panelists at a later date to discuss their methodologies more closely, perhaps even in a research context.&lt;br /&gt;&lt;br /&gt;A few panelists mentioned making games for children and using children in their focus groups, so I asked how they went about recruiting children, especially since some were adamant about needing NDAs for focus groups. Two out of the three suggestions were the same approaches I have used: friends/family and schools. The other group they mentioned was the Girl Scouts, which I had not considered. They also mentioned that research firms could be hired, at a high price, to do these things for you. That's another one I had not thought of, but all agreed that this was likely not worth the price.&lt;br /&gt;&lt;br /&gt;There were a few questions about how to choose technology for projects, and the panelists answered with a predictable and appropriate, "it depends." The panelists observed that all programmers want to write their own game engine, but that this is impractical unless it is one of the team's core competencies.&amp;nbsp;This matches advice I've heard elsewhere, but I get the impression that the younger members of the audience had not thought about the issue before. When it came down to what technology was being used, there was glowing praise for &lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt;—even the teams that weren't using it seemed to wish they were. This made me feel good about getting my own game programming students this semester exposed to it.&lt;br /&gt;&lt;br /&gt;While there was a lot of love for Unity, the relationship between HTML5 and Flash was mixed among the panelists. The consensus seemed to be that some clients had started asking for HTML5 games, but not all. While most current Web-based games were still in Flash, there was an expectation that HTML5 would be escalating quickly due to its being backed by such large corporations.&lt;br /&gt;&lt;br /&gt;The highlight of the panel, for me, was actually something shared by a non-panelist. It was a question I was going to ask as well, but &lt;a href="http://www.cs.iupui.edu/~aharris/"&gt;Andy Harris&lt;/a&gt;&amp;nbsp;beat me to it. It sounds like he's in the same boat as I am, where he is constantly asked by middle and high school students what they should do to become a "game designer." When I am posed this question by prospective students, I explain, verbosely, the relationship between video game design and programming, the history of the two, and the transfer of skills among them. Andy had a much more memorable and clever explanation that, if you want to be a game designer, &lt;i&gt;you write the code or you write the check&lt;/i&gt;. All the panelists agreed. This was great to hear, but I couldn't help but feel a little bad for the handful of young aspiring artists in the room who clearly had not done their homework along these lines.&lt;br /&gt;&lt;br /&gt;The importance of a portfolio was mentioned, and after a question from the crowd, the panelists clarified that a portfolio is as important for programmers as for artists. One panelist recommend grabbing a library like &lt;a href="http://flixel.org/"&gt;Flixel&lt;/a&gt; or &lt;a href="http://flashpunk.net/"&gt;FlashPunk&lt;/a&gt;, then creating ten games with them, each one exploring a different aspect of game design such as pathfinding or AI. This would provide you, as a programmer, with evidence that you have the range of skills required. This sounds like a great break project to me!&lt;br /&gt;&lt;br /&gt;The panel had been&amp;nbsp;advertised&amp;nbsp;as running from 1:00 to 3:30, but at 3:30, it was only an intermission to be followed by some other activities. Looking over the handouts, it looks like one of the activities was to be drinks at &lt;a href="http://www.macnivens.com/"&gt;MacNiven's&lt;/a&gt;&amp;nbsp;to talk about the IGDA, which would have been fantastic. Alas, I already had plans to return home for dinner, and so I had to step away. I am glad I was able to attend the panel, and it was great to see some of my colleagues whom I don't see very often. Next time, I'll try to keep time for a pint in my schedule!&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7763791732495235102?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7763791732495235102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/notes-from-indiana-video-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7763791732495235102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7763791732495235102'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/notes-from-indiana-video-game.html' title='Notes from the Indiana Video Game Developers&apos; Business/Game Design Panel'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-8720837308680489070</id><published>2011-10-19T09:24:00.000-04:00</published><updated>2011-10-19T09:24:14.042-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='higher education'/><title type='text'>DeMillo wrote this post for me already</title><content type='html'>I have been reading and enjoying &lt;a href="http://www.scs.gatech.edu/people/richard-demillo"&gt;Rich DeMillo&lt;/a&gt;'s new book, &lt;a href="http://www.amazon.com/Abelard-Apple-American-Colleges-Universities/dp/0262015803" style="font-style: italic;"&gt;Abelard to Apple: The Fate of American Colleges and Universities&lt;/a&gt;. I am planning to read the final chapter tonight and had intended to post a summary afterward. However,&amp;nbsp;&lt;a href="http://innovate-edu.com/2011/10/19/the-2020-stem-classroom-remarks-to-joint-education-subcommittee/"&gt;on his innovate-edu blog today&lt;/a&gt;, DeMillo &lt;a href="http://innovateedu.files.wordpress.com/2011/10/sr28-committee-remarks1.pdf"&gt;posted his comments&lt;/a&gt; to the Joint Education Subcommittee of the Georgia Senate, and these provide an excellent summary of the book. &lt;a href="http://innovateedu.files.wordpress.com/2011/10/sr28-committee-remarks1.pdf"&gt;This link will get you there&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-8720837308680489070?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/8720837308680489070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/demillo-wrote-this-post-for-me-already.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8720837308680489070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8720837308680489070'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/demillo-wrote-this-post-for-me-already.html' title='DeMillo wrote this post for me already'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-1307033015216659735</id><published>2011-10-07T11:12:00.000-04:00</published><updated>2011-10-07T11:12:11.255-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='women in computing'/><category scheme='http://www.blogger.com/atom/ns#' term='ada lovelace day'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>Computer Science: It's not just for dead women</title><content type='html'>How ironic that today is &lt;a href="http://findingada.com/"&gt;Ada Lovelace Day&lt;/a&gt;, as I just took a picture of her out of a Computer Science Department display case this morning.&lt;br /&gt;&lt;br /&gt;Since I came to Ball State, we had a display case that showed four images of women in computing. I did not snap a picture of the display case, but here are the four individual images.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vBAOkDERnxI/To8Q67nwNJI/AAAAAAAAAgE/NFJDzIR2-Kk/s1600/ada.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-vBAOkDERnxI/To8Q67nwNJI/AAAAAAAAAgE/NFJDzIR2-Kk/s320/ada.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DLa8YiI9Wr8/To8Q9hjAs9I/AAAAAAAAAgI/MYl7WwD3QOQ/s1600/eniac.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-DLa8YiI9Wr8/To8Q9hjAs9I/AAAAAAAAAgI/MYl7WwD3QOQ/s320/eniac.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0Y6egF9wnIQ/To8RAemGjVI/AAAAAAAAAgM/HeiGkXivjc8/s1600/ladies.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-0Y6egF9wnIQ/To8RAemGjVI/AAAAAAAAAgM/HeiGkXivjc8/s320/ladies.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Zg_1y6BQ1k0/To8SSHumY8I/AAAAAAAAAgQ/dvv-Mtlzhfs/s1600/hopper.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-Zg_1y6BQ1k0/To8SSHumY8I/AAAAAAAAAgQ/dvv-Mtlzhfs/s320/hopper.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;On one hand, one could argue that these images show that women can succeed in computing. On the other hand, I think there's a good chance that a modern young woman who walks by these will come to the conclusions that women &lt;i&gt;could&lt;/i&gt;&amp;nbsp;succeed in computing, ... back before color photography and pants. That's not very relevant to a generation that has grown up with the Internet, social media, games, and service learning, four factors that have been identified that get girls interested in pursuing Computer Science.&lt;br /&gt;&lt;br /&gt;I got the blessing from my department to update the display case, which now looks like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1I1hM_MGlRw/To8S5-F2g-I/AAAAAAAAAgU/LBy5WTj1Vko/s1600/poster.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-1I1hM_MGlRw/To8S5-F2g-I/AAAAAAAAAgU/LBy5WTj1Vko/s320/poster.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The plaques on the left and right are awards from the 2008 and 2011 &lt;a href="http://www.ccsc.org/midwest/Conference"&gt;CCSC:Midwest&lt;/a&gt; Programming Competitions, in which teams from Ball State placed second and third, respectively. In the middle is a research poster put together by the students who were involved in both the &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; and the &lt;a href="http://digitalarchaeologyproject.blogspot.com/"&gt;Digital Archaeology project&lt;/a&gt;. The poster describes how we used &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;Scrum&lt;/a&gt; and &lt;a href="http://agilemanifesto.org/"&gt;principles of agile software development&lt;/a&gt; and the lessons learned in the process.&lt;br /&gt;&lt;br /&gt;One wouldn't know to look at the plaques, but both teams comprised of two men and one woman. The genders of these students was irrelevant: their success speaks for itself. Taking a closer look at the poster, you can see that although the teams have a male majority, there are women there too.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-GzDJ5z6vCHQ/To8UG_g88uI/AAAAAAAAAgY/dAFnxfeSSgc/s1600/new_ladies.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-GzDJ5z6vCHQ/To8UG_g88uI/AAAAAAAAAgY/dAFnxfeSSgc/s320/new_ladies.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This is not as flashy as the University of Washington's excellent &lt;a href="http://www.cs.washington.edu/WhyCSE"&gt;Why CSE page&lt;/a&gt;, which overtly demonstrates how underrepresented groups can and do succeed in Computer Science and Engineering. However, it does show that—right here and now—women are integral parts of successful research and development projects. Whenever I meet with a prospective CS major, we walk by this display case. I am glad that now I can point to these pictures of some of our most successful majors and show how they are working hard, together, and that they are proud of their work.&lt;br /&gt;&lt;br /&gt;After all,&amp;nbsp;Computer Science is not just for dead women.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-1307033015216659735?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/1307033015216659735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/computer-science-its-not-just-for-dead.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1307033015216659735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1307033015216659735'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/computer-science-its-not-just-for-dead.html' title='Computer Science: It&apos;s not just for dead women'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-vBAOkDERnxI/To8Q67nwNJI/AAAAAAAAAgE/NFJDzIR2-Kk/s72-c/ada.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5946002355630005627</id><published>2011-10-07T10:31:00.000-04:00</published><updated>2011-10-07T10:31:21.215-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='cs315'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>A new team's first Daily Scrum</title><content type='html'>We spent the first several weeks in my game programming class covering the basics and exploring two platforms for game development, &lt;a href="http://slick.cokeandcode.com/"&gt;Slick&lt;/a&gt; and &lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt;. On Monday, the eleven students decided that for their semester project, they would like to work on one big team to try porting &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; to Unity. I decided to mentor the team using &lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;Scrum&lt;/a&gt;, since that has &lt;a href="http://paulgestwicki.blogspot.com/2011/06/morgans-raid-postmortem.html"&gt;worked so well for me in the past&lt;/a&gt;.&amp;nbsp;For Wednesday, I put together a product backlog and the team had its first spring planning meeting. While I had recommended that the students read &lt;a href="http://scrumprimer.com/"&gt;The Scrum Primer&lt;/a&gt;, I got the distinct impression that the vast majority had not done so; in their defense, I had emailed the link Tuesday night.&lt;br /&gt;&lt;br /&gt;The planning meeting went well, although fifty minutes was awfully tight to introduce the fundamentals of Scrum and to do the planning. I used my &lt;a href="http://paulgestwicki.blogspot.com/2011/02/scrum-diagram-rfc.html"&gt;Scrum diagram&lt;/a&gt; as a reference to talk through the process. We were missing three of the eleven team members, but we were still able to get a reasonable number of stories committed for the first Sprint.&lt;br /&gt;&lt;br /&gt;Today was the team's first "daily scrum." At 8am sharp, everyone was present. I told them to get into a circle and report what they had done since last time, what they had planned for next time, and what were the impediments. They got up and moved to the open area in the front of the classroom, while I stood behind the teaching station.&lt;br /&gt;&lt;br /&gt;Here's where the team really surprised me. In using Scrum with students many times in the past, I have found that they find it challenging to report &lt;i&gt;to each other&lt;/i&gt;, that they prefer to report &lt;i&gt;to me&lt;/i&gt;. &lt;a href="http://paulgestwicki.blogspot.com/2011/07/forced-proximity-and-stand-up-dynamics.html"&gt;I wrote about how my Summer team was able to leverage the physical space to have productive Daily Scrums&lt;/a&gt;, but that team was half comprised of people experienced with Scrum, so their team-facing attitude was to be expected. This team of eleven had one student with Scrum experience (Tom), and the rest had none. They formed the circle and showed a few signs of anxiety, but Tom started right in with his daily status. He passed it on to the teammate by his side, and the whole stand-up meeting went as smoothly as one could hope.&lt;br /&gt;&lt;br /&gt;There are four differences between this team and those from my past experiences, and I suspect that each is a contributor to this team's success. First and foremost, I learned a lot about managing a Scrum team through my experiences last academic year, and so I was more careful to separate myself from the stand-up meeting. Second, there was the issue of physical obstacles between me and the team: &lt;a href="http://paulgestwicki.blogspot.com/2011/07/forced-proximity-and-stand-up-dynamics.html"&gt;as with the Summer team&lt;/a&gt;, the furniture provided a convenient separation. Third, there was exactly one team member who had Scrum experience, and he showed no hesitation in starting the meeting and reporting progress to the team. Whether he meant to or not, his example provided the perfect template from which the other students intuited the expected social behavior. Fourth, all save one of these students have taken previous courses with me in which we repeatedly applied principles of agile development. We did not use Scrum in &amp;nbsp;particular, but we discussed the philosophy and the implications as well as learning the practice through a six-week project in two deliverables.&lt;br /&gt;&lt;br /&gt;I wish I had more data to support that last point. I would love to be able to claim that the students' experience in CS222 is a contributing factor to their ability to work in teams in upper-level courses, since that's one of the explicit goals of CS222. Unfortunately, the assessment data is not that rich. I mentioned three other contributing factors, and there are undoubtedly more. Still, it's anecdotal evidence that some combination of my teaching and the curriculum are working in tandem to improve student learning experiences.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5946002355630005627?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5946002355630005627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/new-teams-first-daily-scrum.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5946002355630005627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5946002355630005627'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/new-teams-first-daily-scrum.html' title='A new team&apos;s first Daily Scrum'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7261266367116844957</id><published>2011-10-06T16:47:00.002-04:00</published><updated>2011-10-06T16:47:43.604-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>UI classes should not implement event listener interfaces</title><content type='html'>When one does a rudimentary search for Swing tutorials, one finds approximately a zillion examples that recommend writing code like this:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;import java.awt.Container;&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;&lt;br /&gt;import javax.swing.BoxLayout;&lt;br /&gt;import javax.swing.JButton;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JTextField;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * A frame that holds a button which really wants to be pressed.&lt;br /&gt; * &lt;br /&gt; * @author &amp;lt;a href="http://paulgestwicki.blogspot.com"&amp;gt;Paul Gestwicki&amp;lt;/a&amp;gt;&lt;br /&gt; */&lt;br /&gt;public class PressMeFrame extends JFrame implements ActionListener {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Start the application.&lt;br /&gt;     * &lt;br /&gt;     * @param args&lt;br /&gt;     *            command-line arguments (ignored)&lt;br /&gt;     */&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        PressMeFrame frame = new PressMeFrame();&lt;br /&gt;        frame.pack();&lt;br /&gt;        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;        frame.setVisible(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /** The uneditable text field into which we will put our output */&lt;br /&gt;    private JTextField outputField;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Create an instance of this class.&lt;br /&gt;     */&lt;br /&gt;    public PressMeFrame() {&lt;br /&gt;        outputField = new JTextField(20);&lt;br /&gt;        outputField.setEditable(false);&lt;br /&gt;&lt;br /&gt;        JButton button = new JButton("Press me");&lt;br /&gt;        button.addActionListener(this);&lt;br /&gt;&lt;br /&gt;        Container contentPane = getContentPane();&lt;br /&gt;        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));&lt;br /&gt;        contentPane.add(button);&lt;br /&gt;        contentPane.add(outputField);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void actionPerformed(ActionEvent arg0) {&lt;br /&gt;        outputField.setText("Thank you.");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The problem I want to focus in on is that &lt;code&gt;PressMeFrame&lt;/code&gt; implements &lt;code&gt;ActionListener&lt;/code&gt;, but in truth, I can't stand looking at a class that extends &lt;code&gt;JFrame&lt;/code&gt; when it doesn't have to. Do I really want to bind myself to &lt;code&gt;JFrame&lt;/code&gt; right now? Not when I can just as easily make a reusable component that can be stuck into other things.Let me start this again...&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;&lt;br /&gt;import javax.swing.BoxLayout;&lt;br /&gt;import javax.swing.JButton;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JTextField;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * A frame that holds a button which really wants to be pressed.&lt;br /&gt; * &lt;br /&gt; * @author &amp;lt;a href="http://paulgestwicki.blogspot.com"&amp;gt;Paul Gestwicki&amp;lt;/a&amp;gt;&lt;br /&gt; */&lt;br /&gt;public class PressMePanel &lt;b&gt;extends JPanel&lt;/b&gt; implements ActionListener {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Start the application.&lt;br /&gt;     * &lt;br /&gt;     * @param args&lt;br /&gt;     *            command-line arguments (ignored)&lt;br /&gt;     */&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        &lt;b&gt;JFrame frame = new JFrame();&lt;/b&gt;&lt;br /&gt;        &lt;b&gt;frame.getContentPane().add(new PressMePanel());&lt;/b&gt;&lt;br /&gt;        frame.pack();&lt;br /&gt;        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;        frame.setVisible(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /** The uneditable text field into which we will put our output */&lt;br /&gt;    private JTextField outputField;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Create an instance of this class.&lt;br /&gt;     */&lt;br /&gt;    public PressMePanel() {&lt;br /&gt;        outputField = new JTextField(20);&lt;br /&gt;        outputField.setEditable(false);&lt;br /&gt;&lt;br /&gt;        JButton button = new JButton("Press me");&lt;br /&gt;        button.addActionListener(this);&lt;br /&gt;&lt;br /&gt;        &lt;b&gt;setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));&lt;br /&gt;        add(button);&lt;br /&gt;        add(outputField);&lt;/b&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void actionPerformed(ActionEvent arg0) {&lt;br /&gt;        outputField.setText("Thank you.");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;That's a little better, and if you followed the first, you can follow the second.Now, to the heart of the matter. While this &lt;em&gt;works&lt;/em&gt;, I argue that it is not &lt;em&gt;right&lt;/em&gt;. When we say that &lt;code&gt;PressMePanel&lt;/code&gt; implements &lt;code&gt;ActionListener&lt;/code&gt;, we are making a bold statement: we are saying that every &lt;code&gt;PressMePanel&lt;/code&gt; instance is designed to listen for action events. For example, we could make another class that uses PressMePanel, like this:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;import javax.swing.BoxLayout;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JTextField;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * A panel for text entry.&lt;br /&gt; * &lt;br /&gt; * @author &amp;lt;a href="http://paulgestwicki.blogspot.com"&amp;gt;Paul Gestwicki&amp;lt;/a&amp;gt;&lt;br /&gt; */&lt;br /&gt;public class TextEntryPanel extends JPanel {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Start the application.&lt;br /&gt;     * &lt;br /&gt;     * @param args&lt;br /&gt;     *            command-line arguments (ignored)&lt;br /&gt;     */&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        JFrame frame = new JFrame();&lt;br /&gt;        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;        frame.setContentPane(new TextEntryPanel());&lt;br /&gt;        frame.pack();&lt;br /&gt;        frame.setVisible(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public TextEntryPanel() {&lt;br /&gt;        setLayout(new BoxLayout(this, BoxLayout.X_AXIS));&lt;br /&gt;&lt;br /&gt;        PressMePanel pressMePanel = new PressMePanel();&lt;br /&gt;        JTextField textField = new JTextField(10);&lt;br /&gt;        textField.addActionListener(pressMePanel);&lt;br /&gt;&lt;br /&gt;        add(textField);&lt;br /&gt;        add(pressMePanel);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;That "works," in that when we press enter in the text field—which fires an &lt;code&gt;ActionEvent&lt;/code&gt;—the message comes up in the &lt;code&gt;PressMePanel&lt;/code&gt;. However, it doesn't really make sense. The interaction logic of &lt;code&gt;PressMePanel&lt;/code&gt; is internal. It's simply not designed to be used in this way, but because it implemented &lt;code&gt;ActionListener&lt;/code&gt;, this is perfectly legal.Defensive coding practice dictates that we should prevent this kind of abuse if we can. We get much better encapsulation if, instead of having &lt;code&gt;PressMePanel&lt;/code&gt; implement &lt;code&gt;ActionListener&lt;/code&gt;, it creates its own delegate listeners. One easy way to do this is to create inner classes to handle it:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;&lt;br /&gt;import javax.swing.BoxLayout;&lt;br /&gt;import javax.swing.JButton;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JTextField;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * A frame that holds a button which really wants to be pressed.&lt;br /&gt; * &lt;br /&gt; * @author &amp;lt;a href="http://paulgestwicki.blogspot.com"&amp;gt;Paul Gestwicki&amp;lt;/a&amp;gt;&lt;br /&gt; */&lt;br /&gt;public final class PressMePanel extends JPanel {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Start the application.&lt;br /&gt;     * &lt;br /&gt;     * @param args&lt;br /&gt;     *            command-line arguments (ignored)&lt;br /&gt;     */&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        JFrame frame = new JFrame();&lt;br /&gt;        frame.getContentPane().add(new PressMePanel());&lt;br /&gt;        frame.pack();&lt;br /&gt;        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;        frame.setVisible(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /** The uneditable text field into which we will put our output */&lt;br /&gt;    private JTextField outputField;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Create an instance of this class.&lt;br /&gt;     */&lt;br /&gt;    public PressMePanel() {&lt;br /&gt;        outputField = new JTextField(20);&lt;br /&gt;        outputField.setEditable(false);&lt;br /&gt;&lt;br /&gt;        JButton button = new JButton("Press me");&lt;br /&gt;        button.addActionListener(&lt;b&gt;new MyButtonListener()&lt;/b&gt;);&lt;br /&gt;&lt;br /&gt;        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));&lt;br /&gt;        add(button);&lt;br /&gt;        add(outputField);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;b&gt;/**&lt;br /&gt;     * Listens for action events, posting a message to the {@link #outputField}&lt;br /&gt;     * when this happens.&lt;br /&gt;     * &lt;br /&gt;     * @author &amp;lt;a href="http://paulgestwicki.blogspot.com"&amp;gt;Paul Gestwicki&amp;lt;/a&amp;gt;&lt;br /&gt;     */&lt;br /&gt;    private final class MyButtonListener implements ActionListener {&lt;br /&gt;        @Override&lt;br /&gt;        public void actionPerformed(ActionEvent arg0) {&lt;br /&gt;            outputField.setText("Thank you.");&lt;br /&gt;        }&lt;br /&gt;    }&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I've added a private inner class, &lt;code&gt;MyButtonListener&lt;/code&gt;, which has one job: listen for action events and update the message in &lt;code&gt;outputField&lt;/code&gt; when that happens. This is nicely encapsulated, and by making the class private, I'm not exporting it for potential abuse by other parts of the system. (Notice that I've also made both classes final. In the spirit of defensive programming, if I'm not designing for extension, I should prevent it.)There's another design improvement to be made. By defining the &lt;code&gt;MyButtonListener&lt;/code&gt; as a class, I can now make as many instances of it as I want. Yet, my semantic model is that there is really only one, and it's attached to the button. Notice that this is implied by the naming of the class. Let's use anonymous inner classes instead:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;&lt;br /&gt;import javax.swing.BoxLayout;&lt;br /&gt;import javax.swing.JButton;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JTextField;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * A frame that holds a button which really wants to be pressed.&lt;br /&gt; * &lt;br /&gt; * @author &amp;lt;a href="http://paulgestwicki.blogspot.com"&amp;gt;Paul Gestwicki&amp;lt;/a&amp;gt;&lt;br /&gt; */&lt;br /&gt;public final class PressMePanel extends JPanel {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Start the application.&lt;br /&gt;     * &lt;br /&gt;     * @param args&lt;br /&gt;     *            command-line arguments (ignored)&lt;br /&gt;     */&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        JFrame frame = new JFrame();&lt;br /&gt;        frame.getContentPane().add(new PressMePanel());&lt;br /&gt;        frame.pack();&lt;br /&gt;        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;        frame.setVisible(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /** The uneditable text field into which we will put our output */&lt;br /&gt;    private JTextField outputField;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Create an instance of this class.&lt;br /&gt;     */&lt;br /&gt;    public PressMePanel() {&lt;br /&gt;        outputField = new JTextField(20);&lt;br /&gt;        outputField.setEditable(false);&lt;br /&gt;&lt;br /&gt;        JButton button = new JButton("Press me");&lt;br /&gt;        button.addActionListener(&lt;b&gt;new ActionListener() {&lt;br /&gt;            @Override&lt;br /&gt;            public void actionPerformed(ActionEvent arg0) {&lt;br /&gt;                outputField.setText("Thank you.");&lt;br /&gt;            }&lt;br /&gt;        }&lt;/b&gt;);&lt;br /&gt;&lt;br /&gt;        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));&lt;br /&gt;        add(button);&lt;br /&gt;        add(outputField);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now, there is no doubt that this specific behavior is tied to the button. Of course, if I had a need to replicate this behavior, I could make a named class or an Action object, but we can cross that bridge when we get there. Better to solve the problem at hand than one that may or may not come up later.Moving to an anonymous inner class provides with another interesting refactoring opportunity. I like to have as few fields in my objects as I can. Now that the text field is only ever accessed or manipulated from the constructor, I can pull it into a local variable rather than an instance variable. The only piece of Java magic required for this is that we have to make the field final so that it can be read from the inner class:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;&lt;br /&gt;import javax.swing.BoxLayout;&lt;br /&gt;import javax.swing.JButton;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JTextField;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * A frame that holds a button which really wants to be pressed.&lt;br /&gt; * &lt;br /&gt; * @author &amp;lt;a href="http://paulgestwicki.blogspot.com"&amp;gt;Paul Gestwicki&amp;lt;/a&amp;gt;&lt;br /&gt; */&lt;br /&gt;public final class PressMePanel extends JPanel {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Start the application.&lt;br /&gt;     * &lt;br /&gt;     * @param args&lt;br /&gt;     *            command-line arguments (ignored)&lt;br /&gt;     */&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        JFrame frame = new JFrame();&lt;br /&gt;        frame.getContentPane().add(new PressMePanel());&lt;br /&gt;        frame.pack();&lt;br /&gt;        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;        frame.setVisible(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Create an instance of this class.&lt;br /&gt;     */&lt;br /&gt;    public PressMePanel() {&lt;br /&gt;        &lt;b&gt;final JTextField&lt;/b&gt; outputField = new JTextField(20);&lt;br /&gt;        outputField.setEditable(false);&lt;br /&gt;&lt;br /&gt;        JButton button = new JButton("Press me");&lt;br /&gt;        button.addActionListener(new ActionListener() {&lt;br /&gt;            @Override&lt;br /&gt;            public void actionPerformed(ActionEvent arg0) {&lt;br /&gt;                outputField.setText("Thank you.");&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));&lt;br /&gt;        add(button);&lt;br /&gt;        add(outputField);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Nice and tidy, but more importantly, our &lt;tt&gt;PressMePanel&lt;/tt&gt; is well-encapsulated.&lt;br /&gt;&lt;br /&gt;Now, textbook and tutorial authors, you can stop making every class under the sun implement listener interfaces.&lt;br /&gt;&lt;br /&gt;You're welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7261266367116844957?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7261266367116844957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/ui-classes-should-not-implement-event.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7261266367116844957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7261266367116844957'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/10/ui-classes-should-not-implement-event.html' title='UI classes should not implement event listener interfaces'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5206679903979108253</id><published>2011-09-29T18:28:00.001-04:00</published><updated>2011-09-29T18:28:33.423-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><title type='text'>Students' reactions to the XP Episode</title><content type='html'>After giving them a brief introduction and experience with &lt;a href="http://www.extremeprogramming.org/rules/pair.html"&gt;pair programming&lt;/a&gt;, I had my students read &lt;a href="http://www.objectmentor.com/resources/articles/xpepisode.htm"&gt;Engineer Notebook: An Extreme Programming Episode&lt;/a&gt; and write an essay response. I found a few of their comments particularly insightful, and so I'd like to share them here.&lt;br /&gt;&lt;br /&gt;"I felt that most&amp;nbsp;of the things my partner and I were doing was making statements, but the two Bobs&amp;nbsp;thrive on asking questions."&lt;br /&gt;&lt;br /&gt;"As students we tend to be focused entirely on what we know and what we can do that we don't sit down and realize that most of the people in our class can do the exact same thing."&lt;br /&gt;&lt;br /&gt;"Respect is&amp;nbsp;key to pair programming."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5206679903979108253?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5206679903979108253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/09/students-reactions-to-xp-episode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5206679903979108253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5206679903979108253'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/09/students-reactions-to-xp-episode.html' title='Students&apos; reactions to the XP Episode'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6236980377594840163</id><published>2011-09-28T14:44:00.001-04:00</published><updated>2011-09-28T14:44:29.735-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='strategic planning'/><title type='text'>The words faculty use to describe their activities</title><content type='html'>I am on the university strategic planning committee. Over the course of the last several weeks, we have held many information gathering sessions with stakeholder groups, including faculty, students, parents, employers, and staff. Right now, my subcommittee is analyzing the data from two specific questions asked at the information gathering sessions:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What did you learn about &lt;a href="http://bsu.edu/"&gt;BSU&lt;/a&gt; over the last five years that you did not know before?&lt;/li&gt;&lt;li&gt;If you could choose one area of focus that will have the greatest positive impact on the university, what would it be?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;A few minutes ago, I finished my first pass through the responses, and this was my first attempt at &lt;a href="http://en.wikipedia.org/wiki/Grounded_theory"&gt;open coding&lt;/a&gt;. Most of the data came from faculty sessions, and I was struck by how often the word "teaching" was used. Practically absent from their responses was any discussion of &lt;i&gt;learning&lt;/i&gt;.&amp;nbsp;The words faculty used to describe themselves and their activity matched exactly those words most commonly seen in promotion and tenure guidelines and annual reports: professors are obligated to do some amount "teaching."&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Maybe I am reading too much into this, but it seems to belie a teacher-centric rather than learning-centric philosophy. I am reminded again of the advice of my colleagues,&amp;nbsp;&lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/PhilRelStudies/Directory/ConcepcionDavid.aspx"&gt;David Concepcion&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://cms.bsu.edu/Academics/CentersandInstitutes/EmergingMedia/Experts/MaheshSenagala.aspx"&gt;Mahesh Daas&lt;/a&gt;: that the role of a professor is&amp;nbsp;&lt;i&gt;designer of learning experiences&lt;/i&gt;, and that to be a good teacher, one must be a&lt;i&gt;&amp;nbsp;humble learner&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The dean of my college, &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/CSH/SciencesandHumanities/MaggiottoMichael.aspx"&gt;Michael Maggiotto&lt;/a&gt;, has been encouraging a transition from "teaching, research, and service" to "learning, scholarship, and engagement," as long as I have been here. At first, I dismissed this as simple &lt;a href="http://en.wikipedia.org/wiki/Lambda_calculus#Alpha_equivalence"&gt;alpha equivalence&lt;/a&gt;, and as potentially dangerous as it eschews the relationships among&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Boyer's_model_of_scholarship"&gt;Boyer's four scholarships&lt;/a&gt;. However, reflecting on this in light of the data I just waded through, Maggiotto's approach may be a step in the right direction. The words we use shape the thoughts we think.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As an aside, I can't help but hope that I'm the first person to reference grounded theory and lambda calculus in the same post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6236980377594840163?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6236980377594840163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/09/words-faculty-use-to-describe-their.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6236980377594840163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6236980377594840163'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/09/words-faculty-use-to-describe-their.html' title='The words faculty use to describe their activities'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6622336772215250779</id><published>2011-09-26T09:38:00.001-04:00</published><updated>2011-09-26T09:38:26.203-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='design thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='cs315'/><title type='text'>The Design Thinking Game</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;This morning in my game programming class, we started a short unit on game design. I brought in some prototyping materials and gave the students ten minutes to whip up a board game in the roll-and-move genre. This was inspired by &lt;a href="http://teachingdesign.blogspot.com/"&gt;Ian Schreiber&lt;/a&gt;'s &lt;a href="http://gamedesignconcepts.wordpress.com/2009/06/29/level-1-overview-what-is-a-game/"&gt;Game Design Concepts Level 1&lt;/a&gt; activity and its primary purpose is to get students over the &lt;a href="http://bbrathwaite.wordpress.com/2008/07/07/fear-of-the-game/"&gt;invisible barrier&lt;/a&gt;, "what if I cannot make a game?"&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;To explain what "design" is, I had started with a brief presentation of &lt;a href="http://paulgestwicki.blogspot.com/2010/11/design-thinking-graphic.html"&gt;design thinking&lt;/a&gt;. Once I got the students started with the activity, I decided to sketch out a game as well. Glancing at the chalkboard, it struck me that the design thinking cycle could be modeled as a board game, so I made this:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-UvPElbu-ZoI/ToB8BhqmtxI/AAAAAAAAAds/hPsY8IkOO7E/s1600/IMG_20110926_084456.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-UvPElbu-ZoI/ToB8BhqmtxI/AAAAAAAAAds/hPsY8IkOO7E/s320/IMG_20110926_084456.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The captions on the boxes are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Empathy: an audience&lt;/li&gt;&lt;li&gt;Identify: a problem&lt;/li&gt;&lt;li&gt;Ideate: a solution&lt;/li&gt;&lt;li&gt;Build: a prototype&lt;/li&gt;&lt;li&gt;Test: a strategy&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Each player starts at Empathy. Each turn, you roll a die and move that many spaces along the cycle. Grab a blank card and write down something that happens in that phase, using the caption to guide you. For example, my first turn, I rolled a three, and ended up on Build, so I made a build card, "Sketch." Then I rolled a two, putting me on Empathy, so I made an empathy card called, "Elderly." As soon as there is at least one card for each category, that player takes one card at random from each category and has to make narrative that explains how these five things fit together. I didn't get far enough in my own design process to decide on an initial scoring or elimination process, but I imagined that the other players would somehow score the story, and there would be a time or point threshold to trigger the end of the game.&lt;br /&gt;&lt;br /&gt;That's it. A ten-minute game, most obviously inspired by design thinking, &lt;a href="http://en.wikipedia.org/wiki/1000_Blank_White_Cards"&gt;1000 Blank White Cards&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://boardgamegeek.com/boardgame/39856/dixit"&gt;Dixit&lt;/a&gt;. Is it fun? No, not really. You fly around the board and are forced to invent artifacts separated from any context, so you can only be very generic. Is it good? No, not really. It completely misses the point of design thinking, that you have to go through each phase to get to the next. So, why write it up here? It was actually a fun thought experiment. I used this ten-minute design exercise at the AIM conference a week ago, but I did not actually participate, I just observed. It was much more fun to actually get in and do it. I also enabled me then to present my flawed game design first, demonstrating the importance of metacognition, specifically learning from the process rather than judging the artifact too harshly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6622336772215250779?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6622336772215250779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/09/design-thinking-game.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6622336772215250779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6622336772215250779'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/09/design-thinking-game.html' title='The Design Thinking Game'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-UvPElbu-ZoI/ToB8BhqmtxI/AAAAAAAAAds/hPsY8IkOO7E/s72-c/IMG_20110926_084456.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-725380658019884719</id><published>2011-09-06T12:48:00.000-04:00</published><updated>2011-11-06T21:01:35.926-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Guest Post at Play the Past</title><content type='html'>&lt;a href="http://www.playthepast.org/?p=1847"&gt;My guest post at Play the Past is now online&lt;/a&gt;. It provides a birds-eye view of the design and development of &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt;, which I have written about extensively here.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-725380658019884719?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/725380658019884719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/09/guest-post-at-play-past.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/725380658019884719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/725380658019884719'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/09/guest-post-at-play-past.html' title='Guest Post at Play the Past'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-1644068812437930062</id><published>2011-08-29T20:33:00.000-04:00</published><updated>2011-08-29T20:33:28.270-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><title type='text'>Peer evaluation rubric</title><content type='html'>I read through a portion of &lt;i&gt;&lt;a href="http://www.amazon.com/Computer-Science-Project-Work-Principles/dp/1849968659/"&gt;Computer Science Project Wor&lt;/a&gt;&lt;/i&gt;k. If found some of the book to be difficult to read because it is written for the UK higher educational system, whose structures I do not fully comprehend. It makes matters worse when the authors throw around terms that I can only assume are equivalent to AP, credit-hours, FTE's, and such in the United States. Ignoring the specifics of the implementations, I did find some good tips that I can adapt to my own practice. In fact, one of their key contributions is a studied observation that &lt;i&gt;transfer expects transformation&lt;/i&gt;. That is, the transformation that one applies to found scholarship is an indicator of transfer of practice.&lt;br /&gt;&lt;br /&gt;Most of my notes from reading the book fit handily into one of my notebooks, but there is one piece I would like to share and archive here: a sample peer- and self-evaluation form from pages 250-251. It is presented as part of bundle 8.6, "Moderation Using Student Input." The form is in two parts: management characteristics and technical contribution. Both use a seven-point Likert-type scale, but while the first part uses distinct semantic labels for each end-point,&lt;br /&gt;the second simply uses "well above average," "average," and "well below average" for all categories.&lt;br /&gt;&lt;br /&gt;These are the categories and scale labels for the management skills portion.&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt; &lt;/tbody&gt; &lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;High-end&lt;/th&gt;&lt;th&gt;Low-end&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;time management&lt;/td&gt;&lt;td&gt;highly organized&lt;/td&gt;&lt;td&gt;unreliable&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;responsiveness to others&lt;/td&gt;&lt;td&gt;respects views&lt;/td&gt;&lt;td&gt;domineering&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;coping with stress&lt;/td&gt;&lt;td&gt;always calm&lt;/td&gt;&lt;td&gt;panics easily&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;cooperation&lt;/td&gt;&lt;td&gt;always cooperates&lt;/td&gt;&lt;td&gt;goes own way&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;self-confidence&lt;/td&gt;&lt;td&gt;able to take criticism&lt;/td&gt;&lt;td&gt;can't take criticism&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;leadership&lt;/td&gt;&lt;td&gt;takes initiative&lt;/td&gt;&lt;td&gt;follows others&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;problem analysis&lt;/td&gt;&lt;td&gt;incisive&lt;/td&gt;&lt;td&gt;woolly&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;project management&lt;/td&gt;&lt;td&gt;best practice&lt;/td&gt;&lt;td&gt;activity lacks coordination&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td&gt;project evaluation&lt;/td&gt;&lt;td&gt;systematic and objective&lt;/td&gt;&lt;td&gt;casual and subjective&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The categories for the technical contribution portion are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Task Analysis&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Conceptual Design&lt;/li&gt;&lt;li&gt;VDM&lt;/li&gt;&lt;li&gt;Manager's Meetings&lt;/li&gt;&lt;li&gt;Team Meetings&lt;/li&gt;&lt;li&gt;Low Level Design&lt;/li&gt;&lt;li&gt;Coding&lt;/li&gt;&lt;li&gt;Testing&lt;/li&gt;&lt;li&gt;Documentation&lt;/li&gt;&lt;li&gt;Demonstration&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Both forms provide room for open-ended comments as well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;VDM? I have no idea. Unfortunately, while the book acknowledges that portions are written by different authors, it does not identify who wrote this part, nor whether or not is based on existing scholarship. I would like to see an evaluation of this instrument in particular, since it seems to be the only recommendation in the book that is provided in such specificity—despite knowing and withing acknowledging that it should be transformed to be transferred!&lt;br /&gt;&lt;br /&gt;On first glance, I was impressed by the custom labels. I love the use of words like "incisive" and "woolly" to describe how a student interacted with a learning experience, and I think it's good for students to think about the capacity to take criticism as an indicator of self-confidence. As I looked closer, I noticed scales like "leadership," which here is measured in terms of taking initiative versus following. I'm not sure I like that dichotomy, but again, that's where I would like to read a formal evaluation of this instrument in particular. The more I read about using this instrument (which was less than one page), the less I liked it, as the author suggested using a fairly straightforward scoring mechanism: average students' self-assessment with their peer assessments, sprinkle with up to 5% secret sauce, and call your work done. Once again I have to admit my ignorance of the grading environment in which this scheme was designed, but I would be unhappy with this in an A/B/C/D/F scheme. Specifically, where would one cut off, say, "A=Excellent" with such an approach?&lt;br /&gt;&lt;br /&gt;In any case, there are some interesting categories here for student self- and peer-assessment, and I can see the value in handing out a form like this at the start of a project to get students thinking about how their contributions may be classified. No one wants to be woolly.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-1644068812437930062?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/1644068812437930062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/peer-evaluation-rubric.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1644068812437930062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1644068812437930062'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/peer-evaluation-rubric.html' title='Peer evaluation rubric'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5535415875370876549</id><published>2011-08-27T09:59:00.001-04:00</published><updated>2011-08-27T13:38:45.433-04:00</updated><title type='text'>Allergies</title><content type='html'>Regular readers of my blog may wish to know that, as of this week, &lt;a href="http://paulgestwicki.blogspot.com/2011/06/predator-and-pray.html"&gt;I am back on my allergy medicine&lt;/a&gt;. Also, I was not spontaneously promoted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5535415875370876549?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5535415875370876549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/allergies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5535415875370876549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5535415875370876549'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/allergies.html' title='Allergies'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-2051521052687440561</id><published>2011-08-22T09:26:00.002-04:00</published><updated>2011-08-22T09:27:27.705-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><title type='text'>My morning in pictures</title><content type='html'>Ah, the first day of the Fall semester. My &lt;a href="http://www.cs.bsu.edu/homepages/pvg/courses/cs315Fa11/"&gt;game programming class&lt;/a&gt; meets at 8am. Let me tell you about the morning so far.&lt;br /&gt;&lt;br /&gt;I came into the Math lounge to put my lunch into the refrigerator. I pulled it out of my backpack and slung my backpack up onto my shoulder. Not having latched my bag shut, my favorite mug fell from it and shattered into a million pieces on the ground.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-EjWFkaXtX5Q/TlJUHrbJxcI/AAAAAAAAAWQ/q6LyCtD_pBk/s1600/169832_499211259274_841339274_6028435_4997650_o.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-EjWFkaXtX5Q/TlJUHrbJxcI/AAAAAAAAAWQ/q6LyCtD_pBk/s320/169832_499211259274_841339274_6028435_4997650_o.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Favorite mug, before the accident&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I picked up the bigger pieces, cutting my finger in the process, then asked the receptionist in the Math department to call custodial to get the rest of the shards.&lt;br /&gt;&lt;br /&gt;Returning to my office, I realized I still had my lunch bag in my hand, so then I went back and put it in the 'fridge.&lt;br /&gt;&lt;br /&gt;I poured my coffee from my travel mug into the back-up mug in my office, my good-old ACM mug.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-AqF5xxZUO9M/TlJVVJa5TVI/AAAAAAAAAWU/CXPixmEwFqk/s1600/IMG_20110822_090151.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-AqF5xxZUO9M/TlJVVJa5TVI/AAAAAAAAAWU/CXPixmEwFqk/s320/IMG_20110822_090151.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Old Faithful&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;A bit of background on my morning coffee: Last night, I noticed that both of my french presses were in the dishwasher, which was nigh full, and I expected that the dishwasher would be run overnight. Of course, I did not actually run it, and so in the morning, I was left without a clean press. My backup plan was already in place: use my cold-brew coffee concentrate! I mixed it with some boiling water and half-and-half, and that's what I brought to the office with me. The result was that when I tested the coffee, it was not quite as hot as I would have liked.&lt;br /&gt;&lt;br /&gt;Problem easily solved. I went into the CS conference room to put my coffee in the microwave...&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ppUgsNPi4B4/TlJWBLhKKEI/AAAAAAAAAWY/vdQf7hvQIGc/s1600/IMG_20110822_085921.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-ppUgsNPi4B4/TlJWBLhKKEI/AAAAAAAAAWY/vdQf7hvQIGc/s320/IMG_20110822_085921.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Conference room microwave, outside&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;and when I opened the door, I saw this:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-zBA7sy9jTL8/TlJWJ_Tq56I/AAAAAAAAAWc/Mm-lmH_s5Ko/s1600/IMG_20110822_085928.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-zBA7sy9jTL8/TlJWJ_Tq56I/AAAAAAAAAWc/Mm-lmH_s5Ko/s320/IMG_20110822_085928.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Conference room microwave, inside&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Well, ick. The red sludge looks like jam to me, like someone tried to microwave a peanut butter and jelly sandwich, realized it was a bad idea, and left the detritus behind. By this point, it was already about 7:55, &amp;nbsp;and I didn't want to dally—I just wanted hot coffee. I went ahead and put my mug in for 30 seconds, hoping it wouldn't come out tasting of smoked jam. When I opened the door after thirty seconds, &lt;i&gt;a little flying insect came out of the microwave&lt;/i&gt;. Can that even happen?&lt;br /&gt;&lt;br /&gt;I took the coffee out of the microwave and headed down to my classroom, a cozy little room we call RB104. It's a conventional "smart classroom," meaning there's a projector, dongles for attaching a laptop, and a badly designed teaching kiosk. Some of the students were waiting outside the door, so I proceeded to unlock the door with my key. In fact, I locked the door, which I only discovered after unsuccessfully trying to open it; it had been unlocked from the beginning. Properly unlocking the door and flipping on the lights, here's what I saw when I came in:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-gbWUVad9WWk/TlJW29ldvaI/AAAAAAAAAWg/XjYbM9rpEvU/s1600/IMG_20110822_075026.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-gbWUVad9WWk/TlJW29ldvaI/AAAAAAAAAWg/XjYbM9rpEvU/s320/IMG_20110822_075026.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The land that custodians forgot&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;This is 8AM on the first day of classes for the semester, and there's a pile of crap on the desk! Notice that there are two unclaimed notebooks from at least the Summer session, though I think it might be from last Spring, since they looked familiar. Let's take a closer look at that pile on the near side of the table.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-j1HRZiGNcoY/TlJXOvJWdAI/AAAAAAAAAWk/SfA-duzqxs0/s1600/IMG_20110822_075036.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-j1HRZiGNcoY/TlJXOvJWdAI/AAAAAAAAAWk/SfA-duzqxs0/s320/IMG_20110822_075036.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;"Stuff"&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;The mess of cables is normal for the room. There's cabling for the mouse, ethernet, and video. They are sitting on top of a discarded notebook, beside the room's nonfunctional remote control. On the left is a chunk of chalk, an uneaten but ratty-looking Ricola, and a small leaf.&lt;br /&gt;&lt;br /&gt;The real winner, however, is this thing, from the middle of the table.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-9twViiqcpn0/TlJX7WldDiI/AAAAAAAAAWo/DJfel5Bfmc0/s1600/IMG_20110822_075102.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-9twViiqcpn0/TlJX7WldDiI/AAAAAAAAAWo/DJfel5Bfmc0/s320/IMG_20110822_075102.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;What is that thing?&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I moved the mouse next to it for scale. I'll say it again:&amp;nbsp;&lt;i&gt;What is that thing?&lt;/i&gt;&amp;nbsp;At first I thought it was a wad of candle wax that had been handled by someone with soot-covered fingers. It looks kind of like a big ugly toenail. I really have no idea. I did not touch it.&lt;br /&gt;&lt;br /&gt;After cleaning up the desk, I plugged in my laptop to the projector and found that the autofocus was not working. A friendly student adjusted it manually from the middle of the room.&lt;br /&gt;&lt;br /&gt;The good news is that everything got better from here. I talked to my students about how I got interested and involved in game development, showed them some of my and past students' work, and talked about the goals for the semester. They seem a good sort, and despite a rocky start, I think it will be a good semester.&lt;br /&gt;&lt;br /&gt;Good morning!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-2051521052687440561?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/2051521052687440561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/my-morning-in-pictures.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2051521052687440561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2051521052687440561'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/my-morning-in-pictures.html' title='My morning in pictures'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-EjWFkaXtX5Q/TlJUHrbJxcI/AAAAAAAAAWQ/q6LyCtD_pBk/s72-c/169832_499211259274_841339274_6028435_4997650_o.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-491987435675370612</id><published>2011-08-21T17:38:00.002-04:00</published><updated>2011-08-22T07:17:37.901-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>The Escape</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;When a student reminded me that the next&amp;nbsp;&lt;a href="http://www.ludumdare.com/"&gt;Ludum Dare&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.ludumdare.com/compo/"&gt;competition&lt;/a&gt;&amp;nbsp;would be this weekend, at first I was excited about using it as a creative way to ring in the new semester. My plan was to learn more of the toolchain involved in making a simple game in Unity in order to leverage that experience in teaching Game Programming this semester. I spent some time this past week tinkering with&amp;nbsp;&lt;a href="http://www.blender.org/"&gt;Blender&lt;/a&gt;&amp;nbsp;for the first time,&amp;nbsp;&lt;a href="http://www.blendercookie.com/getting-started-with-blender/"&gt;watching tutorials&lt;/a&gt;&amp;nbsp;and making some very simple models.&amp;nbsp;As the weekend drew closer and the real stresses of starting the semester began to rear their heads, I realized that my time would probably best be spent in a combination of last-minute planning and spending quality time with the family.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Ludum Dare announced their theme for the 48-hour game development competition Friday evening: "Escape." After sleeping on the theme, I was inspired Saturday morning to make an entry. So, for your gaming pleasure, I present to you&amp;nbsp;&lt;i&gt;The Escape&lt;/i&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cs.bsu.edu/homepages/pvg/games/the_escape/The_Escape.zip"&gt;Windows version&lt;/a&gt;: Extract the zip file and run the enclosed exe.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.bsu.edu/homepages/pvg/games/the_escape/the_escape.app.zip"&gt;Mac OS X version&lt;/a&gt;: &amp;nbsp;Unzip it and it should magically work.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You could call it a puzzle game.&lt;br /&gt;&lt;br /&gt;I'll write more about the development in a later post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-491987435675370612?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/491987435675370612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/escape_21.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/491987435675370612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/491987435675370612'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/escape_21.html' title='The Escape'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6298768694855640973</id><published>2011-08-15T08:37:00.000-04:00</published><updated>2011-08-15T08:37:35.412-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='higher education'/><title type='text'>Continuing Academically Adrift</title><content type='html'>I was excited to read the final chapter of &lt;i&gt;Academically Adrift&lt;/i&gt;, entitled "A Mandate for Reform." Although I enjoyed reading it, the final chapter was neither as revolutionary nor as specific as I hoped. The authors discuss several inhibitors to change, the most daunting of which is the lack of demand for learning, &lt;a href="http://paulgestwicki.blogspot.com/2011/08/i-am-nearly-finished-reading.html"&gt;which I wrote about a few days ago&lt;/a&gt;. Their suggestions match much of what my own Future of Education Task Force concluded: we need a greater focus on student learning. This support must take the form of both respect and rewards, since as long as teaching is institutionally considered a lesser responsibility to research, then there will be no change.&lt;br /&gt;&lt;br /&gt;Let me be clear that I enjoyed reading the book and consider it a significant contribution to the field. Perhaps it was unfair of me to expect that their conclusions would be more immediately actionable, since their stated goal was research, not reform. Consider, for example, the authors' suggestion that effective reform needs to happen from within the current system, allowing actors to innovate within the existing space of higher education. This compares to my &lt;a href="http://paulgestwicki.blogspot.com/2010/12/future-of-education-inside-and-outside.html"&gt;Future of Education Task Force&lt;/a&gt; recommendation for what we called "The University Sandbox," an initiative that would be authorized to work within the university while ignoring conventional assumptions of higher education. Our recommendation was not codified to the point of being immediately implementable, but I was hoping that &lt;i&gt;Academically Adrift&lt;/i&gt; would provide more examples of how institutions might consider approaching the problem of fostering educational innovation.&lt;br /&gt;&lt;br /&gt;In the final chapter, the authors to begin to fall into the social science trap of claiming their results are broader than what they actually found. Their study used the &lt;a href="http://www.collegiatelearningassessment.org/"&gt;Collegiate Learning Assessment&lt;/a&gt;&amp;nbsp;(CLA) to look specifically at critical thinking, complex reasoning, and writing, measuring a cohort as they entered college and as they finished their sophomore year. They found that individual studying improved students' scores while group study did not, and the last chapter begins to conflate CLA achievement with learning in general. This matches my experience and intuition: a student's ability to individually write an essay should only be improved by that individual practicing writing essays. However, they neglect to mention that CLA-measured skills are not the only skills that need to be learned. For example,&amp;nbsp;there is a body of research in Computer Science education that has shown that pair programming—undeniable a form of group study—improves learning and retention. The authors clear bias for individualized rigor could have been balanced with a caveat that there are disciplinary&amp;nbsp;idiosyncrasies.&lt;br /&gt;&lt;br /&gt;The final chapter's message could be summarized as, "Be deliberate about fostering student learning in higher education."&amp;nbsp;The criticism of cargo-cult active learning was refreshing, given how many papers I have reviewed and presentations I have heard where the researcher has not demonstrated any significant understanding of the fundamental tenets of learning. I also appreciate their argument for more widespread teacher-training within doctoral programs. The crux of their argument is that for the foreseeable future, many more Ph.D.s will be adjunct faculty or in teaching roles than tenure-track at research-intensive schools.&lt;br /&gt;&lt;br /&gt;There is one immediately actionable recommendation for faculty that the authors return to time and again: be rigorous. Their own study and several related studies have shown that rigorous coursework improves student academic achievement. This may seem obvious to those outside the ivory tower, but those of us on the inside have seen how easy it is to trade away rigor for easier teaching. This comes back to the &lt;a href="http://paulgestwicki.blogspot.com/2011/08/i-am-nearly-finished-reading.html"&gt;delicate equilibrium&lt;/a&gt; I wrote about the other day, in which learning is generally not considered worth institutional sacrifice. The good news is that students are hungry for it.&lt;br /&gt;&lt;br /&gt;Despite any nitpicking, I do strongly recommend the book, especially to anyone who is just starting to dip their feet into higher education reform. It is probably best read in conjunction with a book more specifically about learning, such as &lt;a href="http://www.amazon.com/How-People-Learn-Experience-Expanded/dp/0309070368"&gt;&lt;i&gt;How People Learn&lt;/i&gt;&lt;/a&gt;, &lt;a href="http://www.amazon.com/How-Learning-Works-Research-Based-Jossey-Bass/dp/0470484101"&gt;&lt;i&gt;How Learning Works&lt;/i&gt;&lt;/a&gt;, or, for like-minded technocrats, &lt;a href="http://pragprog.com/book/ahptl/pragmatic-thinking-and-learning"&gt;&lt;i&gt;Pragmatic Thinking and Learning&lt;/i&gt;&lt;/a&gt;. (NB: I have not yet read the second book mentioned above, but I have heard good things about it.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6298768694855640973?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6298768694855640973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/continuing-academically-adrift.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6298768694855640973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6298768694855640973'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/continuing-academically-adrift.html' title='Continuing Academically Adrift'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-643047676979918478</id><published>2011-08-11T09:08:00.001-04:00</published><updated>2011-08-11T09:09:10.222-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='higher education'/><title type='text'>Academically Adrift and the Status Quo</title><content type='html'>I am nearly finished reading &lt;i&gt;&lt;a href="http://www.amazon.com/Academically-Adrift-Limited-Learning-Campuses/dp/0226028550"&gt;Academically Adrift: Limited Learning on College Campuses&lt;/a&gt;&lt;/i&gt;. In case you are not familiar with the book, here's the short version. The authors studied 2000+ students from 24 four-year institutions of higher education, giving them tests that measure general (as opposed to discipline-specific) skills that practically all colleges claim to enhance: critical thinking, complex reasoning, and writing. The tests were given before starting college and halfway through the sophomore year, and so they were focusing on the effects of common core curriculum experiences. The results were dismal, with the average gain being very low and about 45% of students showing no improvement.&lt;br /&gt;&lt;br /&gt;The fifth chapter is entitled "A mandate for reform," and it makes an important point about higher education: &lt;i&gt;there is no crisis&lt;/i&gt;. There is no crisis because there is nothing that, right now, is threatening the existence of higher education as an institution. All of the stakeholders are in good position to maintain the status quo. Parents grumble about tuition but continue to pay it in exchange for credentials for their children. Students readily seek out courses that provide little challenge, require minimal work, and allow for plenty of time for social activities, while still maintaining progress towards credentials. Professors minimize interaction with students, exchanging unchallenging courses for high course evaluations and therefore more pay, while also gaining more time for other scholarship—which also leads to more pay. Administrators keep students happy in order to improve recruitment and retention, focusing on revenue streams. Legislators and other politicians gain a credentialed citizenry, improving metrics against competing states, nations, &lt;i&gt;etc.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;This gives me another perspective on why it has been so challenging to try to push for learning reform within higher education: "learning" is completely absent from the status quo. There is nothing about the current balance of powers that supports, rewards, or encourages undergraduate learning, and in fact, to do so would upset the balance.&lt;br /&gt;&lt;br /&gt;From page 127, "Many higher-education administrators and faculty today have largely turned away from earlier conceptions of their roles that recognized that providing support for student academic and social development was a moral imperative worth sacrificing for personally, professionally, and institutionally." &amp;nbsp;There were some on the Future of Education Task Force who were willing to bring up the concept of institutional sacrifice, but I have yet to see this manifest on the Strategic Planning Task Force.&lt;br /&gt;&lt;br /&gt;Looking at it positively, this book gives me more ammunition to support what I believe is the moral imperative to fundamentally improve the higher educational system. The book is well-written and contains plenty of references to supporting literature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-643047676979918478?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/643047676979918478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/i-am-nearly-finished-reading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/643047676979918478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/643047676979918478'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/08/i-am-nearly-finished-reading.html' title='Academically Adrift and the Status Quo'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7185410090755568597</id><published>2011-07-22T15:52:00.001-04:00</published><updated>2011-07-22T15:52:53.048-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Having an impact across campus</title><content type='html'>Following up on &lt;a href="http://paulgestwicki.blogspot.com/2011/07/forced-proximity-and-stand-up-dynamics.html"&gt;yesterday's post&lt;/a&gt; about stand-up meetings, I heard a great story today about an impact that the &lt;a href="https://sites.google.com/site/morgansraidgame/the-team"&gt;Morgan's Raid&lt;/a&gt; team has had in a distant corner of &lt;a href="http://www.bsu.edu/"&gt;Ball State University&lt;/a&gt; campus.&lt;br /&gt;&lt;br /&gt;Towards the end of the Spring semester, &lt;a href="http://cms.bsu.edu/About/AdministrativeOffices/CareerCenter/CareerLab/Staff/MitchellJames.aspx"&gt;James Mitchell&lt;/a&gt; from the &lt;a href="http://cms.bsu.edu/About/AdministrativeOffices/CareerCenter.aspx"&gt;Career Center&lt;/a&gt; gave a one-hour workshop called "How to Market Your &lt;a href="http://cms.bsu.edu/Academics/UndergraduateStudy/BeyondtheClassroom/ImmersiveLearning.aspx"&gt;Immersive Learning&lt;/a&gt; Experience." This was in the middle of the sprint, so he observed the team hold one of their &lt;a href="http://en.wikipedia.org/wiki/Stand-up_meeting"&gt;stand-up meetings&lt;/a&gt; before the workshop. This is the short meeting at the start of each work day in which each team member shares what they have done since yesterday, what they plan to have done for tomorrow, and what impediments are in the way.&lt;br /&gt;&lt;br /&gt;Today is the last day of &lt;a href="http://digitalarchaeologyproject.blogspot.com/"&gt;the Digital Archaeology Project&lt;/a&gt;, and James joined us to give the workshop to this group of students. He told me that he was so impressed by the Morgan's Raid team's stand-up meeting that he has pushed the staff of the Career Center to do something similar, with the hope of improving communication and camaraderie.&lt;br /&gt;&lt;br /&gt;Score one for agile philosophy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7185410090755568597?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7185410090755568597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/07/having-impact-across-campus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7185410090755568597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7185410090755568597'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/07/having-impact-across-campus.html' title='Having an impact across campus'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-8428982202235399267</id><published>2011-07-21T12:00:00.000-04:00</published><updated>2011-07-21T12:00:50.867-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='space'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Forced proximity and stand-up dynamics</title><content type='html'>I noticed something interesting when acting as Scrum Master for the Digital Archaeology Project. Our main meeting room is the Anthropology Department's conference room, which has tables set up in a U-shape.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VHio2va9Rso/TihIIwETEyI/AAAAAAAAAKQ/j_jPDp_q3bU/s1600/emptyroom.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://1.bp.blogspot.com/-VHio2va9Rso/TihIIwETEyI/AAAAAAAAAKQ/j_jPDp_q3bU/s320/emptyroom.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;While some of the students knew each other before the start of the project, many did not. When we started our first stand-up meeting, it was clear that the students wanted to stand around the outside of the tables, where they had sat down upon arrival. I shepherded the team towards the center of the tables in order to have their stand-up meeting.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-1aWUarRUywg/TihIDAFeLrI/AAAAAAAAAKM/P4hRDs0azL8/s1600/standup.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="http://1.bp.blogspot.com/-1aWUarRUywg/TihIDAFeLrI/AAAAAAAAAKM/P4hRDs0azL8/s320/standup.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There were three professors in the room, and we were all seated on the outside of the U during the stand-up meeting. I think this is significant, since from the very start of Sprint 1 to today, our last stand-up meeting, the students never turned and reported their progress to us, the Product Owners and Scrum Master. Every meeting, the team exemplified the agile best practice of reporting to their teammates. Even though there was clear line of sight among everyone in the room, the tables provided a psychological barrier that allowed the team to carve out its own private space in the middle of the room, without losing the benefit of having the Scrum Master listening in to determine how to remove impediments.&lt;br /&gt;&lt;br /&gt;The cost of the room configuration was paid in Sprint Planning meetings. We used a portion of the wall for our task board, which comprised of colored index cards, tape, and yarn.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KyTQD8tRxAk/TihK4fmpkAI/AAAAAAAAAKg/i6Z26Qh5TtY/s1600/board.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" src="http://3.bp.blogspot.com/-KyTQD8tRxAk/TihK4fmpkAI/AAAAAAAAAKg/i6Z26Qh5TtY/s320/board.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The cards are standard 3x5, and so to write user stories or tasks on them requires one to write relatively small, around 22 points. During the Sprint Planning meetings, however, the team would sit within the U in two rows. The close row, about eight feet from the wall, could see and read all the tasks, modulo handwriting issues. The next row, probably three times as far, could not make out a thing written on the cards. There wasn't really a way to get everyone close enough to read and still be comfortable, not without moving tables around. In retrospect, perhaps we should have just moved tables around for these meetings. Also, the complications of the space were exacerbated by the fact that we skipped the product planning meetings in which the team would discuss story points per user story: because of our very tight timeline, I assigned story points based on intuition.&lt;br /&gt;&lt;br /&gt;There's not enough time in four one-week sprints to react to all the complications that can arise. It would have been nice to have more time in this space to see how to optimally use it. Next semester, I'll be back in my usual Computer Science classrooms, which come with their own issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-8428982202235399267?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/8428982202235399267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/07/forced-proximity-and-stand-up-dynamics.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8428982202235399267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8428982202235399267'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/07/forced-proximity-and-stand-up-dynamics.html' title='Forced proximity and stand-up dynamics'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VHio2va9Rso/TihIIwETEyI/AAAAAAAAAKQ/j_jPDp_q3bU/s72-c/emptyroom.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-481893120406208755</id><published>2011-07-19T14:53:00.000-04:00</published><updated>2011-07-19T14:53:26.553-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Manager's Guilt</title><content type='html'>We're in the final week of the &lt;a href="http://digitalarchaeologyproject.blogspot.com/"&gt;Digital Archaeology Project&lt;/a&gt;, and the students have really hit stride in terms of productivity. The content team has developed a working understanding of iterative design, and they are dealing with the technical challenge of XML-as-a-DSL. (NB: Not ideal, but in a five-week timeframe, nigh inevitable.) The technical team has shown remarkable growth in working with &lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt;: as I watch and listen to them work, I observe most of the conversation is about the problems of the domain, not problems with the technology.&lt;br /&gt;&lt;br /&gt;Yesterday I started reading &lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;Clean Code&lt;/a&gt;, by &lt;a href="http://www.objectmentor.com/omTeam/martin_r.html"&gt;Robert C. Martin&lt;/a&gt;. I've been enjoying it and am considering using it for Fall's CS222 class, but as I read it, I was forced to acknowledge the dual roles I have been playing on the digital archaeology project—or perhaps, the dual roles I'm not playing.&lt;br /&gt;&lt;br /&gt;Early in the book, on page 6, Martin describes the tension between managers and developers, specifically with respect to a manager's need to meet production goals and a developer's need to keep code clean.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"But wait!" you say. "If I don't do what my manager says, I'll be fired." Probably not. Most managers want the truth, even when they don't act like it. Most managers want good code, even when they are obsessing about the schedule. They may defend the schedule and requirements with passion; but that's their job. It's &lt;i&gt;your&lt;/i&gt; job to defend the code with equal passion.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I had a discussion (moderated by Google+) with the technology team just yesterday in which they pointed out that our methodology had been &lt;i&gt;ad hoc&lt;/i&gt; and that formal code reviews would probably have helped our progress. It forced me to realize that I had been acting only as a project manager, trying to push this ambitious project into its five-week timeframe without stopping to consider the needs of the developers to write clean code. More specifically, I fear that I did not uphold my duty as an instructor to help the students learn how to do these code reviews, how to write usable code. &lt;a href="http://digitalarchaeologyproject.blogspot.com/2011/07/ebbings-of-mindflow.html"&gt;David's recent post on the team blog&lt;/a&gt; highlights a symptom of this problem: we both saw that some of his code was unclean, but I fear I did not adequately authorize him to be able to tell me that he needed the time to clean it up. That is, if I only criticized it but did not impart on him the authority to deal with the criticism, then it was a learning opportunity forever lost.&lt;br /&gt;&lt;br /&gt;Not that this has all been bad, by any means. Watching the team learn .NET with almost no prior introduction to it was great, and as I mentioned above, their savvy with Unity is laudable, especially after such little calendar-time working on it. Several times, we have been able to reflect on our lessons from &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; and apply them to this new context, for both technical design and experience design issues.&lt;br /&gt;&lt;br /&gt;But, as this is my place for reflective practice, I feel it is important for me to reflect on the feeling of guilt that washed over me as I read Martin's book. The challenge for me, moving forward, is to me cognizant of my two roles. This is significant for project-oriented, inquiry-based learning. For me to be a facilitator of learning, it's not enough to be a project manager: I need to be aware of those times that the schedule needs to be adjusted in order to help the team to understand the "principles, patterns, practices, and heuristics" that then they can "grind... into your fingers, eyes, and gut by working hard and practicing." (Martin, Clean Code, p.xxvi)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-481893120406208755?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/481893120406208755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/07/managers-guilt.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/481893120406208755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/481893120406208755'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/07/managers-guilt.html' title='Manager&apos;s Guilt'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-2484559720395370152</id><published>2011-06-25T15:56:00.000-04:00</published><updated>2011-06-25T15:56:16.375-04:00</updated><title type='text'>Digital Archaeology Project Blog</title><content type='html'>I have mentioned this Summer's digital archaeology simulation project in other posts. We started the project last Monday, and the team has set up a blog where we are sharing some reflections. Check it out at &lt;a href="http://digitalarchaeologyproject.blogspot.com/"&gt;http://digitalarchaeologyproject.blogspot.com/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The posts there are being used to foster reflective practice and metacognition. They are relatively unstructured, the students having no real guidelines or requirements for posting other than using it to share their thoughts and feelings. There have been some interesting bits shared there so far, and we've asked each of our eight undergraduates to post there about once a week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-2484559720395370152?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/2484559720395370152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/digital-archaeology-project-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2484559720395370152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2484559720395370152'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/digital-archaeology-project-blog.html' title='Digital Archaeology Project Blog'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3224812342879327118</id><published>2011-06-19T11:11:00.000-04:00</published><updated>2011-06-19T11:11:00.267-04:00</updated><title type='text'>Relying on technology</title><content type='html'>From &lt;a href="http://travel.usatoday.com/flights/story/2011/06/United-recouping-from-canceled-delayed-flights/48564346/1"&gt;USA Today&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;A five-hour computer outage that virtually shut down United Airlines Friday night and early Saturday is a stark reminder of how dependent airlines have become on technology.&lt;br /&gt;&lt;/blockquote&gt;Airplanes, for example.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3224812342879327118?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3224812342879327118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/relying-on-technology.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3224812342879327118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3224812342879327118'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/relying-on-technology.html' title='Relying on technology'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-9103476737803192575</id><published>2011-06-16T08:50:00.000-04:00</published><updated>2011-06-16T08:50:05.289-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='entity system'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='dsl'/><title type='text'>A Ruby DSL for creating entity system components in Java</title><content type='html'>Have you ever been working with &lt;a href="http://entity-systems.wikidot.com/"&gt;entity system architectures&lt;/a&gt; in Java and wished for a quicker way to prototype components? Well, you've come to the right place.&lt;br /&gt;&lt;br /&gt;After working with entity systems for about year, I have an idiosyncratic way of defining any of my components. Keep in mind that components are just dumb data objects, not proper OO-objects, and I'm roughly following &lt;a href="http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/"&gt;Adam Martin's approach&lt;/a&gt;. Here's the way I would define a position component for two-dimensional floating-point space:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;public class Position {&lt;br /&gt;&lt;br /&gt;    private float x;&lt;br /&gt;    private float y;&lt;br /&gt;    &lt;br /&gt;    public float x() { return x; }&lt;br /&gt;    public float y() { return y; }&lt;br /&gt;    &lt;br /&gt;    public Position x(float x) { this.x=x; return this; }&lt;br /&gt;    public Position y(float y) { this.y=y; return this; }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I've skipped documentation for the sake of brevity. I like to keep my data private, even though it's exposed through accessors and mutators&amp;mdash;I just can't bring myself to make public instance fields in Java. The naming convention for accessors and mutators is a Smalltalk approach, using the same name for both accessor and mutator, which can lean designs towards fluent API design instead of pushbutton (see &lt;a href="http://www.amazon.com/Domain-Specific-Languages-Addison-Wesley-Signature-Fowler/dp/0321712943"&gt;Fowler's DSL book&lt;/a&gt; for more on this). The mutator returns &lt;code&gt;code&lt;/code&gt; to promote fluent API design as well, to permit code like the following.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;Position p = new Position().x(10).y(15);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now if I'm feeling really spiffy, I'll use a &lt;a href="http://en.wikipedia.org/wiki/Builder_pattern"&gt;builder&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Position p = new Position.Builder().x(10).y(15).build();&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;but that's not my point.&lt;br /&gt;&lt;br /&gt;My point is that this is almost all boilerplate code. All I really want to say is that there's a component called &lt;code&gt;Position&lt;/code&gt; and it has two &lt;code&gt;float&lt;/code&gt;s, &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt;. So maybe what I really want to be able to write is something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Component.build :Position do&lt;br /&gt;  float :x&lt;br /&gt;  float :y&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The title of the post gives it away, but this is a little Ruby DSL that I hacked together this afternoon, just to see if I could. I've been meaning to learn &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt; for some time. I have read quite a bit about Ruby and its use in DSLs, but never actually created one. This time around, I used &lt;a href="http://yonkeltron.com/2010/05/13/creating-a-ruby-dsl/"&gt;Jonathan Magen's tutorial&lt;/a&gt; as a reference.&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;Component&lt;/code&gt; module is the starting point, and it uses what I take to be a fairly standard approach, sending blocks of code from the context to be executed within the object context:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;module Component&lt;br /&gt;  def self.build(name, &amp;amp;block)&lt;br /&gt;    builder = ComponentBuilder.new(name)&lt;br /&gt;    builder.instance_eval(&amp;amp;block)&lt;br /&gt;    builder.build()&lt;br /&gt;    return builder&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The one custom piece is the &lt;code&gt;build&lt;/code&gt; method on the &lt;code&gt;ComponentBuilder&lt;/code&gt;. What this does (perhaps not clearly indicated by the name, in retrospect) is tell the constructed object to dump out a Java source file based on the content of the block. The &lt;code&gt;ComponentBuilder&lt;/code&gt; looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;class ComponentBuilder &lt;br /&gt;  def initialize(name)&lt;br /&gt;    @name = name&lt;br /&gt;    @floats = []&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def float(x)&lt;br /&gt;    @floats &amp;lt;&amp;lt; x&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def build&lt;br /&gt;    File.open(@name.to_s + &amp;quot;.java&amp;quot;, &amp;quot;w&amp;quot;) do &amp;#124;theFile&amp;#124;&lt;br /&gt;      theFile.syswrite(&amp;quot;public class #{@name.to_s} implements Component {\n&amp;quot;)&lt;br /&gt;      unless @floats.nil? &lt;br /&gt;        @floats.each do &amp;#124;var&amp;#124;&lt;br /&gt;          theFile.syswrite &amp;lt;&amp;lt;BLOCK&lt;br /&gt;    private float #{var};&lt;br /&gt;    public float #{var}() { return #{var}; }&lt;br /&gt;    public #{@name.to_s} #{var}(float #{var}) {&lt;br /&gt;        this.#{var} = #{var};&lt;br /&gt;        return this;&lt;br /&gt;    }&lt;br /&gt;BLOCK&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;      theFile.syswrite(&amp;quot;}&amp;quot;)&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Here's a very quick walkthrough for those readers who do not know Ruby. The &lt;code&gt;initialize&lt;/code&gt; method is the constructor, and it's setting the instance variable &lt;code&gt;@name&lt;/code&gt; to the argument's value and initializing an empty array for &lt;code&gt;@floats&lt;/code&gt;. The next method is called &lt;code&gt;float&lt;/code&gt;, which is not a reserved word in Ruby, and it appends its argument to the &lt;code&gt;@floats&lt;/code&gt; array. The &lt;code&gt;build&lt;/code&gt; method opens the appropriately-named file, writes the class declaration, and then iterates through the &lt;code&gt;@floats&lt;/code&gt; field, dumping out the field, accessor, and mutator definition for each one.&lt;br /&gt;&lt;br /&gt;There were two specific pieces of Ruby syntax that I had to learn to make this work: &lt;a href="http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/syntax.html#here_doc"&gt;here documents&lt;/a&gt; and &lt;a href="http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/syntax.html#exprsub"&gt;expression substitution in strings&lt;/a&gt;. The oddly named &amp;quot;here documents&amp;quot; are multiline string literals. In my program, they run from &lt;code&gt;&amp;lt;&amp;lt;BLOCK&lt;/code&gt; to the recurrence of &lt;code&gt;BLOCK&lt;/code&gt;. This is a really useful feature for a program that is essentially filling templates and dumping them out. C# has s&lt;a href="http://stackoverflow.com/questions/1100260/multiline-string-literal-in-c"&gt;omething similar&lt;/a&gt;, but Java&amp;mdash;my usual production language&amp;mdash; does not. Note that &lt;a href="http://groovy.codehaus.org/Strings%2Band%2BGString"&gt;you can do it with Groovy&lt;/a&gt;, though it appears the proposal to put this in 1.7 hasn't been approved. Regardless, expression substitution in strings is simple and elegant: within a string literal, put an expression within &lt;code&gt;#{...}&lt;/code&gt;, and it is evaluated and interpolated into the string at runtime.&lt;br /&gt;&lt;br /&gt;In order to make my program a bit more robust, I added configuration information to control the Java package and path to the destination as well as per-class and per-field embedded Javadoc, passed as optional parameters (via &lt;a href="http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_methods.html"&gt;variable-length argument lists&lt;/a&gt;). The biggest problem I had with this was creating directories automatically from relative paths, but in the end, I pulled it off with a little custom method shown below.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;def defensive_makedir(dir) &lt;br /&gt;  array = dir.split('/')&lt;br /&gt;  accum = '.'&lt;br /&gt;  array.each do &amp;#124;partial&amp;#124; &lt;br /&gt;    accum = accum + &amp;quot;/&amp;quot; + partial&lt;br /&gt;    unless File.directory? accum&lt;br /&gt;      Dir.mkdir accum&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;To integrate this into Eclipse, I wrote a simple ant build script. Honestly, I wrote this very early in the experiment, but the process of debugging Ruby through Eclipse and Ant was quite cumbersome, and once I hopped over to a console and &lt;a href="http://www.gnu.org/software/emacs/"&gt;emacs&lt;/a&gt;, I was able to iterate much faster. To incorporate this into the build process in Eclipse, hop over to your project preferences and check out the "Builders" section. This requires the &lt;a href="http://jruby.org/"&gt;JRuby&lt;/a&gt; jar to be on the build path.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;project name=&amp;quot;FunWithComponents&amp;quot; default=&amp;quot;make_components&amp;quot;&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;property name=&amp;quot;lib&amp;quot; location=&amp;quot;${basedir}/vendor/lib&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;jruby.jar&amp;quot; location=&amp;quot;${lib}/jruby.jar&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;ruby.src&amp;quot; location=&amp;quot;${basedir}/ruby&amp;quot;/&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;generated.src&amp;quot; location=&amp;quot;${basedir}/gen&amp;quot;/&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;target name=&amp;quot;make_components&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;java jar=&amp;quot;${jruby.jar}&amp;quot; fork=&amp;quot;true&amp;quot; dir=&amp;quot;${ruby.src}&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;arg value=&amp;quot;${ruby.src}/make_components.rb&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;/java&amp;gt;&lt;br /&gt;    &amp;lt;/target&amp;gt;&lt;br /&gt;        &lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I enjoyed working on this and learned a bit about Ruby, both in terms of the language and how to express myself within it. I acknowledge that I do so much work in Java, it can be hard to switch paradigms or idioms, and so it's good to actually make something useful from time to time. However, it also makes me wonder if all that trouble is actually worth it when I can immediately imagine how to support a Java-based solution like the following.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt; public static void main(String[] args) {&lt;br /&gt;    ComponentFactory.instance().build(&amp;quot;Position&amp;quot;)//&lt;br /&gt;        .withFloat(&amp;quot;x&amp;quot;)//&lt;br /&gt;        .withFloat(&amp;quot;y&amp;quot;)//&lt;br /&gt;        .build();&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-9103476737803192575?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/9103476737803192575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/ruby-dsl-for-creating-entity-system.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/9103476737803192575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/9103476737803192575'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/ruby-dsl-for-creating-entity-system.html' title='A Ruby DSL for creating entity system components in Java'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-4197427727215992910</id><published>2011-06-13T09:49:00.000-04:00</published><updated>2011-06-13T09:49:56.586-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gamedev'/><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Morgan's Raid Postmortem</title><content type='html'>&lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; enjoyed its public release at the &lt;a href="http://connerprairie.org/"&gt;Conner Prairie&lt;/a&gt; Educator Event last Thursday. With that event, the project is essentially "done," modulo the inevitable maintenance. For the past few weeks I've been sketching out notes for &lt;a href="http://www.gdmag.com/postmort.htm"&gt;a postmortem&lt;/a&gt; in the style of &lt;a href="http://www.gdmag.com/"&gt;Game Developer magazine&lt;/a&gt;, and now I'd like to share these with you. In truth, &amp;nbsp;I vary a bit from their style, looking more at structural elements of the team than technological decisions, but this is natural given the dual nature of the project, which was designed to create something significant while also meeting learning objectives for the developers. (As I think about this, it would be interesting to write one in their style too, but that's a task for another day.)&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 24px; font-weight: bold;"&gt;What went well&lt;/span&gt;&lt;br /&gt;&lt;h3&gt;Scrum&lt;/h3&gt;The application of Scrum was excellent, especially as we refined our process in the Spring. The students and I appreciated the public nature of the task board, and they healthily struggled with what it meant for a &lt;i&gt;team&lt;/i&gt; (not an &lt;i&gt;individual&lt;/i&gt;) to commit to a task. The impact of the burndown charts was evident in how students discussed their work and our progress, and the sprint renegotiation process was relatively smooth. The sprint reviews and retrospectives gave the team a chance to analyze and discuss the product and the processes, and their empowerment helped fuel their continued motivation.&lt;br /&gt;&lt;br /&gt;Our modifications to Scrum were relatively minor. Because the team only met three times per week, we did not have daily stand-ups, but our "once-per-workday" stand-ups were sufficient. One aspect that we completely dropped was the product burndown chart. With our already low number of collaborative, collocated working hours, I decided against adopting formal planning poker sessions. In the Fall, I made up story points based on my experience as a developer and a teacher, and in the Spring, we skipped these entirely. I do not doubt that they would have been an academically interesting feature to keep, but aside from academic intrigue, I think I made the right call to slim Scrum down a bit.&lt;br /&gt;&lt;br /&gt;Due to scheduling issues we could not control, our artist could not meet with the developers in the Fall. As a result, his work was rather undirected and his contributions relatively few. In the Spring, he was able to meet with the developers, creating a real cross-functional team. The results were amazing, and I need to be sure to promote cross-functional teams in future experiences. This is not directly related, but I'm sure that our separation of "designers" and "developers" in the Scourge of Orion project was a major contributor to its lack of productivity.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Playtesting&lt;/h3&gt;Our external playtesting experiences were fundamental to the success of the game, and I express again my gratitude to those teachers and schools who shared their time with us. I know that I learned a lot by seeing how the end users interacted with our various prototypes, but more importantly, I could see how it helped the developers build empathy for the end users.&lt;br /&gt;&lt;br /&gt;It was especially useful to playtest with different demographics. "Indiana fourth grade students" encompasses a wide variety of skills and dispositions, and even in our relatively limited playtesting, we were able to witness this range. I suspect that this perspective not only helped the team to design the game but also to develop empathy for the challenges of the elementary school system.&lt;br /&gt;&lt;br /&gt;Every child who played Morgan's Raid gave us some feedback, and often they had feature requests. Some were clearly outside of our scope, such as adding multiplayer support and leaderboards. Many others were based on the students' experiences with school and educational software. At some point later, I plan to write a more detailed piece on why there are no quizzes in Morgan's Raid, despite this suggestion being proffered by many playtesters. What was more salient to this post is that some of the team members jumped on these recommendations, an unspoken assumption being that we should provide what the intended end users wanted. There's a deeper anthropological lesson here that I tried to explain to the team, that while the users are always right, they also aren't experts. This brings us back to the design issue mentioned earlier, that experience design is difficult, and it's important that someone have the power to veto.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Development methodology: Entity system architecture and Mercurial&lt;/h3&gt;I have written before about the entity system architecture, and I list it here as one of the great successes of the project. Adopting this architecture allowed us to separate tasks rather seamlessly, certainly better than I had experienced before in working with teams of undergraduates.&lt;br /&gt;&lt;br /&gt;The fact that this was a team of amateurs is significant. The ideals of proper object-orientation can and should lead to modular, robust, scalable software systems. However, because the students lack experience, perspective, and technical understanding, it is insufficient to give them a software design task and expect production-quality results. Even with the entity system architecture, there are parts of the code that are ugly to behold, unnecessarily coupled across disparate systems. That said, the fundamental idea of the architecture—decoupling behaviors into components, which are acted upon by systems, and combining components into entities—was simple enough that it could be explained with a few examples and then applied by the team.&lt;br /&gt;&lt;br /&gt;Maybe I'm cheating by putting two in one here, since the version control system is orthogonal to the software architecture, but I'm going to mention it here anyway. This was my first time using a distributed version control system, and Mercurial more than proved itself. The students were able to learn it quickly and became quite savvy with the workflow. It was a little distressing that even at the end of development, some team members were mad at Mercurial for making them merge, where I would have liked them to adopt the more enlightened perspective that merging is a necessary part of teamwork, and Mercurial made it infinitely easier than doing it by hand.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Spring Space&lt;/h3&gt;The use of a dedicated space in Spring was fantastic. This is not easy to come by in a university setting, and on behalf of the entire team and our stakeholders, I am grateful to my department for granting us the use of the room. Everything one would expect to improve was improved. While the Google Docs approach to managing the Scrum artifacts was reasonably effective when working with the 25-member team in Fall, it pales in comparison to the power of three giant whiteboards and piles of sticky notes in the Spring.&lt;br /&gt;&lt;br /&gt;The incredibly impact of dedicated space has made me an evangelist for more responsible use of university resources. It got to the point where, on the Future of Education Task Force, people would just put "space" down for me in any list of things we need to change. Space is a deeply political issue on any college campus, but one important lesson I learned is that I should pay more attention to it during the planning stage of any future activity. If I can find any partner who is wiling to pony up space as part of a grant proposal, for example, I'll jump on it.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Team formation&lt;/h3&gt;It was great to see how the team gelled, especially the smaller group in the Spring. They really were a functional independent game development team in every way that matters. There was some work that I did to try to foster this sense of team, such as adopting agile methodologies, bringing goodies for Sprint Review and Retrospective meetings, and hosting board game sessions. These definitely helped, but I also could tell that the students were hungry to make something important, to do something that mattered beyond a credited learning experience. Even if we all had our own idiosyncratic views of what Morgan's Raid should be, we shared this vision of being able to work together to make something significant that none could do on his or her own.&lt;br /&gt;&lt;br /&gt;The only distressing part about this success is that the team is now gone. Usually, at the end of fifteen weeks, I am ready to push my students out to face their next challenges. With this team, a part of me wishes I could keep them here so that we can continue to face challenges together. I build an emotional bond with these undergraduates. They were my teammates and coworkers, my partners in a difficult endeavor, my colleagues, and my friends, and I will miss them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;What didn't go well&lt;/h2&gt;&lt;h3&gt;Code reviews were not in our methodology&lt;/h3&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;We did not have formal code reviews, and in retrospect, our code quality suffered because of it. It is easy at the time to ignore reviews in favor of "productivity," but I think this was a classic managerial blunder. I am not certain &amp;nbsp;what methodology we could have used in the Fall to promote this, but we certainly could have inserted some more formal code reviews in the Spring. This would have directly helped us meet some learning objectives while improving the code base, since as I and others have said before, software development is a learning process.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Because of the generally poor code quality from Fall, I made sure to introduce a formal verification step into the task approval process. When I had the time and energy, this meant that I would not just check that the task was working, but that the underlying implementation was reasonable; however, working under our significant time pressure, I often did not have the time and energy.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In truth, I do not have much experience with code reviews. Sure, I've graded countless assignments, but these have primarily been summative assessments, not formative assessments. This is not an excuse but rather an opportunity for me to include code reviews into a future experience, so that my students and I can learn together how best to use them in our environment.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;No technical specification&lt;/h3&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I invested a significant amount of time in Summer 2010 working the results of the Spring design colloquium into a functional design specification. This took the form of a wiki on Google Sites, and it was shared with all the team members and product owners. This was a colossal effort, since the output from Spring was nowhere near the quality we expected, and so really I was redesigning the whole game from disparate prototypes—and even then, what I wrote up was not that good and ended up being significantly changed before shipping. This does not mean it was wasted effort: it was still a necessary step along the way. However, because this took all of my spare cycles in Summer 2010, I was out of time when it came to the technical specification. I wrote up a few notes about methodology (inspired by Cockburn's excellent book that I read the same Summer), but for the most part, the software architecture was only in my head.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I suspect that the lack of a technical specification was a major factor in the relatively low productivity of the Fall semester. I believe that the productivity of Spring would not have been possible without the learning of Fall, but at the same time, and as pointed out by a team member the other day, much of the Fall was undirected learning. That is, the students were learning, but they didn't always know where they were going with this. Being able to rely on, for example, a software architecture specification, could have helped them see how their little piece was actually going to make a big difference.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Undergraduates, by and large, do not have the perspective necessary to design large software systems. After all, having wide perspectives and the ability to integrate across disciplines is an outcome of higher education, not an input. I'm sure a technical specification would not have improved Fall's productivity by an order of magnitude, but it would have helped a little. Most importantly, it would have helped the students see, from early in the process, the value of documentation. About two-thirds through the Fall semester, we did a massive architectural overhaul, and to get this done, I turned to&amp;nbsp;&lt;i&gt;de facto&lt;/i&gt;&amp;nbsp;standard UML. Once the students understood how this language was part of my bigger process, they could see the value in it and showed interest in learning it. I suspect this transformative experience could have been brought about earlier through more formal technical specification.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;IP&lt;/h3&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Dealing with the university's intellectual property policies has been an exercise in frustration. I suspect that mine is like a lot of other institutions of higher education, where tight budgets are causing the administration to jump on the commercialization bandwagon, and yet the staff has little or no experience dealing with software innovations. As a point in case, I have yet to meet anyone at the university who seems to understand software licensing, and all of the forms and procedures are aligned with physical invention.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In the university's defense, I put off dealing with IP until we were 90% done with the project. I just didn't want to deal with it, because I knew it would be a quagmire. Sure enough, it was, and still is, since some of our issues are still not sorted out: I was told that I would receive official written documentation on some issues over a month ago that I has still not arrived. I suppose I should have started the internal processes earlier.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;On the positive side, all of the programmers have agreed to license their code under an OSI-approved license, and so I hope to make a source release of the game and announce official licensing policy by the end of the month.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The takeaway on the IP front is that, in future projects, I should deal with it earlier on, ideally during the proposal process. This would lead to a traceable paper trail and explicit acknowledgement of the funding agency of the intended licensing strategy, and we would only have to go through the current headaches if things changed.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Undergraduate game designers&lt;/h3&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I hesitate to mention this here since several of my undergraduates may read this, but understand that I write this with respect and affection.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;We put too much faith in undergraduate designers. Game design is&amp;nbsp;&lt;i&gt;hard&lt;/i&gt;, and I posit that legitimate educational game design is even harder. I think what we asked of our Spring design colloquium class may have been impossible for students at that level of experience. Not only were they lacking game design knowledge specifically, they had essentially no prior experience with design thinking at all.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I recently took the time to reflect on the game designs I have come up with during my lifetime. I've always been a hobbyist, and specifically, I remember writing up rules for a tabletop RPG that got some playtesting when I was an undergraduate, and I sketched out at least one CCG rulebook that was circulated among my friends in grad school. When I look back at these, I made classic amateur mistakes, prioritizing the wrong elements and trying to do big design up front rather than incremental and iterative design. That is, I knew nothing formally of design thinking. As I reflect on what my students designed, in the design colloquium and during the evolutionary design of the development process, I see the same kinds of amateur mistakes.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;For those who were on the team for more than one semester, I'm sure that they saw how I made changes to cope with these observations. The design colloquium was very open-ended, but in the Fall and Spring, I positioned myself as the design authority. While anyone could pitch any idea to me—and indeed the great design successes of the game are primarily student-generated—I was the gatekeeper, and there were many directions that I forced to be shut down. As benevolent dictator, I needed to ensure that energy was being spent fruitfully, even if it was perceived as less glamorous by the team.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Trying again to look forward, I think this will have to be the perspective I take in future endeavors. We were probably not critical enough in the Spring, and there wasn't enough time in a three-credit course for the students to develop healthy levels of design self-criticism.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Attention management&lt;/h3&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In the Spring, we had an excellent space in RB368, and I am sure that the success of the project rested in having access to the space. That being said, I'm not sure that I managed it correctly. As I have read more about agile software development spaces, I realize that we did not have a good management system in place for dealing with distraction. Our shared workspace was regularly interrupted by both related and unrelated events. I know there were several times where I was in the zone and then got broken out of it by well-intended interruptions.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;For many students (at least it is said), working in a high-distraction environment is their&amp;nbsp;&lt;i&gt;modus operandi&lt;/i&gt;. The sad result is that they have no idea how much productivity they are losing, since they are not intentionally managing their attention. This would have been a good learning opportunity for them to see what being productive really felt like. Next time around, such as next Spring's VBC seminar, I will be more explicit about working conditions. I am confident that this can be done without negatively impacting the social bonds of the team, and in fact, I suspect it will lead to an increase in mutual respect.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-4197427727215992910?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/4197427727215992910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/morgans-raid-postmortem.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4197427727215992910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4197427727215992910'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/morgans-raid-postmortem.html' title='Morgan&apos;s Raid Postmortem'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7714011470165814085</id><published>2011-06-12T20:17:00.000-04:00</published><updated>2011-06-12T20:17:25.881-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unity'/><category scheme='http://www.blogger.com/atom/ns#' term='gamedev'/><category scheme='http://www.blogger.com/atom/ns#' term='state pattern'/><title type='text'>State Design Pattern in Unity with C#</title><content type='html'>Following up on&lt;a href="http://paulgestwicki.blogspot.com/2011/06/afternoon-with-game-engines.html"&gt; my initial investigation into game engines&lt;/a&gt;, I decided that the best way to get to know &lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt; would be to build something with it. A few years ago, I wrote a clone of &lt;a href="http://nagoya.cool.ne.jp/o_mega/product/e2.html"&gt;Every Extend&lt;/a&gt;&amp;nbsp;called &lt;a href="http://www.cs.bsu.edu/homepages/pvg/games/eeclone/"&gt;EEClone&lt;/a&gt;, &lt;a href="http://www.cs.bsu.edu/homepages/pvg/pub/GS08.pdf"&gt;which is described in this JERIC paper&lt;/a&gt; (&lt;a href="http://portal.acm.org/citation.cfm?doid=1348713.1348715"&gt;ACM DL&lt;/a&gt;). I figured a new spin on EEClone would give me a good point of comparison, so I set out to recreate it in Unity.&lt;br /&gt;&lt;br /&gt;As I mentioned earlier, one of the strengths of Unity is that it supports a variety of scripting languages, including C#. This intrigued me the more I thought about it, since it meant that it should be straightforward for me to apply my knowledge of Java design patterns in Unity with just a few syntactic changes. Specifically, I decided to dive into the &lt;a href="http://en.wikipedia.org/wiki/State_pattern"&gt;state design pattern&lt;/a&gt;, which time and again I have found to be useful in practice. Just as with Java,&lt;a href="http://www.google.com/search?q=state+design+pattern+unity"&gt; a quick search of the Web&lt;/a&gt; for advice on how to implement state machines in Unity &lt;a href="http://answers.unity3d.com/questions/31050/unity-design-patterns.html"&gt;comes up with the classic procedural approach&lt;/a&gt;. The costs and benefits of the OO and procedural approaches are documented in the aforementioned paper; for this post, I will focus on the mechanics rather than justification.&lt;br /&gt;&lt;br /&gt;Without further ado, this is what the game looks like. The video shows two player-initiated explosions followed by one obstacle collision.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/uyHIfmU1tZs/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uyHIfmU1tZs?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/uyHIfmU1tZs?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The goal was to explore how the pattern is reified within Unity and C#, not to faithfully recreate EEClone, and so I went with a slightly simpler state diagram than in the Java version:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-1DKAkeloiJE/TfVO4rQAMoI/AAAAAAAAAGs/8mgXS_xuR7g/s1600/state_state.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://3.bp.blogspot.com/-1DKAkeloiJE/TfVO4rQAMoI/AAAAAAAAAGs/8mgXS_xuR7g/s400/state_state.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The astute reader will sure notice where I have cut corners. For example, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;PlayingState&lt;/span&gt; transitions directly to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;AwaitingRespawnState&lt;/span&gt; after the player sets off the bomb, without waiting for the explosion chain to terminate. &amp;nbsp;Clever handling of explosion chains and scoring was beyond the scope of this example.&lt;br /&gt;&lt;br /&gt;The state diagram can be converted into an implementation following the&lt;a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612"&gt; Gang of Four&lt;/a&gt; approach, yielding this structure:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-VShiXsQ0egU/TfVWHcbr_WI/AAAAAAAAAG0/nPfV42pusfk/s1600/state_class.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://3.bp.blogspot.com/-VShiXsQ0egU/TfVWHcbr_WI/AAAAAAAAAG0/nPfV42pusfk/s400/state_class.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Within Unity, this entire structure (modulo the external &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;MonoBehavior&lt;/span&gt;) is contained in one source file, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;StatefulPlayer.cs&lt;/span&gt;. The class diagram reveals the two defining characteristics of the state design pattern:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Each state is represented as an object. In this case, each is defined as a unique class, with an abstract class holding common behaviors and implementations, the result of refactoring.&lt;/li&gt;&lt;li&gt;States are responsible for their own transitions.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;To illustrate these points, consider &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;AwaitingRespawnState&lt;/span&gt;, the point of which is simply to wait for three seconds to elapse before going back to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SpawningState&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;class AwaitingRespawnState : AbstractState {&lt;br /&gt;    public AwaitingRespawnState(StatefulPlayer p) : base(p) {}&lt;br /&gt;    &lt;br /&gt;    private float elapsedTime;&lt;br /&gt;    &lt;br /&gt;    public override void Update() {&lt;br /&gt;        elapsedTime += Time.deltaTime;&lt;br /&gt;        if (elapsedTime &amp;gt; 3) {&lt;br /&gt;            player.transform.renderer.enabled = true;&lt;br /&gt;            player.EnterState(new SpawningState(player));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public override void OnEnter() {&lt;br /&gt;        elapsedTime=0;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The constructor passes its argument to the superclass' constructor, where that reference is kept in a protected field, player. The&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Update&lt;/span&gt; method overrides the default empty implementation from &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;AbstractState&lt;/span&gt; and is responsible for keeping track of elapsed time. You can clearly see that when this accumulated time exceeds three seconds, we go back to a new &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SpawningState&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;There is one point where I had to "cheat" a bit, and that is with animation termination. The transition from &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SpawningState&lt;/span&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;PlayingState&lt;/span&gt; should be triggered by the end of the spawn-in animation. However, I could not find a way in Unity for a general-purpose end-of-animation &lt;a href="http://en.wikipedia.org/wiki/Observer_pattern"&gt;observer&lt;/a&gt;. I could have set a timer and hardcoded it to go off at the same time as the animation, but this would clearly be fragile to change. My solution was to manually insert an event at the end of the animation, and to have this event call the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;AnimationFinished&lt;/span&gt; method of the player—indeed, that is its &lt;i&gt;raison d'être&lt;/i&gt;. This method is also used at the end of the death animation, as shown in the state diagram above.&lt;br /&gt;&lt;br /&gt;It is laudable that Unity promotes rapid prototyping with its asset-centric development model, which allows you to go in and fiddle with values with very few restriction. Yet, I find it frustrating to have to deal with literals rather than expressions: without such abstraction, one is left thirsty for more refactoring. My approach for handling animation termination is effective, but it does mean that the entire state model has a dependency on two animations, a dependency that cannot be determined by static analysis of the C# code itself. This is an architectural weakness, but it is the cost one pays for using tools like Unity that prevent one from having to hand-code each and every animation.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7714011470165814085?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7714011470165814085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/state-design-pattern-in-unity-with-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7714011470165814085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7714011470165814085'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/state-design-pattern-in-unity-with-c.html' title='State Design Pattern in Unity with C#'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-1DKAkeloiJE/TfVO4rQAMoI/AAAAAAAAAGs/8mgXS_xuR7g/s72-c/state_state.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3536452682161284909</id><published>2011-06-11T09:23:00.000-04:00</published><updated>2011-06-11T09:23:24.831-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Books that influenced my teaching practice</title><content type='html'>I've been thinking these last two days about the books I have read in my six years as a professor, and how these books have affected my practice. When I started at Ball State University, I was like a lot of freshly-minted Ph.D.s: I had spent the last several years focused on research with just a little bit of teaching experience, and I had never really been mentored in effective teaching practices, not beyond some TA training just before starting grad school.&lt;br /&gt;&lt;br /&gt;Hindsight is imperfect, but if a new CS faculty member were to ask me today what to read in order to develop a better understanding of teaching, here's what I would say. They're listed in the order I read them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://www.holub.com/goodies/patterns/"&gt;Holub on Patterns&lt;/a&gt;. This is one of my favorite books on patterns. It takes the Gang of Four patterns and presents them in the context of two case studies, and these come after two of the best chapters on the philosophy object-oriented design that I have ever read. The fact that the patterns are shown in collaboration is significant: one of my lessons from grad school was that it was very hard to teach or learn the patterns in isolation, because that's not how they emerge in practice. While his book is not explicitly about teaching, the idea of holistic education arises every time &amp;nbsp;I design a learning experience. I think I read it at a very influential time as well: as I was finishing my doctorate and thinking about what kind of professor I wanted to be.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.amazon.com/Scholarship-Reconsidered-Professoriate-Ernest-Boyer/dp/0787940690"&gt;Scholarship Reconsidered&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.amazon.com/gp/product/0787910910"&gt;Scholarship Assessed&lt;/a&gt;.&amp;nbsp;I read the Boyer and Glassick&lt;i&gt; et al.&lt;/i&gt; books when serving as chair of my department's Promotion and Tenure Committee. These should be required reading for anyone going interested in becoming a professor, and university administration should be required to re-read them every three years. Boyer famously describes a taxonomy for scholarship, but I think it's Glassick's book that forced me to think about the extent to which my teaching was scholarly activity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://pragprog.com/the-pragmatic-programmer"&gt;The Pragmatic Programmer&lt;/a&gt;. I wish I could say, "'Nuff said" and be done with it, but I that is insufficient. All computer science professors who have not read this book should do so &lt;i&gt;now,&lt;/i&gt;&amp;nbsp;especially if involved in curriculum design and outcomes assessment. Reading this book is as close as you can get to having an expert advise the practice / applications side of the curriculum.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Disrupting-Class-Disruptive-Innovation-Chang"&gt;Disrupting Class&lt;/a&gt; got me me seriously thinking about the educational complex more than any other book. It's easy to find flaws in the system, but rather than dwell on these, the book addresses fundamental concepts innovation and growth. It raises the important point that organizations protect themselves at all costs, and that disruption can only be achieved by making a market where there was not one before. Several of the ideas from this book influenced my concept of the university sandbox, a place to foster the reimagining of higher education, as documented in the &lt;a href="http://paulgestwicki.blogspot.com/2010/12/future-of-education-inside-and-outside.html"&gt;Future of Education Task Force&lt;/a&gt; report.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://pragprog.com/titles/ahptl/pragmatic-thinking-and-learning"&gt;Pragmatic Thinking and Learning&lt;/a&gt;&amp;nbsp;is a brilliant presentation on how people learn, focusing on software developers in particular. I would love to know what a non-developer thinks of the book. I found it to be general enough to extract several pieces into completely unrelated teaching experiences, but I also have the benefit of sharing a jargon and mindset with the author and the intended audience.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.nap.edu/openbook.php?isbn=0309070368"&gt;How People Learn&lt;/a&gt;. By the time I read this book earlier this year, I knew most of the big ideas already, having come across them in other readings or through &lt;a href="http://sigcse.org/"&gt;SIGCSE&lt;/a&gt; and &lt;a href="http://ccsc.org/midwest/conference/"&gt;CCSC:MW&lt;/a&gt;. The piece of the puzzle I had not previously considered was the role of &lt;i&gt;culture &lt;/i&gt;in learning and the vast, undocumented differences that can exist within superficially homogenous groups. I have always known that my game-related examples in CS120, for example, appeal to subcultures in the class, and so I would try to balance them against other examples, such as economics or sports-related. However, before reading this book, I hadn't considered the deeper issues of how people communicate and express understanding.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is far from an annotated bibliography, but after reading &lt;a href="http://spinuzzi.blogspot.com/2011/06/commemorative-post-8-years-at.html"&gt;Spinuzzi's eight-year anniversary blog post&lt;/a&gt;, it got me thinking that I should be sharing more about the books I read, and providing more critical evaluations of them. If nothing else, it will help me remember how I've grown and changed through reflective practice, and hopefully it will also help provide a corpus of related work as I continue to document my research.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3536452682161284909?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3536452682161284909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/books-that-influenced-my-teaching.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3536452682161284909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3536452682161284909'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/books-that-influenced-my-teaching.html' title='Books that influenced my teaching practice'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3465103928141178188</id><published>2011-06-10T08:01:00.001-04:00</published><updated>2011-08-27T10:00:01.549-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='religion'/><title type='text'>Predator and Pray</title><content type='html'>A funny thing happened at the &lt;a href="http://connerprairie.org/"&gt;Conner Prairie&lt;/a&gt; Educator Event. I was there with some of the &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; team to show off the game to elementary school teachers. The six of us were standing at our table a little before the event was to begin, when an attractive 40-ish woman and her presumed husband approached our group and asked if any of us were suffering from chronic pain or allergies. Needless to say, we were a little dumbfounded. The mind cannot help but wonder why someone would ask such a thing. The amazing automatic pattern-matching machine in my head figured she was a masseuse with healing crystals or otherwise had some snake oil to sell.&lt;br /&gt;&lt;br /&gt;She was quite insistent, and no one in my group was biting. Never one to back away from the unusual, I laughed and said she should see me in the Fall, when my allergies act up. She smiled and told us that she had felt that there was some pain among us, and then she asked if she could pray for me.&lt;br /&gt;&lt;br /&gt;This was not quite what I expected, but assuming they were not worshipers of some deranged devil-god, I figured it wouldn't hurt, so I said yes. Their follow-up question, whether they could lay on hands, was the obvious next step.&lt;br /&gt;&lt;br /&gt;She proceeded to invoke the Holy Spirit, asking for it to cleanse me of my allergies so that I might never have to take Claritin again, because God had created our bodies to &lt;i&gt;enjoy&lt;/i&gt;&amp;nbsp;nature and not to fight &lt;i&gt;against&lt;/i&gt;&amp;nbsp;it. Then, the Holy Spirit told her that I was also going have a promotion soon, and she asked for God's grace in this as well. Before and after the clearly spoken part of the blessing, the man and woman whispered what I could not hear but I assume to have been speaking in tongues. At some point, the third in their party---who I assume to be the mother of one or the other of these two---took a photograph, which made me wonder if I'd show up on candid camera.&lt;br /&gt;&lt;br /&gt;They were pleased with themselves, and I thanked them for the blessing. They were clearly fervent in their beliefs and felt that they had done a Very Good Thing (tm). Since I'm not opposed to the power of prayer, I &amp;nbsp;then asked them to pray for a friend of mine in need, which they promised to do, and off they went.&lt;br /&gt;&lt;br /&gt;This was an interesting experience, which of course got some chuckles from the Morgan's Raid team. As for my allergies, I'll admit that they're annoying, but I would not pray to have them removed. I just don't think that's how prayer &lt;i&gt;works&lt;/i&gt;. Allergies are part of the human condition. Everybody has their own problems, not because we're bad or sinful, but because we're here. How about prayers of thanks for modern science, from which comes Zyrtec? It didn't bother me that they were so cocksure that my allergies would never bother me again, although I would not be surprised if I spend 1/4 of the year on&amp;nbsp;antihistamines&amp;nbsp; because I have been for over ten years.&lt;br /&gt;&lt;br /&gt;The addition of a promise of promotion, though, was too much. Assuming I stay a professor, I will probably get exactly one more promotion in the rest of my career, and it will only come if I chase it. Given that I haven't considered applying for promotion, I find it very unlikely that the Provost is currently writing a memorandum of spontaneous promotion for me. This kind of unsubstantiated, faith-based claim is not only demonstrably wrong, it is manipulative. I'm cynical enough to be relatively unaffected by it (aside from the inspiration to write about it here), but this kind of behavior can wreak havoc on people with low wisdom, as we gamers might say. Maybe, at this point, I should have called them out, let them know that this "Holy Spirit thinking I will be promoted" was BS. What would it have gained? As it is, I held my tongue and gave myself time to consider and reflect on the experience. I'm not sure which is worse: benevolent charlatanism or cowardice in the face of the same.&lt;br /&gt;&lt;br /&gt;I'll be sure to post &lt;a href="http://paulgestwicki.blogspot.com/2011/08/allergies.html"&gt;a follow-up&lt;/a&gt; once it's ragweed season to let you know how it turns out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3465103928141178188?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3465103928141178188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/predator-and-pray.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3465103928141178188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3465103928141178188'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/predator-and-pray.html' title='Predator and Pray'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-2653823735573080829</id><published>2011-06-04T19:38:00.000-04:00</published><updated>2011-06-04T19:38:49.427-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>An afternoon with game engines</title><content type='html'>After an exciting morning at the &lt;a href="http://www.futaba-rc.com/xfc-rc/"&gt;XFC&lt;/a&gt;, I had an iced coffee and decided to dig into a few game engines. I am looking for technology to support up to three upcoming activities: the digital archaeology simulation&lt;a href="http://paulgestwicki.blogspot.com/2011/05/json-vs-xml-for-data-representation-in.html"&gt; mentioned a few days ago&lt;/a&gt;, my Fall game programming class (which so far has no plan), and my &lt;a href="http://paulgestwicki.blogspot.com/2011/03/recruitment-for-virginia-ball-center.html"&gt;Spring VBC seminar&lt;/a&gt;. This is an informal story about my afternoon explorations, more about impressions than any deep review.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;a href="http://unity3d.com/"&gt;Unity&lt;/a&gt;&lt;/h2&gt;I started by working with Unity. I had looked at it briefly before, but had not really done anything with it. I was immediately infuriated (yes, infuriated) by this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-M3m56NjqMxM/Teq01nviAnI/AAAAAAAAAGk/3N5RWu-_ZSc/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://3.bp.blogspot.com/-M3m56NjqMxM/Teq01nviAnI/AAAAAAAAAGk/3N5RWu-_ZSc/s320/Capture.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I keep my Windows start menu at the top of the screen, where it belongs despite its not being the default position. Unity slams all of the dialog boxes to the top of the screen, and they come up &lt;i&gt;under&lt;/i&gt;&amp;nbsp;the taskbar, where I cannot move or close them. Ugh. You know, in Linux I just alt-drag to move any window. For this, I temporarily had to set the taskbar to autohide just to tinker with Unity.&lt;br /&gt;&lt;br /&gt;The documentation was high quality, and it didn't take me long to make this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-4Lri1YQlPzQ/Teq1ifaxEwI/AAAAAAAAAGo/3OGIKTJvAMQ/s1600/not_much.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="299" src="http://4.bp.blogspot.com/-4Lri1YQlPzQ/Teq1ifaxEwI/AAAAAAAAAGo/3OGIKTJvAMQ/s320/not_much.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;You can run the "game" and use the keyboard to move the grey box around the blue field. Not too shabby. Note that the scripting language is JavaScript, which is nice since I have passing familiarity with it, and there's a high likelihood that students will have at least seen it before. If not, it's close enough to Java or C# to make progress fairly quickly.&lt;br /&gt;&lt;br /&gt;With this impressive start, I started looking at version control, because &lt;a href="http://www.codinghorror.com/blog/files/Pragmatic%20Quick%20Reference.htm"&gt;you should always use version control&lt;/a&gt;&amp;nbsp;Unity's own product page lays it out for you: to use external (i.e. third-party) version control systems, you need to get the $1500 Unity Pro (as opposed to the $0 free version), and for an extra $500 per seat you can use their Asset Server. The difference between $1500 per seat and $0 per seat is pretty steep. There are workarounds on various forums, but the long and short of it seems to be that you need the Pro version to make this work.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;a href="http://www.garagegames.com/products/torque-2d"&gt;Torque 2D / Game Builder&lt;/a&gt;&lt;/h2&gt;Next I decided to look up Torque, which despite having contacted their friendly customer support people and glanced through one of their books, I had never actually used. The main reason for this is that there's a timed 30-day trial, and I never really had set up serious time to evaluate it. My first impression was very good, especially because I am keen on 2D games: that's one less D required for art resources, and my teams are almost always heavy on coders and low on artists.&lt;br /&gt;&lt;br /&gt;I started &lt;a href="http://docs.garagegames.com/tgb/official/content/documentation/Tutorials/Fish%20Game/1%20-%20Starting%20Out.html"&gt;the Fish tutorial&lt;/a&gt;, and as soon as I had to start tinkering with scripts, I got worried. First, despite this being an official and apparently-popular tutorial, the scripts and folder structure in the tool were completely different from those in the tutorial: names, directories, functions---all different. I struggled through to a point where it appeared I could start doing some OO scripting, and the tutorial diverged too far from the tool for me to care to go any further. The scripting language was significantly different from what I and my students are used to. Just as an example, functions require "%this" to be sent as the first parameter, and yet they can be invoked via dot-notation on objects:&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;// Definition&lt;br /&gt;function FishClass::setSpeed(%this) &lt;br /&gt;{&lt;br /&gt;   %this.speed = getRandom(%this.minSpeed, %this.maxSpeed);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Invocation&lt;br /&gt;%this.setSpeed();&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;This is not a deal-breaker, but it is quite ugly, and I found the quality of documentation generally to be inferior to Unity's. I will mention that there was an excellent feature in the Torque tutorial in which each step was followed by a link of the form, "If you don't know how to do that, click here." Clicking that would expand a frame containing step-by-step details on how to access the corresponding feature.&lt;br /&gt;&lt;br /&gt;I need the documentation to be in sync with the tool if I'm going to throw this at students, especially on a short time-frame project. A good experiment, but time to move on to...&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;a href="http://www.udk.com/"&gt;UDK&lt;/a&gt;&lt;/h2&gt;The mac daddy of readily-available commercial-quality game engines, with incredible university-friendly licensing terms for non-commercial use: basically, no cost. The only real cost with UDK is that &lt;i&gt;it's a bit complicated&lt;/i&gt;. After tinkering with Unity and Torque, and glancing again at good old &lt;a href="http://yoyogames.com/"&gt;GameMaker&lt;/a&gt; (which I taught to kids in grades 2-8 a few Summers ago), UDK is clearly a different kind of beast. I had played with it a little many months ago, and opening it back up, I thought maybe I could recreate the jolly good "move the box with the keyboard" game. No such luck. In fact, I couldn't seem to intuit how to do anything at all. This was late in the day, and at this point I had had enough interruptions to wreck my flow. I brought up some videos and tutorials that I'm pretty sure I had read before, and I remembered bits and pieces of how it works. I also remembered my initial response to UDK the first time I had used it: clearly this is a powerful tool that we could use to build something very tight, but throwing this at a team of undergraduates with no background in any of these ideas would be very dangerous.&lt;br /&gt;&lt;br /&gt;Also, I remembered having seen some really high-quality tutorials, including great video tutorials. All these links on the UDK documentation pages are dead. I'll have to come back to it when I'm feeling inspired and the Web site is fixed. I love the idea of using UDK, but I'm afraid of the learning curve.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;a href="http://slick.cokeandcode.com/"&gt;Slick&lt;/a&gt;&lt;/h2&gt;I can't shake the feeling that we could always just do it in Slick. The biggest problem with Slick that we had in &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; was that it was hard to gain momentum, since we had to do so much ourselves. However, I will have nearly half the Morgan's Raid Spring team on the two big projects (digital archaeology and VBC), and it's tempting to just build off of what we had. The complication with this, which I will discuss in an upcoming post mortem on the project, is that students don't have the experience to do software architecture, and so leaving core engine decisions up to them can have further productivity-impacting consequences.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Something like conclusions&lt;/h2&gt;It was a great afternoon of tinkering, though not without frustrations. However, it is good to be reminded of what it feels like to be thrown into an overwhelming interface: this maintains sympathy with the experiences of the undergraduate computer science student.&lt;br /&gt;&lt;br /&gt;Working without version control is practically a non-starter for any significant development effort. Spending ten grand on software licenses is definitely a non-starter. This is a shame, since Unity seems to have pulled ahead in the engine wars for projects the scale I am considering. I may have to invest more time into trying some of the version control workarounds that folks have posted so that we can get away with the free version, since there's literally nothing else in the Pro version that I expect I would need.&lt;br /&gt;&lt;br /&gt;As always, I am open to your suggestions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-2653823735573080829?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/2653823735573080829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/afternoon-with-game-engines.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2653823735573080829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2653823735573080829'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/afternoon-with-game-engines.html' title='An afternoon with game engines'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-M3m56NjqMxM/Teq01nviAnI/AAAAAAAAAGk/3N5RWu-_ZSc/s72-c/Capture.PNG' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5250998581685097099</id><published>2011-06-02T10:29:00.000-04:00</published><updated>2011-06-02T10:29:53.948-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Morgan's Raid Extravaganza</title><content type='html'>I uploaded the beta version of Morgan's Raid the other day and did some work to beautify the Web site. Play the beta or find out more at&amp;nbsp;&lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;https://sites.google.com/site/morgansraidgame/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The latest Emerging Media Update includes a feature on Morgan's Raid. Find out more at&amp;nbsp;&lt;a href="http://emergingmediainitiative.com/updates/may-2011/"&gt;http://emergingmediainitiative.com/updates/may-2011/&lt;/a&gt;. The Update includes the following video in which I talk about the project and make a push for broader changes in higher education to promote this kind of work.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-465b656ee6008280" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v19.nonxt4.googlevideo.com/videoplayback?id%3D465b656ee6008280%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332567708%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D14C9662E88E7CA81C79529D203BB8AA39191F917.6CBC71AB11D913026B88E75451342AA4B37F7A3D%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D465b656ee6008280%26offsetms%3D5000%26itag%3Dw160%26sigh%3DXT4Z-JSlLodywK6KH-fNEflWOZU&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v19.nonxt4.googlevideo.com/videoplayback?id%3D465b656ee6008280%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332567708%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D14C9662E88E7CA81C79529D203BB8AA39191F917.6CBC71AB11D913026B88E75451342AA4B37F7A3D%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D465b656ee6008280%26offsetms%3D5000%26itag%3Dw160%26sigh%3DXT4Z-JSlLodywK6KH-fNEflWOZU&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5250998581685097099?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5250998581685097099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/morgans-raid-extravaganza.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5250998581685097099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5250998581685097099'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/06/morgans-raid-extravaganza.html' title='Morgan&apos;s Raid Extravaganza'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-1225702393803431170</id><published>2011-05-30T10:40:00.001-04:00</published><updated>2011-05-30T10:40:21.115-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><title type='text'>What they think they learned, Spring 2011 edition</title><content type='html'>After two weeks of frantic activity and a week of relative relaxation, I arrive at Memorial Day with an interest in wrapping up some reflections about the Spring semester.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I ran the final meeting of Spring's CS222: Advanced Programming class similarly to Fall's, &lt;a href="http://paulgestwicki.blogspot.com/2010/12/cs222-what-we-learned-and-how-we.html"&gt;which I wrote about back in December&lt;/a&gt;. First, the students brainstormed a list of the 80 things they thought they learned through the course. Then, each student was given three votes, and we voted on the most significant items. It should be noted that the students had freedom to choose how they determined what it meant for learning to be related to the class, and so not all of the items fall directly from in-class interactions; similarly, the students could choose any heuristic for voting. The top earners with their total vote tally are shown below.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Votes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Object-oriented design&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Test-driven development&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Professional tips&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time management&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Model-view separation&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Refactoring&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mercurial&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;These are all self-explanatory except perhaps "professional tips." We spent a good deal of time in the course practicing and reflecting on how we learn the best practices for a language and environment. I used Java as a language of instruction, and everyone had a copy of Joshua Bloch's &lt;a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/"&gt;Effective Java, second edition&lt;/a&gt;. Early in the semester, I gave carefully-constructed assignments in which the students would read portions of Effective Java and apply them. As the semester went on, I loosed the reins, and by the end of the semester, I had the students searching through the book to find tips to apply in their six-week projects. I hope and believe that this kind of inversion of control was useful in helping the students learn how to be better learners.&lt;br /&gt;&lt;br /&gt;"Time management" may be worth another mention, since my approach to this was pragmatic. There were few directed exercises that were related to time management, the most prominent being requiring projects to be completed in multiple deliverables. Students, as a subset of humans, procrastinate. Making someone take an incremental and iterative approach can have a huge impact in how they think about their own work, especially when it's the first time having to do this in a software development environment.&lt;br /&gt;&lt;br /&gt;After this convergent thinking activity, we returned to divergent thinking as I asked the students to brainstorm on &lt;i&gt;how&lt;/i&gt;&amp;nbsp;they learned these things. As in Fall's class, the students seemed to have a harder time answering this question, and I don't think it's just because they were tired. I suspect that, despite all my efforts to foster reflective practice, the students spend most of their cognitive energy on content rather than learning processes. I need to try to find more ways to help students make the leap to metacognition, although I acknowledge that I am limited in what I can do in this sophomore-level course. Regardless, here are the only three of the 22 that earned any votes when each student was given one vote:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Votes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Practice / Doing&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Working in a group&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Failing usefully / learning from mistakes&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Clearly, all three of these are closely related, and they all deal with learning-by-doing, as I expected. Of course, the course was framed around constructionist and studio-based learning principles, and so it's no surprise that students would say they learned from these activities—it's practically all they did!&lt;br /&gt;&lt;br /&gt;Here's the part that surprised me: in the list of 22 items, reflective writing did not come up. The students did &lt;i&gt;a lot&lt;/i&gt;&amp;nbsp;of reflective writing. The most prominent example was the learning objectives document, &lt;a href="http://paulgestwicki.blogspot.com/2011/04/teaching-assessment-culture-to.html"&gt;which I wrote about in April&lt;/a&gt;. In a nutshell, this collaboratively-written document was the medium by which the students' learning was to be communicated with me, and it was explicitly designed for reflective practice. Yet, even at the end of the semester when thinking about their own learning processes, and even when I was trying to steer their thinking towards this while moderating the brainstorming session, no one even mentioned this reflective writing. Far from meaning that this writing was unnecessary, I think this echoes my earlier point, that (generally) the students were not savvy at moving between multiple levels of cognition, from the content, to the thinking about the content, to metacognition.&lt;br /&gt;&lt;br /&gt;The good news is that this was an experimental class, part of a research study on how collaborative writing impacts learning in STEM. My &lt;a href="http://www.brianjmcnely.com/"&gt;co-PI&lt;/a&gt; and I have a large amount of data to analyze, and hopefully we can gain insight into what the students experienced and how they made sense out of it.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-1225702393803431170?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/1225702393803431170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/05/what-they-think-they-learned-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1225702393803431170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1225702393803431170'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/05/what-they-think-they-learned-spring.html' title='What they think they learned, Spring 2011 edition'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5706810335468627183</id><published>2011-05-27T09:24:00.002-04:00</published><updated>2011-06-04T08:36:09.384-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='autobeans'/><category scheme='http://www.blogger.com/atom/ns#' term='domain model'/><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><title type='text'>A Day with Autobeans (or, JSON vs XML for data representation in GWT, Part 2)</title><content type='html'>I spent much of the day yesterday tinkering with &lt;a href="http://code.google.com/p/google-web-toolkit/wiki/AutoBean"&gt;AutoBeans&lt;/a&gt;, a technology that I stumbled across while trying to find a solution to the problems described in &lt;a href="http://paulgestwicki.blogspot.com/2011/05/json-vs-xml-for-data-representation-in.html"&gt;yesterday's post&lt;/a&gt;. (Thanks, StackOverflow!) The tagline on the AutoBeans describes exactly what I desire: structure, not boilerplate. The problem I always have with XML is that it takes so much plumbing to get the data into the domain model. Keep in mind that I am going to have content experts creating the data files manually, and so &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;ORM&lt;/a&gt; tools, &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt;, etc. won't solve my problem.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Structure&lt;/h2&gt;AutoBeans provide a mechanism for automagically reading JSON data into domain objects. I put together a functionally-equivalent demo akin to the XML demo. Specifically, I have a data file that contains the definition for an image and a "hotspot," a region of the image that generates a message when moused over. The data file looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;{&lt;br /&gt;    'image':'Jellyfish.jpg',&lt;br /&gt;    'hotspots': [&lt;br /&gt;        {&lt;br /&gt;            'bounds': { 'left':10, 'right':50, 'top':10, 'bottom':50 },&lt;br /&gt;             'message': 'You found it!'&lt;br /&gt;        }&lt;br /&gt;    ]&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;As before, this file sits right alongside my client source code and is referenced in a &lt;code&gt;clientBundle&lt;/code&gt;, to wit:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;public interface JsonResources extends ClientBundle {&lt;br /&gt;    &lt;br /&gt;    static final JsonResources INSTANCE = GWT.create(JsonResources.class);&lt;br /&gt;&lt;br /&gt;    @Source("demo.json")&lt;br /&gt;    TextResource place();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Setting up domain objects using AutoBeans is as simple as it should be: create interfaces using the traditional Java beans naming conventions. My three domain interfaces are shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-IsQsIY1KW0I/Td-fVGKLQDI/AAAAAAAAAGc/EfXGloxgvc8/s1600/autobean.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="104" src="http://3.bp.blogspot.com/-IsQsIY1KW0I/Td-fVGKLQDI/AAAAAAAAAGc/EfXGloxgvc8/s320/autobean.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Compare these to the JSON above, and you can see that there's a strong parallelism: they are essentially two representations of the same semantic model.&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;Hotspot&lt;/code&gt; and &lt;code&gt;Place&lt;/code&gt; are "simple" interfaces, using the nomenclature of AutoBeans. They only contain bean-style accessor and mutator methods, and so they can immediately be deserialized from JSON. The &lt;code&gt;Rectangle&lt;/code&gt; class is not simple since it has the &lt;code&gt;contains&lt;/code&gt; method. The AutoBean documentation &lt;a href="http://code.google.com/p/google-web-toolkit/wiki/AutoBean#Categories"&gt;describes how to deal with this&lt;/a&gt;: create a "category" that provides an implementation of the interface's instance method as a static method with an extra parameter, as demonstrated below.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;public class RectangleCategory {&lt;br /&gt;    public static boolean contains(AutoBean&amp;lt;Rectangle&amp;gt; instance, int x, int y) {&lt;br /&gt;        Rectangle r = instance.as();&lt;br /&gt;        return r.getLeft() &amp;lt;= x //&lt;br /&gt;                &amp;amp;&amp;amp; r.getRight() &amp;gt;= x //&lt;br /&gt;                &amp;amp;&amp;amp; r.getTop() &amp;lt;= y //&lt;br /&gt;                &amp;amp;&amp;amp; r.getBottom() &amp;gt;= y;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The last piece of the architecture is the AutoBean factory that wires &lt;code&gt;Rectangle&lt;/code&gt; objects into their category. The critical piece for &lt;code&gt;Rectangle&lt;/code&gt; is the &lt;code&gt;@Category&lt;/code&gt; annotation.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;@Category(RectangleCategory.class)&lt;br /&gt;public interface MyAutoBeanFactory extends AutoBeanFactory {&lt;br /&gt;    AutoBean&amp;lt;Rectangle&amp;gt; rectangle();&lt;br /&gt;&lt;br /&gt;    AutoBean&amp;lt;Place&amp;gt; place();&lt;br /&gt;&lt;br /&gt;    AutoBean&amp;lt;Hotspot&amp;gt; hotspot();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This completes the model and serialization framework. The only other critical piece is the UI, which is done with a custom &lt;code&gt;Composite&lt;/code&gt; that uses constructor injection to receive its model, a &lt;code&gt;Place&lt;/code&gt;. Hence, the whole system is contained in the following class diagram.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-qYzqvWkS6rA/Td-hbnFrKOI/AAAAAAAAAGg/2vAFwcmQJ6s/s1600/autobean-complete.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://4.bp.blogspot.com/-qYzqvWkS6rA/Td-hbnFrKOI/AAAAAAAAAGg/2vAFwcmQJ6s/s320/autobean-complete.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I modified my &lt;code&gt;EntryPoint&lt;/code&gt; class to use this rather than my &lt;code&gt;SimpleMessage&lt;/code&gt; approach, and it is short and sweet:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;public class JSTest implements EntryPoint {&lt;br /&gt;&lt;br /&gt;    private MyAutoBeanFactory factory = GWT.create(MyAutoBeanFactory.class);&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onModuleLoad() {&lt;br /&gt;        AutoBean&amp;lt;Place&amp;gt; placeBean = AutoBeanCodex.decode(factory, Place.class,&lt;br /&gt;                JsonResources.INSTANCE.place().getText());&lt;br /&gt;        PlaceWidget widget = new PlaceWidget(placeBean.as());&lt;br /&gt;        RootPanel.get().add(widget);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Analysis&lt;/h2&gt;One of the problems of dealing with GWT is that there can be a lot of silent errors. There's a sense in which mixing statically- and dynamically-typed code gives you the worst of both worlds. Then again, it might be my own blinders from dealing almost exclusively with statically-typed systems. For example, when I first wrote out the JSON, I called the bounding area &lt;code&gt;'rect'&lt;/code&gt;, but when I wrote the domain object, I decided to be more explicit with my semantics and called the accessor &lt;code&gt;getBounds&lt;/code&gt;. The AutoBeans system happily chugged along and gave me no warning that I was trying to access a field that was not there, because Javascript doesn't care about that.&lt;br /&gt;&lt;br /&gt;The more aggravating error arose from a misconception about JSON. I was in a situation where my rectangles were being loaded, but with the wrong values: (0,0,0,0) instead of my JSON-specified values. I set it aside and played some &lt;a href="http://www.en.thewitcher.com/"&gt;Witcher 2&lt;/a&gt;, which you should buy DRM-free from the good people at &lt;a href="http://gog.com/"&gt;gog.com&lt;/a&gt;, and then I decided to try writing unit tests to capture the error. The test is very simple, but I'll post it here for the sake of discussion:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;public class RectangleTest extends GWTTestCase {&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public String getModuleName() {&lt;br /&gt;        return "com.example.archaeology_adventures";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void testDeserialize() {&lt;br /&gt;        MyAutoBeanFactory factory = GWT.create(MyAutoBeanFactory.class);&lt;br /&gt;        &lt;br /&gt;        AutoBean&amp;lt;Rectangle&amp;gt; rectBean = AutoBeanCodex.decode(factory,&lt;br /&gt;                Rectangle.class,&lt;br /&gt;                "{'left':10,'right':11,'top':12,'bottom':13}");&lt;br /&gt;        Rectangle r = rectBean.as();&lt;br /&gt;        assertNotNull(r);&lt;br /&gt;        assertEquals(10, r.getLeft());&lt;br /&gt;        assertEquals(11, r.getRight());&lt;br /&gt;        assertEquals(12, r.getTop());&lt;br /&gt;        assertEquals(13, r.getBottom());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This test passes, but origially I was specifying the JSON literal thus:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;"{'left':'10','right':'11','top':'12','bottom':'13'}"&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I thought that all JSON objects were string:string pairs, just because that was my recollection from last Summer's &lt;a href="http://wave.google.com/"&gt;Wave&lt;/a&gt; API experimentation. It turns out that if you deserialize that second JSON literal using AutoBeans, it will interpret strings as having the numeric value zero, and hence, give rectangle (0,0,0,0). Again, because this is dynamically typed, there is no warning or error about this conversion: you, the developer, just have to know that this is part of the language semantics. I assumed that there would be some kind of implicit conversion that doesn't happen. Removing the erroneous apostrophes solved this unit test's problem, and removing them from my experimental code fixed the problem there as well.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusions&lt;/h2&gt;I am pleased that this technology provides a nigh-seamless way to go from a data representation to domain objects. Because there is little boilerplate code, it should permit rapid iteration much more than hand-parsed XML. It's possible that there's an analogous tool for XML of course, and if you know of one, please share it.&lt;br /&gt;&lt;br /&gt;Coming back to the original problem, these data files will be created by non-programmer content-experts, although they will be collocated with the development team. Hence, one of the outstanding problems in the JSON/XML consideration is which of the following is more sensible to non-programmers:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;{&lt;br /&gt;    'image':'Jellyfish.jpg',&lt;br /&gt;    'hotspots': [&lt;br /&gt;        {&lt;br /&gt;            'bounds': { 'left':10, 'right':50, 'top':10, 'bottom':50 },&lt;br /&gt;             'message': 'You found it!'&lt;br /&gt;        }&lt;br /&gt;    ]&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;place&amp;gt;&lt;br /&gt;    &amp;lt;img src="Jellyfish.jpg"/&amp;gt;&lt;br /&gt;    &amp;lt;hotspot&amp;gt;&lt;br /&gt;        &amp;lt;rect x1='10' y1='10' x2='50' y2='50'/&amp;gt;&lt;br /&gt;        &amp;lt;text&amp;gt;You found it!&amp;lt;/text&amp;gt;&lt;br /&gt;    &amp;lt;/hotspot&amp;gt;&lt;br /&gt;&amp;lt;/place&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;As always, I welcome your comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5706810335468627183?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5706810335468627183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/05/day-with-autobeans-or-json-vs-xml-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5706810335468627183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5706810335468627183'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/05/day-with-autobeans-or-json-vs-xml-for.html' title='A Day with Autobeans (or, JSON vs XML for data representation in GWT, Part 2)'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-IsQsIY1KW0I/Td-fVGKLQDI/AAAAAAAAAGc/EfXGloxgvc8/s72-c/autobean.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-9093101315683902465</id><published>2011-05-26T10:14:00.007-04:00</published><updated>2011-06-04T08:37:43.228-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><title type='text'>JSON vs XML for data representation in GWT</title><content type='html'>(This is Part 1 of a series. See also &lt;a href="http://paulgestwicki.blogspot.com/2011/05/day-with-autobeans-or-json-vs-xml-for.html"&gt;Part 2&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;In a few weeks, I will be working with my &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; collaborator &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/History/FacultyandStaff/MorrisRonald.aspx"&gt;Ron Morris&lt;/a&gt; (History), &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/Anthropology/About/FacultyStaff/GrooverMark.aspx"&gt;Mark Groover&lt;/a&gt; from Anthropology, and about ten undergraduate students to develop a prototypical digital archaeology simulation. The intent of the project is to create a technological tool to teach 4th-graders about historical archaeology, that it is a scientific process and more than just a dig. I will not dwell on the project design here, but rather I would like to share some of my experimentations with &lt;a href="http://www.json.org/"&gt;JSON&lt;/a&gt;, &lt;a href="http://www.w3.org/XML/"&gt;XML&lt;/a&gt;, and &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We want to have the widest possible adoption, and since the expected interactions are fairly simple, making this a Web application seemed best. GWT stands out as an excellent candidate technology since it handles cross-browser issues better than any of our team can. &lt;a href="http://www.useit.com/alertbox/20001029.html"&gt;Flash &lt;/a&gt;would be a contender, of course, but I ruled it out early since I don't know enough Flash/Actionscript to be confident in leading the team in an appropriate software architecture.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We will only have five weeks to develop the prototype, and the team will include a technical team (mostly Computer Science majors and minors) and a content team (mostly Anthropology and History majors). Unlike Morgan's Raid, in which we could create content directly in Java since the designers were also developers, this project would benefit from an intermediary domain-specific language that the designers can use.&amp;nbsp;An architecture I had kicked around in my head involved using &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt;&amp;nbsp;to define an &lt;a href="http://martinfowler.com/bliki/InternalDslStyle.html"&gt;internal DSL&lt;/a&gt; that would be processed in GWT. However, it's not possible to put &lt;a href="http://jruby.org/"&gt;JRuby&lt;/a&gt; into a GWT project since the GWT compiler would try to transform the whole kit and kaboodle into Javascript, and that's not possible or even sensible. I'll just have to find another project in which to experiment with Ruby DSLs; for now it's off the table.&lt;/div&gt;&lt;h2&gt;Javascript&lt;/h2&gt;&lt;div&gt;Considering a data representation layer, I started by considering how Javascript could be used directly for configuration-based programming. That is, the technical team could write an interpreter on top of Javascript data created by the content team. I played with JSON last Summer when working with the &lt;a href="https://wave.google.com/"&gt;Wave&lt;/a&gt; API, and it seemed like a nice way to represent domain objects. &lt;a href="http://code.google.com/p/google-web-toolkit/wiki/OverlayTypes"&gt;Overlay types&lt;/a&gt; provide a well-documented approach for using JSON to represent domain objects in GWT. As a proof of concept, I whipped up a simple message wrapper. The interface looks like this:&lt;/div&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;@SingleJsoImpl(LittleMessageImpl.class)&lt;br /&gt;public interface LittleMessage {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Get the text of this message.&lt;br /&gt;     * &lt;br /&gt;     * @return message text&lt;br /&gt;     */&lt;br /&gt;    public String text();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The annotation references another class that is shown below. Note that Google's documentation, as of this writing, does not make this relationship clear, but a little tinkering with the annotation value revealed the proper approach.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;public class LittleMessageImpl extends JavaScriptObject { &lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Create a {@link LittleMessageImpl} from JSON text.&lt;br /&gt;     * @param json the JSON string&lt;br /&gt;     * @return new message object&lt;br /&gt;     */&lt;br /&gt;    public static final native LittleMessageImpl buildMessageFromJSON(String json) /*-{&lt;br /&gt;        return eval('(' + json + ')');&lt;br /&gt;    }-*/;&lt;br /&gt;    &lt;br /&gt;    // Required for the GWT compilation process&lt;br /&gt;    protected LittleMessageImpl() {}&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * @return the text of this message&lt;br /&gt;     */&lt;br /&gt;    public final native String text() /*-{&lt;br /&gt;        return $wnd.checkNotNull(this.text);&lt;br /&gt;    }-*/;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The two important bits are the factory method, which uses native Javascript to evaluate a JSON string into an object, and the Javascript native implementation of the &lt;code&gt;text()&lt;/code&gt; method.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In debugging this program, I encountered a problem where I had called the field by two different names, and of course because Javascript is dynamically typed, I had no compiler support to detect this. To ease debugging, I wrote a nigh-trivial Javascript method, &lt;code&gt;checkNotNull&lt;/code&gt;, that behaves like &lt;code&gt;Preconditions.checkNotNull&lt;/code&gt; from &lt;a href="http://code.google.com/p/guava-libraries/"&gt;Guava&lt;/a&gt;: if the argument is not null, it is returned, and if it is null, it bombs out. I put this method into a file called &lt;code&gt;preconditions.js&lt;/code&gt; that lives in the "public" folder of my project. Making this work took some trial and error, but the crux of it is this: if your application's root package is &lt;code&gt;com.example&lt;/code&gt;, then you can put a folder under &lt;code&gt;com/example/public&lt;/code&gt; and put resources there, and these resources will be loaded prior to your GWT applications' execution. This is&lt;a href="http://code.google.com/webtoolkit/doc/1.6/DevGuideOrganizingProjects.html"&gt; defined in the documentation&lt;/a&gt;, although I had a hard time extracting the previous sentence's meaning from what was given.&lt;br /&gt;&lt;br /&gt;Coming back to &lt;code&gt;LittleMessageImpl&lt;/code&gt;, the json itself sits right in the application: it is not the result of a request to a server, as JSON is frequently used. I made a file &lt;code&gt;message.json&lt;/code&gt; that sits in my &lt;code&gt;com.example.client&lt;/code&gt; package, and it is referenced as a text resource in my &lt;code&gt;JsonResources&lt;/code&gt; class:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;public interface JsonResources extends ClientBundle {&lt;br /&gt;    &lt;br /&gt;    static final JsonResources INSTANCE = GWT.create(JsonResources.class);&lt;br /&gt;    &lt;br /&gt;    @Source("message.json")&lt;br /&gt;    TextResource message();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now, to create my &lt;code&gt;LittleMessage&lt;/code&gt;, I need only do this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;LittleMessageImpl message = LittleMessageImpl&lt;br /&gt;                .buildMessageFromJSON(JsonResources.INSTANCE.message()&lt;br /&gt;                        .getText());&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Like many things, it's easy once you know how.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This was a helpful process for learning how GWT works, but I encountered a problem soon afterwards that perhaps I should have foreseen. One of the actual problems I want to solve with GWT is to have an image that has "hotspots" where, when they are moused over, something happens. This is trivially done in GWT using &lt;code&gt;Image&lt;/code&gt; and &lt;code&gt;MouseMoveHandler&lt;/code&gt;. The problem, however, is granularity of representation. I would like to be able to represent the image as a composite of hotspots that define geometric regions and actions. I could structure the whole thing as a JSON object, but in Java, I want it broken down into pieces, an &lt;code&gt;InteractiveImage&lt;/code&gt; holding zero or more &lt;code&gt;Hotspots&lt;/code&gt;, for example. This is where my knowledge of Javascript breaks down. It's not clear to me how I could take a JSON string and, with the same kind of elegance as simply &lt;code&gt;eval&lt;/code&gt;ing it, end up with a beautiful composite object. Two-pass parsing is of course an option, where the first pass makes a "dumb" Java representation that is then converted into a better domain model, but then you lose the elegance of the overlay types. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From here, I considered diving into Javascript, JSON, and GWT a bit more deeply, but I decided instead to go on a tangent. It's all experimentation, after all. Why not try that nasty old &lt;i&gt;de facto&lt;/i&gt; standard for Web application data representation, XML? &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;XML&lt;/h2&gt;GWT has good XML support. It has to. Plus, the XML parser looks exactly like Java's XML parser that I've used a good many times. I had built some confidence from my Javascript experiments and decided to try to solve a real problem this time. My data representation in XML looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&amp;lt;place&amp;gt;&lt;br /&gt;    &amp;lt;img src="Jellyfish.jpg" /&amp;gt;&lt;br /&gt;    &amp;lt;hotspot&amp;gt;&lt;br /&gt;        &amp;lt;rect x1="10" x2="50" y1="10" y2="50"&amp;gt;&lt;br /&gt;        &amp;lt;text&amp;gt;You found it!&amp;lt;/text&amp;gt;&lt;br /&gt;    &amp;lt;/rect&amp;gt;&amp;lt;/hotspot&amp;gt;&lt;br /&gt;&amp;lt;/place&amp;gt;&lt;br /&gt;&amp;lt;/code&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I happened to be on Windows when writing this, so I opened up my sample pictures folder and found a nice jellyfish image to use. (Why was I in Windows? To minimize time between experiments and &lt;a href="http://www.en.thewitcher.com/"&gt;Witcher 2&lt;/a&gt;.) Like &lt;code&gt;message.json&lt;/code&gt;, I put this file—&lt;code&gt;demo.xml&lt;/code&gt;—right in my &lt;code&gt;com.example.client&lt;/code&gt; folder, and I load it as a text resource analogously.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Without overlay types, I need to do my own XML parsing. I took what I consider to be a standard approach, making a domain object called &lt;code&gt;MouseablePlace&lt;/code&gt; that extends &lt;code&gt;Composite&lt;/code&gt; and gave it a public static &lt;code&gt;parseXML(Document)&lt;/code&gt; method. This then does rather mundane building of a &lt;code&gt;MouseablePlace&lt;/code&gt; from the configuration data, but the result is a beautiful &lt;code&gt;MouseablePlace&lt;/code&gt; which contains a series of &lt;code&gt;Hotspot&lt;/code&gt; objects, each of which contains a &lt;code&gt;Rect&lt;/code&gt;, and these are pulled from the XML via &lt;i&gt;ad hoc&lt;/i&gt; recursive descent parsing. To the &lt;code&gt;MouseablePlace&lt;/code&gt; is attached a &lt;code&gt;MouseMoveHandler&lt;/code&gt; that checks whether the mouse is in any of the &lt;code&gt;Hotspot&lt;/code&gt;s, and if so, the &lt;code&gt;Hotspot&lt;/code&gt;'s message is shown in a status label on the screen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Next steps&lt;/h2&gt;Both XML and JSON are contenders to represent the domain objects in this application. For that matter, we could also use an internal DSL in Java, but I would rather keep the learning curve as low as possible for the content team. Whether XML or JSON is more sensible to non-programmers, I have no idea. If we had nore time, we would wrap the whole thing in an editor, but we do not have that luxury.&lt;br /&gt;&lt;br /&gt;If you have any experience or suggestions, please feel free to share them in the comments.&lt;br /&gt;&lt;br /&gt;[ADDENDUM]&lt;br /&gt;Go to &lt;a href="http://paulgestwicki.blogspot.com/2011/05/day-with-autobeans-or-json-vs-xml-for.html"&gt;Part 2&lt;/a&gt;, which covers my experimentation with &lt;a href="http://code.google.com/p/google-web-toolkit/wiki/AutoBean"&gt;AutoBeans&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-9093101315683902465?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/9093101315683902465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/05/json-vs-xml-for-data-representation-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/9093101315683902465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/9093101315683902465'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/05/json-vs-xml-for-data-representation-in.html' title='JSON vs XML for data representation in GWT'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-4979020132301601051</id><published>2011-04-20T08:00:00.001-04:00</published><updated>2011-04-20T08:00:26.310-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='imagination'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><title type='text'>Inquiry</title><content type='html'>"Conventional wisdom holds that different people learn in different ways. Something is missing from that idea, however, so we offer a corollary: Different people, when presented with exactly the same information in exactly the same way, will learn different things. Most models of education and learning have almost no tolerance for this kind of thing. As a result, teaching tends to focus on eliminating the source of the problem: the student's imagination."&lt;br /&gt;&lt;br /&gt;Douglas Thomas and John Seely Brown, &lt;a href="http://www.newcultureoflearning.com/"&gt;A New Culture of Learning&lt;/a&gt;, 2011, p79.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-4979020132301601051?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/4979020132301601051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/inquiry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4979020132301601051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4979020132301601051'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/inquiry.html' title='Inquiry'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-4073825379362822654</id><published>2011-04-20T07:55:00.000-04:00</published><updated>2011-04-20T07:55:07.180-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><title type='text'>Education and Industry</title><content type='html'>Developing software &lt;i&gt;is&lt;/i&gt; the process of learning how to develop that piece of software. As in any craft, there are similarities among projects, yet each one is different and each one enriches the creator.&lt;br /&gt;&lt;br /&gt;If learning is an explicit goal of software development as well as the means to its end, then what is the difference between industry and education?&lt;br /&gt;&lt;br /&gt;The best hypothesis I have is that there's a value-oriented ordering of goals. In business, shipping a product has preference over improving the team; in the academy, improving the individual has preference over completing a project.&lt;br /&gt;&lt;br /&gt;As we transition higher education toward a more enlightened, learning-centric model, I think that it will become increasingly important for us to address these issues—especially considering decreasing public support and the administrative desire for additional revenue streams. Are my students more or less than my apprentices?&lt;br /&gt;&lt;br /&gt;No answers, just more questions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-4073825379362822654?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/4073825379362822654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/education-and-industry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4073825379362822654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4073825379362822654'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/education-and-industry.html' title='Education and Industry'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5235943397799055499</id><published>2011-04-14T13:49:00.000-04:00</published><updated>2011-04-14T13:49:28.461-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='assessment'/><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><title type='text'>Teaching Assessment Culture to Undergraduates</title><content type='html'>My CS222 students are in the middle of their six-week projects, in which they just finished the first of two required iterations. There are three teams, with 4–5 members per team. Last time I taught the course (which was also the first time the course was taught, by me or anyone else), I continued to give rigorous assignments throughout the six week project. This time, I decided to try turning the accountability structure on its head and making the students think about how they would achieve the learning objectives of the project. This inversion of control was designed to foster reflective practice and metacognition.&lt;br /&gt;&lt;br /&gt;At the beginning of the project, the students were told that they would have to display competency in the following concepts and technologies through their six-week projects:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Requirements analysis&lt;/li&gt;&lt;li&gt;Unit testing&lt;/li&gt;&lt;li&gt;Acceptance testing&lt;/li&gt;&lt;li&gt;UML: sequence diagrams, class diagrams&lt;/li&gt;&lt;li&gt;Design patterns&lt;/li&gt;&lt;li&gt;Architecture: model-view separation with MVC or Holub-style model-view-presenter&lt;/li&gt;&lt;li&gt;Logging&lt;/li&gt;&lt;li&gt;OOP: encapsulation, polymorphism&lt;/li&gt;&lt;li&gt;Iterative and incremental development&lt;/li&gt;&lt;li&gt;Distributed version control with Mercurial&lt;/li&gt;&lt;li&gt;User-centered design&lt;/li&gt;&lt;li&gt;Programming conventions&lt;/li&gt;&lt;li&gt;Application of expert tips (&lt;i&gt;e.g.&lt;/i&gt; Effective Java, Pragmatic Programmer)&lt;/li&gt;&lt;li&gt;Estimation of time to complete tasks, including feedback for improvement&lt;/li&gt;&lt;li&gt;Effective team communication&lt;/li&gt;&lt;li&gt;Technical presentation&lt;/li&gt;&lt;li&gt;Reflective practice&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Several of these had been discussed in the preceding eight weeks of the semester, but many had not.&lt;br /&gt;&lt;br /&gt;Each team had to create a "learning objectives document" and share it with me via Google Docs. The document was required to express how the students intended to show competency in each of these areas. They were instructed that this would be a living document: throughout the semester, the teams should come back to the document and consider how they would demonstrate competency.&lt;br /&gt;&lt;br /&gt;For the first three-week iteration, the documents were rarely updated by the teams. I was using in-class meetings to introduce topics from the list that the students had not yet seen, scaffolding these with some light readings while the students focused on getting their first milestone delivered. Immediately following the milestone deliverable, the students were given the assignment to update their learning objectives document, ensuring that all items have clear and explicit plans for how the team intended to demonstrate competence.&lt;br /&gt;&lt;br /&gt;As I looked over their submissions, at first I was disappointed that there was so little of substance. For example, under the topic of "effective team communication," most of the teams said something like, "we get together at regular times to work as a team." In my comments on their work, I suggested that they had missed the target: working together is a requirement, but learning to work together effectively is a learning objective. To show the latter requires evidence.&lt;br /&gt;&lt;br /&gt;I believe it was that particular case—though certainly not in isolation—that made me realize a connection between what I was asking the students to do and what I myself have to do in terms of assessment. I will give some background in order to explain the case.&lt;br /&gt;&lt;br /&gt;It was about three years ago, while serving as chair of my department's Promotion and Tenure Committee and therefore also representing the department to the College of Sciences and Humanities Promotion and Tenure Committee, that I read &lt;a href="http://www.amazon.com/Scholarship-Reconsidered-Professoriate-Ernest-Boyer/dp/0787940690"&gt;Scholarship Reconsidered&lt;/a&gt; and &lt;a href="http://www.amazon.com/Scholarship-Assessed-Evaluation-Professoriate-Advancement/dp/0787910910"&gt;Scholarship Assessed&lt;/a&gt;. I loved these books, finding in them clear articulations of my intuition. I have used the framework from Scholarship Assessed within much of my work with undergraduates, following the principle that if the point of higher education is to be exposed to scholars and scholarship, then having students become scholars themselves is the best way for them to understand it. These books also made me very cold on the devious connotations of "research," as used throughout the institution of higher education.&lt;br /&gt;&lt;br /&gt;Since last year, I have been departmental assessment coordinator. My university, like most others, is attempting a cultural shift towards more regular, formal, and fruitful assessment. In fact, the&lt;a href="http://paulgestwicki.blogspot.com/2010/12/future-of-education-inside-and-outside.html"&gt; Future of Education Task Force&lt;/a&gt; suggested that we become obsessed with assessment and continuous self-improvement. This is a good thing, and I wholeheartedly agree with the mission. The downside is that I have had to attend umpteen workshops and meetings that re-introduce the fundamentals of assessment, presented to dubious or antagonistic faculty (who, I can only presume, have good intentions but see no incentive to change decades of practice). I have also served on the College of Sciences and Humanities Curriculum Committee, which means I have read tens of assessment plans for new and revised courses. Suffice it to say that I've been bumping into &lt;i&gt;assessment&lt;/i&gt;&amp;nbsp;pretty much everywhere I go.&lt;br /&gt;&lt;br /&gt;Now, when I look at the task I gave my students, it was clearly an assessment task—yet, as it was in the guise of teaching rather than service or research, I had not consciously connected it to my past experience. Looking at how the students tried to approach the task, I see the same kinds of confusion that is common among faculty and staff who have not adopted a mindset of incremental and iterative development, a perspective that views problem-solving as a form of model building that requires positive feedback loops.&lt;br /&gt;&lt;br /&gt;This insight made it easier for me to evaluate their work as novice assessors. I do not think that I adequately addressed how assessment &lt;i&gt;works&lt;/i&gt;—that is, how initiating and fostering a feedback loop of self-improvement will pay off in pragmatic terms. The students' learning objective documents did not adequately provide evidence, but without seeing the bigger picture, they had no reason to believe that evidence was worth gathering. This might be best exemplified in a student's response to a note I left in the document asking for more evidence: the student modified the corresponding part of the document and then asked, "Does this satisfy your requirements?" My Socratic response was, "Does it help you demonstrate whether you have met the learning objective?"&lt;br /&gt;&lt;br /&gt;While there have been some stumbling blocks in this approach, I am happy with the overall shape of it. Part of my current research is an investigation into the role of writing in STEM classrooms, and this CS222 happens to be part of the experiment. I will be teaching the class again in the Fall, and I am now considering how such a learning objectives document might be introduced earlier in the semester. This should help students get the idea that they are responsible for their learning, putting them on the path of reflective practice as early as possible.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5235943397799055499?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5235943397799055499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/teaching-assessment-culture-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5235943397799055499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5235943397799055499'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/teaching-assessment-culture-to.html' title='Teaching Assessment Culture to Undergraduates'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6633394522068641103</id><published>2011-04-04T18:41:00.001-04:00</published><updated>2011-04-04T18:41:50.454-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><category scheme='http://www.blogger.com/atom/ns#' term='object-oriented design'/><title type='text'>"Object-oriented"</title><content type='html'>Reviewing papers for an upcoming conference reminded me how difficult it is to communicate when technical terms lose their meaning. "Object-oriented" is frequently thrown around without so much as a wink or a nod—much less a citation to indicate what someone actually means.&lt;br /&gt;&lt;br /&gt;In CS222: Advanced Programming, I have my students read a segment from the first chapter of &lt;a href="http://holub.com/goodies/patterns/index.html"&gt;Holub on Patterns: Learning Design Patterns by Looking at Code&lt;/a&gt;. This is one of my favorite books on design patterns and on design in general. Holub adopts a pedagogically sound perspective: rather than present the patterns in isolation as in &lt;a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612"&gt;the Gang of Four book&lt;/a&gt; (a manner in which they never occur "in the wild"), he demonstrates the patterns as collaborating parts of a system design. Additionally, the first two chapters of the book provide an excellent introduction to the field of patterns and object-oriented design. On pages 13-14, Holub provides a set of heuristics that can be used to determine if a system is, in fact, object-oriented at all. Directly quoting:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Objects are defined by "contract." They don't violate their contracts.&lt;/li&gt;&lt;li&gt;All data is private. Period. (This rule applies to all implementation details, not just the data.)&lt;/li&gt;&lt;li&gt;It must be possible to make any change to the way an object is implemented, no matter how significant that change, by modifying the single class that defines that object.&lt;/li&gt;&lt;li&gt;"Get" and "set" functions are evil when used blindly (when they're just elaborate ways to make the data public).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Note that he does not say that these are sufficient for&amp;nbsp;&lt;i&gt;good&lt;/i&gt;&amp;nbsp;object-oriented design, but rather that a design that does not satisfy all of these is not an object-oriented design. Holub asserts very clearly that this is not a value judgement: OO is not better than procedural. His point is that when he says "object-oriented," he wants to make it very clear what he is talking about.&amp;nbsp;By his definition, almost all ostensibly object-oriented systems that I have seen are actually hybrid designs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I find Holub's zeal appealing because he leaves no room for guesswork. You can agree with him or disagree with him, but there is no ambiguity in his statement, and it is sufficient foundation for him to build the remainder of the book. Let's not forget the lesson of &lt;a href="http://sabian.org/looking_glass6.php"&gt;Humpty Dumpty in Through the Looking Glass&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;'When I use a word,' Humpty Dumpty said, in rather a scornful tone, 'it means just what I choose it to mean — neither more nor less.'&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6633394522068641103?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6633394522068641103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/what-makes-it-object-oriented.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6633394522068641103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6633394522068641103'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/what-makes-it-object-oriented.html' title='&quot;Object-oriented&quot;'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-8583708492116986597</id><published>2011-04-02T09:11:00.002-04:00</published><updated>2011-04-03T14:26:19.627-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>A memory for knights</title><content type='html'>Although this is primarily a place for reflective practice in teaching, &lt;a href="http://paulgestwicki.blogspot.com/2011/03/day-my-son-subtracted.html"&gt;sometimes&lt;/a&gt; I cannot help but share stories about the intersection of games, learning, and parenthood.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last night, my son and I went down to The Wizard's Keep, the local game shop, to pick up &lt;a href="http://boardgamegeek.com/boardgame/68448/7-wonders"&gt;a special order&lt;/a&gt;. We went after dinner as a father-son adventure since he loves to see all the minis and box art. The last time we were there, before Christmas, he was mostly interested in what looked flashy. This time, he was much more interested in what the games were about. For the last few weeks, he has been spending almost all his free time drawing sharks, naval warfare, dinosaurs, knights, and Jedi. Any game featuring such art caught his attention, and so I encouraged him to look for inspiration, to consider drawing some of these scenes later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When we got home, he produced the drawing below.&amp;nbsp;Note that the parts in blue were pre-existing sketches on this sheet of paper; my son loves to pack as many images as possible into one page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-XueTOLG1idk/TZi7SgtY-1I/AAAAAAAAAGU/pwPDGc8vPCA/s1600/alex_version.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://1.bp.blogspot.com/-XueTOLG1idk/TZi7SgtY-1I/AAAAAAAAAGU/pwPDGc8vPCA/s320/alex_version.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;When I looked at it, I realized he had reconstructed from memory the box art of&amp;nbsp;&lt;a href="http://boardgamegeek.com/boardgameexpansion/70230/runebound-mists-of-zanaga"&gt;Runebound: Mists of Zanaga&lt;/a&gt;.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0mRBBe5rnns/TZi7hqwSIcI/AAAAAAAAAGY/0oXxwJut1Ug/s1600/zanaga.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-0mRBBe5rnns/TZi7hqwSIcI/AAAAAAAAAGY/0oXxwJut1Ug/s320/zanaga.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;We looked at a lot of box art last night, but clearly this one made an impression. I remember pointing out to him that the monster had four arms, which I thought was interesting. In his drawing, he has: a four-armed horned demon-creature; a knight in the foreground with the iconic sword and shield; a hammer-wielding warrior in the clutches of the monster; and a third hero grasping onto the monster's arm.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That he remembered all these details, amid all the other boxes, amazes me. &lt;i&gt;The captured warrior is wielding a hammer.&lt;/i&gt;&amp;nbsp;Incredible!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-8583708492116986597?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/8583708492116986597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/memory-for-knights.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8583708492116986597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8583708492116986597'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/04/memory-for-knights.html' title='A memory for knights'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-XueTOLG1idk/TZi7SgtY-1I/AAAAAAAAAGU/pwPDGc8vPCA/s72-c/alex_version.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3439311706814034701</id><published>2011-03-21T19:49:00.001-04:00</published><updated>2011-04-02T09:12:41.230-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>The day my son subtracted</title><content type='html'>Alex is four years old. For his birthday, we got him &lt;a href="http://boardgamegeek.com/boardgame/7120/reiner-knizias-amazing-flea-circus"&gt;Flea Circus&lt;/a&gt;, a fun little card game by &lt;a href="http://en.wikipedia.org/wiki/Reiner_Knizia"&gt;Reiner Knizia&lt;/a&gt; whose main appeal may be the little plastic dogs and cats that are included. They are the scoring mechanism for the game: dogs are worth two points and cats are worth one. At the beginning of the game, they are grouped in the middle of the table, and as you get acts for your flea circus, you take your points from the middle or sometimes from other players.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-xJjno1gh7hE/TYffZJQQSQI/AAAAAAAAAGA/UeGSDpeZhfE/s1600/flea_circus.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="https://lh4.googleusercontent.com/-xJjno1gh7hE/TYffZJQQSQI/AAAAAAAAAGA/UeGSDpeZhfE/s320/flea_circus.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The first time we played the game, we explained to Alex how the scoring worked. Points are earned in the 1-4 range, and every time Alex earned points, he would take the appropriate number of cats. Once the cats were all gone, he was visibly confused over the value of the dogs, and we had to "make change" for him.&lt;br /&gt;&lt;br /&gt;We put the game away for several weeks, wondering if perhaps the mathematics of the scoring was just a bit over his head. The manufacturer's suggested age is 6+ after all, and the &lt;a href="http://boardgamegeek.com/"&gt;BGG&lt;/a&gt; suggested age range is 5–12. When we got it back out and played a few times, Alex did not make a run on cats. He seemed to notice the patterns in how my wife and I scored our points: one was a cat; two was a dog; three was a cat and a dog; and four was two dogs. It was great to see that he had gotten the pattern, partially because it meant there was less fiddling with those awkward, easily-tipped cats. However, his was not a functional arithmetic abstraction, as once we were out of dogs, he was confused about how to count out three points again.&lt;br /&gt;&lt;br /&gt;Flea Circus is a fine game, but it's not as much fun as &lt;a href="http://boardgamegeek.com/boardgame/14441/kinder-bunnies-their-first-adventure"&gt;Kinder Bunnies&lt;/a&gt;, which we got Alex for Christmas and is his go-to game. We play this game a lot. In fact, we made a scorecard of which is the magic carrot each game since we started playing:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-gfGsrmnxcWY/TYfh_NY_EwI/AAAAAAAAAGE/lJYsFA-ZqFg/s1600/scorecard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="https://lh3.googleusercontent.com/-gfGsrmnxcWY/TYfh_NY_EwI/AAAAAAAAAGE/lJYsFA-ZqFg/s320/scorecard.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As you can see, we have played 46 times, and Gilligan has proven himself most often to be the magic carrot. (As in &lt;a href="http://boardgamegeek.com/boardgame/3699/killer-bunnies-and-the-quest-for-the-magic-carrot"&gt;Killer Bunnies&lt;/a&gt;, the premise of the game is that you acquire carrots, not knowing until the end of the game which is the magic, game-winning one.)&lt;br /&gt;&lt;br /&gt;Some of the Kinder Bunnies cards are Bunny Bucks. These are used to activate some other cards, although usually you just hoard them since ten will buy a carrot. Bunny bucks come in different denominations: 1, 2, 5, and 10.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-u8XT7CqB6g4/TYfjJ-jZMCI/AAAAAAAAAGI/ziyhVo88bZI/s1600/kinder_bunnes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh4.googleusercontent.com/-u8XT7CqB6g4/TYfjJ-jZMCI/AAAAAAAAAGI/ziyhVo88bZI/s320/kinder_bunnes.png" width="309" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;One of the cards allows you to spend five bucks to retrieve and play any card from the discard pile—especially useful when the coveted &lt;i&gt;Take Two Carrots&lt;/i&gt;&amp;nbsp;card has been played! Alex had never previously shown any savvy for arithmetic with Bunny Bucks, although he could recognize that the "5" card was enough to use the buyback, and that the "10" card could be used to buy a carrot. Given mixed denominations, though, we always had to point out to him what he could do with it.&lt;br /&gt;&lt;br /&gt;On Saturday, we were playing in a group of five with my wife's parents. Alex had four "1" Bunny Bucks in front of him, and he asked if he had enough to use the buyback card. I spread out his cards and pointed out that each was worth one, then asked him to count them, and he noted that he had four. "Oh, so I need one more," said he, nonchalantly. "Yes, that's right," I responded.&lt;br /&gt;&lt;br /&gt;That was the day that my son subtracted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3439311706814034701?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3439311706814034701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/day-my-son-subtracted.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3439311706814034701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3439311706814034701'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/day-my-son-subtracted.html' title='The day my son subtracted'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-xJjno1gh7hE/TYffZJQQSQI/AAAAAAAAAGA/UeGSDpeZhfE/s72-c/flea_circus.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-415844222202037976</id><published>2011-03-21T11:39:00.000-04:00</published><updated>2011-03-21T11:39:38.828-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Book Review: Little Wars</title><content type='html'>A friend recently lent me &lt;a href="http://en.wikipedia.org/wiki/H._G._Wells"&gt;H. G. Wells&lt;/a&gt;' &lt;i&gt;&lt;a href="http://www.gutenberg.org/ebooks/3691"&gt;Little Wars&lt;/a&gt;&lt;/i&gt;. The book was published in 1913—hence its free availability on &lt;a href="http://www.gutenberg.org/"&gt;Project Gutenberg&lt;/a&gt;). As one can tell from &lt;a href="http://en.wikipedia.org/wiki/Little_Wars"&gt;the summary on Wikipedia&lt;/a&gt;, Little Wars provides a set of rules for miniature wargaming using toy soldiers and model cannons.&lt;br /&gt;&lt;br /&gt;What fascinated me about this book was that it contains all of the elements of modern game analysis. He begins by describing the history of the game design, including the inspiration and the evolution of early rule sets. The finalized rules are not presented as cut from whole cloth as in a modern rulebook, but rather as the reasoned and balanced product of a disciplined iterative and incremental design process. That is, although Wells does not use this language, it is clear that he used &lt;a href="http://paulgestwicki.blogspot.com/2010/11/design-thinking-graphic.html"&gt;design thinking&lt;/a&gt; as a formula for creating a fun game. A detailed session report is provided, and the entirety is given in-character as a commanding officer rather than the game's inventor: Wells didn't just see the game as a simulation but as an opportunity for role-playing as well.&lt;br /&gt;&lt;br /&gt;There are a few places in the book that address gender roles in the early 20th century. Not being a scholar of such things, I do not know if this reflects Wells' sexism or the dominance of traditional gender roles at the time, though I suspect it is the latter. For example, the subtitle of the book is "&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;a game for boys from twelve years of age to one hundred and fifty and for that more intelligent sort of girl who likes boys' games and books." Is the "more intelligent sort of girl" the one who likes boys' games or the one who fights cultural stereotypes to pursue her interests?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;I do not know how much other work there was on game design in the 1910s, but I'd wager it was much less than what one can find at &lt;a href="http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;amp;field-keywords=game+design&amp;amp;x=0&amp;amp;y=0"&gt;the local bookstore&lt;/a&gt; today. As an academic and as a "gamer," I would love to see more game design treatments like Wells'. It has a much different flavor than contemporary post-mortems, which tend to deal with lessons learned rather than the human-powered creative processes.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;If you have any interest in critical game analysis, I recommend that you flip through Little Wars. The price is right, and it's an entertaining read, both in its own right and as a piece of game design history.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-415844222202037976?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/415844222202037976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/book-review-little-wars.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/415844222202037976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/415844222202037976'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/book-review-little-wars.html' title='Book Review: Little Wars'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6366696637620725099</id><published>2011-03-16T15:10:00.000-04:00</published><updated>2011-03-16T15:10:53.874-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Morgan's Raid Spring Team</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-0jcNRk1xFkQ/TYEKsUiQPgI/AAAAAAAAAF8/A8S5smrS7Dw/s1600/193173_10150125667824275_841339274_6490082_2214198_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="https://lh3.googleusercontent.com/-0jcNRk1xFkQ/TYEKsUiQPgI/AAAAAAAAAF8/A8S5smrS7Dw/s320/193173_10150125667824275_841339274_6490082_2214198_o.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;A photo of the &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; Spring team, taken at the &lt;a href="http://www.bsu.edu/"&gt;Ball State University&lt;/a&gt; &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/History/CurrentStudents/Conference.aspx"&gt;Student History Conference&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6366696637620725099?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6366696637620725099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/morgans-raid-spring-team.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6366696637620725099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6366696637620725099'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/morgans-raid-spring-team.html' title='Morgan&apos;s Raid Spring Team'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-0jcNRk1xFkQ/TYEKsUiQPgI/AAAAAAAAAF8/A8S5smrS7Dw/s72-c/193173_10150125667824275_841339274_6490082_2214198_o.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5007008716797190510</id><published>2011-03-10T10:22:00.001-05:00</published><updated>2011-03-14T16:29:58.349-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='vbc'/><title type='text'>Recruitment for the Virginia Ball Center, Spring 2012</title><content type='html'>&lt;i&gt;(My proposal to the &lt;a href="http://www.bsu.edu/vbc"&gt;Virginia Ball Center for Creative Inquiry&lt;/a&gt; was recently approved, and so begins recruitment. What follows is the statement I will be spreading around campus in order to recruit students into the project. I welcome your feedback on the announcement itself, and I encourage you to share the announcement with any &lt;a href="http://www.bsu.edu/"&gt;BSU &lt;/a&gt;undergraduates who might be interested.)&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;In Spring 2012, I will be mentoring a team at the &lt;a href="http://www.bsu.edu/vbc"&gt;Virginia Ball Center for Creative Inquiry (VBC)&lt;/a&gt; in a seminar entitled "Games and Learning: The Underground Railroad." We will be exploring the intersection of &lt;i&gt;play&lt;/i&gt;&amp;nbsp;and &lt;i&gt;learning&lt;/i&gt;&amp;nbsp;within the challenging context of American slavery. The team will work together to design and develop a game based on the Underground Railroad, a game that is both fun and educational, whose playing and enjoyment will result in a deeper understanding of the theme.&lt;br /&gt;&lt;br /&gt;This is an ambitious student-driven project, and its success requires a team of talented and dedicated students. Game development requires creativity and interdisciplinary collaboration. We will need artists, writers, programmers, editors, marketers, managers, musicians, and researchers. The input of historians and anthropologists will be as important as that of designers and technologists.&lt;br /&gt;&lt;br /&gt;Our community partner for this project is &lt;a href="http://www.connerprairie.org/"&gt;Conner Prairie Interactive History Park&lt;/a&gt;. We will also be visiting the &lt;a href="http://www.indianamuseum.org/"&gt;Indiana State Museum&lt;/a&gt;, the &lt;a href="http://www.waynet.org/levicoffin/default.htm"&gt;Levi Coffin House&lt;/a&gt;, and the &lt;a href="http://freedomcenter.org/"&gt;National Underground Railroad Freedom Center&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The VBC provides a unique experience in undergraduate education. It is the ultimate &lt;a href="http://www.bsu.edu/immersive"&gt;immersive learning experience&lt;/a&gt;: students spend the entire semester working together on this one project, meeting in the beautiful &lt;a href="http://www.bsu.edu/directory/buildings/default.asp?buildingcode=KC"&gt;Kitselman Center&lt;/a&gt; off the main BSU campus. Students earn fifteen credits for participating in the VBC seminar, and the VBC staff and I will work with your major and minor departments to ensure that you continue making progress in your studies through your participation.&lt;br /&gt;&lt;br /&gt;The application process involves completing a form and providing two letters of recommendation, with interviews following.&amp;nbsp;&lt;a href="http://www.cs.bsu.edu/homepages/pvg/vbc.html"&gt;Application instructions can be found &lt;span id="goog_831493055"&gt;&lt;/span&gt;online&lt;/a&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_831493056"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;About the faculty mentor: I am an associate professor in the Computer Science department, and I have been researching game design and development with BSU students since Summer 2006. Our most ambitious project to date has been &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt;, a history education game for Indiana 4th-graders developed over three semesters. I am interested in software development, board games, computer games, and the science of teaching and learning. Much of my recent scholarship has been on what people learn by creating games, and I am excited to work with an interdisciplinary team at the VBC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5007008716797190510?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5007008716797190510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/recruitment-for-virginia-ball-center.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5007008716797190510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5007008716797190510'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/recruitment-for-virginia-ball-center.html' title='Recruitment for the Virginia Ball Center, Spring 2012'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5489291338465925949</id><published>2011-03-04T09:06:00.000-05:00</published><updated>2011-03-04T09:06:01.594-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Morgan's Raid in the Indy Star</title><content type='html'>Yesterday's Indianapolis Star &lt;a href="http://www.indystar.com/apps/pbcs.dll/article?AID=2011103030330"&gt;had a feature&lt;/a&gt; on our playtesting of &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; at &lt;a href="http://www.avon.k12.in.us/"&gt;River Birch Elementary in Avon, Indiana&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.indystar.com/apps/pbcs.dll/article?AID=2011103030330"&gt;Here's the link again&lt;/a&gt;, in case I was too subtle above. Don't make me write "Click me."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5489291338465925949?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5489291338465925949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/morgans-raid-in-indy-star.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5489291338465925949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5489291338465925949'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/morgans-raid-in-indy-star.html' title='Morgan&apos;s Raid in the Indy Star'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7650150549774994790</id><published>2011-03-01T20:10:00.001-05:00</published><updated>2011-03-01T20:42:52.335-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><title type='text'>Unit testing Java's System.out output</title><content type='html'>This topic came up in CS222, and the resulting legwork may of value to others. I posted a similar message privately to the course discussion forum.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The problem is that the students are writing console applications, but we're also learning about the value of &lt;span id="goog_829017501"&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;test-driven developmen&lt;span id="goog_829017502"&gt;&lt;/span&gt;t&lt;/a&gt;. You can &lt;a href="http://en.wikipedia.org/wiki/Unit_testing"&gt;unit test&lt;/a&gt; console apps much more easily than GUI, but it requires a bit of I/O sleight-of-hand. Your application writes to &lt;code&gt;System.out&lt;/code&gt; by definition, and so you need to be able to capture the program's output somehow. There is a &lt;tt&gt;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/lang/System.html#setOut(java.io.PrintStream)"&gt;System.setOut&lt;/a&gt;&lt;/tt&gt; method that can be used to change where &lt;tt&gt;System.out.print*&lt;/tt&gt; writes. This method requires a &lt;tt&gt;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/io/PrintStream.html"&gt;PrintStream&lt;/a&gt;&lt;/tt&gt;, and so one solution is to wrap a &lt;tt&gt;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html"&gt;ByteArrayOutputStream&lt;/a&gt;&lt;/tt&gt; in a &lt;tt&gt;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/io/PrintStream.html"&gt;PrintStream&lt;/a&gt;&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Consider the following example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;public class Exemplar {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        System.out.println("Num args: " + args.length);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This program simply will prints the number of arguments sent on the command line. In &lt;a href="http://eclipse.org/"&gt;Eclipse&lt;/a&gt;, you can specify the arguments through the &lt;i&gt;Run Configurations&lt;/i&gt; dialog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The unit test for this looks like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;import static org.junit.Assert.assertEquals;&lt;br /&gt;&lt;br /&gt;import java.io.ByteArrayOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.PrintStream;&lt;br /&gt;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;&lt;br /&gt;public class ExemplarTest {&lt;br /&gt;    @Test&lt;br /&gt;    public void testMain() throws IOException {&lt;br /&gt;        ByteArrayOutputStream baos = new ByteArrayOutputStream();&lt;br /&gt;        System.setOut(new PrintStream(baos));&lt;br /&gt;        Exemplar.main(new String[] { "foo" });&lt;br /&gt;        baos.flush();&lt;br /&gt;        String whatWasPrinted = new String(baos.toByteArray());&lt;br /&gt;        String[] linesOfOutput = whatWasPrinted.split(//&lt;br /&gt;                System.getProperty("line.separator"));&lt;br /&gt;        assertEquals(1, linesOfOutput.length);&lt;br /&gt;        assertEquals("Num args: 1", linesOfOutput[0]);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;There are three tricks here that may require elucidation.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It's possible for a buffered IO class to cache its result in memory before writing it to a stream. This is a good thing, since writing to a stream is expensive and writing to memory is cheap. However, this can mean that the results you're expecting to see in your stream may not show up when you go looking for them. The call to &lt;tt&gt;baos.flush&lt;/tt&gt; will flush the buffers to the stream so you know the content will be there when we go reading for it. In my opinion, it's not worth remembering exactly which classes require flushing: it's polite to just flush anyway.&lt;/li&gt;&lt;li&gt;You can make a &lt;tt&gt;String&lt;/tt&gt; out of a byte array. It's generally not a good idea due to character encoding complications. In this case, however, we know it's really character data in the array since we're putting it there ourselves via &lt;code&gt;System.out.print&lt;/code&gt; commands.&lt;/li&gt;&lt;li&gt;We would like this to be cross-platform, but different operating systems handle end-of-line characters differently. Java gives us a &lt;a href="http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties()"&gt;system property&lt;/a&gt; for divining this information, and so we can use this to split the String into multiple lines.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7650150549774994790?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7650150549774994790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/unit-testing-javas-systemout-output.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7650150549774994790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7650150549774994790'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/unit-testing-javas-systemout-output.html' title='Unit testing Java&apos;s System.out output'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-6172085153056119608</id><published>2011-03-01T11:47:00.000-05:00</published><updated>2011-03-01T11:47:26.387-05:00</updated><title type='text'>STEM Major Production vs. Job Availability</title><content type='html'>Later today, I am giving an invited talk on the value of programming to non-CS majors. As part of this, I am going to discuss the current and projected future landscapes for employment in Computer Science. I came across the following chart a few weeks ago &lt;a href="http://computinged.wordpress.com/2011/01/20/is-the-biological-local-that-different-from-the-computational-national/"&gt;in an insightful post by Mark Guzdial&lt;/a&gt;. He credits the chart itself to Eric Raymond and the data to 10-year trends published by the Bureau of Labor Statistics.&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://computinged.files.wordpress.com/2011/01/ericroberts-production-openings.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://computinged.files.wordpress.com/2011/01/ericroberts-production-openings.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Refer to &lt;a href="http://computinged.wordpress.com/2011/01/20/is-the-biological-local-that-different-from-the-computational-national/"&gt;Guzdial's post&lt;/a&gt; for more discussion.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-6172085153056119608?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/6172085153056119608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/stem-major-production-vs-job.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6172085153056119608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/6172085153056119608'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/03/stem-major-production-vs-job.html' title='STEM Major Production vs. Job Availability'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-837960404036943309</id><published>2011-02-28T22:25:00.002-05:00</published><updated>2011-02-28T22:25:55.313-05:00</updated><title type='text'>Save Dr. G</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-SYbimC_Uxxs/TWxnLd7SGZI/AAAAAAAAAFw/PDlPwo41uQM/s1600/save_dr_g.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-SYbimC_Uxxs/TWxnLd7SGZI/AAAAAAAAAFw/PDlPwo41uQM/s1600/save_dr_g.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-837960404036943309?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/837960404036943309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/save-dr-g.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/837960404036943309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/837960404036943309'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/save-dr-g.html' title='Save Dr. G'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-SYbimC_Uxxs/TWxnLd7SGZI/AAAAAAAAAFw/PDlPwo41uQM/s72-c/save_dr_g.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3339231985275693206</id><published>2011-02-28T16:54:00.001-05:00</published><updated>2011-04-13T22:29:33.708-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><title type='text'>Human Success and Failure Modes</title><content type='html'>Cleaning my office after an unfortunate shelving disaster, I came across a cheat sheet from last semester's CS222 class on which I wrote a reminder to myself of &lt;a href="http://alistair.cockburn.us/"&gt;Alistair Cockburn&lt;/a&gt;'s Human Success and Failure Modes. It seems I can never find this when I want it, so I'm copying it here. Interested parties should read &lt;a href="http://www.amazon.com/Agile-Software-Development-Cooperative-Game/dp/0321482751/"&gt;his excellent book on agile software development as a cooperative game&lt;/a&gt;. In his book, he presents these as considerations when developing a methodology: a methodology that relies on failure modes is less likely to be successful than one built on success modes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HUMAN FAILURE MODES&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;making mistakes&lt;/li&gt;&lt;li&gt;preferring to fail conservatively&lt;/li&gt;&lt;li&gt;inventing rather than researching&lt;/li&gt;&lt;li&gt;being creatures of habit&lt;/li&gt;&lt;li&gt;being inconsistent&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;HUMAN SUCCESS MODES&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;being able to look around&lt;/li&gt;&lt;li&gt;being able to learn&lt;/li&gt;&lt;li&gt;being malleable&lt;/li&gt;&lt;li&gt;taking pride in work&lt;/li&gt;&lt;li&gt;taking pride in contributions&lt;/li&gt;&lt;li&gt;being good citizens&lt;/li&gt;&lt;li&gt;taking initiative&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;At some point, I would like to compare these results to the research on pedagogy and explore the correlation between his workplace-oriented perspective and what is know from the science of teaching and learning. For now, I need to finish cleaning the broken glass off my desk...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Current CS222 students: we'll be talking about this soon, probably once you start up your six-week projects.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3339231985275693206?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3339231985275693206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/human-success-and-failure-modes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3339231985275693206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3339231985275693206'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/human-success-and-failure-modes.html' title='Human Success and Failure Modes'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-1146298779717737367</id><published>2011-02-24T10:48:00.000-05:00</published><updated>2011-02-24T10:48:23.587-05:00</updated><title type='text'>See Morgan's Raid at the Student History Conference on Feb 25</title><content type='html'>Tomorrow, February 25, my students will be demonstrating &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; at the &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/History/CurrentStudents/Conference.aspx"&gt;BSU Student History Conference&lt;/a&gt;. We will be in &lt;a href="http://www.bsu.edu/directory/buildings/default.asp?buildingcode=SC"&gt;SC304&lt;/a&gt;, and sessions begin at 9:15, 1:15, and 2:45. Each session will have a short (~10 min) presentation about the ideas behind the game, and the rest of the time will be open to demos and feedback.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-1146298779717737367?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/1146298779717737367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/see-morgans-raid-at-student-history.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1146298779717737367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1146298779717737367'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/see-morgans-raid-at-student-history.html' title='See Morgan&apos;s Raid at the Student History Conference on Feb 25'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3567899748961737264</id><published>2011-02-23T08:31:00.000-05:00</published><updated>2011-02-23T08:31:38.827-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Morgans Raid: Sprint 10</title><content type='html'>Last Friday was the end of Sprint 10 for the Morgan's Raid team. Here's the burndown:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Q4cbyCp4W0g/TWUJMBc5XbI/AAAAAAAAAFs/s2RsuO2Y9Wg/s1600/sprint10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-Q4cbyCp4W0g/TWUJMBc5XbI/AAAAAAAAAFs/s2RsuO2Y9Wg/s320/sprint10.png" width="316" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In Sprint 10, the Sprint Planning meeting was held while I was away at &lt;a href="http://paulgestwicki.blogspot.com/2011/02/quick-word-about-bowling.html"&gt;the administrators' retreat&lt;/a&gt;, so the students had complete authority. There were a lot of small user stories this sprint, and there was confusion between me and the team regarding whether certain stories were committed but not on the sprint burndown, or whether they had brainstormed some tasks for non-committed user stories. I'm not sure that the burndown chart is accurate: the first dramatic dip may have been a miscalculation. The real lesson here, then, is one of communication: I don't think we talked about the phenomenon adequately until two weeks later at the Sprint Retrospective.&lt;br /&gt;&lt;br /&gt;Speaking of the Retrospective, I think the team continues to do great work. I feel that there is a real team identity and that they trust each other. They're really a fun group to work with, and I am saddened when I am called away from them to work on mundane tasks such as committee meetings or advising.&lt;br /&gt;&lt;br /&gt;Today, we're heading out to an Indianapolis-area elementary school to do some end-user testing with our current prototype. I'm quite excited about it, and word is that there will be press from both &lt;a href="http://bsu.edu/"&gt;BSU &lt;/a&gt;and the &lt;a href="http://www.indystar.com/"&gt;Indy Star&lt;/a&gt; there. The only downside of the story comes from my efforts this morning to clean up just a few loose ends before the playtesting. There is still a lot of cruft in the codebase, things that should be embarassing but I fear the students still either (a) don't see as ugly or (b) don't consider it worth fixing. Here's an example: there are four different cinematics in the game and they are all driven completely by &lt;a href="http://yaml.org/"&gt;YAML &lt;/a&gt;configurations. Despite the fact that each only differs in which configuration is loaded and what follows the cinematic, folks last semester implemented four different classes for these features via copy-paste coding. In each one, mouse clicks were incorrectly handled by polling in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;update &lt;/span&gt;method rather than by overriding &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;mouseClicked&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;. To fix the bug wherein mouse clicks were sometimes not recognized, I had to go change this in four places. Since we are literally hours away from end-user testing, the last thing I wanted to do was introduce any risks into the system, but you can bet that before the weekend, someone is going to fix this.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was inspired by&lt;a href="http://martinfowler.com/bliki/TradableQualityHypothesis.html"&gt; Martin Fowler's recent article on the Tradeable Quality Hypothesis&lt;/a&gt;, which can be summarized by the statement, "You cannot trade quality." In the Sprint 10 Retrospective, we talked briefly about how I felt that the students were developing some sense of programming aesthetics, a skill or perspective that I have been contemplating for some time. Working side-by-side with students on design, analysis, and development still seems to be the best way, although it does not scale, and my other job responsibilities are not always conducive to this end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3567899748961737264?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3567899748961737264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/morgans-raid-sprint-10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3567899748961737264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3567899748961737264'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/morgans-raid-sprint-10.html' title='Morgans Raid: Sprint 10'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Q4cbyCp4W0g/TWUJMBc5XbI/AAAAAAAAAFs/s2RsuO2Y9Wg/s72-c/sprint10.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-3898123196821137702</id><published>2011-02-20T15:01:00.000-05:00</published><updated>2011-02-20T15:01:51.996-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='dinosaurs'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Brontosaurus and BDUF</title><content type='html'>My 4-year-old son loves dinosaurs. He draws them, he pretends to be them, we read about them, we tell stories about them, and today we even we ate pancakes shaped like them. Many contemporary children's books on dinosaurs include types I'm sure I never saw as a child, such as &lt;a href="http://en.wikipedia.org/wiki/Carcharodontosaurus"&gt;carcharodontosaurus&lt;/a&gt;, &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;sqi=2&amp;amp;ved=0CB0QFjAA&amp;amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDeinonychus&amp;amp;ei=hS9hTYGIG4GglAedy62QDA&amp;amp;usg=AFQjCNFhjct0CUnQZFDYcK5j5HlQkpdZeg"&gt;deinonychus&lt;/a&gt;, and one of my favorites, &lt;a href="http://en.wikipedia.org/wiki/Therizinosaurus"&gt;therizinosaurus&lt;/a&gt;. My son could also tell you—since it comes up a lot—that there really is not such a thing as a &lt;a href="http://www.unmuseum.org/dinobront.htm"&gt;brontosaurus&lt;/a&gt;. Turns out, what was called "brontosaurus" was really an &lt;a href="http://en.wikipedia.org/wiki/Apatosaurus"&gt;apatosaurus&lt;/a&gt;, and since the latter name had historic precedent, it was the one that stuck.&lt;br /&gt;&lt;br /&gt;Yet, in our family furor for all things dinosaur, we frequently find references to the brontosaurus. My first reaction to such occurrences is usually, "Why don't they know better?" A good follow-up question is, "How would they?" That is, why would the designer of, say, dinosaur-shaped pasta even think to investigate whether or not there really is such a thing as a brontosaurus? Second-order ignorance remains&lt;a href="http://thinkexist.com/quotation/to_be_ignorant_of_one-s_ignorance_is_the_malady/146967.html"&gt; the malady of the ignorant&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My son's love of drawing recently blossomed, and it was initiated by a visit from my father—who, I should mention, is an excellent artist. My dad got my son into drawing, unlocking what must be an artistic skill and passion that skips generations. However, every time my dad drew a tyrannosaur, it was standing upright with its tail on the ground. These were fine drawings in their own right, but they also happened to be wrong. How would my father know that his archetypal dinosaur's posture is&amp;nbsp;scientifically&amp;nbsp;passé?&lt;br /&gt;&lt;br /&gt;I was idly considering dinosaurs this morning when an analogy popped into my head: teaching children about brontosaurus is like teaching novice software developers to do&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front"&gt;Big Design Up Front&lt;/a&gt;&amp;nbsp;(BDUF). For years, the &lt;i&gt;status quo&lt;/i&gt; assumed software development was like manufacturing, and hence one can measure productivity in man-hours and lines-of-code. As long as you design it right from the beginning, all will go well.&amp;nbsp;Of course, as far back as the 1970's, &lt;a href="http://www.cs.unc.edu/~brooks/"&gt;Fred Brooks&lt;/a&gt; was &lt;a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959"&gt;predicting agile methods&lt;/a&gt;.&amp;nbsp;Despite the popularity of his essays, I have seen little evidence of their impact (&lt;i&gt;q.v.&lt;/i&gt; the &lt;a href="http://www.projectsmart.co.uk/docs/chaos-report.pdf"&gt;CHAOS report&lt;/a&gt;) until relatively recently, as "agile" is less frequently used as a profanity. From a modern perspective, we know that software development &lt;i&gt;is&lt;/i&gt;&amp;nbsp;the process of learning how to develop that software. By necessity, you know the most about a system when you have finished building it. This is why you always feel like you could do it better if you could do it again, or why you should always&lt;a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month#The_pilot_system"&gt; build one to throw away&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I look forward to a day when software engineers take a page out of modern children's dinosaur books: any time BDUF is mentioned, there's a an explanation that well-meaning people used to think it was a good idea, but now we realize that its really just a shadow of iterative and incremental design processes. The positive side is that I don't foresee BDUF-shaped pasta ever being included in Software Engineer Mac &amp;amp; Cheese.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-3898123196821137702?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/3898123196821137702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/brontosaurus-and-bduf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3898123196821137702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/3898123196821137702'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/brontosaurus-and-bduf.html' title='Brontosaurus and BDUF'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5730751799496160546</id><published>2011-02-17T17:36:00.001-05:00</published><updated>2011-02-17T17:37:12.839-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design thinking'/><category scheme='http://www.blogger.com/atom/ns#' term='bloom&apos;s taxonomy'/><title type='text'>Bloom meets Design Thinking</title><content type='html'>I have been working on a book chapter the explores many of the themes on this blog, particularly those relating to the &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; project.&amp;nbsp;Here is a sketch that did not make it into the chapter: an exercise in comparing &lt;a href="http://en.wikipedia.org/wiki/Bloom's_Taxonomy"&gt;Bloom's Taxonomy of the Cognitive Domain&lt;/a&gt; to a &lt;a href="http://paulgestwicki.blogspot.com/2010/11/design-thinking-graphic.html"&gt;design thinking process&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-H7WM1mkj12k/TV2hqvRWigI/AAAAAAAAAFo/_fZMtvA88lQ/s1600/bloom_meets_design_thinking.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="159" src="http://3.bp.blogspot.com/-H7WM1mkj12k/TV2hqvRWigI/AAAAAAAAAFo/_fZMtvA88lQ/s320/bloom_meets_design_thinking.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I think the idea is compelling, but I have not had the time yet to fully flesh it out. My initial analysis revealed what one might expect: most of the design thinking steps explicitly involve cognitive activity at the highest level of the cognitive domain. Maybe there's something more there, and maybe there isn't. In any case, it was fun to draw.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5730751799496160546?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5730751799496160546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/bloom-meets-design-thinking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5730751799496160546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5730751799496160546'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/bloom-meets-design-thinking.html' title='Bloom meets Design Thinking'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-H7WM1mkj12k/TV2hqvRWigI/AAAAAAAAAFo/_fZMtvA88lQ/s72-c/bloom_meets_design_thinking.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-4769774458539702025</id><published>2011-02-10T14:15:00.001-05:00</published><updated>2011-02-11T09:05:25.391-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Scrum Diagram RFC</title><content type='html'>I am working on a book chapter on the &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid project&lt;/a&gt;, and I suspect that a visual representation of Scrum will be of value in explaining how it works. Specifically, I desire an information graphic that illustrates how we specifically have implemented Scrum. The diagram in &lt;a href="http://scrumprimer.org/"&gt;The Scrum Primer&lt;/a&gt; is good but probably overly complex for the intended audience of my work. The &lt;a href="http://creativecommons.org/"&gt;CC&lt;/a&gt;-licensed &lt;a href="http://en.wikipedia.org/wiki/File:Scrum_process.svg"&gt;one on Wikipedia&lt;/a&gt; is too general.&lt;br /&gt;&lt;br /&gt;Here is my sketch (&lt;a href="http://creativecommons.org/licenses/by-nc-sa/3.0/"&gt;CC BY-NC-SA&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-d6cN54_1vSs/TVQ4Xnn7XSI/AAAAAAAAAFg/mBs7dWou4Wk/s1600/scrum-sketch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://3.bp.blogspot.com/-d6cN54_1vSs/TVQ4Xnn7XSI/AAAAAAAAAFg/mBs7dWou4Wk/s320/scrum-sketch.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Grey boxes represent artifacts and data transformations. Blue boxes are meetings, and blue paths are "human paths". In a sense, I am trying to overlap a data flow diagram with a control flow diagram.&lt;br /&gt;&lt;br /&gt;I welcome comments. I'll need to have something finalized within a week, and I'll plan on sharing the final result here, along with a summary of comments if they're received by email instead of posted.&lt;br /&gt;&lt;br /&gt;UPDATE: Based on some of the comments, I made this alternative (also&amp;nbsp;&lt;a href="http://creativecommons.org/licenses/by-nc-sa/3.0/"&gt;CC BY-NC-SA&lt;/a&gt;) that shows the data path from the Executable Release (nee Potentially Shippable Product) to the Sprint Review.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-tFlnpVsoSD4/TVVCFr7-8bI/AAAAAAAAAFk/qcQ67vLknbs/s1600/scrum-sketch2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://4.bp.blogspot.com/-tFlnpVsoSD4/TVVCFr7-8bI/AAAAAAAAAFk/qcQ67vLknbs/s320/scrum-sketch2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-4769774458539702025?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/4769774458539702025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/scrum-diagram-rfc.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4769774458539702025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/4769774458539702025'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/scrum-diagram-rfc.html' title='Scrum Diagram RFC'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-d6cN54_1vSs/TVQ4Xnn7XSI/AAAAAAAAAFg/mBs7dWou4Wk/s72-c/scrum-sketch.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-2564081012576330173</id><published>2011-02-09T07:56:00.000-05:00</published><updated>2011-02-09T07:56:21.253-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><title type='text'>Winters at a Glance</title><content type='html'>The Star Press of Muncie, IN. Sunday, February 6. Page 1A.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_BaInZNkTBIo/TVKOQEDlxII/AAAAAAAAAFc/dJ_t-1SzP1g/s1600/winters.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_BaInZNkTBIo/TVKOQEDlxII/AAAAAAAAAFc/dJ_t-1SzP1g/s320/winters.png" width="264" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;What happens when the temperature drops below 0 inches?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-2564081012576330173?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/2564081012576330173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/winters-at-glance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2564081012576330173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2564081012576330173'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/winters-at-glance.html' title='Winters at a Glance'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BaInZNkTBIo/TVKOQEDlxII/AAAAAAAAAFc/dJ_t-1SzP1g/s72-c/winters.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-1517055742098260786</id><published>2011-02-09T07:50:00.000-05:00</published><updated>2011-02-09T07:50:19.919-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Morgan's Raid, Sprint 9</title><content type='html'>Sprint 9 ended last Friday, and the team is doing great. Starting with the Spring semester, we are not using Google Docs for the Product and Sprint Backlogs, since now we have a persistent space in which to work. Since I don't have an electronic log of activity, then, it has become important that I archive a few of the details here.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_BaInZNkTBIo/TVKMfHLbNdI/AAAAAAAAAFY/wg0OrvEGTbo/s1600/sprint_9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="258" src="http://2.bp.blogspot.com/_BaInZNkTBIo/TVKMfHLbNdI/AAAAAAAAAFY/wg0OrvEGTbo/s320/sprint_9.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the burndown chart, green is steady progress and blue is actual progress. The bump around Monday and Wednesday coincides with the big ice storm, and the fact that we only had such a small bump is a testament to the team's commitment. A few team members were able to come to campus that Wednesday afternoon to hammer out the most ambitious part of the sprint: the implementation of the new raiding system. Others continued to work from home, using email and chat to keep in touch.&lt;br /&gt;&lt;br /&gt;The team's total estimate of hours ended up being fairly accurate, although the specific allocation of estimated hours to tasks was off by quite a bit. The team recognized this and agreed to draw upon this experience in the Sprint 10 Planning Meeting. This meeting happened on Monday, but I still know nothing about it since I was at the strategic planning roundtable retreat. I left the team with a prioritized Product Backlog, and I'm eager to see how they chose user stories and broke them down into tasks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-1517055742098260786?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/1517055742098260786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/morgans-raid-sprint-9.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1517055742098260786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1517055742098260786'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/morgans-raid-sprint-9.html' title='Morgan&apos;s Raid, Sprint 9'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BaInZNkTBIo/TVKMfHLbNdI/AAAAAAAAAFY/wg0OrvEGTbo/s72-c/sprint_9.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-8310169497873400340</id><published>2011-02-07T21:32:00.002-05:00</published><updated>2011-02-08T06:52:25.641-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='learning'/><category scheme='http://www.blogger.com/atom/ns#' term='bowling'/><title type='text'>A quick word about bowling</title><content type='html'>I just finished the first day of the Strategic Planning Roundtable, which is part of the administrators' retreat here at BSU. I am there as a member of the nascent Strategic Planning Committee, not as an administrator. I hope to write more about this experience in the coming days, but for now I want to share briefly my experience at our end-of-day event. We all went down to Jillian's in downtown Indianapolis for dinner and "crazy bowling."&lt;br /&gt;&lt;br /&gt;We were formed into teams, and each frame of the game had a different theme. The first round involved using your non-dominant hand; the next had us throwing the ball without using the fingerholes; and this pattern continued with breakdancing, ballerina, backwards-through-the-legs, and pirate bowling. (By the way, I have determined that this last one is physically dangerous. The constraint is that you hop up to the foul line on one foot and throw the ball, while holding one eye closed. If you are not used to hurling 10-16 pound objects, doing it while on one foot can lead to significant muscle strain. I'm glad I brought Aleve.)&lt;br /&gt;&lt;br /&gt;After the game, scores were tallied. When we were told that there would be another round, there was an audible moan. We did then play another round, same as the first, and then the winners got some prizes.&lt;br /&gt;&lt;br /&gt;Two things struck me about this experience. The first and less important is that it was not &lt;i&gt;Fun&lt;/i&gt;. (I will remind the reader that there are important distinctions between the&amp;nbsp;colloquial&amp;nbsp;"fun" and the scholarly "&lt;a href="http://www.raphkoster.com/gaming/etech07.shtml"&gt;Fun&lt;/a&gt;.")&amp;nbsp;At least on my team, we would have rather just bowled. Big-F Fun emerges---at least in part---from the balance of challenge and skill. Doing these little one-off silly tasks did not give room for skill improvement. The challenge far exceeded our skill, and so we were all just frustrated, essentially relying on random chance for points. As an alternative, knowing that there were prizes at stake, there was always the option to cheat, too. There were some laughs and a few lucky shots, but at least on my team, the general feeling was one of malaise, a frustration at our inadequacy to meet any of our goals and expectations.&lt;br /&gt;&lt;br /&gt;This leads me to my second and more pertinent point: we pull this kind of crap on students &lt;i&gt;all the time. &lt;/i&gt;We put students into uncomfortable situations, where their abilities will be measured against their peers, and where they have little or no existing skills. They do not know why they are doing what we make them do, and we do not give them the time necessary to develop skills that escalate with the challenge.&amp;nbsp;Some people will cheat, and usually they will get ahead for it. Then, we're off to a new topic or a new class or a new semester, which may seem to have as little to do with the previous one as ballerinas to pirates. "Ballerinas? Pirates? I came here to get better at bowling!"&lt;br /&gt;&lt;br /&gt;Now if &lt;i&gt;that&lt;/i&gt;&amp;nbsp;was the real intended lesson of the administration in planning this activity, I will be duly impressed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aside: I don't mean to be overly critical of the retreat planners' goals: they wanted a nice team-building activity where no one had an unfair advantage. I will be the first to admit that&amp;nbsp;"team-building activities" are not my forte, and the lack of them has probably had negative impact on some of the teams I've formed over the years. I have developed a preference for designing situation where the team feels good about themselves by actually accomplishing something. I try to bring this into my teaching and mentorship by following an&amp;nbsp;&lt;i&gt;early win&lt;/i&gt;&amp;nbsp;design: setting up a team so that on the first iteration, they have readily achievable goals that they can feel good about. This has been recommended in several of the agile software development books I've read, notably &lt;a href="http://www.amazon.com/Agile-Software-Development-Cooperative-Game/dp/0321482751"&gt;Cockburn's&lt;/a&gt; and &lt;a href="http://www.amazon.com/Agile-Development-Scrum-Addison-Wesley-Signature/dp/0321618521"&gt;Keith's&lt;/a&gt;, if I recall correctly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-8310169497873400340?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/8310169497873400340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/quick-word-about-bowling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8310169497873400340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8310169497873400340'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/quick-word-about-bowling.html' title='A quick word about bowling'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-7968848914438508928</id><published>2011-02-01T14:22:00.001-05:00</published><updated>2011-02-04T19:36:57.938-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Sandwich</title><content type='html'>When I conceptualize a sandwich, I generally think of it the same way that I perceive it, combined with memory of the flavors, textures, and emotional connotations. However, when I design a sandwich, I approach the problem from the inside out.&lt;br /&gt;&lt;br /&gt;What is the feature of the sandwich? Roast beef. The point of this whole sandwich is that it is a roast beef delivery system. Now that I have decided on the feature with the most value, I can approach the rest of the design challenge as one of finding the best complements to the feature.&lt;br /&gt;&lt;br /&gt;Cheese? Swiss. Roast beef and swiss just &lt;i&gt;sounds&lt;/i&gt;&amp;nbsp;right.&lt;br /&gt;&lt;br /&gt;Veggies? Of course! Tomatoes, lettuce, some bell peppers, and for salty complement, a pickle on the side.&lt;br /&gt;&lt;br /&gt;Condiments... horseradish sauce. Mmmm.&lt;br /&gt;&lt;br /&gt;What's the best way to wrap this up? The bread is a key component, but it is a servant to the rest of the sandwich experience. Sure, sometimes the bread &lt;i&gt;is&lt;/i&gt;&amp;nbsp;the feature, like when my wife makes peanut butter and banana sandwiches on graham bread, but not this time.&lt;br /&gt;&lt;br /&gt;Regardless of whether I was ordering this sandwich or building it myself, I would have to consider these ingredients in a different order. As a sandwich builder, I need to select my bread first, then spread the condiments, then stack up the fillings.&lt;br /&gt;&lt;br /&gt;When you go to&amp;nbsp;&lt;a href="http://cms.bsu.edu/CampusLife/Dining/Locations/Atrium.aspx"&gt;The Atrium at BSU&lt;/a&gt;&amp;nbsp;and go to the deli sandwich counter, they have a touchscreen display for selecting what you want. It's screen-oriented, with the first (pertinent) screen showing breads, then meats, cheeses, vegetables, and condiments.&lt;br /&gt;&lt;br /&gt;This sequence of screens is&amp;nbsp;&lt;i&gt;builder-centric&lt;/i&gt;. The order of selection is exactly the order that the staff behind the counter will use to build the sandwich. From each screen, you cannot see the options on the other screens, because they are not pertinent to the assembly-line approach to creating the sandwich.&lt;br /&gt;&lt;br /&gt;The touch screen interface is less user-friendly than the paper-based system that preceded it. Previously, any number of clients could grab a sheet, check the meats, cheeses, breads, &lt;i&gt;etc.&lt;/i&gt;&amp;nbsp;that they want, put it in the bin, and wait for the sandwich. Now, you have to wait in line behind the single touchscreen station. I find that this pressure adds to my frustration, but I usually approach the counter without knowing what I want. That is, I use the sandwich design experience to explore both the design space and my own desires.&lt;br /&gt;&lt;br /&gt;Also, they forgot my horseradish sauce.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-7968848914438508928?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/7968848914438508928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/sandwich.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7968848914438508928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/7968848914438508928'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/02/sandwich.html' title='Sandwich'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-2093139728831669732</id><published>2011-01-25T19:42:00.000-05:00</published><updated>2011-01-25T19:42:34.518-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>Morgan's First Sprint of Spring</title><content type='html'>Last Friday was the end of Sprint 8 on the Morgan's Raid project. This was the first sprint of the Spring semester. The "closers" are a team of eight CS majors and our one Honors Fellow from Art. The team were selected from among the 25 developers in Fall's CS315 class. These eight were among the top students in the Fall, and not all were from one team. I am not loaded for running the project this semester, and so I had to limit the number of students I could take on to what I could comfortably manage in my regular assigned research time.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;During Sprint 8, we crossed the 1000th changeset, and as of this writing, we're at revision 1037. We had a pizza party at the end of the sprint to celebrate, and I promised the team we would do it again on every order of magnitude. I wonder if Papa John's will still be having their $10 large deal when we hit 10,000?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For Sprint 8, we budgeted 80 hours, assuming each student would work 10 hours per week and that most work would be done in pairs. Unfortunately, I had forgotten about Martin Luther King Day when we did the planning meeting, and so we were actually overcommitted when one considers that we lost a working day. Still, the sprint went quite well, and I think the team did a great job of estimating their tasks, including difficult design tasks such as revising the raiding system through multiple paper prototypes.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_BaInZNkTBIo/TT9rxF_NXEI/AAAAAAAAAFI/2Sf1XK_jWc0/s1600/sprint8burndown.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_BaInZNkTBIo/TT9rxF_NXEI/AAAAAAAAAFI/2Sf1XK_jWc0/s320/sprint8burndown.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Since we have a dedicated space (hooray!), we moved off of Google Docs as a platform for managing the Product and Sprint Backlogs and are now using a whiteboard and Post-It notes. I think the only feature we miss from Google Docs is the automatic updating of the burndown chart based on updated estimates of effort remaining. (This also gives me an incentive every two weeks to post our burndown charts here, so that I don't lose my digital copies.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other major change we made was to modify the Sprint Backlog format. In the Fall, teams broke down user stories into tasks and then marked their estimates of hours remaining after each working unit. Whether a task was not yet started, in-progress, or finished was implicit in the numeric value and slope. One of the prominent weaknesses articulated by the team in last semester's retrospectives was the need for more formal validation, and so this sprint, we have a backlog in this format:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;th&gt;User story&lt;/th&gt; &lt;th&gt;Tasks not yet started&lt;/th&gt; &lt;th&gt;Tasks in progress&lt;/th&gt; &lt;th&gt;Requires validation&lt;/th&gt; &lt;th&gt;Done&lt;/th&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Formalizing the need for validation helped in Sprint 8, although in the retrospective, we realized that we needed more careful articulation of &lt;i&gt;whose&lt;/i&gt; validation was required. With multiple product owners and tasks of varying technical complication, it was not always clear who was the appropriate person to contact. However, I do think that losing Monday to MLK day was a major factor here.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-2093139728831669732?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/2093139728831669732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/01/morgans-first-sprint-of-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2093139728831669732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2093139728831669732'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/01/morgans-first-sprint-of-spring.html' title='Morgan&apos;s First Sprint of Spring'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BaInZNkTBIo/TT9rxF_NXEI/AAAAAAAAAFI/2Sf1XK_jWc0/s72-c/sprint8burndown.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5354124677585261789</id><published>2011-01-19T11:29:00.000-05:00</published><updated>2011-01-19T11:29:04.621-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Outlook usability fail</title><content type='html'>I was sending out a meeting request through Microsoft Office Outlook today, and I got this warning message.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_BaInZNkTBIo/TTcPYMeUk3I/AAAAAAAAAFE/usqq-_oRDu4/s1600/thanks_outlook.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://2.bp.blogspot.com/_BaInZNkTBIo/TTcPYMeUk3I/AAAAAAAAAFE/usqq-_oRDu4/s320/thanks_outlook.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I used a comma to separate email addresses when I typed them. This is &lt;i&gt;wrong&lt;/i&gt;,&amp;nbsp;it is &lt;i&gt;my&lt;/i&gt;&amp;nbsp;fault, and &lt;i&gt;I&lt;/i&gt;&amp;nbsp;have to go back and fix it.&lt;br /&gt;&lt;br /&gt;Outlook can clearly detect the problem, and the QA process revealed that people make this mistake often enough to warrant a specific warning. Yet, there is no way to make the tool actually fix this. Not only is there no "quick fix" button: you cannot find-and-replace within the "To:" field of the meeting request, so a user has to manually go in and replace the commas with semicolons. I guess that is the Microsoft Office usability engineers' way of training us to do things the Outlook Way (tm).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5354124677585261789?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5354124677585261789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/01/outlook-usability-fail.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5354124677585261789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5354124677585261789'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/01/outlook-usability-fail.html' title='Outlook usability fail'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BaInZNkTBIo/TTcPYMeUk3I/AAAAAAAAAFE/usqq-_oRDu4/s72-c/thanks_outlook.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5883813423923293012</id><published>2011-01-17T12:50:00.000-05:00</published><updated>2011-01-17T12:50:29.623-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morgan&apos;s raid'/><title type='text'>For the love of Morgan</title><content type='html'>On Friday, I had to leave the &lt;a href="https://sites.google.com/site/morgansraidgame/"&gt;Morgan's Raid&lt;/a&gt; team meeting early to join up with my colleagues on the &lt;a href="http://paulgestwicki.blogspot.com/2010/12/future-of-education-inside-and-outside.html"&gt;Future of Education Task Force&lt;/a&gt;. I stopped in the office today to get some work done and found this note on my door.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_BaInZNkTBIo/TTSAZ8N9yQI/AAAAAAAAAE8/kz-nyx3j1-M/s1600/for_the_love_of_morgan.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_BaInZNkTBIo/TTSAZ8N9yQI/AAAAAAAAAE8/kz-nyx3j1-M/s320/for_the_love_of_morgan.png" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I had been a little down on Friday, and I remember saying as much to the team. Lots of work to be done, including a wicked problem for the Task Force, a chapter to write, a course to plan, and the anniversary of a son's birth to celebrate. The team was listening. Good people, these.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5883813423923293012?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5883813423923293012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/01/for-love-of-morgan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5883813423923293012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5883813423923293012'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/01/for-love-of-morgan.html' title='For the love of Morgan'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BaInZNkTBIo/TTSAZ8N9yQI/AAAAAAAAAE8/kz-nyx3j1-M/s72-c/for_the_love_of_morgan.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-1525581173637650139</id><published>2011-01-13T11:16:00.001-05:00</published><updated>2011-01-13T11:16:31.726-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><title type='text'>Students and Simplicity</title><content type='html'>I assigned my &lt;a href="http://www.cs.bsu.edu/homepages/pvg/courses/cs222Sp11/"&gt;CS222&lt;/a&gt; students to read the &lt;a href="http://agilemanifesto.org/"&gt;Manifesto for Agile Software Development&lt;/a&gt; and the &lt;a href="http://agilemanifesto.org/principles.html"&gt;Twelve Principles of Agile Software&lt;/a&gt;. They were to choose two of the twelve principles and reflect on how these are pertinent to them right now, as students of Computer Science. Most of the students selected this as one of their two.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Simplicity—the art of maximizing the amount&amp;nbsp;of work not done—is essential.&lt;/blockquote&gt;From their responses, I got the impression that they know that their approaches from CS1 and CS2 are not the simplest ways to solve problems. However, it was not clear to me if they were searching for the maximum simplicity (as in, make everything as simple as possible but not simpler) or the delusional simplicity (as in, software development should be simpler). I will have to remember to ask them to reflect on this later in the semester, once they have learned refactoring and design techniques and gained experience working in groups on projects of more substantial size.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-1525581173637650139?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/1525581173637650139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2011/01/students-and-simplicity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1525581173637650139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/1525581173637650139'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2011/01/students-and-simplicity.html' title='Students and Simplicity'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-5627569790337156432</id><published>2010-12-30T14:26:00.000-05:00</published><updated>2010-12-30T14:26:59.621-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs315'/><title type='text'>CS315: What We Learned</title><content type='html'>During the "final exam" meeting for CS315, I conducted an exercise &lt;a href="http://paulgestwicki.blogspot.com/2010/12/cs222-what-we-learned-and-how-we.html"&gt;similar to the one at the end of CS222&lt;/a&gt;. I gave the team 30 minutes to list all of the significant things they learned during their 315 Studio experience, and this resulted in 78 items. The list of 78 were consolidated to 76 to remove redundancy. I gave each student three stickers which they used to vote on the items they thought were most significant. When we isolated the top 10% by votes, we ended up with this list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://paulgestwicki.blogspot.com/2010/06/entity-system-vs-oo-game-engine.html"&gt;Entity system architecture&lt;/a&gt;&lt;/li&gt;&lt;li&gt;State-based games&lt;/li&gt;&lt;li&gt;&lt;a href="http://junit.org/"&gt;JUnit&lt;/a&gt; unit testing&lt;/li&gt;&lt;li&gt;&lt;a href="http://agilemanifesto.org/"&gt;Agile development&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Coding for reuse&lt;/li&gt;&lt;li&gt;&lt;a href="http://scrumtraininginstitute.com/library"&gt;Scrum&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Interestingly, only two of these—the top two—are explicit learning objectives in the course syllabus. The rest deal with the practice of developing a game. Just below these top vote getters were similarly useful tools: &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt;, &lt;a href="http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html"&gt;Javadoc&lt;/a&gt;, and shell scripting.&lt;br /&gt;&lt;br /&gt;The surprising thing to me is that there were almost no items listed that dealt with team communication. At the end of each sprint, we held a Sprint Retrospective, during which time the team discussed what went well and what did not go well. Team communication (within teams and across teams) was listed every sprint as something that was going well, and so I assumed that given the opportunity, they would articulate team communication as a lesson learned. I mentioned my surprise in our debriefing after the exercise, and one of the students astutely observed that interpersonal communication was considered a "background" skill, something that was taken for granted. Given more time, I would have liked to have explored this theme, but we were already running late.&lt;br /&gt;&lt;br /&gt;I am left with this question: what does it mean that students consider interpersonal communication to be different from other skills developed in the course of a project? Is this an artifact of the university infrastructure, an effect of this particular course design, or just human nature to consider it so? There were no explicit team-building or communication-enhancing activities: there was just the project, run through Scrum, and the associated reflective retrospectives. This might be enough to dismiss the point, since students were not explicitly exposed to interpersonal communication as a subject of study, except that "coding for reuse" was also not separately identified, and this made the top six.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-5627569790337156432?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/5627569790337156432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/cs315-what-we-learned.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5627569790337156432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/5627569790337156432'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/cs315-what-we-learned.html' title='CS315: What We Learned'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-465102234096503890</id><published>2010-12-30T09:48:00.000-05:00</published><updated>2010-12-30T09:48:08.533-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teaching'/><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><title type='text'>Fall CS222 Redux</title><content type='html'>&lt;div&gt;I'm teaching CS222: Advanced Programming again in Spring. Fall was the first offering of the course, and in the grand scheme of things, I am happy with the results. However, I think think there are many opportunities for improvement. The course had two major components:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Daily writing assignments, many of which were based on readings of &lt;a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683"&gt;Effective Java&lt;/a&gt;, relating the lessons of that book to current and past programming tasks.&lt;/li&gt;&lt;li&gt;A few small individual programming assignments early, a two-week pair project at the early-middle, and a six-week team project delivered in two milestones.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;In keeping with the "2" theme, there are two key observations I have upon reflecting on the course. The first is fairly simple: when we &lt;a href="http://paulgestwicki.blogspot.com/2010/12/cs222-what-we-learned-and-how-we.html"&gt;spent some time reflecting on how we learned&lt;/a&gt;, reading Effective Java did not come up. I spoke with some students after the meeting who admitted that for most of the class, they saw this as busywork, but towards the end, they could see more how it related to their work. Some students complained that the readings weren't tied to lecture and that they didn't like the "textbook," which betrays the fact that they didn't really get the point: it's not a "textbook," and it was supposed to affect practice, not waste time being reiterated in lecture.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other observation is more confounding. In the six-week project, there was a milestone deliverable and presentation at week three. I explained to the class that it was purely a formative assessment: it would let them get feedback and see what their grade would be if they turned this in. In addition, the students were given a checklist of the features and ideas I expected to see in the project (such as automated unit tests and evidence of best practices a la Effective Java). Many of the milestone deliverables lacked required elements, and so their formative evaluation reflected this. I was explicit in my feedback about what was lacking. In the final deliverable, at the end of the semester, most projects still lacked those elements that were lacking at week three. That is, there is no evidence that any team actually used the formative evaluation to influence their practice!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the final analysis, another interesting and perhaps predictable trend emerges: students' grades on the writing assignments were not significantly different from their grades on the programming assignments.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are some ideas I'm kicking around for revising the course. I welcome your comments.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;More programming projects. They should be programming all the time.&lt;/li&gt;&lt;li&gt;Require programming projects to have accompanying technical reports that explicitly connect the artifact to theory.&lt;/li&gt;&lt;li&gt;Rather than provide goalposts for students to show competency in specific skills, provide a list of concepts and allow students to demonstrate competency in their own way. That is, provide them with a checklist of sorts that they keep throughout the semester, and that I check off when I believe they have shown adequate competency in an area. The course grade then would be directly and transparently derived from this document.&lt;/li&gt;&lt;li&gt;Rather than assign specific sections of Effective Java as I find them interesting, require students to browse the book and understand its structure, then require them to incorporate relevant areas into their programs throughout the semester. That is, replace assigned reading&amp;amp;writing assignments with student-directed inquiry.&lt;/li&gt;&lt;li&gt;Introduce Mercurial very early in the semester and require all projects to be hosted. This way, I can easily pull up any student's project during lecture to use as an example with fiddling with switching laptops or strange computer configurations.&lt;/li&gt;&lt;li&gt;Mandate some kind of individual accountability into team projects, such as modified Sprint Burndown charts. This would help students learn to identify tasks and estimate effort in addition to increasing the transparency of team operation.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The main problem for which I do not yet have a solution comes down to the teams' need for individualized consultation balanced against teams' dominant interests in their own projects. The students develop their own project ideas, and so each project is different. Hence, the concepts and tools that one team needs to succeed will be different from another. For example, I had one team in Fall who were using Android: they would have benefited from more time spent with me discussing how to architect Android applications, but this would probably not have been motivating to anyone other team. By itself this is not a problem, since I could add "work days" to the class schedule, during which time I would circulate among teams and provide more guidance. (Note that office hours inevitably do not coincide with student working hours: they're in class while I'm available to help, and when they're working, I'm at home.) There is an opportunity for students to share their individual findings through class presentations, but&amp;nbsp;I have not yet found a good mechanism for adequately incentivising both presenters and the audience. I do not want to introduce inauthentic artifacts purely for assessment, such as graded quizzes or audience feedback, but I have a hard time conceiving of an authentic incentive that could be used.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For what it's worth, I'm still quite on the fence regarding adding "work days" to the course meeting schedule. The class does not have a scheduled lab component, but maybe it needs one. On this issue, I have a hard time separating my knowledge about teaching and learning, my intuition, and my own K-12 and undergraduate experience. Added into the mix, I am not sure how many of these problems are really due to structural issues beyond my control, namely the fact that this is one of several disconnected learning experiences that students are engaged in. However, this would certainly help with&lt;a href="http://paulgestwicki.blogspot.com/2010/11/growing-dissatisfaction-with-222.html"&gt; my sense that I was talking too much in class&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-465102234096503890?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/465102234096503890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/fall-cs222-redux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/465102234096503890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/465102234096503890'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/fall-cs222-redux.html' title='Fall CS222 Redux'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-8041692113317629348</id><published>2010-12-11T08:34:00.000-05:00</published><updated>2010-12-11T08:34:35.227-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='csedweek'/><title type='text'>CS Ed Week</title><content type='html'>Today marks the end of 2010 &lt;a href="http://www.csedweek.org/"&gt;CS Education Week&lt;/a&gt;. I could enumerate all the reasons why this is significant, but it's certainly easier for you to just follow that link and see for yourself.&lt;br /&gt;&lt;br /&gt;In honor of CS Education Week, I want to reflect a little on how the field of CS Education has impacted me personally and professionally. I have always had a penchant for teaching, possibly because both of my parents were trained to be teachers. (Not that it's the training that matters &lt;i&gt;per se&lt;/i&gt;, but that they both had interest and aptitude in the pursuit.) I had several teaching experiences prior to entering graduate school, and I knew that it was something for which I had a passion. However, entry into the academy is not through a focus on teaching, but rather on the individual intellectual pursuits represented by the doctorate. I spent seven years at the &lt;a href="http://www.buffalo.edu/"&gt;University at Buffalo&lt;/a&gt;, first on my masters and then on my doctorate. Although I would occasionally talk with &lt;a href="http://www.cse.buffalo.edu/~bharat"&gt;my advisor&lt;/a&gt; about my interest in teaching, he sagely recommended avoiding teaching until the doctorate was complete: both are at least full-time jobs, and one who begins a lectureship tends to have much more difficulty finishing the dissertation.&lt;br /&gt;&lt;br /&gt;I taught a few courses while at UB, but it wasn't until I became an Assistant Professor at Ball State University that I could really focus in on what it meant to be a good teacher. I found it challenging to keep up with my work on &lt;a href="http://www.cse.buffalo.edu/jive"&gt;JIVE&lt;/a&gt;, partially due to the distance from UB and partially due to the stresses of the new job, being as how BSU is not a research-focused institution: with no grad students to work under me, I was unable to keep the pace of research and development.&lt;br /&gt;&lt;br /&gt;My interest in &lt;a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)"&gt;design patterns&lt;/a&gt; and games led me to explore the intersection of these ideas with students, and this led to my first CS education publication, "&lt;a href="http://portal.acm.org/citation.cfm?id=1227310.1227391"&gt;Computer Games as a Motivation for Design Patterns&lt;/a&gt;," which I presented at &lt;a href="http://www.sigcse.org/"&gt;SIGCSE &lt;/a&gt;2007. This was my first time attending the conference, but it was an eye-opening experience. I learned more about education research and realized how many more opportunities I could make for significant research, but most importantly, I was inspired by being surrounded by a thousand CS professors who care deeply about student learning. Most professors are good folks who want their students to learn, but the SIGCSE community is different: these are scholars who have devoted their lives to helping make computer science education better. I'm proud and humbled to be among their ranks.&lt;br /&gt;&lt;br /&gt;I have also become involved in the &lt;a href="http://ccsc.org/"&gt;Consortium for Computing Sciences in Colleges, Midwest Region&lt;/a&gt;. I think I first went to this conference in 2006, inspired primarily by the idea of bringing a team of undergraduates to the programming competition, even though I didn't know any of the three members of the team. Since then, this has become one of my favorite annual trips, gathering several of our high-achieving students and spending two days chatting about research, education, and life. The regional conference serves a role similar to the international SIGCSE conference: it brings together a vibrant community of dedicated faculty from around the Midwest, and it's always reinvigorating to spend time with them. In fact, this is now my second year as the publicity chair for the conference and my first year as an at-large member of the regional steering committee.&lt;br /&gt;&lt;br /&gt;There is a lot of room for improvement in higher education, and so there is a lot of room for improvement in Computer Science education. Thank you to all the scholars who have gone before me and the ones who will come afterwards—this year is my sixth as a professor, and I am proud to have seeded two alumni into CS graduate school who I know will be excellent professors. Thank you to organizations like &lt;a href="http://acm.org/"&gt;ACM&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://ieee.org/"&gt;IEEE&lt;/a&gt;&amp;nbsp;who promote computing. Thanks to &lt;a href="http://ccsc.org/"&gt;CCSC &lt;/a&gt;for their support of regional conferences, especially with tight travel budgets being the new norm. Thanks to&amp;nbsp;&lt;a href="http://csta.acm.org/"&gt;CSTA&lt;/a&gt;&amp;nbsp;for their work in K-12,&amp;nbsp;where there is the greatest need to help students see the value of computational thinking, regardless of their future careers. Thanks to you, dear reader, for considering the value of computing and computer science education.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-8041692113317629348?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/8041692113317629348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/cs-ed-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8041692113317629348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/8041692113317629348'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/cs-ed-week.html' title='CS Ed Week'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-934056158921008456</id><published>2010-12-09T14:46:00.000-05:00</published><updated>2010-12-09T14:46:31.416-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs222'/><title type='text'>CS222: What we learned and how we learned it</title><content type='html'>I did something experimental today in our last meeting of CS222: Advanced Programming. Regular readers may recall that this was the first offering of the course, not just by me, but by the university; following the &lt;a href="http://www.sigcse.org/membership/mailingLists"&gt;SIGCSE mailing lists&lt;/a&gt;, I think other departments are starting to see the need for such a course as well. I decided to devote most of our 75-minute meeting time today to a student-directed analysis of what we learned, inspired by the structure that &lt;a href="http://cms.bsu.edu/Academics/CollegesandDepartments/MCOB/FacultyandStaffDirectory/EntrepreneurshipCenterFacultyandStaff/GoldsbyMichael.aspx"&gt;Michael Goldsby&lt;/a&gt; used when he led &lt;a href="http://paulgestwicki.blogspot.com/2010/10/future-of-education-task-force.html"&gt;our six-hour Future of Education Task Force meeting&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;First, I asked the students to list anything that they learned during the semester that was incident upon the CS222 experience. I told them that it didn't have to be something that was explicitly listed in the syllabus or in our meetings, but anything that was somehow related. I recorded these on a large self-stick easel pad, and as we filled up each sheet, I had my undergraduate teaching assistant post it around the room. We filled eight sheets with 75 items (with one item on the ninth sheet) in just under 30 minutes.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_BaInZNkTBIo/TQEg2NTeukI/AAAAAAAAAEw/jaNTtjq01eQ/s1600/CS222-Fall2010-endofsem.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/_BaInZNkTBIo/TQEg2NTeukI/AAAAAAAAAEw/jaNTtjq01eQ/s320/CS222-Fall2010-endofsem.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;After listing the 75 items, I distributed sticker sheets and asked each student to put a sticker by the three items that were the most important or valuable to them. I briefly explained that this was purely subjective—that they were free to define what "important" and "valuable" are themselves. Based on the distribution, we made the cut-off at four stars, giving us a consensus on the following items as most valuable:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Team programming&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Test-driven development&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use of libraries (software)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Refactoring&lt;br /&gt;&lt;/li&gt;&lt;li&gt;UML&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Design patterns&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;From these, I asked the students to consider &lt;i&gt;how&lt;/i&gt; they learned these. It took a bit of prompting to construct this second list, but we ended up with 13 items. For example, the first item offered was, "by writing code." I asked for more information about the kind of situation the student meant, because many of our ideas are reified in code. He clarified that he meant, "by writing code that uses these ideas." I pushed a little harder into the kind of situation he was describing, and we ended up with, "by writing code that uses these ideas in the final project." Not all of these were articulated as well as I would have hoped, but this might reflect the most interesting part: that the students did not have the vocabulary to describe activities that they thought were useful to their learning.&lt;br /&gt;Each student was given two stars for these sheets, and these four rose to the top: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lecture-based example that was built upon in assignments&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Looking at code as a group in class&lt;br /&gt;&lt;/li&gt;&lt;li&gt;By writing code that uses these ideas in the final project&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Demonstrations of practice&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Disturbingly missing from the entire list of thirteen is any mention of books or the Internet. It seems the focus of student's thinking about learning is classroom-based, despite the emphasis this semester on reflective practice, metacognition, and explicitly learning how to use external (i.e. non-self, non-university) resources. I do not want to jump to conclusions about this, since as mentioned above, the students clearly lacked a vocabulary for describing their learning experiences.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-934056158921008456?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/934056158921008456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/cs222-what-we-learned-and-how-we.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/934056158921008456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/934056158921008456'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/cs222-what-we-learned-and-how-we.html' title='CS222: What we learned and how we learned it'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BaInZNkTBIo/TQEg2NTeukI/AAAAAAAAAEw/jaNTtjq01eQ/s72-c/CS222-Fall2010-endofsem.jpeg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-548613718636739636.post-2950241559421820823</id><published>2010-12-08T20:41:00.000-05:00</published><updated>2010-12-08T20:41:31.895-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mythtv'/><title type='text'>MythTV Upgrade</title><content type='html'>&lt;p&gt;I have just completed an upgrade to my &lt;a href="http://mythtv.org"&gt;MythTV&lt;/a&gt; box. I originally set it up in 2007, basing it on &lt;a href="http://mandrivalinux.com"&gt;Mandriva 2007.1&lt;/a&gt;, and it's been running mostly seamlessly since then. I have had occasional problems with session management, in which multiple frontends would start upon boot, but after some tinkering this became a matter of routine maintenance. However, I've been more recently interested in leveraging the streaming options of my &lt;a href="http://netflix.com"&gt;NetFlix&lt;/a&gt; subscription, and unfortunately, they do not support streaming to Linux. I understand that this must be due to contracts with the content providers, who insist upon DRM. I wish there were a better solution to this, but I honestly don't have one, and the more pragmatic issue was that I was disappointed with my inability to stream video to my family room TV.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A few days ago, I was browsing the Web and came across &lt;a href="http://www.mythtv.org/pipermail/mythtv-users/2010-April/286536.html"&gt;a mailing list post from earlier this year&lt;/a&gt; in which the author describes how he configured NetFlix streaming in MythTV by way of running &lt;a href=http://www.microsoft.com/windows/windows-xp/default.aspx"&gt;Windows XP&lt;/a&gt; within &lt;a href="http://www.vmware.com/products/player/"&gt;VMWare Player&lt;/a&gt;. I usually use &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; for all my virtualization needs, but the mythtv-users thread suggested that there are impassable audio barriers with VirtualBox that don't show up with VMWare Player. I have a spare Windows XP license, so I installed it on my myth box about two weeks ago. There is a sense in which it worked, but it was painfully slow: the machine only had 512MB RAM on a Sempron 3000, and trying to do anything with VMWare Player caused hard drive thrashing with swap access.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Poking around my closet of abandoned hardware, I found a case from my previous desktop machine and booted it up. Finding everything in working order, I picked up a 1TB drive on a &lt;a href="http://newegg.com"&gt;Newegg&lt;/a&gt; Thanksgiving deal and proceeded to transfer the Myth hardware to the other box. This one had 2GB RAM and an Athlon 64 3700+, a vast improvement of memory and a significant improvement of processor.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Unfortunately, getting the new system installed was not as seamless as I hoped. I tried many different distributions and each one ended up with some kind of problem. The odd thing is that moving the old hard drive into the new shell worked just fine, and I was able to check that the hardware configuration was working. However, Mandriva 2007.1's ALSA drivers were too old to work with VMWare player, and so the audio was garbled when streaming video. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;After quite a bit of tinkering, I started doing more diagnostics of the installation media themselves, and I found each to have an error. It appears that the burner on my workstation cannot accurately burn 700MB CDRoms. Who knew? When I took the ~700MB image and put it on a blank DVD instead of a blank CD (and swapped the graphics card, which may or may not have made a difference but definitely reduced noise), the installation went more smoothly. I still had to specify "nomodeset" as a kernel parameter in order to get to an installer, but now I have a nice shiny &lt;a href="http://mythbuntu.org"&gt;Mythbuntu 10.10&lt;/a&gt; installation working great.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Two unexpected changes from the old installation: First, my USB wifi device worked automagically, without having to download any extra drivers or anything. Huzzah! Second, my &lt;a href="http://www.streamzap.com/consumer/pc_remote/index.php"&gt;StreamZap remote control&lt;/a&gt; was automatically recognized as a keyboard, but it was also configurable through the Mythbuntu control center. The odd result was that I was getting double input for the four arrow keys. After some digging online, I discovered that I could just comment out the arrow keys in the ~/.lirc/mythtv configuration file, and now it's working fine.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;One of the nicest features I originally set up was for the machine to wake itself up to make a recording and then shut itself down afterwards. This way it doesn't have to be an always-on machine. On the Mandriva 2007.1 installation, this was enabled through &lt;a href="http://sourceforge.net/projects/nvram-wakeup/"&gt;nvram-wakeup&lt;/a&gt;, and because my motherboard was not in the database, this required a good deal of tinkering to get set up correctly. By switching to Mythbuntu and a newer motherboard, it is all done now with &lt;a href="http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface"&gt;ACPI&lt;/a&gt; calls. Specifically, I followed &lt;a href="http://www.mythtv.org/wiki/ACPI_Wakeup"&gt;the instructions for configuring ACPI wakeup on the mythtv wiki&lt;/a&gt;, and this worked like a charm.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Installing Windows on VMWare Player was not a problem, but hooking it up with the MythTV frontend was not as easy as described in the mailing list. I had an odd situation: if I opened a terminal through the desktop environment (&lt;a href="http://www.xfce.org/"&gt;XFCE&lt;/a&gt;), then I could run vmplayer with no trouble. It generated some warnings, but it started and run without issue. However, if I launched a terminal from &lt;a href="http://www.mythtv.org/wiki/Mythwelcome"&gt;mythwelcome&lt;/a&gt; or via the &lt;a href="http://www.mythtv.org/wiki/MythFrontend"&gt;mythfrontend&lt;/a&gt; button, running vmplayer would generate the same error messages but then do nothing. After many fruitless attempts to fix this, I asked the resident Unix expert in the department, and he suggested I use printenv in both terminals and diff the results. I had been trying to do something similar but in a much more awkward way&amp;mdash;always nice to learn a new *nix command! After a few failed attempts, I discovered that by unsetting GTK_PATH, I could start vmplayer consistently.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So there you have it! I have a machine that boots faster, runs quieter, and allows me to watch streaming Netflix movies from the comfort of my living room. It also has four times the hard drive space, so my son can record as many &lt;a href="http://pbskids.org/dinosaurtrain/"&gt;Dinosaur Train&lt;/a&gt; episodes as he wants without my wife's &lt;a href="http://www.americastestkitchen.com/"&gt;America's Test Kitchens&lt;/a&gt; needing to be deleted to make room. My original build four years ago was supposed to be built of spare parts, but it ended up costing me about $400 due to my hardware being faulty or having the wrong interfaces. This revision only required purchasing a bigger drive, and the rest was accomplished with existing hardware and elbow grease. Thanks to the Myth community for all the excellent software and resources, thanks to Spencer for the Unix help, and thanks to Paul for the TV tuner cards that allowed me to build it at all the first time.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/548613718636739636-2950241559421820823?l=paulgestwicki.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulgestwicki.blogspot.com/feeds/2950241559421820823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/mythtv-upgrade.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2950241559421820823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/548613718636739636/posts/default/2950241559421820823'/><link rel='alternate' type='text/html' href='http://paulgestwicki.blogspot.com/2010/12/mythtv-upgrade.html' title='MythTV Upgrade'/><author><name>Paul Gestwicki</name><uri>https://profiles.google.com/103828843747057637757</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-23mxlOnnZq4/AAAAAAAAAAI/AAAAAAAAAAA/Ey7A0PGoasA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999
