<story><title>The Makefile I use with JavaScript projects</title><url>http://www.olioapps.com/blog/the-lost-art-of-the-makefile/</url></story><parent_chain><item><author>lisper</author><text>&amp;gt; everything is—symbolically—a file&lt;p&gt;How are you going to make the result of a join in a relational database into a file, symbolically or otherwise?</text></item><item><author>derefr</author><text>&amp;gt; Make has deeply woven into it the assumption that the product of workflows are files, and that the way you can tell the state of a file is by its last modification date.&lt;p&gt;I&amp;#x27;ve always wondered whether Make would be seen as less of a grudging necessity, and more of an elegant panacea, if operating systems had gone the route of Plan 9, where everything is—&lt;i&gt;symbolically&lt;/i&gt;—a file, even if it&amp;#x27;s not a file in the sense of &amp;quot;a byte-stream persisted on disk.&amp;quot;&lt;p&gt;Or, to put that another way: have you ever considered writing a FUSE filesystem to expose workflow inputs as readable files, and expect outputs as file creation&amp;#x2F;write calls—and then just throw Make at that?</text></item><item><author>lisper</author><text>&amp;gt;  It&amp;#x27;s really a workflow automation tool,&lt;p&gt;That&amp;#x27;s true.&lt;p&gt;&amp;gt; and the UX for that is actually pretty close to what you would want.&lt;p&gt;That is so not true.  Make has deeply woven into it the assumption that the product of workflows are files, and that the way you can tell the state of a file is by its last modification date.  That&amp;#x27;s often true for builds (which is why make works reasonably well for builds), but often not true for other kinds of workflows.&lt;p&gt;But regardless of that, a tool that makes a semantic distinction between tabs and spaces is NEVER the UX you want unless you&amp;#x27;re a masochist.</text></item><item><author>rschloming</author><text>I think the reason make is both so controversial and also long-lived is that despite how everyone thinks of it, it isn&amp;#x27;t really a build tool. It actually doesn&amp;#x27;t know anything at all about how to build C, C++, or any other kind of code. (I know this is obvious to those of us that know make, but I often get the impression that a lot of people think of make as gradle or maven for C, which it really isn&amp;#x27;t.) It&amp;#x27;s really a workflow automation tool, and the UX for that is actually pretty close to what you would want. You can pretty trivially just copy tiresome sequences of shell commands that you started out typing manually into a Makefile and automate your workflow really easily without thinking too much. Of course that&amp;#x27;s what shell scripts are for too, but make has an understanding of file based dependencies that lets you much more naturally express the automated steps in a way that&amp;#x27;s a lot more efficient to run. A lot of more modern build tools mix up the workflow element with the build element (and in some cases with packaging and distribution as well), and so they are &amp;quot;better than make&amp;quot;, but only for a specific language and a specific workflow.</text></item></parent_chain><comment><author>ori_b</author><text>On plan 9, you&amp;#x27;d do something like:&lt;p&gt;&lt;pre&gt;&lt;code&gt;     ctlfd = open(&amp;quot;&amp;#x2F;mnt&amp;#x2F;sql&amp;#x2F;ctl&amp;quot;, OREAD|OWRITE);
     write(fd, &amp;quot;your query&amp;quot;);
     read(fd, resultpath);


     resultfd = open(resultpath, OREAD);
     read(fd, result);
     close(resultfd);
&lt;/code&gt;&lt;/pre&gt;
This is similar to the patterns used to open network connections or create new windows.</text></comment>
<story><title>The Makefile I use with JavaScript projects</title><url>http://www.olioapps.com/blog/the-lost-art-of-the-makefile/</url></story><parent_chain><item><author>lisper</author><text>&amp;gt; everything is—symbolically—a file&lt;p&gt;How are you going to make the result of a join in a relational database into a file, symbolically or otherwise?</text></item><item><author>derefr</author><text>&amp;gt; Make has deeply woven into it the assumption that the product of workflows are files, and that the way you can tell the state of a file is by its last modification date.&lt;p&gt;I&amp;#x27;ve always wondered whether Make would be seen as less of a grudging necessity, and more of an elegant panacea, if operating systems had gone the route of Plan 9, where everything is—&lt;i&gt;symbolically&lt;/i&gt;—a file, even if it&amp;#x27;s not a file in the sense of &amp;quot;a byte-stream persisted on disk.&amp;quot;&lt;p&gt;Or, to put that another way: have you ever considered writing a FUSE filesystem to expose workflow inputs as readable files, and expect outputs as file creation&amp;#x2F;write calls—and then just throw Make at that?</text></item><item><author>lisper</author><text>&amp;gt;  It&amp;#x27;s really a workflow automation tool,&lt;p&gt;That&amp;#x27;s true.&lt;p&gt;&amp;gt; and the UX for that is actually pretty close to what you would want.&lt;p&gt;That is so not true.  Make has deeply woven into it the assumption that the product of workflows are files, and that the way you can tell the state of a file is by its last modification date.  That&amp;#x27;s often true for builds (which is why make works reasonably well for builds), but often not true for other kinds of workflows.&lt;p&gt;But regardless of that, a tool that makes a semantic distinction between tabs and spaces is NEVER the UX you want unless you&amp;#x27;re a masochist.</text></item><item><author>rschloming</author><text>I think the reason make is both so controversial and also long-lived is that despite how everyone thinks of it, it isn&amp;#x27;t really a build tool. It actually doesn&amp;#x27;t know anything at all about how to build C, C++, or any other kind of code. (I know this is obvious to those of us that know make, but I often get the impression that a lot of people think of make as gradle or maven for C, which it really isn&amp;#x27;t.) It&amp;#x27;s really a workflow automation tool, and the UX for that is actually pretty close to what you would want. You can pretty trivially just copy tiresome sequences of shell commands that you started out typing manually into a Makefile and automate your workflow really easily without thinking too much. Of course that&amp;#x27;s what shell scripts are for too, but make has an understanding of file based dependencies that lets you much more naturally express the automated steps in a way that&amp;#x27;s a lot more efficient to run. A lot of more modern build tools mix up the workflow element with the build element (and in some cases with packaging and distribution as well), and so they are &amp;quot;better than make&amp;quot;, but only for a specific language and a specific workflow.</text></item></parent_chain><comment><author>com2kid</author><text>&amp;gt; How are you going to make the result of a join in a relational database into a file, symbolically or otherwise?&lt;p&gt;A file that represents the temporary table that has been created. Naming it is harder, unless the SQL query writer was feeling nice and verbose.</text></comment>