<?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"
	>

<channel>
	<title>groogsblog</title>
	<atom:link href="http://gregmaclellan.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregmaclellan.com/blog</link>
	<description>stuff about anything</description>
	<pubDate>Tue, 19 Aug 2008 14:25:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Basement Layout Ideas</title>
		<link>http://gregmaclellan.com/blog/basement-layout-ideas/</link>
		<comments>http://gregmaclellan.com/blog/basement-layout-ideas/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 03:55:28 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[Renovation]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/?p=134</guid>
		<description><![CDATA[I&#8217;ve spent the last few days (well, longer than that, really) pondering what the exact layout will be for the basement. So here is what it was when I first bought the house:

You can see some pictures of it in this post
The old kitchen cabinets, including the old sink, was moved into the laundry room [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve spent the last few days (well, longer than that, really) pondering what the exact layout will be for the basement. So here is what it was when I first bought the house:</p>
<p><a href="/blog/wp-content/uploads//basement-before-with-stuff.png" onclick="javascript:pageTracker._trackPageview('/outbound/article/basement-before-with-stuff.png');" rel="lightbox"><img src="/blog/wp-content/uploads//basement-before-with-stuff-291x320.png" alt="" title="basement-before-with-stuff" width="291" height="320" class="aligncenter size-medium wp-image-136" /></a></p>
<p><em>You can see some pictures of it in <a href="http://gregmaclellan.com/blog/starting-to-renovate-the-basement/" >this post</a></em></p>
<p>The old kitchen cabinets, including the old sink, was moved into the laundry room at some point, in addition to the laundry sink already there. Behind the cabinet, a few inches away from the wall, is the main waste water pipe for the house. </p>
<p>Beside the stairs there is a central vacuum unit (marked CV). The fuse panel (ELEC) is on the wall behind that, and between the two (not shown) is a vent that comes down and goes under the stairs. At the bottom of the stairs, there is another vent that comes down and was boxed in by wood paneling (That is shown). </p>
<p>The water heater is offset from the furnace because the furnace filter access is on that side, and if the water heater is right beside the furnace the filter doesn&#8217;t come out (apparently it was installed that way initially, and then later the hot water tank was moved). In the middle of the basement is a support post. </p>
<p>I should also point out that there are two ducts running down the middle of the basement (about 6.5&#8242; high) from post, to about 1&#8242; from the bottom of the stairs. Because of the post and low ceiling, I didn&#8217;t really think the middle area would be useful to be part of the rec room, so that is why in all designs it is part of the laundry room. </p>
<p>So far I have <a href="http://gregmaclellan.com/blog/starting-to-renovate-the-basement/" >taken down the all the paneling</a>, the wall and all the cabinets that were in the center of the basement, and moved the duct that comes down at the bottom of the stairs. </p>
<p>My objectives for the basement are to have a laundry room, and a rec room area that I can put my desk in and use as an office, and also put a couch and TV in to use as a place to watch movies/TV. So my first design:</p>
<p><a href="/blog/wp-content/uploads//basement-no-bathroom.png" onclick="javascript:pageTracker._trackPageview('/outbound/article/basement-no-bathroom.png');" rel="lightbox"><img src="/blog/wp-content/uploads//basement-no-bathroom-291x320.png" alt="" title="basement-no-bathroom" width="291" height="320" class="aligncenter size-medium wp-image-137" /></a></p>
<p>In this (and all designs), I am adding 2&#8243; of rigid foam insulation around the whole basement, and then a 2&#215;4 insulated frame on top of that. This means redoing most of the laundry room plumbing to bring it out from the wall, so moving things around is not a big deal. It also means moving the fuse panel for the same reason, which I don&#8217;t mind since I wanted to upgrade it to a breaker panel anyways, and add several new circuits for the basement. </p>
<p>I got thinking about it, and started wondering if I could add a bathroom. The house only has a single bathroom (3 bedrooms) so a second half bath could be quite appealing. I came up with a couple of designs, but I don&#8217;t know which I like better yet:</p>
<p><a href="/blog/wp-content/uploads//basement-with-bathroom-layout-1.png" onclick="javascript:pageTracker._trackPageview('/outbound/article/basement-with-bathroom-layout-1.png');" rel="lightbox"><img src="/blog/wp-content/uploads//basement-with-bathroom-layout-1-409x320.png" alt="" title="basement-with-bathroom-layout-1" width="409" height="320" class="aligncenter size-medium wp-image-138" /></a></p>
<p><a href="/blog/wp-content/uploads//basement-with-bathroom-layout-3.png" onclick="javascript:pageTracker._trackPageview('/outbound/article/basement-with-bathroom-layout-3.png');" rel="lightbox"><img src="/blog/wp-content/uploads//basement-with-bathroom-layout-3-409x320.png" alt="" title="basement-with-bathroom-layout-3" width="409" height="320" class="aligncenter size-medium wp-image-135" /></a></p>
<p>The first design moves the central vac from beside the stairs to beside the electrical panel. This shouldn&#8217;t be a big deal, and I was going to cut into the central vac lines anyways to add another outlet downstairs. </p>
<p>The second design involves moving the electrical panel about 8&#8242; into the laundry room. I still need to check if this passes building code, and also what exactly I am allowed to do with the mains wiring (eg, do I need to get Hydro to come in and run new mains wires from the meter?). It would of course get boxed in. </p>
<p>Both designs also show an on-demand tankless hot water heater (which can be mounted on the wall, out of the way of the furnace filter door). This lets me move the wall about 2&#8242; closer to the furnace, but I haven&#8217;t decided if it makes sense to switch to the on-demand heater yet, due to the high cost (I&#8217;m guessing ~$1200-$1500 installed). I probably wouldn&#8217;t see the energy savings but I may recoup the costs when I sell the house anyways - maybe tankless systems will be in high demand in 5 years. They&#8217;re certainly going in almost every house I&#8217;ve seen that was built in the last year or so. </p>
<p>In both designs, the toilet is also relatively close to the main waste line, which means minimal cutting into the concrete to run the waste line. There is also a vent line next to the waste line, which hopefully I can use for the bathroom as well (still need to check code on that). </p>
<p>So I&#8217;d love to hear feedback on which design is better (or if anyone has any other ideas).</p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/basement-layout-ideas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Terminating Network Cables</title>
		<link>http://gregmaclellan.com/blog/terminating-network-cables/</link>
		<comments>http://gregmaclellan.com/blog/terminating-network-cables/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 02:59:09 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[Renovation]]></category>

		<category><![CDATA[Telephony]]></category>

		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/?p=126</guid>
		<description><![CDATA[After running network cables the next step, of course, is to terminate them. 
Using one of the old cabinets that happened to be close to the right size, I built a rudimentary 19&#8243; rack. It&#8217;s not too bad for a DIY rack, especially considering a small swing-out metal rack costs around $250. 
 
I basically [...]]]></description>
			<content:encoded><![CDATA[<p>After <a href="http://gregmaclellan.com/blog/running-network-cables/" >running network cables</a> the next step, of course, is to terminate them. </p>
<p>Using one of the old cabinets that happened to be close to the right size, I built a rudimentary 19&#8243; rack. It&#8217;s not too bad for a DIY rack, especially considering a small swing-out metal rack costs around $250. </p>
<p><a href="/blog/wp-content/uploads//imgp2123.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2123.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2123-112x150.jpg" alt="" title="rack - old cabinet" width="112" height="150" class="alignnone size-thumbnail wp-image-128" /></a> <a href="/blog/wp-content/uploads//imgp2126.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2126.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2126-112x150.jpg" alt="" title="rack - front no wiring" width="112" height="150" class="alignnone size-thumbnail wp-image-129" /></a></p>
<p>I basically took an old cabinet, cut the middle shelf out and turned the whole thing on its side. I added another piece of wood from another cabinet on the other end as a mounting location for the rack-mount gear, and I pre-drilled several pilot holes at 1U spacing (to prevent the wood from cracking when putting in screws). I used part of the old middle shelf to build a new shelf to hold my modem, router, VoIP adapter, etc. </p>
<p>I terminated all the cables from the jacks throughout the house onto the back of a 1U 24-port patch panel. </p>
<p><a href="/blog/wp-content/uploads//imgp2177.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2177.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2177-175x131.jpg" alt="" title="rack - termination 1" width="175" height="131" class="alignnone size-thumbnail wp-image-130" /></a> <a href="/blog/wp-content/uploads//imgp2180.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2180.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2180-175x131.jpg" alt="" title="rack - termination 2" width="175" height="131" class="alignnone size-thumbnail wp-image-131" /></a></p>
<p>On the main floor I have 12 jacks so far - 2 network + 1 cable in each of 3 bedrooms; 2 network + 1 cable in two separate locations in the living room; 2 network on a wall shared by kitchen/dining room. I probably would have put another jack (and a cable hookup) in the kitchen, except that I plan on doing some major renovations there in the next couple of years, so I&#8217;ll just wait, since I don&#8217;t need them now anyways.</p>
<p><a href="/blog/wp-content/uploads//imgp2266.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2266.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2266-112x150.jpg" alt="" title="rack - front complete" width="112" height="150" class="alignnone size-thumbnail wp-image-132" /></a> <a href="/blog/wp-content/uploads//imgp2279.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2279.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2279-112x150.jpg" alt="" title="rack - back wiring" width="112" height="150" class="alignnone size-thumbnail wp-image-127" /></a></p>
<p>There are a couple of benefits to using a patch panel for this job. Any &#8220;network&#8221; jack in the house can be made into either an Ethernet jack, or an analog phone line. Since I use a <a href="http://freepbx.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/freepbx.org');">VoIP PBX</a> at home, I can actually put analog extensions anywhere I&#8217;d like, and keep the <acronym title="Voice over Internet Protocol">VoIP</acronym> adapter in the rack (like the Linksys PAP2 you see on the right). Additionally, I can use <acronym title="Power over Ethernet">PoE</acronym> injectors (or a PoE switch) and selectively send PoE to ports that need it (eg, have a VoIP phone plugged in).</p>
<p>I can also run different networks to different spots in the house. Most people probably wouldn&#8217;t use this, but my main MythTV server (currently in my living room) is also my PBX server, and it has a public IP (VoIP traffic on its own IP avoids <acronym title="Quality of Service">QoS</acronym> issues). I have a hub on my cable modem that splits the connection to the router, and sends another &#8220;raw internet&#8221; line up to the PBX server (red cable going into the patch panel). </p>
<p>The other end of every connection is pretty simple. I ordered all the keystone jacks, wall plates and patch cables from <a href="http://monoprice.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/monoprice.com');">monoprice.com</a>. The jacks are 1/5 the price Home Depot sells them for, and the patch cables are sold for cheaper than I can buy the parts to make them myself. </p>
<p><a href="/blog/wp-content/uploads//imgp2248.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2248.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2248-175x131.jpg" alt="" title="wiring - testing" width="175" height="131" class="alignnone size-thumbnail wp-image-124" /></a><br />
<a href="/blog/wp-content/uploads//imgp2252.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2252.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2252-175x131.jpg" alt="" title="wiring - back of jack" width="175" height="131" class="alignnone size-thumbnail wp-image-125" /></a></p>
<p><a href="/blog/wp-content/uploads//imgp2256.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/imgp2256.jpg');" rel="lightbox"><img src="/blog/wp-content/uploads//imgp2256-175x131.jpg" alt="" title="wiring - finished jack" width="175" height="131" class="alignnone size-thumbnail wp-image-123" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/terminating-network-cables/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The power of jQuery</title>
		<link>http://gregmaclellan.com/blog/the-power-of-jquery/</link>
		<comments>http://gregmaclellan.com/blog/the-power-of-jquery/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 13:22:33 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/?p=121</guid>
		<description><![CDATA[Jeff Atwood made a post today talking about the benefits of coding using Javascript frameworks. It totally echos my own thoughts and experiences on it, namely that I used to hate writing client-side code because javascript was so terrible. After discovering first Prototype + Script.aculo.us, and then completely moving to jQuery, my outlook has completely [...]]]></description>
			<content:encoded><![CDATA[<p>Jeff Atwood made a post today talking about the benefits of <a href="http://www.codinghorror.com/blog/archives/001163.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.codinghorror.com');">coding using Javascript frameworks</a>. It totally echos my own thoughts and experiences on it, namely that I used to hate writing client-side code because javascript was so terrible. After discovering first <a href="http://www.prototypejs.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.prototypejs.org');">Prototype</a> + <a href="http://script.aculo.us/" onclick="javascript:pageTracker._trackPageview('/outbound/article/script.aculo.us');">Script.aculo.us</a>, and then completely moving to <a href="http://jquery.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/jquery.com');">jQuery</a>, my outlook has completely changed. I really do enjoy writing client-side code now. It&#8217;s easy, and the results are among the most immediate real programming results you can get, because it runs right there in your browser. Using <a href="http://getfirebug.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/getfirebug.com');">Firebug</a>, you can even test code interactively <i>while</i> you write it.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/the-power-of-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Inheriting constructors in C#, VB.NET</title>
		<link>http://gregmaclellan.com/blog/inheriting-constructors-in-c-vbnet/</link>
		<comments>http://gregmaclellan.com/blog/inheriting-constructors-in-c-vbnet/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 14:24:27 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/?p=116</guid>
		<description><![CDATA[Several times, I&#8217;ve come across the need for inheriting constructors in .NET, and I am constantly annoyed that it does not work. I&#8217;m writing a business objects layer, and what I&#8217;m trying to do is create some constructors in the base class that can initialize the objects in many different ways, eg:

Public Sub New()  [...]]]></description>
			<content:encoded><![CDATA[<p>Several times, I&#8217;ve come across the need for inheriting constructors in .NET, and I am constantly annoyed that it does not work. I&#8217;m writing a business objects layer, and what I&#8217;m trying to do is create some constructors in the base class that can initialize the objects in many different ways, eg:</p>
<p><code><br />
Public Sub New()  ' Create new object using default storage<br />
Public Sub New(ByVal storage as Storage)  ' Create new object using specified storage<br />
Public Sub New(ByVal conditions as String, ByVal parameters() as Object)  ' Load an object by the specified query, using default storage<br />
Public Sub New(ByVal storage as Storage, ByVal conditions as String, ByVal parameters() as Object)  ' Load an object by the specified query<br />
Public Sub New(ByVal id as Object)  ' Load an object by the specified primary key, using default storage<br />
</code></p>
<p>And so on. I like to provide many different ways in the base classes, to 1) make writing the objects that inherit from this as easy as possible, and 2) make writing client code as easy and flexible as possible. </p>
<p>Unfortunately, since you cannot inherit constructors (except for the default New() constructor, if that is specified in the parent..), you cannot do this. You have to define stub constructors in each inherited object which call the parent constructor, which ends up being a whole bunch of copying and pasting, and even more work if you ever change/add a constructor. </p>
<p><a href="http://blogs.msdn.com/ericgu/archive/2004/04/22/118231.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/blogs.msdn.com');">Eric Gunnerson posted a blog entry about inheriting constructors</a>, and there is a good discussion on it in the comments. I completely agree with Darren Oakey who suggests that constructors should be inherited if and only if no constructors are defined. </p>
<p>This fits in with the default behaviour of inheriting the empty constructor, and generally is compatible with existing code. The only time it would break existing code is if you have an object with no constructors that inherits from another with a non-default constructor, and you specifically want your inherited object to have the default constructor. </p>
<p><code><br />
Public Class A<br />
    Public Sub New(ByVal value as Integer)<br />
End Class</p>
<p>Public Class B<br />
    Inherits A<br />
End Class<br />
</code></p>
<p>In the implementation right now, B only has the default (no parameters) constructor. If this change is made, B will have New(ByVal value as Integer), so existing code that assumes it has no parameters will fail. The fix for this is to explicitly define a constructor for B as:</p>
<p><code><br />
Public Class B<br />
    Inherits A</p>
<p>    Public Sub New()<br />
    End Sub<br />
End Class<br />
</code></p>
<p>One of the arguments against inheriting constructors seem to be that implicit operations are bad and confusing - however, in my view, having the default constructor implicitly added in the above case is exactly the same thing. Additionally, as is pointed out in the comment thread in Eric&#8217;s post, this is also how methods behave. Why should constructors be different?</p>
<p>Another option is to add a class attribute that would allow constructors to be inherited, eg:</p>
<p><code><br />
&lt;InheritConstructors(true)&gt; _<br />
Class B<br />
    Inherits A<br />
End Class<br />
</code></p>
<p>It would really make the language more powerful, and allow writing simpler and nicer code. In a simple example:</p>
<p><code><br />
  Dim cust as Customer = Customer.Load("id = {0}", 123)<br />
</code></p>
<p>becomes:</p>
<p><code><br />
  Dim cust as New Customer("id = {0}", 123)<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/inheriting-constructors-in-c-vbnet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Running network cables</title>
		<link>http://gregmaclellan.com/blog/running-network-cables/</link>
		<comments>http://gregmaclellan.com/blog/running-network-cables/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 06:44:47 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[Renovation]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/?p=106</guid>
		<description><![CDATA[With the basement torn out, and access to all of the main floor, I started running wiring for network and video. I&#8217;m running two network cables and one cable to each of the bedrooms, two spots in the family room, and one spot in the dining room.
Since the upstairs is finished, I wanted to disrupt [...]]]></description>
			<content:encoded><![CDATA[<p>With the basement torn out, and access to all of the main floor, I started running wiring for network and video. I&#8217;m running two network cables and one cable to each of the bedrooms, two spots in the family room, and one spot in the dining room.</p>
<p>Since the upstairs is finished, I wanted to disrupt it the least amount possible, so I purchased a 54&#8243; flexible installer&#8217;s drill bit. It&#8217;s 9/16&#8243; which is big enough for all the cables I&#8217;m running. The basic process is to cut out the hole in the wall where the wall plate will go, stick the bit in and drill a hole from inside the wall to the floor below, and then pull the wires back up through. </p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2150.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2150-112x150.jpg" alt="" title="Wiring - drilling into wall" width="112" height="150" class="alignnone size-thumbnail wp-image-107" /></a><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2143.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2143-175x131.jpg" alt="Picture of drill from inside the wall" title="Wiring - drill inside wall" width="175" height="131" class="size-thumbnail wp-image-108" /></a></p>
<p>The bit came with a special tool that goes inside the wall and directs the bit straight down. I had to use this a couple of times when a joist was directly below part of the wall. It also came with a special sleeve that clips onto a hole in the drill bit, grabs the wire, and lets the drill bit act like a fish to pull the wires back up through - very convenient. </p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2157.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2157-175x131.jpg" alt="" title="Wiring - drill coming through floor" width="175" height="131" class="alignnone size-thumbnail wp-image-109" /></a><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2159.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2159-112x150.jpg" alt="" title="Wiring - wires ready to be fished up through" width="112" height="150" class="alignnone size-thumbnail wp-image-110" /></a></p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2160.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2160-175x131.jpg" alt="" title="Wiring - wires pulled through hole" width="175" height="131" class="alignnone size-thumbnail wp-image-111" /></a><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2165.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2165-112x150.jpg" alt="" title="Wiring - retrofit box" width="112" height="150" class="alignnone size-thumbnail wp-image-112" /></a></p>
<p>I used a low-voltage plastic retrofit box to finish it off. This is easier than a metal retrofit box simply because I&#8217;m using keystone jacks and quite a few wires. The retrofit boxes are typically not that big, so trying to terminate several wires, including RG6 coaxial (which is not really that flexible), is easier.</p>
<p>I&#8217;m still waiting for all the plates and keystone jacks to arrive, so I haven&#8217;t terminated too many of these yet (just a couple to get phones and my media server going). I&#8217;ll follow up with a post about the termination later. </p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2184.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2184-175x131.jpg" alt="" title="Wiring - finished wires going into floor above" width="175" height="131" class="alignnone size-thumbnail wp-image-113" /></a><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2189.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2189-112x150.jpg" alt="" title="Wiring - running though basement ceiling" width="112" height="150" class="alignnone size-thumbnail wp-image-114" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/running-network-cables/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Starting to renovate the basement</title>
		<link>http://gregmaclellan.com/blog/starting-to-renovate-the-basement/</link>
		<comments>http://gregmaclellan.com/blog/starting-to-renovate-the-basement/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 02:49:46 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[Renovation]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/?p=90</guid>
		<description><![CDATA[My girlfriend and I just bought a house. It&#8217;s a bit older - 32 years old, to be exact - and it shows, in a few places. My first big project is to renovate the basement and turn it into an office / rec-room area, and a laundry room. I figured it would be interesting [...]]]></description>
			<content:encoded><![CDATA[<p>My girlfriend and I just bought a house. It&#8217;s a bit older - 32 years old, to be exact - and it shows, in a few places. My first big project is to renovate the basement and turn it into an office / rec-room area, and a laundry room. I figured it would be interesting to some people if I blogged, plus it is some extra motivation for me to get it done in a timely basis.</p>
<p>The basement is not really finished. In the main area, there is wood paneling, acoustic tile ceiling, and painted cement floor. The laundry area is just bare concrete walls, and has all the old cabinets from the original kitchen. </p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp1947.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp1947-150x112.jpg" alt="" title="Before - Stairs" width="150" height="112" class="alignnone size-thumbnail wp-image-96" /></a><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2078.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2078-150x112.jpg" alt="" title="Before - Old cabinets and fridge" width="150" height="112" class="alignnone size-thumbnail wp-image-97" /></a></p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp1946.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp1946-150x112.jpg" alt="" title="Before - More old cabinets and stuff (before we moved in)" width="150" height="112" class="alignnone size-thumbnail wp-image-98" /></a><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2087.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2087-150x112.jpg" alt="" title="Before - Laundry room" width="150" height="112" class="alignnone size-thumbnail wp-image-99" /></a></p>
<p>So the first thing I did was rip the ceiling, panels and most of the old cabinets down. </p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2089.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2089-150x112.jpg" alt="" title="Teardown - Ceiling tiles removed" width="150" height="112" class="alignnone size-thumbnail wp-image-101" /></a><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2099.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2099-150x112.jpg" alt="" title="Teardown - panels gone 1" width="150" height="112" class="alignnone size-thumbnail wp-image-102" /></a></p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2101.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2101-112x150.jpg" alt="" title="Teardown - Panels gone 2 " width="112" height="150" class="alignleft size-thumbnail wp-image-103" /></a> There is a crawlspace under half of the house, and the only paneling I left was for the door to the crawlspace, as I believe the door will fall apart without it. I will eventually figure out something better.</p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2103.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2103-112x150.jpg" alt="" title="Teardown - Glue on drywall" width="112" height="150" class="alignright size-thumbnail wp-image-104" /></a> There was some kind of flower wallpaper paneling around the stairs (think wood paneling, but flower wallpaper instead of the faux-wood). This was glued to the drywall, so removing it left chunks of glue, and missing sections of drywall. There&#8217;s probably a way to remove it that wouldn&#8217;t have done this, but too late now. I just have to decide if it&#8217;s easier to sand and plaster, or just put up new drywall..</p>
<p><a href="http://gregmaclellan.com/blog/wp-content/uploads/imgp2098.jpg"  rel="lightbox"><img src="http://gregmaclellan.com/blog/wp-content/uploads/imgp2098-150x112.jpg" alt="" title="Teardown - stairs, return vent" width="150" height="112" class="alignleft size-thumbnail wp-image-100" /></a> I also started taking down the wall between the main area and the laundry room, but ran into a bit of an issue with a cold-air return vent. It goes up beside the main beam, runs through the joists over top of the main air duct, and then down into the main cold air return duct. I think I&#8217;m just going to try capping it off, and then adding a new cold-air return on the other side of the basement.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/starting-to-renovate-the-basement/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SvnMergeGui</title>
		<link>http://gregmaclellan.com/blog/svnmergegui/</link>
		<comments>http://gregmaclellan.com/blog/svnmergegui/#comments</comments>
		<pubDate>Thu, 29 May 2008 07:01:13 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[Computers]]></category>

		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/svnmergegui/</guid>
		<description><![CDATA[I just created a Google Code project for a quick and dirty little app I built, SvnMergeGui. As you may suspect, it&#8217;s a GUI to SvnMerge.
It uses ClickOnce for the installation (because it was really easy to do from VisualStudio), and is pointed at the svn repository for updates - so although I&#8217;ve never tried [...]]]></description>
			<content:encoded><![CDATA[<p>I just created a Google Code project for a quick and dirty little app I built, <a href="http://svnmergegui.googlecode.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/svnmergegui.googlecode.com');">SvnMergeGui</a>. As you may suspect, it&#8217;s a GUI to <a href="http://www.orcaware.com/svn/wiki/Svnmerge.py" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.orcaware.com');">SvnMerge</a>.</p>
<p>It uses ClickOnce for the installation (because it was really easy to do from VisualStudio), and is pointed at the svn repository for updates - so although I&#8217;ve never tried it, the theory is that it will have automatic updates built-in. You can download the install files from the project page linked above.</p>
<p><a href="http://svnmergegui.googlecode.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/svnmergegui.googlecode.com');"><img src="http://svnmergegui.googlecode.com/svn/wiki/mainscreen-small.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/svnmergegui/feed/</wfw:commentRss>
		</item>
		<item>
		<title>UI First Design</title>
		<link>http://gregmaclellan.com/blog/ui-first-design/</link>
		<comments>http://gregmaclellan.com/blog/ui-first-design/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 05:24:51 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[Computers]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/ui-first-design/</guid>
		<description><![CDATA[Often when I am writing software I design the user interface first, or at least separately, from the rest of the code. Jeff Atwood describes UI First software development on his blog:
Of course, UI is hard, far harder than coding for developers. It&#8217;s tempting to skip the tough part and do what comes naturally &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>Often when I am writing software I design the user interface first, or at least separately, from the rest of the code. Jeff Atwood describes <a href="http://www.codinghorror.com/blog/archives/001091.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.codinghorror.com');">UI First software development</a> on his blog:</p>
<blockquote><p>Of course, UI is hard, far harder than coding for developers. It&#8217;s tempting to skip the tough part and do what comes naturally &#8212; start banging away in a code window with no real thought given to how the user will interact with the features you&#8217;re building.</p>
<p>Remember, to the end user, the interface is the application. Doesn&#8217;t it make sense to think about that before firing up the compiler? </p></blockquote>
<p>I found this particularly interesting and timely in light of the topic being the brunt of a recent <a href="http://thedailywtf.com/Articles/FrontAhead-Design.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/thedailywtf.com');">April fool&#8217;s day joke</a> on The Daily WTF. When I read that post, I actually found it surprising that programmers would think it satirical to consider designing the user interface first. Of course, the rest of the post gets a bit more crazy but I won&#8217;t touch that part.</p>
<p>Jeff talks more about the benefits of <a href="http://www.alistapart.com/articles/paperprototyping" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.alistapart.com');">paper prototyping</a>:</p>
<blockquote><p>Paper prototypes are usually pitched in terms of doing low-fi usability studies, and rightly so. But I find a paper prototype tremendously helpful even if I&#8217;m the only one that ever sees it. I need to create an image in my mind of what I&#8217;m building, as it will be seen by the world, before I start pouring the concrete to make it real.</p></blockquote>
<p>Figuring out the GUI definitely helps you get into the guts of what you need to accomplish in the end, and so it is definitely a helpful task. I think there is another tremendous benefit that to this however: developing a nice user interface.</p>
<p>Okay, so this seems like a less than earth-shattering revelation. Many programmers totally miss the mark on this though. Consider the traditional approach: write a command-line app or hardcode everything in, get the code working, and then write a GUI on top of it to expose to the end user. By doing this, you automatically box yourself into writing a GUI based on your underlying API or database layout. </p>
<p>I think there is a big benefit to taking a step back, totally forgetting about all the underlying API stuff you did, and think up a design for the best possible UI that you can for the problem you&#8217;re trying to solve. Pretend <a href="http://www.joelonsoftware.com/articles/fog0000000012.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.joelonsoftware.com');">you&#8217;ll be the one using it</a> every day for the rest of your life. </p>
<p>What you come up with may be totally incompatible with your API; that is okay. In fact, it may even point out fundamental flaws with the way you&#8217;ve done things (hence the benefit of the initial paper prototype..). It may work exactly with your code. It may require a translation layer of sorts, to convert what the underlying code is doing to how things are represented in the UI. It may also require compromises in the UI to be able to write a translation layer. All of these are good outcomes though because the end result is you generally have a much nicer UI than you would get if you just stick a pretty face on the raw API. </p>
<p>To use a simple example, consider the <a href="https://www.google.com/accounts/ServiceLogin?service=local&#038;nui=1&#038;continue=http:%2F%2Fmaps.google.ca%2Fmaps%2Fms%3Fie%3DUTF8%26lr%3Dlang_en%26hl%3Den%26msa%3D2&#038;hl=en&#038;gl=ca" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');">Google MyMaps</a> interface. Underneath, the database is storing locations using their latitude and longitude, and assigning a name to them. The ultimate simple interface to this would be: </p>
<p><img id="image82" src="http://gregmaclellan.com/blog/wp-content/ui-first-simple.PNG" alt="Simple &quot;add a point&quot; UI" /></p>
<p>Of course, what Google actually did makes much more sense - even though it involves a whole lot of code that translates mouse clicks on the screen into map pixel offsets, and then those into latitude/longitude:</p>
<p><img id="image83" src="http://gregmaclellan.com/blog/wp-content/ui-first-map.PNG" alt="Good &quot;add a point&quot; UI" /></p>
<p>In a lot of situations, the success of your software can come down to how nice and/or easy to use the GUI is, regardless of how powerful it is underneath (I&#8217;m sure you can think up many examples of this .. perhaps in say, the operating system world). Whether or not you actually design the UI first is inconsequential - ultimately you need to design the UI for the end users, not for the API.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/ui-first-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hacking RFID-enabled credit cards.. For $8</title>
		<link>http://gregmaclellan.com/blog/hacking-rfid-enabled-credit-cards-for-8/</link>
		<comments>http://gregmaclellan.com/blog/hacking-rfid-enabled-credit-cards-for-8/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 18:43:52 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/hacking-rfid-enabled-credit-cards-for-8/</guid>
		<description><![CDATA[I&#8217;ve talked to a few of my friends about the stupidity of the non-contact credit cards (that use RFID) before, but at the time I couldn&#8217;t find any practical examples showing that it was actually possible to steal credit card information just by walking past people. Well, now you can watch it in action:

Via BoingBoing
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve talked to a few of my friends about the stupidity of the non-contact credit cards (that use RFID) before, but at the time I couldn&#8217;t find any practical examples showing that it was actually possible to steal credit card information just by walking past people. Well, now you can watch it in action:</p>
<p><embed class='castfire_player' id='cf_4a893' name='cf_4a893' width='400' height='400' src='http://p.castfire.com/Xu7m0/video/8913/bbtv_2008-03-18-195242.flv' type='application/x-shockwave-flash' allowFullScreen='true'></embed></p>
<p><a href="http://tv.boingboing.net/2008/03/19/how-to-hack-an-rfide.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/tv.boingboing.net');">Via BoingBoing</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/hacking-rfid-enabled-credit-cards-for-8/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Jango</title>
		<link>http://gregmaclellan.com/blog/jango/</link>
		<comments>http://gregmaclellan.com/blog/jango/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 22:46:34 +0000</pubDate>
		<dc:creator>groogs</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://gregmaclellan.com/blog/jango/</guid>
		<description><![CDATA[So it&#8217;s been a while - almost a year! - since I updated this site, which probably also means no one pays attention anymore, but oh well. I just thought I&#8217;d make a little post about a new service I&#8217;ve been using over the last couple of days called Jango. It&#8217;s basically personalized radio stations, [...]]]></description>
			<content:encoded><![CDATA[<p>So it&#8217;s been a while - almost a year! - since I updated this site, which probably also means no one pays attention anymore, but oh well. I just thought I&#8217;d make a little post about a new service I&#8217;ve been using over the last couple of days called <a href="http://www.jango.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.jango.com');">Jango</a>. It&#8217;s basically personalized radio stations, along the lines of Pandora, but it&#8217;s a bit more social, and (the biggest thing for me) it works in Canada.</p>
<p>Each user can create a number of stations, and for each of them, you can add artists to it, control how much variety it plays, and rate songs as they play.</p>
<p>An interesting feature is you can search for and play songs on demand - but what happens is it shows songs that are currently playing on other user&#8217;s stations, and then tunes you into that station. The song starts at the beginning, but if you continue listening, the next song that plays is determined by the station. In this sense, &#8220;stations&#8221; are more like dynamic playlists - it&#8217;s an interesting concept.<br />
My stations are at: <a href="http://www.jango.com/users/3393756" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.jango.com');">http://www.jango.com/users/3393756</a>. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://gregmaclellan.com/blog/jango/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
