<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments for SIGPIPE 13</title>
	<atom:link href="http://sigpipe.macromates.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://sigpipe.macromates.com</link>
	<description>Programming and using OS X</description>
	<lastBuildDate>Mon, 15 Mar 2010 23:15:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Comment on Build Automation Part 2 by Frank J. Mattia</title>
		<link>http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25677</link>
		<dc:creator>Frank J. Mattia</dc:creator>
		<pubDate>Mon, 15 Mar 2010 23:15:26 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25677</guid>
		<description>&lt;p&gt;Thanks for the clarification on that - makes a little more sense now.
Can&#039;t wait to read the rest of this series (and I can&#039;t wait for tm2... but I know, good things take time).&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Thanks for the clarification on that &#8211; makes a little more sense now.
Can&#039;t wait to read the rest of this series (and I can&#039;t wait for tm2&#8230; but I know, good things take time).</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Build Automation Part 2 by Allan Odgaard</title>
		<link>http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25676</link>
		<dc:creator>Allan Odgaard</dc:creator>
		<pubDate>Mon, 15 Mar 2010 08:01:38 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25676</guid>
		<description>&lt;p&gt;Frank: Generating rake files does not make a lot of sense.&lt;/p&gt;

&lt;p&gt;The reason you want to generate make files is that with make you are specifying every single goal, its dependencies, etc. (I am ignoring pattern rules).&lt;/p&gt;

&lt;p&gt;But for many projects this is redundant, e.g. I have one project with a lot of libraries and to “build” a library all that matters is that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It is a library (as opposed to an application).&lt;/li&gt;
&lt;li&gt;Which sources it is built from.&lt;/li&gt;
&lt;li&gt;What it should be linked with.&lt;/li&gt;
&lt;li&gt;Potential resources (making it a framework, if any).&lt;/li&gt;
&lt;li&gt;Potential unit tests.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As for #2 and #5 I probably want to specify that as simple globs (e.g. &lt;code&gt;src/*.cc&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Providing the above information can be done fairly simple and a make file can then be generated from that information — so that is the motivation for generating make files, i.e. find the best abstraction for what you want to specify, then use make more or less as an implementation detail, as make is a very good engine for carrying out the actual build and with some clever setup, you can make it appear as you only interact with one system (make) which will automatically rebuild make files when required.&lt;/p&gt;

&lt;p&gt;So generating a rake file would only be if you feel that rake is not a good way to express your current tasks, but if that is the case, I would argue you’re much better off then generating make files, unless you want ruby in your new abstraction (which I personally would strongly discourage as it should be kept declarative if at all possible).&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Frank: Generating rake files does not make a lot of sense.</p>

<p>The reason you want to generate make files is that with make you are specifying every single goal, its dependencies, etc. (I am ignoring pattern rules).</p>

<p>But for many projects this is redundant, e.g. I have one project with a lot of libraries and to “build” a library all that matters is that:</p>

<ol>
<li>It is a library (as opposed to an application).</li>
<li>Which sources it is built from.</li>
<li>What it should be linked with.</li>
<li>Potential resources (making it a framework, if any).</li>
<li>Potential unit tests.</li>
</ol>

<p>As for #2 and #5 I probably want to specify that as simple globs (e.g. <code>src/*.cc</code>).</p>

<p>Providing the above information can be done fairly simple and a make file can then be generated from that information — so that is the motivation for generating make files, i.e. find the best abstraction for what you want to specify, then use make more or less as an implementation detail, as make is a very good engine for carrying out the actual build and with some clever setup, you can make it appear as you only interact with one system (make) which will automatically rebuild make files when required.</p>

<p>So generating a rake file would only be if you feel that rake is not a good way to express your current tasks, but if that is the case, I would argue you’re much better off then generating make files, unless you want ruby in your new abstraction (which I personally would strongly discourage as it should be kept declarative if at all possible).</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Build Automation Part 2 by Frank J. Mattia</title>
		<link>http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25675</link>
		<dc:creator>Frank J. Mattia</dc:creator>
		<pubDate>Mon, 15 Mar 2010 00:29:14 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25675</guid>
		<description>&lt;p&gt;I&#039;ve never really done any programming that required a make file for building (my main languages are web related, html/js/ruby) but I did attempt to learn make. One thing I was never able to do was successfully auto-generate make files. Eventually I just gave up (was only trying to put another tool in my belt) and stuck with compiling the few things I ever made by hand. Now that I do a lot of ruby work I&#039;ve grown very fond of rake - even to the extent that I have a rakefile in my home directory (os x) to handle various things related to setting up my development environments. I&#039;m not sure if auto-generating rake files a regular practice but if it were possible - I wonder how it would compare to the make build environment.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I&#039;ve never really done any programming that required a make file for building (my main languages are web related, html/js/ruby) but I did attempt to learn make. One thing I was never able to do was successfully auto-generate make files. Eventually I just gave up (was only trying to put another tool in my belt) and stuck with compiling the few things I ever made by hand. Now that I do a lot of ruby work I&#039;ve grown very fond of rake &#8211; even to the extent that I have a rakefile in my home directory (os x) to handle various things related to setting up my development environments. I&#039;m not sure if auto-generating rake files a regular practice but if it were possible &#8211; I wonder how it would compare to the make build environment.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Build Automation Part 2 by Michel Fortin</title>
		<link>http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25674</link>
		<dc:creator>Michel Fortin</dc:creator>
		<pubDate>Sun, 24 Jan 2010 01:03:20 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25674</guid>
		<description>&lt;p&gt;There&#039;s an easy way to make targets depend on each other too: drag a target under another in the project outline. That&#039;s the standard way to include unit tests in an Xcode project: make the final target dependent on successful built and execution of the unit test.&lt;/p&gt;

