<?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-7723706839198721393</id><updated>2011-07-08T07:32:06.576-07:00</updated><category term='ICSE'/><category term='MSR'/><category term='Xen'/><category term='thesis'/><category term='tools'/><category term='javascript'/><category term='bugs'/><category term='books'/><category term='ICSE 09'/><category term='sailing'/><category term='IDE'/><category term='Static Analysis'/><category term='VM'/><category term='GSoC'/><category term='agile'/><category term='SQLAlchemy'/><category term='Vancouver'/><category term='ORM'/><category term='bits'/><category term='script'/><category term='todo'/><category term='Microsoft Research'/><category term='code'/><category term='Basie'/><category term='AT and T'/><category term='blogs'/><category term='papers'/><category term='Dr. Project'/><category term='reading'/><category term='Continuous Integration'/><category term='emacs'/><category term='301'/><category term='research'/><category term='cloud computing'/><category term='REST'/><category term='Web Services'/><category term='CherryPy'/><category term='reading week'/><category term='2125'/><category term='SnowFlock'/><category term='build engineering'/><category term='music'/><category term='bash'/><category term='mutation'/><category term='emprical studies'/><category term='lecture'/><category term='URL Mapping'/><category term='Django'/><category term='FindBugs'/><category term='hobby'/><category term='summer of code'/><category term='bluenose'/><category term='Conceptual Modeling'/><category term='Google Doc'/><category term='primates'/><category term='ta'/><category term='testing'/><category term='svn'/><title type='text'>Rory Tulk's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>88</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6142486759618631085</id><published>2010-02-26T09:19:00.000-08:00</published><updated>2010-02-26T09:21:01.318-08:00</updated><title type='text'>Migrating</title><content type='html'>Hi all.&lt;br /&gt;&lt;br /&gt;I'm migrating my blog from here over to &lt;a href="http://rorytulk.wordpress.com"&gt;http://rorytulk.wordpress.com&lt;/a&gt;, soon to become &lt;a href="http://www.rorytulk.com"&gt;www.rorytulk.com&lt;/a&gt;.  Please adjust accordingly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6142486759618631085?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6142486759618631085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6142486759618631085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6142486759618631085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6142486759618631085'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2010/02/migrating.html' title='Migrating'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6840724574755956297</id><published>2010-02-07T13:21:00.001-08:00</published><updated>2010-02-16T21:18:38.995-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='thesis'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>Software Testing Techniques, an Empirical Approach</title><content type='html'>Proper software testing regimes are a cornerstone of effective software engineering. Progress has been made to teach students sound testing techniques, but improvement can still be made. My master's research supervisor and I conducted a study designed to empirically determine the difference in ability between student and professional software testers, and elicit from the experts behaviours or techniques which may be used to enhance undergraduate curriculum.&lt;br /&gt;&lt;br /&gt;Our experimental setup consisted of in-lab observational sessions where subjects wrote thorough suites of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;JUnit&lt;/span&gt; tests for sample software we'd created.  Subjects were drawn from the University of Toronto’s undergraduate computer science student body and professional developers from the Greater Toronto Area.  The test code and video logs created during these sessions were examined for trends present in the student and professional groups.&lt;br /&gt;&lt;br /&gt;Our intuition going into the study was that professionals would find more defects with their test suites, an advantage stemming from some metric such as number of tests written, lines per test, code coverage per test, etc.  Analysis of these metrics did not confirm these hypotheses, however.  Students and professionals performed equally well in terms of number of bugs found.  However, student code contained more defects and, more importantly, the types of bugs found differed strikingly between the two groups.&lt;br /&gt;&lt;br /&gt;Bugs in the sample code were broken down into two categories: stateless and stateful.  A stateless bug is uncovered by inputting invalid values into a method invocation, and the method returns invalid results or throws an exception.  A stateful bug occurs when a method call corrupts the object's state, and so subsequent calls perform incorrectly.  Students found a mix of stateless and stateful bugs in the code, with a strong majority being stateless.  The professionals sampled found strictly stateful defects.  There are several possible explanations for this effect, although no evidence to support one over the others is immediately apparent.&lt;br /&gt;&lt;br /&gt;The full text can be found &lt;a href="http://www.cs.toronto.edu/%7Ertulk/Software-Testing-Techniques.pdf"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6840724574755956297?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6840724574755956297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6840724574755956297' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6840724574755956297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6840724574755956297'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2010/02/software-testing-techniques-empirical.html' title='Software Testing Techniques, an Empirical Approach'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6305038567132753447</id><published>2010-02-01T07:07:00.000-08:00</published><updated>2010-02-07T13:28:20.061-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='build engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='thesis'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Left-Fold for Bash</title><content type='html'>I'd like to share a recent bash programming experience I've had.  It began while processing the reams of data generated in my M.Sc. research study.  I was producing long lists of frequency data in text files, and had the need to sum up all the lines in these tables.  This is of course a trivial problem in many languages, and I had a wide array of options available to me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I could write another ant task to do the summing (this required more work that I was willing to invest, as ant isn't really suited for computational tasks)&lt;/li&gt;&lt;li&gt;I could write a python script that took the contents of the specified file and returned the sum.  I didn't really like this approach because it involved yet another file in my build process, invoked from the &lt;exec&gt; ant task.  I always sort of thought that if you were forced to use &lt;exec&gt;, you were performing a task beyond the scope of your tool.&lt;/exec&gt;&lt;/exec&gt;&lt;/li&gt;&lt;li&gt;I could skip the generation of the table and go straight to the sum.  A few of the tables were created with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;XSLT&lt;/span&gt;, so this was a valid option.  However, my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;XSLT&lt;/span&gt; programming ability is very much trial-and-error based, so I thought this might take some time.  Also, some of the other tables, created with grep would not be affected.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Write it in shell.  I liked this idea.  I really liked the feel of being able to just pipe something to 'sum' and have the sum returned.  So this is what I chose.&lt;/li&gt;&lt;/ul&gt;My first version looked like this:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;sum=0&lt;br /&gt;while read line&lt;br /&gt;    do&lt;br /&gt;    sum=$(($sum + $line))&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;echo $sum&lt;br /&gt;exit 0&lt;/blockquote&gt;It did the trick quite well.  I had suggestions from office mates for the following alternatives:&lt;br /&gt;Using python (courtesy &lt;a href="http://www.arandonohue.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Aran&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Donohue&lt;/span&gt;&lt;/a&gt;):&lt;br /&gt;&lt;div id=":130" class="ii gt"&gt;&lt;div&gt;&lt;span class="il"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class="il"&gt;&lt;span style="font-family:courier new;"&gt;python&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; -c "import &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;sys&lt;/span&gt;;print sum(float(x) for x in sys.stdin.read().split())"&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;Using tr (courtesy &lt;a href="http://www.cs.toronto.edu/%7Ezkincaid/"&gt;Zak Kincaid&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;cat numbers | tr '\n' '+'|head --bytes='-1'|&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;bc&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;(Note that this version doesn't quite work.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;bc&lt;/span&gt; throws a syntax error.  not exactly sure why.)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Using my original design, I realized that if I abstracted out the operator, I could use this script to perform any 2-operand function I wished on the list, essentially creating a basic left fold:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;#!/bin/bash&lt;br /&gt;op=""&lt;br /&gt;if [ "$1" == "" ]; then&lt;br /&gt;op="+"&lt;br /&gt;else&lt;br /&gt;op=$1&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sum=0&lt;br /&gt; while read line&lt;br /&gt;     do&lt;br /&gt;     sum=$(($sum$op$line))&lt;br /&gt; done&lt;br /&gt;&lt;br /&gt;echo $sum&lt;br /&gt;exit 0&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;I've done a little bit of error checking, to see if the parameter supplied is blank, and if so replace it with + by default.&lt;br /&gt;&lt;br /&gt;I've only seen this work for '+' and '-'.  If I use '*', it breaks because it replaces the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;wildcard&lt;/span&gt;/multiplication character with the listing of the current directory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6305038567132753447?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6305038567132753447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6305038567132753447' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6305038567132753447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6305038567132753447'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2010/02/left-fold-for-bash.html' title='Left-Fold for Bash'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-141733182723324354</id><published>2009-11-03T09:46:00.000-08:00</published><updated>2009-11-03T09:53:06.690-08:00</updated><title type='text'>Unifying Visual theme</title><content type='html'>A discussion this morning over coffee has prompted me to again consider creating a personal web presence, more than just a facebook or twitter page.  A public, hosted site with data about my work and research.  Inevitably, whenever I begin to consider this, I always get hung up on the visual theme for said space.  In a perfect world, I would create a site in which the visuals closely match my personality, in a cool-hip sort of way, be cleanly unified across all the pages, and indeed could even integrate well into my local operating system's visuals (this doesn't serve any particular pupose, the idea of total uniformity just seems sort of cool to me).  Anyway, looking at hosting and &lt;a href="http://www.gnome-look.org"&gt;gnome-look.org&lt;/a&gt; for inspiration right now.  Probalby won't lead me anywhere :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-141733182723324354?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/141733182723324354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=141733182723324354' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/141733182723324354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/141733182723324354'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/11/unifying-visual-theme.html' title='Unifying Visual theme'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-3051370170356767670</id><published>2009-10-27T09:00:00.000-07:00</published><updated>2009-10-27T09:12:36.220-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Multi-User SVN on a Single Debian Account</title><content type='html'>Just finished setting up a multi-user subversion repository, based on the instructions found &lt;a href="http://jimmyg.org/blog/2007/subversion-over-svnssh-on-debian.html"&gt;here&lt;/a&gt;.  The catch here is that the SVN server is running on a single server-side user account, and the multi-user support is done by multiplexing on the incoming ssh rsa key.  Every key gets its own artificial user name, so we can track who has been doing what.  The process was fairly straight forward, just backup your .ssh directory in case you bork something, like I did:P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-3051370170356767670?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/3051370170356767670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=3051370170356767670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3051370170356767670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3051370170356767670'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/10/multi-user-svn-on-single-debian-account.html' title='Multi-User SVN on a Single Debian Account'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-3313767050372917770</id><published>2009-09-16T14:12:00.000-07:00</published><updated>2009-09-16T14:14:26.473-07:00</updated><title type='text'>Algonquin Park Map</title><content type='html'>After doing some looking around for an electronic map of the canoe routes in Algonquin Provincial Park, I was only able to come up with the following :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.cmu.edu/%7Ecrpalmer/algonquin/map.html"&gt;http://www.cs.cmu.edu/~crpalmer/algonquin/map.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's pretty old, and the site hosting it looks like it may be somewhat unreliable, so I duplicated the file and made it available here for posterity:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.toronto.edu/%7Ertulk/alg2-1.pdf"&gt;http://www.cs.toronto.edu/~rtulk/alg2-1.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-3313767050372917770?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/3313767050372917770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=3313767050372917770' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3313767050372917770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3313767050372917770'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/09/algonquin-park-map.html' title='Algonquin Park Map'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-3543876641415536292</id><published>2009-07-03T09:58:00.000-07:00</published><updated>2009-07-03T10:28:38.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sailing'/><title type='text'>In Praise of the TS&amp;CC</title><content type='html'>This past weekend, while enjoying a leisurely walk along the waterfront between High Park and Ontario Place, I came across the &lt;a href="http://www.tscc.net/tsccjoomla/"&gt;Toronto Sail &amp;amp; Canoe Club (TS&amp;amp;CC)&lt;/a&gt;.  I headed back there, by bike, last night, in hopes of getting some more information about the club.  Within minutes of arrival I was on the crew list, and had spoken to a few skippers who were looking for crew.  I ended up on a &lt;a href="http://www.beneteau235.com/"&gt;Beneteau First 235&lt;/a&gt;, which is a nice little racer.  After 45 minutes or so of reconfiguring the race course, we were off!  Just in time for a the storm front to get close enough to steal away all our wind!  The race was uneventful, but relaxing, and I got to meet some new people, so it was an overall positive experience.  I think I'll be going back next week for more of the same.&lt;br /&gt;&lt;br /&gt;Oh, did I also mention that a Crew membership at the TS&amp;amp;CC is &lt;span style="font-style: italic;"&gt;extremely&lt;/span&gt; affordable?  Well, it is!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-3543876641415536292?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/3543876641415536292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=3543876641415536292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3543876641415536292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3543876641415536292'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/07/in-praise-of-ts.html' title='In Praise of the TS&amp;CC'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6734068588552367747</id><published>2009-06-29T10:56:00.000-07:00</published><updated>2009-06-29T11:11:08.355-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mutation'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Creating Defects</title><content type='html'>I'm in the process of inserting defects into three pieces of software I've written - for the purpose of creating testing samples for the study.  This process is a lot more painful that I would have anticipated.  I expect it is due to being trained for so long at &lt;span style="font-style: italic;"&gt;removing &lt;/span&gt;defects, not deliberately creating them.  Every time I break something, I realize the cool test case that will fail because of it, and then I feel bad.  Also, trying to create non-obvious errors, or defects that are a little more human than those created by my java mutator, is challenging.  For example, consider a class constructor like the following:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;public MyAccount(int account, int initialBalance)&lt;br /&gt;{&lt;br /&gt;    m_accountNum=account;&lt;br /&gt;    m_balance=initialBalance;&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;The mutator would do something like this&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;public MyAccount(int account, int initialBalance)&lt;br /&gt;{&lt;br /&gt;         m_accountNum=account;&lt;br /&gt;     m_balance=++initialBalance;&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;following its set of one-line operator rules.  I think I a more 'human' error would be something like this:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;public MyAccount(int account, int initialBalance)&lt;br /&gt;{&lt;br /&gt;    m_accountNum=initialBalance;&lt;br /&gt;    m_balance=account;&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;or this:&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;public MyAccount(int account, int initialBalance)&lt;br /&gt;{&lt;br /&gt;    m_accountNum=account;&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;All still valid java programs, but definitely erroneous, and certainly slips that an overworked developer could make.  What sets them apart from some of the mutation bugs is that many of the mutation rules require &lt;span style="font-weight: bold;"&gt;more&lt;/span&gt; effort on the part of the developer, rather than less (ie. a ++ at the end of a variable manipulation command is more likely to be omitted than included by accident).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6734068588552367747?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6734068588552367747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6734068588552367747' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6734068588552367747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6734068588552367747'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/06/creating-defects.html' title='Creating Defects'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5205385060716747104</id><published>2009-06-19T10:56:00.000-07:00</published><updated>2009-06-19T12:55:13.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>Think Aloud and Coding Analysis</title><content type='html'>Chris pointed me at a paper by Mayrhauser and Vans "&lt;a href="http://www2.computer.org/portal/web/csdl/doi/10.1109/32.508315"&gt;Identification of Dynamic Comprehension Processes During Large Scale Maintenance&lt;/a&gt;" that seems fairly relevant, in that they are using methods that align with mine so far.  They've used a Think Aloud process and recorded participant actions while performing a maintenance change request.  The activity took approx. 2 hours per subject (11 subjects.  I think I can do better).  Video and audio recordings were transcribed and coded.  The authors posit that a) coding should be based on categories defined a priori (before the video/audio is recorded), and that b) Think Aloud does not work out of phase with the change action (thinking aloud after doing the task).  This concerns me as a) I don't have a set of codes yet (I could certainly come up with some rather quickly, but they would be without significant justification), and b) I kind of liked the idea of the post-task interview.&lt;br /&gt;These concerns aside, the data analysis in this paper is excellent.  The authors code all the transcripts, and derive a set of patterns that the participants take while performing the tasks.  These are formulated as finite state machines, in which each state represents a code.  This, to me, validates their choice of codes.  This may be a good model to follow for at least part of my analysis procedure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5205385060716747104?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5205385060716747104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5205385060716747104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5205385060716747104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5205385060716747104'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/06/think-aloud-and-coding-analysis.html' title='Think Aloud and Coding Analysis'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4291721870443270117</id><published>2009-06-17T15:25:00.000-07:00</published><updated>2009-06-17T15:38:09.411-07:00</updated><title type='text'>Nielsen's Heuristics for Software Testing</title><content type='html'>I had a quick conversation today with Dustin, of DGP and MSR fame, and he asked me if there was anything similar to Nielsen's heuristics for usability that might be used when looking for errors in code.  There wasn't anything that jumped to my mind, but that certainly doesn't mean that nothing in fact exists.  However, the first 10 hits for "software testing heuristics", "nielsen heuristics code", "nielsen heuristics software testing errors" didn't contain what I was looking for, either.  It makes me think that the imagined output from my research study could be a valid contribution to knowledge.  I think the list would probably contain things like:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;always try negative numbered parameters&lt;/li&gt;&lt;li&gt;always try null values&lt;/li&gt;&lt;li&gt;how well does the .equals() method work?&lt;/li&gt;&lt;li&gt;add-remove-add to/from the collection, is it the same semantically?&lt;/li&gt;&lt;li&gt;always check date-based roll-overs&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4291721870443270117?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4291721870443270117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4291721870443270117' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4291721870443270117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4291721870443270117'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/06/nielsens-heuristics-for-software.html' title='Nielsen&apos;s Heuristics for Software Testing'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8217562265034792168</id><published>2009-06-15T08:33:00.000-07:00</published><updated>2009-06-15T09:01:52.606-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Simple Web Services are Too Hard to Find</title><content type='html'>So I'm building some software to use as a System Under Test for my thesis experiment, and found several seminal examples in &lt;a href="http://books.google.ca/books?id=qVkgJYh47tEC&amp;amp;dq=software+testing+a+craftsman%27s+approach&amp;amp;printsec=frontcover&amp;amp;source=bl&amp;amp;ots=xvrpes1V-3&amp;amp;sig=r_3STFO0oV5QtqjfxT-B7uoc9QQ&amp;amp;hl=en&amp;amp;ei=-Vc2SsqLMoTWMMHX0JUK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1#PPA29,M1"&gt;Paul Jorgensen's "Software Testing"&lt;/a&gt;.  Since I had already implemented the Simple ATM problem (well, a variant of it, without any GUI), and the Triangle problem, I decided that the Currency Exchange problem might fit well in between these two, in terms of complexity and size of code.  Basically, the program takes in a value and source currency, and converts it to a destination currency of your choice (4 options in Jorgensen's text).  This seemed a bit outdated to me, as it relies on the programmer hard-coding the exchange rates by hand.  Boo-urns, I say!  So, I figured I'd use some benevolent, free web service to pull down live exchange rates and use them in my program.  This should be simple, I imagine, because a) this is the type of service presented in every tutorial on making web services, and b) it provides exactly the type of functionality for which web services are suited: some mysterious online entity that has a little glob of information that I want to use in my application.  Google searching for such a web service turned up a disappointing lack of results.  There are several online currency converters, of which I'm sure the reader is aware, but none of those are particularly machine friendly - I would have to hack up and throw away a bunch of HTML to get a single number out of the page.  I encountered &lt;span style="font-weight: bold;"&gt;one&lt;/span&gt; service that was designed to be machine readable, but it used the bloated WS* XML web service stack, requiring me to auto-generate hundreds of lines of code, all so that I can read a single number (this is not an option for me, because I don't want my subjects attempting to write tests for a bunch of machine created JAX-WS goop).  If that wasn't enough, I also had to apply for a Trial API Key which would allow me to access the single number I needed for a period of two weeks, after which I would need to purchase a commercial API license.  Grrrrrrr!  A subsequent search of "REST currency exchange web service" turned up bupkiss.  Why is this so hard?  There should be dozens of services like this.  Maybe I'm just not looking in the right place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8217562265034792168?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8217562265034792168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8217562265034792168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8217562265034792168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8217562265034792168'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/06/simple-web-services-are-too-hard-to.html' title='Simple Web Services are Too Hard to Find'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4659870722058120712</id><published>2009-06-04T08:28:00.000-07:00</published><updated>2009-06-04T08:33:12.397-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>Idea for a Meta-Study</title><content type='html'>Idea for a meta-study: lots of papers have been published in which a controlled experiment is performed to examine the potential benefits of TDD.  These are mostly all of the flavor: have control group implement some spec, using code-first-test-last, have experimental group implement same spec using TDD, measure time to complete and defect count of both groups.  It seems (at least in my experience), that there are two possible outcomes from this, either the results are inconclusive, or they tend slightly towards the author's own feelings on the subject, either for or against TDD.  I think an interesting, and probably easy to conduct, meta-study would be to pull down copies of all papers that are performing studies like these and see what the trend is, as well as analyzing things like geographic region of the authors or other relevant, although maybe not immediately obvious, correlations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4659870722058120712?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4659870722058120712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4659870722058120712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4659870722058120712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4659870722058120712'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/06/idea-for-meta-study.html' title='Idea for a Meta-Study'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-2547384122053264312</id><published>2009-06-03T08:23:00.000-07:00</published><updated>2009-06-03T10:42:40.524-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='thesis'/><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>Iteratvie Thesis Development</title><content type='html'>Yesterday I decided to try a new way of organizing my time.  In 'the real world', summer time always correlated with reduced productivity of a development team, in part due to developers taking vacation time, but also supervisors being absent and leaving the team with a lack of direction.  I have proactively given myself this direction by dividing my summer into 3 iterations, which coincide with the three remaining months of the season.  In each iteration, there are four phases, in which I will examine and refine the methodology, data acquisition, and analysis of this thesis I'm pursuing, and in the 4th phase I will write up my results.  I figure that by doing three iterations in this way, the pilot study this summer should give me a really good idea on how to run a successful study in the fall, as well as a head start on some of the write-up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-2547384122053264312?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/2547384122053264312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=2547384122053264312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2547384122053264312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2547384122053264312'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/06/iteratvie-thesis-development.html' title='Iteratvie Thesis Development'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-7595640822440785269</id><published>2009-06-03T07:57:00.001-07:00</published><updated>2009-06-03T09:14:07.092-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mutation'/><category scheme='http://www.blogger.com/atom/ns#' term='build engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>A User Study for Mutation-based Testing Analysis</title><content type='html'>I recently read some material by Andreas Zeller in which he discusses the merits of using mutation testing as a method of verifying the quality of a test suite for a piece of software.  These methods are meant to expose tests which perform an action, and assume that it was performed properly so long as an error is not thrown by the system under test - they do not verify that the action resulted in the desired program state.  Code mutation (either on source or directly on the bytecode), when combined with accurate code coverage data, can identifiy these deficient tests by mutating the code they cover and observing tests that do not fail.&lt;br /&gt;&lt;br /&gt;I believe that there is value in using this data, if it can be presented in the appropriate manner.  If a developer has to spend an hour to generate the mutation report and cross-reference it with code coverage, then the investment likely outweighs the benefit.  However, if I can arrive at my desk at 9am, and have in my inbox a build report, test report with coverage, and a mutation report for every branch, all of which are properly hyperlinked to each other and backed up on a central storage, then I would certainly use it.  The problem here seems to be that this degree of automation and integration is hard to set up, and often times delicate when in place.  It seems that some sort of standard platform for use by build engineers for integrating all of their reports, packaging operations, tests, etc, is called for. However, I have yet to see anything more sophisticated than Ant or Perl in widespread use by engineers.  Maybe I just have an unrepresentative sample, though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-7595640822440785269?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/7595640822440785269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=7595640822440785269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7595640822440785269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7595640822440785269'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/06/user-study-for-mutation-based-testing.html' title='A User Study for Mutation-based Testing Analysis'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6726262565006658637</id><published>2009-05-18T22:38:00.000-07:00</published><updated>2009-05-18T22:42:26.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FindBugs'/><category scheme='http://www.blogger.com/atom/ns#' term='ICSE 09'/><category scheme='http://www.blogger.com/atom/ns#' term='Static Analysis'/><title type='text'>Testing Heuristics and Static Analysis at ICSE 09</title><content type='html'>I had a very critical talk with two grad students from Queen's yesterday, whom I unfortunately can only identify as Jackie and Brahm.  They had a difficult time accepting the immediate usefulness/significance of the study I was proposing, and that's fine, as they came up with a few useful suggestions that I can leverage, primarily to keep a narrow focus and always be aware of the result I'm trying to generate.  Two interesting opinions they shared with me are below:&lt;br /&gt;&lt;br /&gt;Are the good testers simply those who are most familiar with the SUT (software under test)?  This seems entirely plausable (in my own work experience, I was a vastly better tester of sotware that I had written, or at least software written by someone on my team).  If so, then the correlation between programming experience and software testing would be much weaker if we are inventing the SUT for our subjects to test.  However, I believe to have some empirical evidence to the contrary, in the form of a man called Scott Tindal, who is one of the most skilled QA engineers I've ever had the pleasure of working with.  Scott was of the caliber that he could almost single-handedly test every product in the OpenText/Hummingbird line.  An interesting configuration of our study may be to experiment with developers testing their own code versus devlopers testing new code that they've never seen before.&lt;br /&gt;&lt;br /&gt;Will the heuristics extracted with this study be the same as those already in use by static analysis tools like FindBugs?&lt;br /&gt;It appears that determining a correlation between the techniques that experienced testers use and the heuristics employed by static analysis tools such as FindBugs could be an interesting topic.  If there is no correlation between these two, may it be possible to integrate these into SA suites for any significant improvement?  If there is a correlation, why haven't more testers adopted static analysis to aid in their efforts?  Is it a matter of usability of SA tools?  Is it that the formalism used to express the SA heuristics isn't understood by everyday testers, and so they aren't aware of what SA has to offer?  I plan to talk to &lt;a href="http://www.natidea.com/home/"&gt;Nathaniel Ayewah&lt;/a&gt;, University of Maryland, who is working on the FindBugs team, about this further.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6726262565006658637?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6726262565006658637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6726262565006658637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6726262565006658637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6726262565006658637'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/05/testing-heuristics-and-static-analysis.html' title='Testing Heuristics and Static Analysis at ICSE 09'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1577807538037530537</id><published>2009-05-18T20:58:00.000-07:00</published><updated>2009-05-18T21:08:14.522-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ICSE 09'/><title type='text'>ICSE 09 - Day Three</title><content type='html'>Andreas Zeller, professor at Saarland University in Germany, apart from being on of the nicest people I've met so far this week, also had some very positive feedback on my research idea.  He agreed with it's principle, and that research in this area would be valid.  One of his first questions after I finished presenting my idea was about incentive for participation.  I thought he was asking about how we would convince students and pros to give up their time to participate in our study, but this wasn't the case.  he recounted results found at Saarland when teaching students to test their code.  Traditional methods obviously didn't work effectively, so they switched tracks.  Student assignments were assigned with a spec and a suite of unit tests that the students could use to validate their work as they progressed.  Once nightly a second set of tests were run by the instructor, the source of which was kept secret, and the students were informed in the morning of the number of tests they passed and failed.  To grade the assignment, a third set of (secret) tests were run.  Students begin with a mark of 100%.  The first failing test reduces their mark to 80%.  The second, to 70%. The third to 60%.  The grading continues in a similarly harsh fashion.  The first assignment in the course is almost universally failed, as students drastically underestimate how thorough they need to be with their tests.  Subsequent assignments are much better, and the students focus strongly on testing, and indeed collaborate by sharing test cases and testing each others assignments to eliminate as many errors as possible before the submission date.  Once the students have the proper motivation to test, they eagerly consume any instruction in effective testing techniques.  Andreas found that simple instruction in JUnit and maybe TDD was all that was required, and the rest the students figured out for themselves.  This type of self-directed learning is encouraging, but the whole situation makes me think that these students may be working harder, but not smarter, to test their software.  It may be possible that by providing instruction not only in the simple operation of an XUnit framework, but also in things like effective test case selection, they may be able to reach similar test coverage or defect discovery rates, while expending less frantic effort.&lt;br /&gt;Thought: drop the first assignment from the course's final mark, as it is not used for evaluation as much as it is a learning experience (of course, don't tell the students this, otherwise the important motivational lesson will be lost).&lt;br /&gt;In addition to this, Andreas, just as other folks I've spoken to so far, emphasized the need to keep my study narrowly focused on a single issue, as well as controlling the situation in a way that enables precise measurements to be made both before and after implementing the curriculum changes we hope to elicit from the study, to accurately determine the improvements (if any exist).  I am beginning to see a loose correlation between a researcher's viewpoint regarding empiricism in SE research (positivist on the right and constructivist on the left) and their amount of emphasis on narrowness of focus.  Often times, those people who advocate exploratory qualitative studies also recommend wider bands of observation while conducting these studies.  This is likely an over generalization, and I apologize in advance to anyone who may disagree with this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1577807538037530537?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1577807538037530537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1577807538037530537' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1577807538037530537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1577807538037530537'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/05/icse-09-day-three.html' title='ICSE 09 - Day Three'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-7904853599405389197</id><published>2009-05-18T20:14:00.000-07:00</published><updated>2009-05-18T21:04:24.412-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AT and T'/><category scheme='http://www.blogger.com/atom/ns#' term='ICSE'/><category scheme='http://www.blogger.com/atom/ns#' term='MSR'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Research'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>ICSE 09 - Day Two</title><content type='html'>Day Three of ICSE 09 was another great success!  It began with a rousing keynote by Tom Ball of Microsoft Research fame.  He described the early beginnings of version control and the emergence of mining techniques for these version systems, and continued the narrative through to the latest version of visual studio and the tool Microsoft calls CRANE, which suggests to developers area of the code which should be examined given that they are changing some other area.  Pretty cool.  I got to talk to him one-on-one about it over lunch.&lt;br /&gt;&lt;br /&gt;On the previously blogged &lt;a href="http://rorytulk.blogspot.com/2009/05/farewell-to-borkenstocks.html"&gt;march through stanley park&lt;/a&gt;, I had a talk with Tom Ostrand from AT&amp;amp;T Labs in New Jersey.  One thing I wanted to talk about (besides pitching my research idea) was leveraging the version history and reports generated from a test suite to predict bugs in target code using MSR techniques to augment the existing tools, such as mining deltas and bug trackers.  This topic came up in the morning's MSR session, but aparently Tom missed it (making me look much smarter than can be measured in reality).  He seemed interested in the possibility, but of course there are barriers to getting it going.  Primarily, assuming that the dev team for the software we're analyzing is writing tests and putting them into the vcs, the error and coverage reports almost certainly aren't, making it difficult to to versioned history analysis over them.  I thought that maybe, given the source code of the target software and the test code (both of which at some version), the MSR tool could build the code and execute the tests to create the needed reports.  This will likely be extremely difficult to get going in the field, however, and make MSR mining, which is already an extremely expensive, long running process, even slower.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-7904853599405389197?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/7904853599405389197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=7904853599405389197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7904853599405389197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7904853599405389197'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/05/icse-09-day-two.html' title='ICSE 09 - Day Two'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6829559413629301716</id><published>2009-05-17T22:40:00.000-07:00</published><updated>2009-05-17T22:51:50.368-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vancouver'/><category scheme='http://www.blogger.com/atom/ns#' term='ICSE'/><title type='text'>Farewell to the Borkenstocks</title><content type='html'>The time has finally come to retire the Canadian Tire brand cork bottomed sandals, so lovingly referred to as the 'Borkenstocks'.  After a season in the closet and a plane ride to Vancouver, the sandals got their first taste of summer today, as they accompanied me on a walk through Stanley Park.  The results of this were as follows:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41VC8jJ54is/ShD2Mdig-aI/AAAAAAAAABc/y7B_bYu_acQ/s1600-h/IMG_0278.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_41VC8jJ54is/ShD2Mdig-aI/AAAAAAAAABc/y7B_bYu_acQ/s320/IMG_0278.JPG" alt="" id="BLOGGER_PHOTO_ID_5337036252382296482" border="0" /&gt;&lt;/a&gt; blisters and uncomfortableness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6829559413629301716?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6829559413629301716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6829559413629301716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6829559413629301716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6829559413629301716'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/05/farewell-to-borkenstocks.html' title='Farewell to the Borkenstocks'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_41VC8jJ54is/ShD2Mdig-aI/AAAAAAAAABc/y7B_bYu_acQ/s72-c/IMG_0278.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5787359313952871792</id><published>2009-05-17T16:21:00.000-07:00</published><updated>2009-05-17T16:27:54.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ICSE'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>Feedback on my Research Proposal</title><content type='html'>Over the last 24 hours I've had the chance to talk to a few individuals about my research idea.  It seems to go as follows:  I give my 30 second pitch, the marks stares at me blankly.  Then, I elaborate.  The mark gets it.  They tell me first a problem they see, and then what they'd like to see out of the results.  In a couple of cases, the mark got particularly excited about the outcome.  I've summarized below.&lt;br /&gt;&lt;br /&gt;Chris Bird&lt;br /&gt;Chris has a strong background in empirical software engineering, with particular emphasis on qualitative exploratory studies.  As such, the quantitative analysis aspects of my pitch fell on deaf ears, but he was extremely interested in the in-lab observation sessions I was proposing.  He felt that 5 or 6 actionable recommendations that might come out of observing professionals would be invaluable.  He suggested that I find an older Microsoft Research study in which they trained new hires by having them monitor a screen shared by a senior developer for some amount of time (probably a few days), and had the new hire ask questions with the senior at a later date, by reviewing the video logs.  I like this idea because it allows us to elicit the information from the developer directly, instead of trying to infer it ourselves, but since we're not bothering them during the initial testing session, we wouldn't be affecting their performance.  This isn't without problems, though.  Primarily, there is the risk that the subject isn't always sure why they do the things they do, and so are likely to invent reasons, or invent foresight where none necessarily exists.  Interesting idea, though.  Also, should we interview students in the same way?  On one hand, they students likely don't have any special insights that we can leverage (assuming they are less effective at testing than pros).  On the other hand, it may illuminate any areas of misconception or misunderstanding which we could address in future curriculum changes.&lt;br /&gt;&lt;br /&gt;Jim Cordy&lt;br /&gt;Jim is a professor at Queens, and was my instructor in my 4th year compilers course.  After he heard my pitch, he had a warning about an affect he had seen in his industrial work, and it comes from a generational difference in the training of developers.  Developers who were trained more than 15 or 20 years ago had a delay between changing the source code and the results of program execution on the order of hours; new developers are used to delays on the order of minutes.  Also, the current state of the art in debugging utilizes interactive debuggers, which were either unavailable or unreliable in earlier days.  This has lead to 'old-school' programmers to a) rely heavily on source code inspection and b) insert enormous amounts of instrumentation (debugging statements) when running the program becomes required.  In comparison, new generation developers often use smaller amounts of instrumentation, relying on quick turn around times to find the cause of errors.  In Jim's experience, the old school programmers were orders of magnitude more effective (in terms of bugs found or solved per hour) than younger programmers.  If this is in fact the case, it should be an effect we can see if we recruit subjects trained during this era of computer science research.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5787359313952871792?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5787359313952871792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5787359313952871792' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5787359313952871792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5787359313952871792'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/05/feedback-on-my-research-proposal.html' title='Feedback on my Research Proposal'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-2305268039763980481</id><published>2009-05-16T16:39:00.001-07:00</published><updated>2009-05-16T17:26:33.434-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ICSE'/><title type='text'>ICSE 09 - Day One</title><content type='html'>We're wrapping up the first day of talks here at ICSE 2009. I've talked my way into the Mining Software Repositories (MSR) workshop. Here's a quick breakdown of some noteworthy points:&lt;br /&gt;&lt;br /&gt;Keynote: Dr. Michael McAllister, Director of Academic Research Centers for SAP Business Objects&lt;br /&gt;An hour and a half long talk in which he sells BI to the masses. Spoke a lot about integrating data silos, and providing an integrated, unified view of the data to business level decision makers. Also interesting anicdotes on how BI helped cure SARS. Forgot what OLAP stands for. Kind of concerning. This talk made me (after spending 2+ years working for a BI company) want a running example of what BI is and how it is used in the context of an expanding organization - from the point before any computational logistics assistance is required, and progressing forward to a Wallmart sized operation. Most examples I've seen start with a huge complex organization, complete with established silos, and then installs things like supply chain management, repository abstraction, customer relations management, document management, etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mining GIT Repositories - presented the difficulties in mining data out of GIT (or DVCS systems in general) as opposed to traditional centralized systems like svn.  Noteworthy items include high degree of branching and the lack of a 'mainline' of development.&lt;br /&gt;&lt;br /&gt;Universal VCS - by looking for identical files in the repos of different projects, a single unified version control view is established for nearly all available software.  Developed by creating a spider program which crawled the repos of numerous projects, downloading metadata and inferring links where appropriate.&lt;br /&gt;&lt;br /&gt;Map Reduce - blah blah blah use idle PCs for quick pluggable clustering to chuck away on map reduce problems.  Look @ Google MapReduce and Hardoop.&lt;br /&gt;&lt;br /&gt;Alitheei Core - A software engineering research platform.  Plugin framework for performing operations on heterogeneous repositories.  Can define a new Metric by implementing an interface,  and then evaluate the metric against all repositories in the framework.  Look @ SQO OSS.&lt;br /&gt;&lt;br /&gt;Many of these previous talks created tools for mining repositories, but with no greater purpose than that.  When asked about this ('mining for the sake of mining'), none of the authors seemed to have a problem.  The conclusion of the discussion was that this lack of purpose was a problem, and that the professional community should be surveyed to find out what needs they have for mining repos.&lt;br /&gt;&lt;br /&gt;Research extensions/ideas:&lt;br /&gt;The third MSR session today focused heavily on defect prediction. After showing off 3 or 4 methods of mining vcs systems to predict buggy code that improved prediction probability by 4% or 5%, the discussion boiled down to this, "What do managers/developers want in these reports to help them do their jobs?" Obviously, the room full of academics didn't have a definitive answer. One gentleman asked the question I had written down, which was "has anyone used the history and coverage of a software's test suite in combination with data from the VCS as a defect predictor (in theory, heavily tested areas are less likely to contain bugs)?"  I found this particularly interesting.  Also, I began to wonder, if we had one of these defect prediction reports, does it improve a developer's ability to find bugs, and if so, to what extent?  Would it be measurable in the same way as I intend to measure testing ability with students and professionals?&lt;br /&gt;&lt;br /&gt;Stay tuned for more info (and pictures of beautiful vancouver)!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-2305268039763980481?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/2305268039763980481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=2305268039763980481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2305268039763980481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2305268039763980481'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/05/icse-09-day-one.html' title='ICSE 09 - Day One'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-7834043867334489639</id><published>2009-04-20T12:28:00.000-07:00</published><updated>2009-04-20T12:50:14.357-07:00</updated><title type='text'>AeroPress and Number Theory</title><content type='html'>A warning to all who may use the coffee grinder in the SE lounge to make fine-grained coffee for use in an AeroPress:  shaking the coffee grinder &lt;span style="font-weight: bold;"&gt;will&lt;/span&gt; blow the circuit breaker!  It seems some of us don't realize that by applying rotating the axis of a spinning body, orthogonal to the plane of rotation, we are in fact applying a force against the angular momentum of said body.  If this rotating device is powered by an electric motor, this causes the motor to draw more current to maintain its current speed.  In short, don't shake the coffee grinder.&lt;br /&gt;&lt;br /&gt;Also, I picked up the Annotated Turing again over the weekend, and read the first two chapters on number theory.  I found this to be absolutely &lt;span style="font-style: italic;"&gt;fascinating&lt;/span&gt;!  Now, if you're already well versed in number theory, then these overviews may be redundant for you, but I thoroughly enjoyed it.  Looking forward to what else is in this book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-7834043867334489639?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/7834043867334489639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=7834043867334489639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7834043867334489639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7834043867334489639'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/04/aeropress-and-number-theory.html' title='AeroPress and Number Theory'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1566261722008456151</id><published>2009-04-19T09:54:00.000-07:00</published><updated>2009-04-19T10:15:51.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='todo'/><category scheme='http://www.blogger.com/atom/ns#' term='hobby'/><title type='text'>Things on my Todo list</title><content type='html'>My current list of things I want/need to do:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Reading:&lt;/span&gt;&lt;br /&gt;Petzold, "The Annotated Turing"&lt;br /&gt;Homer, "The Odyssey"&lt;br /&gt;Huth and Ryan, "Logic in Computer Science"&lt;br /&gt;Tennant, "Specifying Software"&lt;br /&gt;"Software Architecture, A Primer"&lt;br /&gt;Gorton, "Essential Software Architecture"&lt;br /&gt;Dickens, "Oliver Twist"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Writing:&lt;/span&gt;&lt;br /&gt;2125 end of term summary paper&lt;br /&gt;2130 empirical study paper&lt;br /&gt;conceptual model of REST process &amp;amp; motivation&lt;br /&gt;ERB paperwork&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Coding:&lt;/span&gt;&lt;br /&gt;Instrumented JUnit and PyUnit&lt;br /&gt;Diplomacy relationship analyzer&lt;br /&gt;Qualitative Coding Application&lt;br /&gt;iPhone app for navigation and aviation&lt;br /&gt;Custom Braid mod - or just re-implement the engine with Java 2D and OpenGL&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Misc:&lt;/span&gt;&lt;br /&gt;Taxes&lt;br /&gt;Health Insurance Claim&lt;br /&gt;Personal/professional website, portfolio, and cards.  Would like these to have a unifying visual theme.&lt;br /&gt;Bribe people on craigslist for sold out Johathan Coulton tickets&lt;br /&gt;Plan Carmen's bachelor party, 3 camping trips, and a houseboat rental scheme.&lt;br /&gt;Paperwork for windsurfing class.&lt;br /&gt;Compare &amp;amp; choose sailing clubs for the summer&lt;br /&gt;Finish Bluenose&lt;br /&gt;&lt;br /&gt;Obviously, this list is waayyy to long to be reasonable.  I think you can see where the priorities should go, however (finishing ERB paperwork &gt; reading Oliver Twist :P ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1566261722008456151?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1566261722008456151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1566261722008456151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1566261722008456151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1566261722008456151'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/04/things-on-my-todo-list.html' title='Things on my Todo list'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4576014496216134797</id><published>2009-03-31T04:55:00.001-07:00</published><updated>2009-03-31T04:58:17.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='summer of code'/><category scheme='http://www.blogger.com/atom/ns#' term='GSoC'/><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>REST in Django</title><content type='html'>So I'm now officially a Google Summer of Code mentor for the Django open source group! w00t!  Now all I have to do is pull off all those cool ideas I came up with earlier, as well as have a group of open source developers all agree that they are as cool as I think they are (which could be easier said than done).&lt;br /&gt;&lt;br /&gt;While brushing teeth this morning, was thinking "I wonder what sort of empirical study I could pull out of this situation?  What sort of research is there to be done in the field of REST?  What can I learn, for academic purposes, not my own, from this experience?"&lt;br /&gt;&lt;br /&gt;Ideas?  I'm going to mull it over at the gym.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4576014496216134797?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4576014496216134797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4576014496216134797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4576014496216134797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4576014496216134797'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/rest-in-django.html' title='REST in Django'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-3176190892345788155</id><published>2009-03-24T07:34:00.001-07:00</published><updated>2009-03-24T07:35:13.031-07:00</updated><title type='text'>Google and Space and Time</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Has Google finally solved that whole space-time-bendy problem?  Observe:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_41VC8jJ54is/ScjvhzbNV8I/AAAAAAAAAA4/QqEFzTxDTPk/s1600-h/google-space-time.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 210px;" src="http://3.bp.blogspot.com/_41VC8jJ54is/ScjvhzbNV8I/AAAAAAAAAA4/QqEFzTxDTPk/s320/google-space-time.gif" alt="" id="BLOGGER_PHOTO_ID_5316762724129920962" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-3176190892345788155?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/3176190892345788155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=3176190892345788155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3176190892345788155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3176190892345788155'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/google-and-space-and-time.html' title='Google and Space and Time'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_41VC8jJ54is/ScjvhzbNV8I/AAAAAAAAAA4/QqEFzTxDTPk/s72-c/google-space-time.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1285850844022074639</id><published>2009-03-22T22:21:00.000-07:00</published><updated>2009-03-31T15:34:33.908-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><title type='text'>Reading Last Week</title><content type='html'>Seaman: &lt;a href="http://www.cs.toronto.edu/%7Esme/CSC2130/readings/ch2-Seaman-proof.pdf"&gt;Qualitative Methods&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Description of ways in which qualitative methods can be used in conjunction with a positivist stance.  Tools include observational studies and interviews.&lt;/li&gt;&lt;li&gt;Interesting tradeoff: amount of data collected in an interview vs. amount of interviewee's time used vs. amount of direction in interview.  Often, the importance/implication of the data collected isn't known for a long time after the interview.&lt;/li&gt;&lt;li&gt;When conducting an interview, stress that it is not an evaluation.  There are no 'right' or 'wrong' answers.&lt;/li&gt;&lt;/ul&gt;Cohen: &lt;a href="http://www3.interscience.wiley.com/journal/119335212/abstract"&gt;Statistical Power Analysis&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Examines the importance of analyzing and reporting the power of a statistical relation in empirical research.&lt;/li&gt;&lt;li&gt;Author proposes that a sound target power be 0.80, as it produces feasible sample sizes for given values of alpha and ES.&lt;/li&gt;&lt;li&gt;Not a very understandable piece of literature, at least from my perspective.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Rosenthan and MiMatteo: &lt;a href="http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.psych.52.1.59"&gt;Meta-Analysis: Recent Developments in Quantitative Methods for Literature Reviews&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A good introduction to meta-analysis (that is, analyzing the results of many studies/experiments to determine h0, instead of directly testing subjects to prove h0).&lt;/li&gt;&lt;li&gt;Interesting points about making sure the studies in your meta-analysis are independent (if meta-analyzing multiple studies from the same research group, subjects and or data may be reused, and so the results may be overlapping).&lt;/li&gt;&lt;li&gt;Also interesting discussion of inherent bias in meta-analysis, arising in the form in which the experimentalists choose to include/exclude studies from their sample space.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Card: &lt;a href="http://en.wikipedia.org/wiki/Ender%27s_Game"&gt;Ender's Game&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Enjoyable novel about a young boy who is called upon to train as a military commander to protect the earth from the threat of alien invasion.&lt;/li&gt;&lt;li&gt;Good character development, although the author lays on the bloodlust and homo-eroticism a bit thick.&lt;/li&gt;&lt;li&gt;As a consequence, the sci-fi aspects of the story seemed secondary to the character plot, even tacked on in some places.&lt;/li&gt;&lt;li&gt;Generally, I liked it, but probably wouldn't invest the time to read the 5 or 6 sequels&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1285850844022074639?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1285850844022074639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1285850844022074639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1285850844022074639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1285850844022074639'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/reading-last-week_22.html' title='Reading Last Week'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1780099006365638116</id><published>2009-03-22T08:39:00.000-07:00</published><updated>2009-03-24T15:56:22.824-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conceptual Modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title type='text'>Modeling Topic</title><content type='html'>After a couple months of soul searching, the students enrolled in John Mylopoulos' Conceptual Modeling course are narrowing down ideas on what to model.  The requirements of the project (to 'model something') left it fairly open, but perhaps too open to be immediately tractable.  However, Michalis, Alicia, and I are closing the gap.  I'm leaning toward modeling certain aspects of the REST web service framework I've been working on for the last little while in CSC 2125.&lt;br /&gt;&lt;br /&gt;Obviously, system descriptions and class diagrams are uninteresting, as John pointed out earlier in the term, but modeling the &lt;span style="font-style: italic;"&gt;requirements&lt;/span&gt; of what such a system should do are not.  I'm looking into Tropos, but not really sure if it applies.  However, we can probably do a goal model illustrating the motivation and principles of REST, contrasted with those of ws*.  Also, a use case diagram describing the interface to a general ROA service could be created.  Finally, we could model certain pieces of important logic, such as a delayed get, using a description logic syntax.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1780099006365638116?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1780099006365638116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1780099006365638116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1780099006365638116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1780099006365638116'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/modeling-topic.html' title='Modeling Topic'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-2746356836637644400</id><published>2009-03-22T07:25:00.000-07:00</published><updated>2009-03-22T20:42:35.608-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='research'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>Reading Last Week</title><content type='html'>Sim et. al: &lt;a href="http://portal.acm.org/citation.cfm?id=776826"&gt;Using            Benchmarking to Advance Research: A Challenge to Software Engineering&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Argues the merits of creating benchmarks in software engineering as an exercise to strengthen the community and promote advancement, using the reverse engineering community as an example.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Lau: &lt;a href="http://www.emeraldinsight.com/Insight/ViewContentServlet?Filename=Published/EmeraldFullTextArticle/Pdf/1610120202.pdf"&gt;Towards            a framework for action research in information systems studies&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Proposes a framework with which action research efforts can be categorized and evaluated.&lt;/li&gt;&lt;li&gt;Describes Action Research as an iterative process, in which a researcher introduces a small change, observes its effect, and uses it as input to the next small change.&lt;/li&gt;&lt;li&gt;Reminded me of Agile.  I wonder if there are any other lessons from Agile that we can apply to Action Research?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Taipale and Smolander: &lt;a href="http://portal.acm.org/citation.cfm?id=1159733.1159773"&gt;Improving Software Testing by Observing Practice&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Case study conducted to shake out some ways of improving software testing, where it is deemed to be lacking.  Methods used include subject interviews and grounded theory.&lt;/li&gt;&lt;li&gt;Authors found that testing practices were most strongly correlated to business processes.&lt;/li&gt;&lt;li&gt;Thought this could lend some insight into how to observe testers at work (ie. as they write tests).  No such luck, though.  All recommendations for improving testing had to do with business process alterations/improvements, not hands on testing stuff.&lt;br /&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Also, while glancing at my bookshelf, I came across a couple of old undergrad texts that I would like to glance through. By looking at the spines, I don't think I've ever opened them:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.bham.ac.uk/research/projects/lics/"&gt;Logic in Computer Science&lt;/a&gt; by Huth and Ryan. This was the text for my computational logic course in 3rd year. The course notes and instructor were good enough without having to read this, but my propositional logic has become so rusty, I think I need this as a refresher.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Specifying-Software-R-D-Tennent/dp/0521004012"&gt;Specifying Software&lt;/a&gt; by Tennant.  Text for a formal methods course.  Turing machines, model checking &amp;amp; verification, etc.&lt;br /&gt;&lt;br /&gt;Also, my Amazon shipment arrived a couple days ago, bringing with it a copy of &lt;a href="http://www.amazon.com/Annotated-Turing-Through-Historic-Computability/dp/0470229055/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1237736172&amp;amp;sr=1-1"&gt;The Annotated Turing&lt;/a&gt;, by Charles Petzold, and O'Reily's &lt;a href="http://www.amazon.com/Programming-Erlang-Software-Concurrent-World/dp/193435600X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1237736201&amp;amp;sr=1-1"&gt;Programming Erlang&lt;/a&gt; (this one is for Aran, but when we're both done with our purchases, we'll likely swap).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-2746356836637644400?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/2746356836637644400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=2746356836637644400' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2746356836637644400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2746356836637644400'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/reading-last-week.html' title='Reading Last Week'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5217413400555165546</id><published>2009-03-19T07:13:00.000-07:00</published><updated>2009-03-19T09:23:01.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='research'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Testing Tools</title><content type='html'>&lt;span style="font-weight: bold;"&gt;UTest&lt;/span&gt;&lt;br /&gt;Implements a reverse test oracle (submit tests to black box piece of code).  Unsure of level of functionality.  Also has an eclipse plugin.  Mentions sandboxing of code being run.  Candidate for virtualization efforts I've been looking at.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WebCat&lt;/span&gt;&lt;br /&gt;An online grading system developed at Virginia Tech, in which students submit assignments and have the instructor's test suite run against it. Use of this system was found to encourage test-first development practices among students, as well as early assignment submission (thanks to a hint system).  Impossible to install, however, unless you are Stephen Edwards, and even then only on alternating weeks.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Marmoset&lt;/span&gt;&lt;br /&gt;System for snapshot collection and automated testing.  Using Marmoset, researchers can easily gather detailed information about students development patterns, as an Eclipse plugin checks in all code changes to a central version control repository, which can be mined.  Also, Marmoset provides automatic test  feedback to students, which they can use during development of an assignment, the goal of which is to improve their experience while learning to program.  It is unclear whether or not these tests are also used for [semi]automatic grading.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JUnit&lt;/span&gt;&lt;br /&gt;Although I haven't found any evidence of it yet, I'm pretty sure some combination of junit and the java remote debugger can be used to create a quick and cheap reverse test oracle.  More digging required.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5217413400555165546?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5217413400555165546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5217413400555165546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5217413400555165546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5217413400555165546'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/testing-tools.html' title='Testing Tools'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8861297715690989740</id><published>2009-03-17T11:19:00.000-07:00</published><updated>2009-03-17T14:05:53.306-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2125'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='URL Mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><title type='text'>ORM-REST Code Sprint - Day 2</title><content type='html'>5:00 pm, day two of the code sprint is almost wrapped up.  Not as much amazing progress today as I would have liked (I was minus one team member for some reason).  That aside, here's what we've got:&lt;br /&gt;&lt;br /&gt;Mohammad blocked out and implemented the pseudocode for the URL reverser described in our blog here.  I took a further look at it, and filled in the magic that inverts the &lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;django url list and gives us a url from a view name and primary key value.  Yay!  Plugged it into the xml serializer, and voilla!  Rest-like xml representation, with hyperlinks!  The only thing missing from this bit is the 'http://hostname:port' part.  From past experience, I've found this to be trickier than you might think (gets hairy if you've got one web server feeding into another, or a proxy/load balancer in the way).  I think we'll try just using relative URIs for now.&lt;br /&gt;&lt;br /&gt;After a couple more feature points are implemented, this thing needs a &lt;span style="font-weight: bold;"&gt;huge&lt;/span&gt; refactoring pass to clean it up and encapsulate it.  Also, it uses some classes from the Django Rest Interface, but this library has some pathological faults that I want to not include in the tool.  Yay for open licensing.&lt;br /&gt;&lt;br /&gt;Also, discussions with Aran produced some new feature proposals.  Lots of useful, tiny, easy-to-implement things that will improve the overall RESTability of the library.  Further yay!&lt;br /&gt;&lt;br /&gt;Automatic URL localization&lt;br /&gt;&lt;br /&gt;Automatic anything localization&lt;br /&gt;&lt;br /&gt;Model introspection and url pattern creation&lt;br /&gt;&lt;br /&gt;Computed resources instead of data resources - make http interface automatic&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8861297715690989740?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8861297715690989740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8861297715690989740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8861297715690989740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8861297715690989740'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/orm-rest-code-sprint-day-2.html' title='ORM-REST Code Sprint - Day 2'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6088339604487746461</id><published>2009-03-16T13:46:00.000-07:00</published><updated>2009-03-16T14:04:25.689-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2125'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><title type='text'>ORM-REST Code Sprint - Day 1</title><content type='html'>At quarter to 5:00, the first day of the ORM REST code sprint is winding down.  Mo' and I hacked from 2:00, and this is what we've got to show:&lt;br /&gt;&lt;br /&gt;Rory finished &lt;span style="font-weight: bold;"&gt;one direction&lt;/span&gt; of proper xml serialization of Django models.  That is, given a [list of] model instance[s], we get either a nice xml document (unlike the object name="" pk="" garbage we had before), or a concise list of objects with names and  &lt;span style="font-weight: bold;"&gt;placeholder URIs&lt;/span&gt;, which will be changed to live urls when Mo' gets his piece working.&lt;br /&gt;&lt;br /&gt;Mohammad synchronized with the svn, set up a django development environment, and familiarized himself with the code I had written.  Following this, he began work on the reverse URL mapper.  Given a model classname and a primary key value, he's pulling a live instance from the django ORM, and using it to query the Django URL dispatcher.  This gives us the regular expression which will match URLs to access the specified object.  Now he's got to turn the whole thing on its head!  Good luck Mo! You can do it!&lt;br /&gt;&lt;br /&gt;So, if you're keeping score, we are 1/2 + 1/2 = 1 feature point finished, out of 4.  Might just make it by end of term :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6088339604487746461?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6088339604487746461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6088339604487746461' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6088339604487746461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6088339604487746461'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/orm-rest-code-sprint-day-1.html' title='ORM-REST Code Sprint - Day 1'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4237084056444839149</id><published>2009-03-16T10:15:00.000-07:00</published><updated>2009-03-16T11:03:18.137-07:00</updated><title type='text'>CSC2125 Live</title><content type='html'>My first live-ish blog.  Hope it turns out well.&lt;br /&gt;&lt;br /&gt;Class in the GSU pub&lt;br /&gt;&lt;br /&gt;This class we did a quick series of elevator pitches by each group, as a way to practice their presentation skills.  The first few groups were pretty good.  Subsequent groups had to take two or three tries at the pitch.&lt;br /&gt;&lt;br /&gt;Mohammad and I both had to present.  I got to stand on a chair because I'm too short and Greg likes to pick on me:)&lt;br /&gt;&lt;br /&gt;The bar will not make Irish coffees.&lt;br /&gt;&lt;br /&gt;The last week of classes is in three weeks.  The demo day is supposed to be the monday after that, but that is easter.  This demo day will be moved further into the future, either some other time that week, or the following monday.&lt;br /&gt;&lt;br /&gt;Greg's token plot twist: do another lap of elevator pitches, but this time for thesis work instead of 2125 project.  Grad students have to explain their topic, undergrads need to come up with a thesis idea on the spot.  2 minutes prep time.&lt;br /&gt;&lt;br /&gt;My topic: Studying the effects of integrating unit testing into standard CS undergrad programs.  Questions: can be determine a measure for unit test effectiveness, can we track testing improvement over course of career, and is RTO useful?&lt;br /&gt;&lt;br /&gt;I got cut off after my 20 seconds :(  Only had like 3 words left.&lt;br /&gt;&lt;br /&gt;Everyone's job outside of class is to come up with a thesis topic for nick.  The winner gets ice cream.&lt;br /&gt;&lt;br /&gt;I'm willing to bet we're going to go around again to try to pear things down.  I don't know how to modify my speech, though.&lt;br /&gt;&lt;br /&gt;Yup.  This time I was too short.&lt;br /&gt;&lt;br /&gt;Now we're talking about consulting fees.  Greg charges $150/hr plus expenses.  Clearly, the undergrads have no idea how much to charge.  They've never seen the Entrepeneurship 101 talk about this.  You should discount a yearly salary for an employee doing the same job you're shipping out, and normalize it over the length of the project.&lt;br /&gt;&lt;br /&gt;If you get some consulting work on the side, U of T Legal Services can look over any contract you may have.  It's free, but not speedy (couple of weeks). See Jason Betcham.&lt;br /&gt;&lt;br /&gt;Combined degree CS + Law = name your price.  Too bad law is dreadfully dull.&lt;br /&gt;&lt;br /&gt;Next round of interrogation: what special skills do you have that cannot be easily picked up by other CS grads?  I don't think I have one.  Maybe experience in ECM?&lt;br /&gt;Speaking another language is a big one!&lt;br /&gt;Also, having a well connected professional network is important.&lt;br /&gt;&lt;br /&gt;Last question: if you don't have something special, what are you doing to fix that?&lt;br /&gt;&lt;br /&gt;Go get Garth Gibson's PHD thesis: how do raids work?  Really good communication.&lt;br /&gt;&lt;br /&gt;Pay attention to email for info on last class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4237084056444839149?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4237084056444839149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4237084056444839149' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4237084056444839149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4237084056444839149'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/csc2125-live.html' title='CSC2125 Live'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-3018025732387508938</id><published>2009-03-13T09:20:00.000-07:00</published><updated>2009-03-15T09:07:05.568-07:00</updated><title type='text'>Zak is the worst person!  The worst!</title><content type='html'>Muller and Pfahl: &lt;a href="http://www.cs.toronto.edu/%7Esme/CSC2130/readings/ch5-muller-proof.pdf"&gt;Simulation            Methods&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chapter describing the way in which simulation can be used to project the outcome of a software project.&lt;/li&gt;&lt;li&gt;Most readers found this method to be too clunky, or simply inappropriate for software development estimation.  The counter example of embedded or safety critical systems seemed to sway a few minds, however.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Interesting discussion about whether this actually qualifies as an empirical method.  Also, everyone seemed to agree that what the Hadley Center is doing is valid science, even though it is simulation.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Atkins, et al:&lt;a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1019478"&gt; &lt;/a&gt;&lt;a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1019478"&gt;Using            version control data to evaluate the impact of software tools&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Paper evaluating possibly the worst version control system ever!  At a more meta level, it was an example of how you can run an empirical study who's sole input is data mined from a past project (similar to what Samira did for her master's).&lt;/li&gt;&lt;li&gt;Nick mentioned that, despite its archaic premise, a versioned editor like this one would have been helpful at EA.&lt;/li&gt;&lt;li&gt;Discussion ensued as to whether this type of validation was actually required for this tool.  It seems almost anything would be better than the existing 'version control'.  In fact, there are some in the field who feel that expert intuition is ultimately more useful than empirical experimentation.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Sharp &amp;amp; Robinson: &lt;a href="http://www.springerlink.com/content/gwxk14423h734nl7/?p=022fe1fa67b24b43a4f8c80f12a2fc42&amp;amp;pi=5"&gt;An              Ethnographic Study of XP Practice&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ethnographic study of an extremely well-oiled XP team in england&lt;/li&gt;&lt;li&gt;Study found that, in this case, XP was the style best suited for maximal performance of the team&lt;/li&gt;&lt;li&gt;Threats to validity include not spending enough time (one iteration?) with the subjects&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Kitchenham &amp;amp; Pfleeger: &lt;a href="http://www.cs.toronto.edu/%7Esme/CSC2130/readings/ch3-Kitchenham-proof.pdf"&gt;Personal              Opinion Surveys&lt;/a&gt;&lt;a href="http://www.cs.toronto.edu/%7Esme/CSC2130/readings/ch3-Kitchenham-proof.pdf"&gt;&lt;br /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Chapter describing the process of creating and administering personal opinion serveys (questionnaires and the like)&lt;/li&gt;&lt;li&gt;Primary message is: making a questionnaire isn't easy!  There's lots of confounding effects/sources of bias to worry about.&lt;/li&gt;&lt;li&gt;Interesting discussion ensued concerning the reuse of standard instruments from psychology, and whether or not SE should have similar standard instruments.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Cherubini et al: &lt;a href="http://portal.acm.org/citation.cfm?doid=1240624.1240714"&gt;Let's go to the whiteboard: how and why software developers use drawings&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Interesting case study conducted by Microsoft Research to see how their developers use graphical representations of code&lt;/li&gt;&lt;li&gt;Researchers were able to categorize their uses into Understanding, Design, and Communication, and the amount of investment into Transient, Reiterated, Rendered, and Archival.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pretty good&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Flyvbjerg: &lt;a href="http://resolver.scholarsportal.info/resolve/10778004/v12i0002/219_fmacr&amp;amp;form=pdf&amp;amp;file=file.pdf"&gt;Five Misunderstandings about Case Study Research&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This paper attempts to disprove several common misconceptions about case study research, primarily things like "case study results cannot be generalized to a larger population", "case studies cannot be used to test hypotheses".&lt;/li&gt;&lt;li&gt;A fairly good piece of advocacy.  It certainly makes me feel better about considering a case study as a direction for my research.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Edwards: &lt;a href="http://portal.acm.org/citation.cfm?id=971300.971312"&gt;&lt;strong style="font-weight: normal;"&gt;Using software testing to move students from trial-and-error to reflection-in-action &lt;/strong&gt;&lt;/a&gt;&lt;strong style="font-weight: normal;"&gt;and related papers&lt;/strong&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=971300.971312"&gt;&lt;strong style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Details findings of the WebCAT system - an online assignment submission and automatic grader created at the Virginia Tech.&lt;/li&gt;&lt;li&gt;Edwards found that the system was useful and well received by both instructors and students.  The primary objective, encouraging students to do test-first development, was achieved.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Interesting effects of introducing hints into the automatic test cases to discourage last minute submissions.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Juristo et al: &lt;a href="http://www.springerlink.com/content/x6015275373l1225/"&gt;Reviewing 25 Years of Testing Technique Experiments&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A taxonomy/summary of the various means of divining test cases that have been invented over the last quarter century.&lt;/li&gt;&lt;li&gt;Focuses mainly on machine-derived cases (random input-output samples, etc),  doesn't focus too much on human-created unit tests, unfortunately.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-3018025732387508938?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/3018025732387508938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=3018025732387508938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3018025732387508938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3018025732387508938'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/zak-is-worst-person-worst.html' title='Zak is the worst person!  The worst!'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-9180832172483205735</id><published>2009-03-12T14:04:00.000-07:00</published><updated>2009-03-13T09:20:14.503-07:00</updated><title type='text'>RESTful Efforts in Django</title><content type='html'>My CSC2125 team appear to have concrete direction in what we're going to build for end of term.  We've been building prototype REST web services, relying on ORM data, for the last few weeks, most recently in Django.  Since Django is so closely integrated into the community here, we're going to use that as our target platform.&lt;br /&gt;&lt;br /&gt;It seems that both myself and Bill Conrad started with the Django REST Interface, a Google SoC project from 2007.  This interface takes your Django Models and throws a quick and dirty xml interface ontop of them.  Functional yes, but not really complete (or even good REST).  However, since this interface &lt;span style="font-weight: bold;"&gt;has&lt;/span&gt; some problems, they're just aching for me to fix them!&lt;br /&gt;&lt;br /&gt;First, the xml/json/yaml returned from the interface is the standard Django serialzation format, which isn't very pretty for REST purposes.  It can be cleaned up.&lt;br /&gt;&lt;br /&gt;Most importantly, I think, is that the inter-object relations are expressed as sets of primary keys, instead of URLs to related objects.  This flyes in the face of REST.  It will require something akin to reversing the urls.py map to get a URL from a Model and primary key.  Non-trivial, interesting, and crucial to the correctness of the resluting service.&lt;br /&gt;&lt;br /&gt;A few other nice-to-haves include implicit delayed GET, algorithmic(query) resources, and dynamic representations.&lt;br /&gt;&lt;br /&gt;I spoke with Bill today about his work on the Basie REST API.  He seemed convinced that he solved most of what I'm after already, with the notable exception of reverse URL mapping.  The REST blog post on the Basie Blog mentions the following features:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Generic Models&lt;/span&gt; - looks like Django Models will be turned into REST resources automagically, a la the Django REST Interface.  Also, the Basie team had need of a deep synchonization of objects, and so added this to their REST API.  While I'm sure this fulfulls their requirements, according to &lt;a href="http://www.aminus.org/blogs/index.php/fumanchu"&gt;Robert Brewer&lt;/a&gt; via &lt;a href="http://pyre.third-bit.com/blog/archives/1992.html"&gt;Greg's Blog&lt;/a&gt; this is a RESTful no no.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Intuitive Data Access&lt;/span&gt; - discusses url structure.  There's mention in this section of an algorithmic (Bill calls them filtered) resources.  If this is done, then that's one item off my list!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;AJAX Friendly&lt;/span&gt; - not really interested in this, but good on ya.&lt;br /&gt;&lt;br /&gt;The impression I get after going through this (and I'll admit, I haven't looked at the Basie codebase yet, but its next on my list), is that there has been effort in the area I want to pursue in 2125, but not to the extent or in the specific details I intended.  Yay!  Project still holds validity!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-9180832172483205735?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/9180832172483205735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=9180832172483205735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/9180832172483205735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/9180832172483205735'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/03/restful-efforts-in-django.html' title='RESTful Efforts in Django'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4254876763324301342</id><published>2009-02-18T12:10:00.000-08:00</published><updated>2009-02-19T13:58:50.859-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='primates'/><title type='text'>Code Monkies and the Recipe for Happiness</title><content type='html'>Hanging out in my office today.  Being moderately productive, but in an inexplicably good mood.  The apparent recipe for happiness is as follows:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Purchase a ridiculously expensive bagel&lt;/li&gt;&lt;li&gt;Coffee&lt;/li&gt;&lt;li&gt;Install shiny new operating system on laptop&lt;/li&gt;&lt;li&gt;Meet with supervisor&lt;/li&gt;&lt;li&gt;Coffee&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create UI mockups for hypothetical testing tool&lt;/li&gt;&lt;li&gt;Listen to &lt;a href="http://www.youtube.com/watch?v=qYodWEKCuGg&amp;amp;feature=related"&gt;'Code Monkey' by Jonathan Coulton&lt;/a&gt; a few hundred times.&lt;/li&gt;&lt;li&gt;Coffee&lt;/li&gt;&lt;/ol&gt;I like this song.  It gives me this mental image of developers as knuckle-dragging primates.  Especially the way Coulton removes all articles from the lyrics of the song.  Ex. "Code monkey get up,  get coffee."  And after all, if you can't laugh at yourself, at whom can you laugh? (sentences also can't end in prepositions).  A couple excerpts:&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;Rob says Code Monkey very diligent, but his output stink.  Code Monkey's code not functional or elegant.  What do Code Monkey think?&lt;/span&gt;   &lt;span style="font-style: italic;"&gt; Code Monkey think maybe manager want to write god damn login page himself?  Code Monkey not say it out loud.  Code Monkey not crazy, just proud!&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;Much rather wake up, eat coffee cake.  Take bath.  Take nap.  This job fulfilling in creative ways.  What a load of crap.&lt;/span&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4254876763324301342?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4254876763324301342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4254876763324301342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4254876763324301342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4254876763324301342'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/02/code-monkies-and-recipe-for-happiness.html' title='Code Monkies and the Recipe for Happiness'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-2977947510664260917</id><published>2009-02-16T09:19:00.000-08:00</published><updated>2009-02-16T09:21:18.767-08:00</updated><title type='text'>Saxaphone</title><content type='html'>This is for the numerous saxophone players I know:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=RXyC7S-4LR8"&gt;http://www.youtube.com/watch?v=RXyC7S-4LR8&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-2977947510664260917?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/2977947510664260917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=2977947510664260917' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2977947510664260917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2977947510664260917'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/02/saxaphone.html' title='Saxaphone'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-2185725102237653406</id><published>2009-02-10T13:17:00.000-08:00</published><updated>2009-02-10T13:28:33.932-08:00</updated><title type='text'>Security</title><content type='html'>After a conversation with Aran about the U of T library site possibly being vulnerable to sql injection attacks, we came up with the idea that a really &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; cool name for a book on internet security would be&lt;blockquote&gt;  "); DROP TABLE Books;&lt;/blockquote&gt;  Not only is it funny, but is very existence would serve to test the security measures of countless online bookstores and libraries across the globe.  Most valuable internet security book you'll never have to read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-2185725102237653406?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/2185725102237653406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=2185725102237653406' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2185725102237653406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2185725102237653406'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/02/security.html' title='Security'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6724608933731628742</id><published>2009-02-05T12:26:00.000-08:00</published><updated>2009-02-05T16:43:20.310-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='SnowFlock'/><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>A Long Train of Thought with One (1) Cool Idea and Several Tangents</title><content type='html'>So I've been complaining for months now that I'd like an operating system, or just a desktop manager, that was similar to the kind of thing you've seen in movies like Swordfish and Hackers.  Some eclectic, that looks really frigging cool, and allows me to do the kinds of operations that I want to do, quickly and easily (Note to you UX experts out there, I am well aware of the fact that interfaces that look cool aren't usable.  I'm not going for market appeal, this is a totally custom job).  It seemed obvious that the only way to get this was to build it myself.  So, I started small, thinking "What kind of operations/features would I want on a small, portable device, like a Netbook or EEE PC?" (Note:  I decided I wanted an EEE PC when I saw Richard Stallman speak earlier this week.  It was the only thing I really liked about his talk.)  A simple window manager (with really flashy graphics), file system navigator, browser, and IDE.  That's pretty much it.  Oh, and the whole thing should be built on top of some flavor of Unix, so that I can still use 3rd party apps, etc.  Ambitious project, I know, but I'm just fantasizing here.  Also, while I was daydreaming about this, I decided to restructure my personal computing setup, but that's another story.&lt;br /&gt;&lt;br /&gt;Anyway, I figured I'd start with the IDE, since I had always wanted to make one.  This specific idea came up over the summer while I was at work.  I really liked the coding features in IntelliJ, but wished it fit better with our continuous integration infrastructure.  I came to the conclusion that the best IDE would have the most notable coding features from IntelliJ, but be transparent enough to allow you to plug in whatever tools you might already be using: SVN/Perforce, any JDK, any Ant, etc.  Before you start saying "But Rory, Eclipse does ..." or "But Rory, NetBeans blah blah blah...", one of the strongest motivating factors for this idea was that it sounded like a lot of fun, regardless of wheter the requirements have been fulfilled by something else.  Also, these heavyweight IDEs are just that, too heavy.  For me, their feature set can be at times too full, and having a single application that consumes &gt; 1GB of memory seems a bit silly, when all it really has to do is edit text files and invoke some commands from the system prompt.  Also, keep in mind that I enlisted (is that the right word?) in grad school to do just this: redesign developer tools.&lt;br /&gt;&lt;br /&gt;I mentioned this to Zak, to which he replied "It sounds like you just need to learn to use Emacs properly."  That also doesn't sound like fun.  I mentioned this to Aran, to which he replied "Oh my god, me too!"  Yay!  Someone else wants to make and IDE.  Except, Aran's IDE is a Javascript IDE.  Written in Javascript.  That runs in a browser.&lt;br /&gt;&lt;br /&gt;My first instinct was that this idea sounds rather boring.  Then I thought more carefully about it.  Google has browser based versions of all the other applications you could use on a daily basis: mail, word processor, spreadsheet, image editor, etc.  Why not a browser based IDE?  Are the UI controls available in a browser less expressive than those on a native client?  Probably not.&lt;br /&gt;&lt;br /&gt;Now, I had originally thought of this IDE as running in the browser, operating on local files, etc, but what if it were more closely integrated with the web?  What if it were a component of an online software portal?  It would automatically know which source code repository you're using.  It could automatically update documentation (wiki's).  It would have strong integration with the portal's bug tracker.  Imagine it, you're favorite portal would have a "Code" tab in addition to "Wiki", "Docs", "Browse", "Mail", etc, at the top of the page, and when you clicked it, everything was configured and ready to go.&lt;br /&gt;&lt;br /&gt;What can be get if we utilize the cloud for some of the processing, instead of relying on the browser to be the engine of this fantastic IDE?  First off, my IDE no longer consumes &gt; 1 GB of memory.  What else?  Rendering of the controls would still be done on the client, but can the cloud be used for more interesting problems, like static analysis?  Anything that could benefit from a bit of parallelization is a good candidate for migration.&lt;br /&gt;&lt;br /&gt;Could this include running unit tests?  Should the compiled code be run on the server, or in the browser?  Security concerns say that it should be run on the client, but if it were run on the server it could possibly be done faster, and run in multiple browsers in multiple environments instead of just the ones installed on the client.  To protect security, we could run the build and execute the code in a virtual machine, like a SnowFlock VM for example.  Now, as for unit tests, executing these tasks are extremely parallelizable.  We could fork a vm for every test, run them all at once.  Huzzah!&lt;br /&gt;&lt;br /&gt;I may have to rewrite this in a more concise form :P&lt;br /&gt;&lt;br /&gt;Also, Aran mentions &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt; and &lt;a href="http://appjet.com/"&gt;AppJet&lt;/a&gt;, which are similar to this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6724608933731628742?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6724608933731628742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6724608933731628742' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6724608933731628742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6724608933731628742'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/02/long-train-of-thought-with-one-1-cool.html' title='A Long Train of Thought with One (1) Cool Idea and Several Tangents'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4826606064303337163</id><published>2009-02-04T06:56:00.000-08:00</published><updated>2009-02-06T06:16:41.967-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bits'/><category scheme='http://www.blogger.com/atom/ns#' term='blogs'/><title type='text'>BitWhat?</title><content type='html'>I've noticed that a lot of the tech blogs I've been reading have titles that include creative uses of the word 'bit'.  Ex. The Third Bit, BitWorking, Bitgistics, etc.  Now, don't get me wrong, the authors and opinions presented are insightful, but how often does a python programmer, for example, worry about bits?  Shouldn't these catchy names use higher level concepts, like "Objection", "DataDemon", or "Quine 'n Cheese".  Bleh, just my opinion?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4826606064303337163?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4826606064303337163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4826606064303337163' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4826606064303337163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4826606064303337163'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/02/bitwhat.html' title='BitWhat?'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5701113007532555685</id><published>2009-02-03T12:28:00.002-08:00</published><updated>2009-02-05T11:30:00.662-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bluenose'/><category scheme='http://www.blogger.com/atom/ns#' term='hobby'/><category scheme='http://www.blogger.com/atom/ns#' term='reading week'/><title type='text'>Reading Week</title><content type='html'>While thinking about which papers/books I should consume over reading week, I came to the conclusion that what I would really rather do is finish up the planking on my scratch-built Bluenose.  This was a project that I started a little over a year ago, and boxed when I moved to Toronto.  My plan was to finish it before christmas, what with all the spare time I'd have as a lazy grad student.  Turns out, things are a bit different than I originally estimated, and the Bluenose has stayed in the closet for the last 4 or 5 months.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41VC8jJ54is/SYitm58WFXI/AAAAAAAAAAQ/qDUGfWHWLJg/s1600-h/DSCN0349.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_41VC8jJ54is/SYitm58WFXI/AAAAAAAAAAQ/qDUGfWHWLJg/s320/DSCN0349.jpg" alt="" id="BLOGGER_PHOTO_ID_5298675845501949298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The hull was carved from a single 6"x6"x48" Basswood timber, with additional pieces carved/shaped/cut from mixes of pine, balsa, and basswood.  The false-underdeck is pretty much done, just needs a bit of sanding along the rails, then I get to start planking the deck.  I estimate I'll spend most of the first day figuring out the scales &amp;amp; sizes I chose for everything.  In hindsight, I wish I had written some of this stuff down, but I think I'll manage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5701113007532555685?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5701113007532555685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5701113007532555685' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5701113007532555685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5701113007532555685'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/02/reading-week.html' title='Reading Week'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_41VC8jJ54is/SYitm58WFXI/AAAAAAAAAAQ/qDUGfWHWLJg/s72-c/DSCN0349.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-3880624567338945727</id><published>2009-02-03T12:28:00.001-08:00</published><updated>2009-02-05T16:41:00.104-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQLAlchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='2125'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='CherryPy'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><title type='text'>RESTful Questions</title><content type='html'>While working on my 2125 project, my partner and I created a quick little RESTful web service using &lt;a href="http://www.cherrypy.org/"&gt;CherryPy&lt;/a&gt;, and &lt;a href="http://www.sqlalchemy.org/"&gt;SQLAlchemy &lt;/a&gt;for persistence.  SQLAlchemy worked wonderfully.  CherryPy did a great job of making data-driven web pages, and the MethodDispatcher made it easy to invoke certain methods within a class when an http request comes in, based on the http method.  This seemed almost ideal for REST, but some clunkiness in the design prevents it from being really what we're after.&lt;br /&gt;&lt;br /&gt;What are we after, exactly?  We're trying to find ways in which we can avoid duplication of effort when using both Object Relational Mappers and RESTful Web Services.  In their book "RESTful Web Services", Richardson and Ruby hit on the point that the process of translating objects into REST resources is very similar to the process of translating the same objects into tables in a relational database.  So, if a web service is storing objects in a database and exposing them via a rest api, we would be doing the same sort of mapping procedure twice.&lt;br /&gt;&lt;br /&gt;My partner (in crime?) and I had a chat with Greg about this, and came up with some questions to investigate.  Below are the questions and their answers:&lt;br /&gt;How do REST APIs represent foreign-key relationships (ie. object aggregation)?  Specifically, are references to the other objects stored/returned, or the entire object on each request?&lt;ul&gt;&lt;li&gt;It is common REST practice to return hyperlinks to other objects/resources that are aggregated by the given resource.  This would require an additional http request for each referenced resource.&lt;/li&gt;&lt;/ul&gt;Can we uniquely identify object instances (REST resources) based on some identifier?&lt;ul&gt;&lt;li&gt;Yes.  The resource's URI is its identifier.  Every resource has one that identifies it.  However, it is possible for one resource to have many URIs that point to it (ex. /releases/2_05 and /releases/latest could be the same thing).&lt;/li&gt;&lt;/ul&gt;Can we cache REST objects on the client side, based on their identifier (whatever that may happen to be)?&lt;ul&gt;&lt;li&gt;Yes.  It would be silly not to.  However, the multi-identifier problem stated in the last answer might make this less efficient.&lt;/li&gt;&lt;/ul&gt;If we assume that the meat of the service is some object graph (probably a DAG), can we reconstruct the graph on the client side, out of stubs instead of actual objects, given identifiers and caching?&lt;ul&gt;&lt;li&gt;I think so.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;references&gt;&lt;addressability&gt;&lt;br /&gt;&lt;caching&gt;Thats all for now.  Check here or on the project wiki for more information coming soon!&lt;br /&gt;&lt;br /&gt;&lt;resource and="" table="" design="" are="" similar=""&gt;&lt;br /&gt;&lt;/resource&gt;&lt;/caching&gt;&lt;/addressability&gt;&lt;/references&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-3880624567338945727?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/3880624567338945727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=3880624567338945727' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3880624567338945727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3880624567338945727'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/02/restful-questions.html' title='RESTful Questions'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5531299842227911902</id><published>2009-02-03T12:16:00.000-08:00</published><updated>2009-02-04T08:02:09.783-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SnowFlock'/><category scheme='http://www.blogger.com/atom/ns#' term='2125'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='papers'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>What I've Read This Week</title><content type='html'>Singer, J.; Vinson, N.G., "Ethical issues in empirical studies of software engineering," &lt;i&gt;Software Engineering, IEEE Transactions on&lt;/i&gt; , vol.28, no.12, pp. 1171-1180, Dec 2002&lt;br /&gt;URL: &lt;a href="http://www.ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1158289&amp;amp;isnumber=25950"&gt;http://www.ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1158289&amp;amp;isnumber=25950&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper presents a handful of ethical dilemmas that researchers who conduct empirical studies can get themselves into,  along with advice on getting out or avoiding the situation all together.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What kings of studies could be create which contain no human subjects, but in which individuals can be identified (ie. from their source code)?&lt;/li&gt;&lt;li&gt;When can an employee's participation in an empirical study threaten their employment?&lt;/li&gt;&lt;li&gt;Is it possible to conduct a field study in which management doesn't know which of their employees are participating?&lt;/li&gt;&lt;li&gt;Should remuneration rates be adjusted to compete with a standard software engineer's salary?&lt;/li&gt;&lt;li&gt;Are raffles or draws valid replacements for remuneration?  Does the exclusivity of the compensation (ie. only one subject wins the iPod) affect the data collected by the study?  Will subjects 'try harder' in the task assigned if they think they may win a prize?  Can prizes affect working relationships/situations after the researcher has left?&lt;/li&gt;&lt;li&gt;Does ACM Article 1.7 eliminate deceptive studies?&lt;/li&gt;&lt;li&gt;Regarding written concent/participation forms, does having a large number of anticipated uses of the data detract from a studies credability, and thereby make subjects less likely to participate?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="fm-title"&gt;John P. A. Ioannidis, "Why Most Published Research Findings Are False"&lt;br /&gt;URL: &lt;a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1182327"&gt;http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1182327&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper describes a detailed statistical method (proof?) illustrating evidence that the majority of research papers published in this day and age go on to be refuted in the near future.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What is the 'power' the authors are referring to?&lt;/li&gt;&lt;li&gt;Is corollary 5 (corporations sponsoring research supress findings that they deem unfavorable for business reasons) just plain evil or misleading?&lt;/li&gt;&lt;li&gt;Null fields sound interesting.  How do I tell if I'm stuck in a null field?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How do we determine R for a given field?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span&gt;                                          &lt;a href="http://simula.no/people/magnej"&gt;M. Jørgensen&lt;/a&gt;&lt;span&gt;, &lt;/span&gt;            &lt;/span&gt;             &lt;span&gt;                     &lt;span&gt;and&lt;/span&gt;                     &lt;a href="http://simula.no/people/dagsj"&gt;D. I. K. Sjøberg&lt;/a&gt;            &lt;/span&gt;                (&lt;span&gt;2004&lt;/span&gt;)          "Generalization and Theory Building in Software Engineering Research"&lt;br /&gt;URL: &lt;a href="http://simula.no/research/engineering/publications/SE.5.Joergensen.2004.c"&gt;http://simula.no/research/engineering/publications/SE.5.Joergensen.2004.c&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="fm-author contrib-group"&gt;&lt;ul&gt;&lt;li&gt;Null hypotheses are a tell tale of (sometimes misused) statistical hypotheses testing.  Should we as readers be concerned when we see clearly stated null hypotheses?&lt;/li&gt;&lt;li&gt;In their recommendations, the authors suggest that purely exploratory studies hold little or no value, given that vast amounts of knowledge concerning software engineering has been accumulated in other, older fields such as psychology.  Although I agree that cross-disciplinary research is useful for SE, and many old ideas can be successfully applied in SE, I'm not sure I agree that there is no use in exploratory studies.&lt;/li&gt;&lt;li&gt;Proper definition of populations and subject sampling is important&lt;/li&gt;&lt;li&gt;It is difficult to transfer the results in one population to another.  The most common example of this is performing a study on CS grad/undergrad students and expecting it to transfer to professionals.  Is there any way we as CS grad students can perform studies that &lt;span style="font-weight: bold;"&gt;will &lt;/span&gt;be relevant to professionals, then?&lt;/li&gt;&lt;/ul&gt;Still working my way though &lt;a href="http://oreilly.com/catalog/9780596529260/"&gt;RESTful Web Services&lt;/a&gt;.  Just wrapped up the author's definition of ROA (resource oriented architecture).  Very interesting.  Hopefully this answers some questions brought up by my 2125 project.&lt;br /&gt;&lt;br /&gt;Also on the stack are &lt;a href="http://sysweb.cs.toronto.edu/publications/69"&gt;this paper about the Snowflock VM System&lt;/a&gt; and &lt;a href="http://www.amazon.com/Software-Architecture-Primer-John-Reekie/dp/0646458418"&gt;A Software Architecture Primer.&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And, if there's time, I'll try to finish &lt;a href="http://www.amazon.com/Enders-Game-Orson-Scott-Card/dp/0765342294/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1233699630&amp;amp;sr=1-1"&gt;Ender's Game&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5531299842227911902?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5531299842227911902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5531299842227911902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5531299842227911902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5531299842227911902'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/02/what-ive-read-this-week.html' title='What I&apos;ve Read This Week'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8077736692673702001</id><published>2009-01-22T15:37:00.000-08:00</published><updated>2009-01-22T15:54:19.233-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='build engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='emprical studies'/><title type='text'>Calling all Build Engineers</title><content type='html'>During my recent CSC301 lecture, I was surprised to find out how few students were aware that they could actually get a job as a full-time build engineer.   It makes me think that there's probably a study to be done in this area.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To what extent are build processes and project maintenance discussed in CS education?&lt;/li&gt;&lt;li&gt;What is the market value of a professional build engineer?&lt;/li&gt;&lt;li&gt;How to build engineers perform their job?  Is there a way it can be improved?&lt;/li&gt;&lt;/ul&gt;The last point is something that causes me mild concern.  It seems that, in some cases, the methods used to set-up and execute project wide builds can be semi-structured voodoo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8077736692673702001?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8077736692673702001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8077736692673702001' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8077736692673702001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8077736692673702001'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/01/calling-all-build-engineers.html' title='Calling all Build Engineers'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8395585216477883937</id><published>2009-01-22T14:22:00.000-08:00</published><updated>2009-01-22T15:36:54.273-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VM'/><category scheme='http://www.blogger.com/atom/ns#' term='SnowFlock'/><category scheme='http://www.blogger.com/atom/ns#' term='Basie'/><category scheme='http://www.blogger.com/atom/ns#' term='Xen'/><category scheme='http://www.blogger.com/atom/ns#' term='Dr. Project'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous Integration'/><title type='text'>Safe Server-Side Unit Testing</title><content type='html'>I &lt;span style="font-style: italic;"&gt;like&lt;/span&gt; build systems :)  My first experience with integrating a vcs, bug tracker, and ant was a very fulfilling experience, and it only got better when we added things like &lt;a href="http://emma.sourceforge.net/"&gt;EMMA&lt;/a&gt; to give developers a feel of how their project was progressing.  So, you can understand why my ears perked up when, during a conversation about the SVN setup in &lt;a href="https://www.drproject.org/"&gt;Dr. Project&lt;/a&gt;/&lt;a href="http://basieproject.org/"&gt;Basie&lt;/a&gt;, Greg mentioned that they had tried to incorporate a continuous integration routine into Dr. Project, but failed, citing complexities and difficulty with the administration.  Now, being the cinical, cold-hearted person that I am, my first thought was, "You clearly need better administrators", but then I remembered trying to do something similar with VMWare, and how rediculously hard it was to get it working, and once it was, keeping it there was almost impossible, so I held my tongue. &lt;br /&gt;&lt;br /&gt;The basic premise here is to have the server which runs the Dr. Project/Basie installation also manage a system of virtual machines.  When code is checked into the SVN repository for a given project, a virtual machine is spawned.  Inside this VM, we download a copy of latest revision from the SVN, build it, run the unit tests, generate the reports, publish them, then kill the VM.  Obviously, we can't do the build and test by just forking a process, without the VM, because that would allow the project groups to run arbitrary code on the Dr. Project web server, which is just about the biggest security hole I can think of.  So, the goal here is to utilize the virtual machines to completely isolate the code from the web server, so that the tests are run in a completely safe environment, and at the same time providing benefits like strictly reproducible execution environments (every unit test starts from the same vm snapshot).&lt;br /&gt;&lt;br /&gt;To accomplish these goals, we're looking at using the &lt;a href="http://sysweb.cs.toronto.edu/snowflock"&gt;SnowFlock&lt;/a&gt; system.  All vm's start from a master image, clones are quick to create (~100msecs), we can instantiate many, many clones at the same time, and the whole thing is wrapped up in a nice little Python API.&lt;br /&gt;&lt;br /&gt;It will be interesting to see if this works for Dr. Project/Basie's needs, and if it does, I'd like to see if it could be extended to do cluster testing for larger distributed systems projects.  The ease and speed of creating a new clone vm means that for each test, a small cluster of machines could be created, the test run, and torn down.  I'm not sure if a tool like this exists already, it sounds like a fairly straightforward idea, but should be fun to investigate either way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8395585216477883937?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8395585216477883937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8395585216477883937' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8395585216477883937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8395585216477883937'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/01/safe-server-side-unit-testing.html' title='Safe Server-Side Unit Testing'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-2549244626529941257</id><published>2009-01-22T14:11:00.001-08:00</published><updated>2009-01-22T17:00:06.223-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Doc'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><title type='text'>ORM Mapping for Web Service Definition</title><content type='html'>This post is an experiment with the Blogger/Google Docs interoperability functionality.  I'm not terribly impressed with the quality of the translation between doc and blog post.  If you're as disgusted with the layout as I am, feel free to read the google doc &lt;a href="http://docs.google.com/Doc?id=dg5wjm4b_3c2wc55gj"&gt;here&lt;/a&gt;.  This is a document describing an idea Greg proposed to me and another student in his CSC2125 class.  In once sentence, the problem is : Can we use the object mapping definition from an Object-Relational Mapping tool to describe objects/resources in a RESTful web API, and in so doing leverage some of the benefits ORMs have lent to persistance, reduce redundancy, and generally make people happier?  Unfortunately, the more I look into it, the more I think the answer is 'no'.  However, we're not quite finished the investigation yet.&lt;br /&gt;&lt;h1&gt;ORM Mapping for Web Service Descriptors&lt;/h1&gt;&lt;br /&gt;&lt;h2&gt;Traditional Situation&lt;/h2&gt;&lt;br /&gt;Figure 1 illustrates the traditional deployment situation for a client/server application, in which the client communicates with the server via an exposed web service, and the server persists data into a database using an object-relational mapper.  The server-side process consists of a layered architecture, in which the business logic interfaces with the database via an ORM mapping layer.  The application logic stores its data in the form of objects (hence the ORM), and a mapping is defined by the application programmer between the class definitions for these objects and a relational database schema.&lt;br /&gt;&lt;br /&gt;The client side application code performs some useful operation with the data or service exposed by the server-side business logic.  To access this information or service, the client application utilizes stub objects.  These stubs expose the same interface as the live objects on the server (possibly a subset of methods for security/feasibility reasons), but the implementation of the object lives on the server; client side methods all contain logic for making calls to the server, and returning the response as if the method were implemented on the client.  These stub objects are created automatically at build time by a tool which is able to read a description of the web service, and interpret into source code which can be compiled and used by the application.  In traditional web services, this description is a WSDL file.  &amp;lt;what is this for a REST web service??&amp;gt;&lt;br /&gt;&lt;div id="g8-h" style="padding: 1em 0pt; text-align: center;"&gt;&lt;img style="width: 337px; height: 445px;" src="http://docs.google.com/File?id=dg5wjm4b_5g4vktwg6_b" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Figure 1: Traditional Client-Server Web Service Deployment, with ORM Mapping Definition and a Web Service Descriptor&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Problem&lt;/h2&gt;&lt;br /&gt;The problem with this deployment is that there are redundencies in the way the shared objects and web service is defined, which could be streamlined to the benefit of both server-side programmers and clients who wish to interface with the server.  In the event that the class definition for one of the shared objects changes (ex. adding a new public member), the server-side application programmer must update both the ORM Mapping Definition file/logic, as well as the Web Service Descriptor, and the client-side programmer &lt;i&gt;may&lt;/i&gt; be required to &lt;i&gt;at least&lt;/i&gt; rebuild their application, to update the stubs (this is addresses in &lt;b&gt;Versioning&lt;/b&gt;).&lt;br /&gt;&lt;h2&gt;&lt;br /&gt;Single Mapping Definition&lt;/h2&gt;It has been proposed that the ORM Mapping Definition and Web Service Descriptor can be combined into one artifact, as the two separate documents both essentially describe how to serialize instances of a given class.  With hopefully only a small amount of modification, an ORM Mapping Definition could be used to serve both these purposes.  Also, if the ORM side of the interface to this artifact is properly preserved, it is hoped that it can still be used for many of the other functions the ORM layer uses it for, like relational database schema migration/exporting.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; it may be interesting to investigate this further, as the ORM Mapping Definition serializes an object's &lt;b&gt;state&lt;/b&gt;, but a Web Service Descriptor would likely only describe an object's &lt;b&gt;behavior/interface&lt;/b&gt;!&lt;br /&gt;&lt;div id="twy6" style="padding: 1em 0pt; text-align: center;"&gt;&lt;div id="zgs2" style="padding: 1em 0pt; text-align: center;"&gt;&lt;img style="width: 341px; height: 449px;" src="http://docs.google.com/File?id=dg5wjm4b_7gp7ck3xk_b" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Figure 2: Client-Server Web Service Deployment, with single Shared Object Descriptor&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;br /&gt;Versioning&lt;/h2&gt;Following from the automatic schema migration/updating, questions are raised about how similar functionality could be used to span the client-server gap, not just the server-database gap.  Obviously, client-side stub classes can't be updated &lt;i&gt;completely automatically&lt;/i&gt;, as this would require rebuilding the application.  However, the server could expose several concurrent versions of the same service, multiplexed based on a version field in incoming requests.  As part of the schema update process, in addition to modifying the database, the ORM layer (or some other piece of code) could generate the infrastructure required to support backward-compatible calls to the web service API.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-2549244626529941257?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/2549244626529941257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=2549244626529941257' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2549244626529941257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2549244626529941257'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/01/orm-mapping-for-web-service-definition.html' title='ORM Mapping for Web Service Definition'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8952581775867399094</id><published>2009-01-22T13:35:00.000-08:00</published><updated>2009-01-22T14:10:43.334-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='301'/><category scheme='http://www.blogger.com/atom/ns#' term='lecture'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='ta'/><title type='text'>My First Lecture</title><content type='html'>So, I've been neglecting this old blog for the last few weeks, so I figure it's high time I let my captive audience in on what I've been doing at grad school.&lt;br /&gt;&lt;br /&gt;Once again, I'm TAing &lt;a href="https://stanley.cdf.toronto.edu/drproject/csc301-2009-01"&gt;CSC301&lt;/a&gt;.  This term, in addition to my standard duties of marking, critiquing assignment questions, and coming up with exam problems, Greg asked each of his TAs to give a lecture to the class.  My topic was unit testing with javascript.  My first reaction was "Yay, I already know about unit testing, this will be a breeze", but then I remembered that my knowledge of javascript extended to image rollovers, and no further.  So, I spent about 10 or 15 hours over the next week or so learning proper OO javascript, as well as how to use (or not use) JsUnit and some of its competitors, JsCoverage, Selenium, and trying to beat CruiseControl into state that fits together with these tools (no such luck, unfortunately).&lt;br /&gt;&lt;br /&gt;The lecture went pretty much as I expected.  I had prepared a loose agenda of items, a timeline for discussion and demonstration, and a few canned questions designed to get the undergrads to turn their brains on - all of which I forgot as soon as Greg introduced me.  Luckily, I had my laptop and a big desk to hide behind.  After a few moments of awkwardness, things got back on track, however. &lt;br /&gt;&lt;br /&gt;Lessons learned:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;leave your pen at your desk (aparently I click-click-click it as a nervous twitch).&lt;/li&gt;&lt;li&gt;always bring a glass of water to a lecture, so that a) you can keep your throat lubricated and b) you can take short pauses to think/fabricate answers to questions without looking like you're thinking/fabricating&lt;/li&gt;&lt;/ul&gt;All in all, I think it was a pleasant experience.  I was worried everything I said went past the class and out the back door of the room, but I received several questions and comments from a couple of the project teams, asking about setting up JsUnit to test their code!  Hooray!  I hope they can get it working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8952581775867399094?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8952581775867399094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8952581775867399094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8952581775867399094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8952581775867399094'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2009/01/my-first-lecture.html' title='My First Lecture'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-810861357413003408</id><published>2008-12-29T07:13:00.001-08:00</published><updated>2008-12-29T07:23:00.892-08:00</updated><title type='text'>Relaxing Christmas Break</title><content type='html'>My relaxing Christmas break is coming to an end, and not a moment too soon.  Just to recap:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spent the first few days adjusting to the noise level in my house, which I had apparantly forgotten about&lt;/li&gt;&lt;li&gt;Had 5 (five) wisdom teeth removed.  &lt;span style="font-weight: bold;"&gt;Important note&lt;/span&gt;: &lt;span style="font-style: italic;"&gt;always&lt;/span&gt; get your pain medication before the Novocaine wears off.  If the wait time at the pharmacy is longer than an hour, get the doctor to call in the order ahead of time.  Most unpleasant two hours&lt;span style="font-weight: bold;"&gt; ever.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Acquired 1 (one) head cold from either family members at Christmas eve party, or mobs on boxing day.  Just in case an aching, pounding pain in your jaw bone isn't enough, here's two more aching, pounding pains: one in your head, and one in your throat!&lt;/li&gt;&lt;li&gt;Sub-par productivity levels, which I'm blaming on the codine.&lt;/li&gt;&lt;li&gt;Modem feels the need to reset/crash about once every 5 minutes&lt;/li&gt;&lt;/ul&gt;Anyway, it will be nice to be back in Toronto again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-810861357413003408?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/810861357413003408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=810861357413003408' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/810861357413003408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/810861357413003408'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/12/relaxing-christmas-break.html' title='Relaxing Christmas Break'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6201862902239854846</id><published>2008-12-21T13:39:00.000-08:00</published><updated>2008-12-21T13:43:12.358-08:00</updated><title type='text'>Migration Woes</title><content type='html'>Spent some quality procrastination time this afternoon migrating all of my disparate google services to be owned by my shiny new gmail account.  Simply switching ownership account wasn't an option, so I had to create a new calendar, reader, and blog with my gmail account, export everything into xml files, then import them into the new services.  Everything looks pretty much seamless, with the exception of &lt;span style="font-style: italic;"&gt;this&lt;/span&gt; blog, which now has two authors, both named Rory Tulk.  Oh well, can't win 'em all, I guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6201862902239854846?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6201862902239854846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6201862902239854846' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6201862902239854846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6201862902239854846'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/12/migration-woes.html' title='Migration Woes'/><author><name>Rory</name><uri>http://www.blogger.com/profile/08421782538859631666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6402800836264209738</id><published>2008-11-07T10:39:00.000-08:00</published><updated>2008-12-21T13:34:40.531-08:00</updated><title type='text'>Power Laws in Software</title><content type='html'>A good paper explaining Power Laws, and the 80-20 observation.  Some of the correlations between the distribution and actual data are a bit loose, but the authors provide error measures (r squared) for all datasets presented, and in some cases make mention of some poor fits.  Overall, very helpful.&lt;br /&gt;&lt;br /&gt;Couple of tangent thoughts while reading this:&lt;br /&gt;&lt;br /&gt;static dependancy analysis with Java reflection sounds like fun :)&lt;br /&gt;&lt;br /&gt;"... only a few reusable components can be reused profitably [Glass 1998]" look into this further.  Does this correlate with the previous paper on code reuse?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6402800836264209738?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6402800836264209738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6402800836264209738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6402800836264209738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6402800836264209738'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/11/power-laws-in-software.html' title='Power Laws in Software'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-344392088875140519</id><published>2008-11-07T09:07:00.000-08:00</published><updated>2008-12-21T13:34:40.532-08:00</updated><title type='text'>Jogging Over a Distance – Supporting a “Jogging Together” Experience Although Being Apart</title><content type='html'>&lt;a href="http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/09-mueller.pdf"&gt;http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/09-mueller.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The authors have created a simple audio communication system for use by joggers.  As reported in a survey they conducted, joggers enjoy the company of others while jogging, for conversation and encouragement.  However, finding a jogging parter of similar ability and availability is not always possible.  To this end, the Jogging Over a Distance system links two joggers who are not physically collocated.  Each jogger is equipped with a cell phone, wireless headset, and small computing unit.  Joggers hear the conversation of their partner though the headset, augmented to seem localized in space around them based on their partner's speed (ie. If their parter is faster, they will sound farther ahead).&lt;br /&gt;&lt;br /&gt;Jogging Over a Distance insightfully a market of users which seem to be in a very receptive position for this device.  As the study points out, 54% of surveyed participants said they engage in conversation while jogging.  Also, the proposed design retains all the mentioned benefits of conversation while jogging (socializing, motivation, fun, encouragement) while lessening the barriers presented by running in pairs (differing pace, differing geographic location).  In addition to this, the 3D audio positioning is an extremely creative, novel way to indicate to the user the relative speed of their jogging parter.  This clearly seems to be influenced by research done in the area of ambient/passive displays.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I feel there are several areas in which this system could be improved, or concerns addressed.  The device's form factor seems overly cumbersome, especially given the wide availability of mobile phones with adequate computing power for managing both calls and audio positioning.  This was pointed out by the authors as an issue which will be addressed, but I wonder why it wasn't a hard requirement since design inception.  Also, in relation to the audio positioning, I was surprised to read that off the shelf quadraphonic headphones were unable to give the users proper discrimination between sounds in front and behind them.  The solution proposed, to have the forward axis tilted to a 1:30-7:30 orientation, seems undesirable.  It would be interesting if the authors could study this orientation with respect to the route runners take, to see if it leads them on a series of gradual right-hand turns (as one runner follows the virtual runner in front of them).  Also, if the audio location features were omitted, how is this technology different than a simple cell phone and head set?  In this case, the merit of the authors' work is not the technology, but the sociological study they can perform with it.&lt;br /&gt;&lt;br /&gt;This brings me to my next line of thought, which is concerned with the marketability of this 'device'.  If a jogger typically jogs for an hour, once a week, and uses the Jogging Over a Distance to effectively make a one hour phone call to someone who is too far away to run physically with them, will this not present a large associated cost for the jogger?  For the purposes of research, this is not an issue, but if it were to be a consumer product, this would have to be solved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-344392088875140519?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/344392088875140519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=344392088875140519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/344392088875140519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/344392088875140519'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/11/jogging-over-distance-supporting.html' title='Jogging Over a Distance – Supporting a “Jogging Together” Experience Although Being Apart'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8466110321767260312</id><published>2008-10-27T07:42:00.000-07:00</published><updated>2008-12-21T13:34:40.532-08:00</updated><title type='text'>The Familiar Stranger: Anxiety, Comfort, and Play in Public Places</title><content type='html'>&lt;a href="http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/08-paulos.pdf"&gt;http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/08-paulos.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The authors present the results of a study conducted to examine the results of two studies conducted to determine the extent to which the Familiar Stranger concept still exists in modern urban scenarios, and whether or not a ubiquitous social networking solution could leverage this effect in a useful way.  The first study accurately recreates Stanley Milgram's 1972 Familiar Stranger study, in which photos of a light-rail station at morning rush hour are distributed to individuals at the station, and familiar strangers are determined by labeling the people in the photo.  The second study consisted of an urban walking tour, in which participants indicated their level of familiarity and comfort in certain locations based on four dimensions: number of familiar people in the area, degree of familiarity with those people, have familiar people visited this place before, and do the people currently here visit the same places I do?  Using these results, the authors propose Jabberwocky, a device used to tag familiar items, locations, and individuals.  In this system, Bluetooth connected devices (base stations, cell phones, and iMotes) communicate to provide a measure of familiarity to the user about their current location.&lt;br /&gt;&lt;br /&gt;I found this paper to be particularly informative from a purely sociological standpoint.  Although the concepts presented cannot be wholly attributed to the authors (Milgram's study was novel in 1972, but not in 2008), they are none the less insightful.  One noteworthy design constraint imposed by the authors is that any ubiquitous device which functions based on familiar strangers must not encourage explicit interaction with said strangers.  The authors argue that the existence of familiar strangers is an indicator of a healthy urban community, and not a negative or anti-social aspect.  Further observations  on people's behavior, such as frequently checking one's cell phone in unfamiliar settings, adds a depth of insight to the paper.&lt;br /&gt;&lt;br /&gt;The majority of the limitations found with this study are attributed to the technical merits of the device proposed.  The Jabberwoky platform seems to be applicable to most of the situations applied in the paper, but using the Motes to tag static objects or locations seems a bit infeasible.  For example, leaving these devices attached to public structures brings into question the cost of the device and the possibility of theft.  Perhaps a less physically obtrusive solution for tagging familiar locations would be to submit the GPS coordinates of the location to a central server, which can be queried at the same time and with the same frequency of the Bluetooth polling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8466110321767260312?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8466110321767260312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8466110321767260312' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8466110321767260312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8466110321767260312'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/familiar-stranger-anxiety-comfort-and.html' title='The Familiar Stranger: Anxiety, Comfort, and Play in Public Places'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1880039097067902662</id><published>2008-10-27T07:41:00.000-07:00</published><updated>2008-12-21T13:34:40.532-08:00</updated><title type='text'>Augmenting the Social Space of an Academic Conference</title><content type='html'>&lt;a href="http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/08-mccarthy.pdf"&gt;http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/08-mccarthy.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The authors present the results of deploying two proactive displays into an academic conference setting: AutoSpeakerID (ASID) and Ticket2Talk (T2T).  Both these systems leverage RFID tags that are physically installed into conference attendees' badges, which are paired with an profile containing personal affiliation information and a photograph.  The ASID display consists of a RFID reader embedded in a microphone stand and an accompanying large display.  In this way, when an attendee approaches the microphone to ask a question, their information is rendered on the display, providing context for their question.  The T2T system is of similar configuration, in that it has a display which renders an attendee's profile when they come into proximate context with the display.  However, T2T is installed at refreshment stations to promote personal interactions between attendees.&lt;br /&gt;&lt;br /&gt;The novel element presented in this paper, as the authors point out, is the close focus on the evaluation of these devices.  Each system is examined thoroughly by the researchers, gathering qualitative observational and questionnaire data.  These results were used to gauge the systems' performance in the areas of Enhancing the Feeling of Community, Mesh with Established Practices, and Privacy Concerns.  Some unexpected, yet somewhat beneficial results were produced when users attempted to 'game' the system buy providing falsified, comical profiles (ie. The Bill Gates profile).  &lt;br /&gt;&lt;br /&gt;Although the authors focused on qualitative analysis of their displays, I think further investigation is required before coming to definitive decisions on the systems' utility.  Although this is clearly a difficult domain to measure, it is generally proposed that user surveys/questionnaires can skew results.  For example, the results of the survey for the Ticket2Talk system reported 41% positive feedback and 3% negative feedback, with 66% of the attendees unaccounted for.  If we take into consideration a variation of Self-Selecting Respondents, we could propose that the participants who found the system very useful were motivated to fill out the questionnaire, and those who strongly disliked the system were motivated to distance themselves from the system, it would not be a stretch to propose that the majority of the 66%  unaccounted attendees had a negative view of the system, and so the results of the questionnaire are invalid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1880039097067902662?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1880039097067902662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1880039097067902662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1880039097067902662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1880039097067902662'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/augmenting-social-space-of-academic.html' title='Augmenting the Social Space of an Academic Conference'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4950863768262384177</id><published>2008-10-27T07:39:00.000-07:00</published><updated>2008-12-21T13:34:40.532-08:00</updated><title type='text'>A Taxonomy of Ambient Information Systems: Four Patterns of Design</title><content type='html'>&lt;a href="http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/07-a-pousman.pdf"&gt;http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/07-a-pousman.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper presents the current state of the art in ambient or peripheral information displays.  The authors propose four dimensions on which the currently available ambient systems can be measured: information capacity, notification level, representation fidelity, and aesthetic emphasis.  Information capacity measures the number of information sources a device can display.  Notification level indicates the degree to which the system will interrupt the user, or demand their attention.  Representation fidelity  measures the level of abstraction in the data representation.  Finally, aesthetic emphasis measures how important aesthetics are to the device's designers.  Based on these four dimensions, the authors propose four patterns of design in this domain: Symbolic Sculptural Displays, Multiple Information Consolidators, Information Monitor Displays, and High Throughput Textual Displays.&lt;br /&gt;&lt;br /&gt;The authors do a very nice job of describing the current areas of research and development in ambient and peripheral displays.   The exercise of classifying current projects on their four selected dimensions is quite insightful, and serves greatly to provide organization and structure to the field.&lt;br /&gt;&lt;br /&gt;This paper is lacking in a tangible contribution to knowledge, however.  In the paper's introduction, it mentions at least one other existing method of categorizing ambient and peripheral displays.  I can see no measure that indicates that the new classification system which is proposed here has any advantage over existing methods.  Also, these patterns of design have been used to classify existing projects, but how could they be used to facilitate the creation of new products, in much the same way that OOP design patters are used?   Finally, it could be suggested that the four patterns proposed are insufficient to  categorize all  possible ambient displays, since it is incapable of being applicable to all devices in the sample used in the paper.  Perhaps there are more than four patterns that can be extracted from the four dimensions of classification proposed by the authors, and perhaps there are even anti-patterns to be found within these four dimensions, that would result in poor ambient displays.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4950863768262384177?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4950863768262384177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4950863768262384177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4950863768262384177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4950863768262384177'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/taxonomy-of-ambient-information-systems.html' title='A Taxonomy of Ambient Information Systems: Four Patterns of Design'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1791255053854246026</id><published>2008-10-27T07:37:00.000-07:00</published><updated>2008-12-21T13:34:40.533-08:00</updated><title type='text'>Heuristic Evaluation of Ambient Displays</title><content type='html'>&lt;a href="http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/07-mankoff.pdf"&gt;http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/07-mankoff.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In this paper, the authors present a method for evaluating ambient displays using a technique similar to Nielsen's Heuristic Evaluation.  A set of heuristics are created, by modifying the Nielsen heuristics, specifically tuned for ambient displays, hereafter referred to as the Ambient Heuristics.  Two evaluation groups are then formed to apply heuristic evaluation to two novel ambient displays, both developed by the authors: busMobile and daylight display.  BusMobile is a simple ambient display which shows the locations of campus buses, relative to the building in which the display is placed.  Daylight display uses a lamp to convey the brightness level outside to users in a lab with no windows.  The use of Ambient Heuristics showed an increased ability to find severe usability issues over the Nielsen heuristics.&lt;br /&gt;&lt;br /&gt;The authors have presented an insightful tool for evaluating the usability issues of ambient displays.  This revised set of heuristics provide a cheap, effective way for researchers to evaluate the usability of their ambient display products.&lt;br /&gt;&lt;br /&gt;I feel that this study would be more valid if the Ambient Heuristics were applied to more than just the two displays created by the authors.  There are a number of existing products/projects that could have been used as samples in this study.  This would both fulfill one avenue of future work, and reduce cost on the authors because they would not have to develop their own displays simply for the purpose of testing the evaluation scheme (that is, unless the display devices were existing projects). In addition to this, it would be interesting to see if the margin of difference between the number of issues found with Ambient Heuristics and the Nielsen Heuristics scales to larger sets of data (ie. More than 30 possible issues).  If the gap were to widen, it would imply the Ambient Heuristics are at an advantage for finding issues in this domain.  However, it seems then counter intuitive that the Nielsen Heuristics would be capable of finding issues that the Ambient Heuristics are not.  Perhaps the heuristics need to be adjusted so that they find a superset of all issues found with the Nielsen set.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1791255053854246026?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1791255053854246026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1791255053854246026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1791255053854246026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1791255053854246026'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/heuristic-evaluation-of-ambient.html' title='Heuristic Evaluation of Ambient Displays'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-7362232355232880625</id><published>2008-10-16T09:11:00.000-07:00</published><updated>2008-12-21T13:34:40.533-08:00</updated><title type='text'>Hardcore SE Papers</title><content type='html'>Software Libraries and Their Reuse: Entropy, Kolmogorov Complexity and Zipf's Law&lt;br /&gt;&lt;a href="http://www.cs.toronto.edu/~gvwilson/reading/veldhuizen-libraries-reuse.pdf"&gt;http://www.cs.toronto.edu/~gvwilson/reading/veldhuizen-libraries-reuse.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper presents an interesting argument, stating that the entropy of a given problem domain can be measured, and in so doing we can predict the amount of library reuse that is appropriate, or indeed possible, for programs in that domain.  Also, a handy proof states that the only complete library for a given domain is of infinite size, effectively securing jobs for library writers in the future.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Unfolding Abstract Datatypes&lt;br /&gt;&lt;a href="http://www.cs.toronto.edu/~gvwilson/reading/gibbons-unfolding-adt.pdf"&gt;http://www.cs.toronto.edu/~gvwilson/reading/gibbons-unfolding-adt.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper should have been called "Unfolding Abstract Datatypes in Functional Programming", so that I had a valid warning before I started reading it, and by reading I mean staring at the pages looking for something I understood.  Here's what I got out of it:  in functional languages, ADTs are possible, but less commonly implemented than in OOP languages.  The primary reason for this is because most user-defined types expose their data structures so that you can do pattern matching on them.  The paper argues that this is bad, and proper information hiding can be obtained without breaking matching ability.  Also, ADTs represent codata (whatever that is).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-7362232355232880625?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/7362232355232880625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=7362232355232880625' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7362232355232880625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7362232355232880625'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/hardcore-se-papers.html' title='Hardcore SE Papers'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1993338948740549850</id><published>2008-10-14T13:57:00.000-07:00</published><updated>2008-12-21T13:34:40.533-08:00</updated><title type='text'>Asking and Answering Questions during a Programming Change Task</title><content type='html'>&lt;a href="http://www.cs.toronto.edu/~gvwilson/reading/sillito-questions-program-change.pdf"&gt;http://www.cs.toronto.edu/~gvwilson/reading/sillito-questions-program-change.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This paper presents a study conducted by getting programmers (students and professionals) to work while thinking out loud, then categorizing the questions they ask themselves (and their debugger).  These fall into 44 distinct categories, under 4 main groups.  Following this, each of the categories is analyzed to see if existing tools are able to directly answer the question proposed.&lt;br /&gt;&lt;br /&gt;I found my mind wandering around while I was 'reading' this paper.  Not that the subject matter is uninteresting, far from it.  I found myself coming up with ideas for new tools all throughout this read, which eventually started to detract from the primary text itself.  Anyway, the following are some thoughts:&lt;br /&gt;&lt;br /&gt;There is mention of how programmers divide their workspace to show them, for example, code and executing program, or two code files, etc, by using emacs screen splitting, multiple windows, or multiple monitors.  I wonder what the results would be in a study where we a) measure a programmer's productivity with one monitor, then b) add a second monitor (I'm pretty sure this has been done before), allow them to get used to it (productivity should plateau), then remove the second monitor.  I predict that productivity will drop &lt;span style="font-weight:bold;"&gt;below&lt;/span&gt; that measured in a) for a while, then gradually come back to a nominal level.&lt;br /&gt;&lt;br /&gt;Of the two groups studies (students and professionals), both had a single category of question (of 44 possible) that was asked vastly more than all others.  For students, this was "Where is this method called or type referenced?".  For professionals, this was "What will be (or has been) the direct impact of this change?".  A couple of things come out of this.&lt;br /&gt;&lt;br /&gt;First off, students seem more concerned with direct program behavior or structure, while professionals are concerned with impacts of code change.  This seems like a much more organization-oriented behavior. I'm having trouble expressing my exact idea here, so I'll come back to it.  Bottom line, is that professionals are less hack and slash than students.&lt;br /&gt;&lt;br /&gt;Secondly, there are tools for addressing the students' question.  Why aren't they using them?  The tools for the developers' questions, however, are lacking.  Can we make them better?&lt;br /&gt;&lt;br /&gt;Exemplar-driven documentation.  There is discussion in this paper about finding examples of the type of operation one is trying to create or modify within the subject code base, and using that as a template for the new feature/modification.  I wonder if this could be applied not only to the target code base, but to any code base (or indeed every code base).  Lets say, for example, I want to implement a convolution matrix to do a gaussian blur over a java BufferedImage.  Imagine I had a search engine that would search the code of a vast number of open source code bases, with some natural language query, and returned code snippets of convolution matrices over BufferedImages.  Useful?  I dunno, just had to write it down before I forgot it.&lt;br /&gt;&lt;br /&gt;This leads into another idea that popped up.  A few months ago, when I had a job and spare time, I was playing around with the &lt;a href="http://www.jmonkeyengine.com/"&gt;jMonkeyEngine&lt;/a&gt;, which is a handy little open source scene graph for java, based on &lt;a href="https://jogl.dev.java.net/"&gt;JOGL&lt;/a&gt;.  Its documentation is in the form of a Wiki, which unfortunately has a bunch of holes in it.  However, I found that downloading the source trunk and looking at the extensive unit tests was a much better learning tool.  I simply loaded the unit test hierarchy into the IDE, looked for a test for the feature I wanted to use, ran it to see it work, then looked at the test code, which by definition is short and concise. I propose a study where we take two groups of developers and one large API, and task them with implementing a given application off of this API.  One group will have standard documentation, and one will have a complete set of unit tests.  Let them go and check the results.  If the unit tests turn out to be better, this would be a huge boost for the motivation for TDD.&lt;br /&gt;&lt;br /&gt;Two more quick ideas, and then I'm done.  This one relates back to finding usages of methods/classes, as was one of the prime questions asked by students in the paper's study.  Using a 'Find Usages' feature in an IDE can solve this, but it is not the most efficient when looking for loose relationships between two or more elements.  What if I wanted a tool that was "Find Usages of these TWO methods" or three or four or etc.  Basically, find the class,method, block, or statement which uses all of the given input elements.  I think this would be handy.&lt;br /&gt;&lt;br /&gt;Lastly, the paper used ArgoUML as its code base for the student tests.  The authors had the students fix bugs submitted via the ArgoUML tracker.  I wonder if there's a market for shopping out bug fixing time to ethnographic research subjects?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1993338948740549850?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1993338948740549850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1993338948740549850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1993338948740549850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1993338948740549850'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/asking-and-answering-questions-during.html' title='Asking and Answering Questions during a Programming Change Task'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5954376519103546973</id><published>2008-10-13T16:51:00.000-07:00</published><updated>2008-12-21T13:34:40.533-08:00</updated><title type='text'>Conceptual Modeling Extraveganza</title><content type='html'>Three papers concerned with conceptual modeling:&lt;br /&gt;&lt;br /&gt;First off is Ross' seminal 1977 paper &lt;span style="font-style:italic;"&gt;Structured Analysis (SA): A Language for Communicating Ideas&lt;/span&gt;.  I don't think there's much I can say about this paper that hasn't been said already, so I'll keep it short.  This paper presents the argument that "SA is the best thing since sliced bread", and continues to illustrate this point they present pretty much the entire meta-model for SA, and go though, in great detail, all the primitive constructs in the SA vocabulary.&lt;br /&gt;&lt;br /&gt;Prof. Mylopoulos wrote an interesting opinion article &lt;span style="font-style:italic;"&gt;Desert Island Column: A Trip to Carthea&lt;/span&gt; praising the previous paper's insight.  One thing that Prof. Mylopoulos brings up is that "the world consists of more than things and happenings", which seems to be something that Ross argues strongly against in his paper.  One of the cornerstones to the Ross paper was that anything worth talking about consists of 6 or fewer things and happenings.&lt;br /&gt;&lt;br /&gt;Lastly, I took a look at Jennifer's paper &lt;span style="font-style:italic;"&gt;Reflective Analysis of the syntax and Semantics of the i* Framework&lt;/span&gt;.  Now, to be honest, I would have gotten a lot more out of this if I was more familiar with the i* syntax, but the idea of reflective analysis that this paper presents could be applied to any modeling tool.  A study conducted by Horkoff et al looked at assignments and research papers in the community, and recorded the most frequent deviations from the U of T i* syntax, and proposed that these deviations were made due to non-optimal design choices in the languages syntax.&lt;br /&gt;A couple of useful results came out of this investigation.  First, the authors propose modifications to the i* syntax to address these common mistakes, and some conclusions are drawn about how users are learning i* (ie. not enough focus on areas where syntax mistakes occur).  I wonder if a similar study has been done for SA or UML, and if so what their conclusions were (ie. UML activity diagrams are never used?)&lt;br /&gt;&lt;br /&gt;Also, I was surprised to hear so many positive opinions about SADT.  In my undergrad, it was touched on briefly in a Requirements Engineering class as something that was 'old, and not used by anyone anymore'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5954376519103546973?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5954376519103546973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5954376519103546973' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5954376519103546973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5954376519103546973'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/conceptual-modeling-extraveganza.html' title='Conceptual Modeling Extraveganza'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6121395600119385677</id><published>2008-10-07T15:18:00.000-07:00</published><updated>2008-12-21T13:34:40.534-08:00</updated><title type='text'>Evaluating Effectiveness Efficiency of TDD</title><content type='html'>http://www.cs.toronto.edu/~gvwilson/reading/gupta-effectiveness-tdd.pdf&lt;br /&gt;&lt;br /&gt;Kind of a hokey paper that describes an ethnographic study done in India comparing up-front design-code process to test driven development.  Related work shows that a) tdd is more efficient, b) tdd is less efficient, and c) there is no difference, so it seems clear that there is still debate over this issue.  This paper presents evidence (not vast amounts, just more ammunition for the debate) in support of TDD, ultimately coming to the conclusion that developers will probably prefer a modified version of TDD, in which more design is done up front, but still using the test-code-refactor waltz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6121395600119385677?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6121395600119385677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6121395600119385677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6121395600119385677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6121395600119385677'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/evaluating-effectiveness-efficiency-of.html' title='Evaluating Effectiveness Efficiency of TDD'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6134526349481467072</id><published>2008-10-07T13:40:00.000-07:00</published><updated>2008-12-21T13:34:40.534-08:00</updated><title type='text'>12 Steps to Better Code</title><content type='html'>I read this one before it showed up on the reading list :)  Very good article.  If more dev shops followed Joel's 12, our job would be much more enjoyable.  Restated here for completeness, every successful software team should pass the following 12 tests:&lt;br /&gt;&lt;br /&gt;               The Joel Test&lt;br /&gt;  1. Do you use source control?&lt;br /&gt;  2. Can you make a build in one step?&lt;br /&gt;  3. Do you make daily builds?&lt;br /&gt;  4. Do you have a bug database?&lt;br /&gt;  5. Do you fix bugs before writing new code?&lt;br /&gt;  6. Do you have an up-to-date schedule?&lt;br /&gt;  7. Do you have a spec?&lt;br /&gt;  8. Do programmers have quiet working&lt;br /&gt;     conditions?&lt;br /&gt;  9. Do you use the best tools money can buy?&lt;br /&gt;10.  Do you have testers?&lt;br /&gt; 11. Do new candidates write code during their&lt;br /&gt;     interview?&lt;br /&gt;12.  Do you do hallway usability testing?&lt;br /&gt;&lt;br /&gt;If you answered 'no' to more than 2 of these, you're not doing things properly.  Pokes holes into some common patterns seen in software houses these days, like the low-walled cubicle bullpens and pushing off bugs to the end of the iteration.  I think this is one that every developer and manager should commit to memory, but I certainly wouldn't call it science.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6134526349481467072?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6134526349481467072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6134526349481467072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6134526349481467072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6134526349481467072'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/12-steps-to-better-code.html' title='12 Steps to Better Code'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4477004794785872623</id><published>2008-10-06T08:31:00.000-07:00</published><updated>2008-12-21T13:34:40.534-08:00</updated><title type='text'>Learning TDD by Counting Lines</title><content type='html'>IEEE Software May/June 2007&lt;br /&gt;&lt;br /&gt;Interesting little paper describing Nokia Networks migration from waterfall to agile, and the tools used by the group training Nokia's developers on how to use test driven development.  The exercise in question talks about the first step the new developers took in creating a program to count non-commented lines in a source file, using a TDD approach.  Start off with the low-hanging fruit (a test with an input program of one line), and scale it up until hitting a code-wall. The third movement in TDD, refactoring, is apparently often overlooked by new TDD developers (I'm guilty of this, too).  This includes not only refactoring commonalities in the test cases, but in the production code and even refactoring the design of the production code.  Emergent design, in this case, means more than just making the most logical step at each point and hoping that the best design will result.&lt;br /&gt;&lt;br /&gt;Anyway positive results on a non-statistically significant (12) number of development teams.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4477004794785872623?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4477004794785872623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4477004794785872623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4477004794785872623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4477004794785872623'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/learning-tdd-by-counting-lines.html' title='Learning TDD by Counting Lines'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1839659274646411158</id><published>2008-10-05T16:35:00.000-07:00</published><updated>2008-12-21T13:34:40.534-08:00</updated><title type='text'>Replication in Research</title><content type='html'>Just read a couple papers concerned with replicability in research.  That is, authors of academic papers publishing, along with the body of their paper, the data and code used to generate their figures and come to their conclusions.  The primary moral is this: not enough structure is in place to make authors prove that their methods actually work, but the technology to distribute the materials required to double-check their findings is widely available, just not widely used.&lt;br /&gt;&lt;br /&gt;I wonder if the previous article (size confounding metrics) has been replicated?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1839659274646411158?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1839659274646411158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1839659274646411158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1839659274646411158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1839659274646411158'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/replication-in-research.html' title='Replication in Research'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-7927154933291905860</id><published>2008-10-04T18:13:00.000-07:00</published><updated>2008-12-21T13:34:40.535-08:00</updated><title type='text'>The Confounding Effect of Class Size on the Validity of Object-Oriented Metrics</title><content type='html'>A very good paper, with significant results.  Research into metric code analysis on object-oriented programs shows that the most significant metric that can be used to infer the fragility of a class is the classes size (LOC), and that most other existing metrics are simply layers of indirection on top of class size (ie. large classes have higher coupling).  I'm not sure the actual impact this paper has had on the community, but I would think it should be fairly revolutionary.&lt;br /&gt;&lt;br /&gt;One thing that sort of rubbed me the wrong way was in the paper's introductory phases, they discussed procedural vs. object programming, and implied (with some references) that OO programs are in general harder to maintain.  I wonder about this statement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-7927154933291905860?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/7927154933291905860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=7927154933291905860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7927154933291905860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/7927154933291905860'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/10/confounding-effect-of-class-size-on.html' title='The Confounding Effect of Class Size on the Validity of Object-Oriented Metrics'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-3334204226988985740</id><published>2008-09-30T09:16:00.001-07:00</published><updated>2008-12-21T13:34:40.535-08:00</updated><title type='text'>SenseCam: A Retrospective Memory Aid</title><content type='html'>http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/04-hodges.pdf&lt;br /&gt;&lt;br /&gt;The authors of this paper illustrate the findings of the initial clinical trial of SenseCam, a small form factor camera which is worn around the neck and records still images both at regular intervals and when the device's sensors are stimulated.  This creates a pictorial record of events that happen in the wearer's immediate proximity.  The motivation for this record is to aid in rehabilitating memory loss sufferers.  The trial presented in this paper has shown a marked improvement in the cognitive ability of the test subject.  However, further clinic trials are required before a definitive statement about its merits can be made.&lt;br /&gt;&lt;br /&gt;I think that one of the most significant insights the creators of SenseCam had was that the success of the device relied critically on a small, compact form factor.  Earlier incarnations, which utilized mobile PCs carried in a backpack, would be too unusable to have a net benefit for a patient.  Ease of use is of vital importance.  Another important point in the discussion of the clinical results is that the authors make the distinction between the patient remembering the events recorded by the SenseCam instead of remembering seeing the pictures it recorded in previous sessions.  Although the patient claims to be remembering the actual events, I believe the experimental method could be altered to assert this claim more concretely.&lt;br /&gt;&lt;br /&gt;The SenseCam represents a simple enough product, and it seems obvious that it could benefit a patient suffering from a memory dysfunction.  However, before it can claim to out perform other methods, I believe further clinical study, under more controlled circumstances, needs to be carried out (it should be noted that the authors freely admit this, it is just being restated here for completeness).  Primarily, more patients need to be examined; a single case study is not sufficient.  In addition to increasing the number of subjects, the number of 'important events' recalled by each subject should be increased as well, preferably to some statistically significant level.&lt;br /&gt;&lt;br /&gt;In addition to a small sample size, there is a strong possibility that the results for the single given sample, recorded by Mr. B, may have been skewed, perhaps even unintentionally, due to the nature of Mr. B's relationship with the subject.  A more pure result would be obtained by using an impartial third party to administer the tests to Mrs. B.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-3334204226988985740?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/3334204226988985740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=3334204226988985740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3334204226988985740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3334204226988985740'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/sensecam-retrospective-memory-aid.html' title='SenseCam: A Retrospective Memory Aid'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6087891596526089518</id><published>2008-09-30T09:16:00.000-07:00</published><updated>2008-12-21T13:34:40.535-08:00</updated><title type='text'>Designing Capture Applications to Support the Education of Children with Autism</title><content type='html'>http://www.cs.toronto.edu/~khai/classes/csc2526-fall2008/readings/04-a-hayes.pdf&lt;br /&gt;&lt;br /&gt;The authors present three prototype devices for assisting caregivers dealing with children with autism (CWA).  The first, called Waldon Monitor (WM), consists of a wearable video camera and Tablet PC for observing and recording the behavior of CWA.  Secondly, the Arabis system replaces traditional pencil and paper based recording with a Tablet PC, and is used by caregivers to record a subject's performance in one-on-one testing and diagnosis. Finally, CareLog is a distributed, ubiquitous system for recording data about a child from any wireless accessible device, including a cell phone, PDA, or PC.  A therapist can record and access data using any of these devices, which is stored on a mobile storage unit that is co-located with the subject.&lt;br /&gt;&lt;br /&gt;The most insightful findings that these studies show is the importance of properly planning for complicated, multi-user interaction with their devices.  The proposed systems seem trivial (video recording unit, software for tabulating test scores, etc), until the use cases are presented, which span multiple users at different times, with very different goals for the data, potentially at different stages in the recurring care cycle.  That is, a therapist may use CareLog to record data about a CWA in an intermediate phase of the care cycle, and an analyst will use the collected data, aggregated with past results, to make a diagnosis and set goals in the early stages of the next iteration of the cycle.  &lt;br /&gt;&lt;br /&gt;One area in which the proposed devices can be improved is in CareLog's portable storage unit.  Although this is a novel approach, I believe that the same functionality could be achieved with less cost if the data were stored on a remote, web-accessible server, instead of in a device that needs to be carried around the by subject.  This way the physical hardware cost is reduced, and the subject can't loose or destroy their own data.  Also, using an existing commercial product to perform the data analysis required for these prototypes could reduce the upfront cost, making them easier to adopt by caregivers and therapists.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6087891596526089518?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6087891596526089518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6087891596526089518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6087891596526089518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6087891596526089518'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/designing-capture-applications-to.html' title='Designing Capture Applications to Support the Education of Children with Autism'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8868889534173157514</id><published>2008-09-29T10:54:00.000-07:00</published><updated>2008-12-21T13:34:40.535-08:00</updated><title type='text'>Ideas</title><content type='html'>I'm taking this opportunity to write down some ideas I had during today's talk, so that I don't forget them :)&lt;br /&gt;&lt;br /&gt;Non-standard programming interfaces - what could we do if we wrote programs in a WYSIWYG editor?  Or an auto cad type editor?  Or any domain application?  What would that be like?  Also, could you bootstrap such a system (ie. implement the non-standard language using a non-standard language)?  Intuitively not, but maybe that's why we haven't figured it out yet.&lt;br /&gt;&lt;br /&gt;Program diff - diff a program not as a text file, but as a syntatically (and semantically?) correct piece of code.&lt;br /&gt;&lt;br /&gt;Program representation - how can we represent a program other than a bunch of lines of text?  Does this apply to the previous point?&lt;br /&gt;&lt;br /&gt;BRAINSTORM!!!&lt;br /&gt;Gdankin problems!! = design patters.  According to Greg's definition (going to double check this against wikipedia in a minute), a Gdankin problem is one that results in the same solution when solved by independent domain experts. Now, as I understand it, when the gang of four first wrote Design Patterns, they analyzed large amounts of code, created by programmers in different organizations, independently of each other, and noticed that certain problems resulted in similar structures in the code.  Therefore, I propose that the Design Patterns are the common solutions to a set of fundamental Gdankin problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8868889534173157514?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8868889534173157514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8868889534173157514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8868889534173157514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8868889534173157514'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/ideas.html' title='Ideas'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8437787077556505928</id><published>2008-09-23T19:21:00.000-07:00</published><updated>2008-12-21T13:34:40.536-08:00</updated><title type='text'>The CHAOS Boondoggle</title><content type='html'>So the Standish CHAOS report was released in 1994, estimating that the majority of software projects go over-budget by 189%. The presentation of the report was questionable at best, and the data contained in it seemed inconsistent, with little more than hand-waving to back it up.&lt;br /&gt;&lt;br /&gt;Enter the second paper, Jorgensen and Molokken, actively calling out Standish on the numbers it presents.  Good for you, Jorgensen and Molokken!&lt;br /&gt;&lt;br /&gt;In the interview, the interview does a pretty weak job of grilling Standish about his numbers, and they both leave having answered very little.&lt;br /&gt;&lt;br /&gt;I'm pretty sure Standish blundered this number, and covered its tracks by a) not disclosing research methods and b) significantly altering the following year's CHAOS report.&lt;br /&gt;&lt;br /&gt;But this is all just my opinion.  I've been wrong in the past.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8437787077556505928?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8437787077556505928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8437787077556505928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8437787077556505928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8437787077556505928'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/chaos-boondoggle.html' title='The CHAOS Boondoggle'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4859930833291048585</id><published>2008-09-23T08:50:00.000-07:00</published><updated>2008-12-21T13:34:40.536-08:00</updated><title type='text'>Why Line for Java Names</title><content type='html'>WTF-J = Whyline Toolkit For Java&lt;br /&gt;&lt;br /&gt;WTMF-J = Whyline Toolkit (Multi-threaded) For Java&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4859930833291048585?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4859930833291048585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4859930833291048585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4859930833291048585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4859930833291048585'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/why-line-for-java-names.html' title='Why Line for Java Names'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5472688318895492860</id><published>2008-09-22T08:35:00.000-07:00</published><updated>2008-12-21T13:34:40.536-08:00</updated><title type='text'>Automatic Bug Triage Using Execution Trace and Ownership Vector Space</title><content type='html'>Came up with this idea by smashing together two papers from Greg's reading list.  Using this for my NSERC &amp; OGS applications, so please don't steal it :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Previously presented topics on automatic bug triage (directing bug reports to the appropriate member of the development team) showed very bright prospects, but lacked enough accuracy to make them a usable product [1].  This entry point for bug information is also an excellent location to apply any number of other filtering heuristics desired, such as the duplicate detection algorithm proposed by [2]. The method proposed in [2] requires, in addition to a natural language description of the problem, and execution trace that can be used to more quantitatively measure two, or more, bug's similarities.  I propose that the same execution trace could be used to assist in the triage functionality described by [1].  Since the vector space created by Wang et. al. to measure bug similarity is based on  function calls, a similar approach could be used, requiring the same input execution trace, to determine bug ownership.  A master vector space could be created at build time from all possible called functions in a source code repository, and assigning ownership of these functions to developers based on either activity in a source revision system, or some static assignment.  This would create volumes of ownership within the function vector space.  In theory, a bug report, assuming it is not a duplicate, should be assigned to the developer in whose volume the bug's vector terminates.  This may also have interesting and relevant applications to visualizing ownership of code, for management purposes.&lt;br /&gt;&lt;br /&gt;[1]  D. Cubranic and G. C. Murphy, "Automatic bug triage using text categorization," in Proceedings of the Sixteenth International Conference on Software Engineering &amp; Knowledge Engineering, F. Maurer and G. Ruhe, Eds., June 2004, pp. 92-97. [Online]. Available: http://www.cs.ubc.ca/labs/spl/papers/2004/seke04-bugzilla.pdf &lt;br /&gt;&lt;br /&gt;[2] X. Wang, L. Zhang, T. Xie, J. Anvik, and J. Sun, “An approach to detecting duplicate bug reports using natural language and execution information,” in Proceedings of the Thirtyth International conference on Software engineering&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5472688318895492860?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5472688318895492860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5472688318895492860' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5472688318895492860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5472688318895492860'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/automatic-bug-triage-using-execution.html' title='Automatic Bug Triage Using Execution Trace and Ownership Vector Space'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1982526861085356359</id><published>2008-09-22T07:39:00.000-07:00</published><updated>2008-12-21T13:34:40.536-08:00</updated><title type='text'>Lazy Delete for Email</title><content type='html'>So I'm going through my inbox this morning (procrastinating on my nserc application, btw), and I notice I have a lot of messages that take the form "Don't forget about &lt;insert event here&gt; on &lt;insert date here&gt;".  After reading, I don't want to delete this message, because having it in my inbox serves as a nice reminder about whatever it is I'm not supposed to forget about.  However, after a week my inbox is now clogged with messages about events that have passed.  What I would like to be able to do is, when initially reading the message, click a button next to the Delete button, lets call it Delete On ...  and then I can specify a date, so that the message will be deleted once it has become invalid.&lt;br /&gt;&lt;br /&gt;Maybe run some kind of computational linguistic method to read the message first and propose a deletion date?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1982526861085356359?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1982526861085356359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1982526861085356359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1982526861085356359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1982526861085356359'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/lazy-delete-for-email.html' title='Lazy Delete for Email'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8630374821368196151</id><published>2008-09-20T13:19:00.000-07:00</published><updated>2008-12-21T13:34:40.537-08:00</updated><title type='text'>Context Aware Communications</title><content type='html'>This paper presents research activities into the field of Context-Aware Communication, which is considered as a subset of context-aware computing applications.  The authors structure their presentation into five main categories: routing, addressing, messaging, caller awareness, and screening.  Routing involves directing communication (phone calls, text messages) to physical devices in close proximity to the callee, and has been successfully implemented by combining Xerox PARC's Etherphone and Olivetti's ActiveBadge system.  Addressing uses context information (“is this user in the building?”) to dynamically adjust traditional email mailing lists.  Messaging is similar to context-aware call routing, but will instead route text messages to any proximal device capable of displaying text information.  Caller awareness provides callers with information on their contact's context, so that they can actively choose not to call at inappropriate times.  Screening is an approach that works in contrast to caller awareness; it filters out incoming calls based on the callee's context.&lt;br /&gt;&lt;br /&gt;The authors presented several insightful technologies which were eventually adopted by modern day ubiquitous systems.  The first of note was customizable phone ringers, depending on context.  In the example, these ringers were used to distinguish callee, even though they have been successfully applied to determining caller in current applications.  MIT's Active Messenger bears a striking resemblance to modern cell phone SMS capabilities.  Also, AwareNex's context feature has been replicated in countless instant messaging systems.  A possible extension of this idea is to incorporate automatic context sensing, via ActiveBadges or some other comparable technology, into current applications which would benefit from context information, such as an instant messaging system.  Thereby, instead of manually setting one's IM status to 'on the phone', all one would have to do is simply pick up the phone.  Not sitting at your workstation would change your IM status to 'away'.&lt;br /&gt;&lt;br /&gt;The primary limiting factor in the applications presented in this paper is the technology that was available at the time it was written.  Although the devices developed successfully demonstrated the concepts intended, further effort needs to be made to make these devices more marketable before they will be widely adopted, and form the ubiquitous network required for the proposed applications.  It is entirely possible, however, that these advances have been made between the time this paper was published and present day.&lt;br /&gt;&lt;br /&gt;Also, the authors made mention of certain situations where the context-aware communication applications would, for example, hold or screen incoming traffic because the callee is at the movies or eating dinner.  This was only speculated at, because at the time of publishing the context sensing network wasn't pervasive enough to determine a user's location outside of the office (with the exception of GPS, but that won't work indoors).  I propose that this limitation should be included in future systems which can determine a users' context outside of the workplace, to add a measure of privacy to the system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8630374821368196151?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8630374821368196151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8630374821368196151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8630374821368196151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8630374821368196151'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/context-aware-communications.html' title='Context Aware Communications'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8815967437597001156</id><published>2008-09-20T13:18:00.000-07:00</published><updated>2008-12-21T13:34:40.537-08:00</updated><title type='text'>Context Aware Computing Applications</title><content type='html'>This paper presents an interesting summary of current (1994) activities in the field of context-aware applications.  This consists primarily of applications developed for the workplace which leverage the user's physical location, as well as the locations of coworkers and resources within said workplace.  The authors present four areas or application features that rely on context, implemented with Xerox PARC tabs and boards: proximate selection, automatic contextual reconfiguration, contextual information and commands, and context-triggered actions.  Proximal selection is a UI technique that visually makes objects closer to the user's physical location easier to select.  Automatic contextual reconfiguration refers to a process through which ubiquitous devices (boards, tabs, etc) can be accessed by a user simply by being in their immediate vicinity.  Contextual information and commands can be used to display default appropriate information, or alter the standard set of commands (or parameters to these commands) based on the user's location.  Lastly, context-triggered actions represent actions (in this paper, unix shell commands) that are executed by context events.  That is, when a predefined context state occurs.&lt;br /&gt;&lt;br /&gt;The application features that Schilit et. al. present in this paper have proven to be insightful in that they have found their way into many pieces of modern ubiquitous devices.  The proximal selection UI outlined bears a striking resemblance to fisheye menus, most notable found in Apple's OSX.  Automatic contextual reconfiguration performs a similar function to modern BlueTooth networks, with the exception that BlueTooth doesn't rely on a centralized network to control all devices within a building.&lt;br /&gt;&lt;br /&gt;One issue that I believe the authors may have overlooked, especially in respect to proximal selection and contextual reconfiguration is that of permissions.  In the example of a user printing a document, the closes printer may not be the optimal choice if it is a restricted resource.  Aside from this, the only element of context that the authors seemed to use was the location of individuals and resources.  Other environmental variables could be utilized to augment the function of a ubiquitous device to better suit the needs of it's user.  For example, by monitoring the ambient noise level around the user, a phone could decide change its ringer volume to match, or simply vibrate if the room is too noisy for the device to compete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8815967437597001156?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8815967437597001156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8815967437597001156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8815967437597001156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8815967437597001156'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/context-aware-computing-applications.html' title='Context Aware Computing Applications'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5707410758981540816</id><published>2008-09-18T08:11:00.000-07:00</published><updated>2008-12-21T13:34:40.537-08:00</updated><title type='text'>Debugging Reinvented: Asking and Answering Why and Why Not Questions about Program Behavior</title><content type='html'>http://www.cs.toronto.edu/~gvwilson/reading/ko-debugging-reinvented.pdf&lt;br /&gt;&lt;br /&gt;This paper is an interesting follow up to an earlier paper I read about Why Lines.  If you're not familiar, a Why Line is a debugging tool that instruments a piece of code, allows you to execute the code (for a brief time, ~ a minute), then use a custom UI to ask questions about the output (ie. Why is this circle red?).  Experimental results (on an admittedly small test size) showed dramatic improvement in debugging time.&lt;br /&gt;&lt;br /&gt;There was a paragraph in this paper that I feel the authors glossed over.  It concerned translating user submitted bug reports into Why Line questions.  My applying some computational linguistics techniques, I bet it would be possible to automatically generate one or many Why Line questions from a bug report. Combine that with the previously presented technique on automatic bug triage, and you have a system which will (in theory) automatically assign bugs to particular developers, and present them with a Why Line question that will allow them to quickly assess the problem.&lt;br /&gt;&lt;br /&gt;Also, I'm pretty sure there's something that can be gained in an organization by archiving/databasing their Why Line traces, but I'm not sure what yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5707410758981540816?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5707410758981540816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5707410758981540816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5707410758981540816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5707410758981540816'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/debugging-reinvented-asking-and.html' title='Debugging Reinvented: Asking and Answering Why and Why Not Questions about Program Behavior'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8276196590156984259</id><published>2008-09-17T13:40:00.000-07:00</published><updated>2008-12-21T13:34:40.537-08:00</updated><title type='text'>Fantastic Contraption</title><content type='html'>This is the sole reason it took me all afternoon to read Jorge's paper:&lt;br /&gt;&lt;br /&gt;http://fantasticcontraption.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8276196590156984259?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8276196590156984259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8276196590156984259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8276196590156984259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8276196590156984259'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/fantastic-contraption.html' title='Fantastic Contraption'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-693360513426248305</id><published>2008-09-17T13:06:00.000-07:00</published><updated>2008-12-21T13:34:40.538-08:00</updated><title type='text'>Anchoring and Adjustment in Software Estimation</title><content type='html'>http://www.cs.toronto.edu/~jaranda/pubs/AnchoringAdjustment.pdf&lt;br /&gt;&lt;br /&gt;This paper presented Jorge's results about anchoring and adjustment when estimating software project time consumption.  Looking back at my notes on this paper, everything seems to be presented fairly well, all the numerical results seem sound.  Couple of quick things:&lt;br /&gt;&lt;br /&gt;The Anchoring and Adjustment phenomenon is clearly observable when the problem can be expressed as a number in a range.  Can it be applied to other classes of estimations?&lt;br /&gt;&lt;br /&gt;Why is the description of COCOMO so verbose?  It don't see how it contributes to the paper, other than to demonstrate that current software estimation techniques don't work.&lt;br /&gt;&lt;br /&gt;What is a &lt;span style="font-style:italic;"&gt;null hypothesis&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;Now, I want to take this opportunity to discuss an estimation technique that a former colleague of mine once described to me:&lt;br /&gt;&lt;br /&gt;Estimating the time required to complete a software project is inherently a random activity, and it is generally accepted that estimating smaller, individual tasks within a project is more accurate than trying to estimate the project as a whole.&lt;br /&gt;&lt;br /&gt;Lets divide our hypothetical project P into n subprojects, P0 ... Pn-1.  For each of these, instead of guessing a completion time, we provide a low ball and high ball estimate (ie. P0 will definitely take more than a week, but less than 4).&lt;br /&gt;&lt;br /&gt;We take the sum of all the low ball estimates, and the sum of all the high ball estimates, and we get two figures, one for the earliest possible completion time for P and one for the latest.  While this may be sufficient for some, one further refinement is to apply a Gaussian distribution between these two figures, that way you could say with &lt;span style="font-style:italic;"&gt;some&lt;/span&gt; degree of reasoning, that project P has an 80% chance of finishing in X weeks.&lt;br /&gt;&lt;br /&gt;Ferenc, I apologize if I've gotten any of this wrong.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-693360513426248305?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/693360513426248305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=693360513426248305' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/693360513426248305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/693360513426248305'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/anchoring-and-adjustment-in-software.html' title='Anchoring and Adjustment in Software Estimation'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8594431884569405428</id><published>2008-09-16T18:20:00.000-07:00</published><updated>2008-12-21T13:34:40.538-08:00</updated><title type='text'>Google Integration and Tools</title><content type='html'>Couple of interesting google tools that I have come across in the last couple of days, probably old hat to most of you.&lt;br /&gt;&lt;br /&gt;Google Reader (http://www.google.com/reader).  This is an online, customizable RSS/Atom aggregator.  Pretty handy for keeping track of slashdot, zdnet, ieee, and, for example, 15 graduate student blogs (like this one).&lt;br /&gt;&lt;br /&gt;This last one doesn't exist yet, but I want my facebook events to be synchronized onto my google calendar.  Sounds like a rainy friday afternoon project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8594431884569405428?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8594431884569405428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8594431884569405428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8594431884569405428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8594431884569405428'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/google-integration-and-tools.html' title='Google Integration and Tools'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4855927899144431449</id><published>2008-09-16T10:45:00.000-07:00</published><updated>2008-12-21T13:34:40.538-08:00</updated><title type='text'>A Field Guide to Computational Biology</title><content type='html'>http://www.cs.toronto.edu/~lilien/CSC2431F08/readings/CompBioGuide.pdf&lt;br /&gt;&lt;br /&gt;This magazine article presents the opinion that computational biology will without a doubt be the cause of future miraculous advances in biology, disease, and gene research.  Also emphasizes that traditional biologists will have to get used to using higher level mathematics than they are used to, and much more interdisciplinary interaction with others.&lt;br /&gt;&lt;br /&gt;Good, not great.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4855927899144431449?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4855927899144431449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4855927899144431449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4855927899144431449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4855927899144431449'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/field-guide-to-computational-biology.html' title='A Field Guide to Computational Biology'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8842882752788471892</id><published>2008-09-16T10:09:00.000-07:00</published><updated>2008-12-21T13:34:40.538-08:00</updated><title type='text'>Can a Biologist Fix a Radio?</title><content type='html'>http://www.cs.toronto.edu/~lilien/CSC2431F08/readings/CanBiologistRadio.pdf&lt;br /&gt;&lt;br /&gt;Explores the idea of having a formal language for expressing biological processes and structure, using the analogy of trying to fix a radio.  An engineer would use a 'formal language' to describe the internal structure of the radio (amplifier, 10k ohm resistor, etc), and deduce the problem that way.  A biologist would likely spend years of comparative research on other working radios, classifying parts based on phenotype, etc.  This system quickly becomes too complicated for any one person to understand, primarily due to conflicting definitions of parts originating from different researchers.  The author proposes that formal methods and language for biology will make cellular analysis much easier and vastly different, in the same way PowerPoint revolutionized slide-based presentations, and that biologists much catch up or be left by the way side.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8842882752788471892?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8842882752788471892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8842882752788471892' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8842882752788471892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8842882752788471892'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/can-biologist-fix-radio.html' title='Can a Biologist Fix a Radio?'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-6488886088907866461</id><published>2008-09-15T13:33:00.000-07:00</published><updated>2008-12-21T13:34:40.539-08:00</updated><title type='text'>NaviCam</title><content type='html'>In Ubicomp today, while discussing a paper previously presented in this blog (see The Human Experience), we got to see a video of Sony's NaviCam system in action (see link http://www.sonycsl.co.jp/person/rekimoto/navi.html).  Seeing this system actually working was pretty cool, and a handful of applications extending this functionality immediately jumped to mind, all of which could be potential thesis topics, or business plans.&lt;br /&gt;&lt;br /&gt;Combining the augmented reality capabilities of the camera &amp; display setup with a wearable, glasses-based display could allow application developers (like me :P) to create real-time navigation software, meta-information pop-ups, and all kinds of cool stuff!&lt;br /&gt;&lt;br /&gt;One immediate thought that jumped to mind as a detractor was the image I had seen of some geek in the wearable computing field with a webserver in a backpack that he lugged around everywhere.  No consumer would buy that, but then I thought that if this backpack could be shrunk down to the size of an iPhone, which it almost certainly could, then this would be a viable market opportunity.&lt;br /&gt;&lt;br /&gt;One target audience for such applications would be the military.  Personnel in the field could have information on way points, location of friendly/hostile persons, radar &amp; network coverage, etc, overlayed on top of real world vision, eliminating the need for secondary maps &amp; gps devices.  And, the military's level of network connectivity is legendary, so gaining access to this information is essentially a solved problem.&lt;br /&gt;&lt;br /&gt;Iunno, just an idea.  Sounds like it would be fun to tune around in one of these sets, seeing maps and stuff overlayed on regular vision.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-6488886088907866461?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/6488886088907866461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=6488886088907866461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6488886088907866461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/6488886088907866461'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/navicam.html' title='NaviCam'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8426863722875708116</id><published>2008-09-14T20:23:00.000-07:00</published><updated>2008-12-21T13:34:40.539-08:00</updated><title type='text'>Gregory D. Abowd et. al. The Human Experience</title><content type='html'>Gregory D. Abowd et. al. present a follow-up to Weiser's The Computer for the 21st Centry.  In this paper, the authors closely examine some of the ideas proposed by Weiser, and explore the changes in traditional design and development patterns needed to adopt ubiquitous applications.  This is loosely broken down into three categories: defining physical interaction models to and from ubiquitous computing devices, discovering ubiquitous computing application features, and evolving the methods for evaluating human experiences with ubicomp.  The physical interaction problem examines new ways to gather input from a user, beyond simple keyboard/mouse combinations.  This includes gesture-based  and implicit input.  Also, non-standard output methods are explored, different from the traditional video display (ex. Ambient output).  Utilizing these non-standard IO methods to create a 'killer app' is the next challenge the authors discuss.  Applications which use the user's context (location, identity, etc) as input for providing useful features, as well as relative changes in context, are discussed.  The use of changes in context lead to the problem of continuous input, whereby applications must respond to constant subtle input from users over extended, possibly infinite, time frames.  This is in sharp contrast to current application mentalities, which are meant for discrete usage sessions (ie. Word processor).  Lastly, the authors propose that traditional HCI evaluation techniques will be at a disadvantage when used with ubiquitous computing applications, and so they introduce three new cognition models: Activity Theory, Situated Activity, and Distributed Cognition.&lt;br /&gt;&lt;br /&gt;This paper provided several  new examples of ubiquitous computing devices and applications, and served to 'pin down' some of the specific details that Weiser left for further research. The showcase of new devices and technologies clearly illustrates the path of development between the time the Weiser paper was published (1991) and 'present' (2002).  One noteworthy insight presented by Abowd et. al. is that of the physical means of interaction with ubiquitous devices, drawing particular attention to 'implicit input'.  It seems apparent that the future of the embodied virtuality will not be interfaced with a keyboard and mouse, and the devices presented in The Human Experience demonstrate subtle input and output methods (ex. Network traffic monitor) which clearly show success.&lt;br /&gt;&lt;br /&gt;Although this paper provided excellent insight into the concepts previously proposed by Weiser, I feel that it didn't introduce as much original work as could be possible.  It can be argued that this was the purpose of the paper, in which case it has succeeded.  However, I feel it may have contributed more value to the scientific community had it contained more unique ideas.  Apart from this, the paper presented a discussion of using ubiquitous computing applications to perform one of the fundamental activities humans perform on a daily basis: capture and access of data.  That is, the recording of information presented by a colleague and summarizing it for later retrieval.  It is my opinion (and this clearly is not, nor should it be, shared by all) that automating a fundamental process such as this will contribute to a strong dependence on said application,  reducing an individual's ability to be self reliant.  In addition, it is not beyond the realm of possibility that regularly exercising the intellectual system by absorbing and recording information in this way is beneficial, and  removing the need for this exercise could have negative impacts on cognitive ability.  This, however, just just my opinion.  This represents an area of further research, which should be pursued with as much importance as the technical developments in the field of ubicomp (that is, the implications of ubiquitous devices).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8426863722875708116?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8426863722875708116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8426863722875708116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8426863722875708116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8426863722875708116'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/gregory-d-abowd-et-al-human-experience.html' title='Gregory D. Abowd et. al. The Human Experience'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-5982984359498649647</id><published>2008-09-14T20:22:00.000-07:00</published><updated>2008-12-21T13:34:40.539-08:00</updated><title type='text'>Mark Weiser's The Computer for the 21st Centry</title><content type='html'>The paper by Mark Weiser presents the current (as of time of publishing, 1991) efforts of Xerox PARC in the field of ubiquitous computing devices and applications, and follows this with speculation/projection of possible future scenarios.  At time of publishing, these devices were divided into three classifications: tabs, pads, and boards.  A tab is similar in size and function to a post-it note, except that it contains a dynamic display.  A pad can be thought of as a scrap piece of paper, but again with a dynamic display and stylus-based interface.  A board functions like a dynamic white board, or any large display.  The intermixed use of these three classes of devices, the author argues, will form the basis of the future of ubiquitous computing in the “embodied virtuality”.  Extrapolation on trends in technology evolution suggests that it would be capable to implement Weiser's embodied virtuality in the not-too-distant future.&lt;br /&gt;&lt;br /&gt;I found the discussion of 'current' technology and research into ubiquitous computing devices quite interesting.  I was previously unaware of the efforts of Xerox PARC toward these ends.  The details of these devices operation, at the time, were a major innovations and greatly enhanced the field of computing.  Also, the author presents a very insightful discussion on how reading became a ubiquitous technology, and how this can be used to define computing (ie. Anywhere you currently read, you could potentially compute as well).  This idea, coming from the father of ubicomp, is of enormous significance to the scientific community.  The paper mentions that this idea of ubiquity, in the same way as reading, means a drastic change in not only application features, but methods for measuring terse human actions which will eventually define the features of ubiquitous applications.&lt;br /&gt;&lt;br /&gt;While the majority of Weiser's paper was interesting and beneficial to the scientific community, there were some holes which needed to be filled in before ubiquitous computing can fully take hold.  The issue of privacy and security is one which I feel requires further investigation.  The proposal to have relatively loose security seems like a bad idea to me.  For example, in a current system, it is impossible to 'break in', until someone finds a way never thought of by the developers of the system.  This makes Weiser's argument that someone can 'break in', but it is impossible to be unnoticed, invalid.  This presents a possible area of further research: how to guarantee that an unwanted intruder can leave 'fingerprints' which can readily be discovered.  Also, if embodied virtuality were to be implemented, I believe much more emphasis should be placed on an individual's privacy than is proposed in The Computer for the 21st Century.  Simply having a system that knows where an individual is located at all times represents a serious invasion of privacy.  I would propose a system where an individual can disconnect themselves from the ubiquitous network, should they so desire, and possible 'black-out' zones, in which no ubiquitous devices will operate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-5982984359498649647?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/5982984359498649647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=5982984359498649647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5982984359498649647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/5982984359498649647'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/mark-weiser-computer-for-21st-centry.html' title='Mark Weiser&amp;#39;s The Computer for the 21st Centry'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1362894090215421496</id><published>2008-09-14T20:15:00.000-07:00</published><updated>2008-12-21T13:34:40.539-08:00</updated><title type='text'>A Reference Architecture for Web Servers</title><content type='html'>Don't let this paper's name fool you, this one is (at least in my opinion) presenting a &lt;span style="font-style:italic;"&gt;process&lt;/span&gt; for semi-automatically generating reference architectures for any established domain, not just web servers.  Having said that, a lot of really interesting, useful information is presented about three popular servers: Apache, AOL, and Jigsaw.  Not particularly deep, however.  The methods for automatically generating the architecture were glossed over, as the authors were using an existing tool.  Next, they simply refined the architecture until it fit the 3 example architectures.  I think it could use more meat.  Still, a very interesting (and dare I say,entertaining) read, especially if you're familiar with the web domain.&lt;br /&gt;&lt;br /&gt;Oh, and there were no 'results', per se.  Wonder if they should have some.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1362894090215421496?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1362894090215421496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1362894090215421496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1362894090215421496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1362894090215421496'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/reference-architecture-for-web-servers.html' title='A Reference Architecture for Web Servers'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-189112645830727138</id><published>2008-09-14T19:57:00.000-07:00</published><updated>2008-12-21T13:34:40.540-08:00</updated><title type='text'>Applying Complexity Metrics to Measure Programmer Productivity in HPC</title><content type='html'>This paper is based around a fairly ambitious task: to measure programmer productivity.  As far as I understand it, measuring productivity of a worker outside of an assembly line scenario has been an open topic for as long as there have been assembly lines.  Despite that, the authors discuss the set of tools they have used to instrument programmer's workstations, and compare and contrast differing methods of performing the same task; from a command line interface and from a GUI.  Much to everyone's surprise, the GUI was quicker and easier to use!! (insert sarcasm)  The two methods are measured using a metric devised by the authors, which it seems to me suffers from the same problems as the paper on Measuring Configuration Complexity I read earlier last week; the outcome depends wholly on the heuristics used to define and quantize a single step in work (or configuration), which is still a very open research problem.   Also, one of the fundamental assumptions used to build the paper's heuristics, that more steps equals more complexity, is disproved by example in the paper's final movement!  Overall, a valiant attempt, but I don't think I would endorse this one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-189112645830727138?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/189112645830727138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=189112645830727138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/189112645830727138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/189112645830727138'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/applying-complexity-metrics-to-measure.html' title='Applying Complexity Metrics to Measure Programmer Productivity in HPC'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-2364924853169761602</id><published>2008-09-14T10:21:00.000-07:00</published><updated>2008-12-21T13:34:40.540-08:00</updated><title type='text'>Agile Software Testing in a Large Scale Project</title><content type='html'>A fantastic article!  This paper presents the findings of a team of developers employed by the Israeli Air Force.  This team began the project with very strong focus on Agile processes, particularly TDD and short iteration lengths (at least these are the ones that stuck with me).  This team has, self admittedly (at time of publish), one of the most complete sets of data recording an Agile project from inception to delivery.  The results show a project which appears to have been run rather smoothly; the up-front testing influenced the amount of defects (compared to what previous result, though?)&lt;br /&gt;&lt;br /&gt;More opinions, to be continued ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-2364924853169761602?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/2364924853169761602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=2364924853169761602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2364924853169761602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/2364924853169761602'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/agile-software-testing-in-large-scale.html' title='Agile Software Testing in a Large Scale Project'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-4357035617742423213</id><published>2008-09-14T09:22:00.000-07:00</published><updated>2008-12-21T13:34:40.540-08:00</updated><title type='text'>In Praise of Tweaking</title><content type='html'>This paper presents the results of the second annual Matlab tweaking competition.  In this contest, users are tasked with solving an algorithmic problem while minimizing a 'score' created by composing various metrics about the algorithm's performance, such as speed and resources consumed.  All submitted algorithms are immediately available to all other contestants, and so a new solution can (and is encouraged) to be created by 'tweaking' someone else's work.  In this way, programmers are encouraged to adopt  a greater community-centered process.&lt;br /&gt;&lt;br /&gt;Although the idea presented was intriguing, this is a magazine article and contributes little to the scientific community.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-4357035617742423213?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/4357035617742423213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=4357035617742423213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4357035617742423213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/4357035617742423213'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/in-praise-of-tweaking.html' title='In Praise of Tweaking'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-8532643800601363471</id><published>2008-09-14T09:16:00.000-07:00</published><updated>2008-12-21T13:34:40.540-08:00</updated><title type='text'>Storytest Driven Development</title><content type='html'>Started off promising, but didn't really deliver.  Who writes these story tests?  I don't think a customer alone will go though the effort of formalizing the requirements using FitLibrary, but the developer shouldn't be writing them alone, either, because he shouldn't be deciding the requirements of the system.  Became harder to follow as it progressed (lots of flipping between figures and paragraphs of text).  Also, where are the results?  The idea of story tests is presented well enough ,but its not novel, and there is not indication in this paper of who actually uses this approach.  Maybe I'm being too picky or it is too late at night.  Maybe read this one again later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-8532643800601363471?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/8532643800601363471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=8532643800601363471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8532643800601363471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/8532643800601363471'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/storytest-driven-development.html' title='Storytest Driven Development'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-3144069913451410670</id><published>2008-09-14T09:15:00.000-07:00</published><updated>2008-12-21T13:34:40.541-08:00</updated><title type='text'>Automatic Bug Triage Using Text Categorization</title><content type='html'>An &lt;span style="font-weight:bold;"&gt;extremely&lt;/span&gt; fascinating topic concerned with improving development process, not only in open-source projects, but in any project with a reasonably sized team and automatic bug tracking.  A real money saver!  A well presented paper (even though I got sort of lost in the details of the Bayesian algorithm).  Results were presented clearly, even if they weren't as accurate as the authors would have liked.  No effort is made to disguise the inaccuracy of the method.  I think this idea is worth looking at, just need to swap out the Bayesian algorithm for one that actually works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-3144069913451410670?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/3144069913451410670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=3144069913451410670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3144069913451410670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/3144069913451410670'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/automatic-bug-triage-using-text.html' title='Automatic Bug Triage Using Text Categorization'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-1765642084391923648</id><published>2008-09-14T09:13:00.000-07:00</published><updated>2008-12-21T13:34:40.541-08:00</updated><title type='text'>Presentations by Programmers for Programmers</title><content type='html'>Sounds like a very useful tool (gives the ability to queue up a live IDE session, with the UI tuned for a presentation, along side other presentation materials such as PowerPoint slides).  I'm a bit skeptical as to whether the up-front cost of setting up this queue is worth the added visual appeal during the presentation (would have to be more of a formal programmer-to-programmer presentation, like in a conference).  Combined some existing products to create this.  However, where are the results?  There is no study or empirical evidence to support that this product is actually useful.  I would classify this as a report on a new product, not necessarily a research paper.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-1765642084391923648?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/1765642084391923648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=1765642084391923648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1765642084391923648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/1765642084391923648'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/presentations-by-programmers-for.html' title='Presentations by Programmers for Programmers'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-894819456753137522</id><published>2008-09-14T09:06:00.000-07:00</published><updated>2008-12-21T13:34:40.541-08:00</updated><title type='text'>An Approach to Benchmarking Configuration Complexity</title><content type='html'>An interesting idea; this paper attempts to quantitatively measure the effort required to properly configure a new piece of software.  In their example, they use a web container.  This could provide a way to measure, and presumably, compare the configuration effort required between different products.  The problem I found with this method was that the fundamental step in the process, determining the atomic configuration actions and assigning probability of failure to them, is an open research problem, and so the results reported in this paper are speculation based on hand-tuned data.  Seems like they tried to slip this one past me.&lt;br /&gt;Also, really bad graphs and mislabeled figures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-894819456753137522?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/894819456753137522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=894819456753137522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/894819456753137522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/894819456753137522'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/approach-to-benchmarking-configuration.html' title='An Approach to Benchmarking Configuration Complexity'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7723706839198721393.post-107298739983746139</id><published>2008-09-14T08:30:00.000-07:00</published><updated>2008-12-21T13:34:40.541-08:00</updated><title type='text'>Inaugural Post</title><content type='html'>&lt;title&gt;&lt;/title&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 2.4  (Win32)"&gt;&lt;style type="text/css"&gt; 	&lt;!-- 		@page { size: 8.5in 11in; margin: 0.79in } 		P { margin-bottom: 0.08in } 	--&gt; 	&lt;/style&gt; &lt;p style="margin-bottom: 0in;"&gt;So this is the first post on my shiny new blog.  I tried blogging once before, but it was pretty much just an exercise in setting up a persistent web container on my own hardware, and seeing how long it took for me to get bored of it.  Two weeks.  Now, seeing as I have neither the time nor the inclination to run dedicated web hardware, I'm using blogger.&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;What will follow will be a series of short posts containing my opinions of papers I'm currently reading.  Enjoy :)&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7723706839198721393-107298739983746139?l=rorytulk.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rorytulk.blogspot.com/feeds/107298739983746139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7723706839198721393&amp;postID=107298739983746139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/107298739983746139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7723706839198721393/posts/default/107298739983746139'/><link rel='alternate' type='text/html' href='http://rorytulk.blogspot.com/2008/09/inaugural-post.html' title='Inaugural Post'/><author><name>Rory Tulk</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
