<?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>Greg and Kat's blog &#187; Teaching</title>
	<atom:link href="http://gregbaker.ca/blog/category/teaching/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregbaker.ca/blog</link>
	<description>Tales from Greg and Kat, in NC and elsewhere.</description>
	<lastBuildDate>Mon, 30 Jan 2012 03:54:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Need a CMPT 470 instructor</title>
		<link>http://gregbaker.ca/blog/2011/08/25/need-a-cmpt-470-instructor/</link>
		<comments>http://gregbaker.ca/blog/2011/08/25/need-a-cmpt-470-instructor/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 22:20:43 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=1276</guid>
		<description><![CDATA[As many of you know, I&#8217;m the most frequent instructor for CMPT 470, Web-based information systems, at SFU. I love teaching the course, but it&#8217;s just not possible to do it every semester. In particular, it&#8217;s not possible for me to teach it in the spring (Jan-Apr 2012). So, it will likely be posted as [...]]]></description>
			<content:encoded><![CDATA[<p>As many of you know, I&#8217;m the most frequent instructor for <a href="http://www.cs.sfu.ca/cc/470/ggbaker/">CMPT 470, Web-based information systems</a>, at SFU. I love teaching the course, but it&#8217;s just not possible to do it every semester.  In particular, it&#8217;s not possible for me to teach it in the spring (Jan-Apr 2012).</p>
<p>So, it will likely be posted as a sessional (contract) instructor position. We have had sessionals do the course in the past, but I reckon I can make things a little more interesting: there&#8217;s a good web development community in Vancouver, and there a lot of people who would do a good job with the course. There is also an increasingly-large group of CMPT 470 alumni who have been out there in the world for a few years getting some experience: some of them would be good at this too.</p>
<p>I just have to find somebody and get them to actually apply. So, I&#8217;m putting the call out: anybody interested or know anybody who&#8217;d be good?</p>
<p>The course (as I approach it) is a survey of web development topics: markup and style, HTTP, server-side programming, client-side programming, architecture/speed/backend stuff, and whatever else I feel like talking about that semester. The big piece of work for the students is a group-based project which makes up a big chunk of their final mark.</p>
<p>Officially the appointment requires a masters degree, but a case can be made for somebody with industrial (and even better, teaching) experience. The course is scheduled in the evenings (Mondays 5:30-8:30) on the Burnaby campus, so shouldn&#8217;t interfere too directly with a day job. Pay is around $8500 plus benefits.</p>
<p>Of course, anybody teaching the course is welcome to my lecture notes, assignments, web materials, and anything else I have that would be useful. There&#8217;s no official posting yet, but I figure it&#8217;s a good time for people to start thinking about it. I&#8217;m happy to talk to anybody about the course.</p>
<p>Edit: I should point out that I&#8217;m not the one making the hiring decisions. I&#8217;m just an interested third party.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2011/08/25/need-a-cmpt-470-instructor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Version Control conundrum</title>
		<link>http://gregbaker.ca/blog/2011/06/04/version-control-conundrum/</link>
		<comments>http://gregbaker.ca/blog/2011/06/04/version-control-conundrum/#comments</comments>
		<pubDate>Sat, 04 Jun 2011 07:27:41 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=1264</guid>
		<description><![CDATA[As most of you know, the School&#8217;s new course management system is my baby. It keeps track of many things, but what I care about right now is (1) who is in a course, and (2) what groups have been formed for assignments/projects/whatever. Given those things, I have had this idea: It would make perfectly [...]]]></description>
			<content:encoded><![CDATA[<p>As most of you know, the School&#8217;s new <a href="https://courses.cs.sfu.ca/">course management system</a> is my baby.  It keeps track of many things, but what I care about right now is (1) who is in a course, and (2) what groups have been formed for assignments/projects/whatever.</p>
<p>Given those things, I have had this idea: It would make perfectly good sense for each of those things (every student in a course; every group in a course) to have a <a href="http://en.wikipedia.org/wiki/Revision_control">version control repository</a> automatically created for them.  The instructor and TAs would also have access, but wouldn&#8217;t have to set anything up.  Students could use the repositories even in courses where the instructor doesn&#8217;t know what technology is.</p>
<p>I have used Subversion repositories for the project groups in CMPT 470 for years.  The benefits from my point of view:</p>
<ol>
<li>Groups can collaborate in that way that version control systems allow.</li>
<li>Students can work on code (even individually) in multiple locations and with versions kept.</li>
<li>All of their code is safely backed-up on a server that we kind of trust.</li>
<li>I can review what members of the group contributed what code.</li>
<li>It&#8217;s a nice and easy way to submit code: just give me the SVN URL.</li>
</ol>
<p>When contemplating technologies to implement my scheme, I went first to <a href="http://git-scm.com/">GIT</a> (or possibly some other <a href="http://en.wikipedia.org/wiki/Distributed_revision_control_system">distributed version control</a> system, since they&#8217;re all the rage).  GIT also has a pile of nice management tools like <a href="https://github.com/sitaramc/gitolite">gitolite</a> that make creating thousands of repositories surprisingly easy.</p>
<p>But while experimenting, I realized that GIT inherently trusted the user-provided information about who they are.  If I claim to be &#8220;Barack Obama &lt;president @whitehouse.gov&gt;&#8221; in my commits, then GIT lets me push those commits just fine, no matter who I have authenticated as at the central server. So, I pretty much lose benefit (4) in the worst cases (which are the cases I&#8217;m usually concerned with), which is pretty much a deal-breaker by itself.</p>
<p>The &#8220;distributed&#8221; nature of any DVCS gets me this problem one way or another&mdash;anybody could push the whole group&#8217;s work since they could be working for weeks without touching the central server.  And having made that realization, I have to admit that (3) also disappears: they don&#8217;t have to push to the server very often, so a crash on their end could lose a lot of work.</p>
<p>Finally, knowing students the way I do, (5) is gone too.  I&#8217;d give a lot to not have this conversation five times a semester: &#8220;I got a zero.&#8221; &#8220;You didn&#8217;t submit any code.&#8221; &#8220;Yes, I committed it.&#8221;  &#8220;You committed it, but did you push it to the server?&#8221; &#8220;Yes, I pushed it.&#8221;  &#8220;You typed the command &#8216;git push&#8217;?&#8221; &#8220;No, I use &#8216;git commit&#8217;. That puts the code on the server.&#8221; &#8220;No it doesn&#8217;t. You didn&#8217;t put any code on the server where I can get it.&#8221; &#8220;Yes I did&#8230; I committed it.&#8221;</p>
<p>Also, it&#8217;s my understanding that it&#8217;s not possible to give a URL to a subtree of a GIT repository: the only URL is to the project itself.  That makes submitting with GIT much harder.</p>
<p>So, I&#8217;m left with this: distributed version control is at least as good for developers, but it&#8217;s very bad for instructors.</p>
<p>According to <a href="http://en.wikipedia.org/wiki/Comparison_of_revision_control_software">Wikipedia&#8217;s comparison of revision control software</a>, the only open source, &#8220;actively-developed&#8221;, &#8220;client-server&#8221; VCS is Subversion.  So it looks like I&#8217;m back to the totally-uncool and old-fashioned SVN?</p>
<p>Does anybody want to refute any of that?</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2011/06/04/version-control-conundrum/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ten Years</title>
		<link>http://gregbaker.ca/blog/2010/11/29/ten-years/</link>
		<comments>http://gregbaker.ca/blog/2010/11/29/ten-years/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 07:44:20 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=1159</guid>
		<description><![CDATA[As of the end of August 2010, I have been employed as a lecturer at SFU for ten years. On the basis of Peter Norvig&#8217;s excellent essay &#8220;Teach Yourself Programming in Ten Years&#8220;, I extrapolate that in the past ten years, I must have learned how to do this thing that I claim to be [...]]]></description>
			<content:encoded><![CDATA[<p>As of the end of August 2010, I have been employed as a lecturer at SFU for ten years.</p>
<p>On the basis of Peter Norvig&#8217;s excellent essay &#8220;<a href="http://norvig.com/21-days.html">Teach Yourself Programming in Ten Years</a>&#8220;, I extrapolate that in the past ten years, I must have learned how to do this thing that I claim to be my profession.</p>
<p>Because I like Norvig&#8217;s examples, I will add my own: <a href="http://en.wikipedia.org/wiki/Queen_%28band%29">Queen</a> formed in 1971, and played the Queen Rock Montreal show in 1981.  Just look at <a href="http://www.youtube.com/watch?v=jBfVpG2PqPo">that performance</a>, just look at it!  I&#8217;m convinced Freedie was an alien from the planet of  excellent stage performers and was exiled for making everyone else look bad.</p>
<p>While I&#8217;m not Freddie Mercury, I think I&#8217;m doing okay. I have felt my lecturing style change, even within the last year. It&#8217;s somehow just easier; more comfortable.  I&#8217;m more likely to leave a lecture and think &#8220;anybody that thinks they could have done that any better can go fuck themselves,&#8221; usually on days when I have coffee, which does funny things to my brain.</p>
<p>I still think of myself as a better course designer than actual &#8220;lecturer&#8221;, but that&#8217;s another story.</p>
<p>By the numbers: (all values as close as I can figure without really looking that hard)</p>
<ul>
<li>Students taught on campus: 4900</li>
<li>Students supervised in distance sections: 2200</li>
<li>Time spent lecturing: 1600 hours, or two straight months</li>
<li>Time spent watching exams: 220 hours, or one icepick lobotomy</li>
<li>Sections of CMPT 120: 4</li>
<li>Sections of CMPT 165: 14 on campus, 17 distance</li>
<li>Sections of CMPT 470: 13, with 153 project groups</li>
<li>Projects supervised: 9 (capstone, directed studies, etc.)</li>
<li>TAs supervised: 125</li>
<li>Emails sent and received: 150,000 (wild guess)</li>
</ul>
<p>Okay&hellip; I&#8217;m tired just looking at that.  Must be getting old.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2010/11/29/ten-years/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CMPT 470: feedback wanted</title>
		<link>http://gregbaker.ca/blog/2010/08/26/cmpt-470-feedback-wanted/</link>
		<comments>http://gregbaker.ca/blog/2010/08/26/cmpt-470-feedback-wanted/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 23:21:06 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=1109</guid>
		<description><![CDATA[Along with my first offering of CMPT 383, I just finished my 13th offering (!) of CMPT 470. I haven&#8217;t changed the backbone of the course much in that time: it mostly feels good to me, and other than moving with shifting web technologies, I haven&#8217;t felt the need to change the course style. But [...]]]></description>
			<content:encoded><![CDATA[<p>Along with my first offering of CMPT 383, I just finished my 13th offering (!) of CMPT 470.  I haven&#8217;t changed the backbone of the course much in that time: it mostly feels good to me, and other than moving with shifting web technologies, I haven&#8217;t felt the need to change the course style.</p>
<p>But now I&#8217;m taking a good hard look at the course.  I still like the overall flow, but there are some things I want to change.</p>
<p>I did a survey of the current students to get some feedback, but they lack perspective, having just finished the course.  I figure I can get some eyeballs from course alumni here and am looking for some more meaningful feedback.</p>
<h3>Question 1: Weekly Exercises and Grading Scheme</h3>
<p>When I did CMPT 383, I gave weekly exercises, thinking that they might feel a little bit hand-holdey for an upper-division course.  Much to my surprise, they worked better there than they do in 120 and 165: more-senior students are in a much better position to appreciate the micro-lessons that the exercises encapsulate and better understand why they are helpful.  It&#8217;s also a chance to give problems on <em>everything</em>, not just a few things in major assignments.</p>
<p>I have realized that I want to do weekly exercises in CMPT 470, replacing the three assignments.  The problem is: the assignments are worth 30% of the course.  The weekly exercises would receive minimal marking and feedback (likely marking scheme: 2=most/everything correct, 1=some stuff done, 0=little/nothing done).  With that little &#8220;grading&#8221;, 30% is too much to give to them: 20% is more reasonable.</p>
<p>So, I have 10% of the final grade to reallocate somewhere.  Any suggestions about where an extra 10% of weight should be distributed?  (The old <a href="http://www.cs.sfu.ca/CC/470/ggbaker/admin#grading">grading scheme</a> is online.)</p>
<p>[To give you an idea, I'm imagining that some of the exercises will be like "learn these three important CSS techniques and use each to style this sample page"; "find security holes in this sample mini-app I have created for you"; "pick Rails/Django/whatever and do the tutorial on their site"; "deploy your tutorial code on your group's web server"; "do something with jQuery"]</p>
<h3>Question 2: Content</h3>
<p>I have certainly done my best to keep with the times, and talk about new web-related topics as they have become relevant.  But like I said before: the overall backbone of the course has remained the same.</p>
<p>Are there things that I should have spent more lecture time on than I did?  Things that took up too much time?</p>
<p>I definitely want to move JavaScript stuff a little earlier in the course: it deserves to be at least a little more front-and-centre than it has been.</p>
<h3>Question 3: Other Stuff?</h3>
<p>I have a few other smaller tweaks in mind, and am open to other feedback.</p>
<p>In particular, I plan to (explicitly) open the technology evaluation to a wider array of technologies: JavaScript frameworks, databases.  This past semester, I started to realize that the server-side frameworks (Django, Rails, Cake, &hellip;) are all fundamentally the same (at the depth that&#8217;s possible in the techeval).  There are other pieces of technology that are more interesting choices at this point, and they might as well evaluate those.</p>
<p>I&#8217;m happy to take any half-baked thoughts on any of this here, or by email.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2010/08/26/cmpt-470-feedback-wanted/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>And that&#8217;s how you teach CMPT 383</title>
		<link>http://gregbaker.ca/blog/2010/08/22/and-thats-how-you-teach-cmpt-383/</link>
		<comments>http://gregbaker.ca/blog/2010/08/22/and-thats-how-you-teach-cmpt-383/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 05:48:43 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=1100</guid>
		<description><![CDATA[I have now completed my first offering of CMPT 383, Comparative Programming Languages. I had forgotten how much work a new course prep is, particularly as I am anal-retentive enough to not be able to make much use of any other instructor&#8217;s course materials. Other instructors just do things&#8230; wrong. The only way for a [...]]]></description>
			<content:encoded><![CDATA[<p>I have now completed my first offering of CMPT 383, Comparative Programming Languages.</p>
<p>I had forgotten how much work a new course prep is, particularly as I am anal-retentive enough to not be able to make much use of any other instructor&#8217;s course materials.  Other instructors just do things&#8230; wrong.  The only way for a course to feel right is to do it my way, for myself.  Giving lectures from somebody else&#8217;s notes is like wearing somebody else&#8217;s underwear: technically probably just fine, but you just feel dirty.</p>
<p>That&#8217;s not to say other people who teach the same courses I do do a bad job: they are generally excellent instructors teaching excellent courses.  They just do it wrong, is all.</p>
<p>But, looking at my <a href="http://gregbaker.ca/blog/2010/04/19/cmpt-383-for-real-this-time/">plan for 383</a>, I came in pretty close to the plan.  The final balance of topics was more like 6 weeks, 4 weeks, 3 weeks, but that&#8217;s astonishingly close for somebody who usually just stops somewhere around the midterm and thinks &#8220;does that feel like about half of the material?  Okay good.&#8221;</p>
<p>Overall, I&#8217;m very happy with it.  First offerings of a course are supposed to be bumpy and full of things that you wish you could have done better.  Honestly, this was one of my favourite course offerings ever: there are tweaks I&#8217;d do for my next offering, but all are fairly minor.</p>
<p>Specifics:</p>
<ul>
<li>The <a href="http://www.cs.sfu.ca/CC/383/ggbaker/labs/">weekly exercises</a> were (to my mind, at least) a total win.  My goal throughout was basically to say &#8220;remember that thing I talked about this week?  Practice it&#8221; and I think it worked for the students.  I liked them to the point that I&#8217;m planning that every course I teach from now on will have weekly exercises, including 470. (More on 470 in a later post.)</li>
<li>Some of the more involved <a href="http://www.cs.sfu.ca/CC/383/ggbaker/examples/">examples I put together</a> were among my favourite learning objects ever.  (God, I can&#8217;t believe I just used the term &#8220;<a href="http://en.wikipedia.org/wiki/Learning_object">learning objects</a>&#8220;.  I have become everything I hate.)</li>
<li>I think I actually convinced them that Haskell was practical.  Was that irresponsible?</li>
<li>Prolog sucks, but I&#8217;m still convinced it&#8217;s a worthwhile exercise.</li>
<li>The &#8220;language concepts&#8221; section felt a bit like a laundry list of topics.  I don&#8217;t know that there&#8217;s really any way around that.  Maybe I could re-order things a bit so they flow together better.</li>
<li>The <a href="http://www.cs.sfu.ca/CC/383/ggbaker/project/">project</a> was interesting for all concerned.  I&#8217;d probably cut down to three or four language choices in the future, just to keep the TA from losing his mind.</li>
<li>I&#8217;m not particularly happy with the exams, but I&#8217;m never happy with my exams.</li>
<li><a href="http://ted376.wordpress.com/">Ted</a> was an invaluable sounding board throughout the semester, taking time he didn&#8217;t have to listen to my meanderings on the course.  Thanks be to Ted, who will do an excellent job teaching the course in the fall.  (Excellent, but wrong.)</li>
</ul>
<p>The feedback I have had from the student side has been very good so far (with the real teaching evaluations still outstanding).  I have never before had so many students who had <em>nothing to do with a course</em> talk to me about it.  Random students in the hall thought my project was a good idea; everybody and their dog knew about my first assignment; people with friends in the course want to know when I&#8217;m teaching it again.</p>
<p>I&#8217;ll take that as creating a &#8220;buzz&#8221; and call it a good thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2010/08/22/and-thats-how-you-teach-cmpt-383/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Everything I know about databases is wrong.  Also, right.</title>
		<link>http://gregbaker.ca/blog/2010/06/24/everything-i-know-about-databases-is-wrong-also-right/</link>
		<comments>http://gregbaker.ca/blog/2010/06/24/everything-i-know-about-databases-is-wrong-also-right/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 19:48:44 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=1047</guid>
		<description><![CDATA[I have been teaching CMPT 470 for six years now, with my 13th offering going on right now. Anybody doing that is going to pick up a thing or two about web systems. I was there for the rise of the MVC frameworks and greeted them with open arms. I watched Web 2.0 proclaim &#8220;screw [...]]]></description>
			<content:encoded><![CDATA[<p>I have been teaching <a href="http://www.cs.sfu.ca/CC/470/ggbaker/">CMPT 470</a> for six years now, with my 13th offering going on right now.  Anybody doing that is going to pick up a thing or two about web systems.</p>
<p>I was there for the rise of the MVC frameworks and greeted them with open arms.  I watched Web 2.0 proclaim &#8220;screw it, everything is JavaScript now&#8221; and listed with suspicion, but interest.  I am currently watching HTML5/CSS3 develop with excitement but wondering why nobody is asking whether IE will support any of it before the sun burns out.</p>
<p>There&#8217;s another thing on the horizon that is causing me great confusion: <a href="http://en.wikipedia.org/wiki/NoSQL">NoSQL</a>.</p>
<p>The NoSQL idea is basically that relational databases (MySQL, Oracle, MSSQL, etc.) are not the best solution to every problem, and that there is a lot more to the data-storage landscape.  I can get behind that.</p>
<p>But then, the NoSQL aficionados keep talking.  &#8220;Relational databases are slow&#8221; they say.  &#8220;You should never JOIN.&#8221;  &#8220;Relational databases can&#8217;t scale.&#8221;  These things sound suspicious.  Relational databases have a long history of being very good at their job: these are big assertions that should be accompanied by equally-big evidence.</p>
<p>So, I&#8217;m going to try to talk some of this through.  Let&#8217;s start with the non-relational database types.  (I&#8217;ll stick to the ones getting a lot of NoSQL-related attention.)</p>
<dl>
<dt>Key-value stores</dt>
<dd>(e.g. <a href="http://cassandra.apache.org/">Cassandra</a>, <a href="http://memcachedb.org/">Memcachedb</a>) A key-value store sounds simple enough: it&#8217;s a collection of keys (that you lookup with) and each key has an associated value (which is the data you want).  For Memcachedb, that&#8217;s exactly what you get: keys (strings) and values (strings/binary blobs that you interpret to your whim).</p>
<p>Cassandra add another layer of indirection: each &#8220;value&#8221; can itself be a dictionary of key-value pairs.  So, the &#8220;value&#8221; associated with the key &#8220;ggbaker&#8221; might be <code>{"fname":"Greg", "mi":"G", "lname":"Baker"}</code>.  Each of those sub-key-values is called a &#8220;column&#8221;.  So, the record &#8220;ggbaker&#8221; has a column with name &#8220;fname&#8221; and value &#8220;Greg&#8221; (with a timestamp).  Each record can have whatever set of columns are appropriate.</dd>
<dt>Document stores</dt>
<dd>(e.g. <a href="http://couchdb.apache.org/">CouchDB</a>, <a href="http://www.mongodb.org/">MongoDB</a>) The idea here is that each &#8220;row&#8221; of your data is basically a collection of key-value pairs.  For example, one record might be <code>{"fname":"Greg", "mi":"G", "lname":"Baker"}</code>.  Some other records might be missing the middle initial, or have a phone number added: there is no fixed schema, just rows storing properties.  I choose to think of this as a &#8220;collection of JSON objects that you can query&#8221; (but of course the internal data format is probably not JSON).</p>
<p>Mongo has a useful <a href="http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart">SQL to Mongo</a> chart that summarizes things nicely.</dd>
<dt>Tabular</dt>
<dd>(e.g. <a href="http://labs.google.com/papers/bigtable.html">BigTable</a>, <a href="http://hbase.apache.org/">Hbase</a>)  The big difference here seems to be that the tabular databases use a <em>fixed schema</em>.  So, I have to declare ahead of time that I will have a &#8220;people&#8221; table and entries in there can have columns &#8220;fname&#8221;, &#8220;lname&#8221;, and &#8220;mi&#8221;.  Not every column has to be filled for each row, but there&#8217;s a fixed set.</p>
<p>There are typically many of these &#8220;tables&#8221;, each with their own schema.  </dd>
</dl>
<p>Summary:  There&#8217;s a lot of similarity here.  Things aren&#8217;t as different as I thought.  In fact, the big common thread is certainly less-structured data (compared to the relational style of foreign keys and rigid data definition).  Of course, I haven&#8217;t gotten into how you can actually <em>query</em> this data, but that&#8217;s a whole other thing.</p>
<p>Let&#8217;s see if I can summarize this (with Haskell-ish type notation, since that&#8217;s fresh in my head).</p>
<blockquote><pre><code>data Key,Data = String
memcacheDB :: Map Key Data
data CassandraRecord = Map Key (Data, Timestamp)
cassandraDB :: Map Key CassandraRecord</code>

data JSON = Map Key (String | Number | &hellip; | JSON)
mongoDB,couchDB :: [JSON]

data Schema = [Key]
data BigTable = (Schema, [Map Key Data]) -- where only keys from Schema are allowed in the map
bigTableDB :: Map Key BigTable -- key here is table name</pre>
</blockquote>
<p>The documentation for these projects is generally somewhere between poor and non-existent: there are a lot of claims of speed and efficiency and how they are <em>totally</em> faster than MySQL.  What&#8217;s in short supply are examples/descriptions of how to actually get things done.  (For example, somewhere in my searching, I saw the phrase &#8220;for examples of usage, see the unit tests.&#8221;)</p>
<p>That&#8217;s a good start. Hopefully I can get back to this and say something else useful on the topic.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2010/06/24/everything-i-know-about-databases-is-wrong-also-right/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How to not attend a lecture</title>
		<link>http://gregbaker.ca/blog/2010/05/28/how-to-not-attend-a-lecture/</link>
		<comments>http://gregbaker.ca/blog/2010/05/28/how-to-not-attend-a-lecture/#comments</comments>
		<pubDate>Fri, 28 May 2010 07:06:10 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=1009</guid>
		<description><![CDATA[I teach at a university. That comes with certain parameters: most of my students are in their late teens or early twenties, the average student is reasonably bright but occasionally unmotivated, and I don&#8217;t really have any way to compel students to come to lectures. I do my best to give interesting, informative, and entertaining [...]]]></description>
			<content:encoded><![CDATA[<p>I teach at a university.  That comes with certain parameters: most of my students are in their late teens or early twenties, the average student is reasonably bright but occasionally unmotivated, and I don&#8217;t really have any way to compel students to come to lectures.</p>
<p>I do my best to give interesting, informative, and entertaining lectures.  I&#8217;m successful enough that most students come most of the time, and that&#8217;s awesome.</p>
<p>Sometimes students don&#8217;t come to lecture.  They don&#8217;t need a good reason, and they don&#8217;t have to tell me about it.  I&#8217;m okay with that too: part of being at university is being responsible about that kind of thing and I&#8217;m happy to assume that whatever reason they have is a good one.</p>
<p>But what really annoys me is when students feel the need to email me, tell me the stupid reason they didn&#8217;t come to lecture, and then ask me to tell them what I covered.</p>
<p>I already spent an hour (or three hours) of my time giving the lecture and they had an opportunity to attend.  I put a great deal of time and effort into explaining the material in the best way I can and pointing out the things that I think are important.  I did all of this because I think I can actually do a decent job of getting material across in the lecture format and I think the material I&#8217;m talking about is important.</p>
<p>These emails leave me with two choices: (1) reduce a carefully-prepared lecture to a pointless list of topics and thus implying that I might as well have read them the textbook, or (2) spending another hour repeating the lecture in email form.  Neither one of those is very attractive, but there&#8217;s also the third option that I have started to avail myself of: telling the students to shove off.</p>
<p>I&#8217;ll say here what I said to my CMPT 165 class last semester: if you miss a lecture, you ask a friend in the class for their notes.  If you don&#8217;t have a friend in the class, ask the person sitting beside you; if at all possible, try to do this when you are sitting beside someone who you find attractive and offer to buy them coffee in return.</p>
<p>Seriously&hellip; do I have to explain everything?</p>
<p>cf. <a href="http://www.management-issues.com/2006/8/24/research/the-scourge-of-the-entitlement-generation.asp">entitlement generation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2010/05/28/how-to-not-attend-a-lecture/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CMPT 383: for real this time</title>
		<link>http://gregbaker.ca/blog/2010/04/19/cmpt-383-for-real-this-time/</link>
		<comments>http://gregbaker.ca/blog/2010/04/19/cmpt-383-for-real-this-time/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 01:09:07 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=991</guid>
		<description><![CDATA[I have mentioned here before that I was planning to teach CMPT 383. It ended up being a no-go this semester because of a very productive capstone project team (more on that later). But, I&#8217;m on-deck to teach it in the summer. The class is full; the waiting list is full; must be time to [...]]]></description>
			<content:encoded><![CDATA[<p>I have mentioned here before that <a href="http://gregbaker.ca/blog/2009/07/07/cmpt-383/">I was planning to teach CMPT 383</a>.  It ended up being a no-go this semester because of a <a href="http://gregbaker.ca/blog/2009/12/01/spring-plan-ddp-projects/">very productive capstone project team</a> (more on that later).</p>
<p>But, I&#8217;m on-deck to teach it in the summer.  The class is full; the waiting list is full; must be time to plan a course.  After much soul-searching, I have decided there will be three main topics in the course and they will be covered in this order:</p>
<dl>
<dt>Functional programming (and Haskell)</dt>
<dd>
<p>
This will be most students&#8217; first introduction to a non-imperative programming paradigm (and associated language).  Every little while I think this won&#8217;t take long, then I remember the list of things that have to be introduced to get anywhere with Haskell: being really good at recursion, list comprehensions, lazy evaluation, type inference, higher-order functions, and other stuff to be discovered as I try to teach the language.</p>
<p>
From my perspective, there are two reasons to be talking about functional programming. First, it&#8217;s finding some relevance, probably because people want to parallelize things (e.g. <a href="http://couchdb.apache.org/">CouchDB</a>).  Second, there are important lessons from functional programming that can be <a href="http://http://www.harukizaemon.com/2010/03/functional-programming-in-object-oriented-languages.html">transferred to OO programming</a>.
</p>
</dd>
<dt>&#8220;Language Features&#8221;</dt>
<dd>
<p>This section contains the big concepts of the course: type systems (static/dynamic, strong/weak, type coercion, duck-typing, late/early binding, &hellip;), interpreted vs compiled, pointers vs references, memory management, reflection, runtime environments, first-class functions, objects, exceptions, mutable/immutable objects, &hellip;.</p>
<p>The basic question here is: what are the real differences between the programming languages you have to choose from?  How might they affect your choice of language for a project?</p>
</dd>
<dt>Logic programming (and Prolog)</dt>
<dd>
<p>As much as I am aware that Prolog is pretty much confined to old school AI researchers, I still think there&#8217;s some value in being exposed to logic programming. It should be possible to translate back to the OO world the idea of expressing a problem as a series of constraints and then looking to satisfy those constraints.</p>
<p>To be fair, this is the chunk I am most unsure of.  Part of the reason it comes last is that if anything should fall off the end of a full semester, it&#8217;s this.</p>
</dd>
</dl>
<p>The exact balance of the topics remains to be seen.  I&#8217;ll guess 5 weeks, 5 weeks, 3 weeks.</p>
<p>As for getting marks, I am as far as:</p>
<ul>
<li>Lab exercises: weekly hour-or-two chances to practice the concrete skills.</li>
<li>Assignments: like&hellip; two of them?  One Haskell, one Prolog?</li>
<li>Project: pick a somewhat obscure language from a list I provide.  Explore it by writing a report and some programs with it.</li>
<li>A midterm and a final exam.</li>
</ul>
<p>No idea what I&#8217;ll ask on the exams.  Maybe Warren has some old ones I can look at.</p>
<p>So there it is.  Unless I change my mind.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2010/04/19/cmpt-383-for-real-this-time/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Exam craziness</title>
		<link>http://gregbaker.ca/blog/2009/12/11/exam-craziness/</link>
		<comments>http://gregbaker.ca/blog/2009/12/11/exam-craziness/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 16:32:11 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=925</guid>
		<description><![CDATA[Yesterday, I had both of my CMPT 165 exams (on-campus and distance) back to back. The exams were different enough that students talking for the few minutes between exams wouldn&#8217;t get anything useful from it, but no more than that. Six hours is too goddamn long to be in exams. I can think of no [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I had both of my CMPT 165 exams (on-campus and distance) back to back.  The exams were different enough that students talking for the few minutes between exams wouldn&#8217;t get anything useful from it, but no more than that.</p>
<p>Six hours is too goddamn long to be in exams.  I can think of no way to describe the day other than a list of happenings:</p>
<p>[tl;dr Go for 2b, 3ab, 4b.]</p>
<ol>
<li>Pre exam:
<ol>
<li>The first exams start at 8:30.  At 7:45, not one but <strong>two</strong> of my colleagues were still trying to photocopy their exams for big sections.  Office photocopier was jamming every two seconds; grad photocopier was down.</li>
<li>Critical mobile phone usage #1: realizing Amanda would already be in her office, I phoned her and got one colleague into the photocopier in the Dean&#8217;s Office.</li>
<li>&#8220;Wait&hellip; did I tell that student she could start a half hour early?  Where was she going to meet me?&#8221;  Send TA running to the room with an exam paper, just in case.  (No student.)</li>
</ol>
</li>
<li>On campus section:
<ol>
<li>Before the exam, a girl flagged me down and told me she &#8220;had cancer before&#8221; and had been feeling lightheaded this morning. If she had to leave during the exam, that was why.  I tried to get her to Health Services right away, but she insisted on staying.  At the end of the exam, I convinced her to at least go and get her blood pressure taken or something.</li>
<li>Two minutes into the exam, after sitting there for three or four minutes before it started, looking at the exam cover sheet (which says &#8220;CMPT 165&#8243;) and me, a student put up his hand and said &#8220;this isn&#8217;t CMPT 120&#8243; and left.</li>
<li>Freakin&#8217; piles of questions, including &#8220;can you give me a hint&#8221; and &#8220;what time does the exam end&#8221;.  Many more questions than the distance section.</li>
</ol>
</li>
<li>Distance ed section:
<ol>
<li>About 10 minutes into an exam, one of the kids that had run in a few minutes late flagged a TA over and said &#8220;I feel like I might pass out.&#8221;  I talked to him for a few seconds and he was not entirely conscious: able to answer yes or no questions, but that&#8217;s about it.  He probably couldn&#8217;t have walked out of the room at that point.</li>
<li>Critical mobile phone usage #2: phoned SFU security for a medical emergency.  To the credit of security: they came quickly and handled it quietly and with a minimum amount to spectacle to distract everybody else.  They took the student to Health Services.</li>
<li>After all this, I start to realize that I have been getting lightheaded when standing up: I&#8217;m hungry and totally dehydrated from four hours running up and down hot lecture halls.  A litre of water and snack later, I&#8217;m feeling much better.</li>
<li>A guy came in 45 minutes late after &#8220;car problems&#8221;.  A girl came in about 1:15 late after a car accident on the way from Abbotsford.</li>
<li>With an hour left in the exam, passed-out student <strong>came back</strong>!  He wanted to finish his exam and was pretty sure he could get it done.  I took this as a sign of not yet being fully capable of making decisions and sent him to the distance ed office to schedule an alternate time.</li>
<li>Critical mobile phone usage #3: phoned distance ed and told them the story so they&#8217;d deal with this kid appropriately.  Apparently he wrote the exam later in the afternoon anyway (but at least he had the full three hours).</li>
</ol>
</li>
<li>After the exams:
<ol>
<li>I&#8217;m barely standing at this point.</li>
<li>I was talking to Anne, and told her the story of my day.  Anne is preparing to teach a course like 165 in Uruguay (since she is currently on study leave).  She was translating the course outline to Spanish and kept asking me things like &#8220;what wording do you like better?&#8221;  I must have said three times: &#8220;Anne&hellip; you know I don&#8217;t speak Spanish, right?!&#8221;</li>
<li>I might have eventually just wandered out of her office while she was still talking.  I don&#8217;t really remember.</li>
</ol>
</li>
</ol>
<p>There was probably more.  That&#8217;s all that&#8217;s coming to mind at the moment.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2009/12/11/exam-craziness/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Spring plan: DDP projects</title>
		<link>http://gregbaker.ca/blog/2009/12/01/spring-plan-ddp-projects/</link>
		<comments>http://gregbaker.ca/blog/2009/12/01/spring-plan-ddp-projects/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 06:15:15 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://gregbaker.ca/blog/?p=904</guid>
		<description><![CDATA[As I said before, I&#8217;m not teaching CMPT 383 in the spring (but I will be doing it in the summer). The alternate plan involves the &#8220;capstone&#8221; project that our dual-degree students have to do. I&#8217;m going to be supervising a group of students on the technical side of their project. Since I&#8217;m me, the [...]]]></description>
			<content:encoded><![CDATA[<p>As I said before, I&#8217;m <a href="http://gregbaker.ca/blog/2009/11/06/no-cmpt-383-for-me/">not teaching CMPT 383</a> in the spring (but I will be doing it in the summer).  The alternate plan involves the &#8220;capstone&#8221; project that our dual-degree students have to do.</p>
<p>I&#8217;m going to be supervising a group of students on the technical side of their project.  Since I&#8217;m me, the plan is to do a web project.  I thought about this for about 8 seconds before I realized what I must do&hellip; there&#8217;s an obvious set of web projects that I understand, students understand, and need to me done.</p>
<p>We have some very old and clunky web tools around the School that work, but aren&#8217;t pretty and don&#8217;t have much hope of improving in the future.  Students will know our gradebook and assignment submission tools, but there are a bunch more that aren&#8217;t student-facing.</p>
<p>My plan: replace as much as possible with modern, integrated, functional tools.  The plan goes (or at least start) like this:</p>
<ul>
<li>Global: Unified <a href="http://www.sfu.ca/cas/Using_CAS_at_SFU.html">CAS</a> authentication. A useful &#8220;dashboard&#8221; for everybody displaying recent activity relevant to them (upcoming due dates, recently posted grades, recent assignment submissions, etc).  Instructors should be able to copy an old offering to a new one (copying grading info, due dates, etc).</li>
<li>Gradebook: the basics as currently implemented, with calculated columns, released/unreleased columns, AJAX-y sorting and display of class lists, email notification of new grades (?).</li>
<li>Submission: Per-assignment configuration (e.g. assignment 1 requires submission of a text file for part 1, and a .java file for part 2; both are submitted as distinct files).  </li>
<li>Marking: Instructor sets up a marking key for TAs; TAs give grades and comments; info returned to students and grades automatically put into gradebook.</li>
</ul>
<p>Additional functionality suggestions welcome.  I have some cool &#8220;maybe&#8221; features to throw in if things go well.</p>
<p>I&#8217;m going to be treating whatever group I have as a development team, not a class.  So, I&#8217;ll be whipping them much more to get good-quality code, not a class project.</p>
<p>There&#8217;s certainly a possibility of catastrophic failure, but I&#8217;d say a reasonable chance of success.  We&#8217;ll see what happens.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregbaker.ca/blog/2009/12/01/spring-plan-ddp-projects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.402 seconds -->

