tag:blogger.com,1999:blog-60755755582834202492024-03-13T07:50:46.113-07:00DexterityDexterity: Skill in performing tasks, esp. with the hands.
The 4 things this blog will be about all involve skilled hands:
- Guitar
- Crafting Software
- Racing Cars
- Cue SportsAnonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-6075575558283420249.post-54935997792405586222016-12-29T03:19:00.000-08:002016-12-29T03:19:24.878-08:00RB30 TPS to Mazda Mx5 B6 Throttle Body Adapter<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-FqgowQ_Y-jE/WGTtCkZ3o2I/AAAAAAAAMMs/kveVhL_vaHEd0ATrQuunII3idwq-IAG-ACLcB/s1600/20131123_151010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://3.bp.blogspot.com/-FqgowQ_Y-jE/WGTtCkZ3o2I/AAAAAAAAMMs/kveVhL_vaHEd0ATrQuunII3idwq-IAG-ACLcB/s400/20131123_151010.jpg" width="300" /></a></div>
<br />
Recently there has been some interest in fitting a variable TPS to the 1.6L Mx5. Like me a lot of people aren't too keen on cutting the TPS shaft and taping the extra holes on the throttle body. For those people I give you a link to the Google Sketchup files I used all those years ago when I made mine.<br />
<br />
Notes:<br />
<br />
<ul>
<li>You will still need a tap for the inner holes (reuse the stock bolts).</li>
<li>Slight modification might be needed to get it to fit (see picture below).</li>
</ul>
<br />
<a href="https://drive.google.com/open?id=0B0r-CXA5bMWMSDBHdHdZa3JGQXM">https://drive.google.com/open?id=0B0r-CXA5bMWMSDBHdHdZa3JGQXM</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-cijBZeZOC74/WGTs-XQJOoI/AAAAAAAAMMo/qZBFa0TAeSQuv1MTlfRr3ju7ijheidWiACLcB/s1600/20131123_134047.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://1.bp.blogspot.com/-cijBZeZOC74/WGTs-XQJOoI/AAAAAAAAMMo/qZBFa0TAeSQuv1MTlfRr3ju7ijheidWiACLcB/s400/20131123_134047.jpg" width="400" /></a></div>
<br />
<br />Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com0tag:blogger.com,1999:blog-6075575558283420249.post-1598955496403516692015-10-17T22:17:00.002-07:002015-10-17T22:17:54.607-07:00How to read Diagnostic Codes on an Australian Delivered 98' Toyota Camry<h2>
The Story</h2>
Recently I've been having some trouble with my newest car. When cold it would have trouble idling and warming up. While driving there would be hiccups every now and then, jerking the car around. The worst though was cutting out at lights and not starting straight away.<br />
<br />
While these problems are bad, it wasn't a major problem because the engine light would come on during these times which means the car knows what's up! Easy I thought, I'll just do a quick google search to figure out how to read the cars diagnostic codes and then I'll know exactly what to replace. Poor foolish me.<br />
<br />
The car in question is a Australian delivered 1998 Toyota Camry Wagon, the base model, 5-speed manual and the 4 cylinder 5SFE engine. Had I lived in America the car would have had an OBDII port which with the proper bluetooth tool off ebay would have told me everything about the car. Mine doesn't have one because Toyota Australia decided to neuter our cars in the hope people would go to the dealer if there was a problem. Some quick googling pointed towards a diagnostic connector under the hood telling me to connect pins TE1 or TE2 to E1 and then the car would reveal it's secrets. There was a problem though.<br />
<br />
When I looked in the diagnostic connector there were no terminals in the spots marked TE1 and TE2. Grrr...! Thankfully though paying attention to a random page on the internet and running an experiment has showed me how to read codes on the Australia models.<br />
<h2>
How to read the Diagnostic Codes</h2>
<div>
<ul>
<li>Under the hood, near the firewall and on the passenger side (Right Hand Drive cars in Australia ;) ) there is a black plug marked Diagnostic.</li>
<li>Open this and locate the TC and E1 terminals.</li>
<li>With the car off. Use a plain paper clip or similar to bridge these terminals.</li>
<li>Now sit in the drivers seat, close the door, turn the lights off (interior and exterior), fans off, etc...</li>
<li>Now under the tacho is the check engine light. This will flash in a sequence so get ready.</li>
<li>Turn the car to ignition, and count the flashes of the check engine light. If it just continually flashes with no pauses then your car is fine (but I doubt it is otherwise you wouldn't be here!).</li>
<li>Write down all the flashes.</li>
<li>Now go here: http://www.troublecodes.net/toyota/ to figure out how to interpret them and what the codes mean (mine ended up being 22 which was a coolant temperature sensor).</li>
</ul>
<h2>
Clearing Diagnostic Codes</h2>
</div>
<div>
When googling I couldn't get a clear answer on how to do this and the first few things that were suggested didn't work, but I did find the way. Once you believe you have fixed the problem, you should clear the codes by:</div>
<div>
<ul>
<li>Under the hood, on the far passenger side up against the wheel arch is a long fuse box.</li>
<li>In this fuse box locate the 15A EFI fuse.</li>
<li>With the car off, pull this fuse out for a minimum of 30 seconds (I did 60 seconds just to be sure).</li>
<li>Put the fuse back in and check the codes again (you should see a continually flashing light about 2 per second).</li>
<li>If there is still a readable code, try clearing again and leaving the fuse out longer.</li>
</ul>
</div>
Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com2tag:blogger.com,1999:blog-6075575558283420249.post-62210224362909809712014-02-08T19:33:00.001-08:002014-02-08T20:00:25.911-08:00Literal USB Stick<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-TClVvb83vTQ/UvbxWGR0qCI/AAAAAAAAFc0/AVO3K-ZSUwU/s800/20140209_133654.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-TClVvb83vTQ/UvbxWGR0qCI/AAAAAAAAFc0/AVO3K-ZSUwU/s800/20140209_133654.jpg" height="216" width="320" /></a></div><br />
Just a quick hack/mod this weekend. I got a promotional USB Drive during the week and wanted to do something interesting with it. I was looking for something to hide it in something interesting like a toy car or some Lego, but I'd seen that done many times. Then I thought, hang on, people call these USB sticks, why don't I create a Literal USB Stick! This has been done before (<a href="http://www.oooms.nl/wooden-usb-stick/" target="_blank">link</a>) but I already had the drive and I have plenty of sticks in my backyard, plus buying things is no as much fun! Here's how I did it.<br />
<ol><li>Select your USB Drive.</li>
<li>Select a stick that is thick enough to fit your USB Drive in.</li>
<li>Cut the stick to the desired length.</li>
<li>Sit your USB Drive on the end of the stick and trace around it.</li>
<li>Plan and mark where to drill your holes to maximise the wood removal and minimise clean up later. I drilled three 5.5mm holes (see below).</li>
<li>Figure out how deep you need to go and drill the holes.<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-O9Mn76aKI4k/UvbxWF2AweI/AAAAAAAAFcI/hfsrlio2SbQ/s800/20140209_132804.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-O9Mn76aKI4k/UvbxWF2AweI/AAAAAAAAFcI/hfsrlio2SbQ/s800/20140209_132804.jpg" height="240" width="320" /></a></div></li>
<li>Cleanup the hole until your USB Drive fits in snuggly.<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-K7nbOO-UVFw/UvbxWAe56tI/AAAAAAAAFcI/z7hrQUKyCnQ/s800/20140209_133537.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-K7nbOO-UVFw/UvbxWAe56tI/AAAAAAAAFcI/z7hrQUKyCnQ/s800/20140209_133537.jpg" height="240" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-xyMCAbLOAqk/UvbxWIyvTLI/AAAAAAAAFcI/tE6RDSGbLyE/s800/20140209_133540.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-xyMCAbLOAqk/UvbxWIyvTLI/AAAAAAAAFcI/tE6RDSGbLyE/s800/20140209_133540.jpg" height="240" width="320" /></a></div></li>
<li>Optionally silicon in your drive (mine seems tight enough without it for now).</li>
<li>Action Shot!!</li>
</ol><div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-hszf4u_3rWs/UvbxWPP6hbI/AAAAAAAAFcI/MnL9GWlCWMA/s800/20140209_134618.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-hszf4u_3rWs/UvbxWPP6hbI/AAAAAAAAFcI/MnL9GWlCWMA/s800/20140209_134618.jpg" height="240" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">A link to my Google+ Gallery is below.</div><div class="separator" style="clear: both; text-align: center;"><embed type="application/x-shockwave-flash" src="https://static.googleusercontent.com/external_content/picasaweb.googleusercontent.com/slideshow.swf" width="288" height="192" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_US&feat=flashalbum&RGB=0x000000&feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F116833011412061185382%2Falbumid%2F5978230911990174657%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed><br />
</div>Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com8tag:blogger.com,1999:blog-6075575558283420249.post-75613929695864440302014-01-18T17:44:00.000-08:002014-01-19T00:49:11.908-08:00Raspberry Pi CD-ROM CaseSo, I like building electronics into recycled cases and the Raspberry Pi is a good platform for doing this as it is small but has high utility. I have previously built one into a old VHS case to be used as a media centre (<a href="https://plus.google.com/u/0/photos/116833011412061185382/albums/5887797089722180769">Gallery here</a>), but this time I wanted something different.<br />
<br />
I have been using a Pi as a headless downloader for a while now that just stores downloads on a USB drive. In future though it'll be writing to network storage so the server will need to be on at the same time as the Pi. Given the Pi is headless I don't care where it is as long as I can access it over a network. So I got to thinking how can I ensure the server and the Pi are on at the same time? Well, if I use the power supply from the server then that would work. But how am I going to mount it inside the case and power it. Well, a CD or DVD Drive has a power connector on it and all the mounting hardware so why not use that! I quick chat with the IT at work turned up an old 52x CD-ROM drive that nobody will ever use again and the project got started!<br />
<br />
<b>Step 1 - Pulling it apart</b><br />
I got lucky with this drive as this was really easy. 4 screws undid the base plate which revealed a PCB. I disconnected the drive mechanism from this and removed the PCB. All I was left with was the mechanism which just unclipped from it's rubber mounts. What I decided to keep was the PCB and the case and toss the mechanism. The PCB is held in by the screws and has the power connector on it so it'll work nicely as a place to mount the Pi. Unfortunately I don't have photos of the dismantling.<br />
<br />
<b>Step 2 - Making way for the Pi</b><br />
I had to think about what connections I wanted access to on the Pi and where to place them on the drive. In the end I decided that ethernet was key and it should be out the back of the drive so the front still looks stock. This has the added advantage of letting me use the USB ports until I get the server running. It also means the front of the drive is free for extra goodies that could be accessed through the drive door.<br />
<br />
I hacked away any chips that were in the way and removed the IDE connector from the back of the drive making sure I didn't damage the power connector.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-Nkhcd7iiE_Y/UtsdqrV7CVI/AAAAAAAAFNc/-Ik4QoHAvRU/s800/20140115_211122.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-Nkhcd7iiE_Y/UtsdqrV7CVI/AAAAAAAAFNc/-Ik4QoHAvRU/s800/20140115_211122.jpg" height="400" width="300" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<b>Step 3 - Mounting and Power</b></div>
<div class="separator" style="clear: both; text-align: left;">
I reused the base of the clear case I already had, just drilled some holes and bolted it to the PCB. Then I carefully cut the power connector from the PCB and soldered wires to the 5V lines and spliced it into a micro usb connector so I could power the Pi.</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-SCuwLzsisgs/UtsdqsDuexI/AAAAAAAAFNc/LRyI2qJ0nLs/s800/20140117_192742.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-SCuwLzsisgs/UtsdqsDuexI/AAAAAAAAFNc/LRyI2qJ0nLs/s800/20140117_192742.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I then hacked a 5V power adapter to power the drive. This is only until I get the server running.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-7gTvJngIPmE/UtsdqkDV-CI/AAAAAAAAFNc/UIMoDGpA8C0/s800/20140116_211136.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-7gTvJngIPmE/UtsdqkDV-CI/AAAAAAAAFNc/UIMoDGpA8C0/s800/20140116_211136.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Step 4 - Putting the Pi in place and Rear Panel Clearance</b></div>
<div class="separator" style="clear: both; text-align: left;">
Now it was just a matter of putting the Pi in and seeing how much I needed to cut out of the rear panel.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-d8jCgTGtwKA/Utsdquvgu3I/AAAAAAAAFNc/cu1NILkdDn8/s800/20140117_194806.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-d8jCgTGtwKA/Utsdquvgu3I/AAAAAAAAFNc/cu1NILkdDn8/s800/20140117_194806.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Turned out there wasn't too much to remove and the cuts don't look too bad condering I used a hacksaw, a dremel and a file.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-p67JRk404kE/UtsdqpVl0PI/AAAAAAAAFNc/ICD0j95mE7o/s800/20140117_194721.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-p67JRk404kE/UtsdqpVl0PI/AAAAAAAAFNc/ICD0j95mE7o/s800/20140117_194721.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Step 5 - It Works!</b></div>
<div class="separator" style="clear: both; text-align: left;">
From the front it looks like a normal CD-ROM Drive. In the future I'll see if I can't use those buttons and LED for something!</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-gsZP5d1Hr0c/UtsdqtfEnEI/AAAAAAAAFNc/3hQk9PjSnAs/s800/20140117_202232.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-gsZP5d1Hr0c/UtsdqtfEnEI/AAAAAAAAFNc/3hQk9PjSnAs/s800/20140117_202232.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
But the back reveals more.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-VdBgJg1ZBvo/UtsdqvBcw1I/AAAAAAAAFNc/0RXPyx6UOLs/s800/20140117_202245.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-VdBgJg1ZBvo/UtsdqvBcw1I/AAAAAAAAFNc/0RXPyx6UOLs/s800/20140117_202245.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here it is working with a USB stick for now.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-6m5uv3Xq0oY/UtsdqooKLlI/AAAAAAAAFNc/FQL9GXKRJSE/s800/20140117_202643.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-6m5uv3Xq0oY/UtsdqooKLlI/AAAAAAAAFNc/FQL9GXKRJSE/s800/20140117_202643.jpg" height="300" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here is a link to the <a href="https://plus.google.com/u/0/photos/116833011412061185382/albums/5970398343468627633" target="_blank">Photo Gallery</a>.</div>
Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com9tag:blogger.com,1999:blog-6075575558283420249.post-67197660315537590832013-11-22T22:34:00.001-08:002013-11-22T23:35:14.269-08:00The Mx - RB30 Throttle Position Sensor (TPS) ModI shall tell this story via a photo gallery, but first an explanation as to why. I have installed a Megasquirt into my 89' 1.6L Mx5 and by default it ignores the TPS because it is crap. You see the stock TPS is a switched type which tells you 3 states: No throttle, some throttle, Wide Open throttle. This doesn't help the ecu much and definitely doesn't help if data logged. So I needed a new one. A few forum posts said that an RB30 TPS had an extra connector that would work for what I wanted so I ordered one off ebay. When it arrived it is quite a bit smaller than the stock one, but the mounting holes do line up with some other holes on the throttle body. The problem though is the throttle shaft is too long, so I need a spacer. A few hours in Sketchup and a call to a mate later and I had an adapter printed.<br />
<br />
Now to problem two. The variable signal comes out of a separate connector on the TPS and it is different to the plug on the stock loom. I could just buy two new connectors, chop up the loom and connect it that way, but that would mean definitely no going back to the stock ecu unless I modified the stock TPS as well. But then I noticed something. The hard connector on the RB30 TPS was the same as the stock TPS. I just had to internally re-wire it so the variable signal comes out of that connector. And that is where the photo gallery begins!<br />
<br />
<embed type="application/x-shockwave-flash" src="https://static.googleusercontent.com/external_content/picasaweb.googleusercontent.com/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&captions=1&noautoplay=1&hl=en_US&feat=flashalbum&RGB=0x000000&feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F116833011412061185382%2Falbumid%2F5949309642233581457%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com1tag:blogger.com,1999:blog-6075575558283420249.post-41223805632466578542013-11-09T21:27:00.004-08:002013-11-22T22:17:22.857-08:00Continuous Integration Presentation - Part 2Continuing from <a href="http://blog.johndroach.com/2013/11/continuous-integration-presentation.html">Part 1</a>, here is a step by step explaining how to setup Jenkins with MSBuild and Mercurial complete with links!<br />
<br />
<b>Assumptions:</b><br />
<ul>
<li>You are running Windows</li>
<li>You already have some flavour of Visual Studio installed</li>
<li>You already have NUnit Installed (if not click <a href="http://www.nunit.org/index.php?p=download">here</a>)</li>
<li>You already have TortoiseHg installed (if not click <a href="http://tortoisehg.bitbucket.org/">here</a>)</li>
</ul>
<br />
<b>Step 1 - Install Jenkins</b><br />
<ul>
<li><b>Download and Install Tomcat - <a href="http://apache.mirror.uber.com.au/tomcat/tomcat-8/v8.0.0-RC5/bin/apache-tomcat-8.0.0-RC5.exe">Link</a></b></li>
<li><b>Download Jenkins Zip - <a href="http://mirrors.jenkins-ci.org/war/latest/jenkins.war">Link</a>
</b></li>
</ul>
<div>
Copy the Jenkins WAR into the 'webapps folder of your Tomcat install. It should be somewhere like this: <i>'C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps'</i>. Make sure the Tomcat server is running and then navigate to <a href="http://localhost:8080/jenkins/">http://localhost:8080/jenkins/</a>.</div>
<div>
<br /></div>
<div>
<b>Step 2 - Install Plugins</b></div>
<div>
You'll now want to click on 'Manage Jenkins' on the left hand menu, then 'Manage Plugins' from the middle.</div>
<div>
On the 'Available' tab you'll want to click the following:</div>
<div>
<ul>
<li>Green Balls</li>
<li>Jenkins Mercurial Plugin</li>
<li>Jenkins MSBuild Plugin</li>
<li>Jenkins NUnit Plugin</li>
</ul>
<div>
Then down the bottom of the page click 'Install without Restart'.</div>
</div>
<div>
<br /></div>
<div>
<b>Step 3 - Configuring Plugins</b></div>
<div>
Go back to 'Manage Jenkins' and click on 'Configure System' in the middle. The setup for the Mercurial and MSBuild plugins is pretty much the same, just providing a name and path information. For Mercurial you need to specify the directory that houses <i>'hg.exe'</i> in the 'Installation directory' parameter. For MSBuild you need to specify the full path to <i>'msbuild.exe'</i> in the 'Path to MSBuild' parameter.</div>
<div>
<br /></div>
<div>
<b>Step 4 - Creating and populating a Mercurial Repository</b></div>
<div>
Create a folder somewhere on your file system. Right click on the folder, go to 'TortoiseHg' then select 'Create Repository here'. Click Ok in the next dialog (the defaults are fine), and congratulations you have a repository! Now create a Visual Studio Solution in this directory with some code in it to compile and some NUnit tests to run. Now we need to first Add the important files into the Repository and then Commit them. First of all, right click on the folder you first created, goto 'TortoiseHg' and select 'Add Files...'. In the next dialog box select everything except <i>bin</i> and <i>obj</i>, you don't need the generated binaries in source control. Now right click on the original folder again, goto 'TortoiseHg' and select 'Commit'. Put a message in the next dialog and click 'Commit' in the bottom right hand corner.</div>
<div>
<br /></div>
<div>
<b>Step 5 - Creating your first Build (or Job)</b></div>
<div>
From the Jenkins dashboard click 'New Job'. Give it a 'Name', select 'Build a free-style software project', and then click 'OK'. Then setup similar to the pictures below.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-0mwSEEgPa5s/Un8YF8VgtMI/AAAAAAAAEuw/KbgsGibZ2Us/s1600/SourceCodeAndBuildTriggers.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-0mwSEEgPa5s/Un8YF8VgtMI/AAAAAAAAEuw/KbgsGibZ2Us/s1600/SourceCodeAndBuildTriggers.png" height="148" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-PVhJ-u3TGJM/Un8YF-CVlvI/AAAAAAAAEu0/WmqnrHxO2fA/s1600/BuildStepsAndNUnitReporting.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-PVhJ-u3TGJM/Un8YF-CVlvI/AAAAAAAAEu0/WmqnrHxO2fA/s1600/BuildStepsAndNUnitReporting.png" height="191" width="320" /></a></div>
<div>
Now click 'Build Now' to test and hopefully it will go Green!</div>
<div>
<br /></div>
<div>
<b>Troubleshooting</b></div>
<div>
If your build breaks the main source of information will be the 'Console Output' from the build, and contrasting the paths in your configuration with those in the 'Workspace'. The Workspace is the place that Jenkins downloads the repository files to and such all paths in the configuration are relative to that.</div>
<div>
<br /></div>
<div>
I hope this has been helpful, Good Luck!!</div>
Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com2tag:blogger.com,1999:blog-6075575558283420249.post-77421455607809277662013-11-09T19:02:00.000-08:002013-11-22T22:17:45.936-08:00Continuous Integration Presentation - Part 1Last week I gave a presentation at the Coders Group on how to do basic Continuous Integration using Jenkins, MSBuild and Mercurial. The slides are embedded below along with a link.<br />
<br />
<iframe allowfullscreen="true" frameborder="0" height="389" mozallowfullscreen="true" src="https://docs.google.com/presentation/d/1xZTBBBnnMrYZPrqHdbr-UjIt3EUrrMw0TRg_I_z_aiI/embed?start=false&loop=false&delayms=3000" webkitallowfullscreen="true" width="480"></iframe><br />
<br />
<a href="https://docs.google.com/presentation/d/1xZTBBBnnMrYZPrqHdbr-UjIt3EUrrMw0TRg_I_z_aiI/edit?usp=sharing">Presentation</a><br />
<br />
Stay tuned for <a href="http://blog.johndroach.com/2013/11/continuous-integration-presentation_9.html">Part 2</a> which gives a step by step on how to setup the environment and get a build happening on your machine.Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com2tag:blogger.com,1999:blog-6075575558283420249.post-2378063472201471062013-06-05T05:13:00.001-07:002013-06-05T05:23:49.045-07:00Clean Code + Unit Testing PresentationTonight I gave a presentation with my team mate Klee Thomas on Clean Code and Unit Testing. The presentation was received well and we all had a few stories to tell of some not so clean code.<br />
<br />
Below is a link to the presentation slides in my Google Drive and a link to the Github repository with the code used in the Unit Testing part. Feel free to fork the repo and clean up the game of life implementation as I know the code is quite dirty ;)<br />
<br />
<a href="https://docs.google.com/presentation/d/1FA9x1LVFwxIZXA5ixfCTvUB1LT0R5jUSYwr1zjcOjHo/edit?usp=sharing">Presentation</a><br />
<br />
<a href="https://docs.google.com/document/d/1LypnWVKiUx2lOlzcUqCP552pUVe3cjs5nIIAuol0vQI/edit?usp=sharing">Handout</a><br />
<br />
<a href="https://github.com/JohnDRoach/CleanCodePresentation">Repository</a><br />
<br />
<iframe src="https://docs.google.com/presentation/d/1FA9x1LVFwxIZXA5ixfCTvUB1LT0R5jUSYwr1zjcOjHo/embed?start=false&loop=false&delayms=3000" frameborder="0" width="480" height="389" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe><br />
<br />
<iframe src="https://docs.google.com/document/d/1LypnWVKiUx2lOlzcUqCP552pUVe3cjs5nIIAuol0vQI/pub?embedded=true" frameborder="0" width="500" height="640"></iframe>Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com0tag:blogger.com,1999:blog-6075575558283420249.post-42833505735047949542012-12-27T00:44:00.000-08:002012-12-27T00:44:02.456-08:00Pedal BoardI got a little bit of money for Christmas this year and decided to buy a new tuner pedal (I got the <a href="http://www.tcelectronic.com/polytune-mini/">TC Electronics Polytune Mini</a>). I decided to use this opportunity to make a change to my pedal board that I've wanted to do for the past 2 years.<br />
<div>
<br /></div>
<div>
My pedal board is based off this case:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-_NldAil0od0/UNv8YXa52LI/AAAAAAAAAW4/Umrq4-XNrUU/s1600/20121227_181536.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-_NldAil0od0/UNv8YXa52LI/AAAAAAAAAW4/Umrq4-XNrUU/s1600/20121227_181536.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And has a false floor covered in carpet:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-67CyjI4mQVU/UNv8Yd3g6VI/AAAAAAAAAW4/iSOfB6zTnBg/s1600/20121227_180537.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-67CyjI4mQVU/UNv8Yd3g6VI/AAAAAAAAAW4/iSOfB6zTnBg/s1600/20121227_180537.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
But before today the lid was always attached which wasn't too bad but made it a little unwieldy when opened. I've always wanted to remove the lid and attach it with more suitcase clips but never got around to it. Given I've got time off at the moment I though I'd give it a go. I bought 4 clips from Bunnings at $6.50 each and proceeded to drill holes and attach them. This was easy for the part that was attached to the board as I could use long self tappers and they'd be hidden under the false floor. The lid part I had to attach with the included split pins and work out a way of using a g-clamp and some screwdriver bits to get the split pins split enough. The whole thing took 3 hours to complete mainly because of this and because I took my time at the start planning.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This is what the lid looks like now:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-DWg-5Gb5jxQ/UNv8Ydm57fI/AAAAAAAAAW4/4LUu3od1x4I/s1600/20121227_180513.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-DWg-5Gb5jxQ/UNv8Ydm57fI/AAAAAAAAAW4/4LUu3od1x4I/s1600/20121227_180513.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And here is a close up of the clip:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-JFht8nGEeSQ/UNv8YX-iL7I/AAAAAAAAAW4/v7aaCQxyexM/s1600/20121227_180505.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-JFht8nGEeSQ/UNv8YX-iL7I/AAAAAAAAAW4/v7aaCQxyexM/s1600/20121227_180505.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This is what it looks like with pedals:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-kjMKLx_SpAM/UNwHAflq_vI/AAAAAAAAAaY/VbBK7AbyqYc/s1600/20121227_181349.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-kjMKLx_SpAM/UNwHAflq_vI/AAAAAAAAAaY/VbBK7AbyqYc/s1600/20121227_181349.jpg" height="240" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I am quite happy with how it turned out and I finally have the pedal board I've always dreamed about! For more information and more pictures see my gallery below.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /><embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&captions=1&hl=en_US&feat=flashalbum&RGB=0x000000&feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F116833011412061185382%2Falbumid%2F5826528037367375377%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></div>Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com0tag:blogger.com,1999:blog-6075575558283420249.post-6948921033117531022012-03-02T20:32:00.000-08:002012-03-02T20:32:12.897-08:00Hard Code your TestsSo I was thinking about code reuse and testing and what the actual goal is from testing and came to the realisation that if you are testing for a certain value then you should hard code that in your test. Let me give you a small example.<br />
<br />
Say you have a timed dialog, ConnectionError and the timeout on this dialog is 5 seconds. So you write a test that ensures this dialog times out in 5 seconds and all is good. Now say during the course of work other dialogs are created and you decide that they are all of the type 'InformationDialog' and shall all have a timeout of 5 seconds. Your test still passes and all is good. Now at this point it might be tempting to go in and refactor the ConnectionError tests so that it doesn't test for a timeout of 5 seconds, but for a timeout of InformationDialog.Timeout. This would seem logical as the ConnectionError is an InformationDialog. I suggest not doing that, and here is why. If you now go and change the InformationDialog.Timeout to 7.56 seconds the test will still pass. But...<br />
<br />
By the test passing you have missed that you have potentially changed a business requirement. By the test passing you have missed the fact that your change in one area has affected something potentially unrelated. I thought tests were there to help show when you change something and it has an unintentional side effect. By the test passing you miss the conversation 'Is it important for the ConnectionError dialog to have a timeout of 5 seconds? It also brings about another interesting point, tests should not be resilient to change. In this case a good factoring has meant that even though you changed something the tests still pass, which is not something you want. You do not want tests to be resilient to change, in fact you want them to break as soon as possible to alert you to the fact that something has changed. Now I know you might be thinking that by hard coding tests and making them not easy to change will result in more time maintaining them, and you are potentially correct. But I would argue that anything that is testing a business requirement should be, so that you 'think' about what you are doing before you act. Couple that with making classes simple, and with less dependencies and the overhead will be minimal.Anonymoushttp://www.blogger.com/profile/10926516240033847478noreply@blogger.com0