<?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/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>Ben&#039;s Blog</title>
	<atom:link href="http://blog.benbergman.ca/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.benbergman.ca</link>
	<description>A window into the mind of a computer engineer</description>
	<lastBuildDate>Fri, 02 Nov 2012 04:11:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
		<item>
		<title>μJoypad [+ ..]</title>
		<link>http://blog.benbergman.ca/2012/11/01/%ce%bcjoypad/</link>
		<comments>http://blog.benbergman.ca/2012/11/01/%ce%bcjoypad/#comments</comments>
		<pubDate>Fri, 02 Nov 2012 04:11:47 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[NES]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1804</guid>
		<description><![CDATA[Introducing the μJoypad, the worlds smallest NES controller! Measuring in at 25.4&#215;12.8&#215;3.2mm (1.0&#215;0.5&#215;0.1in) this is, by my best research, the worlds smallest, fully functional NES compatible controller. A couple months ago I saw an article or video of the world&#8217;s largest game controller and thought to myself &#8220;I bet I could make the smallest&#8221; and [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.benbergman.ca/2012/11/01/%ce%bcjoypad/2012-10-24-20-45-36/" rel="attachment wp-att-1812"><img class="wp-image-1812 aligncenter" title="2012-10-24 20.45.36" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-24-20.45.36.jpg" alt="" width="500" height="375" /></a></p>
<p style="text-align: left;">Introducing the μJoypad, the worlds smallest NES controller! Measuring in at 25.4&#215;12.8&#215;3.2mm (1.0&#215;0.5&#215;0.1in) this is, by my best research, the worlds smallest, fully functional NES compatible controller. A couple months ago I saw an article or video of the world&#8217;s largest game controller and thought to myself &#8220;I bet I could make the smallest&#8221; and so I did. The project is open hardware and available <a href="https://github.com/BenBergman/uJoypad" class="broken_link">on GitHub</a>. More pictures and a description of the design process after the jump.<span id="more-1804"></span></p>
<p style="text-align: left;">As you may remember, this isn&#8217;t <a href="http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/">my first</a> custom NES controller, but I started the project off hunting down a controller schematic so that I could make a <a href="https://github.com/BenBergman/uJoypad/tree/master/schematic" class="broken_link">proper clone</a>. There is a surprising amount of inconsistency among these things online. Thankfully, I was able to find a nes controller scan and a replacement pcb layout which helped a lot. Knowing the basics of the controller functionality, I set off in search of the smallest footprint 4021 shift register available that I felt I could hand solder.</p>
<p style="text-align: center;"><a href="http://blog.benbergman.ca/2012/11/01/%ce%bcjoypad/photo1/" rel="attachment wp-att-1820"><img class="wp-image-1820 aligncenter" title="photo(1)" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/photo1.jpg" alt="" width="500" /></a></p>
<p style="text-align: left;">Next was to find some tiny push buttons since i didn&#8217;t want to deal with trying to make a bunch of tiny rubber dome buttons like in a normal gamepad. After a little searching, I found some sufficiently tiny ones.</p>
<p style="text-align: left;">Next was finding some resistors. I found a nice and compact resistor network for the button pull-ups and used some SMD resistors I already had on hand for the latch and clock pull-ups.</p>
<p style="text-align: left;">The hardest part to find was the NES controller cable. For my NES-chuck project, I just borrowed a cable from another NES controller, but I can only bear to take apart so many vintage controllers. Eventually I found some extension cables on Amazon that I could cut the ends off of guilt free.</p>
<p style="text-align: center;"><a href="http://blog.benbergman.ca/2012/11/01/%ce%bcjoypad/2012-10-20-10-13-05-2/" rel="attachment wp-att-1807"><img class="aligncenter  wp-image-1807" title="2012-10-20 10.13.05" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.13.051.jpg" alt="" width="500" /></a></p>
<p style="text-align: left;">The next step was taking the footprints for these parts, putting them into a new pcb layout, and cramming them into a small area. After guessing at a few different optimal placements, I came up with the arrangement seen here. Routing the traces was a bit tricky, but <a href="https://github.com/BenBergman/uJoypad/blob/master/pcb/nes_controller_pcb_front.png" class="broken_link">it all fit</a>.</p>
<p style="text-align: left;">About a month ago, I sent the design off to <a href="http://oshpark.com/">OSHPark</a> with a silk screen designed by a fellow SkullSpace member. The board arrived a couple weeks ago and I built one up. I was very much expecting my poor SMD soldering skills (evidenced by all the crooked buttons) or my first revision layout would have screwed something up, but to my surprise and delight, it worked right away when I booted up the NES. I even managed to play through the first level of Mario without getting hurt!</p>
<p style="text-align: center;"><a href="http://blog.benbergman.ca/2012/11/01/%ce%bcjoypad/2012-10-20-10-14-40-2/" rel="attachment wp-att-1809"><img class="aligncenter  wp-image-1809" title="2012-10-20 10.14.40" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.14.401.jpg" alt="" width="500" /></a></p>
<p style="text-align: left;">I&#8217;ve had a few people play with it already and, while everyone agrees that it is cool, they also agree that it is a painful experience. I&#8217;m not sure I really expected much more than that though, and honestly it is much more playable than I thought it might be. I&#8217;m going to see if I can laser cut a hotel key-card or something to make a bit of a case to reduce the pressure of the tiny buttons.</p>
<p style="text-align: center;"><a href="http://blog.benbergman.ca/2012/11/01/%ce%bcjoypad/img517/" rel="attachment wp-att-1816"><img class="aligncenter  wp-image-1816" title="IMG517" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/IMG517.jpg" alt="" width="500" /></a></p>
<p style="text-align: left;">If you are interested in giving it a spin or want more details on how I did the design, I am organizing an embedded/electronics night at SkullSpace (125 Adelaide) on November 5 to which anyone is welcome. The plan is for me to talk a bit about the project followed by some project working time where everyone can work on their projects together with others interested in similar things. SkullSpace will also have a table at this weekend&#8217;s Central Canada Comic-Con and my μJoypad will be on display there too.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/11/01/%ce%bcjoypad/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>SDEC12</title>
		<link>http://blog.benbergman.ca/2012/10/29/sdec12/</link>
		<comments>http://blog.benbergman.ca/2012/10/29/sdec12/#comments</comments>
		<pubDate>Tue, 30 Oct 2012 03:28:15 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[engineering]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1792</guid>
		<description><![CDATA[A couple weeks ago I was fortunate enough to be able to attend the Software Development and Evolution Conference 2012. Since my formal training is in engineering, I never got the chance to learn a lot of software development techniques. This conference talked about a lot of stuff that falls under the umbrella of &#8220;Agile&#8221; [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.benbergman.ca/2012/10/29/sdec12/2012-10-29-13-51-24/" rel="attachment wp-att-1798"><img class="alignleft  wp-image-1798" title="2012-10-29 13.51.24" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-29-13.51.24.jpg" alt="" width="300" /></a>A couple weeks ago I was fortunate enough to be able to attend the Software Development and Evolution Conference 2012. Since my formal training is in engineering, I never got the chance to learn a lot of software development techniques. This conference talked about a lot of stuff that falls under the umbrella of &#8220;Agile&#8221; development. The core idea is to produce quick iterations with tight feedback loops in order to get a working product out the door faster (and of higher quality) than you could if you tried to build the entire product all at once. There are a number of strategies that were introduced and I&#8217;m going to log the interesting ones here, largely for my own future reference.<span id="more-1792"></span></p>
<h1>Kanban</h1>
<p>The whole third day of the conference, I was at a working shop focusing on personal kanban. Kanban was started in Toyota, and can be summarized as visualizing your workflow and minimizing work in progress. A pretty simple strategy, but it has some interesting effects. We spent most of the day putting together boards that would work for us. This started off with 3 columns full of stickies with tasks on them. The columns were to-do, doing, and done. The idea was that you want to only have a couple items in the doing column or else you will not be able to effectively concentrate on any one thing. Moving things into the done column lets you see how you are achieving things and what your work flow actually looks like. I have built a kanban board on my cubical wall (pictured above), as have my coworkers that were also at the conference, and so far I am liking it.</p>
<h1>Test Driven Design (TDD)</h1>
<p>I was already investigating this before attending the conference, but there were a couple talks that really drove this home. The idea is that you write unit tests before you write any production code so that you can come up with an effective, minimal solution to your needs that can quickly and easily be verified any time you make changes to your software. I have been using this on my current project at work and so far I am really liking it. I can understand how this would be incredibly useful once your projects start to get really large.</p>
<p>One of the conference organizers pointed me to <a href="http://www.renaissancesoftware.net/blog/">James Grenning</a> who does a lot of embedded TDD (he literally wrote the book on it) and he has some really great, practical tips.</p>
<h1>Pair Programming/Code Review</h1>
<p>While not really that related, they share some common benefits. With pair programming, two (or more) developers sit together at the same workstation and work on the same problem together. This can be useful for getting out some quality code as well as transferring knowledge to another employee without spending time on documentation. Code review has a similar goal, but the second person just looks at the code after it has been written (and ideally before it is released) and they can make their suggestions/changes at that time. While not as effective, it can take fewer dev-hours and works to the same goal. We are moving to Git at work, and so I will be suggesting using Git merge requests as a good way to ease into peer reviews; any changes to code should be reviewed and checked in to the main repository by someone else.</p>
<h1>Communication</h1>
<p>This point was stressed with many different techniques, from stand up meetings to silent brainstorming. Everything sounded interesting, but the core idea was to promote open communication. The one thing that I have been doing already is keeping an IRC channel open with some friends/coworkers where we can chat about any obstacles we come across. I have found this to be incredibly useful and I think I will try to get more of my coworkers involved in that. The thing that I really like about IRC is that, even if you can&#8217;t provide an answer to someone, you get to see what is going on and perhaps learn something that you could use down the road. I had one of those moments this afternoon.</p>
<p>There was a bunch of other great stuff going on at that conference too. I hope to be able to attend more events like that in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/10/29/sdec12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>PCBs!</title>
		<link>http://blog.benbergman.ca/2012/10/20/pcbs/</link>
		<comments>http://blog.benbergman.ca/2012/10/20/pcbs/#comments</comments>
		<pubDate>Sat, 20 Oct 2012 17:48:16 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[NES]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1768</guid>
		<description><![CDATA[I got some PCBs in the mail yesterday! I designed these all with gEDA pcb and had them manufactured in the States by OSHPark. In the main picture, from top to bottom, I have an FFC breakout board for my Bluetooth Kinesis project, an ATtiny45 VUSB breakout board intended to be used as a NES [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.benbergman.ca/2012/10/20/pcbs/2012-10-20-10-11-25/" rel="attachment wp-att-1769"><img class="alignleft  wp-image-1769" title="2012-10-20 10.11.25" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.25.jpg" alt="" width="300" /></a>I got some PCBs in the mail yesterday! I designed these all with gEDA pcb and had them manufactured in the States by <a href="http://oshpark.com/">OSHPark</a>. In the main picture, from top to bottom, I have an FFC breakout board for my Bluetooth Kinesis project, an ATtiny45 VUSB breakout board intended to be used as a NES controller to USB adapter, an EasyPoint breakout board also for my Kinesis mod, and my μJoypad. I&#8217;ve already found one problem with EasyPoint breakout (my own fault, even though I was warned about it). gEDA pcb outputs 2 drill files, one for each of plated and un-plated holes, but OSHPark expects those to be combined, so my unplated holes were not drilled. Hopefully this is an easy fix with a drill press, otherwise I will just be cutting off the stabilizer pegs from the EasyPoints.
<a href='http://blog.benbergman.ca/2012/10/20/pcbs/2012-10-20-10-11-25/' title='2012-10-20 10.11.25'><img data-attachment-id="1769" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.25.jpg" data-orig-size="1944,2592" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="2012-10-20 10.11.25" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.25.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.25.jpg" width="187" height="250" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.25.jpg" class="attachment-thumbnail" alt="2012-10-20 10.11.25" /></a>
<a href='http://blog.benbergman.ca/2012/10/20/pcbs/2012-10-20-10-11-45/' title='2012-10-20 10.11.45'><img data-attachment-id="1770" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.45.jpg" data-orig-size="2592,1944" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="2012-10-20 10.11.45" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.45.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.45.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.45.jpg" class="attachment-thumbnail" alt="2012-10-20 10.11.45" /></a>
<a href='http://blog.benbergman.ca/2012/10/20/pcbs/2012-10-20-10-11-56/' title='2012-10-20 10.11.56'><img data-attachment-id="1771" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.56.jpg" data-orig-size="2592,1944" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="2012-10-20 10.11.56" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.56.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.56.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.11.56.jpg" class="attachment-thumbnail" alt="2012-10-20 10.11.56" /></a>
<a href='http://blog.benbergman.ca/2012/10/20/pcbs/2012-10-20-10-12-08/' title='2012-10-20 10.12.08'><img data-attachment-id="1772" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.12.08.jpg" data-orig-size="2592,1944" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="2012-10-20 10.12.08" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.12.08.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.12.08.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.12.08.jpg" class="attachment-thumbnail" alt="2012-10-20 10.12.08" /></a>
<a href='http://blog.benbergman.ca/2012/10/20/pcbs/2012-10-20-10-12-17/' title='2012-10-20 10.12.17'><img data-attachment-id="1773" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.12.17.jpg" data-orig-size="2592,1944" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="2012-10-20 10.12.17" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.12.17.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.12.17.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.12.17.jpg" class="attachment-thumbnail" alt="2012-10-20 10.12.17" /></a>
<a href='http://blog.benbergman.ca/2012/10/20/pcbs/2012-10-20-10-13-05/' title='2012-10-20 10.13.05'><img data-attachment-id="1774" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.13.05.jpg" data-orig-size="2592,1944" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="2012-10-20 10.13.05" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.13.05.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.13.05.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.13.05.jpg" class="attachment-thumbnail" alt="2012-10-20 10.13.05" /></a>
<a href='http://blog.benbergman.ca/2012/10/20/pcbs/2012-10-20-10-14-40/' title='2012-10-20 10.14.40'><img data-attachment-id="1775" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.14.40.jpg" data-orig-size="2592,1944" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="2012-10-20 10.14.40" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.14.40.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.14.40.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-20-10.14.40.jpg" class="attachment-thumbnail" alt="2012-10-20 10.14.40" /></a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/10/20/pcbs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Teaching Git</title>
		<link>http://blog.benbergman.ca/2012/10/17/teaching-git/</link>
		<comments>http://blog.benbergman.ca/2012/10/17/teaching-git/#comments</comments>
		<pubDate>Thu, 18 Oct 2012 01:01:17 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1757</guid>
		<description><![CDATA[For the longest time, the company I work for has been using CVS to track their source code. While it works (most of the time), CVS is widely considered obsolete. A few months back I suggested we switch our source code tracking over to Git, and they picked it up and ran with it. We [...]]]></description>
				<content:encoded><![CDATA[<p class="presenter"><a href="http://blog.benbergman.ca/2012/10/17/teaching-git/2012-10-12-18-07-34/" rel="attachment wp-att-1761"><img class="alignleft  wp-image-1761" title="2012-10-12 18.07.34" src="http://blog.benbergman.ca/wp-content/uploads/2012/10/2012-10-12-18.07.34.jpg" alt="" width="300" /></a>For the longest time, the company I work for has been using CVS to track their source code. While it works (most of the time), CVS is widely considered obsolete. A few months back I suggested we switch our source code tracking over to Git, and they picked it up and ran with it. We are slowly transitioning things over.</p>
<p class="presenter">Git and CVS, while they aim to achieve the same goal, do have some significant differences. In order to ease the transition for the rest of the developers, I ran a few training sessions. I based the majority of my talk on &#8220;<a href="http://2010.osdc.com.au/proposal/196/git-ages-4-and">Git For Ages 4 and Up</a>&#8221; by Michael Schwern, a fantastic talk using Tinkertoys to show how a Git repository grows. I didn&#8217;t have any Tinkertoys, but I did bring in a bunch of K&#8217;Nex, enough for everyone to follow along. I think using something physical really helped keep people engaged a lot better.</p>
<p class="presenter">If anyone wants me help them out with a similar talk or just wants to chat about Git, I&#8217;m always up for talking about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/10/17/teaching-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Hard but soft power switch</title>
		<link>http://blog.benbergman.ca/2012/08/01/hard-but-soft-power-switch/</link>
		<comments>http://blog.benbergman.ca/2012/08/01/hard-but-soft-power-switch/#comments</comments>
		<pubDate>Thu, 02 Aug 2012 03:59:43 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1724</guid>
		<description><![CDATA[A few weeks ago I was hanging out at SkullSpace and a group of fellow makers were working on their Arduino controlled hi-fi setup. They already had all the hardware for the setup constructed and were working on the interface when they realized that a soft-shutdown mode would be useful for saving state. Unfortunately, the [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.benbergman.ca/?attachment_id=1730" rel="attachment wp-att-1730"><img class="aligncenter  wp-image-1730" title="2012-07-13 23.15.38" src="http://blog.benbergman.ca/wp-content/uploads/2012/07/2012-07-13-23.15.38.jpg" alt="" width="500" /></a></p>
<p style="text-align: left;">A few weeks ago I was hanging out at SkullSpace and a group of fellow makers were working on their Arduino controlled hi-fi setup. They already had all the hardware for the setup constructed and were working on the interface when they realized that a soft-shutdown mode would be useful for saving state. Unfortunately, the power controller in the system just cuts power to the transformer that provides the Arduino 5 volts. We figured out a solution to this problem and I thought it was pretty clever, so I thought I would share it.</p>
<p>The power controller module used in the system takes input directly from a momentary switch and uses that to toggle a relay that passes mains power to the system&#8217;s transformers. The controller circuit operates at 12V and as I understand was chosen to allow a wider variety of fancy lower voltage buttons and power LEDs to be used. Getting the Arduino to act as a momentary switch (via transistors or relays) works fine for powering the unit down once settings have been saved. However, the actual physical power switch needs to work directly with the controller when the system is off, but talk only to the Arduino when the system is on.</p>
<p>To do this, we decided to hook the power button up through a DPDT relay that is switched directly by the 5 volt supply. This way, the button is connected to the power controller when the system is off (ie. no 5 volt power is present) and then once the system is on, the button is connected to the inputs on the Arduino. Since the relay physically switches the button between circuits, it doesn&#8217;t really matter that one circuit operates at 12 volts and the other at 5.</p>
<p style="text-align: center;"><a href="http://blog.benbergman.ca/?attachment_id=1732" rel="attachment wp-att-1732"><img class="aligncenter  wp-image-1732" title="soft_hard_switch" src="http://blog.benbergman.ca/wp-content/uploads/2012/07/soft_hard_switch1.png" alt="" width="500" /></a></p>
<p>In my schematic, I assume that the input pin on the Arduino has the internal pull up resistor activated. I also assume that the relay can be driven directly by the Arduino, which often isn&#8217;t the case. You will likely need to use a transistor to drive the relay. Note that thus far the circuit is untested and should be used at your own risk.</p>
<p>For those interested, my schematic is available in gschem format <a href="https://github.com/BenBergman/soft_hard_switch" class="broken_link">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/08/01/hard-but-soft-power-switch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Door coffee table</title>
		<link>http://blog.benbergman.ca/2012/07/28/door-coffee-table/</link>
		<comments>http://blog.benbergman.ca/2012/07/28/door-coffee-table/#comments</comments>
		<pubDate>Sun, 29 Jul 2012 03:24:28 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1707</guid>
		<description><![CDATA[Last weekend my wife and I made ourselves made a new coffee table (well, more like we helped my dad make it for us). As you can see, our table comes with a door knob, a relic from its past life. A few weeks ago we stumbled upon another&#8217;s efforts to repurpose a door into [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://blog.benbergman.ca/2012/07/28/door-coffee-table/2012-07-27-20-07-17/" rel="attachment wp-att-1709"><img class="wp-image-1709 aligncenter" title="2012-07-27 20.07.17" src="http://blog.benbergman.ca/wp-content/uploads/2012/07/2012-07-27-20.07.17.jpg" alt="" width="560" height="420" /></a></p>
<p style="text-align: left;">Last weekend my wife and I made ourselves made a new coffee table (well, more like we helped my dad make it for us). As you can see, our table comes with a door knob, a relic from its past life. A few weeks ago we stumbled upon <a href="http://www.thissortaoldlife.com/2012/03/14/our-greenest-project-yet/">another&#8217;s efforts</a> to repurpose a door into a table and decided to try for ourselves.</p>
<p style="text-align: left;"><a href="http://blog.benbergman.ca/2012/07/28/door-coffee-table/2012-07-22-15-51-09/" rel="attachment wp-att-1713"><img class="aligncenter  wp-image-1713" title="2012-07-22 15.51.09" src="http://blog.benbergman.ca/wp-content/uploads/2012/07/2012-07-22-15.51.09.jpg" alt="" height="500" /></a></p>
<p style="text-align: left;">My father-in-law already had some old doors sitting in his basement, but they were single panel doors. In order to get a cleaner look I decided that we should miter the cut and make the table look like it had just been folded over.</p>
<p style="text-align: left;"><a href="http://blog.benbergman.ca/2012/07/28/door-coffee-table/2012-07-27-20-06-33/" rel="attachment wp-att-1711"><img class="aligncenter  wp-image-1711" title="2012-07-27 20.06.33" src="http://blog.benbergman.ca/wp-content/uploads/2012/07/2012-07-27-20.06.33.jpg" alt="" width="500" /></a></p>
<p style="text-align: left;">Since we have a rather long couch, our original idea was to use two doors: one for the table top and one side, the other for a shelf and the other side piece. However, after measuring to see how much longer this would make the table, we realized that we would only gain about 15 cm as we would still be cutting off the top and bottom to get us our folded look. Once we added in the fact that the second door was in much worse shape and was actually slightly narrower, we decided the extra effort wasn&#8217;t worth it so we ended up just using the one door.</p>
<p style="text-align: left;">At this point, we were still thinking we wanted a shelf and possibly also feet. One advantage of using a single panel door over a multi-panel door is that the height is much more flexible. We aimed to have the height of the table be slightly shorter than the couch seat height to allow for the addition of feet, but after a minor measurement error, we ended up with the table being almost the exact height of the couch. This turned out to be a blessing as, once we had the table assembled, we realized that we liked the looks of the table without feet or a shelf.</p>
<p style="text-align: left;">The one down side to using a single panel door is that the centre panel is not very strong, but it makes up the majority of the table top. In order to help solidify the top in case someone decides to sit on it or something, we added a few 2&#215;4 support pieces to the underside of the table.</p>
<p style="text-align: left;"><a href="http://blog.benbergman.ca/2012/07/28/door-coffee-table/2012-07-27-20-07-49/" rel="attachment wp-att-1710"><img class="aligncenter  wp-image-1710" title="2012-07-27 20.07.49" src="http://blog.benbergman.ca/wp-content/uploads/2012/07/2012-07-27-20.07.49.jpg" alt="" width="500" /></a></p>
<p style="text-align: left;">So far we have decided not to add a shelf as the look of the table is currently quite clean and has enough room for us to store some baskets full of board games. We still have some finishing work to do (fill in some of the joints and screw holes with wood filler, re-stain the heavily sanded corners and support beams, etc) but for now it is in service and we are really enjoying it.</p>
<p style="text-align: center;"><a href="http://blog.benbergman.ca/2012/07/28/door-coffee-table/2012-07-27-20-06-11/" rel="attachment wp-att-1712"><img class="wp-image-1712" title="2012-07-27 20.06.11" src="http://blog.benbergman.ca/wp-content/uploads/2012/07/2012-07-27-20.06.11.jpg" alt="" width="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/07/28/door-coffee-table/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>The trials and tribulations of life at the command line</title>
		<link>http://blog.benbergman.ca/2012/07/25/the-trials-and-tribulations-of-life-at-the-command-line/</link>
		<comments>http://blog.benbergman.ca/2012/07/25/the-trials-and-tribulations-of-life-at-the-command-line/#comments</comments>
		<pubDate>Wed, 25 Jul 2012 17:51:06 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1702</guid>
		<description><![CDATA[Over the past few weeks I have been working on tweaking a bunch of configuration files (aka &#8220;dot files&#8221;) for programs I regularly use, primarily those used on the command line, and I now have things working really well. Part of the reason for this recent effort is my switch from the bash shell to [...]]]></description>
				<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1703" title="termshot-cropped" src="http://blog.benbergman.ca/wp-content/uploads/2012/07/termshot-cropped.png" alt="" width="535" height="353" /></p>
<p>Over the past few weeks I have been working on tweaking a bunch of <a href="https://github.com/BenBergman/dotfiles" class="broken_link">configuration files</a> (aka &#8220;dot files&#8221;) for programs I regularly use, primarily those used on the command line, and I now have things working really well. Part of the reason for this recent effort is my switch from the bash shell to zsh. I don&#8217;t want to get too much into the &#8220;why&#8221; of that, but the main driver for that change was improved completions and other fancy features. I found a couple of really neat tricks to improve the usability of zsh. <a href="https://github.com/zsh-users/zsh-syntax-highlighting" class="broken_link">One</a> was syntax highlighting while typing commands, <a href="https://bbs.archlinux.org/viewtopic.php?id=95078" class="broken_link">another</a> was toggling the cursor colour to red when in vicmd mode. While both are really neat tricks, I just cannot get things to work with my setup 100%.</p>
<p>For the syntax highlighting, I found that on at least one of my computers, enabling the &#8220;root&#8221; highlighter would cause every key stroke to emit an annoying beep while acting as a normal user, and then just wouldn&#8217;t work when root. The highlighter basically just inverts all colours to emphazise that you are in a special mode, which is nice, but I can live without, so for the time being I have just disabled it.</p>
<p>The vicmd cursor colour trick is a little more frustrating. I really like the extra feedback it gives to the user. It even works for me most of the time. The problem I&#8217;m having is that when I have it enabled and I am using tmux (a terminal multiplexer, similar to screen) and I am using all that inside gnome-terminal, I occasionally get a beeping sound and an escape code 112 gets printed to the screen. This code is emitted by tmux when it wants to reset the cursor colour to default, usually performed when the tmux status bar updates. Unfortunately, gnome-terminal doesn&#8217;t know what to do with this escape code, so it just prints it to the screen and beeps at you. One person online said that gnome-terminal does this on purpose to emulate xterm, but when I tried this in xterm, everything worked as expected. I tried for a little while to get xterm to do all the things I was used to having in gnome-terminal (URL detection, copy/paste without using the mouse buffer, paused tty scrolling, proper unicode display, decent font, etc.) but that was just more of a headache.</p>
<p>For now, I&#8217;m just disabling the vicmd cursor highlighting when I&#8217;m using tmux. I had been planning to switch from using gnome-terminal tabs to using tmux locally (right now I&#8217;m just using tmux on my remote connections). If I do make that switch, I&#8217;ll basically lose the vicmd colouring completely. What I need to do is find a way to get tmux to suppress the 112 escape code, get gnome-terminal to just ignore the code, find a less frustrating way to move away from gnome-terminal, or at the very least detect that I am both within a tmux session and gnome-terminal (which might not even work when reconnecting to a tmux session). I&#8217;ve been fiddling with this for a few days now and can&#8217;t seem to get a proper solution and just felt like ranting about it. If anyone has any suggestions for fixing this problem, I&#8217;m all ears.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/07/25/the-trials-and-tribulations-of-life-at-the-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>The Bluetooth Kinesis</title>
		<link>http://blog.benbergman.ca/2012/06/26/the-bluetooth-kinesis/</link>
		<comments>http://blog.benbergman.ca/2012/06/26/the-bluetooth-kinesis/#comments</comments>
		<pubDate>Wed, 27 Jun 2012 00:47:36 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1688</guid>
		<description><![CDATA[Recently I&#8217;ve been thinking about how I&#8217;d really like to make more progress on my projects and how I feel some amount of accountability would help with that. To that end, I&#8217;ve decided to start posting regular updates of my projects! Normally I like to save them up and reveal them once completed, but I [...]]]></description>
				<content:encoded><![CDATA[<p>Recently I&#8217;ve been thinking about how I&#8217;d really like to make more progress on my projects and how I feel some amount of accountability would help with that. To that end, I&#8217;ve decided to start posting regular updates of my projects! Normally I like to save them up and reveal them once completed, but I think seeing feedback from readers will help to motivate me to continue moving forward on projects that might otherwise sit on the workbench for weeks, plus some people might be interested in the details of my design process (at least I might some day in the future, looking back at these posts).</p>
<p>To start things off, I&#8217;ll write my first progress report on my bluetooth Kinesis mod. Earlier this year <a href="http://blog.benbergman.ca/2012/01/15/dvorak-one-year-later/">I wrote</a> about my new-to-me keyboard, the Kinesis Essential. I have a few friends who also have this style of keyboard and one of them asked me if I could convert it to bluetooth for him. We did some <a href="http://skullspace.ca/wiki/index.php/Custom_bluetooth_keyboard">brainstorming</a>, ordered some parts, and now I&#8217;m ready to start prototyping.</p>
<p>My friend&#8217;s Kinesis is one of the newer, USB variants. However, it turns out that the new and old boards just use a common main board and the new ones add a USB hub with an integrated PS/2 to USB converter. Since PS/2 is a pretty simple protocol, we decided to start his mod off there; a PS/2 to bluetooth converter. I later plan to replace the whole keyboard controller in my board for better battery life and mouse integration (and to further confuse people who try to use my keyboard) but that will be phase two of the project.</p>
<p>To get the prototype going, I&#8217;m just using an Arduino and a <a href="http://www.sparkfun.com/products/8509">PS/2 socket</a> <a href="http://www.sparkfun.com/products/8651">breakout board</a> from SparkFun. As I&#8217;ve mentioned before, I&#8217;m an avid vim user. As a vim user (and not a masochist, despite what you might know about vim), I think the Arduino programming environment is terrible, so the first thing I did was set myself up with an alternate environment in which I could stay sane. I added Arduino filetype detection to my .vimrc, found a way to build and upload code using vim&#8217;s :make command (I chose the scons method described <a href="https://wiki.archlinux.org/index.php/Arduino#Alternatives_for_IDE" class="broken_link">here</a>), and copied the PS/2 Arduino library (found <a href="http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html">here</a>) into my project directory since the scons setup didn&#8217;t seem to find it in the default location. From there, I loaded up the example PS/2 to serial sketch and got the Arduino to read from my Kinesis! Now I need to get a simple proof of concept for my bluetooth module going and then I just need to blend the two together.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/06/26/the-bluetooth-kinesis/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Convert a vector graphic into a gEDA pcb object</title>
		<link>http://blog.benbergman.ca/2012/05/27/convert-a-vector-graphic-into-a-geda-pcb-object/</link>
		<comments>http://blog.benbergman.ca/2012/05/27/convert-a-vector-graphic-into-a-geda-pcb-object/#comments</comments>
		<pubDate>Mon, 28 May 2012 00:42:34 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1603</guid>
		<description><![CDATA[When working on my personal projects, I tend to use as much open source software as possible. Many people in the hobbyist world use Eagle for their EDA tools, which has a free restricted version but is not open. I personally prefer to use the gEDA suite of tools. I like it for its cross [...]]]></description>
				<content:encoded><![CDATA[<p>When working on my personal projects, I tend to use as much open source software as possible. Many people in the hobbyist world use Eagle for their EDA tools, which has a free restricted version but is not open. I personally prefer to use the gEDA suite of tools. I like it for its cross platform compatibility and its adherence to the Unix philosophy of &#8220;do one job and do it well&#8221; allowing tools to be connected in many different ways. This often allows the tools to be leaner, yet more powerful. This can also often make some of these tools a bit harder to pick up.</p>
<p>I was recently trying to add an image to a PCB I was making. Being so modular, gEDA pcb does not have an image import feature but instead relies on the program &#8220;pstoedit&#8221; to convert PostScript vector images into gEDA pcb objects. I have tried doing this before, but usually ended up with poor results. I finally collected the steps necessary to get repeatable, high quality results, which I will document here for anyone else trying to do the same.</p>
<p>1) Load your vector image into Inkscape (I will assume that you already have a vector image and have Inkscape installed)</p>
<p>2) Ensure your image uses only a single colour: black. All black objects will be added to your pcb object and all empty space will be left empty</p>
<p>3) Convert all objects to paths by selecting each object and using Path -&gt; Object to path</p>
<p>4) Remove all overlapping vector paths by using Inkscape&#8217;s merging tools (union, difference, intersection, exclusion, division, etc) found in the Paths menu. If you end up with any paths that are touching (or are even just too close to each other without being joined) you are likely to end up with gEDA pcb carving gaps between them to meet the specified tolerances.</p>
<p>5) Adjust the file size to be appropriate for the scale it will be on the board. I have not yet found a way to reliably re-size the imported image once in pcb, so it is important to get this step right.</p>
<p>6) Save your image as a *.ps (PostScript) file. Make sure the &#8220;Convert texts to paths&#8221; box is marked. You may also want to have the &#8220;Resolution for rasterization (dpi)&#8221; setting cranked up to its maximum of 10000, but since the graphic remains a vector through this whole process, I don&#8217;t think it will make any difference (I haven&#8217;t tried playing with that number yet).</p>
<p>7) From the command line, change to the directory that your *.ps file is in and run a command like this:</p>
<pre>$ pstoedit -psarg "-r1000x1000" -f pcbfill -ssp 'inputfile.ps' 'outputfile.pcb'</pre>
<p>When I was first doing this, I didn&#8217;t add any of the optional parameters and I was using &#8216;pcb&#8217; instead of &#8216;pcbfill&#8217;. -f pcbfill helps to ensure that the objects generated are solid, filled objects, which they might not be otherwise. -ssp forces things like letters with holes (&#8216;o&#8217;, &#8216;d&#8217;, &#8216;p&#8217;, etc.) to convert correctly. The man page warns that this may be CPU intensive, but all the conversions I have done have run pretty well instantaneously. I also found I needed the -psarg &#8220;-r1000x1000&#8243; to get a good resolution out of the conversion.</p>
<p>8) Open your new *.pcb file in gEDA pcb and see the results. You may need to tweak some numbers or add/remove arguments, but so far this seems to work alright for me. Another option that might allow for a little more flexibility is including -xscale and -yscale flags if your image isn&#8217;t quite the right size. It may even help to make the image too large on purpose and the use the scaling flags to condense the resolution (again, I don&#8217;t think anything is rasterized during this process so I doubt this will make a difference, but it might be worth fiddling with it, even if I haven&#8217;t). You might also want to move the object into the top left corner of the pcb layout so that, in case you load it in a layout that is smaller it will still be visible.</p>
<p>9) At this point, you are ready to load your newly created pcb object into your full pcb project.</p>
<p>This process is not an exact science. Play with it until you find something you like. I have had success leaving out some of these steps too, so there is no need to redefine any defaults. Have any other tips for pcb graphics? Leave a comment!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/05/27/convert-a-vector-graphic-into-a-geda-pcb-object/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>New gEDA pcb, now with more colours!</title>
		<link>http://blog.benbergman.ca/2012/05/27/new-geda-pcb-now-with-more-colours/</link>
		<comments>http://blog.benbergman.ca/2012/05/27/new-geda-pcb-now-with-more-colours/#comments</comments>
		<pubDate>Mon, 28 May 2012 00:29:14 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[free software]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1666</guid>
		<description><![CDATA[While working on a project this week, I was trying to see what some silk screen art would look like on a PCB I&#8217;m working on, but the &#8220;photo realistic&#8221; export mode of gEDA pcb was restricted to only green solder mask, tin plating, and white silk screen. The fab house I plan to use [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.benbergman.ca/wp-content/uploads/2012/05/montage.png"><img class="wp-image-1668 aligncenter" title="montage" src="http://blog.benbergman.ca/wp-content/uploads/2012/05/montage.png" alt="" width="576" height="432" /></a></p>
<p>While working on a project this week, I was trying to see what some silk screen art would look like on a PCB I&#8217;m working on, but the &#8220;photo realistic&#8221; export mode of gEDA pcb was restricted to only green solder mask, tin plating, and white silk screen. The fab house I plan to use only provides purple solder mask, gold plating, and white silk screen. Rather than try to tweak the green image in GIMP until it looks half decent, then repeating the process for each candidate silk screen image (and then each future project as well), I decided I would just write a patch!</p>
<p>My patch for gEDA pcb allows the user to now select a solder mask colour of green, blue, red, purple, black, or a (questionable) white, a pad plating colour of regular tin or gold, and a silk screen colour of white or black. All of these options are pictured above. You can find my proposed patch <a href="https://bugs.launchpad.net/pcb/+bug/1004796" class="broken_link">here</a>, and hopefully it be accepted into the core software soon so that you can get it from your system&#8217;s repository.</p>
<p>I&#8217;ve been a fan and advocate of open source software for some time now, but I am pretty sure that this is the first time that I have actually submitted a patch to a somewhat mainstream open source project. I&#8217;m pretty pumped and I hope to do more soon. I heartily recommend it.</p>
<p><strong>Update 2012-06-14:</strong> After some suggested improvement to my patch (additional yellow silk as well as the addition of copper and silver pad plating) my patch has officially been <a href="http://git.geda-project.org/pcb/commit/?id=9f95f133edd760c0030e653b4a6cbe874c7e96f8">accepted</a> into the gEDA pcb repository! You can get the latest version of the code here: git clone git://git.geda-project.org/pcb.git</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/05/27/new-geda-pcb-now-with-more-colours/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Visual diffs with gEDA, git, and GitHub</title>
		<link>http://blog.benbergman.ca/2012/05/17/visual-diffs-with-geda-git-and-github/</link>
		<comments>http://blog.benbergman.ca/2012/05/17/visual-diffs-with-geda-git-and-github/#comments</comments>
		<pubDate>Fri, 18 May 2012 02:40:43 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1634</guid>
		<description><![CDATA[A while ago I read this excellent article by Evil Mad Scientist Laboratories describing the need for some form of visual diff tool for open hardware projects. I had been thinking this was a great idea, but while working on a recent project, decided to actually start implementing something. I use the gEDA suite of [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://blog.benbergman.ca/2012/05/17/visual-diffs-with-geda-git-and-github/image-diff/" rel="attachment wp-att-1646"><img class="aligncenter  wp-image-1646" title="image-diff" src="http://blog.benbergman.ca/wp-content/uploads/2012/05/image-diff.png" alt="" width="579" height="311" /></a></p>
<p style="text-align: left;">A while ago I read <a href="http://www.evilmadscientist.com/article.php/visdiff">this excellent article</a> by Evil Mad Scientist Laboratories describing the need for some form of visual diff tool for open hardware projects. I had been thinking this was a great idea, but while working on a recent project, decided to actually start implementing something. I use the gEDA suite of tools, so that is what I&#8217;m creating this for, but the majority of the plumbing should be reusable for other file formats.</p>
<p>The first piece of this puzzle for me was automatically making image files of my schematics and PCBs that have changed and adding them to each commit. GitHub has image diffing capabilities built in, so this works great. I implemented this a pre-commit hook in .git/hooks/. My git hooks can be found <a href="https://github.com/BenBergman/.git_hooks">here</a>. I have designed them to work with the <a href="https://github.com/icefox/git-hooks">git-hooks</a> tool by Benjamin Meyer.</p>
<p>This script seems to work fine for me, though I&#8217;m open to suggestions for improvements. My major issues with how the hooks work (which are more issues with git than my hook) are</p>
<ol>
<li>The status message in the auto-generated commit comments is not being updated with the new image files and</li>
<li>Hooks don&#8217;t get pushed into remotes</li>
</ol>
<p>The first issue feels like a bug to me, but I suspect that it was done intentionally for some reason I&#8217;m not aware of. I have played with a work around by adding a prepare-commit-msg hook that just regenerates the commit message comments, but I have tested the pre-commit hook enough that I don&#8217;t feel I need to be aware of the addition of the images.</p>
<p>The second issue I am told is a security issue as it would cause arbitrary code to be executed on the machines of others who might clone (and possibly even the server). One nice feature of the git-hooks tool is that it can use hooks in a local repo directory, so if you include my scripts in the git_hooks repository, you just need to run &#8216;git hooks &#8211;install&#8217; and you will have the hooks working. Without that tool, you can just manually copy them into the proper file in the .git/hooks/ directory.</p>
<p>This method works well if I want to view visual diffs online, but sometimes I might be offline or perhaps I just don&#8217;t want to push my project to a public GitHub repo. For that, I plan to make some simple scripts that call visual diffing tools on my local repository. Git has the capability to set your git diff tool, so my plan is to write a wrapper script that picks the right tool based on file types. This script might also generate an image from files that cannot be diffed directly and don&#8217;t have the above auto generated files</p>
<p>Edit: Of course not 20 minutes after I publish this post I discover schdiff, a tool bundled with gEDA since the start of 2012 that is designed to hook into git-difftool to provide a visual diff of gschem .sch files. One format down, some more to go.  :)</p>
<p>Edit 2: Less than a day later and I discover there is also a pcbdiff tool on my computer that came with gEDA pcb. In Arch Linux, it installs to /usr/share/pcb/tools/pcbdiff, but it is not in the path, so in my .bashrc I just added &#8216;export PATH=&#8221;$PATH:/usr/share/pcb/tools&#8221;&#8216; at the end. I feel pcbdiff outputs images that are too low a resolution, plus it can&#8217;t handle when the .pcb files change in physical size, so I might submit a patch or two. Long story short, now I just need to make a script that auto-calls these diff tools based on the file type.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/05/17/visual-diffs-with-geda-git-and-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Dvorak &#8211; one year later</title>
		<link>http://blog.benbergman.ca/2012/01/15/dvorak-one-year-later/</link>
		<comments>http://blog.benbergman.ca/2012/01/15/dvorak-one-year-later/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 03:37:00 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Gear]]></category>
		<category><![CDATA[dvorak]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1602</guid>
		<description><![CDATA[A little over a year ago I posted about switching back to the Dvorak keyboard layout. I have stuck with it since then and that is pretty much all I have used. I thought that I would give a quick update as to how that is going and what else is going on in my keyboarding [...]]]></description>
				<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 510px"><a href="http://www.flickr.com/photos/greenputty/3886354103/"><img src="http://farm4.staticflickr.com/3485/3886354103_b1dcbbccb1.jpg" alt="" width="500" height="333" /></a><p class="wp-caption-text">Photo by Wi Bing Tan</p></div>
<p>A little over a year ago I <a href="http://blog.benbergman.ca/2010/10/18/back-to-dvorak/">posted</a> about switching back to the Dvorak keyboard layout. I have stuck with it since then and that is pretty much all I have used. I thought that I would give a quick update as to how that is going and what else is going on in my keyboarding life.<span id="more-1602"></span></p>
<p>So far I am very pleased with how Dvorak is working for me. I find that when I am typing for long periods that I don&#8217;t have to move my fingers very much and it is quite relaxing. My major complaint with the layout would probably have to be the placement of the &#8216;L&#8217; key. I think it is used a bit too frequently to be a pinky key. During general typing this isn&#8217;t too bad, but when typing for extended periods or while doing a lot of work on the command line (ie. running &#8216;$ ls -l&#8217;, all right-hand pinky keys), it can become a little annoying. Not quite enough for me to go back to qwerty, though.</p>
<p>When I do go back to a qwerty layout for short periods, I have a couple of minutes where I have to think about what keys I am pressing, but I have retained much of that muscle memory and if I have to type for longer periods, it comes back pretty quick (though I rarely need to do this). One thing that is annoying about switching back to qwerty on those rare occasions is keyboard shortcuts. I am a pretty regular Vim user and I have found trying to use Vim for short edits on a qwerty keyboard not to be worth the effort. I should probably force myself to use it, just to help maintain my abilities on that setup, but I generally just fall back to the likes of gedit/nano for those quick qwerty edits.</p>
<p>In my quest to perfect my keyboarding experience, I have made a few other tweaks to my setup. I think basically re-learning how to type makes you re-evaluate the things that you have lived with up until then. For quite some time after switching to Dvorak, I grew more and more frustrated by the typewriter-inherited stagger of a standard keyboard&#8217;s keys. It got to the point where I was ready to tear apart a bunch of keyboards in a quest to make my own. In the end, I was introduced to a bunch of columnar/matrix keyboards that are available on the market like the <a href="http://typematrix.com/" target="_blank">TypeMatrix</a>, <a href="http://www.trulyergonomic.com/">TrulyErgonomic</a>, <a href="http://www.kinesis-ergo.com/contoured.htm">Kinesis Contoured</a>, and <a href="http://www.maltron.com/keyboard-info.html">Maltron</a>, to name a few.</p>
<p>I ended up picking up a ~10 year old Kinesis Essential (with custom/hacked footswitches and upgraded memory, and much cleaner than the one pictured above) second hand from someone on the <a href="http://geekhack.org/" target="_blank">geekhack.org</a> forums in like-new condition for much less than a brand new, modern version. This has been my primary keyboard at work now for almost 5 months and it is great. The hand separation and the use of thumb keys instead of pinky keys are welcome improvements (though at times I wish the hand separation were greater). The bowl shape of the keywells puts the keys into what feels like a much more natural location. The first thing I noticed when I started using this board was that when I reached for the keys, they seemed to almost press themselves as my fingers got there much earlier than my brain expected. All in all, I would say this is a great keyboard. A friend of mine has a more modern version of the Kinesis (though the PCBs inside look identical) and we are planning to convert it into a bluetooth keyboard. I&#8217;ll try to post updates as they come.</p>
<p>The other less major thing I have been doing is tweaking my Vim configurations. I have moved all my plugins into the vundle plugin manager and have made a number of keyboard remappings. The main one that most people would probably get thrown off by if they used my Vim setup is that, while in insert mode, I have swapped the numbers and symbols for all of the number keys (excluding the num pad). I find that when programming, variable names are used much more often than static numbers, as are many of the symbols, so this makes programming a bit quicker. This change is one that I think is taking longer to adjust to due to the fact that it is only remapped in the one mode in Vim and not across my whole computer, but I find that it is really only useful while coding anyway, so a system wide change isn&#8217;t really justified. Having said that, I do really find it useful and there have been times outside of Vim that I have wished I had it too. If anyone is interested in my Vim configuration, you can find it <a href="https://github.com/BenBergman/.vim">here</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2012/01/15/dvorak-one-year-later/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>IEEEXtreme 5.0 programming competition</title>
		<link>http://blog.benbergman.ca/2011/11/27/ieeextreme-5-0-programming-competition/</link>
		<comments>http://blog.benbergman.ca/2011/11/27/ieeextreme-5-0-programming-competition/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 01:40:37 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[university]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1601</guid>
		<description><![CDATA[Back in October I had the opportunity to compete in the 5th annual IEEEXtreme programming competetion, a 24 hour challenge to complete as many programming problems as possible. There were a total of about 16 problems, released roughly once per hour or so. Our team completed around 5 or 6 problems (some were remarked after [...]]]></description>
				<content:encoded><![CDATA[<div>
<p>Back in October I had the opportunity to compete in the 5th annual IEEEXtreme programming competetion, a 24 hour challenge to complete as many programming problems as possible. There were a total of about 16 problems, released roughly once per hour or so. Our team completed around 5 or 6 problems (some were remarked after the completion of the competition due to a bug in the test system, so I am not sure about the final tally). Our team started with 3 members, but unfortunately we were down to 2 about 8 hours in, but we still felt as though we managed to do pretty well. We recently got the results back and were pleased to discover that we came in 240th (out of a total of 1515 teams), putting us in the top 16%! We also came in 14th place in Canada and 3rd place at our home University. I somehow managed to miss this event every other year it has happened but have always wanted to go, so I am glad that I got this final chance to compete.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2011/11/27/ieeextreme-5-0-programming-competition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>I&#8217;m back!</title>
		<link>http://blog.benbergman.ca/2011/11/24/im-back/</link>
		<comments>http://blog.benbergman.ca/2011/11/24/im-back/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 15:50:36 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1590</guid>
		<description><![CDATA[Hi everyone. Sorry for the down time. The ISP I was hosting with suddenly decided to make my system change IPs every 5 minutes, then I got busy with work so I didn&#8217;t have time to fix the problem. I have moved my server to a hopefully more reliable network and will post some life [...]]]></description>
				<content:encoded><![CDATA[<p>Hi everyone. Sorry for the down time. The ISP I was hosting with suddenly decided to make my system change IPs every 5 minutes, then I got busy with work so I didn&#8217;t have time to fix the problem. I have moved my server to a hopefully more reliable network and will post some life updates in the next couple of weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2011/11/24/im-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>ARTcadia</title>
		<link>http://blog.benbergman.ca/2011/10/06/artcadia/</link>
		<comments>http://blog.benbergman.ca/2011/10/06/artcadia/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 21:07:01 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[SkullSpace]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hackerspace]]></category>
		<category><![CDATA[NES]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[skullspace]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1581</guid>
		<description><![CDATA[This past Saturday was Nuit Blanche here in Winnipeg. Some 30,000 people went around the city checking out various exhibits of art and culture. One of the exhibits at the art gallery was ARTcadia. A bunch of displays setup with indie games and hacks. I had the NES-chuck out again and it saw a lot [...]]]></description>
				<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 570px"><a href="http://www.leifnorman.net/nuit-blanche-at-the-wag-oct-1-2011/"><img class=" " src="http://www.leifnorman.net/wp-content/uploads/2011/10/MG_3296.jpg" alt="" width="560" height="445" /></a><p class="wp-caption-text">Photo &quot;borrowed&quot; from Leif Norman (click image for source)</p></div>
<p>This past Saturday was Nuit Blanche here in Winnipeg. Some <a href="http://www.cbc.ca/manitoba/scene/other/2011/10/03/nuit-blanche-draws-crowd-of-30000-in-winnipeg/#igImgId_19180">30,000 people</a> went around the city checking out various exhibits of art and culture. One of the exhibits at the art gallery was ARTcadia. A bunch of displays setup with indie games and hacks. I had the NES-chuck out again and it saw a lot of use. Click <a href="http://www.leifnorman.net/nuit-blanche-at-the-wag-oct-1-2011/">here</a> for some more pictures from the WAG.</p>
<p>While similar to Re:Play, the core difference for this event was that the games were setup as displays rather than booths. Because of this, there wasn&#8217;t someone around to provide instructions on how to start the game (ie. how to access the start and select buttons). We had a sign up with some instructions, but few people showed any interest in reading the signs. I may have to re-evaluate how this thing works for any future public displays.</p>
<p>CBC was running a contest called &#8220;Culture Vulture&#8221; where you have to go to cultural events and text in the posted word for an entry. SkullSpace must be getting some attention because the keyword posted at the WAG was &#8220;hacker&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2011/10/06/artcadia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>SkullSpace in the paper</title>
		<link>http://blog.benbergman.ca/2011/09/27/skullspace-in-the-paper/</link>
		<comments>http://blog.benbergman.ca/2011/09/27/skullspace-in-the-paper/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 14:49:02 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[SkullSpace]]></category>
		<category><![CDATA[hackerspace]]></category>
		<category><![CDATA[skullspace]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1577</guid>
		<description><![CDATA[The Winnipeg Free Press ran an article today about SkullSpace. You can check it out here.]]></description>
				<content:encoded><![CDATA[<p><center><img title="SkullSpace bench" src="http://media.winnipegfreepress.com/images/3470506.jpg" alt="" width="277" height="213" />   <img title="Some SkullSpace Members" src="http://media.winnipegfreepress.com/images/3470716.jpg" alt="" width="277" height="210" /><br />
The Winnipeg Free Press ran an article today about SkullSpace. You can check it out <a href="http://www.winnipegfreepress.com/arts-and-life/life/if-you---build-it-130616133.html">here</a>.</center></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2011/09/27/skullspace-in-the-paper/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>If machines could talk</title>
		<link>http://blog.benbergman.ca/2011/08/26/if-machines-could-talk/</link>
		<comments>http://blog.benbergman.ca/2011/08/26/if-machines-could-talk/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 01:02:26 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Things from the Intertubes]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1572</guid>
		<description><![CDATA[In addition to this fun comic, I have added some pictures to my previous post about the NES-chuck which I had originally forgotten to upload. Scroll down to the bottom of the post to see what makes the NES-chuck tick.]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://wondermark.com/749/"><img class="aligncenter" src="http://wondermark.com/c/2011-08-18-749speech.gif" alt="close enough" width="576" height="222" /></a></p>
<p>In addition to this fun comic, I have added some pictures to my <a href="http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/">previous post about the NES-chuck</a> which I had originally forgotten to upload. Scroll down to the bottom of the post to see what makes the NES-chuck tick.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2011/08/26/if-machines-could-talk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>NES-chuck Demo</title>
		<link>http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/</link>
		<comments>http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 03:32:10 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[SkullSpace]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[NES]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1544</guid>
		<description><![CDATA[NES-chuck Demo from Benjamin Bergman on Vimeo. I finally got around to making a quick demonstration of my NES-chuck. Code for the NES-chuck can be found here. The future event I mention is ArtCadia, which is part of Nuit Blanche. I&#8217;m not yet sure if I (or the NES-chuck) can attend, but I will keep [...]]]></description>
				<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/27838244?color=D34D04" frameborder="0" width="500" height="281"></iframe></p>
<p><a href="http://vimeo.com/27838244">NES-chuck Demo</a> from <a href="http://vimeo.com/benbergman">Benjamin Bergman</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>I finally got around to making a quick demonstration of my NES-chuck. Code for the NES-chuck can be found <a href="https://github.com/skullspace/neschuck">here</a>. The future event I mention is <a href="http://www.culturedays.ca/en/2011-activities/view/4e271761-02ac-49c7-b96d-2ba04c4a89be">ArtCadia</a>, which is part of Nuit Blanche. I&#8217;m not yet sure if I (or the NES-chuck) can attend, but I will keep this updated.</p>
<p>After the break, there is a rough draft of my script for the video.</p>
<p><span id="more-1544"></span></p>
<blockquote><p>Hi everyone!</p>
<p>I&#8217;m here to demonstrate this project that I made recently that I call the NES-chuck. As you can see here, I have a Wii nunchuck, but the cable has been replaced with one from the original NES controller so that it can be directly connected to the Nintendo. So with this, I am now able to play classic Nintendo games with the Wii nunchuck.</p>
<p>I came up with this idea a few months ago while chatting with some fellow hackers from my local hackerspace. We were thinking of project ideas and thought it would be great to play classic video games with a modern controller. The Wii nunchuck to NES conversion seemed good to me as it would be useful for one-handed gamers, people who want to eat a snack while gaming, or people wanting to play cooperative games by themselves. I then took it upon myself to make the NES-chuck at our next hackathon. We were later asked to help out with an event at the Winnipeg Art Gallery celebrating video game culture. The NES-chuck was setup for all the visitors to use and stood up to the use of hundreds of guests.</p>
<p>So here&#8217;s a quick demonstration of how it works. I can move the joystick to make Mario walk around, I can press the top button to make Mario jump, and I can press the lower button to make him run or, if he has the fire flower powerup, shoot fireballs.</p>
<p>Those of you really familiar with the NES controller will remember that it also has start and select buttons, but I have run out of buttons on the nunchuck. To compensate for this, I have used the accelerometer in the nuncheck to make the NES-chuck into a modal system. If you hold the controller in a normal playing position, the buttons function as A and B. However, if you hold the controller so that it is pointing upwards, the buttons will then act as Start and Select.</p>
<p>In order to get all of this functionality, I have crammed an ATMEGA 328 microcontroller running the Arduino bootloader into the nunchuck. The ATMEGA then talks over I2C with the nunchuck to get all the state information about the nunchuck (the joystick, the buttons, and the accelerometer) and then uses that information as it emulates the shift register inside the original NES controller.</p>
<p>In the future, there are a few changes that I would like to make to the NES-chuck. Besides getting a better NES that doesn&#8217;t constantly hang, I am considering taking the analog values from the joystick and using it to pulse width modulate the NES arrow buttons. That would let the user make Mario run at varying speeds, much like he does in the modern games. This rapid button pressing might get annoying for menu navigation, so when in start/select mode, the joystick will act as it currently does.</p>
<p>A second change I would like to make is to get rid of the Arduino bootloader. Since the NES-chuck is powered from the NES itself, the Arduino starts booting when the NES first turns on. Since the Arduino bootloader is slower to boot than the NES, things get a bit screwy, so I usually have to press the reset button on the NES so that it can get a fresh start with the NES-chuck already loaded up.</p>
<p>Lastly, I am currently experiencing a bug where the Start button gets pressed seemingly at random. It seems to happen most often when I am pressing up and left on the joystick and while jumping. The shift sequence of the NES controller has UP and START directly next to each other, so I think it is just a timing problem, but I haven&#8217;t been able to squash the bug yet. I did, however, manage to decrease the bug&#8217;s frequency by lowering the sensitivity to the UP button. Another possible solution would be to use an actual shift register to more precisely emulate the NES controller. The downside to this is that there is a limited amount of space in the nunchuck to begin with and so it might be tough to cram it all in there.</p>
<p>If you would like to get more information about the NES-chuck or you have some suggestions for the next version, feel free to leave a comment here or contact me through my website. You can also check out the code from our hackerspace&#8217;s GitHub account. I&#8217;ll post a link in this video&#8217;s description. The code is pretty simple, but a little messy as it was written in an afternoon. Feel free to use it however you would like. Also, if you would like to see the NES-chuck in action, it is looking pretty likely that there will be another video game art exhibit in Winnipeg sometime this fall, so keep your eyes and ears peeled for that.</p>
<p>I hope you liked the NES-chuck and enjoyed this video. Stay tuned to my channel and my blog to see my future projects.</p></blockquote>
<p>Update &#8211; 2011/08/26: I originally forgot to upload the pictures of the guts of this thing. Here they are!</p>

<a href='http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/dsc00376-1/' title='DSC00376-1'><img data-attachment-id="1557" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-1.jpg" data-orig-size="504,284" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="DSC00376-1" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-1.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-1.jpg" width="250" height="140" src="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-1.jpg" class="attachment-thumbnail" alt="DSC00376-1" /></a>
<a href='http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/dsc00376-2/' title='DSC00376-2'><img data-attachment-id="1558" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-2.jpg" data-orig-size="504,284" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="DSC00376-2" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-2.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-2.jpg" width="250" height="140" src="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-2.jpg" class="attachment-thumbnail" alt="DSC00376-2" /></a>
<a href='http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/dsc00376-3/' title='DSC00376-3'><img data-attachment-id="1559" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-3.jpg" data-orig-size="504,284" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="DSC00376-3" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-3.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-3.jpg" width="250" height="140" src="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-3.jpg" class="attachment-thumbnail" alt="DSC00376-3" /></a>
<a href='http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/dsc00376-4/' title='DSC00376-4'><img data-attachment-id="1560" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-4.jpg" data-orig-size="504,284" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="DSC00376-4" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-4.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-4.jpg" width="250" height="140" src="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-4.jpg" class="attachment-thumbnail" alt="DSC00376-4" /></a>
<a href='http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/dsc00376-6/' title='DSC00376-6'><img data-attachment-id="1562" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-6.jpg" data-orig-size="504,378" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="DSC00376-6" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-6.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-6.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-6.jpg" class="attachment-thumbnail" alt="DSC00376-6" /></a>
<a href='http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/dsc00376-11/' title='DSC00376-11'><img data-attachment-id="1567" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-11.jpg" data-orig-size="504,378" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="DSC00376-11" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-11.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-11.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-11.jpg" class="attachment-thumbnail" alt="DSC00376-11" /></a>
<a href='http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/dsc00376-12/' title='DSC00376-12'><img data-attachment-id="1568" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-12.jpg" data-orig-size="504,378" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="DSC00376-12" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-12.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-12.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-12.jpg" class="attachment-thumbnail" alt="DSC00376-12" /></a>
<a href='http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/dsc00376-13/' title='DSC00376-13'><img data-attachment-id="1569" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-13.jpg" data-orig-size="504,378" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="DSC00376-13" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-13.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-13.jpg" width="250" height="187" src="http://blog.benbergman.ca/wp-content/uploads/2011/08/DSC00376-13.jpg" class="attachment-thumbnail" alt="DSC00376-13" /></a>

]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2011/08/17/nes-chuck-demo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Married</title>
		<link>http://blog.benbergman.ca/2011/08/04/married/</link>
		<comments>http://blog.benbergman.ca/2011/08/04/married/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 04:03:40 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1520</guid>
		<description><![CDATA[Photo credit: Sean]]></description>
				<content:encoded><![CDATA[
<a href='http://blog.benbergman.ca/2011/08/04/married/img_2261-mod/' title='img_2261-mod'><img data-attachment-id="1521" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2261-mod.jpg" data-orig-size="1600,1600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="img_2261-mod" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2261-mod.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2261-mod.jpg" width="250" height="250" src="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2261-mod.jpg" class="attachment-thumbnail" alt="img_2261-mod" /></a>
<a href='http://blog.benbergman.ca/2011/08/04/married/img_2263-mod/' title='img_2263-mod'><img data-attachment-id="1522" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2263-mod.jpg" data-orig-size="1600,1600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="img_2263-mod" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2263-mod.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2263-mod.jpg" width="250" height="250" src="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2263-mod.jpg" class="attachment-thumbnail" alt="img_2263-mod" /></a>
<a href='http://blog.benbergman.ca/2011/08/04/married/img_2268-mod/' title='img_2268-mod'><img data-attachment-id="1524" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2268-mod.jpg" data-orig-size="1600,1600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="img_2268-mod" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2268-mod.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2268-mod.jpg" width="250" height="250" src="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2268-mod.jpg" class="attachment-thumbnail" alt="img_2268-mod" /></a>
<a href='http://blog.benbergman.ca/2011/08/04/married/img_2271-mod/' title='img_2271-mod'><img data-attachment-id="1525" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2271-mod.jpg" data-orig-size="1600,1600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="img_2271-mod" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2271-mod.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2271-mod.jpg" width="250" height="250" src="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2271-mod.jpg" class="attachment-thumbnail" alt="img_2271-mod" /></a>
<a href='http://blog.benbergman.ca/2011/08/04/married/img_2267-mod/' title='img_2267-mod'><img data-attachment-id="1523" data-orig-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2267-mod.jpg" data-orig-size="1600,1066" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}" data-image-title="img_2267-mod" data-image-description="" data-medium-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2267-mod.jpg" data-large-file="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2267-mod.jpg" width="250" height="166" src="http://blog.benbergman.ca/wp-content/uploads/2011/07/img_2267-mod.jpg" class="attachment-thumbnail" alt="img_2267-mod" /></a>

<p style="text-align: left;">Photo credit: <a href="http://www.seancarney.ca/gallery/2011/07/25/ben-amaras-wedding">Sean</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2011/08/04/married/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Monday&#8217;s Dinner: Fast Food Lasagna</title>
		<link>http://blog.benbergman.ca/2011/07/14/mondays-dinner-fast-food-lasagna/</link>
		<comments>http://blog.benbergman.ca/2011/07/14/mondays-dinner-fast-food-lasagna/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 03:43:18 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.benbergman.ca/?p=1514</guid>
		<description><![CDATA[This past Monday I got together with some friends to make a fast food lasagna. Nothing like sharing some questionable food with good friends.]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;">This past Monday I got together with some friends to make a <a href="http://www.seancarney.ca/blog/2011/07/13/epic-mealtime-fast-food-lasagna">fast food lasagna</a>. Nothing like sharing some questionable food with good friends.</p>
<p style="text-align: center;"><a href="http://blog.benbergman.ca/wp-content/uploads/2011/07/fast-food-lasagna-out-of-the-oven.jpg"><img class="aligncenter size-full wp-image-1515" title="fast-food-lasagna-out-of-the-oven" src="http://blog.benbergman.ca/wp-content/uploads/2011/07/fast-food-lasagna-out-of-the-oven.jpg" alt="" width="576" height="384" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.benbergman.ca/2011/07/14/mondays-dinner-fast-food-lasagna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using n/a

 Served from: blog.benbergman.ca @ 2013-05-25 22:36:16 by W3 Total Cache -->