&lt;p&gt;I don&#039;t want to discredit Makefiles. I like &lt;code&gt;make&lt;/code&gt; as a simple and very portable build tool. That&#039;s especially true for build processes involving a lot of small non-repeated scripts. While you can include scripts in your build process with Xcode, it&#039;s more tiresome to edit and manage through the GUI than with a plain old Makefile.&lt;/p&gt;

&lt;p&gt;I look forward reading your next parts, especially the one about auto-generating Makefiles.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>There&#039;s an easy way to make targets depend on each other too: drag a target under another in the project outline. That&#039;s the standard way to include unit tests in an Xcode project: make the final target dependent on successful built and execution of the unit test.</p>

<p>I don&#039;t want to discredit Makefiles. I like <code>make</code> as a simple and very portable build tool. That&#039;s especially true for build processes involving a lot of small non-repeated scripts. While you can include scripts in your build process with Xcode, it&#039;s more tiresome to edit and manage through the GUI than with a plain old Makefile.</p>

<p>I look forward reading your next parts, especially the one about auto-generating Makefiles.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Build Automation Part 2 by Allan Odgaard</title>
		<link>http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25673</link>
		<dc:creator>Allan Odgaard</dc:creator>
		<pubDate>Sat, 23 Jan 2010 21:53:42 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25673</guid>
		<description>&lt;p&gt;Apologies, it has been ages since I actively used Xcode. The dependency feature may be new or I simply overlooked it.&lt;/p&gt;

&lt;p&gt;That said, I still think it will be an unwieldy exercise since the application and the framework are two different (Xcode) targets and we want the application to depend on the unit test, and the unit test to depend on the framework.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Apologies, it has been ages since I actively used Xcode. The dependency feature may be new or I simply overlooked it.</p>

<p>That said, I still think it will be an unwieldy exercise since the application and the framework are two different (Xcode) targets and we want the application to depend on the unit test, and the unit test to depend on the framework.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Build Automation Part 2 by Michel Fortin</title>
		<link>http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25672</link>
		<dc:creator>Michel Fortin</dc:creator>
		<pubDate>Sat, 23 Jan 2010 21:10:43 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2010/01/23/build-automation-part-2/#comment-25672</guid>
		<description>&lt;blockquote&gt;
  &lt;p&gt;What you will end up with is Xcode’s answer to the problem of extensibility: “custom shell script target” which will run every single time you re-build your target, regardless of whether or not there actually is a need for it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Actually, that&#039;s not true. If you set the dependencies of your script by filling the input files and output files line below the script field, Xcode will run the script only when the output files are outdated. It works pretty much like in a Makefile.&lt;/p&gt;

&lt;p&gt;If this doesn&#039;t work for you then you&#039;re probably setting the paths wrong.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
  <p>What you will end up with is Xcode’s answer to the problem of extensibility: “custom shell script target” which will run every single time you re-build your target, regardless of whether or not there actually is a need for it.</p>
</blockquote>

<p>Actually, that&#039;s not true. If you set the dependencies of your script by filling the input files and output files line below the script field, Xcode will run the script only when the output files are outdated. It works pretty much like in a Makefile.</p>

<p>If this doesn&#039;t work for you then you&#039;re probably setting the paths wrong.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Build Automation Part 1 by Allan Odgaard</title>
		<link>http://sigpipe.macromates.com/2010/01/15/build-automation-part-1/#comment-25671</link>
		<dc:creator>Allan Odgaard</dc:creator>
		<pubDate>Sat, 23 Jan 2010 18:21:52 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2010/01/15/build-automation-part-1/#comment-25671</guid>
		<description>&lt;p&gt;Nico: I wrote part 2 sort of as reply to your comment.&lt;/p&gt;

&lt;p&gt;Basically the benefit with make is that it is a system for linking actions together and have make figure out when it is time to run which actions. The actions to run can be anything.&lt;/p&gt;

