<?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>Measure Twice, Byte Once</title>
	<atom:link href="http://www.dancartoon.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dancartoon.com</link>
	<description>Making Stuff</description>
	<lastBuildDate>Sun, 05 Feb 2012 00:09:44 +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>Dan&#8217;s House of Pain(t) &#8211; Part 2</title>
		<link>http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dans-house-of-paint-part-2</link>
		<comments>http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 23:54:27 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Car]]></category>
		<category><![CDATA[DIY]]></category>

		<guid isPermaLink="false">http://www.dancartoon.com/?p=64</guid>
		<description><![CDATA[Part One Since I was now ready to paint, I started preparing my garage. I used a couple of 10'x20' plastic drop cloths to create a "paint booth". I also purchased a small space heater to help keep the garage warm. Winter is not the ideal time to be painting since the paint tends to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-1/">Part One</a></p>
<p>Since I was now ready to paint, I started preparing my garage.  I used a couple of 10'x20' plastic drop cloths to create a "paint booth".  I also purchased a small space heater to help keep the garage warm.  Winter is not the ideal time to be painting since the paint tends to need a temperature between 50 and 70 degrees Fahrenheit in order to dry properly.  It's also very humid where I live in the Bay Area.  We already had a dehumidifier which I moved to the garage to keep the humidity level down.</p>
<p>On painting day(a Sunday), I woke up early, removed the bumper cover, and moved it to the paint booth.  I cleaned the entire surface with wax and grease remover.  I then applied a few coats of adhesion promoter.  This is a clear primer that is designed to help paint stick to different types of surfaces(including plastic).  After letting the adhesion promoter dry for about 20 minutes, I started applying the primer.  As I started priming, I noticed that the lighting in my garage isn't quite adequate for painting.  In addition, I ran out of primer before finishing the second coat.  The bumper cover had pretty good coverage, but there were still a few spots that definitely needed more primer.  As it turns out, rubberized primer is not carried by any auto parts stores in my area, so I was out of luck trying to finish painting on the same day.</p>
<p>I recommend City Paints(in SF, near 7th and Folsom) if you live in the SF Bay Area and need auto paint.  They carry a large variety of auto paint and auto care supplies.  Prices were better than most of the online stores that I found.  In addition, they will also fill aerosol cans with paint for around $11/can.</p>
<p>The following weekend, I cleaned the bumper cover again and started over with the painting.  It turns out that wax &#038; grease remover will eat through rubberized primer(and perhaps also regular primer), so be careful if you need to clean a primed surface.  I applied three coats of primer and then wet-sanded with 400 grit paper.</p>
<div id="attachment_51" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.dancartoon.com/wp-content/uploads/2012/01/primed.jpg"><img src="http://www.dancartoon.com/wp-content/uploads/2012/01/primed-300x225.jpg" alt="First coat of primer" title="First coat of primer" width="300" height="225" class="size-medium wp-image-51" /></a><p class="wp-caption-text">First coat of primer</p></div>
<div id="attachment_55" class="wp-caption aligncenter" style="width: 158px"><a href="http://www.dancartoon.com/wp-content/uploads/2012/01/wet_sanding.png"><img src="http://www.dancartoon.com/wp-content/uploads/2012/01/wet_sanding-148x300.png" alt="Setup for wet sanding outside" title="Setup for wet sanding outside" width="148" height="300" class="size-medium wp-image-55" /></a><p class="wp-caption-text">Setup for wet sanding outside</p></div>
<p>  I started out with the bumper cover supported by saw horses and facing up.  It turns out that it's much easier to paint a vertical surface than a horizontal surface, especially with aerosol paint.  I ended up using a rope to suspend the bumper cover from the ceiling for the color and clear coats.</p>
<div id="attachment_75" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.dancartoon.com/wp-content/uploads/2012/02/hanging_for_painting.jpg"><img src="http://www.dancartoon.com/wp-content/uploads/2012/02/hanging_for_painting-300x225.jpg" alt="Hanging setup for painting" title="Hanging setup for painting" width="300" height="225" class="size-medium wp-image-75" /></a><p class="wp-caption-text">Hanging setup for painting</p></div>
<p>  I then applied color coats which I let dry overnight.  The final color coat should not be sanded, but earlier color coats can be sanded.  One of the issues with metallic colors is that the thickness of the color coat affects the final color and appearance of the paint job.  If I were redoing the process, I would sand between the second and third color coats since there are a few areas where the paint ended up uneven.  One of the issues with metallic colors is that the thickness of the color coat affects the final color and appearance of the paint job.  </p>
<p>The following morning I applied four clear coats, let the bumper cover dry, and then put it back on the car.  The clear coat has to dry for several days before it can be polished.  An additional thirty days are required for drying before the surface can be waxed.  The bumper cover color matches the rest of the car very well.  In the interest of potentially saving money in the future, I also bought a can of Dupli-color paint from my local auto store.  Dupli-color paint is around $7/can, whereas the paint I purchased from paintscratch.com was around $20/can.  The Dupli-color paint also matches the car reasonably well, but the match is not quite as good as the paintscratch.com paint.  Most people would probably not notice the difference in color unless it was pointed out to them.</p>
<p>I was able to complete the job with two cans each of primer, color, and clear coat.  I would recommend three cans since two leaves a pretty small margin for error and repainting.  </p>
<p>Since I was saving a fair amount of money by repairing the bumper cover myself, I was able to buy a nice auto polisher and supplies from <a href="http://www.griotsgarage.com/product/machine+one-step+sealant+kit.do?sortby=ourPicks">Griot's Garage</a>.  A week after painting, I first wet-sanded with 1000 grit paper.  I then used some aggressive polishing compound with the polisher to polish the bumper cover.  This leaves a shiny surface, although it doesn't quite match the rest of the car in terms of shininess.  I'm hoping that the eventual sealant and wax will take care of this issue.</p>

<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/paint_booth2/' title='Paint booth and bumper from the outside'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/01/paint_booth2-150x150.png" class="attachment-thumbnail" alt="Paint booth and bumper from the outside" title="Paint booth and bumper from the outside" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/primed/' title='First coat of primer'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/01/primed-150x150.jpg" class="attachment-thumbnail" alt="First coat of primer" title="First coat of primer" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/primed_2/' title='Done priming'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/01/primed_2-150x150.jpg" class="attachment-thumbnail" alt="Done priming" title="Done priming" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/ready_for_painting/' title='Painting gear'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/01/ready_for_painting-150x150.png" class="attachment-thumbnail" alt="Painting gear" title="Painting gear" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/wet_sanding/' title='Setup for wet sanding outside'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/01/wet_sanding-150x150.png" class="attachment-thumbnail" alt="Setup for wet sanding outside" title="Setup for wet sanding outside" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/done_with_clear_coat3/' title='Done painting'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/done_with_clear_coat3-150x150.jpg" class="attachment-thumbnail" alt="Done painting" title="Done painting" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/done_with_clear_coat2/' title='Done painting'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/done_with_clear_coat2-150x150.jpg" class="attachment-thumbnail" alt="Done painting" title="Done painting" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/done_with_clear_coat/' title='Done painting'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/done_with_clear_coat-150x150.jpg" class="attachment-thumbnail" alt="Done painting" title="Done painting" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/cracking/' title='Some micro cracks showing through the color coat'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/cracking-150x150.jpg" class="attachment-thumbnail" alt="Some micro cracks showing through the color coat" title="Some micro cracks showing through the color coat" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/hanging_for_painting/' title='Hanging setup for painting'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/hanging_for_painting-150x150.jpg" class="attachment-thumbnail" alt="Hanging setup for painting" title="Hanging setup for painting" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/polished/' title='Done polishing'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/polished-150x150.jpg" class="attachment-thumbnail" alt="Done polishing" title="Done polishing" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/polished_2/' title='Done polishing'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/polished_2-150x150.jpg" class="attachment-thumbnail" alt="Done polishing" title="Done polishing" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/polished_3jpg/' title='Done polishing'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/polished_3JPG-150x150.jpg" class="attachment-thumbnail" alt="Done polishing" title="Done polishing" /></a>
<a href='http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/polished_4/' title='Done polishing'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2012/02/polished_4-150x150.jpg" class="attachment-thumbnail" alt="Done polishing" title="Done polishing" /></a>

<p><a href="http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-1/">Part One</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dan&#8217;s House of Pain(t) &#8211; Part 1</title>
		<link>http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dans-house-of-paint-part-1</link>
		<comments>http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-1/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 22:41:42 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Car]]></category>
		<category><![CDATA[DIY]]></category>

		<guid isPermaLink="false">http://www.dancartoon.com/?p=59</guid>
		<description><![CDATA[Part Two It all started with a bang. My car was involved in a minor accident and sustained some damage to the bumper. The initial repair quote was a minimum of $800($200 for a new bumper and the remainder for labor). Rather than paying someone else to have fun fixing my car, I decided to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/">Part Two</a></p>
<p>It all started with a bang.  My car was involved in a minor accident and sustained some damage to the bumper.  The initial repair quote was a minimum of $800($200 for a new bumper and the remainder for labor).  Rather than paying someone else to have fun fixing my car, I decided to do the work myself.  In addition, since I wasn't driving the car at the time of the accident, the driver gets to pay for my new tools, supplies, and fun…perfect!</p>
<p><div id="attachment_45" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.dancartoon.com/wp-content/uploads/2012/01/damage.png"><img src="http://www.dancartoon.com/wp-content/uploads/2012/01/damage-300x282.png" alt="Damage" title="Damage" width="300" height="282" class="size-medium wp-image-45" /></a><p class="wp-caption-text">Damage</p></div><br />
The first step was to assess the extent of the damage.  The grille was partially broken during the accident and the Toyota emblem(expensive!) was lost.  Although most people refer to the front of their cars as the "bumper", on newer cars this is technically just the bumper cover.  The bumper cover is a thin piece of plastic that goes over a tubular steel structure and some supporting foam.</p>
<div id="attachment_43" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.dancartoon.com/wp-content/uploads/2012/01/bumper_off.png"><img src="http://www.dancartoon.com/wp-content/uploads/2012/01/bumper_off-300x225.png" alt="Damage to foam and bent supports" title="Damage to foam and bent supports" width="300" height="225" class="size-medium wp-image-43" /></a><p class="wp-caption-text">Damage to foam and bent supports</p></div>
<p> My bumper cover paint had been scraped down to bare plastic in a few places.  The impact also forced the license plate into the bumper cover causing some deformation.  It's also noticeable in the pictures that the bumper had been pushed in and no longer lined up with the headlights.  I removed and cleaned the bumper cover and took a look at the supporting structures.  On my car(2003 Camry), there is a horizontal metal support that runs between the headlights and under the top of the bumper cover.  This support was clearly bent out of shape.  There is an additional vertical support that runs up the center of radiator.  This support also appeared to be bent in some way, but I was unable to determine how much.  I attempted to straighten the horizontal support, but without a reference I was unable to make much progress.   The first step then was to order a new horizontal support and grille.  I was able to purchase the support and grille from autopartswarehouse.com for $58(including shipping).</p>
<p><div id="attachment_54" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.dancartoon.com/wp-content/uploads/2012/01/support.png"><img src="http://www.dancartoon.com/wp-content/uploads/2012/01/support-300x96.png" alt="New support and old support" title="New support and old support" width="300" height="96" class="size-medium wp-image-54" /></a><p class="wp-caption-text">New support and old support</p></div><br />
Otherwise, the car appeared fine.  Fortunately, the headlights were not broken since these tend to be expensive to replace.</p>
<p>I ordered a couple of books on auto restoration and painting and started doing some research.  I wanted to determine if it would be possible to paint the bumper cover at home.  Professionals use an air compressor and spray gun for paint jobs, but the average home air compressor can't do the job properly.  However, it is possible to get matched auto paint in aerosol spray cans(paintscratch.com), which makes painting more feasible.  As a result, I decided that I would repair and paint the bumper cover myself.  As with any paint job, the secret to success(and the bulk of the effort) is in the preparation</p>
<p>Since the bumper cover is plastic, hammering out the dents wasn't an option.  I would have to use a specially designed bumper filler(two-part epoxy) by 3M/Bondo to create a smooth surface.  Many traditional auto repair fillers and primers cannot be used with bumper covers because these products are firm and bumper covers are flexible.  If normal filler is used, it's possible that the entire repaired area may separate from the bumper cover when it flexes.</p>
<p>The filler only adheres adheres to plastic, so I used a random orbital sander with 100-grit sand paper to strip away the paint.  As it turns out, It's slightly liberating the first time you take a sander to your car.  Whether the car will look good at the end is something else entirely.  I used an automotive wax + grease remover(smells like super rubbing alcohol) to prepare the surface for filling.  There were a few areas that needed a fair amount of filler, so I ended up making the repairs over a few weekends and probably spent between 5 and 10 hours on this part of the project.  The filler has a working time of a few minutes and is sandable after 20-30 minutes.  I used a long, flexible sanding board to ensure that the filler that I was building up would match the overall curve of the bumper.</p>
<p>Eventually, I reached a point where the bumper was starting to look pretty good.  There were still small holes in some places in the filler.  I switched to using two-part glazing putty.  This is initially much more fluid than the filler and can be spread to a much smoother finish.  After a few rounds of putty + sanding, I was done with most of the repair work.  I then wet-sanded with 220 grit paper to take out any leftover imperfections in the filled areas.  I also wet-sanded the rest of the bumper cover, since new paint adheres better to a surface that has been scuffed.</p>
<div id="attachment_47" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.dancartoon.com/wp-content/uploads/2012/01/filler.png"><img src="http://www.dancartoon.com/wp-content/uploads/2012/01/filler-300x225.png" alt="Initial round of filling and sanding" title="Initial round of filling and sanding" width="300" height="225" class="size-medium wp-image-47" /></a><p class="wp-caption-text">Initial round of filling and sanding</p></div>
<div id="attachment_46" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.dancartoon.com/wp-content/uploads/2012/01/done_filling.png"><img src="http://www.dancartoon.com/wp-content/uploads/2012/01/done_filling-300x225.png" alt="Done filling and sanding" title="Done filling and sanding" width="300" height="225" class="size-medium wp-image-46" /></a><p class="wp-caption-text">Done filling and sanding</p></div>
<p><a href="http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-2/">Part Two</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancartoon.com/2012/02/04/dans-house-of-paint-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android NativeActivity JNI and ClassNotFoundException</title>
		<link>http://www.dancartoon.com/2012/01/19/android-nativeactivity-jni-and-classnotfoundexception/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-nativeactivity-jni-and-classnotfoundexception</link>
		<comments>http://www.dancartoon.com/2012/01/19/android-nativeactivity-jni-and-classnotfoundexception/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 01:31:01 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Gotchas]]></category>
		<category><![CDATA[JNI]]></category>
		<category><![CDATA[NDK]]></category>

		<guid isPermaLink="false">http://www.dancartoon.com/?p=39</guid>
		<description><![CDATA[We're working on some code related to the Android NDK and using JNI to call Java methods from C/C++. This site has some great code + explanation on how to access your custom Java classes. If you still get ClassNotFoundExceptions after implementing that code, and you've tried everything you can think of, double-check your AndroidManifest.xml [...]]]></description>
			<content:encoded><![CDATA[<p>We're working on some code related to the Android NDK and using JNI to call Java methods from C/C++.  <a href="blog.tewdew.com/post/6852907694/using-jni-from-a-native-activity?00fec5e0">This site</a> has some great code + explanation on how to access your custom Java classes.  If you still get ClassNotFoundExceptions after implementing that code, and you've tried everything you can think of, double-check your AndroidManifest.xml for the application attribute android:hasCode="false".  </p>
<p>Some of the NDK samples include this setting, which will cause your Java code to be left out of the final APK.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancartoon.com/2012/01/19/android-nativeactivity-jni-and-classnotfoundexception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing ProGuard Warning &#8220;can&#8217;t write resource [META-INF/MANIFEST.MF]&#8220;</title>
		<link>http://www.dancartoon.com/2012/01/14/fixing-proguard-warning-cant-write-resource-meta-infmanifest-mf/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fixing-proguard-warning-cant-write-resource-meta-infmanifest-mf</link>
		<comments>http://www.dancartoon.com/2012/01/14/fixing-proguard-warning-cant-write-resource-meta-infmanifest-mf/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 03:09:48 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[ProGuard]]></category>

		<guid isPermaLink="false">http://www.dancartoon.com/?p=30</guid>
		<description><![CDATA[We're using ProGuard in our Android build and were getting a number of warnings regarding duplicate entries in the output jar. When ProGuard encounters resources in an input jar, it will by default copy the resources into the output jar. This is fine as long as you don't have multiple jars that contain resources with [...]]]></description>
			<content:encoded><![CDATA[<p>We're using <a href="http://developer.android.com/guide/developing/tools/proguard.html">ProGuard</a> in our Android build and were getting a number of warnings regarding duplicate entries in the output jar.  When ProGuard encounters resources in an input jar, it will by default copy the resources into the output jar.  This is fine as long as you don't have multiple jars that contain resources with the same name.  All jars(that I'm aware of) have manifest files, so attempting to use ProGuard with multiple input jars will cause warnings that look like: "Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [yyy.jar:META-INF/MANIFEST.MF])". </p>
<p>The warnings are harmless, but a clean build is a happy build, so we might as well try and get rid of them.   The <a href="http://proguard.sourceforge.net/manual/examples.html#manifestfiles">ProGuard Manual</a> actually describes what needs to be done, but it only provides a solution for the case where input jars are specified individually:</p>
<div id="gist-1610031" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'>-injars  in1.jar</div><div class='line' id='LC2'>-injars  in2.jar(!META-INF/MANIFEST.MF)</div><div class='line' id='LC3'>-injars  in3.jar(!META-INF/MANIFEST.MF)</div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1610031/002864bf66b16909c549731f5ae2d9f8a6275f31/gistfile1.txt" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1610031#file_gistfile1.txt" style="float:right;margin-right:10px;color:#666">gistfile1.txt</a>
            <a href="https://gist.github.com/1610031">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>When using ProGuard in the Android build process, the default behavior is to pass in all input jars in a giant delimited(semi-colon on Windows) blob.  I have done some experimentation, but was unable to determine how an input filter can be used when multiple jars(having absolute paths) are passed in this way.  Fortunately, it's not too difficult to change the build process to pass in a list of input jars individually and with individual filters.</p>
<p>This is the relevant section of the standard Android build.xml(starting around line 700):</p>
<div id="gist-1609994" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="c">&lt;!-- Build a path object with all the jar files that must be obfuscated.</span></div><div class='line' id='LC2'><span class="c">	 This include the project compiled source code and any 3rd party jar</span></div><div class='line' id='LC3'><span class="c">	 files. --&gt;</span></div><div class='line' id='LC4'><span class="nt">&lt;path</span> <span class="na">id=</span><span class="s">&quot;project.jars.ref&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC5'>	<span class="nt">&lt;pathelement</span> <span class="na">location=</span><span class="s">&quot;${preobfuscate.jar.file}&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC6'>	<span class="nt">&lt;path</span> <span class="na">refid=</span><span class="s">&quot;jar.libs.ref&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC7'><span class="nt">&lt;/path&gt;</span></div><div class='line' id='LC8'><span class="c">&lt;!-- Set the project jar files Path object into a single property. It&#39;ll be</span></div><div class='line' id='LC9'><span class="c">	 all the jar files separated by a platform path-separator.</span></div><div class='line' id='LC10'><span class="c">	 Each path must be quoted if it contains spaces.</span></div><div class='line' id='LC11'><span class="c">--&gt;</span></div><div class='line' id='LC12'><span class="nt">&lt;pathconvert</span> <span class="na">property=</span><span class="s">&quot;project.jars&quot;</span> <span class="na">refid=</span><span class="s">&quot;project.jars.ref&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC13'>	<span class="nt">&lt;firstmatchmapper&gt;</span></div><div class='line' id='LC14'>		<span class="nt">&lt;regexpmapper</span> <span class="na">from=</span><span class="s">&#39;^([^ ]*)( .*)$$&#39;</span> <span class="na">to=</span><span class="s">&#39;&quot;\1\2&quot;&#39;</span><span class="nt">/&gt;</span></div><div class='line' id='LC15'>		<span class="nt">&lt;identitymapper/&gt;</span></div><div class='line' id='LC16'>	<span class="nt">&lt;/firstmatchmapper&gt;</span></div><div class='line' id='LC17'><span class="nt">&lt;/pathconvert&gt;</span></div><div class='line' id='LC18'><br/></div><div class='line' id='LC19'><span class="nt">&lt;mkdir</span>   <span class="na">dir=</span><span class="s">&quot;${obfuscate.absolute.dir}&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC20'><span class="nt">&lt;delete</span> <span class="na">file=</span><span class="s">&quot;${preobfuscate.jar.file}&quot;</span><span class="nt">/&gt;</span></div><div class='line' id='LC21'><span class="nt">&lt;delete</span> <span class="na">file=</span><span class="s">&quot;${obfuscated.jar.file}&quot;</span><span class="nt">/&gt;</span></div><div class='line' id='LC22'><span class="nt">&lt;jar</span> <span class="na">basedir=</span><span class="s">&quot;${out.classes.absolute.dir}&quot;</span></div><div class='line' id='LC23'>	<span class="na">destfile=</span><span class="s">&quot;${preobfuscate.jar.file}&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC24'><span class="nt">&lt;proguard&gt;</span></div><div class='line' id='LC25'>	@${proguard.config}</div><div class='line' id='LC26'>	-injars       ${project.jars}</div><div class='line' id='LC27'>	-outjars      &quot;${obfuscated.jar.file}&quot;</div><div class='line' id='LC28'>	-libraryjars  ${android.libraryjars}</div><div class='line' id='LC29'>	-dump         &quot;${obfuscate.absolute.dir}/dump.txt&quot;</div><div class='line' id='LC30'>	-printseeds   &quot;${obfuscate.absolute.dir}/seeds.txt&quot;</div><div class='line' id='LC31'>	-printusage   &quot;${obfuscate.absolute.dir}/usage.txt&quot;</div><div class='line' id='LC32'>	-printmapping &quot;${obfuscate.absolute.dir}/mapping.txt&quot;</div><div class='line' id='LC33'><span class="nt">&lt;/proguard&gt;</span></div><div class='line' id='LC34'><br/></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1609994/8c75a7b26b990a696f30328ad0dda0c36b3b2ec2/gistfile1.xml" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1609994#file_gistfile1.xml" style="float:right;margin-right:10px;color:#666">gistfile1.xml</a>
            <a href="https://gist.github.com/1609994">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The directives above create a new object that combines the location of the compiled jar along with other jars that were used during compilation.  These locations are then joined into a string by the pathconvert task, which also does some transformation to ensure that paths containing spaces are quoted properly.  Finally, the string from pathconvert(stored in project.jars) is passed into proguard via the statement: "-injars       ${project.jars}"</p>
<p>This is the same section of my updated build.xml:<br />
<div id="gist-1609983" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="c">&lt;!-- Set the project jar files Path object into a single property. It&#39;ll be</span></div><div class='line' id='LC2'><span class="c">	 all the jar files separated by a platform path-separator.</span></div><div class='line' id='LC3'><span class="c">	 Each path must be quoted if it contains spaces.</span></div><div class='line' id='LC4'><span class="c">--&gt;</span></div><div class='line' id='LC5'><span class="nt">&lt;pathconvert</span> <span class="na">property=</span><span class="s">&quot;project.jars&quot;</span> <span class="na">refid=</span><span class="s">&quot;jar.libs.ref&quot;</span> <span class="na">pathsep=</span><span class="s">&quot; &quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC6'>	<span class="nt">&lt;firstmatchmapper&gt;</span></div><div class='line' id='LC7'>		<span class="nt">&lt;regexpmapper</span> <span class="na">from=</span><span class="s">&#39;^([^ ]*)( .*)$$&#39;</span> <span class="na">to=</span><span class="s">&#39;-injars &quot;\1\2&quot;(!META-INF/MANIFEST.MF)&#39;</span><span class="nt">/&gt;</span></div><div class='line' id='LC8'>		<span class="nt">&lt;regexpmapper</span> <span class="na">from=</span><span class="s">&#39;(.*)&#39;</span> <span class="na">to=</span><span class="s">&#39;-injars \1(!META-INF/MANIFEST.MF)&#39;</span><span class="nt">/&gt;</span></div><div class='line' id='LC9'>	<span class="nt">&lt;/firstmatchmapper&gt;</span></div><div class='line' id='LC10'><span class="nt">&lt;/pathconvert&gt;</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'><span class="nt">&lt;mkdir</span>   <span class="na">dir=</span><span class="s">&quot;${obfuscate.absolute.dir}&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC13'><span class="nt">&lt;delete</span> <span class="na">file=</span><span class="s">&quot;${preobfuscate.jar.file}&quot;</span><span class="nt">/&gt;</span></div><div class='line' id='LC14'><span class="nt">&lt;delete</span> <span class="na">file=</span><span class="s">&quot;${obfuscated.jar.file}&quot;</span><span class="nt">/&gt;</span></div><div class='line' id='LC15'><span class="nt">&lt;jar</span> <span class="na">basedir=</span><span class="s">&quot;${out.classes.absolute.dir}&quot;</span></div><div class='line' id='LC16'>	<span class="na">destfile=</span><span class="s">&quot;${preobfuscate.jar.file}&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC17'><span class="nt">&lt;proguard&gt;</span></div><div class='line' id='LC18'>	@${proguard.config}</div><div class='line' id='LC19'>	 -injars       ${preobfuscate.jar.file}</div><div class='line' id='LC20'>	 ${project.jars}</div><div class='line' id='LC21'>	-outjars      &quot;${obfuscated.jar.file}&quot;</div><div class='line' id='LC22'>	-libraryjars  ${android.libraryjars}</div><div class='line' id='LC23'>	-dump         &quot;${obfuscate.absolute.dir}/dump.txt&quot;</div><div class='line' id='LC24'>	-printseeds   &quot;${obfuscate.absolute.dir}/seeds.txt&quot;</div><div class='line' id='LC25'>	-printusage   &quot;${obfuscate.absolute.dir}/usage.txt&quot;</div><div class='line' id='LC26'>	-printmapping &quot;${obfuscate.absolute.dir}/mapping.txt&quot;</div><div class='line' id='LC27'><span class="nt">&lt;/proguard&gt;</span></div><div class='line' id='LC28'><br/></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1609983/832820b0384ca68520cfb281193feab816a78ade/gistfile1.xml" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1609983#file_gistfile1.xml" style="float:right;margin-right:10px;color:#666">gistfile1.xml</a>
            <a href="https://gist.github.com/1609983">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>
</p>
<p>The goal of my changes is to preserve the manifest files from the original jar("preobfuscate.jar.file") and ignore(filter) the manifest files from the remaining input jar files.  Since I haven't figured out how to filter input jars when passed in as a blob, I instead use the pathconvert task to transform each input jar location into a separate "-injars" statement with its own manifest filter.  The property containing these locations is then passed into ProGuard directly via: "${project.jars}"</p>
<p>The solution isn't as clean as I would have liked, but it does fix the warnings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancartoon.com/2012/01/14/fixing-proguard-warning-cant-write-resource-meta-infmanifest-mf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implicit vs Explicit Returns in Ruby</title>
		<link>http://www.dancartoon.com/2011/07/17/implicit-vs-explicit-returns-in-ruby/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=implicit-vs-explicit-returns-in-ruby</link>
		<comments>http://www.dancartoon.com/2011/07/17/implicit-vs-explicit-returns-in-ruby/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 03:47:42 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Gotchas]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.dancartoon.com/?p=19</guid>
		<description><![CDATA[Ruby supports implicit returns, i.e., the value of the last expression in a block/statement is what will be returned.  One might assume that  implicit returns and explicit returns(e.g. "return 123") are functionally equivalent.  Although this is often the case, there is a gotcha scenario when using an explicit return within a block.  In the following [...]]]></description>
			<content:encoded><![CDATA[<p>Ruby supports implicit returns, i.e., the value of the last expression in a block/statement is what will be returned.  One might assume that  implicit returns and explicit returns(e.g. "return 123") are functionally equivalent.  Although this is often the case, there is a gotcha scenario when using an explicit return within a block.  In the following Gist, an explicit return is used within a map block.  The result is that explicitReturn() will end up returning a single upper-case string("PANGOLIN"), rather than an array of upper-case strings.</p>
<div id="gist-1087082" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="c1"># Simple demonstration of an &#39;implicit&#39; return</span></div><div class='line' id='LC2'><span class="k">def</span> <span class="nf">implicitReturn</span><span class="p">()</span></div><div class='line' id='LC3'>&nbsp;&nbsp;<span class="s2">&quot;implicit return</span><span class="se">\n</span><span class="s2">&quot;</span></div><div class='line' id='LC4'><span class="k">end</span></div><div class='line' id='LC5'><br/></div><div class='line' id='LC6'><span class="c1"># Simple demonstration of an &#39;explicit&#39; return.  Using an explicit return,</span></div><div class='line' id='LC7'><span class="c1"># even within a block, will exit the function. </span></div><div class='line' id='LC8'><span class="k">def</span> <span class="nf">explicitReturn</span><span class="p">()</span></div><div class='line' id='LC9'>&nbsp;&nbsp;<span class="n">examples</span> <span class="o">=</span> <span class="o">[</span><span class="s2">&quot;pangolin&quot;</span><span class="p">,</span> <span class="s2">&quot;cat&quot;</span><span class="p">,</span> <span class="s2">&quot;macgyver&quot;</span><span class="o">]</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'>&nbsp;&nbsp;<span class="n">largerExamples</span> <span class="o">=</span> <span class="n">examples</span><span class="o">.</span><span class="n">map</span> <span class="p">{</span> <span class="o">|</span><span class="n">item</span><span class="o">|</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1"># Explicit return will return the first item in uppercase, rather than</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1"># allowing us to map our array </span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="n">upcase</span></div><div class='line' id='LC15'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC16'><br/></div><div class='line' id='LC17'>&nbsp;&nbsp;<span class="c1">#This line will not be executed</span></div><div class='line' id='LC18'>&nbsp;&nbsp;<span class="n">largerExamples</span></div><div class='line' id='LC19'><span class="k">end</span></div><div class='line' id='LC20'><br/></div><div class='line' id='LC21'><span class="nb">print</span> <span class="n">implicitReturn</span><span class="p">()</span> <span class="c1"># Output: implicit return</span></div><div class='line' id='LC22'><span class="nb">print</span> <span class="n">explicitReturn</span><span class="p">()</span> <span class="c1"># Output: PANGOLIN</span></div><div class='line' id='LC23'><br/></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1087082/44c6d4352f19af9d2eff60ddca89212ec1fac3bf/returns.rb" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1087082#file_returns.rb" style="float:right;margin-right:10px;color:#666">returns.rb</a>
            <a href="https://gist.github.com/1087082">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>On a semi-related note, Martin Hsu provided my Pangolin inspiration: <a href="http://www.martinhsu.com/pangolin-rider-p-50.html">http://www.martinhsu.com/pangolin-rider-p-50.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancartoon.com/2011/07/17/implicit-vs-explicit-returns-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fractal Rendering</title>
		<link>http://www.dancartoon.com/2011/01/02/fractal-rendering/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fractal-rendering</link>
		<comments>http://www.dancartoon.com/2011/01/02/fractal-rendering/#comments</comments>
		<pubDate>Sun, 02 Jan 2011 04:00:58 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Fractal]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mandelbrot]]></category>
		<category><![CDATA[Rendering]]></category>

		<guid isPermaLink="false">http://www.dancartoon.com/?p=7</guid>
		<description><![CDATA[I had some vacation time recently and wanted to explore HTML5/Canvas and fractals, so I wrote a basic JavaScript-based Mandelbrot renderer. The code is available in my GitHub repository, and the demo page is here. It takes about 10-15 seconds to render a single scene. This would be a good application for parallelization, but there's [...]]]></description>
			<content:encoded><![CDATA[<p>I had some vacation time recently and wanted to explore HTML5/Canvas and fractals, so I wrote a basic JavaScript-based Mandelbrot renderer.  The code is available in my GitHub <a href="https://github.com/dcartoon/Just-For-Fun/tree/master/fractals">repository</a>, and the demo page is <a href="http://dancartoon.com/projects/fractals/mandelbrot/mandelbrot.html">here</a>.  It takes about 10-15 seconds to render a single scene.  This would be a good application for parallelization, but there's generally only a single thread available to JavaScript within the browser.  Perhaps there's an opportunity to add support for HTML5 worker threads here.
<a href='http://www.dancartoon.com/2011/01/02/fractal-rendering/scaled_mandelbrot/' title='scaled_mandelbrot'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2011/01/scaled_mandelbrot-150x150.png" class="attachment-thumbnail" alt="scaled_mandelbrot" title="scaled_mandelbrot" /></a>
<a href='http://www.dancartoon.com/2011/01/02/fractal-rendering/scaled_mandelbrot1/' title='scaled_mandelbrot1'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2011/01/scaled_mandelbrot1-150x150.png" class="attachment-thumbnail" alt="scaled_mandelbrot1" title="scaled_mandelbrot1" /></a>
<a href='http://www.dancartoon.com/2011/01/02/fractal-rendering/scaled_mandelbrot2/' title='scaled_mandelbrot2'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2011/01/scaled_mandelbrot2-150x150.png" class="attachment-thumbnail" alt="scaled_mandelbrot2" title="scaled_mandelbrot2" /></a>
<a href='http://www.dancartoon.com/2011/01/02/fractal-rendering/scaled_mandelbrot3/' title='scaled_mandelbrot3'><img width="150" height="150" src="http://www.dancartoon.com/wp-content/uploads/2011/01/scaled_mandelbrot3-150x150.png" class="attachment-thumbnail" alt="scaled_mandelbrot3" title="scaled_mandelbrot3" /></a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancartoon.com/2011/01/02/fractal-rendering/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>printf(&#8220;Hello world!&#8221;);</title>
		<link>http://www.dancartoon.com/2010/12/19/hello-world/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hello-world</link>
		<comments>http://www.dancartoon.com/2010/12/19/hello-world/#comments</comments>
		<pubDate>Sun, 19 Dec 2010 21:35:28 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.dancartoon.com/?p=1</guid>
		<description><![CDATA[Time to start putting some new information on this site.  Expect something useful within the next few weeks.  Old content is still available at /old]]></description>
			<content:encoded><![CDATA[<p>Time to start putting some new information on this site.  Expect something useful within the next few weeks.  Old content is still available at <a href="http://www.dancartoon.com/old">/old</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dancartoon.com/2010/12/19/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

