<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bbum&#039;s weblog-o-mat &#187; Technology</title>
	<atom:link href="http://www.friday.com/bbum/category/science/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.friday.com/bbum</link>
	<description>...so google can index my head.</description>
	<lastBuildDate>Sat, 04 Feb 2012 06:32:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>3D Printing: Ultimaker Build Notes</title>
		<link>http://www.friday.com/bbum/2012/02/03/3d-printing-ultimaker-build-notes/</link>
		<comments>http://www.friday.com/bbum/2012/02/03/3d-printing-ultimaker-build-notes/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 08:04:58 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[3D Printer]]></category>
		<category><![CDATA[Make]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2074</guid>
		<description><![CDATA[Some build notes from my Ultimaker build experience….. Overall, it took me roughly 4 days to build the Ultimaker. The first two days were a couple of long stretches and the last two were much shorter. Tuning the device to yield usable prints has taken a bit more time, too, and I still have a [...]]]></description>
			<content:encoded><![CDATA[<div class="imgLeft"><img src="http://www.friday.com/bbum/wp-content/uploads/2012/02/It-went-OK.jpg.jpg" alt="Photo" title=""It went OK".jpg.JPG" border="0" width="225" height="300" style="float:left;" /></div>
<p>Some build notes from my Ultimaker build experience…..</p>
<p>Overall, it took me roughly 4 days to build the Ultimaker.  The first two days were a couple of long stretches and the last two were much shorter.   Tuning the device to yield usable prints has taken a bit more time, too, and I still have a long ways to go.</p>
<p>At left is a print made using the default firmware with relatively default settings in ReplicatorG.   Stringy as heck, but otherwise quite good!   Software and hardware tuning are reserved for another article.</p>
<p>This is some random build notes from the build and roughly correspond in order to the assembly instructions themselves.</p>
<p>By and large, assembly was relatively straightforward.  The only real disaster I had was with the cooling fan used on the extruder.  When I tried to mount it, it shattered &#8212; literally disintegrated into dozens of pieces &#8212; in my hand.</p>
<p>The Ultimaker arrives in a surprisingly small, heavy, box.  No surprise;  wood is heavy and the Ultimaker is largely a wooden box with some very crafty electronics built into it. Frankly, the laser-cut wood based construction is, in and of itself, a bit of a hobbyist kit revolution.   Wood is cheap and very strong, yielding kits that can be quite precise, extremely durable, and still remain accessibly affordable.</p>
<p>Random notes below the fold…<br />
<br clear="left"/><span id="more-2074"></span>The Ultimaker assembly guide <a href="http://wiki.ultimaker.com/Mechanics_build_guide">starts here.</a>  It is mostly excellent &#8212; really, really, well done, in fact &#8212; but there are a couple of rough spots.   Having written such step by step guides myself (though about 2 orders of magnitude fewer steps!), I found it amusing &#8212; though very occasionally frustrating &#8212; that the details sorta become more and more vague as you move through a section.    Overall, really, this is a very <em>very</em> well done kit!</p>
<h3>Tools</h3>
<p>The Ultimaker ships with just about all the tools you&#8217;ll need.  However, the supplied 2mm hex driver was wimpy and I had stripped mine at about the 70% assembled point.  It is possible to &#8220;repair&#8221; by <em>carefully</em> sawing off the tip to expose some un-worn tip.  However, a far better solution is to go down to your local metric-carrying hardware store and purchase a handful of 2mm drivers/tips.</p>
<p>You&#8217;ll definitely want a pair of thin needle nose pliers on hand.  There are a couple of steps that require sticking a nut on a bolt in very out-of-the-way places, sometimes behind other stuff.</p>
<p>Included with the kit is some ~3/4&#8243; wide blue Scotch 2090 tape that is used both during assembly and to cover the bed for purposes of printing.  For the bed, grab some <a href="http://www.amazon.com/gp/product/B001EJMS4M/ref=as_li_ss_tl?ie=UTF8&#038;tag=billbumgarner-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B001EJMS4M">3&#8243; ScotchBlue 2090 Tape</a><img src="http://www.assoc-amazon.com/e/ir?t=billbumgarner-20&#038;l=as2&#038;o=1&#038;a=B001EJMS4M" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> as it only takes 3 strips to cover the print bed, leaving two seams in the printing area of the bed (the seams cause noticeable lines in the bottom of your prints).</p>
<p><em>Make sure you have a fine flat file or fine grained sandpaper on hand.</em> There are a number of steps that involve inserting wood tab A in wood slot B.  If it is at all tight, sand down the tab a little bit to make it slide in easily.  You don&#8217;t want it to be loose, but you really need to make sure the various wood parts fit together completely!</p>
<h3><a href="http://wiki.ultimaker.com/Ultimaker_rev.3_assembly:_Frame">Assembly Notes: Frame</a></h3>
<p>I assembled a <a href="http://wiki.ultimaker.com/UltimakerAssemblyRev3">Revision 3 Ultimaker</a>.  Notes will go stale with future revisions.</p>
<p>As noted in the instructions, you&#8217;ll really want to sand the burn marks off the one side of all the cut wood bits.</p>
<p>- When installing the limit switches, there is no need to tighten them.  They all have to be calibrate at the end.  The very end after you&#8217;ve aligned the extruder.</p>
<p>- When tightening the switches, there are no nuts.  It is a metal on plastic threads affair and it is easy to strip the threads in the switch.  <em>Do not over tighten!</em></p>
<p>- When putting the frame together, <em>make sure all pieces fit together snugly and uniformly tight.</em>   Don&#8217;t use the screws to pull things together.  This is where you&#8217;ll likely need a bit of sanding/filing to ensure that everything fits without forcing.  This is to ensure that the frame is square.  If it isn&#8217;t, you are in for a world of hurt calibrating the printer later!</p>
<h3><a href="http://wiki.ultimaker.com/Ultimaker_rev.3_assembly:_X_%26_Y_motors">Assembly Notes: X-Y Motors</a></h3>
<p>This was pretty straightforward, if a bit persnickety.   In particular, keeping the three layers of wood, the motor, and the belt all aligned properly when attaching to the frame was quite the challenge.</p>
<p>- For the Y motor, make sure you get the wires behind the motor when you are mounting it!  It is a pain to do so after the fact.  There is slightly more of a gap between the wood bits and the rear wooden wall than the motor and the wall.</p>
<p>- It is easier to tackle one screw first than to try and deal with all four screws at once.  Once you have one screw a turn or so into the motor, it&#8217;ll hang while you move wires about, re-align things, and verify the belts are still in the right spot.</p>
<p>- Don&#8217;t bother tightening down the X or Y motors.  Both will need to be loose when you are assembling the axis and tightened afterwords.</p>
<h3><a href="http://wiki.ultimaker.com/Ultimaker_rev.3_assembly:_X-Y_axes">X-Y axes</a></h3>
<p>This was the step that both had me occasionally questioning my sanity and the first step where the assembly guide was slightly lacking.  The warning at the top indicating that it is a tricky step is no joke.</p>
<p>- Stack up all the parts in assembly order.  No, really, do this now.  The belt claws are each composed of 5 stacked bits of wood that fit <em>tightly</em> around a bit of pipe.  Keeping it all straight is critical.</p>
<p>- Make very sure you understand the orientation of the claws on the rods before sliding anything into place.   It is very easy to get wrong (I did so 3 times on 2 of the 4 axis;  derp).   They aren&#8217;t kidding when they say to go ahead an align the belt in the clamp during assembly instead of doing it later!  It is much <em>much</em> easier during assembly than after the fact.</p>
<p>- Don&#8217;t even think about tightening down any of the various pulleys at this time.   Alignment is a whole different adventure awaiting in the next step and any tightening now will be a waste of time.  You can tighten down the X-Y motors and their corresponding pulleys at this time as the only alignment is to ensure that the belts are nice and tight.</p>
<h3><a href="http://wiki.ultimaker.com/Ultimaker_rev.3_assembly:_Extrusion_head">Assembly Notes: Extrusion Head</a></h3>
<p>This was the step where I met with the Fan Disaster.  It was also the step where the contents of my kit most differed from the instructions.  In particular, I ended up with two bottom plates (8B);  one without any bits attached to it and one wit the push-in fitting already in place.</p>
<p>Overall, the head is really quite an interesting and &#8212; frankly &#8212; awesome bit of design.  With some tricky bits.</p>
<p>- When pushing the tube into the push-in fitting, <em>it won&#8217;t back out</em>.   If you push it in too far, keep going and try again.  You really do need the tube to stick out as much as documented and no more!  Keep in mind that when you add the &#8220;horseshoe&#8221;, you&#8217;ll actually be backing out the tube by a little bit!   Yes, this step is tricky.</p>
<p>- When choosing which hole to shove the wires and extruder into in the aluminum block, pay careful attention to both the photos and also have a look at various <a href="http://www.thingiverse.com/search?q=ultimaker+fan&#038;sa=Search">Ultimaker specific fan shroud designs on Thingiverse</a>.  You <em>will</em> want to replace the fan shroud that came with your Ultimaker as one of your first print jobs.  Or, in my are….</p>
<p>- The head cooler fan that came with my kit was defective.  Or, more specifically, it was made from a bad batch of plastic (irony) that left it incredibly brittle.  When I tried to attach it to the head, it ended up shattering in my hands.    Thus, I ended up with no extruder cooler and turned to Thingiverse to find a 40mm compatible fan shroud that I could use.  I ended up designing a custom one derived from an existing design with a focus on printability even with the lack of a fan.  Full story for another day.</p>
<p>- Sticking the X-Y head slide rods into the machine is really tricky.   Be patient and take it slow.   And, again, don&#8217;t bother tightening anything down too much.   However, you can tighten down the belt clamps and I&#8217;ve found that on my Ultimaker, it really doesn&#8217;t matter how tight they are as they don&#8217;t overly tighten the long axis belts.  In fact, I&#8217;m going to print some belt tensioners as I&#8217;m getting a bit of slop in the x-y axis.</p>
<p>- Aligning the extrusion head is very tedious, but take the time to do it right.  I found that tightening down the pulleys at one end of the long axis belts first, then aligning everything and tightening down the other end was easier.   It is made more tedious in that sometimes you can get everything aligned only to find that the pulley set screws are in an inaccessible position!  Often, this can be remedied by either changing the length of the spacer object used for alignment or by aligning on the other end of the axis.</p>
<h3><a href="http://wiki.ultimaker.com/Ultimaker_rev.3_assembly:_Z-stage">Assembly Notes: The Z Stage</a></h3>
<p>This is definitely the stage that will call for a bit of sandpaper.  There is nothing in these steps that is particularly tricky, but there are several steps within where the result can be a bit awry.   For example, the right Z-stage arm on my ultimaker is slightly out of alignment, leading to the front right corner of my build stage being too low.</p>
<p>There are also a couple of bits in this step where I couldn&#8217;t help but think some design revisions were definitely in order.  Noted inline.</p>
<p>- When putting the arms around the two slide bearings, make sure that the arms are fitting around the bearings tightly.   You&#8217;ll probably want to use a bit of the sand paper to round off the corners in the slots that the bearings fit into.  Just a bit.</p>
<p>- The &#8220;Drive Nut Assembly&#8221; is the one piece that seems almost shoddy on the entire assembly.  The metal ovoid nut just doesn&#8217;t fit in the wood in a way that seems to stay stable.  It likes to move around bit.  In use, it doesn&#8217;t seem to matter, but it was certainly quite concerning during construction!  Later, it becomes apparent why there is play in this part, but I still don&#8217;t think there needs to be <em>this much</em> play!</p>
<p>- When putting it all together, you&#8217;ll notice that the left side doesn&#8217;t screw into the back like the right side does.  This is actually a critical part of making everything fit onto the 3 vertical bars without having to have everything perfectly and exactly aligned (which wooden based assembly makes impossible).   This will be important in a later step.</p>
<p>- When mounting the bed on the wooden frame, go ahead and screw down the spring loaded spacer screws pretty far.   Not so far that the spring is destroyed.   When leveling the bed, it is much easier to raise the bed than adjust the Z axis top stop switch.</p>
<p>- When mounting the Z axis in the machine, it is pretty easy to pull the left side of the bed apart (see the step before last).   Be careful.  The left side won&#8217;t necessarily be totally tight and the play on the nut assembly in the middle means that the 3 vertical axis of motion do not have to be perfectly aligned and everything still works.</p>
<p>- When applying the blue tape, completely ignore the directions that say you should use a razor to make it all nice and neat within the laser cut perimeter.  Hogwash.  You want the tape to cover the entire bed except, maybe, the last 1/2&#8243; or so of the back.  In particular, some of the slicers end up letting the head heat up in the front left or rear left corner.  If not covered in tape, it makes a hard to clean up mess.   Also, you&#8217;ll be replacing the tape every dozen+ prints (or more) and, thus, it is easier to lift off if the tape is overlapping the sides and folded under.</p>
<p>- To clean the blue tape, use a bit of rubbing alcohol.  This nicely removes any finger grease and dust that prevents adhesion of the first layer.</p>
<h3><a href="http://wiki.ultimaker.com/Ultimaker_rev.3_assembly:_Material_feed_mechanism">Assembly Notes: Material Feed Mechanism</a></h3>
<p>There was nothing particularly tricky about this step.  <em>However</em>, make very sure that you have the parts aligned as pictured.  It is easy to turn one of the plastic parts around such that it seems like the screws are <em>just</em> out of alignment.  If you force it, it will likely break (no, I didn&#8217;t force it).</p>
<p>The feed mechanism is interesting and elegant in many respects, but I also suspect it will be the first really major upgrade that I make to my Ultimaker.   I would really like a feed mechanism that both combines more consistent push through with something that detects when a jam has occurred.</p>
<p>One tip;   if you aren&#8217;t sure the filament is feeding, use a sharper and place a small dot on the filament before the feed mechanism.  That makes it easy to see if it is moving along (though you might end up with a couple of very small discolored spots in the final print).  Alternatively, look in the feeder tube as the feeder mechanism cuts texture into one side of the filament and you can see that moving along, if the feed is working.</p>
<h3><a href="http://wiki.ultimaker.com/Ultimaker_rev.3_assembly:_Mounting_the_electronics">Assembly Notes: Mounting the Electronics and Initial Tests</a></h3>
<p>Again, nothing particular tricky in this step.  <em>However,</em> only the Z-axis limit switch connections are actually labeled as to which connector on the board is top and which one is bottom.  I managed to get both the X-Y backwards.  Whoops.</p>
<p>- The Z axis limit switches are easy to configure without power to the unit since the Z axis motor is easy to spin manually.  XY switches are also easier to adjust manually, but they also need to be tested while powered.   When sliding the extrusion head in XY, it is easier to do so by grabbing and sliding the two claws instead of the head itself.  This also puts less torsional stress on the rods and frame.</p>
<p>Once everything is wired up and powered on, with <a href="http://wiki.ultimaker.com/Software_setup_guide">ReplicatorG installed correctly</a> (start with ReplicatorG), then there are some final tests that you will want to run.</p>
<p>After you have configured the limit switches to stop the head/bed appropriately:</p>
<p>- Before powering up the Ultimaker, slide the extrusion head to the middle of the print surface and lower the print bed to about half way.</p>
<p>- In the ReplicatorG control panel, set the XY Feedrate slider to <em>really slow</em>.   Hit the X+ button and then manually actuate the limit switch at the front right of the machine.  The head should immediately stop moving.   If it doesn&#8217;t, try hitting the front left switch.   If <em>that</em> stops the motion, then you have the X axis stop switches mis-wired to the board.  Power everything down and swap the two X limit switch connections on the board.</p>
<p>- Repeat for Y.  Y- is to the front of the machine.</p>
<p>- Fire up the extruder to a temperature of ~220ºC and, once warm, manually shove filament through until it starts squirting out the head (don&#8217;t push too hard and make sure you unlatch the feeder mechanism&#8217;s pressure bolt first).   Also try toggling the cooling fan to make sure it works.</p>
<p>At this point, you are ready for <a href="http://wiki.ultimaker.com/Newcomer_guide_to_your_first_3D_print">your first print</a>.   Calibration and tuning can come later.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2012/02/03/3d-printing-ultimaker-build-notes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>3D Printing: The Software Stack (… is kinda broken &#8230;)</title>
		<link>http://www.friday.com/bbum/2012/01/31/3d-printing-the-software-stack-is-kinda-broken/</link>
		<comments>http://www.friday.com/bbum/2012/01/31/3d-printing-the-software-stack-is-kinda-broken/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 07:49:40 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[3D Printer]]></category>
		<category><![CDATA[Make]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2065</guid>
		<description><![CDATA[Throughout the anticipation of the delivery of the Ultimaker (4 to 6 weeks &#8212; as are pretty much all 3D printers these days!) and the week of assembly (another post), I spent a bunch of time researching software and otherwise attempting to grok the toolchain without a tool to apply the chain to. In short, [...]]]></description>
			<content:encoded><![CDATA[<p>Throughout the anticipation of the delivery of the <a href="http://www.friday.com/bbum/2011/11/13/ultimaker-3d-printer-ordered/">Ultimaker</a> (4 to 6 weeks &#8212; as are pretty much all 3D printers these days!) and the week of assembly (another post), I spent a bunch of time researching software and otherwise attempting to grok the toolchain without a tool to apply the chain to.</p>
<p>In short, 3D printing requires a slew of tools and the tools are… ugh… unrefined, if not downright user abusive.   Not that this comes as a surprise.  Affordable 3D printing is a very new market and it&#8217;ll take a few years for the science to be nailed down enough that an easy UI can be wrapped around it.</p>
<p>And it is moving rapidly.   Thus, if you are reading this anywhere after about 3 to 6 months from now, it is likely that the landscape has changed.</p>
<p>As well, this is a decidedly Mac OS X centric / Ultimaker centric view of the world.   I&#8217;ll  likely update again in a month or so after I&#8217;ve set up the <a href="http://printrbot.com/">Printrbot</a>.</p>
<p>To drive a 3D printer, there are quite a few stages of software that are employed.   In the maker world, there are generally multiple answers to any given stage in the overall chain. If you are working with a commercial printer, it is likely that the stages closest to the printer &#8212; the driver, assuredly, maybe more &#8212; are fixed.<span id="more-2065"></span>The stages generally are (each of which will be covered in more detail in subsequent posts):</p>
<h3>1. Design &#038; Modeling</h3>
<p>Before you can print something, you have to have something to print!</p>
<p>Just like 2D images, there are quite a few ways you can use to create or obtain a 3D model for the purposes of printing.   Regardless of which method or software you use, the end result pretty much must be an STL file which describes the geometry of the object to be printed.   More precisely, an <a href="http://en.wikipedia.org/wiki/STL_(file_format)">STL file is a fairly standard interchange data format that provides a minimal description of a 3D shape</a> (without color, texture, lighting, or other decorations).</p>
<p>As for sources, a great starting point is <a href="http://www.thingiverse.com">Thingiverse</a> which offers a huge library of digital designs aimed at created real, physical, objects.   While there are non-3D-printing oriented designs, the majority of the things on the site are targeted to 3D printing and, thus, offer STL that is generally ready for the next step of processing.  Most of the designs also offer the original editable models that can be modified at will.</p>
<div class="imgLeft"><img src="http://www.friday.com/bbum/wp-content/uploads/2012/01/Trilego.jpg" alt="Trilego" title="Trilego.jpg" border="0" width="200" height="191" style="float:left;" /></div>
<p>If you want to design your own parts, there are a couple of different primary means of doing so.  You can go with a CAD package of some kind which can range in price from free to about a bazillion dollars.   On the free front, <a href="http://sketchup.google.com/">Google&#8217;s SketchUp</a> is very popular but I find it to be maddeningly frustrating to use.  Personally, I&#8217;ve settled on <a href="http://itunes.apple.com/us/app/viacad-2d3d-8/id454345291?mt=12">Punch! Software&#8217;s ViaCAD (Mac App Store)</a> for $99.  ViaCAD provides much better control and feedback over the modeling process and the 2D->3D integration makes modeling of many simple things quite trivially easy!  While I also find ViaCAD frustrating, it at least feels like the frustration is my own doing and, thus far, the primary author of the package has been incredibly supportive in the user forums.</p>
<p><em>I&#8217;m really hoping <a href="http://www.123dapp.com/">Autodesk&#8217;s 123d</a> is released for the Mac.  Autodesk has also announced <a href="http://labs.autodesk.com/technologies/fusion/">Inventor Fusion for the Mac</a>;  it looks to have considerable promise, too!</em></p>
<p>An alternative to CAD is to go with a parametric modeler like <a href="http://www.openscad.org/">OpenSCAD</a>.   In OpenSCAD, you basically describe systems of equations to render your 3D objects.  It solves a completely different problem than a draw-in-3D CAD solution.   For example, <a href="http://www.thingiverse.com/thing:15113">this &#8220;thing&#8221; is a parametric box</a> where you can easily determine the height, width, number of compartments, and wall thickness just by changing a couple of variables.  Even cooler, <a href="http://www.thingiverse.com/thing:13531">this thing provides everything you need to generate and print Lego blocks</a>, including the never-before-seen &#8220;trilego&#8221; (an example I printed is pictured to the left).<br />
<br clear="left"/></p>
<p>In any case, whatever means you choose of generating a model, the end result of this step is generally going to be an STL file; a minimalistic, unadorned, inventory of triangles that roughly (or accurately, depending on export settings) describe the shape.</p>
<h3>2. Pre-press Preparation &#038; Repair</h3>
<div class="imgRight"><img src="http://www.friday.com/bbum/wp-content/uploads/2012/01/ReplicatorG.jpg" alt="ReplicatorG" title="ReplicatorG.jpg" border="0" width="300" height="253" style="float:left;" /></div>
<p>If the output of step (1) is particular good, then this step is pretty much a non-step.</p>
<p>Namely, an STL file <em>might</em> have any number of errors within that are invisible when rendered to the screen, but may cause all kinds of problems in the next few steps.</p>
<p>As well, the object(s) described in the STL file may not be rotated correctly or might not be &#8220;on the bed&#8221;.  That is, the object(s) need to be aligned such that &#8220;up&#8221; is in the direction of printing and the &#8220;bottom&#8221; is on the surface that represents the printer&#8217;s printing surface.</p>
<p>Thus, in this step, you should rotate the object into &#8220;printing orientation&#8221;.  Most software offers some kind of representation of &#8220;printer plane&#8221; and, in the case of <a href="http://replicat.org/">ReplicatorG</a>,  it provides a one step means of centering an object on the print bed and making sure it is actually on the bed.  An example of ReplicatorG manipulating an <a href="http://www.thingiverse.com/thing:8896">Octopus STL</a> can be seen at the right.</p>
<p><a href="http://www.netfabb.com/">Netfabb Engines</a> &#8212; another tool that I&#8217;ve used, but whose bugs are bad enough that I wouldn&#8217;t recommend &#8212; can detect and [maddeningly not due to bugs] repair errors in the geometry of the triangle mesh.  Errors like triangles that are facing the wrong direction.  Holes in the mesh that violate mesh consistency.</p>
<p>There are a number of other solutions out there;  many many solutions, ranging from free to very very expensive.<br />
<br clear="right"/></p>
<h3>3. Slicing &#038; GCode generation</h3>
<p>Once the STL has been cleaned up, the next step is to turn the objects into a stream of commands that can be sent to the 3D printer for the purposes of printing the object.  While this is called <em>slicing</em>, that name is a woeful understatement as to exactly how complex, critical, and potentially time consuming this step can be.</p>
<p>A naive <em>slicer</em> might simply slice the model into a series of planar cross sections and then send the print head on a path of simply filling in each planar slice.   Not only would this yield horrible print quality, but it would waste a ton of material.  For example, given that octopus seen above, there is no reason why the entire head need be composed of solid plastic!   Of course, nor can it be entirely empty as that would make it impossible to close over the top of the head because all that overhang over empty space would simply sag as it is printed!</p>
<p>So, typically, the slicer generates commands to move the print head along the outlines of the piece while also creating minimal fill to save material.   But it can be even more complex than that!   The slicing software may have the notion of head momentum, might have knowledge of the &#8220;stringiness&#8221; of material (the tendency for the material to draw out tiny threads when extrusion stops), and/or might model what happens as the head turns corners (extruded material behaves differently in a straight line vs. turning corners).</p>
<p>Or the slicing software might model many, many, other potential details.   This is one step in the process where, truly, there are <em>entire companies</em> dedicated but doing nothing but generating the most efficient possible tool paths that produce the highest quality output.</p>
<p>And that output is <a href="http://en.wikipedia.org/wiki/G-code">gcode</a>, a very widely used &#8212; standard, even &#8212; programming language for <em>computer numerical control [CNC]</em>.   It is far from limited to 3D printers, controlling just about any CAM/CNC machines these days and having a history that spans back to the 1950s!</p>
<p>For 3D printing, the most popular gcode generator is <a href="http://www.skeinforge.com/">SkeinForge</a>.  It works well and ReplicatorG typically comes with several versions built in.  SkeinForge, however, is <em>not fast</em>.</p>
<p>Netfabb can also generate gcode.  I haven&#8217;t tested the output yet (and intend to do so).</p>
<p>New to the maker/hobbyist market is <a href="http://slic3r.org/">Slic3r</a>.  It is reasonably fast and has a pretty straightforward UI.   As it is pretty new, there aren&#8217;t much in the way of Ultimaker specific profiles available yet, but that is likely to change rapidly.</p>
<p>At the time of this writing, this is an area I&#8217;m actively investigating.   SF+Replicator is woefully out of date, thus it is a matter of installing SF and using it from the command line.   Slic3r looks very promising.   Netfabb needs to be tested further as it has promising gcode generation capabilities, but can&#8217;t talk directly to any printer due to bugs [on the Mac version anyway].</p>
<h3>4. Host Side Printer Driver</h3>
<p>The host side printer driver deserves a mention.   It is really simple in role, but very important.  The job of the printer driver is simple;  spew the gcode at the printer as fast as it can take it, but not faster.     Ideally, the printer driver software should also be able to monitor things like the extruder temperature without screwing up the print, allow the user to interrupt the print, and provide a manual control mode for controlling the printer.</p>
<p>ReplicatorG mostly does this, but if you leave the control panel open during the print, it tends to make the print head pause periodically which causes blobbing.</p>
<p>Netfabb is supposed to be able to control the printer, but it doesn&#8217;t even detect the printer due to bugs in the current Mac OS X version.</p>
<p>Beyond that, there is <a href="https://github.com/kliment/Printrun#readme">Printrun</a>, but it looks pretty tedious to install.</p>
<p>Of all the pieces in the puzzle that is 3D printing, this is the one that I&#8217;m likely the most tempted to roll my own Mac OS X specific solution.   What is available is just <em>really primitive and user abusive.</em></p>
<h3>5. Printer Firmware</h3>
<p>Of all the pieces, this is the one that I fully admit to understanding the least.  Yet, it is critically important (i.e. I need to address my ignorance shortly).</p>
<p>Out of the box, the Ultimaker ships with relatively conservative printing firmware that isn&#8217;t particular fancy or fast, but produces relatively forgivable prints at a reasonable speed.</p>
<p>With the <a href="http://wiki.ultimaker.com/Marlin_firmware_for_the_Ultimaker">Marlin firmware</a>, potentially <a href="http://blog.ultimaker.com/2011/06/23/more-speed/">insane speeds</a> are possible while achieveing an even greater degree of accuracy.</p>
<p>Whereas the gcode generated is more or less limited to &#8220;go to this point at this base speed&#8221;, the firmware apparently controls things like acceleration and deceleration to make it possible to go from A to B at a very high rate of speed while also stopping exactly where expected and changing directions in a predictable fashion.</p>
<hr />
<p>All in all, much to learn.  Next, I&#8217;ll write up the build notes for the Ultimaker, including errata, hints, and the adventure that ensued when my extruder fan shattered and I had to figure out how to attach a different sized fan (hint: it involves designing a cooling solution that could be printed without a cooling fan in place… then printing it again with the rough version to produce a much better version).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2012/01/31/3d-printing-the-software-stack-is-kinda-broken/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>3D Printer #2: Printrbot</title>
		<link>http://www.friday.com/bbum/2012/01/14/3d-printer-2-printrbot/</link>
		<comments>http://www.friday.com/bbum/2012/01/14/3d-printer-2-printrbot/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 22:35:26 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[3D Printer]]></category>
		<category><![CDATA[Make]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2056</guid>
		<description><![CDATA[While I&#8217;m looking to the Ultimaker (see my previous post for thoughts on the Ultimaker) (now received&#8211; time to start assembly!) as my primary go-to, general purpose, home manufacturing device, I was both interested in a second printer as a platform for experimentation and as a secondary printer for when I need to turn out [...]]]></description>
			<content:encoded><![CDATA[<p>While I&#8217;m looking to the <a href="http://blog.ultimaker.com/">Ultimaker</a> (see my previous post for <a href="http://www.friday.com/bbum/2011/11/13/ultimaker-3d-printer-ordered/">thoughts on the Ultimaker</a>) (now received&#8211; time to start assembly!) as my primary go-to, general purpose, home manufacturing device, I was both interested in a second printer as a platform for experimentation and as a secondary printer for when I need to turn out a bunch of stuff.</p>
<p>Because I wasn&#8217;t going to be afraid to modify it, I wanted something pretty cheap.   The <a href="http://reprap.org/wiki/RepRap">RepRap platform</a> seems pretty interesting, but it also seems semi-fragile (and feedback on various sites indicates that it is harder to keep aligned than others, though I don&#8217;t know how true that really is).</p>
<p>Along came the <a href="http://www.kickstarter.com/projects/printrbot/printrbot-your-first-3d-printer">Printrbot Kickstarter</a> project.   I ended up funding that at the $424 level.  I&#8217;ll use the Ultimaker to print all the plastic parts.   The Printrbot is really pretty extraordinary.  It is an elegantly simple design, has decent precision and, through its simplicity, is extremely customizable.  </p>
<p>Also, the <a href="http://printrbot.com/">Printrbot story</a> and the whole <a href="http://www.kickstarter.com/">Kickstarter</a> concept is pretty cool and this seemed like a perfect opportunity to jump in and fund something.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2012/01/14/3d-printer-2-printrbot/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>retainCount is useless.</title>
		<link>http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/</link>
		<comments>http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 00:20:23 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2038</guid>
		<description><![CDATA[The retainCount method just isn&#8217;t very useful as has been indicated in the answers to about a zillion StackOverflow questions. The documentation has this to say: Important: This method is typically of no value in debugging memory management issues. Because any number of framework objects may have retained an object in order to hold references [...]]]></description>
			<content:encoded><![CDATA[<p>The <code>retainCount</code> method just isn&#8217;t very useful as has been indicated in the answers to about a <a href="http://stackoverflow.com/search?tab=newest&#038;q=%22retaincount%22">zillion StackOverflow questions</a>.</p>
<p>The <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html%23//apple_ref/occ/intfm/NSObject/retainCount">documentation has this to say</a>:</p>
<blockquote><p><strong>Important</strong>: This method is typically of no value in debugging memory management issues. Because any number of framework objects may have retained an object in order to hold references to it, while at the same time autorelease pools may be holding any number of deferred releases on an object, it is very unlikely that you can get useful information from this method.</p></blockquote>
<p>Makes it pretty clear that you shouldn&#8217;t be calling <code>retainCount</code>, but it really doesn&#8217;t illuminate exactly how useless the method is outside of a very narrow context.</p>
<p>So, let us count the ways:</p>
<ol>
<li>The absolute retain count of an object may change at any time once an object has been passed through any system API.</li>
<li>Any subclass of any system provided class counts as &#8220;through system API&#8221;;  the retain count may be impacted by implementation details.</li>
<li>The retain count never reflects whether an object is autoreleased.</li>
<li>Autorelease is a per-thread concept whereas retain counts are global; race condition derived hilarity can easily ensue.</li>
<li>The <code>retainCount</code> method can never return 0.</li>
<li>Some classes are implemented as singletons some of the time.</li>
<li>Some classes may internally manipulate their retain count directly (I.e. no swizzle for you!).</li>
<li>While <code>retain/release</code> are effectively thread safe, there is always a race between calling <code>retainCount</code> and having the actual retain count change in some other execution context.</li>
</ol>
<p>Bottom line:  the only time the absolute <code>retainCount</code> can be conclusively used for analytic purposes is if you have the backtrace of every retain and release that contributed to the current retain count&#8217;s value (there is another use case, documented at the end).   If you have <em>that</em>, then you don&#8217;t need the retain count and, fortunately, Instruments is already generally quite adept at producing a per-object inventory of retains and releases for you (see <em><a href="http://developer.apple.com/library/IOs/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/ViewingandAnalyzingData/ViewingandAnalyzingData.html#//apple_ref/doc/uid/TP40004652-CH5-SW23">Analyzing Data with the Allocations Instrument</a></em>&#8220;.</p>
<p>In general, <strong>you should consider the retain count as a delta</strong>.   Your code causes the retain count to <em>increase and decrease</em>.   You don&#8217;t <code>+alloc</code> an object with a retain count of 1.  Instead, you <code>+alloc</code> an object with a retain count of +1.  If you want that object to go away, you need to do something &#8212; <code>release</code>, always and eventually &#8212; that causes the retain count to be decremented by 1.</p>
<p>It really is that simple.  </p>
<p>Almost.</p>
<p>Concurrency &#8212; whether through threading or GCD &#8212; throws a bit of a wrench in the works (as it always does).   Namely, the retain count should really be considered as a per concurrency context delta.  If thread or queue <code>A</code> wants to do something with object <code>X</code>, it should hold a +1 <code>retainCount</code> on <code>X</code> for the duration of said operation.   One subtle detail that will bear repeating later;   an <code>autorelease</code>&#8216;d object <em>does not contribute to thread safety</em>.  That is, if thread or queue <code>A</code> wants to pass <code>X</code> to thread or queue <code>B</code>, there must be an explicit <code>retain</code> in <code>A</code> that is balanced by a release (or synchronization event back to <code>A</code>) in <code>B</code>.</p>
<p>Now, some of the enumerated claims may either seem specious at best or, certainly, not obvious as to exactly how it undermines the validity of the retain count.<span id="more-2038"></span>
<ol>
<li><strong>The absolute retain count of an object may change at any time once an object has been passed through any system API.</strong></li>
<p>The system is free to <code>retain</code> and <code>release</code> any object at whim and, in fact, it will often do so.  An object may be shoved into a collection, it might be cached into a map somewhere by a computed key, or it might be <code>retain</code>&#8216;d long enough to survive enqueueing for execution asynchronously.</p>
<p>As well, the object may be retain&#8217;d then autorelease&#8217;d such that the retainCount will look like it is N when it is really, effectively, N-1.   If that retain/autorelease happened in a queue somewhere, the number returned may imply a greater # of strong references than truly exist.</p>
<li><strong>Any subclass of any system provided class counts as &#8220;through system API&#8221;;  the retain count may be impacted by implementation details.</strong></li>
<p>This is really the same point as the first, but emphasizes that all bets truly are off once you subclass a system class.   As the system&#8217;s use of concurrency during drawing grows over time, you can expect that any UI related subclassed classes will likely have their retain counts manipulated across concurrency boundaries potentially frequently.</p>
<li><strong>The retain count never reflects whether an object is autoreleased.</strong></li>
<p>When you call <code>autorelease</code>, not much really happens.  The object is neither <code>retain</code>&#8216;d nor <code>release</code>&#8216;s.  Instead, it is added to the current per-thread autorelease pool.   The <code>release</code> is effectively delayed until the pool is drained or deferred to the next outermost pool if the pool is popped without draining (which can happen due to bugs or exceptions [exceptions are an indication of bugs in and of themselves in Cocoa]).</p>
<p>Once an object is added to an <code>autorelease</code> pool, there is no way to query whether or not it is in such a state.   Thus, whatever retain count is currently returned may not actually reflect the effective retain found at all.</p>
<li><strong>Autorelease is a per-thread concept whereas retain counts are global; race condition derived hilarity can easily ensue.</strong></li>
<p>But it gets worse (at least, worse for the developer making the mistake of thinking <code>retainCount</code> is meaningful).</p>
<p>The retain count of an object is actually global to all contexts of concurrency.  An object has one and only one retain count.   While calling <code>retain</code> and <code>release</code> are concurrency safe, there is no way to express <em>call <code>retain</code> and don&#8217;t let another execution context increment or decrement it until I&#8217;m done pondering the return value.</em></p>
<li><strong>The <code>retainCount</code> method can never return 0.</strong></li>
<p>When an object&#8217;s retain count transitions from 1 to 0, the object is deallocated (usually).  As a result, if you <code>retainCount</code> on a non-nil reference, it can never return zero because doing so would require calling a method on a deallocated object which is undefined behavior.</p>
<p>Or, to put it more bluntly, this can never work (Yes, I had to go there):</p>
<pre>while([bg retainCount]!=0)
{
  [bg release];
}
</pre>
<p>One might claim that if you message nil, you&#8217;ll get 0 in return.  True;  but <em>no code outside of a short circuit in <a href="http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/">objc_msgSend()</a> is executed.</em>   That is, the method isn&#8217;t returning zero, the messaging mechanism is short circuiting prior to calling the method.</p>
<li><strong>Some classes are implemented as singletons some of the time.</strong></li>
<p>Consider:</p>
<pre>
NSNumber *n = [NSNumber numberWithInt: 4];
printf("%p rc: %u\n", n, [n retainCount]);
n = [NSNumber numberWithInt: 4];
printf("%p rc: %u\n", n, [n retainCount]);
n = [NSNumber numberWithInt: 42];
printf("%p rc: %u\n", n, [n retainCount]);
n = [NSNumber numberWithInt: 42];
printf("%p rc: %u\n", n, [n retainCount]);
</pre>
<p>And the output on i386:</p>
<pre>0x115410 rc: 2
0x115410 rc: 3
0x115950 rc: 1
0x115df0 rc: 1
</pre>
<p>Now consider x86_64:</p>
<pre>0x483 rc: 9223372036854775807
0x483 rc: 9223372036854775807
0x2a83 rc: 9223372036854775807
0x2a83 rc: 9223372036854775807
</pre>
<p>For this particular class, the behavior is different depending on value <em>and</em> depending on architecture.  You could expect potentially even different behavior on an iOS device.   Likewise, if you were to run the 64 bit variant on Snow Leopard, it would be different yet again!</p>
<p>Internally, NSNumber uses singletons for a small subset of values on certain platforms.  On x86_64, it uses tagged pointers (<a href="http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers-in">Bavarious explains tagged pointers quite well in this blog post</a>.  I should update the objc_msgSend() tour to reflect the new messenger in Lion, too) to avoid allocating anything for the object altogether.</p>
<p>In all cases, relying upon the retain count of an NSNumber will create a dependency on system behavior that will quite likely change in the future, breaking your program rather badly.</p>
<p>Many other classes within the frameworks have similar optimizations for the common cases.  Likewise, because of polymorphism and/or duck typing, it is likely that a system API declared to return an instance of, say, <code>NSString</code> might return an instance of a seemingly unrelated class whose interface is string compatible.</p>
<li><strong>Some classes may internally manipulate their retain count directly (I.e. no swizzle for you!).</strong></li>
<p>It may be tempting to override <code>retain</code>, <code>release</code> and <code>autorelease</code> in existing classes using a swizzling mechanism or the like.   Depending on the class, you might find that the retain count of an object is changing more than the # of calls to retain/release/autorelease might otherwise warrant!</p>
<p>This is because a class might choose to implement a retain count mechanism differently than the one provided by <code>NSObject</code> and, thus, might internally directly manipulate the retain count without going through the various methods.</p>
<p>Since the retainCount of an object is not an observable property (ewww… boy howdy that&#8217;d be ugly if it was), this direct manipulation is perfectly valid.  However, it means that you cannot count on being able to externally modify an existing class to observe the retain count.</p>
<p>Nor should you need to.   The system classes are designed such that they <em>should be</em> compatible with the Allocation Instrument&#8217;s ability to track reference count changing events, including grabbing a backtrace.   If you find a class that isn&#8217;t, file a bug, please.</p>
<li><strong>While <code>retain/release</code> are effectively thread safe, there is always a race between calling <code>retainCount</code> and having the actual retain count change in some other execution context.</strong></li>
<p>Mmm… concurrency… where <code>1+1</code> can yield <code>3</code>.</p>
<p>As was mentioned before, there is no operation via which you can query an object for its <code>retainCount</code> in a fashion that guarantees the retain count won&#8217;t change immediately after you retrieve the value, including potentially deallocating the object.</p>
<p>That is to say, there is no <code>retain/release</code> locking mechanism.  </p>
<p>Thus, as soon as you retrieve the <code>retainCount</code> of an object, that value may be incorrect unless you can absolutely guarantee that the object is not being manipulated by any other execution context.   And the only way to guarantee that is to pretty much stick to a direct subclass of NSObject (which, in and of itself, isn&#8217;t really technically correct either) and limiting manipulation of said object(s) only to threads/queues where you exactly control every aspect of interaction with said object;  i.e. no system APIs for you!
</ol>
<p>The above doesn&#8217;t even consider the inherent design fragility in colluding the reference count of objects with other functionality.  The classic &#8220;scarce resource recollection&#8221; problem of GC very much exists in a manual retain-release realm, for example.</p>
<hr />
<p>So, when <em>is</em> <code>retainCount</code> useful?</p>
<p>I have encountered a handful of cases where the retain count of an object was used internally as a sort of &#8220;mode of use&#8221; indicator.  That is, if an object&#8217;s retainCount is 2 when <code>-release</code> is invoked, the framework will assume, say, that the object is transitioning from &#8220;in use&#8221; to &#8220;available for quick reuse&#8221;.  Typically, this is a sort of allocation cache or instance cache.   Often, this is done because instantiation of the object is fairly expensive and, thus, the goal is to create a pool of available objects that can quickly be reused.</p>
<p>While a valid use, it tends to be fragile and tends to make crashes more difficult to analyze.  Namely, one stray <code>release</code> or <code>autorelease</code> and you are likely to have a crash in the caching mechanism.  At least with a crash in in <code>NSAutoreleasePool</code>, it is immediately obvious where things went off the rails.</p>
<p>A far less fragile solution is to encapsulate the expensive bits within a second container within the object.  That container can be &#8220;checked in&#8221; and &#8220;checked out&#8221; by the object as a normal part of allocation/deallocation.   This decouples cache magic from retain count.</p>
<hr />
<p>The best possible solution to all of this is to <em>move to ARC!</em>  <a href="http://clang.llvm.org/docs/AutomaticReferenceCounting.html">Automatic Reference Counting</a>, by and large, works incredibly well for a technology that is so new.  The compiler and runtime teams have taken a very conservative approach that makes this so.  Basically, if the compiler can&#8217;t reason through a piece of code to determine with total certainty exactly what the retain/release behavior should be, it generates an error instead.</p>
<p>It works quite well and many of Apple&#8217;s newer releases feature big chunks of code that are ARC&#8217;d.</p>
<p>If you can&#8217;t go ARC yet for whatever reasons, then dealing with manual retain-release is really quite simple and <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html">covered well in the documentation</a>.  The key is to ignore the retain count as a value and treat it purely as something you increase and decrease;  you must balance every increase with a decrease if you want a particular object to be deallocated or over-released in the case of too many decrements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Aerogarden Success!</title>
		<link>http://www.friday.com/bbum/2011/12/17/aerogarden-success/</link>
		<comments>http://www.friday.com/bbum/2011/12/17/aerogarden-success/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 00:54:50 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[Gardening]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2034</guid>
		<description><![CDATA[This is our AeroGarden after a couple of months of growth. It is currently growing savory, mint, basil, thyme, parsley, amaranth, and oregano. The Aero works really really well. Within the water reservoir (the big black thing under the plants), it has a pump that pumps water with nutrients over the roots of the little [...]]]></description>
			<content:encoded><![CDATA[<div class="imgLeft"><img src="http://www.friday.com/bbum/wp-content/uploads/2011/12/Aero.jpg" alt="Aero" title="Aero.jpg" border="0" width="600" height="450" style="float:left;" /></div>
<div class="imgRight"><iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;nou=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=billbumgarner-20&#038;o=1&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=B000FI4O90" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</div>
<p>This is our <a href="http://www.aerogrow.com/">AeroGarden</a> after a couple of months of growth.   It is currently growing savory, mint, basil, thyme, parsley, amaranth, and oregano.   The Aero works really <em>really</em> well.  Within the water reservoir (the big black thing under the plants), it has a pump that pumps water with nutrients over the roots of the little growing pods that stick through the holes in the deck around the plants.  Surprisingly, the thing makes virtually no noise.</p>
<p>Once every week to 14 days (not sure how often), it reminds you to add nutrients and it has a water-low indicator.   While the seed kits from Aero include nutrients, I&#8217;ve been using the worm tea from my son&#8217;s worm farm.</p>
<p>Quite nice to have a nearly non-stop supply of fresh herbs next to the kitchen!</p>
<p>I would never have otherwise bought such a device, but we ran across one at a garage sale for $5.  Quite a hefty discount off of the $150 new price.  It did need some new lights.</p>
<p>I picked up one of the Aero branded seed packets so I could go through one grow cycle by the book, as it were.</p>
<p>$150 seems a bit steep and seed kits are another $20, typically.  However, if you truly will <em>use all the herbs</em>, then I would think the thing would pay for itself long before it wears out.   Annoyingly, the light sockets are of an esoteric standard and ordering new lamps from Aero is ridiculously pricy.   Razor meet blades, assuredly.   However, it isn&#8217;t hard to rewire it for standard CFL grow lamps (you want CFL to avoid burning the plants at such close proximity).   </p>
<p><br clear="left"/><span id="more-2034"></span>Once I have my 3D printer up and running, I plan on printing new grow pods customized to work a little better than the official, cheap, ones.</p>
<p>As well, I&#8217;ll likely replace the entire lamp unit with an all LED unit (custom printed, of course).</p>
<p>I&#8217;m also going to place a bit of either mylar or aluminum hanging down from the lamp shade.  That will reflect the light back onto the plants and, from reading the forums, prevents the plants from being quite so lanky.</p>
<hr />
<p><strong>Mint Tea</strong></p>
<p>With the mint from the unit, I&#8217;ve been enjoying mint tea.   Simply toss a bunch of mint leaves into a pot on the stove and boil it for a few minutes.  More mint, the stronger.   Strain into a mug and squeeze in a bit of lemon and honey.</p>
<p>Yum.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2011/12/17/aerogarden-success/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eichler Ornament</title>
		<link>http://www.friday.com/bbum/2011/12/17/eichler-ornament/</link>
		<comments>http://www.friday.com/bbum/2011/12/17/eichler-ornament/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 23:04:43 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2031</guid>
		<description><![CDATA[Every year, our neighborhood has an annual ornament exchange. This year, we hosted the party at our house. For our ornament, I picked up a bunch of matte finished shatterproof (i.e. plastic) ornaments from Amazon.com and shoved &#8216;em in EMSL&#8217;s Egg-Bot. For the artwork, I found an elevation illustration of the front of a typical [...]]]></description>
			<content:encoded><![CDATA[<div class="imgLeft"><img src="http://www.friday.com/bbum/wp-content/uploads/2011/12/Ornament-On-Tree.jpg" alt="Ornament On Tree" title="Ornament On Tree.jpg" border="0" width="350" height="500" style="float:left;" /><br /><img src="http://www.friday.com/bbum/wp-content/uploads/2011/12/In-Action.jpg" alt="In Action" title="In Action.jpg" border="0" width="350" height="409" style="float:left;" /></div>
<p> Every year, our neighborhood has an annual ornament exchange.  </p>
<p>This year, we hosted the party at our house.
<div class="imgRight"><iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;nou=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=billbumgarner-20&#038;o=1&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=B005WIDZ16" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</div>
<p>For our ornament, I picked up a bunch of matte finished shatterproof (i.e. plastic) ornaments from Amazon.com and shoved &#8216;em in <a href="http://evilmadscience.com/productsmenu/tinykitlist/171-egg-bot">EMSL&#8217;s Egg-Bot</a>.</p>
<p>For the artwork, I found an elevation illustration of the front of a typical Eichler and used <a href="http://inkscape.org/">Inkscape</a> to trace a relatively minimal line drawing of the elevation (attached below).</p>
<p>Worked great!   The person that received their ornament loved it and, of course, then everyone else wanted one, too.  No problem! I printed &#8216;em up in whatever color combinations folks wanted.</p>
<p>When loaded in Inkscape, the lettering and wreath on the door are in a different layer than the house line art.   The Egg-Bot Inkscape driver makes it easy to print a layer at a time and, because the stepper motors stay powered unless you explicitly turn them off, you can easily swap pens after a layer is printed without knocking things out of alignment.</p>
<p>If you have an Egg-Bot, those particular ornaments + Sharpie ultra-fine markers are pretty much an optimal combination.   You don&#8217;t even need to take the little hanger top off when printing.   As can be seen in the photo on the left, the ornament part fits well into the cup of the egg holder and the plastic eye is held quite firmly by the spring loaded part of the Egg-Bot&#8217;s egg holder.</p>
<p><img alt="Eichler SVG" src="http://www.friday.com/images/Ornament.svg" width=420/></p>
<p><br clear="right"/><br />
<br clear="left"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2011/12/17/eichler-ornament/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ultimaker (3D Printer) Ordered!</title>
		<link>http://www.friday.com/bbum/2011/11/13/ultimaker-3d-printer-ordered/</link>
		<comments>http://www.friday.com/bbum/2011/11/13/ultimaker-3d-printer-ordered/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 03:13:13 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[3D Printer]]></category>
		<category><![CDATA[Make]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2023</guid>
		<description><![CDATA[Update: This article will be updated occasionally with new information as I run across itâ¦. Gonna be a long 4 to 6 weeks&#8230; I just ordered an Ultimaker 3D printer after a few weeks of on and off research into the subject of 3D printing. It has a 4 to 6 week lead time. I [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> This article will be updated occasionally with new information as I run across itâ¦.</p>
<p>Gonna be a long 4 to 6 weeks&#8230;</p>
<p>I just ordered an <a href="http://blog.ultimaker.com/">Ultimaker 3D printer</a> after a few weeks of on and off research into the subject of 3D printing.  It has a 4 to 6 week lead time.</p>
<p>I chose the Ultimaker over the <a href="http://reprap.org/wiki/Main_Page">RepRap Mendel/Prusa</a>, <a href="http://www.makerbot.com/">MakerBot</a>, and <a href="http://pp3dp.com/">UP! Personal Portable 3D Printer</a> for a few reasons:</p>
<p>- Larger build envelope than the Makerbot and faster, too.</p>
<p>- Extremely precise print capabilities.</p>
<p>- Less finicky than the Mendel, so it seems from the various forums, etc.</p>
<p>- The <a href="http://www.netfabb.com/">Netfabb</a> software seems to be well regarded.</p>
<p>- Elegant print head design.</p>
<p>- Highly customizable, open source hardware / software / platform.</p>
<p>- PLA preferred (PLA is <a href="http://en.wikipedia.org/wiki/Polylactic_acid">Polylactic Acid</a> and is a biodegradable, non-toxic, material)</p>
<p>Any of the 3D printers would have been a good choice and each of the ones not chosen have advantages;  the makerbot has an automatic object ejector for continuous duty printing, the UP! is a really nice design (easy to use), and the RepRap has an awesome community supporting it that has built a very versatile/customizable platform.</p>
<p>There are, of course, a large number of commercial printers.  The UP! is about the cheapest of the lot and pricing ranges right on up to $unobtanium.   Extrusion based printing is not the only solution, either, by any means, but it is currently the most accessible, as far as I can tell.</p>
<p>In the end, the elegant extruder design, overall machine design, speed and &#8212; most importantly &#8212; accuracy of the Ultimaker won out.   I suspect I&#8217;ll eventually build a 3D printer of some sort, possibly a RepRap, or, at the least, print parts for someone else and help them put it together.   Seems like a fun project and, overall, 3D printing is likely to be a <strong>huge</strong> industry in the coming years.</p>
<hr />
<p>I have about a zillion little projects around the house that I can knock off with a 3D printer:</p>
<p>- new shower bar end cap so the shower door doesn&#8217;t bump into it</p>
<p>- proper clips to hold the art glass in the cabinet doors throughout the kitchen (the glass is a nonstandard thickness)</p>
<p>- seal for my bike light</p>
<p>- <a href="http://www.thingiverse.com/thing:15191">Lens hoods</a> for my various lenses</p>
<p>- seed baskets for an <a href="http://www.aerogrow.com/index.php">AeroGarden</a> (found a 7 hole one for $5 at a garage sale)</p>
<p>- seed/grow baskets for a homebrew aeroponics/aquaponics system I&#8217;m contemplating (I want fresh salad all winter long, thanks!)</p>
<p>- iPad stand</p>
<p>- various cable keepers</p>
<p>- deflector for the front of a meat grinder to keep it from squirting blood everywhere</p>
<p>- fully customized project boxes</p>
<p>- custom Legos</p>
<p>- custom LED/CFL lighting fixtures</p>
<p>- Fractals</p>
<p>- <em><strong>whatever the hell Roger wants to print</strong></em></p>
<p>That last one is the most important.  I can only imagine how awesome it would have been to have a 3D printer when I was 11 years old.   Should be a great educational tool for him.   It&#8217;ll also be fun to put it together with him.  He is both a talented solderer and totally enjoyed putting together the Egg-Bot (speaking of &#8212; I wonder if I can print the mechanics for a new, larger, Egg-Bot).<span id="more-2023"></span><br />
<hr />
<p>There was a <a href="http://www.kickstarter.com/">Kickstarter</a> for <a href="http://www.kickstarter.com/projects/printrbot/printrbot-your-first-3d-printer?ref=live">Printrbot: Your First 3D Printer</a>.   I bought into that at the $424 level;  I should receive everything to make one, save for the parts that I&#8217;ll need to print on the Ultimaker.</p>
<p>The goal isn&#8217;t to have 2 3D printers, but to use the Printrbot as a hacking target for some other ideas I have.</p>
<p>To answer some questions:</p>
<p><em> Are you taking third party orders? I have a homebrew mount for my mobile phone in my car made out of foamboard that I would love to have a less-ghetto version. Can you build up a 3-D model from basic geometrics shapes and print that without a physical model?<br />
</em></p>
<p>Sure and Yes, you can.  There are all kinds of ways to build up printable models.  You can start with just about any of the models on <a href="http://www.thingiverse.com/">Thingiverse</a>.  Or you can use any of a number of third party tools, both in the drawing realm and in the algorithmic/parametric realm, to generate models.   The trick will be to learn how to produce models that are both usable and print well;  there are limits to how much overhang and the like you can have.</p>
<p>(Ooh! Cool! Custom <a href="http://www.thingiverse.com/thing:13531">Lego</a>!)</p>
<p><em>Do you have an estimate of how much the PLA plastic costs for some of the items on your list?</em></p>
<p>It looks like PLA is pretty much a commodity item and the price is varying day by day.   I picked up two 5 lbs reels (one black, one white) for ~$60/each.   I don&#8217;t yet know how far that will go, but I do know that it is largely a function of the models being printed, how &#8220;solid&#8221; the interiors need to be (which is largely dictated by model) and, of course, how many times I screw up!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2011/11/13/ultimaker-3d-printer-ordered/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wet Electronics</title>
		<link>http://www.friday.com/bbum/2011/09/05/wet-electronics/</link>
		<comments>http://www.friday.com/bbum/2011/09/05/wet-electronics/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 17:59:08 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[Photography]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2015</guid>
		<description><![CDATA[An unremarkable, though rather pleasant, picture of the creek near my parent&#8217;s house in Missouri. What is remarkable or, at least, exceptional about this photo is that it was taken about 30 seconds after I fell in the creek (slick rock) and dunked both my iPhone and my Canon DSLR (t1i) underwater for a good [...]]]></description>
			<content:encoded><![CDATA[<div class="imgLeft"><a href="http://www.flickr.com/photos/49503114554@N01/6116912130" title="View 'Photo taken about 30 seconds after the camera had been under water for ~5 seconds.' on Flickr.com"><img height="333" border="0" style="float:left;" src="http://farm7.static.flickr.com/6197/6116912130_45ff0eb37d.jpg" alt="Photo taken about 30 seconds after the camera had been under water for ~5 seconds." title="Photo taken about 30 seconds after the camera had been under water for ~5 seconds." width="500"/></a></div>
<p><br clear="left"/></p>
<p>An unremarkable, though rather pleasant, picture of the creek near my parent&#8217;s house in Missouri.</p>
<p>What is remarkable or, at least, exceptional about this photo is that it was taken about 30 seconds after I fell in the creek (slick rock) and dunked both my iPhone and my Canon DSLR (t1i) underwater for a good 5 to 10 seconds.    <em>While bummed that it happened, I wasn&#8217;t really angry &#8212; it was inevitable and, given how much joy the various photos have brought the family and how much educational value they have had for Roger, the risk has been worth it.</em></p>
<p>This was the last photo the camera took for quite some time and, at the time, the last photo I expected it to ever take.    My iPhone was in similar dire straits.  Upon removal from my pocket, it had flipped out;  cycling between screens, waking sleeping, etc.. Water <em>drained</em> out of the headphone port.</p>
<p><strong><em>OOops.</em></strong></p>
<p>Same with the camera;  had to dump water out through the lens mount, through the battery compartment and out the SD card slot.</p>
<p>Leaving them in a sunny spot in an air conditioned, and thus relatively dry, house, the iPhone started working just fine, though the camera lens had a bunch of moisture on the inside.  That dissipated within a few days and, save for the occasional mysterious &#8220;GPS on all the time&#8221; mode, the iPhone seems completely normal now.</p>
<p>The camera took longer to return to normalcy.   For the first few days, it would power on to a &#8220;set the time&#8221; screen and I would then turn it off, remove the battery, open every door/compartment/etc, and let it dry some more.  After the first week, it mostly just worked, but the flash stopped popping up for a while.  Now even that seems to work.</p>
<p>It seems I got lucky.  This time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2011/09/05/wet-electronics/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sous Vide Update</title>
		<link>http://www.friday.com/bbum/2011/08/05/sous-vide-update/</link>
		<comments>http://www.friday.com/bbum/2011/08/05/sous-vide-update/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 07:46:59 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[Food]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2013</guid>
		<description><![CDATA[Quick notes;  I&#8217;m sorely behind on photography and weblogging.  Instead of letting things entirely rot, I&#8217;m going to jot down some notes for future reference (my own and, hopefully, others). I&#8217;ve also been behind on cooking, making stuff, etc… After letting my Sous Vide Supreme gather dust for a couple of months, I thought through [...]]]></description>
			<content:encoded><![CDATA[<p>Quick notes;  I&#8217;m sorely behind on photography and weblogging.  Instead of letting things entirely rot, I&#8217;m going to jot down some notes for future reference (my own and, hopefully, others).</p>
<p>I&#8217;ve also been behind on cooking, making stuff, etc…</p>
<p>After letting my <a href="http://www.friday.com/bbum/2010/11/04/precise-temperature-control-cooking-sous-vide-water-oven/">Sous Vide Supreme</a> gather dust for a couple of months, I thought through why and what to do about fixing this.   The quality of food that is possible with SV cooking was clearly a motivator.  What I concluded was that the size and pain of storing the SVS was ultimately the reason why I didn&#8217;t use it;  finding a place to store was a pain and the SVS always takes the same rather large volume of water, even if you only want to cook a few eggs or a couple of steaks.</p>
<p>Thus, after some rather extensive research, I decided to go with a <a href="http://www.cuisinetechnology.com/sousvide.php">PolyScience Sous Vide Professional</a>.   Effectively, it is a PolyScience lab circulator refactored into a form convenient for use in a kitchen.   It is easy to use, very accurate, and &#8212; most critically for me &#8212; can handle both a much much smaller and, on those occasions where I need it, a significantly larger (30L) volume of water vs. the SVS.</p>
<p>Once obtaining said device, a bit of a food adventure has been had over the past few weeks.</p>
<p><strong>Ribs &amp; Pork Shoulder (24 hours @ 56ºC)</strong></p>
<p>Ribs were basted with an apricot / rice vinegar / EVOO / brown sugar / ginger sauce prior to bagging.   Pork shoulder was rubbed down with brown sugar, light salt, and scotch bonnet pepper flakes.</p>
<p>End result was quite good;  both the ribs and the shoulder had &#8220;chew&#8221; in that they didn&#8217;t entirely fall apart, but were still completely fork tender.   Flavor profile was excellent;  intensely pork flavored without being overbearing.   The belly was slightly salty and, in fact, <em>salting in sous vide is <strong>very </strong>different than salting in regular bbq.</em></p>
<p><em>Lesson Learned: </em>What is likely obvious to anyone who can actually cook;  any liquid in the sous vide bag should be drained into a pan and used to make a sauce, some sauce, any sauce.   Use it to deglaze a pan.  Add it to some sauce you are making, even if you have to cook it down a bit.   There is simply too much deliciousness in the liquid in the bag to let it go down the drain!</p>
<p><strong>Fillet of Salmon (30 minutes @ 54ºC)</strong></p>
<p>Just hot enough to pasteurize, no more.  Sadly, this sucked.  But it was an important lesson.  The Salmon fillet was absolutely perfect in texture and color, but the flavor was off.  Namely, it was fishy because I had abused the fillet between freezer and consumption.  Not &#8220;I&#8217;m going to die&#8221; fishy, but just unpleasant.   Frankly, if I had cooked it in a stew or grilled it, it would have been fine.</p>
<p><em>Lesson Learned:</em> When cooking SV, there is <em>nowhere</em> that any off flavors can escape to, be burned off, or otherwise be covered.  While you don&#8217;t have to start with the most amazing quality ingredients, they <em>must be absolutely fresh and/or have been stored properly every step of the way between harvest and table.</em></p>
<p> </p>
<p><strong>Brisket &#8212; French Laundry Style (48 hours @ 64ºC)</strong></p>
<p>Picked up a big chunk of relatively cheap brisket and cut it into three pieces.  All three were oiled, salted and peppered prior to bagging.  One then had a hot indian curry added and one had a bunch of <em style="font-weight: bold; font-style: normal;">Worcestershire</em> + Maple Syrup.</p>
<p>End result was very interesting.  It was a lot less tender than I expected, but was still fork tender after being sliced across the grain.</p>
<p>All of the juices were drained into a small cast iron pot and were cooked down with powdered mustard, ketchup, and siracha until it thickened into what turned into a delicious BBQ sauce.</p>
<p><em>Lesson Learned:</em> Following Keller&#8217;s temperature and time recommendations seems to &#8220;just work&#8221;.  This comes as know surprise.  However, if you read many of Keller&#8217;s SV recipes, they generally require a proper vacuum sealer to be able to achieve the &#8220;under pressure&#8221; part of SV cooking.</p>
<p><strong></strong><strong>Cheap Steaks (48 hours @ 56ºC)</strong></p>
<p>Picked up some cheap sirloin steaks.  Not terribly tender, but not too tough.  Decided to do them 48 hours to see what would happen;  one plain, one curry, and one maple syrup + <em style="font-style: normal;">Worcestershire.</em></p>
<p>Browned meat over high flame on cast iron after.</p>
<p>Made sauce out of the juice, of course.</p>
<p>Was quite delicious, but the meat texture was <em>too</em> tender.  Beyond fork tender.</p>
<p><em>Lesson Learned:</em> No, really, you <em>can</em> make a meat too tender.  At least, if you expect to serve it in a steak-like format.  However, I&#8217;m betting that taking the same cut of meat, dropping a bunch of stew like veggies and spices into the bag, and cooking that for 48 hours in a similar way would result in an amazing stew.</p>
<p><strong>Peaches (3 hours @ 80ºC)</strong></p>
<p>Peaches + brown sugar + bourbon, actually.   Just an experiment.</p>
<p>Delicious over ice cream, but the bourbon flavor was surprisingly strong.  In hindsight, this should have been obvious.   Did this a second time and used the result in a BBQ sauce described below.</p>
<p><em>Lesson learned:</em> The Sous Vide pouches are a closed systems.  Any flavors that go in <em>will stay there</em>.  They may change from being exposed to said temperature, but they can&#8217;t escape!  Duh!  So, like salt, if you have something that is an <em>intense</em> flavor that would otherwise be somewhat lost during cooking, <em>vastly reduce the amount you put in!</em></p>
<p><strong>Brisket &#8212; Baldwin Style (24 hours @ 80ºC)</strong></p>
<p>Didn&#8217;t have 48 hours and wanted to try something a little different.  Did the three flavors again as described above.</p>
<p>Browned the meat in skillet before, on grill after.</p>
<p>The end result was much <em>much</em> more tender than the French Laundry Style described above. But that may also have been because the meat, itself, was significantly fattier.</p>
<p>Served with a BBQ sauce made from the SV peaches described above + brisket SV juices + ketchup + maple syrup + mustard + hot peppers.</p>
<p><em>Lesson Learned</em>:<em> </em>Beyond the exceptionally well understood pasteurization tables and exactly what temperature to cook a piece of meat to consider it &#8220;rare, medium-rare, etc..&#8221;, the relationship between time/temperature vs. resulting texture is not entirely understood by anyone. Certainly, a truly competent chef will find a particular time/temperature</p>
<p><strong>Leg of Lamb (24 hours @ 54ºC)</strong></p>
<p>Took a leg of lamb, shoved it in a bag without anything else, and SV&#8217;d it for 24 hours.</p>
<p>Once done, salted, peppered, EVOO, and then grilled for a minute per side on a very high heat gas grill.</p>
<p>Using the leftover BBQ sauce from the previous night as a base, I added the juice from the lamb SV bag and cooked it down a bit more.</p>
<p>The meat was perfectly tender and medium-rare from edge to edge.  Not a bit of it was left at the end of the meal.</p>
<p><em>Lesson Learned: </em>54ºC is a magic number.  At 54ºC, you can <em>mostly</em> cook something for up to 72 hours with no worries of poisoning anyone <em>and</em> still result in a piece of medium rare meat.  <em>Mostly</em> (as there is some subtlety to the whole pasteurization thing).  <em>Just start with a fresh and competently handled piece of meat &#8212; it can be cheap, but it <strong>must</strong> be fresh.</em></p>
<p><strong>Pork Ribs (24 hours @ 57ºC)</strong></p>
<p>Dry rub with brown sugar, salt, hot pepper, ginger, and garlic.  Into the bag for 24 hours.  Cooked down a BBQ sauce (carry over from the one above), glazed and then seared over a high heat gas fired grill.</p>
<p>The texture of the meat was perfect.   The flavor was too damned salty.  Not inedibly so; just much more so than desired.</p>
<p><em>Lesson re-learned:</em> No matter how little salt you use in a Sous Vide bag, it can easily be too much.  I didn&#8217;t even think I&#8217;d used <em>that</em> much salt, but the end result was still saltier than expected and saltier than desired.</p>
<p>More notes as I figure this out….</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2011/08/05/sous-vide-update/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Egg-Bot; Advanced Egg Decorations</title>
		<link>http://www.friday.com/bbum/2011/04/23/egg-bot-advanced-egg-decorations/</link>
		<comments>http://www.friday.com/bbum/2011/04/23/egg-bot-advanced-egg-decorations/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 04:35:45 +0000</pubDate>
		<dc:creator>bbum</dc:creator>
				<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.friday.com/bbum/?p=2003</guid>
		<description><![CDATA[This year, we decorated our eggs using Evil Mad Scientist Laboratories&#8217; Egg-Bot. I picked up the kit from EMSL a few months ago. Roger and I put it together over a few evenings. Software installation is relatively easy (for an X11 app) and usage is quite easy. The assembly, no surprise for an EMSL kit, [...]]]></description>
			<content:encoded><![CDATA[<div class="imgLeft"><a href="http://www.flickr.com/photos/49503114554@N01/5647999959" title="View 'Reddit Logo Egg' on Flickr.com"><img height="500" title="Reddit Logo Egg" alt="Reddit Logo Egg" border="0" src="http://farm6.static.flickr.com/5147/5647999959_a5df0957c8.jpg" width="333"/></a></div>
<p> This year, we decorated our eggs using <a href="http://www.evilmadscientist.com/article.php/eggbot">Evil Mad Scientist Laboratories&#8217; Egg-Bot</a>.</p>
<p>I picked up the kit from EMSL a few months ago.  Roger and I put it together over a few evenings.  Software installation is relatively easy (for an X11 app) and usage is quite easy.</p>
<p>The assembly, no surprise for an EMSL kit, was  a breeze, with a extremely well written and illustrated assembly manual.  Seriously &#8212; EMSL kits are the best kits I have ever assembled!</p>
<p>The Egg-Bot can draw on pretty much anything round that is smaller than a tennis ball;  eggs of all types, light bulbs, golf balls, Christmas ornaments, and &#8212; even &#8212; fruit (I used a lemon for test purposes).</p>
<p>The trick is finding a marking instrument that is appropriate to the target surface.   For eggs, Sharpies work quite well, but Bic Mark-It markers are too runny.</p>
<p>Precisely, the <a href="http://www.amazon.com/gp/product/B00006IFI8/ref=as_li_ss_tl?ie=UTF8&#038;tag=billbumgarner-20&#038;linkCode=as2&#038;camp=217145&#038;creative=399349&#038;creativeASIN=B00006IFI8">Sharpie Ultra Fine Point Permanent Markers, 5 Colored Markers(37675)</a><img src="http://www.assoc-amazon.com/e/ir?t=&#038;l=as2&#038;o=1&#038;a=B00006IFI8&#038;camp=217145&#038;creative=399349" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> works very well.  Regular Sharpies do not;  too fat.  However, <a href="http://evilmadscience.com/component/content/article/199">EMSL has various accessories available</a>, including an &#8220;extra wide&#8221; pen holder (ordering that very soon!).<br />
<br clear="left"/><span id="more-2003"></span>
<div class="imgRight"><a href="http://www.flickr.com/photos/49503114554@N01/5648561364" title="View 'Pencil Test' on Flickr.com"><img height="333" title="Pencil Test" alt="Pencil Test" border="0" src="http://farm6.static.flickr.com/5028/5648561364_ee0cc59722.jpg" width="500"/></a></div>
<p>For test purposes, a pencil works well enough and can generally be erased.</p>
<p>When the Egg-Bot is drawing anything with curves or diagonal lines, it is almost musical in the way the various stepper motors play different tones.</p>
<p>Finding various bits of art proves quite easy.  Basically, any random SVG based illustration will work with a bit of scaling and tweaking.  <a href="http://images.google.com/images?as_q=reddit&#038;hl=en&#038;output=search&#038;tbm=isch&#038;btnG=Google+Search&#038;as_epq=&#038;as_oq=&#038;as_eq=&#038;as_sitesearch=&#038;safe=off&#038;as_st=y&#038;tbs=ift:svg&#038;biw=1251&#038;bih=1220">Google&#8217;s Image Search</a> can narrow the search by file type.</p>
<p>Alternatively, <a href="http://inkscape.org/">Inkscape</a> uses Python as an extension language and I was able to whip up a programmatic image generator in just a few minutes.</p>
<p>As well, there are some hacks that involve replacing the pen with an <a href="http://code.google.com/p/eggbotcode/wiki/PeckPlotting">engraving tool (a pecker type engraver)</a>.  Might have to explore that!</p>
<p>Programming?  Robots? Assemble something cool with my kid? Produce awesome designs that make the non-technical happy?  Infinite repository of art easily searchable? Easy to use? Worth every penny!<br />
<br clear="right"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.friday.com/bbum/2011/04/23/egg-bot-advanced-egg-decorations/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