&lt;p&gt;I realize that calling these posts &lt;em&gt;‘Build Automation’&lt;/em&gt; is probably a misnomer, because what this really is about is &lt;strong&gt;automation&lt;/strong&gt;. Building projects I will talk about in part 4. Make itself is &lt;strong&gt;not&lt;/strong&gt; a good abstraction for building projects &lt;em&gt;when we know the domain&lt;/em&gt; but it is still a very good engine. So comparing gyp to make is akin to comparing an abstraction to an engine (although make itself offers an abstraction to the lower-level task of executing interdependent actions).&lt;/p&gt;

&lt;p&gt;As for gyp itself as a good abstraction for building projects: I don’t think so ;)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Nico: I wrote part 2 sort of as reply to your comment.</p>

<p>Basically the benefit with make is that it is a system for linking actions together and have make figure out when it is time to run which actions. The actions to run can be anything.</p>

<p>I realize that calling these posts <em>‘Build Automation’</em> is probably a misnomer, because what this really is about is <strong>automation</strong>. Building projects I will talk about in part 4. Make itself is <strong>not</strong> a good abstraction for building projects <em>when we know the domain</em> but it is still a very good engine. So comparing gyp to make is akin to comparing an abstraction to an engine (although make itself offers an abstraction to the lower-level task of executing interdependent actions).</p>

<p>As for gyp itself as a good abstraction for building projects: I don’t think so ;)</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Build Automation Part 1 by Nico</title>
		<link>http://sigpipe.macromates.com/2010/01/15/build-automation-part-1/#comment-25670</link>
		<dc:creator>Nico</dc:creator>
		<pubDate>Fri, 22 Jan 2010 16:49:08 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2010/01/15/build-automation-part-1/#comment-25670</guid>
		<description>&lt;p&gt;Have you seen http://code.google.com/p/gyp/ ? It generates xcodeproj, makefiles, and visual studio projects from its syntax. It&#039;s what chromium uses as its build system.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Have you seen <a href="http://code.google.com/p/gyp/" rel="nofollow">http://code.google.com/p/gyp/</a> ? It generates xcodeproj, makefiles, and visual studio projects from its syntax. It&#039;s what chromium uses as its build system.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Simplifying Boolean Expressions by Daniel Yankowsky</title>
		<link>http://sigpipe.macromates.com/2009/07/27/simplifying-boolean-expressions/#comment-25667</link>
		<dc:creator>Daniel Yankowsky</dc:creator>
		<pubDate>Sat, 05 Dec 2009 06:55:57 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2009/07/27/simplifying-boolean-expressions/#comment-25667</guid>
		<description>&lt;p&gt;That&#039;s a good insight; you have discovered half of the distributive law of boolean algebra (http://en.wikipedia.org/wiki/Boolean_algebra_(structure)#Definition). The other laws listed there are also useful. I have occasionally been hacking an expression and, because of the absorption law, noticed that some cases were redundant.&lt;/p&gt;

&lt;p&gt;I&#039;m curious about what you mean about the number of variables not being fixed. Doesn&#039;t that imply that you are using a loop of some sort? Or do you mean that the example was a trimmed-down version of something more complicated in the real code?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>That&#039;s a good insight; you have discovered half of the distributive law of boolean algebra (<a href="http://en.wikipedia.org/wiki/Boolean_algebra_(structure)#Definition" rel="nofollow">http://en.wikipedia.org/wiki/Boolean_algebra_(structure)#Definition</a>). The other laws listed there are also useful. I have occasionally been hacking an expression and, because of the absorption law, noticed that some cases were redundant.</p>

<p>I&#039;m curious about what you mean about the number of variables not being fixed. Doesn&#039;t that imply that you are using a loop of some sort? Or do you mean that the example was a trimmed-down version of something more complicated in the real code?</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Simplifying Boolean Expressions by Yan</title>
		<link>http://sigpipe.macromates.com/2009/07/27/simplifying-boolean-expressions/#comment-25666</link>
		<dc:creator>Yan</dc:creator>
		<pubDate>Thu, 19 Nov 2009 09:09:41 +0000</pubDate>
		<guid isPermaLink="false">http://sigpipe.macromates.com/2009/07/27/simplifying-boolean-expressions/#comment-25666</guid>
		<description>&lt;p&gt;I think this is just a simple mathematical problem if take AND as set intersection, OR as set union, and negation as the set complement. Using some set operations one can get a uniformly simplest form for these problems (software like Mathematica can do this even for very complicated expression). Don&#039;t take my comment too series, I promise my idea is correct but I don&#039;t promise it is practical. -:)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I think this is just a simple mathematical problem if take AND as set intersection, OR as set union, and negation as the set complement. Using some set operations one can get a uniformly simplest form for these problems (software like Mathematica can do this even for very complicated expression). Don&#039;t take my comment too series, I promise my idea is correct but I don&#039;t promise it is practical. -:)</p>]]></content:encoded>
	</item>
</channel>
</rss>
