<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MarkUs Blog</title>
	<atom:link href="http://blog.markusproject.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.markusproject.org</link>
	<description>MarkUs Developers Blog About Their Project</description>
	<lastBuildDate>Tue, 09 Feb 2010 05:24:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ruby on Rails (RoR) from a Java programmer&#8217;s perspective</title>
		<link>http://blog.markusproject.org/?p=1180</link>
		<comments>http://blog.markusproject.org/?p=1180#comments</comments>
		<pubDate>Tue, 09 Feb 2010 04:40:31 +0000</pubDate>
		<dc:creator>bryanshen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1180</guid>
		<description><![CDATA[Java is a static-typed language, and every variable, method and class is explicitly defined. It&#8217;s very easy to find their definition with a little help from IDE.
When I started to program Markus in RoR, I still think in the Java way, and find something very confusing. Here is some code I saw in Assignment class:



# [...]]]></description>
			<content:encoded><![CDATA[<p>Java is a static-typed language, and every variable, method and class is explicitly defined. It&#8217;s very easy to find their definition with a little help from IDE.</p>
<p>When I started to program Markus in RoR, I still think in the Java way, and find something very confusing. Here is some code I saw in Assignment class:</p>
<pre>
<pre class="brush: ruby; ">

# Are we past the due date for this assignment?
class Assignment &lt; ActiveRecord::Base
 # some code here

 def past_due_date?
    return !due_date.nil? &amp;amp;amp;&amp;amp;amp; Time.now &gt; due_date
 end

 # some code here
end
</pre>
</pre>
<p>I was curious of what &#8220;due_date&#8221; is, so I naturally did an &#8220;Open Declaration&#8221; in Eclipse IDE, which gave me no feedback at all. This happens because RoR types are dynamic, and type information is not available until run-time.</p>
<p>Then I searched for &#8220;due_date&#8221; across the whole project, and found some references of &#8220;due_date&#8221; but no definition of it at all.</p>
<p>What is it? Is it an instance variable? No, the name of an instance variable always begins with &#8220;@&#8221;. Is it a local variable? No, local variable should be initialised before being used. It should be a method. Yes, it&#8217;s a method, but where is it defined?</p>
<p>After turning to Mike and Severin, I eventually understood that &#8220;due_date&#8221; was not defined explicitly. It was created by ActiveRecord. ActiveRecord noticed that &#8220;due_date&#8221; was a column in the database table associated with Assignment, and therefore creates the &#8220;due_date&#8221; method (getter and setter) automatically. <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/wiki/schema_diagram">[The database schema]</a></p>
<p>This seems incredible to a Java programmer. In Java, a method should be explicitly defined before you use it. But in RoR, you don&#8217;t necessarily have to define a method to use it &#8211; methods can be created at run-time. Finally I realised this is why we call RoR &#8220;dynamic&#8221;. And for the first time I see the benefit of being dynamic: the chunky data-object mapping code is eliminated by the magic of dynamic!</p>
<p>Next time, when you cannot find the definition of something, don&#8217;t be panic, but think &#8220;dynamic&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1180</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meeting Minutes</title>
		<link>http://blog.markusproject.org/?p=1175</link>
		<comments>http://blog.markusproject.org/?p=1175#comments</comments>
		<pubDate>Fri, 05 Feb 2010 21:54:09 +0000</pubDate>
		<dc:creator>jmate</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Meetings]]></category>
		<category><![CDATA[Minutes]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1175</guid>
		<description><![CDATA[The IRC log can be found at: http://www.cs.toronto.edu/~mconley/irc/markus/markus20100205_pg1.html
Brian Xu fixed three bugs:
512 -  UI: Show the graders name in the graders drop down &#8212;- http://review.markusproject.org/r/370/
531 &#8211; Graders need a way of &#8220;un-setting&#8221; Criteria &#8212;- http://review.markusproject.org/r/369/
571 &#8211; Edit Student: &#8220;Cancel&#8221; button links to something wrong &#8212;- http://review.markusproject.org/r/371/
Bryan Shen closed: #393. multi-level folder not allowed. Bryan also [...]]]></description>
			<content:encoded><![CDATA[<p>The IRC log can be found at: <a href="http://www.cs.toronto.edu/~mconley/irc/markus/markus20100205_pg1.html">http://www.cs.toronto.edu/~mconley/irc/markus/markus20100205_pg1.html</a></p>
<p>Brian Xu fixed three bugs:<br />
<a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/512">512 -  UI: Show the graders name in the graders drop down</a> &#8212;- http://review.markusproject.org/r/370/<br />
<a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/531">531 &#8211; Graders need a way of &#8220;un-setting&#8221; Criteria</a> &#8212;- http://review.markusproject.org/r/369/<br />
<a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/571">571 &#8211; Edit Student: &#8220;Cancel&#8221; button links to something wrong</a> &#8212;- http://review.markusproject.org/r/371/</p>
<p>Bryan Shen closed: <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/393">#393. multi-level folder not allowed</a>. Bryan also plans to blog about some things he has learned from working on Markus.</p>
<p>Brian Xu and Bryan Shen plan to get together and discuss how they are going to complete the flexible grading scheme.</p>
<p>Farah plans to return to working on the grade entry. She will update the review board so we can make comments on the code. The functional tests are still in the works.</p>
<p>Joseph has completed <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/564">564 &#8211; Validate files with a path with a space and check configuration on startup</a> &#8212;- http://review.markusproject.org/r/358/. He hopes to get some time next week to look at will_paginate.</p>
<p>jerboaa figure out that urgent issue that arrived on February 4th.</p>
<blockquote><p>Mike, feel free to assign this bug to someone else.  Everyone else, feel free to jump on it. <img src='http://blog.markusproject.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The Download Detailed Criteria produces a stack trace when grace days are allowed.  It works when there are no grace days.</p>
<p>undefined method `find_by_rubric_criterion_id&#8217; for #&lt;Class:0xb6e475f8&gt;<br />
RAILS_ROOT: /data/markus/instance/csc209-2010-01</p>
<p>Application Trace | Framework Trace | Full Trace<br />
/u/drprj/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:1842:in `method_missing_without_paginate&#8217;<br />
/u/drprj/.gem/ruby/1.8/gems/will_paginate-2.3.11/lib/will_paginate/finder.rb:170:in `method_missing&#8217;<br />
/u/drprj/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/associations/association_collection.rb:380:in `send&#8217;<br />
/u/drprj/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/associations/association_collection.rb:380:in `method_missing_without_paginate&#8217;<br />
/u/drprj/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2143:in `with_scope&#8217;<br />
/u/drprj/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/associations/association_proxy.rb:206:in `send&#8217;<br />
/u/drprj/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/associations/association_proxy.rb:206:in `with_scope&#8217;<br />
/u/drprj/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/associations/association_collection.rb:376:in `method_missing_without_paginate&#8217;<br />
/u/drprj/.gem/ruby/1.8/gems/will_paginate-2.3.11/lib/will_paginate/finder.rb:170:in `method_missing&#8217;<br />
/data/markus/instance/csc209-2010-01/app/models/assignment.rb:400:in `get_detailed_csv_report&#8217;<br />
/data/markus/instance/csc209-2010-01/app/models/assignment.rb:399:in `get_detailed_csv_report&#8217;<br />
/data/markus/instance/csc209-2010-01/app/models/assignment.rb:384:in `each&#8217;<br />
/data/markus/instance/csc209-2010-01/app/models/assignment.rb:384:in `get_detailed_csv_report&#8217;<br />
/data/markus/instance/csc209-2010-01/app/models/assignment.rb:383:in `get_detailed_csv_report&#8217;<br />
/data/markus/instance/csc209-2010-01/app/controllers/submissions_controller.rb:431:in `download_detailed_csv_report&#8217;</p>
<p>Thanks,<br />
Karen</p></blockquote>
<p>Robert finished off the tests for the random Grader assignment. He plans to work on issue <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/569">569 &#8211; Investigate possible Grader Assignment problem</a> by manually hammering on the grader assignments to see if they always update correctly onscreen.</p>
<p>He also plans to work on <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/559">559 &#8211; Allow Rubric Weightings to be 0 or negative</a>. However, Karen would like to discuss how it should be done with Byron. Mike believes that Byron will be able to use the Flexible Criteria if we push hard enough.</p>
<p>Mike will be running next week&#8217;s meeting. Additionally, Karen would like to have a meeting on the reading week&#8217;s Friday Feb 19th.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<h2 class="summary">UI: Show the graders name in the graders drop down</h2>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1175</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feb. 5th Status Update</title>
		<link>http://blog.markusproject.org/?p=1169</link>
		<comments>http://blog.markusproject.org/?p=1169#comments</comments>
		<pubDate>Fri, 05 Feb 2010 05:53:43 +0000</pubDate>
		<dc:creator>Farah Juma</dc:creator>
				<category><![CDATA[Status Reports]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1169</guid>
		<description><![CDATA[Robert
Status

 Shipped fix for 510 for release 0.6
 Invited down to California for Facebook interviews. [Yay!]
Kept up with discussion on reviews.

Next Steps

Determine if my fix for 510 also resolves issue 569 for occasional non updates of grader assignments.
Find more time to work on MarkUs. This should arrive next Thursday, and during reading week.

Roadblocks

Lack of time [...]]]></description>
			<content:encoded><![CDATA[<h2>Robert</h2>
<h3>Status</h3>
<ul>
<li> Shipped fix for 510 for release 0.6</li>
<li> Invited down to California for Facebook interviews. [Yay!]</li>
<li>Kept up with discussion on reviews.</li>
</ul>
<h3>Next Steps</h3>
<ul>
<li>Determine if my fix for 510 also resolves issue 569 for occasional non updates of grader assignments.</li>
<li>Find more time to work on MarkUs. This should arrive next Thursday, and during reading week.</li>
</ul>
<h3>Roadblocks</h3>
<ul>
<li>Lack of time due to interviews and other classes. 4 interviews with Amazon this week.</li>
<li>Unable to conduct code reviews on many changes this week.</li>
</ul>
<h2>Mike</h2>
<h3>Status</h3>
<ul>
<li>Reviewed a bunch of code</li>
<li>Wrote a handy-dandy script that lets me test drive diffs-for-review quickly and easily.  See <a href="http://mikeconley.ca/blog/2010/02/02/pre-commit-code-review-in-markus-development/">http://mikeconley.ca/blog/2010/02/02/pre-commit-code-review-in-markus-development/</a> towards the bottom.  I&#8217;m going to polish this tool up and upload it somewhere if people are interested in using it.</li>
<li>Answered some emails, commented on the blog, tried to be helpful</li>
</ul>
<h3>Next Steps</h3>
<ul>
<li>Look into Details CSV Report issue that Karen and Byron are having</li>
<li>Upon (hopefully) fixing above, prepare patch (possibly including other fixes for 0.6 that have been committed)</li>
<li>Review more code.</li>
<li>Answer any more questions that people have.  Fire away!</li>
</ul>
<h3>Roadblocks</h3>
<ul>
<li>These past two weeks have been super busy.  I have a feeling my two courses this semester are synchronized to bring the pain simultaneously. <img src='http://blog.markusproject.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />   Coming up to a rest point though.</li>
</ul>
<h2>Bryan</h2>
<h3>Status</h3>
<ul>
<li>Wrote my first unit tests!</li>
<li>Closed #393 (&#8221;Repository folder does not allow paths such as &#8220;test/path1&#8243;, <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/393">393</a>)</li>
<li>Reviewed some code</li>
</ul>
<h3>Next Steps</h3>
<ul>
<li>Work on <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/418">#418</a>: Changing an assignment&#8217;s due date doesn&#8217;t update the SubmissionRule&#8217;s cache</li>
<li>Write a blog to share my newbie experiences</li>
<li>Gain more RoR knowledge</li>
</ul>
<h3>Roadblocks</h3>
<ul>
<li>There was an essay that took me almost two days!</li>
</ul>
<h2>Victoria</h2>
<h3>Status</h3>
<ul>
<li>Completed MarkUs Usability and Interface Design Plan.</li>
</ul>
<h3>Next Steps</h3>
<ul>
<li>Start prototyping for the group formation tab.</li>
</ul>
<h3>Roadblocks</h3>
<ul>
<li>None</li>
</ul>
<h2>Joseph</h2>
<h3>Status</h3>
<ul>
<li>I completed all the requests from the review. We are not longer<br />
escaping the validate script for the user. I have figured out a way to<br />
check for a validate script that does not have the spaces escaped by<br />
looking at the error code from p.open and then $?</li>
<li>I found a second bug that I will write a blog post about so I can<br />
get into details and give code examples with pretty highlights</li>
</ul>
<h3>Next Steps</h3>
<ul>
<li>Check-in the stuff I talked about above</li>
<li>Still need to look at will_paginate</li>
</ul>
<h3>Roadblocks</h3>
<ul>
<li>Next week is an extremely busy week</li>
</ul>
<h2>Farah</h2>
<h3>Status</h3>
<ul>
<li>Didn&#8217;t get much time to work on MarkUs this week because I had three assignments due</li>
</ul>
<h3>Next Steps</h3>
<ul>
<li>Will spend extra time on MarkUs this weekend and next week</li>
<li>Finish functional tests for the grades table and submit a review request</li>
<li>Work on the student UI</li>
</ul>
<h3>Roadblocks</h3>
<ul>
<li>My other courses took up most of my time this week</li>
</ul>
<h2>Brian</h2>
<h3>Status</h3>
<ul>
<li>Ticket 531,571,512 done</li>
<li>Start to work on UI issue now</li>
</ul>
<h3>Next Steps</h3>
<ul>
<li>finish test cases of above ticket</li>
<li>write a blog to summary up a few discoveries</li>
</ul>
<h3>Roadblocks</h3>
<ul>
<li>Intensive reading of papers</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1169</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MarkUs Usability and Interface Design Plan</title>
		<link>http://blog.markusproject.org/?p=1153</link>
		<comments>http://blog.markusproject.org/?p=1153#comments</comments>
		<pubDate>Thu, 04 Feb 2010 02:03:22 +0000</pubDate>
		<dc:creator>Victoria</dc:creator>
				<category><![CDATA[Usability]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1153</guid>
		<description><![CDATA[Section A: Project-wide
 
Topic A1:  Upload/Download CSV file – Replace Accordion Menu with Button + Modal Dialogue
Description: To replace the current accordion menu upload/download options with upload and download buttons running along the top of the view.  Let&#8217;s call these &#8220;Action Buttons&#8221;.
Next Steps:

These action buttons will spawn a modal dialogue (similar to the interface we [...]]]></description>
			<content:encoded><![CDATA[<h2><strong><span style="color: #af084b;">Section A: Project-wide</span></strong></h2>
<p><strong> </strong></p>
<h3><strong>Topic A1:  Upload/Download CSV file – Replace Accordion Menu with Button + Modal Dialogue</strong></h3>
<p><span style="text-decoration: underline;">Description</span>: To replace the current accordion menu upload/download options with upload and download buttons running along the top of the view.  Let&#8217;s call these &#8220;Action Buttons&#8221;.</p>
<p><span style="text-decoration: underline;">Next Steps</span>:</p>
<ul>
<li>These action buttons will spawn a modal dialogue (similar to the interface we currently have for adding a new student to a group in the <em>Groups &amp; Graders</em> view), where the user can specify the location of the CSV file to upload or download.</li>
<li>To avoid confusion and maintain consistency, will have to apply this migration throughout the entire project.</li>
</ul>
<p><span style="text-decoration: underline;">Rationale</span>: Having the accordion menu on the side will greatly affect the readability of the 2-pane Assign Graders view.  Also, the accordion menu has caused confusion amongst users in the past, so switching to modal dialogues may improve the usability of MarkUs as a whole.</p>
<h3><strong>Topic A2:  Reorganize Action Links &amp; Action Buttons</strong></h3>
<p><span style="text-decoration: underline;">Note</span>:  <em>&#8220;Action Links&#8221; refer to the action items to the right of the page header located at the top of every view.</em></p>
<p><span style="text-decoration: underline;">Description</span>: Current prototype inherits action links from the existing release of MarkUs.  However, if we were to replace the accordion menu with action buttons running along the top of the view (right-to-left), these may interfere with the existing action links we already have running from the left to the right.</p>
<p><span style="text-decoration: underline;">Next Steps</span>: Compile a list of action links and buttons that we will have for each view.  Analyze the list and see how we can categorize, trim down, or reorganize the layout of these options.</p>
<p><span style="text-decoration: underline;">Rationale</span>: As mentioned in the description, the left-to-right action links may potentially interfere with the right-to-left action buttons.</p>
<p><span id="more-1153"></span></p>
<hr size="2" /><strong> </strong></p>
<h2><strong><span style="color: #af084b;">Section B: Assign Graders Tab</span></strong></h2>
<p><strong><span style="color: #af084b;"> </span></strong></p>
<h3><strong>Topic B1:  Do Not Need a Review/Read-Only Mode</strong></h3>
<p><span style="text-decoration: underline;">Description</span>: In the prototype, users are automatically put into a read-only mode so they can view existing grader-to-group assignments.</p>
<p><span style="text-decoration: underline;">Next Steps</span>: Users will now be automatically put into the edit mode where they can create new grader-to-group assignments and make changes to the existing ones.</p>
<p><span style="text-decoration: underline;">Rationale</span>: Typically, users only use the Assign Graders feature during the initial setup/creation of a new assignment.  And if they were to revisit this view, it would probably be to make changes to the current grader-to-group assignments.</p>
<h3><strong>Topic B2: </strong> <strong>Allow for Multiple Grader Selection</strong></h3>
<p><span style="text-decoration: underline;">Description</span>:  In the current prototype, more than one grader can be selected in the <em>Graders</em> pane.  But do we have use cases where more than one grader would be assigned to the same group of students?  Should these checkboxes be radio buttons instead?</p>
<p><span style="text-decoration: underline;">Next Steps</span>:  Keep the checkboxes and allow for multiple users to be selected!</p>
<p><span style="text-decoration: underline;">Rationale</span>:  It’s very possible that more than one grader would be assigned to the same group of students.  Also, we will be implementing a feature that helps the user evenly distribute selected groups amongst selected graders.</p>
<h3><strong>Topic B3:  Introduce “Select All” and “Clear All” Buttons</strong></h3>
<p><span style="text-decoration: underline;">Description</span>:  These were not introduced in the current prototype.</p>
<p><span style="text-decoration: underline;">Next Steps</span>:  Need to add “Select All” and “Clear All” options for both the <em>Graders</em> pane and the <em>Groups</em> pane.</p>
<p><span style="text-decoration: underline;">Rationale</span>:  User(s) most likely wouldn’t want to manually select all the graders and/or groups.</p>
<h3><strong>Topic B4:  Evenly Distribute Selected Groups Amongst Selected Graders</strong></h3>
<p><span style="text-decoration: underline;">Description</span>:  As mentioned in Topic B2, the current prototype does not support this feature.  We will be adding this feature, but how should this be implemented?</p>
<p><span style="text-decoration: underline;">Next Steps</span>:  Possibilities:</p>
<ul>
<li>Have a button that allows users to select the next <em>n</em> groups that they would like to assign graders to.</li>
<li>Select a set of graders and evenly distribute the (selected) groups sequentially or randomly amongst them.</li>
</ul>
<p><span style="text-decoration: underline;">Rationale</span>:  A useful feature that is implemented in the current release of MarkUs, and is one that we will definitely want to keep.</p>
<h3><strong>Topic B5:  Include Graders’ Full Names (In Addition to User IDs)</strong></h3>
<p><span style="text-decoration: underline;">Description</span>: (Feature Request) The existing release of MarkUs only lists the user IDs of the graders in the <em>Groups &amp; Graders</em> view.  With a large number of graders, it becomes hard to differentiate between graders solely by their user IDs.</p>
<p><span style="text-decoration: underline;">Next Steps</span>: Add full names of graders to the <em>Graders</em> pane.</p>
<p><span style="text-decoration: underline;">Rationale</span>: To make it easier for users (in particular, instructors) to differentiate between graders.</p>
<hr size="2" /><strong> </strong></p>
<h2><strong><span style="color: #af084b;">Section C: Group Formation Tab</span></strong></h2>
<p><strong> </strong></p>
<h3><strong>Topic C1: Provide Student List for Group Creation</strong></h3>
<p><span style="text-decoration: underline;">Note</span>: <em>This change will be made in the grader and instructor interfaces only.  Due to privacy issues, students will not have access to the class list when they are creating the groups themselves.  Students will be expected to know their group members&#8217; user IDs.</em></p>
<p><span style="text-decoration: underline;">Description</span>: The user currently has to draw on their own records for the user IDs of the students that they would like to put into a group.  This is mainly because the list of (unassigned) students is not currently made available to the user at the time of group creation.</p>
<p><span style="text-decoration: underline;">Next Steps</span>:  Rework the existing <em>Group</em> formation tab interface so that users have access to the list of (unassigned) students when they are creating a new group.  One possible option is to use a layout similar to the prototyped <em>Assign Graders</em> view where the list of (unassigned) students will be placed in a pane where users can make multiple selections.</p>
<p><span style="text-decoration: underline;">Rationale</span>: To prevent the user from having to draw on their own records for the current list of (unassigned) students.</p>
<h3><strong>Topic C2:  Provide a List of Unassigned Students When Adding Members to an Existing Group</strong></h3>
<p><span style="text-decoration: underline;">Note</span>: <em>This change will be made in the grader and instructor interfaces only.  Students will not be allowed to make changes to their groups.  Only graders and instructors have permission to do so. </em></p>
<p><span style="text-decoration: underline;">Description</span>: The user currently has to draw on their own records for the user IDs of the students that they would like to add to an existing group.  A read-only list of unassigned students is provided to the user in the current release of MarkUs.  However, the user loses access to this list when they actually have to enter the user IDs of these students.</p>
<p><span style="text-decoration: underline;">Next Steps</span>:  There are various ways of addressing this problem.  However, we need to come up with a way of visualizing large class lists (e.g., possibly 500+ students) such that graders/instructors can easily find the student(s) that they are looking for.  Some ideas:</p>
<ul>
<li>Drop down menu
<ul>
<li>However, finding a specific student in a large list of unassigned students may be extremely difficult (with a lot of scrolling involved).</li>
</ul>
</li>
<li>Drop down menu + search feature</li>
</ul>
<p><span style="text-decoration: underline;">Rationale</span>: To prevent the user from having to draw on their own records for the current list of unassigned students.</p>
<hr size="2" /><strong> </strong></p>
<h2><strong><span style="color: #af084b;">Others</span></strong></h2>
<h3><strong>Research/Field Work:</strong></h3>
<ul>
<li>Ask users about their most wished for shortcuts/features (e.g., shortcut to evenly distribute groups amongst graders)</li>
<li>Go through different views and tally the number of items for the accordion menu in that view.
<ul>
<li><span style="text-decoration: underline;">Purpose</span>: To see if replacing accordion menu with buttons is a feasible.  This would also give us a sense of how big the change will be if we apply this to the entire project.  We may also discover existing options in the accordion menu that works best in an accordion menu.</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1153</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learnings from my first changelist</title>
		<link>http://blog.markusproject.org/?p=1149</link>
		<comments>http://blog.markusproject.org/?p=1149#comments</comments>
		<pubDate>Sun, 31 Jan 2010 03:14:04 +0000</pubDate>
		<dc:creator>jmate</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1149</guid>
		<description><![CDATA[Weird Behaviour of Mocha
In the markus code, there are a lot of places where we use markus_config_&#38;lt;something&#38;gt; instead of MarkusConfigurator.markus_config_&#38;lt;something&#38;gt;. We should start using the latter. He&#8217;s why:
ensure_config_helper.rb


def self.check_config()
puts &#34;Checking #{markus_config_logging_logfile}&#34;
puts &#34;Checking #{markus_config_logging_errorlogfile}&#34;
puts &#34;Checking #{markus_config_repository_storage}&#34;
puts &#34;Checking #{markus_config_validate_file}&#34;
puts &#34;Checking #{MarkusConfigurator.markus_config_logging_logfile}&#34;
puts &#34;Checking #{MarkusConfigurator.markus_config_logging_errorlogfile}&#34;
puts &#34;Checking #{MarkusConfigurator.markus_config_repository_storage}&#34;
puts &#34;Checking #{MarkusConfigurator.markus_config_validate_file}&#34;
check_in_writable_dir(markus_config_logging_logfile, &#34;MARKUS_LOGGING_LOGFILE&#34;)
check_in_writable_dir(markus_config_logging_errorlogfile, &#34;MARKUS_LOGGING_ERRORLOGFILE&#34;)
check_writable(markus_config_repository_storage, &#34;REPOSITORY_STORAGE&#34;)
check_readable(markus_config_repository_storage, &#34;REPOSITORY_STORAGE&#34;)
if ! RUBY_PLATFORM =~ /(:?mswin&#124;mingw)/ # should [...]]]></description>
			<content:encoded><![CDATA[<p>Weird Behaviour of Mocha</p>
<p>In the markus code, there are a lot of places where we use markus_config_&amp;lt;something&amp;gt; instead of MarkusConfigurator.markus_config_&amp;lt;something&amp;gt;. We should start using the latter. He&#8217;s why:</p>
<p>ensure_config_helper.rb</p>
<pre class="brush: ruby; ">

def self.check_config()
puts &quot;Checking #{markus_config_logging_logfile}&quot;
puts &quot;Checking #{markus_config_logging_errorlogfile}&quot;
puts &quot;Checking #{markus_config_repository_storage}&quot;
puts &quot;Checking #{markus_config_validate_file}&quot;
puts &quot;Checking #{MarkusConfigurator.markus_config_logging_logfile}&quot;
puts &quot;Checking #{MarkusConfigurator.markus_config_logging_errorlogfile}&quot;
puts &quot;Checking #{MarkusConfigurator.markus_config_repository_storage}&quot;
puts &quot;Checking #{MarkusConfigurator.markus_config_validate_file}&quot;
check_in_writable_dir(markus_config_logging_logfile, &quot;MARKUS_LOGGING_LOGFILE&quot;)
check_in_writable_dir(markus_config_logging_errorlogfile, &quot;MARKUS_LOGGING_ERRORLOGFILE&quot;)
check_writable(markus_config_repository_storage, &quot;REPOSITORY_STORAGE&quot;)
check_readable(markus_config_repository_storage, &quot;REPOSITORY_STORAGE&quot;)
if ! RUBY_PLATFORM =~ /(:?mswin|mingw)/ # should match for Windows only
check_executable(markus_config_validate_file, &quot;VALIDATE_FILE&quot;)
end
end
</pre>
<p>Output from running rake test:units When loading everything up:</p>
<pre class="brush: bash; ">

Checking log/info_development.log
Checking log/error_development.log
Checking /home/jmate/everything/workspaces/repos
Checking /home/jmate/everything/workspaces/markus/config/dummy_validate.sh
Checking log/info_development.log
Checking log/error_development.log
Checking /home/jmate/everything/workspaces/repos
Checking /home/jmate/everything/workspaces/markus/config/dummy_validate.sh
</pre>
<p>At this point, &amp;lt;blah&amp;gt; == MarkusConfigurator.&amp;lt;blah&amp;gt;</p>
<p>When running the test cases:</p>
<pre class="brush: bash; ">

/tmp/ensure_config_helper_test_777699315/log/log_info_file.log
Checking log/info_test.log
Checking log/error_test.log
Checking /home/jmate/everything/workspaces/repos
Checking /home/jmate/everything/workspaces/markus/config/dummy_validate.sh
Checking /tmp/ensure_config_helper_test_777699315/log/log_info_file.log
Checking /tmp/ensure_config_helper_test_777699315/log/log_error_file.log
Checking /tmp/ensure_config_helper_test_777699315/source_repo_dir
Checking /tmp/ensure_config_helper_test_777699315/validate_script.sh
/tmp/ensure_config_helper_test_595310852/log/log_info_file.log
...
...
...
Checking log/info_test.log
Checking log/error_test.log
Checking /home/jmate/everything/workspaces/repos
Checking /home/jmate/everything/workspaces/markus/config/dummy_validate.sh
Checking /tmp/ensure_config_helper_test_473533902/log/log_info_file.log
Checking /tmp/ensure_config_helper_test_473533902/log/log_error_file.log
Checking /tmp/ensure_config_helper_test_473533902/source_repo_dir
Checking /tmp/ensure_config_helper_test_473533902/validate_script.sh
</pre>
<p>Now you can see that &amp;lt;blah&amp;gt; != MarkusConfigurator.&amp;lt;blah&amp;gt; . So the namespace for the method you are trying to call cannot be ambiguous. In the source code above you must use MarkusConfigurator.&amp;lt;blah&amp;gt;.</p>
<p>Mocking Modules with Mocha</p>
<p>I could not find any examples on mocking modules with mocha. It&#8217;s probably because it&#8217;s so easy! It&#8217;s just like mocking an instance of a class.</p>
<p>the_module.rb :</p>
<pre class="brush: ruby; ">

module TheModule
def the_module_function
return &quot;the real value&quot;
end
end
</pre>
<p>test.rb :</p>
<pre class="brush: ruby; ">

require &quot;test/unit&quot;
require &quot;mocha&quot;
require &quot;the_module&quot;
include TheModule

class TheModuleTest &amp;amp;amp;amp;amp;lt; Test::Unit::TestCase
# replace &#039;the real value&#039; with &#039;the mocked value&#039;&quot;
def test_it
assert TheModule.the_module_function == &quot;the real value&quot;

TheModule.stubs(:the_module_function).returns(&quot;the mocked value&quot;)

assert TheModule.the_module_function == &quot;the mocked value&quot;
end
end
</pre>
<p>Running the tests:</p>
<pre class="brush: bash; ">

jmate@CalculatorJozef:~/everything/workspaces$ ruby test.rb
Loaded suite test
Started
.
Finished in 0.00096 seconds.

1 tests, 2 assertions, 0 failures, 0 errors
</pre>
<p>Nested Contexts</p>
<p>I learned a new trick with shoulda. Credit goes to: http://www.viget.com/extend/reusing-contexts-in-shoulda-with-context-macros/</p>
<p>You can nest contexts inorder to resuse them.</p>
<p>Here is a quick example I prepared:</p>
<pre class="brush: ruby; ">

context &quot;we have a temp dir&quot; do
setup do
@temp_dir = &quot;/tmp/temp_#{rand(1073741824)}&quot;&amp;amp;amp;amp;amp;lt;/pre&amp;amp;amp;amp;amp;gt;
@log_dir = &quot;#{@temp_dir}/log&quot;
@file = &quot;#{@log_dir}/file&quot;
FileUtils.mkdir( @temp_dir )
end
teardown do
FileUtils.rm_r( @temp_dir )
end
should &quot;be able to test with the temp dir&quot; do
end

context &quot;we have a log dir&quot; do
setup do
FileUtils.mkdir( @log_dir )
end
should &quot;be able to test with the temp and log dir&quot; do
end

context &quot;we have a file inside the log dir inside the temp dir&quot; do
setup do
FileUtils.touch( [@file] )
end
should &quot;be able to test with temp, log and file&quot; do
end
end
end
end
</pre>
<p>Permissions, Directories and Ruby</p>
<p>I recently learned that if you remove the execute bit on a directory and try to rm -r the parent directory then you will be unable to remove the executable directory. However, this works in a terminal.</p>
<p>Example in ruby:</p>
<pre class="brush: ruby; ">

#!/usr/bin/env ruby
require &#039;fileutils&#039;
include FileUtils

@parent_dir = &quot;/tmp/parent_#{rand(1073741824)}&quot;
@test_dir = &quot;#{@parent_dir}/test&quot;
@file = &quot;#{@test_dir}/file&quot;

FileUtils.mkdir( @parent_dir )
FileUtils.mkdir( @test_dir )
FileUtils.touch([ @file ])
FileUtils.chmod( 0600, [ @test_dir ])
FileUtils.rm_r( @parent_dir )
</pre>
<p>Output from script:</p>
<pre class="brush: bash; ">

jmate@CalculatorJozef:~/everything$ ./test.rb
/usr/lib/ruby/1.8/fileutils.rb:1297:in `unlink&#039;: Permission denied - /tmp/parent_674314876/test/file (Errno::EACCES)
from /usr/lib/ruby/1.8/fileutils.rb:1297:in `remove_file&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1302:in `platform_support&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1296:in `remove_file&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1285:in `remove&#039;
from /usr/lib/ruby/1.8/fileutils.rb:756:in `remove_entry&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1335:in `postorder_traverse&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1335:in `postorder_traverse&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1339:in `postorder_traverse&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1334:in `postorder_traverse&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1333:in `each&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1333:in `postorder_traverse&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1334:in `postorder_traverse&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1333:in `each&#039;
from /usr/lib/ruby/1.8/fileutils.rb:1333:in `postorder_traverse&#039;
from /usr/lib/ruby/1.8/fileutils.rb:754:in `remove_entry&#039;
from /usr/lib/ruby/1.8/fileutils.rb:612:in `rm_r&#039;
from /usr/lib/ruby/1.8/fileutils.rb:608:in `each&#039;
from /usr/lib/ruby/1.8/fileutils.rb:608:in `rm_r&#039;
from ./test.rb:14
</pre>
<p>Example in terminal:</p>
<pre class="brush: bash; ">

jmate@CalculatorJozef:/tmp$ mkdir parent
jmate@CalculatorJozef:/tmp$ mkdir parent/test
jmate@CalculatorJozef:/tmp$ touch parent/test/file
jmate@CalculatorJozef:/tmp$ rm -r parent
</pre>
<p>As you can see from the output above. I had no trouble doing this in the terminal.</p>
<p>It might have something to do with not being able to cd into a directory that does not have the execute bit set.</p>
<p>I hope the knowledge I pass on helps you guys:</p>
<p><a href="http://josephmate.wordpress.com/2010/01/31/ruby-permissions-and-directories/">Ruby Permissions and Directories</a></p>
<p><a href="http://josephmate.wordpress.com/2010/01/31/nested-contexts/">Nested Contexts</a></p>
<p><a href="http://josephmate.wordpress.com/2010/01/31/mocking-modules-with-mocha/">Mocking Modules with Mocha</a></p>
<p><a href="http://josephmate.wordpress.com/2010/01/31/weird-behaviour-of-mocha/">Weird Behaviour With Mocha</a></p>
<p>Cheers,<br />
Joseph</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1149</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meeting Minutes &#8211; Jan. 29, 2010</title>
		<link>http://blog.markusproject.org/?p=1128</link>
		<comments>http://blog.markusproject.org/?p=1128#comments</comments>
		<pubDate>Fri, 29 Jan 2010 22:09:43 +0000</pubDate>
		<dc:creator>Farah Juma</dc:creator>
				<category><![CDATA[Meetings]]></category>
		<category><![CDATA[Minutes]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1128</guid>
		<description><![CDATA[The meeting started at 3:30 and ended at 4:28.
The IRC log can be found here
Agenda

Feedback from users
Round table
Other issues

Feedback from users

We&#8217;ve been getting great feedback so far!
Karen has been keeping us posted through the mailing list

Round table

We had a pretty big group today, including our friends from France!
Nelle has been working on implementing sections and [...]]]></description>
			<content:encoded><![CDATA[<p>The meeting started at 3:30 and ended at 4:28.</p>
<p>The IRC log can be found <a href="http://www.cs.toronto.edu/~mconley/irc/markus/markus20100129_pg1.html">here</a></p>
<p><strong>Agenda</strong></p>
<ul>
<li>Feedback from users</li>
<li>Round table</li>
<li>Other issues</li>
</ul>
<p><strong>Feedback from users</strong></p>
<ul>
<li>We&#8217;ve been getting great feedback so far!</li>
<li>Karen has been keeping us posted through the mailing list</li>
</ul>
<p><strong>Round table</strong></p>
<ul>
<li>We had a pretty big group today, including our friends from France!</li>
<li>Nelle has been working on implementing sections and adding students to sections. She has a couple of UI issues right now. Nelle is going to try and stay in touch with Victoria to make sure they&#8217;re not working on conflicting things. Nelle has also been looking into moving over to Machinist.</li>
<li>Benjamin is working on translating MarkUs into French.</li>
<li>Farah has been working on unit tests for the grades tables (and fixing some bugs related to the table as well).</li>
<li>Brian worked on unit tests for <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/570">Ticket #570</a>.</li>
<li>Robert has been busy with interviews this week.</li>
<li>Bryan worked on <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/393">Ticket #393</a> and is now working on tests.</li>
<li>Joseph has been working on <a href="https://stanley.cdf.toronto.edu/drproject/csc49x/olm_rails/ticket/574">Ticket #574</a>. We decided to put a comment in the setup file that explains why quotes around the path are necessary and then check whether or not the validate program runs.</li>
</ul>
<p><strong>Other issues</strong></p>
<ul>
<li>Karen would like to see descriptions of tickets in our punchlines (instead of just the ticket numbers)</li>
<li>The French team will be posting reports <a href="http://github.com/NelleV/MarkusReport">here</a> every couple of weeks</li>
<li>We are looking for students for an NSERC USRA for the summer</li>
<li>Victoria is going to be creating a blog post about the wireframes she has created so far for TA assignment</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1128</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Assign Graders View &#8212; Prototypes</title>
		<link>http://blog.markusproject.org/?p=1129</link>
		<comments>http://blog.markusproject.org/?p=1129#comments</comments>
		<pubDate>Fri, 29 Jan 2010 21:51:34 +0000</pubDate>
		<dc:creator>Victoria</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1129</guid>
		<description><![CDATA[I&#8217;ll be writing a follow-up post for these wireframes.  But for now, please feel free to take a look and leave some comments/feedback!
Read-Only Mode &#8212; which we will most likely no longer have:
Edit Mode &#8212; will be the new default UI when user opens up the Assign Graders tab:
That&#8217;s all for now!  
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be writing a follow-up post for these wireframes.  But for now, please feel free to take a look and leave some comments/feedback!</p>
<p><strong>Read-Only Mode</strong> &#8212; which we will most likely no longer have:</p>
<div id="attachment_1133" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.markusproject.org/wp-content/uploads/2010/01/MarkUs_AssignGraderPrototype_Overview.JPG"><img class="size-medium wp-image-1133" title="MarkUs_AssignGraderPrototype_Overview" src="http://blog.markusproject.org/wp-content/uploads/2010/01/MarkUs_AssignGraderPrototype_Overview-300x184.jpg" alt="Overview: UI that allows user to view existing grader-to-group assignments." width="300" height="184" /></a><p class="wp-caption-text">Overview: UI that allows user to view existing grader-to-group assignments.</p></div>
<p><strong>Edit Mode</strong> &#8212; will be the new default UI when user opens up the Assign Graders tab:</p>
<div id="attachment_1134" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.markusproject.org/wp-content/uploads/2010/01/MarkUs_AssignGraderPrototype_AssignGroups.JPG"><img class="size-medium wp-image-1134" title="MarkUs_AssignGraderPrototype_AssignGroups" src="http://blog.markusproject.org/wp-content/uploads/2010/01/MarkUs_AssignGraderPrototype_AssignGroups-300x179.jpg" alt="Assign Groups: UI users will use to create/modify grader-to-group assignments." width="300" height="179" /></a><p class="wp-caption-text">Assign Groups: UI users will use to create/modify grader-to-group assignments.</p></div>
<div id="attachment_1135" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.markusproject.org/wp-content/uploads/2010/01/MarkUs_AssignGraderPrototype_AssignGroupsChecked.JPG"><img class="size-medium wp-image-1135" title="MarkUs_AssignGraderPrototype_AssignGroupsChecked" src="http://blog.markusproject.org/wp-content/uploads/2010/01/MarkUs_AssignGraderPrototype_AssignGroupsChecked-300x179.jpg" alt="Assign Groups: Example of user interaction in edit mode." width="300" height="179" /></a><p class="wp-caption-text">Assign Groups: Example of user interaction in edit mode.</p></div>
<p>That&#8217;s all for now! <img src='http://blog.markusproject.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1129</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>January 28th Status Update</title>
		<link>http://blog.markusproject.org/?p=1120</link>
		<comments>http://blog.markusproject.org/?p=1120#comments</comments>
		<pubDate>Fri, 29 Jan 2010 00:58:57 +0000</pubDate>
		<dc:creator>Robert B</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1120</guid>
		<description><![CDATA[Mike
Status

Fixed the functional tests!  Yeah!
Put the functional tests on markusproject.org homepage &#8211; though they act funny in an &#8220;off and on&#8221; sort of way&#8230;
Reviewed some code
Closed #530 (next/prev submission links in grader view no longer skip completed assignments in 0.6 &#8211; needs to be pushed to trunk)
Wrote a blog post about closing #531:  http://blog.markusproject.org/?p=1103


Next Steps


Review more code [...]]]></description>
			<content:encoded><![CDATA[<h2>Mike</h2>
<h3><span style="font-weight: normal;">Status</span></h3>
<ul>
<li>Fixed the functional tests!  Yeah!</li>
<li>Put the functional tests on <a style="color: #0658b5;" href="http://markusproject.org" target="_blank">markusproject.org</a> homepage &#8211; though they act funny in an &#8220;off and on&#8221; sort of way&#8230;</li>
<li>Reviewed some code</li>
<li>Closed #530 (next/prev submission links in grader view no longer skip completed assignments in 0.6 &#8211; needs to be pushed to trunk)</li>
<li>Wrote a blog post about closing #531:  <a style="color: #0658b5;" href="http://blog.markusproject.org/?p=1103" target="_blank">http://blog.markusproject.org/?p=1103</a></li>
</ul>
<h3><span style="font-weight: normal;"><br />
Next Steps<br />
</span></h3>
<ul>
<li>Review more code as it comes in</li>
<li>Turn the rest of Byron&#8217;s email into tickets (can&#8217;t believe I haven&#8217;t finished that yet)</li>
<li>Take a look at some other high-priority fixes maybe to patch 0.6</li>
<li>Brace myself for possible MarkUs support&#8230;CSC148 and CSC209 assignments due tomorrow.</li>
</ul>
<h3><span style="font-weight: normal;"><br />
Roadblocks<br />
</span></h3>
<ul>
<li>This is a heavy week and a half for me &#8211; that&#8217;s why I did most of my work over the weekend.  Might not respond to email this weekend, and will be pretty bogged down until next Wednesday sometime.</li>
</ul>
<h2>Brian</h2>
<h3><span style="font-weight: normal;">Status</span></h3>
<ul>
<li>1 post on Markus blog</li>
<li> Finished #570 units test cases, change committed</li>
</ul>
<h3><span style="font-weight: normal;"><br />
Next Steps</span></h3>
<ul>
<li>Fix some bugs on weekends .</li>
</ul>
<h3><span style="font-weight: normal;"><br />
Roadblocks</span></h3>
<ul>
<li>Job hunting, 1 graduate course that requires intensive reading of papers, 1 research project</li>
</ul>
<h2>Victoria</h2>
<h3 style="font-weight: normal;"><span style="font-weight: normal;">Status</span></h3>
<ul>
<li style="margin-left: 15px;">Completed first set of wireframes for the Assign Graders View.</li>
<li style="margin-left: 15px;">Got useful feedback from Karen and Farah during last night&#8217;s UI meeting.</li>
</ul>
<h3 style="font-weight: normal;"><span style="font-weight: normal;">Next Steps</span></h3>
<ul>
<li style="margin-left: 15px;">Start prototyping for the Group tab.  That is, the view users use to create new groups and modify existing groups.</li>
<li style="margin-left: 15px;">Summarize new usability issues and ideas from last night&#8217;s UI meeting and write a blog post about it.</li>
</ul>
<h3 style="font-weight: normal;"><span style="font-weight: normal;">Roadblocks</span></h3>
<ul>
<li style="margin-left: 15px;">Learning how to use a new application for prototyping.  I&#8217;m slowly getting the hang of it! <img src='http://blog.markusproject.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<h2>Joseph</h2>
<h3><span style="font-weight: normal;">Status<br />
</span></h3>
<ul>
<li>handling validate files with a space and checking configuration on startup is on reviewboard</li>
<li>ticketed the paging bug where the page number and page size are not saved in a bookmark or when hitting back/forwards</li>
<li>did rudimentary research on will_paginate &#8211; have not found anything so far</li>
</ul>
<p>Next Steps</p>
<ul>
<li> finish up the codereview</li>
<li>complete research on will_paginate</li>
<li> conclude which method to approach the pagination problem after research is complete</li>
</ul>
<p>Roadblocks</p>
<ul>
<li>see reviewboard for the discussion that just arose about the function in PathHelper: <a style="color: #0658b5;" href="http://review.markusproject.org/r/358/#comment923" target="_blank">http://review.markusproject.org/r/358/#comment923</a></li>
</ul>
<h2>Bryan</h2>
<h3><span style="font-weight: normal;">Status</span></h3>
<ul>
<li>Working on #393, Reviewing code, learning Ruby and Shoulda.</li>
</ul>
<h3><span style="font-weight: normal;"><br />
Next Steps</span></h3>
<ul>
<li>Solve more tickets.</li>
</ul>
<h3><span style="font-weight: normal;"><br />
Roadblocks</span></h3>
<ul>
<li>Not enough knowledge of Ruby, testing, and Markus&#8217; structure.</li>
</ul>
<h2>Nelle</h2>
<h3><span style="font-weight: normal;">Status<br />
</span></h3>
<ul>
<li> Work on implementing creating section and to adding students to them</li>
<li> Started to look on how to migrate smoothly to Machinist</li>
</ul>
<h3><span style="font-weight: normal;"><br />
Next steps<br />
</span></h3>
<ul>
<li> Implementing the group members from same section limitation</li>
<li> Improving the UI on the different parts implemented this week</li>
</ul>
<h3><span style="font-weight: normal;"><br />
Roadblocks<br />
</span></h3>
<ul>
<li>None</li>
</ul>
<h2>Robert</h2>
<h3><span style="font-weight: normal;">Status</span></h3>
<ul>
<li>Working on tests for my fix for 510, otherwise Halted.</li>
<li>Reviewed changes from team members as they come in.</li>
</ul>
<h3><span style="font-weight: normal;">Next Steps</span></h3>
<ul>
<li>Find time to work on MarkUs.</li>
</ul>
<h3><span style="font-weight: normal;">Roadblocks</span></h3>
<ul>
<li>Many consecutive interviews [Google, Microsoft, Amazon, Facebook], midterms, and assignments all at once.</li>
</ul>
<h2>Farah</h2>
<h3><span style="font-weight: normal;">Status</span></h3>
<ul>
<li>Fixed a bug related to alphabetical pagination which was causing the alphabetical categories to get re-calculated each time the user switched between pages instead of only when the number of items per page is changed (and learned about session variables)</li>
<li>Re-factored code to make the GradeEntryFormsController lighter by moving some things to the model instead</li>
<li>Finished the unit tests for the grades table</li>
<li>Dropped in on the UI meeting on Wednesday</li>
</ul>
<h3><span style="font-weight: normal;">Next Steps</span></h3>
<ul>
<li>Finish functional tests for the grades table</li>
<li>Student interface for grade entry forms</li>
</ul>
<h3><span style="font-weight: normal;">Roadblocks</span></h3>
<ul>
<li>None this week</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1120</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Re-factoring contexts with Shoulda</title>
		<link>http://blog.markusproject.org/?p=1113</link>
		<comments>http://blog.markusproject.org/?p=1113#comments</comments>
		<pubDate>Tue, 26 Jan 2010 10:10:45 +0000</pubDate>
		<dc:creator>Tara Clark</dc:creator>
				<category><![CDATA[Automated Testing]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1113</guid>
		<description><![CDATA[I&#8217;ve been playing around with Ruby on Rails for a personal project that I started in December and as we starting doing with MarkUs, I&#8217;ve been using Shoulda for my tests. One of the basic tenets of Ruby on Rails is DRY &#8211; Don&#8217;t Repeat Yourself. And I&#8217;ve often found that with Shoulda tests, I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing around with Ruby on Rails for a personal project that I started in December and as we starting doing with MarkUs, I&#8217;ve been using Shoulda for my tests. One of the basic tenets of Ruby on Rails is DRY &#8211; Don&#8217;t Repeat Yourself. And I&#8217;ve often found that with Shoulda tests, I was writing the same code over and over again. I&#8217;ve had some difficulties scoping the internet for ways to re-factor Shoulda tests, but I&#8217;ve come up with two useful ways so far that I thought I would share with you. Perhaps this is just my still naivety with Ruby on Rails, but since most of us are in a similar boat, I thought I&#8217;d share my findings.</p>
<p><strong>1. Class methods</strong></p>
<p>This works great if your setup varies significantly between tests of a method, but you still want almost the same thing (or the exact same thing) to happen in each of the cases. You can create class methods in test class to re-factor tests like this. The key part is that you define the method prior to the highest-nested level context of any test that will use the method. I like naming them starting with should_ to clearly indicate what they&#8217;re for <img src='http://blog.markusproject.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre>def self.should_flip_active
&nbsp;&nbsp;# Put your should statements here, including should "..." do ... end and should_*
end</pre>
<p></p>
<p><strong>2. Iterating over a set of test data</strong></p>
<p>With unit tests, we shouldn&#8217;t really be using fixtures and loading everything from the database. Instead, you might just set up the few attributes that you need on a model instance to test a method on it. If you want to do this for slightly different data, then you can use either a hash or an array and make a context for each of them!</p>
<p>Structure with an array:</p>
<pre>['c6conley', 'g9merika'].each do |user|
&nbsp;&nbsp;context "with user "+user do
&nbsp;&nbsp;&nbsp;&nbsp;# Put your setup and should statements in here - you could even make it nested further!
&nbsp;&nbsp;end
end</pre>
<p></p>
<p>Structure with a hash:</p>
<pre>{ 'c6conley' => 5, 'g9merika' => 8 }.each do |user, section|
&nbsp;&nbsp;context "with user "+user do
&nbsp;&nbsp;&nbsp;&nbsp;# Do some tests on user with section
end</pre>
<p></p>
<p>One last comment on Shoulda &#8211; I&#8217;ve found that you can only access assigns, e.g. assigns(:student).some_student_attribute from within should blocks. I&#8217;ve run into some problems when running my tests if I try to use assigns or a class variable like @student within an open area in a should statement. Here&#8217;s some examples:</p>
<pre>should "work" do
&nbsp;&nbsp;assert_equal 'hello', assigns(:student).user_name
end

# should not work
should_set_the_flash_to assigns(:student).user_name

should "work" do
&nbsp;&nbsp;assert_contains flash.values, assigns(:student).user_name
end</pre>
<p></p>
<p>Happy Shoulda testing!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1113</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notes system: what&#8217;s left to do</title>
		<link>http://blog.markusproject.org/?p=1017</link>
		<comments>http://blog.markusproject.org/?p=1017#comments</comments>
		<pubDate>Tue, 26 Jan 2010 09:41:27 +0000</pubDate>
		<dc:creator>Tara Clark</dc:creator>
				<category><![CDATA[Notes System]]></category>

		<guid isPermaLink="false">http://blog.markusproject.org/?p=1017</guid>
		<description><![CDATA[This post was originally written at the beginning of December 2009 and I just found it now, so I&#8217;m publishing it  
Our original steps for the Notes system implementation went as follows:

Design the model.
Create mock-ups of the user interface.
In parallel, design the Notes tab and the modal dialog interfaces (for groupings).
Extend this functionality to [...]]]></description>
			<content:encoded><![CDATA[<p>This post was originally written at the beginning of December 2009 and I just found it now, so I&#8217;m publishing it <img src='http://blog.markusproject.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Our original steps for the Notes system implementation went as follows:</p>
<ol>
<li>Design the model.</li>
<li>Create mock-ups of the user interface.</li>
<li>In parallel, design the Notes tab and the modal dialog interfaces (for groupings).</li>
<li>Extend this functionality to assignments and to students once the notes system is solid for groupings.</li>
</ol>
<p>We have completed the first three steps, including unit and functional tests. Thanks to the polymorphic, &#8220;noteable&#8221; idea that we used for the relationship between a note and a grouping, the only work necessary to have notes on a different object type is to:</p>
<ul>
<li>add a &#8220;display_for_note&#8221; method to the model, like we did for groupings &#8211; this allows us to display these notes</li>
<li>modify the create a note form in the Notes tab to allow for other types of noteable objects than just groupings</li>
<li>add a link to the modal dialog in an appropriate location for the object type</li>
</ul>
<p>For now, I can&#8217;t see the best place to place a link to a modal dialog to create a note associated to an assignment or to a student, so I would recommend just adding that functionality to the Notes tab.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.markusproject.org/?feed=rss2&amp;p=1017</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
