<?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>The Fugue</title>
	<atom:link href="http://hans.fugal.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://hans.fugal.net/blog</link>
	<description>Counterpoint by Hans Fugal</description>
	<lastBuildDate>Tue, 02 Feb 2010 02:47:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Defeating the AC_CHECK_HEADER cache</title>
		<link>http://hans.fugal.net/blog/2010/02/02/defeating-the-ac_check_header-cache/</link>
		<comments>http://hans.fugal.net/blog/2010/02/02/defeating-the-ac_check_header-cache/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 02:47:52 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AC_CHECK_HEADER]]></category>
		<category><![CDATA[autotools]]></category>
		<category><![CDATA[cppflags]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/?p=1201</guid>
		<description><![CDATA[The AC_CHECK_HEADER macro caches its result, so if you want to call it again with a different CPPFLAGS it will just remember the result of the first execution.
If you want to defeat this cache, as I did, this is the pattern:

header=foo.h
cache_var=AS_TR_SH([ac_cv_header_$header])
...
AC_CHECK_HEADER([$header])
...
CPPFLAGS="-I/opt/local/include"
$as_unset $cache_var
AC_CHECK_HEADER([$header])
...

AS_TR_SH does the escaping (giving ac_cv_header_foo_h in this case), $as_unset is the portable way [...]]]></description>
			<content:encoded><![CDATA[<p>The <code>AC_CHECK_HEADER</code> macro caches its result, so if you want to call it again with a different <code>CPPFLAGS</code> it will just remember the result of the first execution.</p>
<p>If you want to defeat this cache, as I did, this is the pattern:<br />
<code><br />
header=foo.h<br />
cache_var=AS_TR_SH([ac_cv_header_$header])<br />
...<br />
AC_CHECK_HEADER([$header])<br />
...<br />
CPPFLAGS="-I/opt/local/include"<br />
$as_unset $cache_var<br />
AC_CHECK_HEADER([$header])<br />
...<br />
</code></p>
<p><code>AS_TR_SH</code> does the escaping (giving <code>ac_cv_header_foo_h</code> in this case), <code>$as_unset</code> is the portable way to unset a shell variable in autotools.</p>
<p>Incidentally, if you don&#8217;t restore <code>CPPFLAGS</code> to its original user-set value, I will hunt you down and shave your head.</p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2010/02/02/defeating-the-ac_check_header-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defeating the Anti-Autocomplete Demons</title>
		<link>http://hans.fugal.net/blog/2009/10/15/defeating-the-anti-autocomplete-demons/</link>
		<comments>http://hans.fugal.net/blog/2009/10/15/defeating-the-anti-autocomplete-demons/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 05:18:32 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/?p=1196</guid>
		<description><![CDATA[There are demons out there. They have sent their evil henchbugs to make my life difficult. The Santa Clara library login page for some unfathomable reason doesn&#8217;t trigger Firefox&#8217;s autocomplete. No, the HTML form doesn&#8217;t specify &#8220;autocomplete=off&#8221;. As far as I can tell, it&#8217;s just that Firefox doesn&#8217;t seem to think that my library barcode [...]]]></description>
			<content:encoded><![CDATA[<p>There are demons out there. They have sent their evil henchbugs to make my life difficult. The Santa Clara library login page for some unfathomable reason doesn&#8217;t trigger Firefox&#8217;s autocomplete. No, the HTML form doesn&#8217;t specify &#8220;autocomplete=off&#8221;. As far as I can tell, it&#8217;s just that Firefox doesn&#8217;t seem to think that my library barcode is worth remembering. Which is a real bummer because it&#8217;s impossible to remember and about as sensitive as the callus on my big toe.</p>
<p>So I got jiggy with <a href="https://addons.mozilla.org/en-US/firefox/addon/748">GreaseMonkey</a> and made my own autofill script:</p>
<p><code>// ==UserScript==<br />
// @name           Santa Clara Library Autocomplete<br />
// @namespace      http://hans.fugal.net/<br />
// @include        https://sccl.santaclaraca.gov/patroninfo*<br />
// ==/UserScript==<br />
name = document.getElementsByName('name')[0];<br />
code = document.getElementsByName('code')[0];<br />
name.value = 'Fred Flintstone';<br />
code.value = 'Your impossible-to-remember-barcode goes here';</code></p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/10/15/defeating-the-anti-autocomplete-demons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Graph-paper Weight Loss</title>
		<link>http://hans.fugal.net/blog/2009/10/12/graphpaper-weightloss/</link>
		<comments>http://hans.fugal.net/blog/2009/10/12/graphpaper-weightloss/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 17:16:47 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[diet]]></category>
		<category><![CDATA[excercise]]></category>
		<category><![CDATA[health]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[weight]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/?p=1189</guid>
		<description><![CDATA[I think I&#8217;ve posted on this before, but I want to post my method for weight loss again, and try to do it in as few words as possible this time. If you want more information about the principles upon which I based this method, read Total Fitness in 30 Minutes a Week by Laurence [...]]]></description>
			<content:encoded><![CDATA[<p>I think I&#8217;ve posted on this before, but I want to post my method for weight loss again, and try to do it in as few words as possible this time. If you want more information about the principles upon which I based this method, read Total Fitness in 30 Minutes a Week by Laurence Morehouse, and <a href="http://www.fourmilab.ch/hackdiet/">The Hacker&#8217;s Diet</a> by John Walker.</p>
<p>First, why you should care: I lost 40 pounds eating whatever I wanted and have kept it off even after joining Facebook and eating up to 3 meals a day at the gourmet buffet plus micro kitchens.</p>
<p>Second, why you may not care: you want to lose more than 2 lb / week (good luck with that) or you are a masochist.</p>
<p>Here&#8217;s what you need: a piece of graph paper, a pencil, and a bathroom scale (digital is best). Oh, and a little patience and a small amount of willpower (much less than your average diet requires). To set up all you need to do is draw a line in the corner that goes over 5 squares and down 1 square for a weight loss rate of 1 pound per 5 days, you can choose any weight loss or gain rate that you want as long as it&#8217;s not more than 2 pounds per week.  Obviously, the faster you lose the more willpower you need, but no matter how much willpower you have it won&#8217;t work if you go much over 2 pounds per week.</p>
<p>Here&#8217;s what you do every day: just after you wake up you use the bathroom and then step on the scale—before eating or drinking anything. Mark your weight on the graph paper. Then, imagine the line that best fits the marks for the past 5 days (least squares fit for you mathy types).</p>
<p>Is that line sloping down more steeply than your reference line?  Congratulations: you can eat as much of anything you want today. Don&#8217;t gorge yourself, but don&#8217;t fret it. Want that ice cream? Go for it. Candy bar? Sure.  Triple burger with guacamole? Ok, but think about making it a double man.</p>
<p>Is that line flatter than your reference line (or going up)?  Then today you still get to eat (almost) whatever you want! But, we need to restrict quantity. In specific, we need to eat about 500–800 calories less than your normal intake. You can accomplish this easily by eating smaller portions at meals and skipping dessert.</p>
<p>That&#8217;s it. Fast forward 1 year and if you have stuck with the plan you will have lost as much as 70 pounds. But we know life (and holidays) happens, so be realistic and figure you&#8217;ll fall off the horse a few times. No big deal, this system is designed to keep your morale up and recover gracefully. To be safe, expect 40 pounds per year, then be pleasantly surprised.</p>
<p>There is <em>no correlation</em> between what you eat today and what you weigh tomorrow. Well that&#8217;s technically a lie, but there are much bigger effects than what you ate. Your weight will fluctuate as much as 2 lb due to various effects. You have no control over this. The method is not relying on any correlation between today&#8217;s diet and tomorrow&#8217;s weight.  It is relying on the long-term effects of eating smaller portions approximately half the days (maybe even less). If you weigh more today it doesn&#8217;t mean you failed yesterday! If you weigh less today it doesn&#8217;t mean you succeeded yesterday! You have to take the long-term view and just stick with the program.</p>
<p>Now some short notes. First, exercise is a good idea. No, a great idea.  Although it&#8217;s not essential to this plan, I think you&#8217;ll find it helps you with appetite control and to just feel better all-around. Second, eating healthy doesn&#8217;t hurt either, obviously.</p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/10/12/graphpaper-weightloss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AC_TYPE_UINT8_T and friends</title>
		<link>http://hans.fugal.net/blog/2009/10/08/ac_type_uint8_t-and-friends/</link>
		<comments>http://hans.fugal.net/blog/2009/10/08/ac_type_uint8_t-and-friends/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 23:15:00 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[autoconf]]></category>
		<category><![CDATA[autotools]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[cs]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/2009/10/08/ac_type_uint8_t-and-friends</guid>
		<description><![CDATA[If you get errors like this:
$ autoreconf
configure.ac:110: error: possibly undefined macro: AC_TYPE_UINT8_T
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
configure.ac:111: error: possibly undefined macro: AC_TYPE_UINT16_T
configure.ac:112: error: possibly undefined macro: AC_TYPE_UINT32_T
configure.ac:113: error: possibly undefined macro: AC_TYPE_UINT64_T
configure.ac:115: error: possibly undefined macro: [...]]]></description>
			<content:encoded><![CDATA[<p>If you get errors like this:</p>
<p><code>$ autoreconf<br />
configure.ac:110: error: possibly undefined macro: AC_TYPE_UINT8_T<br />
      If this token and others are legitimate, please use m4_pattern_allow.<br />
      See the Autoconf documentation.<br />
configure.ac:111: error: possibly undefined macro: AC_TYPE_UINT16_T<br />
configure.ac:112: error: possibly undefined macro: AC_TYPE_UINT32_T<br />
configure.ac:113: error: possibly undefined macro: AC_TYPE_UINT64_T<br />
configure.ac:115: error: possibly undefined macro: AC_TYPE_SSIZE_T<br />
autoreconf: /usr/bin/autoconf failed with exit status: 1</code></p>
<p>It probably just means you have an old autoconf. These macros were introduced in autoconf 2.60. But it&#8217;s probably no big deal if you have a sensible <code>stdint.h</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/10/08/ac_type_uint8_t-and-friends/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EINVAL on sendmsg() to a UNIX Doman Socket</title>
		<link>http://hans.fugal.net/blog/2009/10/08/einval-on-sendmsg-to-a-unix-doman-socket/</link>
		<comments>http://hans.fugal.net/blog/2009/10/08/einval-on-sendmsg-to-a-unix-doman-socket/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 20:32:05 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[cs]]></category>
		<category><![CDATA[mystery]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[socket]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/2009/10/08/einval-on-sendmsg-to-a-unix-doman-socket</guid>
		<description><![CDATA[I&#8217;m seeing an EINVAL result when trying to do a sndmsg() call to a UNIX socket. The man page says that means that the sum of the iov_lens overflows an ssize_t, but an ssize_t is 8 bytes on this machine and there&#8217;s only one iov and its length is 671. Last I checked that doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m seeing an EINVAL result when trying to do a <code>sndmsg()</code> call to a UNIX socket. The man page says that means that the sum of the <code>iov_len</code>s overflows an <code>ssize_t</code>, but an <code>ssize_t</code> is 8 bytes on this machine and there&#8217;s only one iov and its length is 671. Last I checked that doesn&#8217;t overflow anything but a char. What gives? Same code works fine in Linux and when using UDP or TCP. </p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/10/08/einval-on-sendmsg-to-a-unix-doman-socket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SIGABRT and gdb</title>
		<link>http://hans.fugal.net/blog/2009/09/28/sigabrt-and-gdb/</link>
		<comments>http://hans.fugal.net/blog/2009/09/28/sigabrt-and-gdb/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 18:13:45 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[assert]]></category>
		<category><![CDATA[cs]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[SIGABRT]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/?p=1182</guid>
		<description><![CDATA[So you fire up gdb and pepper your code with assert() calls. Then one of your assertions fails and you see this:

Assertion failed: (item_idx < si.slabclass[clsid].perslab), function ITEM, file slabs_items.h, line 78.
Program received signal SIGABRT, Aborted.
0x00007fff83efab16 in kevent ()
(gdb)

Well shucks, you think you're screwed because gdb doesn't seem to have left you in a useful [...]]]></description>
			<content:encoded><![CDATA[<p>So you fire up gdb and pepper your code with <code>assert()</code> calls. Then one of your assertions fails and you see this:<br />
<code><br />
Assertion failed: (item_idx < si.slabclass[clsid].perslab), function ITEM, file slabs_items.h, line 78.<br />
Program received signal SIGABRT, Aborted.<br />
0x00007fff83efab16 in kevent ()<br />
(gdb)<br />
</code><br />
Well shucks, you think you're screwed because gdb doesn't seem to have left you in a useful state. So you investigate conditional breakpoints (that are a pain to set and don't seem want to work in inline functions), and generally beat yourself over the head for awhile.</p>
<p>Then you realize that gdb's throwing you out into a different thread, and your pretty backtrace <em>is</em> there for the exploring, you just have to switch to the right thread. Yeah, remember that. Then maybe you can set a breakpoint on the actual assert code (which you can find with the backtrace—it was <code>__assert_rtn()</code> in my case) so you're already in the right thread and just need to go up the backtrace one level to get to debugging goodness.</p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/09/28/sigabrt-and-gdb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rental Deposits</title>
		<link>http://hans.fugal.net/blog/2009/09/11/rental-deposits/</link>
		<comments>http://hans.fugal.net/blog/2009/09/11/rental-deposits/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 03:16:58 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/?p=1179</guid>
		<description><![CDATA[Dear Internets,
I seek your advice regarding rental deposits. We left the property in decent condition and the managers want to not only withhold our deposit but charge us $200 to boot. What are our rights?
When we moved to Las Cruces we got lucky and found a great place managed by a great company, Doña Ana [...]]]></description>
			<content:encoded><![CDATA[<p>Dear Internets,</p>
<p>I seek your advice regarding rental deposits. We left the property in decent condition and the managers want to not only withhold our deposit but charge us $200 to boot. What are our rights?</p>
<p>When we moved to Las Cruces we got lucky and found a great place managed by a great company, <a href='http://www.rentalsinlascruces.com/'>Doña Ana Properties</a>. Somewhere along the line, the property was sold and the new owner switched management to the unscrupulous <a href='http://mathers.fluxinnovations.com/'>Mathers Realty</a>. There was much mourning, but thankfully our stay remained uneventful until the end.</p>
<p>When we moved out everyone told us Mathers would weasel out of returning the deposit, so it came as no surprise when we received a bill in the mail explaining all the ways in which they deserved our money more than we did. What was surprising is that they didn&#8217;t stop at exhausting the deposit, but racked up an additional $200 in charges. They charged $100 for &#8220;repairs&#8221; such as &#8220;a towel [in the bathroom] needs to be removed,&#8221; &#8220;the blinds are broken,&#8221; (they had been replaced not two weeks earlier and were perfectly fine), &#8220;remove the pan from the oven,&#8221; (all our pans are accounted for—I&#8217;m not sure what they are talking about). Then they charged $95 to clean the carpet that we steam cleaned, and $95 for &#8220;janitorial services&#8221;—we left it clean.</p>
<p>There are a few things I would be (grudgingly) willing to give them: the blinds in the other bedroom that were broken but from normal wear and tear, a modest amount for painting (they charged $150, the lease said &#8220;minimum of $50&#8243;), a modest amount for &#8220;janitorial services&#8221;, etc. In fact, I&#8217;d be willing to let them take the whole deposit (we had written it off anyway, based on their reputation). But I really don&#8217;t want to send them a check.</p>
<p>Here is the only relevant text of the lease: &#8220;As a general rule, you will not be held financially responsible for repairs due to &#8216;normal wear and tear&#8217; or routing maintenance. YOU WILL BE HELD RESPONSIBLE FOR THE REPAIR OF DAMAGE DUE TO YOUR NEGLECT OR MIS-CONDUCT.&#8221; and &#8220;The deposit may be applied to recover losses, if any, suffered by reason of the Tenant&#8217;s non-compliance with this Rental Agreement including non-payment of rent. [...] Refund of your deposit is contingent upon the condition of the rental unit after vacated. The condition of the unit will be compared to its original condition as stated on the check-in list. (i.e. carpet shampooed, cleanliness, condition of walls, damages, etc.).  A minimum of $50.00 will be charged for painting upon move-out.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/09/11/rental-deposits/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Publishing Availability</title>
		<link>http://hans.fugal.net/blog/2009/09/10/publishing-availability/</link>
		<comments>http://hans.fugal.net/blog/2009/09/10/publishing-availability/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 16:18:52 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/?p=1177</guid>
		<description><![CDATA[I have a calendaring dream. I want to publish my availability somewhere where people can see it.
My calendaring at work happens on an Exchange server, which works really nicely with iCal in Snow Leopard. I also do some non-work scheduling with iCal. I shouldn&#8217;t publish details of work scheduling because that has the potential to [...]]]></description>
			<content:encoded><![CDATA[<p>I have a calendaring dream. I want to publish my availability somewhere where people can see it.</p>
<p>My calendaring at work happens on an Exchange server, which works really nicely with iCal in Snow Leopard. I also do some non-work scheduling with iCal. I shouldn&#8217;t publish details of work scheduling because that has the potential to leak sensitive information. But there should be no problem with publishing availability.</p>
<p>Alas, I can&#8217;t figure out how to publish the Exchange information from iCal at all. The publish item in the context menu is greyed out. Although that calendar does have &#8220;affects availability&#8221; checked, I can&#8217;t see any way to publish that availability for others to see, which kind of defeats the purpose of availability don&#8217;t you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/09/10/publishing-availability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git whereami</title>
		<link>http://hans.fugal.net/blog/2009/09/03/git-whereami/</link>
		<comments>http://hans.fugal.net/blog/2009/09/03/git-whereami/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 16:49:28 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/?p=1173</guid>
		<description><![CDATA[Update: I added git branch -a so that you can actually see where you are, and --since='2 months' so if your repo is huge like mine it doesn&#8217;t take 2 seconds to run. (The actual value of --since will probably need tweaking for your situation.)
Here&#8217;s the awesome git trick of the day:

# in ~/.gitconfig
[alias]
  [...]]]></description>
			<content:encoded><![CDATA[<p><em>Update:</em> I added <code>git branch -a</code> so that you can actually see where you are, and <code>--since='2 months'</code> so if your repo is huge like mine it doesn&#8217;t take 2 seconds to run. (The actual value of <code>--since</code> will probably need tweaking for your situation.)</p>
<p>Here&#8217;s the awesome git trick of the day:<br />
<code><br />
# in ~/.gitconfig<br />
[alias]<br />
    w = !git branch -a &#038;&#038; git log --branches --oneline --graph --decorate --simplify-by-decoration --since='2 months ago'<br />
</code></p>
<p><code><br />
$ git w<br />
* 0bfd287 (refs/remotes/git-svn, refs/heads/foo) commit message<br />
| * 0b5d8d4 (refs/heads/bar) another commit message<br />
|/<br />
| * 575185a (refs/heads/baz) YACM<br />
|/<br />
* b98de6b (refs/remotes/origin/master, refs/remotes/origin/HEAD) YACM<br />
* eadfbbe initial commit message<br />
</code></p>
<p>If you&#8217;re lucky enough to have a recent version of git, the <code>--decorate</code> option doesn&#8217;t print out the boring <code>refs/{remotes,heads}</code> stuff by default.</p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/09/03/git-whereami/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminal Merge Conflict Resolution</title>
		<link>http://hans.fugal.net/blog/2009/08/24/terminal-merge-conflict-resolution/</link>
		<comments>http://hans.fugal.net/blog/2009/08/24/terminal-merge-conflict-resolution/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 16:50:46 +0000</pubDate>
		<dc:creator>Hans</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[conflict]]></category>
		<category><![CDATA[cs]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[distributed]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[resolution]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://hans.fugal.net/blog/?p=1171</guid>
		<description><![CDATA[A very important tool in the toolbox of any collaborating developer is a merge conflict resolution tool. OS X has the fantastic FileMerge, there are various graphical tools for linux like kdiff3, but I have yet to hear of one for the terminal. There&#8217;s vimdiff, but it is really not up to the task of [...]]]></description>
			<content:encoded><![CDATA[<p>A very important tool in the toolbox of any collaborating developer is a merge conflict resolution tool. OS X has the fantastic FileMerge, there are various graphical tools for linux like kdiff3, but I have yet to hear of one for the terminal. There&#8217;s vimdiff, but it is really not up to the task of merge conflict resolution (doesn&#8217;t handle 3-way diffs). There&#8217;s probably something in emacs, just because there&#8217;s always something for emacs. Emacs users please enlighten me, I&#8217;m not above using emacs for merge-conflict resolution. Might even be the gateway drug.</p>
<p>It doesn&#8217;t seem overly hard (at least, no harder than writing kdiff3 or FileMerge) to make an ncurses tool that will take a 3-way merge and let you efficiently choose A, B, or edit for each diff section. Can it really be that nobody has done it yet?</p>
]]></content:encoded>
			<wfw:commentRss>http://hans.fugal.net/blog/2009/08/24/terminal-merge-conflict-resolution/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.232 seconds -->
<!-- Cached page generated by WP-Super-Cache on 2010-02-09 11:29:52 -->
