<?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>Vincent Gable's Blog &#187; Tips</title>
	<atom:link href="http://vgable.com/blog/category/tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://vgable.com/blog</link>
	<description>my weblog.</description>
	<lastBuildDate>Tue, 29 Nov 2011 22:20:23 +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>Retina Ready</title>
		<link>http://vgable.com/blog/2010/06/24/retina-ready/</link>
		<comments>http://vgable.com/blog/2010/06/24/retina-ready/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 07:18:41 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Displays]]></category>
		<category><![CDATA[Ed Tufte]]></category>
		<category><![CDATA[iPhone 4]]></category>
		<category><![CDATA[PPI]]></category>
		<category><![CDATA[Resolution]]></category>
		<category><![CDATA[Retina Display]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=628</guid>
		<description><![CDATA[The iPhone 4&#8242;s ultra-sharp &#8220;Retina Display&#8221; really is a game changer. Until now, popular computer screens have been so low resolution, they could only display crude, low density, designs. It will take a few years for such high resolution screens to filter up into the personal computer space. But if you start writing an application [...]]]></description>
			<content:encoded><![CDATA[<p>The iPhone 4&#8242;s ultra-sharp &#8220;<a href="http://www.apple.com/iphone/features/retina-display.html">Retina Display</a>&#8221; really is a game changer. Until now, popular computer screens have been so low resolution, they could only display crude, low density, designs. It will take a few years for such high resolution screens to filter up into the personal computer space. But if you start writing an application that takes advantage of the iPhone 4&#8242;s display now, there will be millions of people who can use it by the time you&#8217;re done.</p>
<p>The best source I can recommend for understanding the kinds of designs that take full advantage of high PPI displays are <a href="http://www.edwardtufte.com">Edward Tufte</a>&#8216;s classic design books:</p>
<p><iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=vincgabl-20&#038;o=1&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=10FE9736YVPPT7A0FBG2&#038;asins=0961392142" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> <iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=vincgabl-20&#038;o=1&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=10FE9736YVPPT7A0FBG2&#038;asins=0961392126" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> <iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=vincgabl-20&#038;o=1&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=10FE9736YVPPT7A0FBG2&#038;asins=0961392118" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe> <iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=vincgabl-20&#038;o=1&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=10FE9736YVPPT7A0FBG2&#038;asins=0961392177" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>If you just get one, make it <a href="http://www.amazon.com/dp/0961392142?tag=vincgabl-20&#038;camp=213381&#038;creative=390973&#038;linkCode=as4&#038;creativeASIN=0961392142&#038;adid=1J3BGS86B6S6D1T92B5Y&#038;"><cite>The Visual Display of Quantitative Information</cite></a>.</p>
<p>PS: Tufte&#8217;s books are themselves examples of beautiful, complex, high density design, and as such really only make sense printed. At least for the next few years. Even if you can find an electronic version, I wouldn&#8217;t recommend reading it, because it won&#8217;t convey the power of a 1600 PPI display (printer).</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2010/06/24/retina-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>N.A.R.C.</title>
		<link>http://vgable.com/blog/2010/05/19/n-a-r-c/</link>
		<comments>http://vgable.com/blog/2010/05/19/n-a-r-c/#comments</comments>
		<pubDate>Thu, 20 May 2010 03:25:48 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[autorelease]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Memory Management]]></category>
		<category><![CDATA[retain]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=601</guid>
		<description><![CDATA[How to remember Cocoa memory management: Think NARC: &#8220;New Alloc Retain Copy&#8221;. If you are not doing any of those things, you don&#8217;t need to release. &#8211;Andiih on Stack Overflow Personally, I like to immediately autorelease anything I NARC-ed, on the same line. For example: Foo* pityTheFoo = [[[Foo alloc] init] autorelease]; Admittedly, this makes [...]]]></description>
			<content:encoded><![CDATA[<p>How to remember Cocoa memory management:</p>
<blockquote><p>Think <strong>NARC</strong>: &#8220;New Alloc Retain Copy&#8221;. If you are not doing any of those things, you don&#8217;t need to <code>release</code>.</p></blockquote>
<p>&#8211;Andiih <a href="http://stackoverflow.com/questions/2865185/do-you-need-to-release-parameters-of-methods-at-the-end-of-them-in-objective-c">on Stack Overflow</a></p>
<p>Personally, I like to <em>immediately</em> <code>autorelease</code> anything I NARC-ed, on the same line. For example:</p>
<pre>Foo* pityTheFoo = [[[Foo alloc] init] autorelease];</pre>
<p>Admittedly, this makes for some ugly, bracey, lines. But I think it&#8217;s worth it, because you <em>never</em> having to worry about calling <code>release</code> if you also&#8230;</p>
<h3>Use a <code>@property</code> (or Setter) Instead of <code>retain</code></h3>
<p>In other words I would write an <code>init</code> method that looked like:</p>
<pre>
- (id) init
{
	self = [super init];
	if (self) {
		_ivar = [[Foo alloc] init];
	}
	return self;
}</pre>
<p>as:</p>
<pre>
- (id) init
{
	self = [super init];
	if (self) {
		self._ivar = [[[Foo alloc] init] autorelease];
	}
	return self;
}
</pre>
<p>(Or <code>[self setIvar:[[[Foo alloc] init] autorelease]];</code> if you are one of those folks who hate the dot-syntax.)</p>
<p>It&#8217;s  debatable if <a href="http://www.mikeash.com/pyblog/friday-qa-2009-11-27-using-accessors-in-init-and-dealloc.html">using acessors in <code>init</code> and <code>dealloc</code></a> is a good idea. I even left a comment on that post arguing against it. But since then I&#8217;ve done a lot of reflection, and in my experience using a <code>@property</code> instead of an explicit <code>release</code>/<code>= nil</code> solves more problems then it causes. So I think it&#8217;s the best practice.</p>
<p>Even if you disagree with me on that point, if <strong>the only places you explicitly NARC objects are <code>init</code>, <code>dealloc</code>, and <code>setX:</code> methods</strong> then I think you&#8217;re doing the right thing.</p>
<h3>Cycles!</h3>
<p>The last piece of the memory-management puzzle are <a href="http://www.mikeash.com/pyblog/friday-qa-2010-04-30-dealing-with-retain-cycles.html">retain cycles</a>. By far the best advice I&#8217;ve seen on them is  <a href="http://www.mikeash.com/pyblog/friday-qa-2010-04-30-dealing-with-retain-cycles.html">Mike Ash&#8217;s article</a>. Read it.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2010/05/19/n-a-r-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>What Am I About To Call?</title>
		<link>http://vgable.com/blog/2010/04/29/what-am-i-about-to-call/</link>
		<comments>http://vgable.com/blog/2010/04/29/what-am-i-about-to-call/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 02:40:10 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[x86]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=597</guid>
		<description><![CDATA[Say you&#8217;re in gdb, and about to execute a call instruction for dyld_stub_objc_msgSend, how do you know what&#8217;s about to happen? On i386 (gdb) x/s *(SEL*)($esp+4) tells you the message that&#8217;s about to be sent. (gdb) po *(id*)$esp tells you the target object that&#8217;s about to get the message.]]></description>
			<content:encoded><![CDATA[<p>Say you&#8217;re in gdb, and about to execute a <code>call</code> instruction for <code>dyld_stub_objc_msgSend</code>, how do you know what&#8217;s about to happen?</p>
<h3>On i386</h3>
<pre>(gdb) x/s *(SEL*)($esp+4)</pre>
<p>tells you the <strong>message</strong> that&#8217;s about to be sent.</p>
<pre>(gdb) po *(id*)$esp</pre>
<p>tells you the <strong>target</strong> object that&#8217;s about to get the message.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2010/04/29/what-am-i-about-to-call/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cut To The Chase</title>
		<link>http://vgable.com/blog/2009/11/17/cut-to-the-chase/</link>
		<comments>http://vgable.com/blog/2009/11/17/cut-to-the-chase/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 01:59:42 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Movies]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=505</guid>
		<description><![CDATA[YouTubeTime.com makes it easy to link to a specific time in a YouTube video. Do It Yourself Example To link to 2 minutes &#038; 14 seconds into this video of dancing in a Microsoft store, http://www.youtube.com/watch?v=TSAXEVXvNz8, add #t=2m14s to the end of the url: http://www.youtube.com/watch?v=TSAXEVXvNz8#t=2m14s. Did you catch the shoplifting? (via @codinghorror)]]></description>
			<content:encoded><![CDATA[<p><a href="http://youtubetime.com/">YouTubeTime.com</a> makes it easy to link to <em>a specific time</em> in a YouTube video.</p>
<h3>Do It Yourself Example</h3>
<p>To link to 2 minutes &#038; 14 seconds into this video of dancing in a Microsoft store, <a href="http://www.youtube.com/watch?v=TSAXEVXvNz8">http://www.youtube.com/watch?v=TSAXEVXvNz8</a>, add <code>#t=2m14s</code> to the end of the url:<br />
<a href="http://www.youtube.com/watch?v=TSAXEVXvNz8#t=2m14s">http://www.youtube.com/watch?v=TSAXEVXvNz8<strong>#t=2m14s</strong></a>.</p>
<p>Did you catch the shoplifting? (via <a href="http://twitter.com/codinghorror">@codinghorror</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/11/17/cut-to-the-chase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You Can&#8217;t Please Everyone</title>
		<link>http://vgable.com/blog/2009/11/14/you-cant-please-everyone/</link>
		<comments>http://vgable.com/blog/2009/11/14/you-cant-please-everyone/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 19:07:07 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Charlie Todd]]></category>
		<category><![CDATA[Compromises]]></category>
		<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=501</guid>
		<description><![CDATA[I did a project years ago called the &#8220;Dollar Dudes&#8221;, where we got on the subway with a bucket of dollar bills and announced that we were in the lucky &#8220;Dollar Train&#8221; and that everyone gets a dollar. Most everyone was delighted (at both the dollar and the ridiculousness of it all) but one guy [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>I did a project years ago called the &#8220;Dollar Dudes&#8221;, where <strong>we got on the subway with a bucket of dollar bills and announced that we were in the lucky &#8220;Dollar Train&#8221; and that everyone gets a dollar</strong>. Most everyone was delighted (at both the dollar and the ridiculousness of it all) <strong>but one guy refused to take the money and snapped at me</strong>. I was bummed out to get that reaction, but at the end of the day I didn&#8217;t feel that one guy getting irritated made the whole project a failure. The other 40 people had fun. I imagine the type of person who gets mad when offered a dollar by a stranger probably gets mad quite a bit throughout his day. I&#8217;m not trying or pretending to please every single person we encounter. </p></blockquote>
<p>&#8211;<a href="http://paulftompkins.com/blog_detail.php?id=46">Charlie Todd</a> (of <a href="http://improveverywhere.com/">Improv Everywhere</a> fame)</p>
<p>Yes, handing out a bucket of money really does upset someone. You have no chance of pleasing everyone. Make tradeoffs accordingly.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/11/14/you-cant-please-everyone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sizeof() Style</title>
		<link>http://vgable.com/blog/2009/10/19/sizeof-style/</link>
		<comments>http://vgable.com/blog/2009/10/19/sizeof-style/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 17:23:26 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Bug Bite]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Programming Style]]></category>
		<category><![CDATA[sizeof]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=460</guid>
		<description><![CDATA[Never say sizeof(sometype) when you can say sizeof(a_variable). The latter works even if the type of a_variable changes, and it is much more obvious what the size is supposed to represent.]]></description>
			<content:encoded><![CDATA[<p>Never say <code>sizeof(sometype)</code> when you can say <code>sizeof(a_variable)</code>.  The latter works even if the type of <code>a_variable</code> changes, and it is much more obvious what the size is supposed to represent.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/10/19/sizeof-style/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Check malloc()</title>
		<link>http://vgable.com/blog/2009/10/12/dont-check-malloc/</link>
		<comments>http://vgable.com/blog/2009/10/12/dont-check-malloc/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 01:25:21 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[malloc]]></category>
		<category><![CDATA[Mike Ash]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=434</guid>
		<description><![CDATA[There&#8217;s no point in trying to recover from a malloc failure on OS X, because by the time you detect the failure and try to recover, your process is likely to already be doomed. There&#8217;s no need to do your own logging, because malloc itself does a good job of that. And finally there&#8217;s no [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>There&#8217;s no point in trying to recover from a <code>malloc</code> failure on OS X, because by the time you detect the failure and try to recover, your process is likely to already be doomed. There&#8217;s no need to do your own logging, because <code>malloc</code> itself does a good job of that. And finally there&#8217;s no real need to even explicitly abort, because any <code>malloc</code> failure is virtually guaranteed to result in an instantaneous crash with a good stack trace.</p></blockquote>
<p>&#8211;<a href="http://www.mikeash.com/?page=pyblog/friday-qa-2009-10-09-defensive-programming.html">Mike Ash</a></p>
<p>This is <em>excellent advice</em>. Peppering your code with <code>if</code> statements harms readability and simplicity.</p>
<p>It&#8217;s still a good idea to check large (many MB) <code>malloc</code>s, but I can&#8217;t imagine recovering gracefully from a situation where 32 byte memory allocations are failing on a modern desktop.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/10/12/dont-check-malloc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Mosquito Bite Remedy</title>
		<link>http://vgable.com/blog/2009/09/21/best-mosquito-bite-remedy/</link>
		<comments>http://vgable.com/blog/2009/09/21/best-mosquito-bite-remedy/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 17:30:19 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Medical]]></category>
		<category><![CDATA[Mosquito]]></category>
		<category><![CDATA[Witch-Hazel]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=405</guid>
		<description><![CDATA[The past few rainy days here in Austin have been a welcome respite from the drought, but it means mosquitoes. The best remedy I know for a mosquito bite is Thayer&#8217;s Superhazel, Most importantly, it numbs mosquito bites quickly, and seems to help reduce swelling. It&#8217;s most effective for me when I use a little [...]]]></description>
			<content:encoded><![CDATA[<p>The past few rainy days here in Austin have been a welcome respite from the <a href="http://online.wsj.com/article/SB124872939604384837.html">drought</a>, but it means mosquitoes.  The best remedy I know for a mosquito bite is <a href="http://www.amazon.com/dp/B000Z94ZDY?tag=vincgabl-20&#038;camp=213381&#038;creative=390973&#038;linkCode=as4&#038;creativeASIN=B000Z94ZDY&#038;adid=13C4AGVM9WPVDJCABHPS&#038;">Thayer&#8217;s Superhazel</a>,</p>
<p><iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=vincgabl-20&#038;o=1&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=10FE9736YVPPT7A0FBG2&#038;asins=B000Z94ZDY" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>Most importantly, it numbs mosquito bites <em>quickly</em>, and seems to help reduce swelling. It&#8217;s most effective for me when I use a <a href="http://www.amazon.com/gp/product/B001FAT9MY?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B001FAT9MY">little spray bottle</a> to apply it; then blow on the bite or put it under a fan. Airflow + menthol = instant relief.</p>
<p><strong>What do <em>you</em> think works best for treating mosquito bites</strong>?</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/09/21/best-mosquito-bite-remedy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fair Coin Tosses</title>
		<link>http://vgable.com/blog/2009/08/28/fair-coin-tosses/</link>
		<comments>http://vgable.com/blog/2009/08/28/fair-coin-tosses/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 13:06:15 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Coins]]></category>
		<category><![CDATA[Decisions]]></category>
		<category><![CDATA[Gambling]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=383</guid>
		<description><![CDATA[Flipping a coin is, ever so slightly, unfair. As this article (via) points out, there is a bias for a coin to land on the same side it started on. Fortunately, all the biases coins have are systemic biases &#8212; they effect all similar coins the same way. So, with a fair thrower, it&#8217;s possible [...]]]></description>
			<content:encoded><![CDATA[<p>Flipping a coin is, ever so slightly, unfair. As <a href="http://www.codingthewheel.com/archives/the-coin-flip-a-fundamentally-unfair-proposition">this article</a> (<a href="http://www.schneier.com/blog/archives/2009/08/non-randomness.html">via</a>) points out, <strong>there is a bias for a coin to land on the same side it started on</strong>.</p>
<p>Fortunately, all the biases coins have are <em>systemic biases</em> &#8212; they effect all similar coins the same way.</p>
<p>So, with a fair thrower, <strong> it&#8217;s possible to flip twice, and have the bias of the two throws cancel each other out.<br />
</strong> </p>
<h3>Procedure</h3>
<ol>
<li>Put a coin heads-up, and flip it, as you normally would.</li>
<li>Note the result, if certified this will be the decision.</li>
<li>Flip the coin again, <em>exactly</em> as you did in step 1.</li>
<li>If the coin lands on the <em>opposite</em> side as it did in step 2, the result from step 2 is certified. Otherwise, restart from step 1.</li>
</ol>
<p>For maximum fairness and reproducibility, it&#8217;s best to let the coin land on the floor.</p>
<h3>Why This Works</h3>
<p>To simplify discussion, let&#8217;s call the sides of the coin <em>unlikely</em> (U) and <em>likely</em> (L) instead of heads &#038; tails.</p>
<p>There are only 4 possible results to a pair of coin tosses: UU, UL, LU, LL. Obviously LL is most likely, and UU is least likely, so we rethrow if we get either (steps 3-4). That means the only &#8220;certified&#8221; results are UL or LU, and <strong>the odds of getting UL are the same as getting LU</strong>.</p>
<h3>Dexterous Cheating</h3>
<p>Unfortunately, this is not a <a href="http://www.schneier.com/blog/archives/2009/08/self-enforcing.html">self-enforcing protocol</a>, so if the thrower is <a href="http://www.amazon.com/gp/product/630505214X?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=630505214X">skillful enough</a>, they can make the second throw go however they like, and keep re-throwing until they get the result they want.</p>
<p>Fortunately, most people aren&#8217;t able to manipulate a coin-toss. If you are worried that someone else is, then only let them flip once, and call the result in the air &#8212; that way they won&#8217;t know which side to pick.  </p>
<p>If <em>you</em> can throw the result, and can&#8217;t find someone else to call the result &#8212; it serves you right for driving away all your friends by cheating at coin tosses, you tosser. But I&#8217;m still impressed.</p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/08/28/fair-coin-tosses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best First Straight Razor</title>
		<link>http://vgable.com/blog/2009/08/16/best-first-straight-razor/</link>
		<comments>http://vgable.com/blog/2009/08/16/best-first-straight-razor/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 02:29:55 +0000</pubDate>
		<dc:creator>Vincent Gable</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Advice]]></category>
		<category><![CDATA[Shaving]]></category>
		<category><![CDATA[Straight Razor]]></category>
		<category><![CDATA[Wet Shaving]]></category>

		<guid isPermaLink="false">http://vgable.com/blog/?p=371</guid>
		<description><![CDATA[As I&#8217;ve said before, I sometimes shave with a straight razor. Honestly, straight razors are worse than safety razors by just about any metric you pick1 &#8212; except the most important one: fun. They turn a 40 second routine into a 40 minute ritual. It takes more work, to get a slightly coarser cut, but [...]]]></description>
			<content:encoded><![CDATA[<p>As <a href="http://vgable.com/blog/2009/02/19/sustainable-design/">I&#8217;ve said before</a>, I sometimes shave with a straight razor. Honestly, straight razors are worse than safety razors by just about any metric you pick<sup>1</sup> &#8212; except the most important one: <em>fun</em>. </p>
<p>They turn a 40 second routine into a 40 minute <em>ritual</em>. It takes more work, to get a slightly coarser cut, but when I&#8217;m done I feel pampered yet accomplished. Kind of like if I went to an invigorating spa, but actually <em>made</em> something instead of relaxing.</p>
<p>If you are thinking about trying straight razor shaving, here&#8217;s my advice on what razor to try first.</p>
<h3>The Good</h3>
<p><iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=vincgabl-20&#038;o=1&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=10FE9736YVPPT7A0FBG2&#038;asins=B0002WRKWW" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>The <a href="http://www.amazon.com/gp/product/B0002WRKWW?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B0002WRKWW">Hess EZY Shave Razor</a> is the best all-around razor to see if straight-razor shaving is for you.</p>
<p>It&#8217;s <strong>easy to maintain</strong>, because it takes <a href="http://www.amazon.com/gp/product/B000Q7DYUK?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B000Q7DYUK">disposable blades</a>. No sharpening or stropping required.</p>
<p>It has <strong>exactly the same size and ergonomics as a real straight razor</strong>.</p>
<p>Of course, the blade is different. But the long and stiff <a href="http://www.amazon.com/gp/product/B000Q7DYUK?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B000Q7DYUK">hair shaper blades</a> it takes aren&#8217;t too far off.</p>
<p><strong>It&#8217;s affordable</strong>, and not just the sticker price. Because, it takes <strong>easy-to-find <a href="">&#8220;injector&#8221; blades</a></strong> <em>as well</em> as <a href="http://www.amazon.com/gp/product/B000Q7DYUK?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B000Q7DYUK">hair shaper blades</a>, it&#8217;s affordable to keep using. (Tip: to find cheap injector blades, look for &#8220;<a href="http://www.texasbeautysupplies.com/sku001522.html">mini shaper blades</a>&#8220;, they are the same thing, but without the &#8220;key&#8221; for loading into an injector razor).</p>
<p>I&#8217;ve been throughly satisfied with my <a href="http://www.amazon.com/gp/product/B0002WRKWW?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B0002WRKWW">EZY Shave</a>, and I still use it today. It&#8217;s handy for trimming places like the upper lip, that are difficult to reach with a safety razor.</p>
<h3>The Bad</h3>
<p>Actually, this is <strong>the cheap</strong>.</p>
<p><iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=vincgabl-20&#038;o=1&#038;p=8&#038;l=as1&#038;m=amazon&#038;f=ifr&#038;md=10FE9736YVPPT7A0FBG2&#038;asins=B0020J7KSO" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p><a href="http://www.amazon.com/gp/product/B0020J7KSO?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B0020J7KSO">FROMM Hair Shapers</a> can be had for $3 to $7. <strong>Check your local beauty supply store first</strong>, so you don&#8217;t pay more in shipping than the razor itself costs!</p>
<p>LIke the  <a href="http://www.amazon.com/gp/product/B0002WRKWW?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B0002WRKWW">EZY Shave</a>, it uses <a href="http://www.amazon.com/gp/product/B000Q7DYUK?ie=UTF8&#038;tag=vincgabl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=B000Q7DYUK">disposable hair shaper blades</a>, so it&#8217;s <strong>easy to maintain</strong>.</p>
<p>This little fellow isn&#8217;t made for shaving, and it feels cheap, but when you take the guard off, it works … well enough. I&#8217;ve gotten descent shaves from one. The ergonomics aren&#8217;t exactly like a real straight razor, but they are close enough to give you a feel for what using one is like.</p>
<p>The bottom line is that it&#8217;s such a <strong>small investment</strong> that there&#8217;s very little risk in trying the FROMM. If all else fails, <strong>it&#8217;s still a perfectly good hair shaper</strong>. I still use mine to trim my sideburns.</p>
<h3>The Ugly</h3>
<p>Another good option is to ask around on forums like <a href="http://www.straightrazorplace.com/">Straight Razor Place</a>, and see if an old-timer will sell you a no-frills shave-ready razor on the cheap ($10-$30).</p>
<p>The disadvantage of starting with the real thing, is that it adds more variables, and you&#8217;ll need to get a <a href="http://badgerandblade.com/vb/forumdisplay.php?f=81">strop</a> to prepare the razor for each shave. (Sorry, I don&#8217;t know any good deals on strops, try a local knife shop.) </p>
<p>In other words, you&#8217;ll have to learn how to shave <em>and maintain</em> a straight razor. Bad stropping technique will dull a blade, or make it uncomfortable to use. That means more to go wrong. It also means one more thing to rule out as the cause of a bad shave, making it harder to evaluate the experience.</p>
<p>This is how I learned to use a straight razor. In retrospect, I don&#8217;t think it was the wisest way to go. But for many people, you haven&#8217;t tried something, unless you&#8217;ve really tried <em>it</em>.</p>
<p><sup>1</sup><small><a href="http://www.straightrazorplace.com/">Some folks</a> really believe a straight razor gives the closest (and yes, most nick free) shaves of their lives. I&#8217;m not one of them. I don&#8217;t think most people who&#8217;ve tried a straight razor are. That&#8217;s not to say true believers are wrong &#8212; preparing and using a bare blade give you ultimate control of <em>every</em> aspect of the shave. But machines still make sharper blades, while people inevitably make mistakes. And in my experience, some nooks and curves (eg. bottom of chin) can be reached <em>better</em> with a safety razor.<br />
</small></p>
]]></content:encoded>
			<wfw:commentRss>http://vgable.com/blog/2009/08/16/best-first-straight-razor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

