<?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>^2&#039;</title>
	<atom:link href="http://andrew-stephanie.ca/feed" rel="self" type="application/rss+xml" />
	<link>http://andrew-stephanie.ca</link>
	<description></description>
	<lastBuildDate>Tue, 08 May 2012 20:12:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>&#8220;Shitter was full&#8221;</title>
		<link>http://andrew-stephanie.ca/shitter-full</link>
		<comments>http://andrew-stephanie.ca/shitter-full#comments</comments>
		<pubDate>Fri, 13 Apr 2012 03:12:24 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[At Play]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1255</guid>
		<description><![CDATA[<p style="text-align: center;">This picture reminded me of a scene from one of my favourite holiday movies. Taken while digging a new outhouse at the cottage.</p> ]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://andrew-stephanie.ca/wp-content/uploads/2012/04/IMG_0851.jpg"><img class="aligncenter size-medium wp-image-1256" title="IMG_0851" src="http://andrew-stephanie.ca/wp-content/uploads/2012/04/IMG_0851-225x300.jpg" alt="" width="225" height="300" /></a>This picture reminded me of a scene from one of my <a href="http://www.youtube.com/watch?v=4fyS5CLBgyM">favourite holiday movies</a>. Taken while digging a new outhouse at the cottage.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/shitter-full/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thomson &#8211; Bought at Garage Sale</title>
		<link>http://andrew-stephanie.ca/thomson-bought-garage-sale</link>
		<comments>http://andrew-stephanie.ca/thomson-bought-garage-sale#comments</comments>
		<pubDate>Fri, 13 Apr 2012 02:24:52 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1251</guid>
		<description><![CDATA[<p></p> <p style="text-align: center;">Quite a nice garage sale find. Tidy profit for the new owner, too! (Full Story)</p> ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cbc.ca/news/canada/british-columbia/story/2012/04/12/bc-group-of-seven-garage-sale.html?cmp=rss"><img class="aligncenter" src="http://www.cbc.ca/gfx/images/news/photos/2012/04/12/hi-bc-120412-tom-thomson-painting-8col.jpg" alt="" width="620" height="349" /></a></p>
<p style="text-align: center;">Quite  a nice garage sale find.  Tidy profit for the new owner, too!  (<a href="http://www.cbc.ca/news/canada/british-columbia/story/2012/04/12/bc-group-of-seven-garage-sale.html?cmp=rsshttp://">Full Story</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/thomson-bought-garage-sale/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SOAP Header:  PHP and Java</title>
		<link>http://andrew-stephanie.ca/soap-header-php-java</link>
		<comments>http://andrew-stephanie.ca/soap-header-php-java#comments</comments>
		<pubDate>Fri, 10 Feb 2012 22:22:53 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[At Work]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1239</guid>
		<description><![CDATA[<p>Many web services use SOAP, and rely on SOAP Header elements to authenticate requests. This is the case for the 5PM API:</p> <p>Firstly, you must provide client authentication using AuthenticationService. After you get the sessionId (using operation signIn) you must send it each request via Soap Header. If you don&#8217;t do that &#8211; you will [...]]]></description>
			<content:encoded><![CDATA[<p>Many web services use <a href="http://en.wikipedia.org/wiki/SOAP">SOAP</a>, and rely on SOAP Header elements to authenticate requests.  This is the case for the <a href="http://www.5pmweb.com/5pm_api.php">5PM API</a>:</p>
<blockquote>
<div>
<p>Firstly, you must provide client authentication using AuthenticationService. After you get the <strong><em>sessionId</em></strong> (using operation <strong><em>signIn</em></strong>) you must send it each request via <a href="http://www.w3.org/TR/soap12-part1/#soaphead" target="_blank">Soap Header</a>. If you don&#8217;t do that &#8211; you will get an exception with authentication error message (you can send the authentication request without sessionId header).</p>
</div>
</blockquote>
<div>
<p>Overall the API documentation is weak and in need of some proof-reading, so for further clarification on the authentication process, I looked to an example provided in a PHP class extending SoapClient:</p>
<blockquote><p>$header = new SoapHeader(&lt;namespace&gt;, &#8216;sessionId&#8217;, &#8220;&lt;the session id&gt;);</p></blockquote>
<p>(Note to any one else using 5PM:  the namespace in the example is out of date and should be &#8216;http://&#8217;.$this-&gt;getDomain().&#8217;/api/<strong>dev</strong>/wsdl/schema.<strong>xsd</strong>&#8216;)</p>
<p>My challenge, not being that familiar with PHP or SOAP, was to translate this into Java.   The first parameter, namespace, is clear enough, but what is sessionId?  It is an attribute, an element, a child element?  After some trial and error, I was able to determine that sessionId is a namespace-qualified header element.  Here is the equivalent statement in Java:</p>
<blockquote><p>QName qname = new QName(&lt;namespace&gt;, &#8220;sessionId&#8221;);</p>
<p>SOAPHeaderElement element = header.addHeaderElement(qname);  //where header is a SOAPHeader object</p>
<p>element.setValue(&#8220;&lt;the session id&gt;);</p></blockquote>
<p>While figuring this out, I found <a href="http://www.javadb.com/using-a-message-handler-to-alter-the-soap-header-in-a-web-service-client">Using a Message Handler to Alter the SOAP Header in a Web Service Client</a> most helpful.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/soap-header-php-java/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novation Launchpad with Torq and Pure Data</title>
		<link>http://andrew-stephanie.ca/novation-launchpad-torq-pure-data</link>
		<comments>http://andrew-stephanie.ca/novation-launchpad-torq-pure-data#comments</comments>
		<pubDate>Tue, 24 Jan 2012 06:27:27 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[At Home]]></category>
		<category><![CDATA[Ableton]]></category>
		<category><![CDATA[dj]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[Pure Data]]></category>
		<category><![CDATA[Torq]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1213</guid>
		<description><![CDATA[Introduction <p>The Launchpad is a midi controller by Novation, designed for use with Ableton Live. There are many reviews and videos showing the Launchpad and Live in action, but there isn&#8217;t a lot of information about using it with other software. I wanted to add more buttons and faders to my Bedroom DJ setup, which [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>The Launchpad is a midi controller by Novation, designed for use with Ableton Live.  There are many reviews and <a href="http://www.youtube.com/results?search_query=torq+launchpad+ableton&amp;oq=torq+launchpad+ableton&amp;aq=f&amp;aqi=&amp;aql=&amp;gs_sm=e&amp;gs_upl=135625l139487l0l139669l22l20l0l14l0l0l222l784l3.2.1l6l0">videos</a> showing the Launchpad and Live in action, but there isn&#8217;t a lot of information about using it with other software.  I wanted to add more buttons and faders to my <a title="Bedroom DJ" href="http://andrew-stephanie.ca/dj">Bedroom DJ setup</a>, which could be done with other devices, but all those blinking buttons and colourful LEDS were too much to resist.</p>
<h2>The Problem</h2>
<p>The Launchpad works well with Ableton Live, and Torq can be re-wired into Live.  With this setup, Live controls the  Session and Mixer pages, and you can map the buttons on the User1 and User2 pages to the controls in Torq &#8211; enable LaunchPad in Torq&#8217;s MIDI settings, then just right-click the Torq control, then press a button.</p>
<p>This works, but it&#8217;s rather disappointing and boring because the LEDs don&#8217;t turn on and off.   You see, Live contains some built-in logic that receives incoming MIDI signals from the Launchpad, translates the signal into actions and events in Live, and outputs MIDI signals back to the Launchpad to control the LEDs.</p>
<p>Novation&#8217;s Automap program promises to map Launchpad buttons into any software, but from what I can tell it really only works with VST plug-ins and a few other software packages.</p>
<h2>The Solution</h2>
<p>Novation has produced the <a href="http://www.novationmusic.com/support/launchpad/">LaunchPad Programmer&#8217;s Reference Guide</a>, which describes the MIDI notes and control signals used by the Launchpad.  Armed with this information, the logic built-into Live can be re-written and customized using a Pure Data patch.  With this setup:</p>
<ol>
<li>A button press on the Launchpad sends a MIDI note</li>
<li>The MIDI note is mapped to a control in Torq (or any other MIDI-aware application) and triggers some action.</li>
<li>The MIDI note is also received by Pure Data, which processes the note and sends a MIDI note back to the launchpad.  The velocity of this note determines the colour and brightness of the LED.</li>
</ol>
<h2>Progress So Far</h2>
<p>To date I have created a simple patch that is working quite well and which I will upload here shortly along with usage instructions.  Using it, I&#8217;ve created a customizable layout for Torq that maps Quick-Cues, Looping, Effects on/off, Master/Sync, Internal/External control and more.</p>
<p>To create a mapping, an object is created for each button and assigned a MIDI note, a button type (on/off and momentary), and a colour.  Unmapped buttons are off, mapped buttons are dimly-lit when inactive and brightly lit when activated.  Loading different Pure Data patches configured this way allows you to create an LED-scheme for multiple programs.</p>
<h2>Still to Come</h2>
<p>To fully reproduce all the features available with Live, I still need to implement:</p>
<ol>
<li>The page, session, user1, user2, and mixer controls.  Being able to switch pages turns the 64-button grid into an N-button grid.  64 buttons seems like a lot, but you&#8217;ll use them up fast!</li>
<li>Faders.  This is a very cool feature of the Launchpad that lets buttons act as faders and knobs.  To implement this, Pure Data needs to map a range of MIDI notes into a single MIDI note with a range of velocities.  It will also change the routing of MIDI signals.  With the basic buttons, LaunchPad &lt;&#8211;&gt; Pure Data and LaunchPad &#8211;&gt; Torq.  To implement a fader will require LaunchPad &lt;&#8211;&gt; Pure Data and Pure Data &#8211;&gt; Torq.</li>
</ol>
<p>I&#8217;m confident this can happen and it&#8217;s just a matter of finding time to build it.</p>
<h2>Other Ideas</h2>
<ul>
<li>implement the LED logic in Max for Live to toggle LEDS for the User1 and User2 pages from within Ableton Live</li>
<li>implement the LED logic in a VST plug-in and launch it from within Torq (or any other app supporting VSTs)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/novation-launchpad-torq-pure-data/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bedroom DJ</title>
		<link>http://andrew-stephanie.ca/dj</link>
		<comments>http://andrew-stephanie.ca/dj#comments</comments>
		<pubDate>Mon, 23 Jan 2012 18:24:40 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[At Home]]></category>
		<category><![CDATA[dj]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[Torq]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1216</guid>
		<description><![CDATA[<p class="wp-caption-text">Conectiv</p> <p>When I first became interested in digital audio workstations (DAW) and computer-based music, I wanted to mix and sample and loop and sequence and make drum patterns and effects and this and that and the other thing. I was all over the place and wasn&#8217;t accomplishing much of anything until I decided to [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1224" class="wp-caption alignright" style="width: 310px"><a href="http://andrew-stephanie.ca/wp-content/uploads/2012/01/m-audio-torq-.jpg"><img class="size-medium wp-image-1224" title="Conectiv" src="http://andrew-stephanie.ca/wp-content/uploads/2012/01/m-audio-torq--300x221.jpg" alt="Conectiv" width="300" height="221" /></a><p class="wp-caption-text">Conectiv</p></div>
<p>When I first became interested in digital audio workstations (<a href="http://en.wikipedia.org/wiki/Digital_audio_workstation">DAW</a>) and computer-based music, I wanted to mix and sample and loop and sequence and make drum patterns and effects and this and that and the other thing.  I was all over the place and wasn&#8217;t accomplishing much of anything until I decided to focus and start with the basics:  beat-matching and mixing with a turntable.</p>
<p>While a computer certainly isn&#8217;t required to achieve these simple goals, a computer-based setup makes getting started easy and more affordable.  My technical expertise lies more in the digital domain than the analog one, so the ability to hack, re-program, and re-wire a digital system  was also very appealing.</p>
<p>I did some research and decided to use <a href="http://www.m-audio.ca/products/en_ca/Torq20.html">Torq</a> software as the basis for my bedroom DJ setup.  It lets me beat-match on my turntable using <a href="http://en.wikipedia.org/wiki/Vinyl_emulation_software">time-coded vinyl</a> through M-Audio&#8217;s <a href="http://www.m-audio.com/products/en_us/TorqConectivVinylCDPack.html">Conectiv</a> device (which also provides 2 audio input channels and 2 output channels) and mix using an <a href="http://www.m-audio.com/products/en_us/XSessionPro.html">X-Session Pro</a> USB-MIDI control surface, which provides a tactile way to control Torq&#8217;s internal mixer and transport controls.  The Conectiv package also includes a licensed copy of Torq 2.0, making for a nice little setup for very little investment.  Finally, Torq will re-wire into Ableton Live if I want move beyond playing music and start to make my own.</p>
<div id="attachment_1221" class="wp-caption alignright" style="width: 310px"><a href="http://andrew-stephanie.ca/wp-content/uploads/2012/01/mAudioXSessionPro_Labeled.jpg"><img class="size-medium wp-image-1221" title="X-Session Pro" src="http://andrew-stephanie.ca/wp-content/uploads/2012/01/mAudioXSessionPro_Labeled-300x160.jpg" alt="X-Session Pro" width="300" height="160" /></a><p class="wp-caption-text">X-Session Pro</p></div>
<p>This setup has worked well (mostly &#8211; still some bugs in the Torq software but no show-stoppers) as I &#8220;practice and n_joy&#8221; the many fine videos produced by the <a href="http://www.djtutor.com/tutor/ellaskins">DJ Tutor</a>.  These videos are vastly superior to any other DJ How-To video I&#8217;ve ever seen.  Most YouTube DJs are more interested in showing-off their egos than explaining what they are doing.  Each DJ Tutor video uses a well-framed shot that highlights the controls and actions, and ellaskins uses humour and sound teaching techniques to produce videos that are informative, entertaining, and always end with the catchphrase, &#8220;Practice and N Joy&#8221;.</p>
<p>Good advice for anything, really.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/dj/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generate LDAP userPassword in Java</title>
		<link>http://andrew-stephanie.ca/ldap-md5-java</link>
		<comments>http://andrew-stephanie.ca/ldap-md5-java#comments</comments>
		<pubDate>Mon, 16 Jan 2012 23:48:37 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[At Work]]></category>
		<category><![CDATA[Base64]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[MD5]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1203</guid>
		<description><![CDATA[<p>This really perplexed me and took an embarrassingly long time to write such a simple method. Maybe these notes will save someone else some frustration. Here is a method to generate an MD5 hashed password to use as the value of the userPassword attribute in LDAP:</p> <p>String hashMD5Password(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException { MessageDigest digest [...]]]></description>
			<content:encoded><![CDATA[<p>This really perplexed me  and took an embarrassingly long time to write such a simple method.  Maybe these notes will save someone else some frustration.  Here is a method to generate an MD5 hashed password to use as the value of the userPassword attribute in LDAP:</p>
<blockquote><p>String hashMD5Password(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException {<br />
MessageDigest digest = MessageDigest.getInstance(&#8220;MD5&#8243;);<br />
digest.update(password.getBytes(&#8220;UTF8&#8243;));<br />
String md5Password = Base64.encode(digest.digest());<br />
return &#8220;{MD5}&#8221; + md5Password;<br />
}</p></blockquote>
<p>A few tips that might be of help:</p>
<ul>
<li>Code that is almost exactly the same as this is posted elsewhere, without the {MD5} prefix that is particular to LDAP.  Don&#8217;t forget it!</li>
<li>I use Base64 from jcifs.util.Base64 (since I also use jcifs to generate passwords for the sambaNTPassword attribute) but there are several Base64 classes to choose from.</li>
<li>Your LDAP server may use another form of encryption (CRYPTO, SHA, etc.).  It should be a simple matter to adapt the method above to use other encryption types.</li>
</ul>
<p>Had I known the following, this would have been so much easier:</p>
<ul>
<li>The format of the userPassword attribute is a <strong>string</strong> containing the crypto-identifier (ie. {MD5}) followed by the Base64-encoded MD5 digest version of the plain-text password</li>
<li>Verify the output of the java method  by running &#8220;slappasswd -h {MD5} -s your_password.  The output of this command should match the string returned by the java method but <strong>not</strong> the string returned by ldapquery.</li>
<li>ldapquery returns LDIF, so the userPassword value is further Base64-encoded.</li>
</ul>
<p>To illustrate these last few points, consider the following:</p>
<blockquote><p>$ slappasswd -h {MD5} -s test1<br />
{MD5}WhBei51A4TKXgNYuoiZdig==  /* this is what is stored in LDAP) */</p></blockquote>
<blockquote><p>$ slappasswd -h {MD5} -s test1 | base64<br />
e01ENX1XaEJlaTUxQTRUS1hnTll1b2laZGlnPT0K /* this is the base64 version of above */</p></blockquote>
<blockquote><p>$ ldapsearch -h &lt;host&gt; -b &lt;base&gt; -D &lt;bind&gt; -w &lt;passwd&gt;  &#8220;(uid=testuser)&#8221; userPassword<br />
# extended LDIF<br />
# userPassword:: e01ENX1XaEJlaTUxQTRUS1hnTll1b2laZGlnPT0=</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/ldap-md5-java/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>November Happenings</title>
		<link>http://andrew-stephanie.ca/november-happenings</link>
		<comments>http://andrew-stephanie.ca/november-happenings#comments</comments>
		<pubDate>Sat, 12 Nov 2011 01:04:52 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1199</guid>
		<description><![CDATA[<p>November is also known as Movember. Due to some intercontinental rivalry, Andrew is participating. View photos, laugh, poke fun, and make a donation on Andrew&#8217;s MoBro page &#8211; it&#8217;s for a good cause.</p> <p>This website has moved to a new server. Thanks to some folks who left some old computers sitting outside a trash compactor, [...]]]></description>
			<content:encoded><![CDATA[<p>November is also known as <a href="http://mobro.co/abythell">Movember</a>.  Due to some intercontinental rivalry,  Andrew is participating.  View photos, laugh, poke fun,  and make a donation on Andrew&#8217;s <a href="http://mobro.co/abythell">MoBro</a> page &#8211; it&#8217;s for a good cause.</p>
<p>This website has moved to a new server.   Thanks to some folks who left some old computers sitting outside a trash compactor, we now have a P4 2.8 GHz computer with 3GB of RAM and a 120GB hard drive.  This is a huge improvement from the old server, which was the first laptop I ever purchased back in 1998.</p>
<p>Whatever you do with your old PC,  please remember to format, erase, or physically destroy your old hard drive.  Bill, Marcelle, and Sean didn&#8217;t, and I had access to their e-mail accounts.  Another nice young fellow from the UK (let&#8217;s call him Jethro) didn&#8217;t either.   From his computer I quickly learned his e-mail address, telephone number, Whistler address, home address in the UK, government identification numbers, what his girlfriend looks like, and the kinky brand of Internet pornography he seems to enjoy (I mean REALLY enjoy &#8211; that computer should have been burned, not thrown in the trash).</p>
<p>Other updates for this month can be found on the <a href="http://andrew-stephanie.ca/thomson">Thomson</a> page.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/november-happenings/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Tool for Ski Enthusiasts</title>
		<link>http://andrew-stephanie.ca/lift-forecast</link>
		<comments>http://andrew-stephanie.ca/lift-forecast#comments</comments>
		<pubDate>Mon, 24 Oct 2011 20:00:53 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[At Play]]></category>
		<category><![CDATA[Front Page]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1164</guid>
		<description><![CDATA[<p>On big snow days, those of us who have to work to maintain a lifestyle of certain standards are forced to sit in our offices and listen to avalanche control set off explosives.</p> <p>At Whistler-Blackcomb, alpine lifts like Peak, Glacier, and 7th Heaven will remain closed for one or more days for safety reasons until [...]]]></description>
			<content:encoded><![CDATA[<p>On big snow days, those of us who have to work to maintain a lifestyle of certain standards are forced to sit in our offices and listen to avalanche control set off explosives.</p>
<p>At <a href="http://www.whistlerblackcomb.com">Whistler-Blackcomb</a>, alpine lifts like Peak, Glacier, and 7th Heaven will remain closed for one or more days for safety reasons until the avalanche risk is minimized.  Live lift status is provided by light-boards on the hill, and those behind desks can monitor <a href="http://www.whistlerblackcomb.com/weather/lift/index.htm">live lift status</a> on the Whistler-Blackcomb website.</p>
<p>Knowing which lifts were closed on any given day is very important to ski and snowboard enthusiasts.Â  If you don&#8217;t understand why, I can explain with a story:</p>
<blockquote><p>Tuesday is a really warm day and the snow is quite wet.  Overnight, the temperature drops, the wind blows 90km/h and it snows 30cm.</p>
<p>Wednesday morning there is 30cm of fresh snow, but Johnny has to work like a sucker, unlike Jill who has the day off.  Ski patrol opens the Peak chair on Whistler but avalanche conditions keep 7th Heaven on Blackcomb closed all day.Â  Wednesday night, another 20cm falls.</p>
<p>On Thursday, Johnny and Jill both go skiing.Â  Johnny heads up Whistler to ski his favourite lines from the Peak chair, but Jill knows from watching the light boards all day on Wednesday that 7th Heaven didn&#8217;t open.  She heads over to 7th Heaven where she knows there is 50cm of new snow waiting for her.</p></blockquote>
<p>The moral of the story is that you can miss out on some great fresh tracks by not knowing the alpine lift status. To keep on top of things, you have the following options:</p>
<ol>
<li>Ski / ride every single day.</li>
<li>Hit &#8216;refresh&#8217; on the Whistler-Blackcomb lift status page every 15 minutes from 8am until 4pm.</li>
<li>Every night, call everyone you know and ask them what lifts were closed.</li>
</ol>
<p>Enter a new friend &#8211; the friend who you can call anytime and will always know which lifts were closed, not just for today, but for the last 7 days.  Don&#8217;t end up like Johnny &#8211; use the <a href="http://liftforecast.appspot.com">Alpine Lift Forecast</a>.</p>
<p>At the moment, the <a href="http://liftforecast.appspot.com">Alpine Lift Forecast</a> doesn&#8217;t actually predict anything, but it will show you 7-day lift status for all Whistler Blackcomb resorts, which is a good start.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/lift-forecast/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multi Head Ubuntu with ATI FirePro 2450</title>
		<link>http://andrew-stephanie.ca/triple-head-ubuntu</link>
		<comments>http://andrew-stephanie.ca/triple-head-ubuntu#comments</comments>
		<pubDate>Mon, 24 Oct 2011 19:25:36 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[At Work]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[fglrx]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[radeon]]></category>
		<category><![CDATA[randr]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[xinerama]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1161</guid>
		<description><![CDATA[Introduction <p>Here are some notes from my attempts to create a single Ubuntu desktop that spans 4 screens using an ATI FirePro 2450 PCIE video card. I used this card because it was on-hand, however if I were to purchase a video card specifically for this purpose I would not choose this card and favor [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Here are some notes from my attempts to create a single Ubuntu desktop that spans 4 screens using an <a href="http://www.amd.com/us/products/workstation/graphics/ati-firemv-2d/ati-firepro-2450-mv/Pages/ati-firepro-2450-mv.aspx">ATI FirePro 2450</a> PCIE video card.  I used this card because it was on-hand, however if I were to purchase a video card specifically for this purpose I would not choose this card and favor an NVIDIA card instead.  Read on to find out why and how to make the best of it.</p>
<h2><span id="more-1161"></span>Background</h2>
<h3>The Hardware</h3>
<h3><img class="alignright" src="http://www.amd.com/PublishingImages/Public/Logo_ProductLogos/100WPNG/44127.png" alt="" width="100" height="92" /></h3>
<p>Physically, this video card  is a single PCI express card with two external connectors.  Each connector accepts a dongle that splits out into either two DVI or two VGA connectors.   In software, this card is reported by some tools (such as lspci) as a &#8220;Fire MV 2450&#8243;, and X sees it as two dual-output devices, instead of a single quad-output device.</p>
<h3> Xinerama vs RandR</h3>
<p>These two tools join separate screens into a single desktop and allow windows to be moved from one screen to another.  There are benefits and disadvantages to both.</p>
<p>Ubuntu desktops seem to need RandR in order to use the Display settings tool (System -&gt; Displays) and other features.   Unfortunately, RandR will only work on a single video device, and because the FirePro appears as two dual-output devices, this means the desktop can only span two screens.  By creating a custom xorg.conf, you can start X on the other two screens, but you won&#8217;t be able to drag windows to them or maximize a window across all 4 screens.</p>
<p>Xinerama will allow a desktop to span all 4 screens, but not with 3D acceleration.</p>
<h3>Choose a Desktop</h3>
<p>Your preferred desktop becomes the deciding factor.  If you use Gnome Classic or Unity 2D you can have a non-accelerated 4-screen desktop, but if you want to use Unity 3D, a 2-screen desktop is your only choice.  Personally I don&#8217;t think there is much point in using Unity 2D, as it lacks all the nice features that make Unity 3D useful.  Without 3D acceleration, I&#8217;d stick with Gnome classic.</p>
<h3>Decision Time</h3>
<p>As I see it there are only two choices.</p>
<p>The first choice is a 2-screen desktop using the radeon driver with 3D acceleration.  While this option limits the desktop to 2 screens, the other screens can still be used to run X applications by redirecting the display using the DISPLAY environment variable or the -display :0.1 argument.  All the features of Unity and a 3D accelerated desktop can be used as well.</p>
<p>The other option is a 4-screen desktop using the fglrx driver, no 3D acceleration, and Xinerama.  I had some success with this configuration on Ubuntu 11.04, limited success on 11.10, and no success at all with 12.04.</p>
<p>&nbsp;</p>
<h2>How To<img class="alignright" title="X11" src="http://imgs.xkcd.com/comics/x11.png" alt="" width="319" height="261" /></h2>
<p>Here are instructions for achieving the two setups.</p>
<h3>Dual Output, 3D Acceleration, Radeon Driver, and RandR</h3>
<p>This configuration should work out-of-the-box.  The xserver-xorg-video-radeon driver package should be installed by default and no xorg.conf is required.  To change from a cloned desktop to a dual-view one, open System Settings -&gt; Displays and uncheck &#8220;Mirror Displays&#8221;.  There are other options on this screen for controlling the placement of the screens and the launcher panel.</p>
<h4>Bonus Outputs</h4>
<p>If you want to enable the other two screens, recognizing that they won&#8217;t be part of your desktop, you can create a custom xorg.conf by stopping the display manager (&#8220;sudo service stop lightdm&#8221; on 12.04) and running &#8220;sudo X -configure&#8221;.  This will generate an xorg.conf.new file in your home directory.  Copy this file to /etc/X11/xorg.conf and edit it to suit your liking.  Check the ServerLayout section matches the physical arrangment of your screens, and edit each Screen section to assign the correct Monitor and Device.  The FirePro devices are the ones using the radeon driver.  There may be other drivers detected as well, such as on-board video cards (Intel in my case), VESA, and FrameBuffers.  When testing xorg.conf changes, restart X by running &#8220;sudo service lightdm restart&#8221;.</p>
<h3>Quad Output, No 3D Acceleration, Fglx Driver, and Xinerama</h3>
<p>Install the AMD drivers by opening the System Settings and selecting Additional Drivers.   Select the ATI/AMD proprietary FGLRX graphics driver (not the post-release updates, as they dont&#8217; work) and click Activate.  If you have created a custom xorg.conf, rename or delete it.  Once installed, reboot the machine.  At the login prompt, change the session from the default (Unity) to either Unity2D or Gnome Classic and login.  Once logged in, run the AMD Catalyst Control Center tool (amdcccle).  Enable multi-desktop on the first device and enable the second device.  Save and reboot (if you can &#8211; this is where amdcccle crashes on me with 12.04).  Run amdcccle again and enable Xinerama.  Save and reboot.</p>
<h2>Conclusion</h2>
<p>Until RandR supports multiple cards or Xinerama supports 3D acceleration, a 4-screen desktop with the ATI FirePro just isn&#8217;t worth the hassle and degraded performance and I have switched to the dual-output setup with a &#8216;bonus&#8217; screen.  This is a nice arrangement for me, as I have a 2-screen desktop and run a full-screen web-cam display with a Nagios status overlay  (called <a href="http://www.vanheusden.com/java/CoffeeSaint/">CoffeeSaint</a>) on the third screen which doesn&#8217;t need to be part of my main desktop.  Next time I buy a video card, I&#8217;ll look for one that X recognizes as a single card with 4 outputs, instead of 2 dual-output cards.</p>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/triple-head-ubuntu/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schematic Capture</title>
		<link>http://andrew-stephanie.ca/schematic-capture</link>
		<comments>http://andrew-stephanie.ca/schematic-capture#comments</comments>
		<pubDate>Mon, 20 Jun 2011 21:41:21 +0000</pubDate>
		<dc:creator>abythell</dc:creator>
				<category><![CDATA[At Work]]></category>

		<guid isPermaLink="false">http://andrew-stephanie.ca/?p=1147</guid>
		<description><![CDATA[<p>No wonder the circuits I design never work &#8211; I forget the tear collector and the moral rectifier. Digikey has really good pricing on 666 timers. If you don&#8217;t have an EE background this discussion might clarify some of the trickier components for you.</p> <p class="wp-caption-text">Schematic</p> [...]]]></description>
			<content:encoded><![CDATA[<p>No wonder the circuits I design never work &#8211; I forget the tear collector and the moral rectifier. <a href="http://www.digikey.ca">Digikey </a>has really good pricing on 666 timers. If you don&#8217;t have an EE background <a href="http://forums.xkcd.com/viewtopic.php?f=7&amp;t=59374&amp;start=40">this discussion</a> might clarify some of the trickier components for you.</p>
<div class="wp-caption aligncenter" style="width: 750px"><a href="http://imgs.xkcd.com/comics/circuit_diagram.png"><img title="Schematic" src="http://imgs.xkcd.com/comics/circuit_diagram.png" alt="Schematic" width="740" height="952" /></a><p class="wp-caption-text">Schematic</p></div>
]]></content:encoded>
			<wfw:commentRss>http://andrew-stephanie.ca/schematic-capture/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

