<?xml version='1.0' encoding='utf-8' ?>
<feed xmlns='http://www.w3.org/2005/Atom'>
  <title>Myles Carrick :: Articles</title>
  <link href='http://feeds.feedburner.com/mylescarrick' hreflang='en' rel='self' type='application/atom+xml' />
  <link href='http://mylescarrick.com/articles' hreflang='en' rel='alternate' type='text/html' />
  <author>
    <name>Myles Carrick</name>
    <uri>http://mylescarrick.com/</uri>
    <email>mylescarrick@gmail.com</email>
  </author>
  <id>tag:mylescarrick.com,2009-04-08:/articles</id>
  <updated>2009-09-04T00:00:00+10:00</updated>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/simple_delayed_job_with_god</id>
    <title type='html'>Simple delayed_job configuration with God on Ubuntu</title>
    <published>2009-09-04T00:00:00+10:00</published>
    <updated>2009-09-04T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/simple_delayed_job_with_god' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>After <a href="http://railscasts.com/episodes/171-delayed-job">Ryan Bates&#8217; really awesome Railscast</a> I figured it was time to get delayed_job happening in my application to process asynchronous stuff &#8211; in this case, delivering email &#8220;notifications&#8221;. If you want to know more about DJ, the Railscast serves as a great starting point.</p>
        <p><a href="http://github.com/collectiveidea/delayed_job">DelayedJob</a> is awesome, and comes with a rake task that spools up and runs the jobs. What I needed was a way to <strong>have Ubuntu control DJ</strong> &#8211; in particular, to automatically start up if the system has been rebooted&#8230; and to give me a quick easy way of probing for the status&#8230; and this is where <a href="http://god.rubyforge.org/">God</a> comes in &#8211; the pure ruby monitoring system that it&#8217;s author, Tom Preston-Werner describes as &#8220;like Monit, only awesome&#8221;.</p>
        <p>For this I&#8217;m standing on the shoulders of giants &#8211; check out the links below to the places from which I&#8217;ve learned and obtained the DJ-fu.</p>
        <h2>1. Get delayed_job happy</h2>
        <p>There&#8217;s no scope here to go through how DJ works. A good starting point is the DJ config that <a href="http://github.com/blog/229-dj-god">the github guys use</a>. Suffice to say&#8230; if it&#8217;s all apples, you should be able to run the rake task and get it to successfully execute:</p>
        <pre><code class="shell">$rake jobs:work&#x000A;</code></pre>
        <h2>2. Get God</h2>
        <pre><code class="shell">$sudo gem install god&#x000A;</code></pre>
        <h2>3. Get Ubuntu geared up to go for it</h2>
        <p>For this I&#8217;m massively indebted to <a href="http://openmonkey.com/articles/2008/05/god-init-script-for-debian-ubuntu-systems">Tim Riley&#8217;s very cool post &amp; script</a>.</p>
        <p>Start with a config file &#8211; we&#8217;ll put it in Ubuntu&#8217;s preferred place: <code>/etc/default/god</code>. This script is insanely simple &#8211; just sets a var that God uses to find our delayed_job config.</p>
        <pre><code class="shell">#config for GOD - I point it to a file in my RAILS_ROOT&#x000A;GOD_CONFIG=/path/to/rails/config/delayed_job.god&#x000A;</code></pre>
        <p>And then get an init script &#8211; at <code>/etc/init.d/god</code>. This, adapted from Tim Riley&#8217;s one (see the link above), should do the trick &#8211; it points back to our file at <code>/etc/default/god</code> and sticks its logs and pids in Ubuntu-friendly places:</p>
        <pre><code class="shell">#!/bin/sh&#x000A;&#x000A;### BEGIN INIT INFO&#x000A;# Provides: god&#x000A;# Required-Start: $all&#x000A;# Required-Stop: $all&#x000A;# Default-Start: 2 3 4 5&#x000A;# Default-Stop: 0 1 6&#x000A;# Short-Description: God&#x000A;### END INIT INFO&#x000A;&#x000A;NAME=god&#x000A;DESC=god&#x000A;&#x000A;set -e&#x000A;&#x000A;# Make sure the binary and the config file are present before proceeding&#x000A;test -x /usr/bin/god || exit 0&#x000A;&#x000A;# Create this file and put in a variable called GOD_CONFIG, pointing to&#x000A;# your God configuration file&#x000A;test -f /etc/default/god &amp;&amp; . /etc/default/god&#x000A;[ $GOD_CONFIG ] || exit 0&#x000A;&#x000A;. /lib/lsb/init-functions&#x000A;&#x000A;RETVAL=0&#x000A;&#x000A;case "$1" in&#x000A;start)&#x000A;  echo -n "Starting $DESC: "&#x000A;  /usr/bin/god -c $GOD_CONFIG -P /var/run/god.pid -l /var/log/god.log&#x000A;  RETVAL=$?&#x000A;  echo "$NAME."&#x000A;  ;;&#x000A;stop)&#x000A;  echo -n "Stopping $DESC: "&#x000A;  kill `cat /var/run/god.pid`&#x000A;  RETVAL=$?&#x000A;  echo "$NAME."&#x000A;  ;;&#x000A;restart)&#x000A;  echo -n "Restarting $DESC: "&#x000A;  kill `cat /var/run/god.pid`&#x000A;  /usr/bin/god -c $GOD_CONFIG -P /var/run/god.pid -l /var/log/god.log&#x000A;  RETVAL=$?&#x000A;  echo "$NAME."&#x000A;  ;;&#x000A;status)&#x000A;  /usr/bin/god status&#x000A;  RETVAL=$?&#x000A;  ;;&#x000A;*)&#x000A;  echo "Usage: god {start|stop|restart|status}"&#x000A;  exit 1&#x000A;  ;;&#x000A;esac&#x000A;&#x000A;exit $RETVAL&#x000A;</code></pre>
        <h2>4. Tell Ubuntu to start using it at the default run levels.</h2>
        <p>This ensures that when the system starts up it&#8217;ll kick off our DJ task.</p>
        <pre><code class="shell">$sudo update-rc.d god defaults&#x000A;</code></pre>
        <h2>5. Try it out &#8211; fire her up</h2>
        <pre><code class="shell">$sudo /etc/init.d/god start&#x000A;Starting god: god.&#x000A;</code></pre>
        <p>Checking the status should be equally simple.<br />
        <pre><code class="shell">$sudo /etc/init.d/god status&#x000A;dj:&#x000A;  dj-0: up&#x000A;</code></pre></p>
        <p>That should have you up and running. Drop me a line if you&#8217;d like to know more.</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/can_sites_force_browser_change</id>
    <title type='html'>Can Sites Force Browser Change? Push vs Pull in the next Browser War</title>
    <published>2009-07-22T00:00:00+10:00</published>
    <updated>2009-07-22T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/can_sites_force_browser_change' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>Developing sites in the late 90s, it seemed that the basic platform for the web &#8211; browsers, the <span class="caps">HTML</span> standard, plugins &#8211; were constantly changing. Flash was beginning to come of age as a technology; designers were excited; users loved visiting sites just to &#8216;play&#8217; with the novel navigation systems; our clients all decided that they needed Flash intros, splash pages, navigation.</p>
        <p>But the problem, of course, was that it <strong>just didn&#8217;t work</strong> &#8211; at least not in enough users&#8217; browsers. It was all very well for Microsoft and Netscape to be releasing new browsers, and for plugin developers like Adobe (not to mention those with other, less wieldy technologies like Java Applets) to continually roll out new versions every few months, but few <strong>real</strong> sites could rely on particular tools or versions. Sites built with Flash couldn&#8217;t be bookmarked. They weren&#8217;t accessible. And of course users encountering a site without the requisite plugin couldn&#8217;t be relied upon to know <em>how</em> to upgrade, even if we could convince them that they needed or indeed wanted to.</p>
        <p>A &#8216;baseline&#8217; seemed to have been established. The role for a developer was to work with the technologies that our users already had. We could monitor usage, and if a cool new feature was required and available to the majority of users, they key mantra was &#8220;graceful degradation&#8221;. What it meant, in practice was that users with Windows 98SE &#8211; with IE 5, and then Windows XP with IE 6 became the lowest common denominator &#8211; the fallback for us all. The best we could hope for was a gradual movement in the baseline &#8211; from IE4 to IE5, and so on. Flash was largely out of the question.</p>
        <h2>The sites push back: the YouTube effect</h2>
        <p>In 2005, a single website changed all of the rules. It turned out that while uers couldn&#8217;t be convinced to change their browser or install a plugin to access most services, nothing would be allowed to stand in the way of them accessing videos of a <a href="http://www.youtube.com/watch?v=dMH0bHeiRNg">middle-aged man dancing</a> or a baby lauging</p>
        <p><object width="320" height="265"><param name="movie" value="http://www.youtube.com/v/5P6UU6m3cqk&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/5P6UU6m3cqk&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object></p>
        <p>YouTube relied on video features only present in Flash Player 9, and oversaw the growth of Flash support to a staggering <a href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html">99% of users</a>.</p>
        <h2>Business as usual for browsers</h2>
        <p>But in the world of browsers, even the re-emergence of the browser wars with new entrants (Apple, the Mozilla project, Google) didn&#8217;t seem to make an impact on getting the main bulk of users to upgrade. Joe Average, it seems, <strong>didn&#8217;t even know what a browser was</strong></p>
        <p><object width="320" height="197"><param name="movie" value="http://www.youtube.com/v/o4MwTvtyrUQ&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/o4MwTvtyrUQ&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="197"></embed></object></p>
        <p>Google could wax lyrical about the coolness of <a href="http://www.youtube.com/watch?v=AusOPz8Ww80"><span class="caps">HTML</span> 5</a> and <a href="http://www.youtube.com/watch?v=v_UyVmITiYQ">Google Wave</a>, but the fact remained that two-thirds of users didn&#8217;t have a browser that supported it. We would have to wait for users to throw out their old computers.</p>
        <h2>The sites push back Part II</h2>
        <p>But then this past fortnight, it seems that a number of sites decided that sitting and waiting wasn&#8217;t going to cut it.</p>
        <p>Digg got the ball rolling, suggesting that they may start by <a href="http://blog.digg.com/?p=878">reducing the functionality (actually removing all interactive features) for IE6 users</a></p>
        <p>Next were Facebook and YouTube, who didn&#8217;t so much postulate on developer blogs, as start prompting users to move.</p>
        <p><img src="http://mylescarrick.com/images/articles/youtubeie6.png" alt="" /><br />
        <img src="http://mylescarrick.com/images/articles/fbie6.jpg" alt="" /></p>
        <p><strong>So what does this mean?</strong> Can we as web developers now start being aggressive in ending support for IE6? Has the need for graceful degradation been removed?</p>
        <p>I&#8217;d suggest that there are a couple of &#8216;take homes&#8217; from all of this:</p>
        <ol>
        	<li>If you&#8217;re running a site as big as YouTube, Facebook or Digg, you <strong>might</strong> be in the position to &#8220;push&#8221; your users to upgrade</li>
        	<li>If you&#8217;re like me and that&#8217;s not the case, there&#8217;s hope that at some point in the not-too-distant future, your users might have a decent browser with proper CCS3 support&#8230; and perhaps some day, HTML5, but that&#8217;s another story altogether.</li>
        	<li>If you deploy software into corporate or government environments, don&#8217;t hold your breath.</li>
        </ol>
        <p>In the meantime, this is what I&#8217;m doing:</p>
        <ul>
        	<li>I&#8217;m taking encouragement from the efforts of the large, social networking sites</li>
        	<li>I&#8217;m doing my best to encourage the education, government, and corporate clients that we have to consider the cost of maintaining support for older browsers&#8230; and the value in other areas (particularly security) in running current-generation software.</li>
        	<li>I&#8217;m making sure that I&#8217;m across efforts like Google&#8217;s HTML5 work</li>
        	<li>I&#8217;m hoping that (although I&#8217;m unlikely to ever really use it) Windows 7 (with its baseline of IE8) is a winner.</li>
        </ul>
        <p>These are certainly interesting times&#8230;</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/using_a_custom_logger_with_rails</id>
    <title type='html'>Using a Custom Logger with Rails</title>
    <published>2009-07-21T00:00:00+10:00</published>
    <updated>2009-07-21T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/using_a_custom_logger_with_rails' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>One of the great things about Rails is that of course it automatically does logging&#8230; and has different levels of logging for each environment.</p>
        <p>Despite this, I had a couple of gripes:</p>
        <ol>
        	<li>The logger doesn&#8217;t have a formatter &#8211; i.e. in particular, it doesn&#8217;t include timestamps.</li>
        	<li>It doesn&#8217;t automatically rotate &#8211; and the development log can get <span class="caps">MASSIVE</span> (I&#8217;ve often had them 5GB+)</li>
        </ol>
        <p>Additionally, I thought it&#8217;d be great if I could separate logs from ActiveRecord and ActionController.</p>
        <p>Thankfully, Rails lets us choose the logger that we want to use. We&#8217;ll create our own and ask Rails to use it.</p>
        <h2>Step 1. Set up our logger</h2>
        <p>We&#8217;re using the default ruby Logger (see <a href="http://ruby-doc.org/core/classes/Logger.html">http://ruby-doc.org/core/classes/Logger.html</a>).</p>
        <p>In <strong>environment.rb:</strong><br />
        <pre><code class="ruby">active_record_logger = Logger.new(File.join(RAILS_ROOT, "log", "#{RAILS_ENV}_active_record_log.log"), 'weekly')&#x000A;action_controller_logger = Logger.new(File.join(RAILS_ROOT, "log", "#{RAILS_ENV}_action_controller_log.log"), 'weekly')&#x000A;active_record_logger.formatter = action_controller_logger.formatter = Logger::Formatter.new&#x000A;</code></pre></p>
        <p>Some notes and options here:</p>
        <ul>
        	<li>We&#8217;re putting the log file in the default location (RAILS_ROOT/log/)</li>
        	<li>This will still produce separate logs for each environment (dev, test, prod, etc)</li>
        	<li>This will do weekly rotation &#8211; but you could easily switch to &#8216;daily&#8217; or &#8216;monthly&#8217;</li>
        	<li>We can also configure it to a maximum number of old logs + maximum size &#8211; see <a href="http://ruby-doc.org/core/classes/Logger.html#M001002">the docs</a> for more info.</li>
        </ul>
        <h2>Step 2. Ask Rails to use it</h2>
        <p>In the initializer block in environment.rb&#8230;</p>
        <pre><code class="ruby">Rails::Initializer.run do |config|&#x000A;  config.active_record.logger = active_record_logger&#x000A;  config.action_controller.logger = action_controller_logger&#x000A;&#x000A;  #...&#x000A;end&#x000A;</code></pre>
        <p>That should be it. Enjoy.</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/installing_rubymine_in_ubuntu_jaunty_904</id>
    <title type='html'>Installing RubyMine in Ubuntu Jaunty (9.04)</title>
    <published>2009-06-30T00:00:00+10:00</published>
    <updated>2009-06-30T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/installing_rubymine_in_ubuntu_jaunty_904' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>Being an Ubuntu user, and not a staunch advocate of one of the main text editors (Vim, Emacs), I thought I&#8217;d have a go at installing <a href="http://www.jetbrains.com/ruby">RubyMine</a>. They&#8217;ve recently been advertising everywhere in the Ruby world (RailsEnvy, Railscasts, etc)</p>
        <p>Installing is fairly straightforward.</p>
        <p>1. Get the app and a trial / real installation key. The latest version when I grabbed it was v1.1</p>
        <p>2. Unpack it, and move it to /opt/rubymine</p>
        <pre><code class="shell">tar -xvzf rubymine-1.1.tar.gz&#x000A;(tar output... extracted a folder named rubymine952)&#x000A;sudo mv rubymine942 /opt/rubymine&#x000A;</code></pre>
        <p>3. Sort out java.<br />
        <pre><code class="shell">sudo apt-get install sun-java6-jre sun-java6-sdk&#x000A;</code></pre></p>
        <p>Rubymine expects the java executable to be at /bin/java, but Ubuntu has it at /usr/bin/java</p>
        <pre><code class="shell">sudo ln -s /usr/bin/java /bin/java&#x000A;</code></pre>
        <p>4. Add a launcher. I&#8217;m adding it to the top panel. Right-click on the panel and choose &#8220;Add to Panel&#8221;.</p>
        <p><img src="http://mylescarrick.com/images/articles/rubymine1.png" width="442" height="233"></p>
        <p>There&#8217;s an icon at <code style="font-weight:bold">/opt/rubymine/bin/rubymine.png</code></p>
        <p><img src="http://mylescarrick.com/images/articles/rubymine2.png" width="388" height="451"></p>
        <p>&#8230; and the application is <code style="font-weight:bold">/opt/rubymine/bin/rubymine.sh</code>,<br />
        <img src="http://mylescarrick.com/images/articles/rubymine3.png" width="526" height="233"></p>
        <p>Now to see if RubyMine is any good!</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/planning_a_new_moodle_site_administrator_notes</id>
    <title type='html'>Planning a new Moodle site (Administrator notes)</title>
    <published>2009-06-23T00:00:00+10:00</published>
    <updated>2009-06-23T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/planning_a_new_moodle_site_administrator_notes' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>Last week I had the privilege of heading out to <a href="http://www.joeys.org" title="&#39;Joeys&#39;">St Joseph&#8217;s College at Hunter&#8217;s Hill</a> to talk about Moodle strategy and administration.</p>
        <p>I was able to make use of the great notes that I had previously developed as <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons</a> license.</p>
        <p>In case you&#8217;re interested, I&#8217;ve posted the slides here. There&#8217;s no audio of course, but drop me a line if you&#8217;d like to chat about anything in them.</p>
        <iframe src='http://docs.google.com/EmbedSlideshow?id=ddb5bfrt_2ccwkjdg4&size=m' frameborder='0' width='555' height='451'></iframe>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/moving_a_git_submodule</id>
    <title type='html'>Moving a Git Submodule</title>
    <published>2009-05-14T00:00:00+10:00</published>
    <updated>2009-05-14T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/moving_a_git_submodule' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>At <a href="http://catalyst-au.net">Catalyst</a> we&#8217;ve been using Git for several years (since its infancy)&#8230; and we currently use git-submodule to install plugins for Rails, Drupal, and Moodle.</p>
        <h2>The scenario</h2>
        <p>A common path I follow goes something like this:</p>
        <ul>
        	<li>Install plugin direct from a remote repo</li>
        	<li>Work happily with it (unmodified) for a while</li>
        	<li>Find a bug or need to modify (<span class="caps">ARRRGH</span>)</li>
        	<li>Fork the original repo, patch&#8230; and switch to our fork.</li>
        </ul>
        <p>This final step can be a bit of a pain to manage in git-submodule. I do something like this:</p>
        <h2>Switching over</h2>
        <p>1. <strong>Modify .gitmodules</strong> to to change the reference from old to new repo<br />
        <pre><code class="shell">vim .gitmodules&#x000A;</code></pre></p>
        <p>2. <strong>Use git submodule sync</strong><br />
        <pre><code class="shell">git submodule sync&#x000A;</code></pre></p>
        <p>3. Get into the repo and <strong>change references in .git/config to point to new repo</strong><br />
        <pre><code class="shell">cd path/to/submodule&#x000A;vim .git/config #and make changes&#x000A;git remote update&#x000A;</code></pre></p>
        <p>4. <strong>Commit any uncommitted changes</strong> and <strong>push it to your remote</strong> (I&#8217;m assuming that this is properly configured) &#8211; something like<br />
        <pre><code class="shell">git commit -am "fix scary bug"&#x000A;git push origin master&#x000A;git remote update&#x000A;</code></pre></p>
        <p>5. <strong>Add the old repo as a remote</strong><br />
        <pre><code class="shell">git remote add upstream git://github.com/upstream_user/the_submodule.git&#x000A;git remote update&#x000A;</code></pre></p>
        <p>6. <strong>Switch back to the main repo, add and commit .gitmodules and the actual submodule</strong>.</p>
        <p>You&#8217;re done. Let me know if you have any hassles with it.</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/another_step_for_moodle_and_git</id>
    <title type='html'>Another step for Moodle and Git</title>
    <published>2009-05-07T00:00:00+10:00</published>
    <updated>2009-05-07T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/another_step_for_moodle_and_git' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>Back in October 2006 at the Sydney MoodleMoot, <a href="http://docs.moodle.org/en/User:Martin_Langhoff">Martin Langhoff</a> introduced me to Git. Martin had just started using Git to track Moodle&#8217;s <span class="caps">CVS</span>&#8230; and was hosting it at <a href="http://catalyst.net.nz">Catalyst</a> at <a href="http://git.catalyst.net.nz">http://git.catalyst.net.nz</a></p>
        <p>Since then, Catalyst&#8217;s repo has become the source for many in Moodle:</p>
        <ul>
        	<li><a href="http://docs.moodle.org/en/Development:Tracking_Moodle_CVS_with_git">MoodleDocs</a></li>
        	<li>Forum Posts
        	<ul>
        		<li><a href="http://moodle.org/mod/forum/discuss.php?d=91998" title="take2">Tracking Moodle <span class="caps">CVS</span> with git</a></li>
        		<li><a href="http://moodle.org/mod/forum/discuss.php?d=42275">Tracking Moodle <span class="caps">CVS</span> with git</a></li>
        		<li><a href="http://moodle.org/mod/forum/discuss.php?d=34472">Merging Custom Moodle Code With Stable Releases</a></li>
        		<li><a href="http://moodle.org/mod/forum/discuss.php?d=66412">Moving to git, need serious help</a></li>
        		<li><a href="http://moodle.org/mod/forum/discuss.php?d=99763">The continuing story of moving Moodle towards Git</a></li>
        	</ul></li>
        </ul>
        <p>This week, Catalyst&#8217;s <a href="http://twitter.com/fmarier">Francois</a> <a href="http://tracker.moodle.org/browse/MDLSITE-714">helped the Moodle.org guys take it a step further</a> &#8230; and there&#8217;s now an official (read-only) Moodle Git repo: <strong><a href="http://git.moodle.org">http://git.moodle.org</a></strong></p>
        <p>Hopefully it won&#8217;t be long until <span class="caps">CVS</span> is just a distant, scary memory.</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/installing_ruby_and_rails_on_ubuntu_jaunty</id>
    <title type='html'>Installing Ruby and Rails on Ubuntu Jaunty (9.04)</title>
    <published>2009-05-07T00:00:00+10:00</published>
    <updated>2009-05-07T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/installing_ruby_and_rails_on_ubuntu_jaunty' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>Setting up a new machine for some pairs programming today gave me the ideal opportunity to look at what&#8217;s required now for a barebones installation of Ruby &amp; Rails for Ubuntu</p>
        <p>[<span class="caps">UPDATED</span> 2009-06-29: Switched from local mongrel to passenger)]</p>
        <p>Get Ruby <span class="caps">AND</span> <span class="caps">RUBYGEMS</span> from apt-get (I&#8217;ve always previously compliled rubygems from source on Ubuntu)</p>
        <pre><code class="shell">sudo apt-get install ruby libopenssl-ruby libruby1.8 libreadline-ruby1.8 ruby1.8-dev build-essential&#x000A;</code></pre>
        <p>Get Rubygems &#8211; the latest from <a href="http://rubyforge.org/frs/?group_id=126">rubyforge</a>.</p>
        <pre><code class="shell">wget http://rubyforge.org/frs/download.php/57643/rubygems-1.3.4.tgz&#x000A;tar -xvzf rubygems-1.3.4.tgz&#x000A;(tar output)&#x000A;cd rubygems-1.3.4&#x000A;ruby setup.rb&#x000A;</code></pre>
        <p>I&#8217;m now using Passenger in production &#8211; let&#8217;s get that and Rails</p>
        <pre><code class="shell">sudo apt-get install apache2-mpm-prefork apache2-mpm-prefork-dev&#x000A;sudo gem install rails rake passenger&#x000A;</code></pre>
        <p>Then the installer for apache2<br />
        <pre><code class="shell">sudo passenger-install-apache2-module&#x000A;</code></pre></p>
        <p>Follow the Passenger installation instructions. I&#8217;ve put the config settings in the recommended location (/etc/apache2/conf.d/passenger)<br />
        <pre><code class="shell">LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so&#x000A; PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.4&#x000A; PassengerRuby /usr/bin/ruby1.8&#x000A;</code></pre></p>
        <p>I&#8217;m assuming that you know how to configure Apache virtual hosts. Here&#8217;s a summary of what I&#8217;ve done:</p>
        <ol>
        	<li>Add an entry in /etc/hosts for each local site</li>
        	<li>Add a virtualhost for each site&#8230; something like:</li>
        </ol>
        <pre><code class="shell">&lt;VirtualHost *:80&gt;&#x000A;ServerName mysite&#x000A;DocumentRoot /home/me/git/mysite/public&#x000A;&lt;/VirtualHost&gt;&#x000A;</code></pre>
        <p>If that wasn&#8217;t the path to an actual rails site&#8230; put one there</p>
        <pre><code class="shell">cd /home/me/git/&#x000A;rails mysite&#x000A;</code></pre>
        <p>Check we&#8217;re up and running &#8211; fire up a browser and go to http://mysite Working? Great!</p>
        <pre><code class="shell">firefox mysite&#x000A;</code></pre>
        <p>Now to get a database running. Here&#8217;s the &#8216;real&#8217; database (postgres)</p>
        <pre><code class="shell">sudo apt-get install postgresql-8.3 postgresql-client-8.3&#x000A;sudo apt-get install libpq-dev&#x000A;sudo gem install pg&#x000A;</code></pre>
        <p>&#8230;and for sqlite</p>
        <pre><code class="shell">sudo apt-get install libsqlite3-dev&#x000A;sudo gem install sqlite3-ruby&#x000A;</code></pre>
        <p>If if you&#8217;ve got an existing site&#8230; there&#8217;ll be a bunch of required gems &#8211; use the rake task to grab &#8217;em<br />
        <pre><code class="shell">sudo rake gems:install&#x000A;</code></pre></p>
        <p>After that&#8230; it&#8217;s time to get cracking with some Rails dev!</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/burning_avi_to_dvd_on_ubuntu</id>
    <title type='html'>Burning AVI (Xvid etc) files to DVD on Ubuntu</title>
    <published>2009-05-01T00:00:00+10:00</published>
    <updated>2009-05-01T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/burning_avi_to_dvd_on_ubuntu' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>For quite some time, the main bulk of my media files have been stored on a networked file server. It gives me ultimate flexibility in terms of how and where I access them: remotely (via ssh) or across the home network to any of a number of devices. Every now and then, however, I need to return them to <span class="caps">DVD</span> for playing on a conventional <span class="caps">DVD</span> player. It&#8217;s really easy to do at the shell (command line).</p>
        <p><strong>1. Get the bits of software you&#8217;ll need</strong></p>
        <pre><code class="shell">sudo apt-get install ffmpeg dvdauthor growisofs&#x000A;</code></pre>
        <p><strong>2. Convert the avi to a <span class="caps">DVD</span>-friendly MPEG2 (it&#8217;ll probably be huge in comparison to your avi, so be careful!)</strong></p>
        <pre><code class="shell">ffmpeg -i my_favourite_xvid.avi -target pal-dvd my_favourite_xvid.mpg&#x000A;</code></pre>
        <p>NB. I&#8217;m in Australia, so we use <span class="caps">PAL</span>-formatted <span class="caps">DVD</span>. You could use &#8216;dvd&#8217; instead of &#8216;pal-dvd&#8217; if you want <span class="caps">NTSC</span>. ffmpeg is a <em>very</em> powerful application &#8211; check out the manpage for more.</p>
        <p><strong>3. Set up some chapter information.</strong><br />
        dvdauthor uses a very simple xml format. You can get away with a very minimal setup like <a href="http://mylescarrick.com/assets/my_favourite_vid.xml" title="attached xml file">this</a></p>
        <p>&#8230;and get it ready with dvdauthor<br />
        <pre><code class="shell">dvdauthor -x my_favourite_vid.xml&#x000A;</code></pre></p>
        <p><strong>4. Burn it to a <span class="caps">DVD</span></strong><br />
        That previous example sticks the VOBs etc in a folder called <span class="caps">DVD</span>. Assuming that your dvd burner is at /dev/dvd (it probably is)&#8230;<br />
        <pre><code class="shell">growisofs -Z /dev/dvd -dvd-video DVD/&#x000A;</code></pre></p>
        <p>&#8230; and it&#8217;s good to go!</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/choosing_a_platform_for_moodle</id>
    <title type='html'>Choosing a platform (Windows vs Linux) for Moodle</title>
    <published>2009-04-18T00:00:00+10:00</published>
    <updated>2009-04-18T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/choosing_a_platform_for_moodle' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>I posted a response on this issue on the <a href="http://mitie.edu.au"><span class="caps">MITIE</span> Forums</a> and thought I&#8217;d tweak and include it here.</p>
        <p>Contrary to many common perceptions (and my own feelings on the topic) not <i>impossible</i> to run Moodle in a fairly stable way for a largeish Windows installation. In my experience, you want a team to be confident doing things like:</p>
        <ul>
        	<li>merging core Moodle code with your own and community-contributed modules</li>
        	<li>executing backup and restore operations (of moodledata files and db dumps)</li>
        	<li>performance tuning and tweaking of each element in the system</li>
        	<li>understanding and ensuring the security of each component, as well as the whole system</li>
        	<li>configuring <span class="caps">SSL</span> (if req&#8217;d) etc</li>
        	<li>quickly building and configuring testing &amp; staging sites (ensuring, for example, that those updates from <span class="caps">CVS</span> or Git aren&#8217;t going to break your site)</li>
        	<li>managing and monitoring logs, scheduled tasks, etc</li>
        </ul>
        <p>If you&#8217;re keen to support the infrastructure yourself, I&#8217;d suggest reading the documentation (<a href="http://docs.moodle.org/en/Administrator_documentation">http://docs.moodle.org/en/Administrator_documentation</a>) and subscribing to the Moodle.org &#8220;Windows-based Servers&#8221; forum (<a href="http://moodle.org/mod/forum/view.php?id=6799">http://moodle.org/mod/forum/view.php?id=6799</a>). From some careful searching or from just watching the flow of discussion I&#8217;d look to gauge the community&#8217;s feelings on the best choices.</p>
        <p>Although <a href="http://www.catalyst-au.net/moodle_services_and_support">our team</a> would only use and recommend Linux for the several hundred Moodle sites (with anywhere from 200 &#8211; 45 000 users per site) that we support, I personally have run Moodle on <span class="caps">IIS</span> (with <span class="caps">PHP</span> as <span class="caps">ISAPI</span> and then later as FastCGI &#8211; NB <a href="http://www.iis-aid.com/articles/iis_aid_news/php_isapi_module_to_be_retired">this discussion on <span class="caps">ISAPI</span> being discontinued from php 5.3 onwards</a> ), with DBs in MySQL and (with less success) <span class="caps">MSSQL</span>. If your team has great <span class="caps">IIS</span> skills and experience and you&#8217;ve access to someone with really good <span class="caps">MSSQL</span> knowledge, then this could be an option.</p>
        <p>Keep in mind too, that running Moodle on Linux doesn&#8217;t prevent you from things like: connecting to a MS SQLServer to do <strong>automated student enrolment</strong>; using <strong>AD for authentication and single sign-on</strong>, etc</p>
        <p>Some other things (like spellcheck, some of the integrated tools like zip, du. etc) are either difficult or impossible to configure.</p>
        <p>If you&#8217;re self-supporting with Moodle, I think it&#8217;s probably wise to make the decision based on:</p>
        <ol>
        	<li>The current and intended future skillsets of <strong>your team</strong>. This includes all components of the system (the OS, web server, <span class="caps">PHP</span>, DB server, etc) in performing the list of activities I outlined above</li>
        	<li>The <strong>known stability, performance, security and reliability</strong> of Moodle and its core components (web server, <span class="caps">PHP</span>, DB server) under each platform</li>
        	<li>The strength of <strong>community support</strong> for Moodle (and other similar <span class="caps">PHP</span> apps) on the platform.</li>
        </ol>
        <p>All the best for great Moodling!</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/automatically_adding_parents_to_your_moodle</id>
    <title type='html'>Automatically adding parents to your Moodle</title>
    <published>2009-04-16T00:00:00+10:00</published>
    <updated>2009-04-16T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/automatically_adding_parents_to_your_moodle' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>After the core process of adding students and faculty, many K12 institutions are keen to add parents to their Moodle site. There are generally two levels at which this can occur:</p>
        <ol>
        	<li>Adding parents to courses</li>
        	<li>Assigning parents to their children &#8211; to view their profile, activity reports, grades, etc.</li>
        </ol>
        <p>While the first of these two is relatively simple using existing functionality &#8211; either manually (eek) via Assign Roles, or automatically, using a Moodle enrolment plugin, the second is a little more tricky. For a while, it has been possible to add parents to a Moodle site, using the &#8220;Assign Roles in User&#8221; functionality to effectively &#8220;enrol&#8221; users in other users.</p>
        <p>This is outlined in the <a href="http://docs.moodle.org/en/Parent_role">MoodleDocs</a>&#8230; and is profiled in various articles and videos, including <a href="http://www.moodleman.net/archives/281">this great one</a> by Julian. The issue, however is that it isn&#8217;t really possible to do this <i>en masse</i>, i.e. to make it automatic. Discussions such as that at <a href="http://moodle.org/mod/forum/discuss.php?d=70539">http://moodle.org/mod/forum/discuss.php?d=70539</a> highlight some approaches, but they&#8217;re generally too hacky to use in production.</p>
        <p>At <a href="http://catalyst-au.net">Catalyst</a> we recently completed a project for a corporate client in Australia &amp; New Zealand where we needed to automate the process &#8211; with a specially crafted Moodle enrolment plugin. As part of that, Catalyst agreed to release the amazing work the developer, <a href="http://she.geek.nz">Penny Leach</a> to the user contributed (&#8220;contrib&#8221;) area of Moodle: <a href="http://cvs.moodle.org/contrib/plugins/enrol/dbuserrel/">http://cvs.moodle.org/contrib/plugins/enrol/dbuserrel/</a></p>
        <p>This is how I&#8217;ve gone about adding this capability to the Moodle sites at <a href="http://nbcs.nsw.edu.au"><span class="caps">NBCS</span></a></p>
        <h2>Getting the plugin</h2>
        <p>There are (at least) three ways to get the plugin, and install it in <your_moodle_root>/enrol/ :</p>
        <ol>
        	<li>Download the zip and unpack so it&#8217;s in <your_moodle_root>/enrol/dbuserrel</li>
        	<li>Add to a <span class="caps">CVS</span>-managed site</li>
        	<li>Transfer from <span class="caps">CVS</span> to Git and add as a submodule</li>
        </ol>
        <h3>Downloading as a zip</h3>
        <p>As (from what I could see) the plugin hasn&#8217;t been profiled in the Modules and Plugins database, there&#8217;s no direct link for it&#8230; but Moodle&#8217;s packaging scripts automatically build it &#8211; I guessed the <span class="caps">URL</span> at <a href="http://download.moodle.org/download.php/plugins19/enrol/dbuserrel.zip">http://download.moodle.org/download.php/plugins19/enrol/dbuserrel.zip</a></p>
        <p>You can grab it and unzip it&#8230; and away you go.</p>
        <h3>Managing with <span class="caps">CVS</span></h3>
        <p>If you want to get it from <span class="caps">CVS</span>, you can, with (for the latest Moodle 1.9 version):<br />
        <pre><code class="shell">cvs -z3 -d:pserver:anonymous@SERVER.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE contrib&#x000A;</code></pre></p>
        <p>replacing <span class="caps">SERVER</span> with your local mirror. E.g.<br />
        <pre><code class="shell">cvs -z3 -d:pserver:anonymous@uk.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE contrib&#x000A;</code></pre></p>
        <h3>Tracking with Git</h3>
        <p>Adapting the process from <a href="http://twitter.com/dan_p">Dan P&#8217;s Docs page</a> <a href="http://docs.moodle.org/en/Development:Importing_Moodle_CVS_history_into_git">http://docs.moodle.org/en/Development:Importing_Moodle_CVS_history_into_git</a></p>
        <pre><code class="shell">#!/bin/bash&#x000A;CVSROOT=:pserver:anonymous@uk.cvs.moodle.org:/cvsroot/moodle&#x000A;MODULE=contrib/plugins/enrol/dbuserrel&#x000A;INSTALLDIR=dbuserrel&#x000A;git-cvsimport -p x -v -k -o cvshead -d $CVSROOT -C $INSTALLDIR $MODULE &amp;&gt; cvsimport.log&#x000A;</code></pre>
        <p>Let&#8217;s get a branch to work on &#8211; we want to track the 1.9 stable branch. If you&#8217;ve already got a local branch (i.e. with your regular customisations, themes, etc) then you&#8217;ll of course want to branch from that for this test.<br />
        <pre><code class="shell">git checkout -b mdl19-parent-test origin/MOODLE_19_STABLE&#x000A;</code></pre></p>
        <p>We&#8217;ll add the submodule</p>
        <pre><code class="shell">git submodule add /path/to/my/contrib_module enrol/dbuserrel&#x000A;&#x000A;git submodule init&#x000A;git submodule update&#x000A;&#x000A;git status&#x000A;</code></pre>
        <p>shows<br />
        <pre><code class="shell">new file:   .gitmodules&#x000A;new file:   enrol/dbuserrel&#x000A;</code></pre></p>
        <p>let&#8217;s commit the changes to this branch<br />
        <pre><code class="shell">git commit -am "enrol/dbuserrel: added local git repo as submodule"&#x000A;</code></pre></p>
        <p>Updating to keep track of upstream changes is a matter of</p>
        <ol>
        	<li>running our import script again (to do <span class="caps">CVS</span> &gt; <span class="caps">GIT</span>)</li>
        	<li>switching to our git branch and running<br />
        <pre><code class="shell">git submodule update&#x000A;</code></pre></li>
        </ol>
        The code is now in my repository, and ready to deploy with my moodle code. Hold on just a tick, and I&#8217;ll be back with another post on the user end of things &#8211; i.e. how to enable and configure it in the browser.
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/getting_moodle_ready_for_the_k12_primetime</id>
    <title type='html'>Getting Moodle Ready for the K12 Primetime</title>
    <published>2009-04-08T00:00:00+10:00</published>
    <updated>2009-04-08T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/getting_moodle_ready_for_the_k12_primetime' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>At Catalyst, we&#8217;re doing some work as part of a larger project for the NZ Ministry of Education, helping to make Moodle easier for K12 (school) settings.</p>
        <p>We&#8217;re looking to put together a special K12 blend of Moodle that:</p>
        <ul>
        	<li>is easy for school system administrators to install &amp; configure</li>
        	<li>is already configured for typical K12 structures</li>
        	<li>gives teachers a bit of a &#8216;leg-up&#8217; to get moving quickly.</li>
        </ul>
        <p>These suggestions are designed to guide and inform thinking about such a development</p>
        <h2>A special support site.</h2>
        <p>The Moodle.org forums, particularly the <a href="http://moodle.org/mod/forum/view.php?f=731">Moodle in K12 Schools</a> forum, are particularly helpful, but they address an international audience, and (with the exception of that K12 forum) are predominantly geared towards large-scale university or corporate installations of Moodle. A support site will be created and managed with the goal of providing:</p>
        <ul>
        	<li>Aggregations of <strong>content from existing sites</strong> (Moodle.org, <a href="http://mitie.edu.au"><span class="caps">MITIE</span> (in Australia)</a>, and others.</li>
        	<li>Specific community-driven content that is <strong>local to the Australian and NZ contexts</strong></li>
        	<li><strong>Downloads</strong> of our &#8216;K12 special blend&#8217; Moodle and possibly some special tools, themes, etc.</li>
        </ul>
        <p>It would aim to be predominantly <strong>teacher-centered</strong>, with additional focus on school system administrators as well as school Principals and key decision-makers &#8211; enabling informed decisions to be made regarding the selection, adoption and support of Moodle. It is intended that this would <strong>augment</strong> not replace, the Moodle.org site.</p>
        <h2>Getting up and running (Installation and Configuration)</h2>
        <p>In K12 environments, the installers and managers of Moodle sites are often either <strong>teacher enthusiasts</strong>, or system administrators with little or no experience installing, configuring, securing and performance tuning web applications. Furthermore, system administrators are often working in <strong>Microsoft Windows&#8482;</strong> environments, without experience working with the main, preferred building blocks of Moodle: Linux, Apache, <span class="caps">PHP</span> and open source databases like PostgreSQL and MySQL.</p>
        <p>Suggested changes include:</p>
        <ol>
        	<li>The installation process could be modified to make it easier to choose sane/typical settings for schools (e.g. &#8217;messaging disabled, self-registration disabled, etc.).</li>
        	<li>Many of the activity modules and filters useful for schools could be pre-selected, and possibly &#8216;bundled&#8217; (subject to licensing). E.g. (Feedback and/or Questionnaire modules, Multimedia filters enabled).</li>
        	<li>Enrolment is a typical bug-bear of Administrators in schools. Key tasks here will be to (A) identify common systems of use in Australia &amp; NZ and provide guidelines for how to automate enrolment and/or (B) to work on a flexible enrolment management tool to simplify integration and automated enrolment (more to come on this idea later). It may also be advantageous here to provide information on the Support site about which existing student information systems provide &#8220;out of the box&#8221; integration with Moodle.</li>
        </ol>
        <h2>Making Moodle more familiar for teachers and students</h2>
        <p>Often the presentation of Moodle sites (wording, sequencing, etc. is not that of the typical (is there such a thing) school setting.</p>
        <p>Suggested changes include:</p>
        <ol>
        	<li><strong>Change the terminology with specific language packs.</strong> The language of Moodle is often not intuitive for teachers. Customizations of the language pack could help make this clearer. E.g. (&#8216;courses&#8217; become &#8216;classes&#8217;, &#8216;Assign roles&#8217; becomes &#8216;Class enrolment&#8217; or &#8216;Class members&#8217;).</li>
        	<li><strong>Develop / package some themes.</strong> Many standard Moodle themes are particularly formal and text-heavy. A further set of themes, specifically developed and/or licensed for distribution in schools, could be packaged, allowing for simple(?) customisation for schools. This could be incorporated together with the &#8216;course logo&#8217; idea, outlined below. The <a href="http://pete.nbcs.nsw.edu.au">&#8220;<span class="caps">PETE</span>&#8221; (Primary Education Through E-learning) theme</a> at Sydney&#8217;s <a href="http://www.nbcs.nsw.edu.au">Northern Beaches Christian School</a> is a great example of this.</li>
        	<li>Customise the course list pages to allow for a <strong>class &#8216;logo/icon&#8217;</strong>. One drawback of the standard lists of Moodle courses is the heavy reliance on text. One treatment for this is the development of a feature to allow a teacher to specify a class logo or icon image. This could be displayed in addition to the name when students are looking at lists of courses.</li>
        	<li>A <strong>class &#8216;default&#8217; page</strong>. Particularly in the Primary / Elementary school level, students have a single class that forms the basis for all or most of their study. In such a context, the usual process of logging into a homepage and then either navigating the course/category hierarchy or selecting a course from the &#8216;My Courses&#8217; block is of little use. A customisation to this could enable students to specify (of have specified for them) a &#8216;default&#8217; or &#8216;home&#8217; course &#8211; to which they are directed after login (unless of course they have arrived at the site by visiting a specific, deep link to particular Moodle content).</li>
        	<li>A <strong>new Course Format</strong>. From my post at <a href="http://moodle.org/mod/forum/discuss.php?d=120087">http://moodle.org/mod/forum/discuss.php?d=120087</a>:<br />
        &#8220;I&#8217;ve worked in many K12 schools as a teacher and Moodle admin&#8230; and have found that the StudyCalendar course format (http://docs.moodle.org/en/Study_calendar_course_format) from Sam Marshall / the OU is almost right for what many teachers need&#8230; and similar to what&#8217;s being described here:</li>
        </ol>
        1. just shows the &#8216;current&#8217; topic (e.g. &#8216;this lesson&#8217;)
        2. allows teachers to &#8216;group&#8217; together topics (into what we&#8217;d actually call topics).
        
        &#8220;What I&#8217;d like to see is this idea expanded to allow something a little more granular &#8211; where a &#8216;topic&#8217; or &#8216;week&#8217; is instead a &#8216;lesson&#8217;/&#8216;class&#8217;&#8230; and could have a date/time attached to it. These could then be grouped together so that a student could see how or where this lesson fits into the current flow&#8230; but could look ahead (if it has been prepared) or back in time along the timeline to see upcoming or previous &#8216;classes&#8217;. Having AJAXy up/down scrollability of this would be <span class="caps">VERY</span> valuable&#8230;&#8221;
        <h2>Further thoughts &#8211; E-Portfolio systems</h2>
        <p>One item under consideration is the simpler packaging of Moodle with the <a href="http://mahara.org">Mahara</a> e-portfolio system. Whereas Moodle is predominantly centred on the classroom or &#8216;course&#8217;, Mahara provides an <i>individualised</i> learning environment, where students construct a personal space by bringing together items from the web, their classroom files, and their own profile. Mahara and Moodle already support tight integration, however this can be significantly simplified by either:</p>
        <ol>
        	<li>Providing simpler, step-by-step instructions that make more assumptions about how schools will configure the relationships between systems or (preferably)</li>
        	<li>Pre-configured, packaged installation (a &#8220;1-click&#8221; installer?) incorporating those assumptions. For example, an initial set of keys generated; Options for trust between systems pre-selected.</li>
        </ol>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/up_and_running_with_sinatra</id>
    <title type='html'>Up and running with Sinatra</title>
    <published>2009-03-18T00:00:00+11:00</published>
    <updated>2009-03-18T00:00:00+11:00</updated>
    <link href='http://mylescarrick.com/articles/up_and_running_with_sinatra' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>Last month I saw <a href="http://toolmantim.com">toolmantim&#8217;s</a> cool presso on <a href="http://sinatrarb.org">Sinatra</a>&#8230; and thought I&#8217;d have a go at a site&#8230; and this is it.</p>
        <p>This little site/app is very much inspired by that site.</p>
        <p>The basics are:</p>
        <ul>
        	<li>No database &#8211; all articles stored as <span class="caps">HAML</span></li>
        	<li>No comments (a bit of a Calacanis thing there)</li>
        	<li>An opportunity to learn Sinatra, <span class="caps">HAML</span> and <span class="caps">SASS</span></li>
        </ul>
        Thinking now about the next step (and keen to get old blog posts in here too of course)...
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/google_apps_honours_its_sla_and_its_customers</id>
    <title type='html'>Google Apps honours its SLA; honours its customers</title>
    <published>2008-08-27T00:00:00+10:00</published>
    <updated>2008-08-27T00:00:00+10:00</updated>
    <link href='http://mylescarrick.com/articles/google_apps_honours_its_sla_and_its_customers' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p>At <span class="caps">TBS</span>, Dann and I have <a href="http://www.google.com/a">Google Apps Premier Edition</a>. Like all Gmail users, I&#8217;d noticed at least one of their recent outages, but was pleasantly surprised to see their <a href="http://gmailblog.blogspot.com/2008/08/we-feel-your-pain-and-were-sorry.html">direct acknowledgement</a> of the outages, and now their specific solution to the problem (via email). Imagine if our Aussie telcos took responsibility for the provision of their services like this!</p>
        <p>We&#8217;re committed to making Google Apps Premier Edition a service on which your organization can depend. During the first half of August, we didn&#8217;t do this as well as we should have. We had three outages &#8211; on August 6, August 11, and August 15. The August 11 outage was experienced by nearly all Google Apps Premier users while the August 6 and 15 outages were minor and affected a very small number of Google Apps Premier users. As is typical of things associated with Google, these outages were the subject of much public commentary.<br />
        Through this note, we want to assure you that system reliability is a top priority at Google. When outages occur, Google engineers around the world are immediately mobilized to resolve the issue. We made mistakes in August, and we&#8217;re sorry. While we&#8217;re passionate about excellence, we can&#8217;t promise you a future that&#8217;s completely free of system interruptions. Instead, we promise you rapid resolution of any production problem; and more importantly, we promise you focused discipline on preventing recurrence of the same problem.</p>
        <p>We&#8217;ve also heard your guidance around the need for better communication when outages occur. Here are three things that we&#8217;re doing to make things better:</p>
        <ol>
        	<li>We&#8217;re building a dashboard to provide you with system status information. This dashboard, which we aim to make available in a few months, will enable us to share the following information during an outage:<br />
        	<ul>
        		<li>A description of the problem, with emphasis   on user impact. Our&nbsp;<span>belief </span><span>i</span>s during the course of an outage, we should be singularly focused on solving the problem. Solving production problems involves an investigative process that&#8217;s iterative. Until the problem is solved, we don&#8217;t have accurate information around root cause, much less corrective action, that will be particularly useful to you. Given this practical reality, we believe that informing you that a problem exists and assuring you that we&#8217;re working on resolving it is the useful thing to do.</li>
        		<li>A continuously updated estimated time-to-resolution. Many of you have told us that it&#8217;s important to let you know when the problem will be solved. Once again, the answer is not always immediately known. In this case, we&#8217;ll provide regular updates to you as we progress through the troubleshooting process.</li>
        	</ul></li>
        	<li>In cases where your business requires more detailed information, we&#8217;ll provide a formal incident report within 48 hours of problem resolution. This incident report will contain the following information: <blockquote>
        	<ol>
        		<li>business description of the problem, with emphasis on user impact;</li>
        		<li>technical description of the problem, with emphasis on root cause;</li>
        		<li>actions taken to solve the problem;</li>
        		<li>actions taken or to be taken to prevent recurrence of the problem; and</li>
        		<li>time line of the outage.</li>
        	</ol></li>
        </ol>
        <ol>
        	<li>In cases where your business requires an in-depth dialogue about the outage, we&#8217;ll support your internal communication process through participation in post-mortem calls with you and your management team.</li></li>
        </ol>
        <p>Once again, thanks for your continued support and understanding.</p>
        <p>Sincerely,</p>
        <p>The Google Apps Team</p>
      </div>
    </content>
  </entry>
  <entry>
    <id>tag:mylescarrick.com,2009-04-08:/articles/rails_is_moving_to_git</id>
    <title type='html'>Rails is moving to Git!</title>
    <published>2008-04-02T00:00:00+11:00</published>
    <updated>2008-04-02T00:00:00+11:00</updated>
    <link href='http://mylescarrick.com/articles/rails_is_moving_to_git' hreflang='en' rel='alternate' type='text/html' />
    <content type='xhtml' xml:base='http://mylescarrick.com/' xml:lang='en'>
      <div xmlns='http://www.w3.org/1999/xhtml'>
        <p><a href="http://www.loudthinking.com/about.html"><span class="caps">DHH</span> </a>announced today that the <a href="http://weblog.rubyonrails.com/2008/4/2/rails-is-moving-from-svn-to-git">Rails team is moving to Git</a>. Although this was met with howls of protest from some <span class="caps">SVN</span>-loving Windows users (see the comments to David&#8217;s post), this can only be a good thing in the longer term.</p>
        <p>At <span class="caps">TBS</span>, we&#8217;ve recently moved to Git for managing our own projects. DHH&#8217;s move is definitely a positive step. There are already a stack of resources around to help Rails developers with the transition, my favourite being <a href="http://jointheconversation.org/railsgit">Scott Chacon&#8217;s screencast</a>. Hopefully the days of dodgy, centralised source code management are over! Next task is to get my trusty design buddy over to using <a href="http://code.google.com/p/msysgit/">MSysGit</a> (Git for Windows users).</p>
      </div>
    </content>
  </entry>
</feed>
