<?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/"
	>

<channel>
	<title>Build Tips</title>
	<atom:link href="http://www.openmakesoftware.com/build/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.openmakesoftware.com/build</link>
	<description>Steve Taylor gives us the tips and tricks to improve the build process</description>
	<pubDate>Fri, 27 Mar 2009 18:46:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>maven and its junk</title>
		<link>http://www.openmakesoftware.com/build/?p=25</link>
		<comments>http://www.openmakesoftware.com/build/?p=25#comments</comments>
		<pubDate>Fri, 27 Mar 2009 18:46:40 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Build]]></category>

		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.openmakesoftware.com/build/?p=25</guid>
		<description><![CDATA[
I have run maven a couple of times but don&#8217;t use it.  (I had to build some open source jars).  And today I decided to clean up my harddrive on my Mac using OmniDiskSweeper.  Low and behold maven created a hidden directory in my home directory called .m2.  In that was 320MB of jar files [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>I have run maven a couple of times but don&#8217;t use it.  (I had to build some open source jars).  And today I decided to clean up my harddrive on my Mac using <a href="http://www.omnigroup.com/applications/omnidisksweeper/">OmniDiskSweeper</a>.  Low and behold maven created a hidden directory in my home directory called .m2.  In that was 320MB of jar files and classes.  Why does maven need to hide that?  Shouldn&#8217;t it be nice and put it in a location that I know about so I can manage it. Instead of hiding junk on me.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=25</wfw:commentRss>
		</item>
		<item>
		<title>Another compiled language - JavaFX</title>
		<link>http://www.openmakesoftware.com/build/?p=23</link>
		<comments>http://www.openmakesoftware.com/build/?p=23#comments</comments>
		<pubDate>Fri, 14 Mar 2008 10:10:53 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Build]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=23</guid>
		<description><![CDATA[Technorati Tags: JavaFX
I ran across a newer compiled Java language, JavaFX.  Check out:
Developing Your First Compiled JavaFX Script Program
— The next JavaFX Puzzler will be posted at 18:00 GMT (1:00PM EST) on Wednesday, November 28, 2007.  It will be a compiled JavaFX Script puzzler, so you&#8217;ll need to build the JavaFX Script Compiler [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right;font-size:10px;">Technorati Tags: <a href="http://technorati.com/tag/JavaFX" rel="tag">JavaFX</a></p>
<p>I ran across a newer compiled Java language, JavaFX.  Check out:</p>
<blockquote><p><a href="http://java.sys-con.com/read/465182.htm">Developing Your First Compiled JavaFX Script Program</a><br />
— The next JavaFX Puzzler will be posted at 18:00 GMT (1:00PM EST) on Wednesday, November 28, 2007.  It will be a compiled JavaFX Script puzzler, so you&#8217;ll need to build the JavaFX Script Compiler in order to participate in the Puzzler. To help prepare you for the Puzzler, I&#8217;d like to you to develop a very basic &#8216;Hello World&#8217; style program.</p></blockquote>
<p>This is interesting since they decided to write their own command line compiler instead of just sticking with Ant Tasks.  Looks just like another pre-processor for Java code.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=23</wfw:commentRss>
		</item>
		<item>
		<title>RelGen Plugin</title>
		<link>http://www.openmakesoftware.com/build/?p=22</link>
		<comments>http://www.openmakesoftware.com/build/?p=22#comments</comments>
		<pubDate>Tue, 22 Jan 2008 18:04:27 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Building Eclipse]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=22</guid>
		<description><![CDATA[So after some more research it looks like the org.eclipse.relgen plugin is the one that is needed in order to build Eclipse.  At least according to the doc for the relgen plugin.  Downloaded it as an update for 3.3.1 SDK.  
Still don&#8217;t understand how the map files that relgen uses is related [...]]]></description>
			<content:encoded><![CDATA[<p>So after some more research it looks like the org.eclipse.relgen plugin is the one that is needed in order to build Eclipse.  At least according to the doc for the relgen plugin.  Downloaded it as an update for 3.3.1 SDK.  </p>
<p>Still don&#8217;t understand how the map files that relgen uses is related to CVS.  I was looking at the CVS tags and I can see the ones for major release out there, ie R_3_3_1_1 and ones based on dates.  But the map files are referring to other version tags such as the date tags.  I looks like its a pick and hope type of layout for the map file when choosing versions of dependent source to pull from CVS. </p>
<p>Relgen has a buildAll.xml file that I am going to try to run.  Any takers on wether its going to work?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=22</wfw:commentRss>
		</item>
		<item>
		<title>Building Eclipse Gaynamede</title>
		<link>http://www.openmakesoftware.com/build/?p=21</link>
		<comments>http://www.openmakesoftware.com/build/?p=21#comments</comments>
		<pubDate>Mon, 21 Jan 2008 17:08:30 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Building Eclipse]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=21</guid>
		<description><![CDATA[Technorati Tags: Eclipse, Build, Openmake, Meister
I started trying to build Eclipse today.  I knew it would be a big project.  As I was suspecting, finding where to start is hard.  I know I need to check out the source but how.  Looks like you need to use .map files that then [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right;font-size:10px;">Technorati Tags: <a href="http://technorati.com/tag/Eclipse" rel="tag">Eclipse</a>, <a href="http://technorati.com/tag/Build" rel="tag">Build</a>, <a href="http://technorati.com/tag/Openmake" rel="tag">Openmake</a>, <a href="http://technorati.com/tag/Meister" rel="tag">Meister</a></p>
<p>I started trying to build Eclipse today.  I knew it would be a big project.  As I was suspecting, finding where to start is hard.  I know I need to check out the source but how.  Looks like you need to use .map files that then reference the appropriate CVS tag and repositories.  </p>
<p>I am trying to do this from the command line so I can automate the process.  The goal I am trying to get to is a step by step process of building Eclipse not a bunch of pasted together processes from each project.  Looks like there is no one way of pulling all the pieces together.</p>
<p>Stay tuned to see if I actuallt get the source checked out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=21</wfw:commentRss>
		</item>
		<item>
		<title>Looking for a cross platform socket toolkit?</title>
		<link>http://www.openmakesoftware.com/build/?p=20</link>
		<comments>http://www.openmakesoftware.com/build/?p=20#comments</comments>
		<pubDate>Wed, 14 Nov 2007 10:25:15 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=20</guid>
		<description><![CDATA[I was struggling with an http connection to a Websphere App Server.  I was getting incomplete data back.  Look at my programing books to see where I may have gone wrong.  No Luck.  I re-wrote the test program in PERL and it worked.  So I knew it was something with [...]]]></description>
			<content:encoded><![CDATA[<p>I was struggling with an http connection to a Websphere App Server.  I was getting incomplete data back.  Look at my programing books to see where I may have gone wrong.  No Luck.  I re-wrote the test program in PERL and it worked.  So I knew it was something with the way we were handling the socket.  I found the Apache libapr project.  Downloaded it and modified the test program from http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial.html (client.c) and it worked. </p>
<p>It appears that the libapr is using the WSARecv, WSASend etc functions instead of the recv and send functions.  Also, it setup the connection a little differently than I was.  But it was very easy to use.  I need to test on Unix but I don&#8217;t suspect too many problems.</p>
<p>Check it out at: http://apr.apache.org/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=20</wfw:commentRss>
		</item>
		<item>
		<title>Handling chunked http data</title>
		<link>http://www.openmakesoftware.com/build/?p=19</link>
		<comments>http://www.openmakesoftware.com/build/?p=19#comments</comments>
		<pubDate>Thu, 01 Nov 2007 11:19:56 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=19</guid>
		<description><![CDATA[In HTTP 1.1 the client and server can send chunked data.  This is done so you don&#8217;t need to send the Content-Length.  When working with Java the Java HTTP classes handle Transfer-Encoding: chunked, but if you are using the native C code you need to handle this on your own. 
Here&#8217;s the step [...]]]></description>
			<content:encoded><![CDATA[<p>In HTTP 1.1 the client and server can send chunked data.  This is done so you don&#8217;t need to send the Content-Length.  When working with Java the Java HTTP classes handle Transfer-Encoding: chunked, but if you are using the native C code you need to handle this on your own. </p>
<p>Here&#8217;s the step to handle reading chunked data.</p>
<p>1. Read the http headers from the socket looking for the Transfer-Encoding: chunked header<br />
2. After the headers, there will be a new line chr(13) and then a line with only a single number on it.  This number is the length of the next chunk of data in hex (use strtol()) to change the hex to decimal)<br />
3. Read from the socket the number of bytes in step #2<br />
4. Next is a possible new line chr(13) or not (depending upon the server) and then the hex number on the next line.<br />
5. You then repeat step #3 until the hex number is 0</p>
<p>Make sure you test against several different servers/clients since the format (extra newlines or not) are not consistent between the servers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=19</wfw:commentRss>
		</item>
		<item>
		<title>Executing Command Line Compilers from Openmake Mojo</title>
		<link>http://www.openmakesoftware.com/build/?p=17</link>
		<comments>http://www.openmakesoftware.com/build/?p=17#comments</comments>
		<pubDate>Tue, 23 Oct 2007 16:22:15 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Build]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=17</guid>
		<description><![CDATA[One of the nice features of Mojo is the ability to execute any command line compiler.  The issue that I have seen is that most people do not understand how to make the compiler run from the command line.  The key is to get the inputs and outputs correct for the compiler.  [...]]]></description>
			<content:encoded><![CDATA[<p>One of the nice features of Mojo is the ability to execute any command line compiler.  The issue that I have seen is that most people do not understand how to make the compiler run from the command line.  The key is to get the inputs and outputs correct for the compiler.  Most compilers have a -h or -? parameter that will give you a list of flags that it expects and how to pass in the input file names.  Another place to look is at the documentation, on Unix the manpage command man.  Look for examples on how to run the compiler from the command line.  Most of the time just a few flags are needed, since the defaults will work.</p>
<p>Also, look under the covers to see whats happening.  For example, the WebSphere deploy script is really a shell/batch script that wrappers a call to a Java class.  Inside the script you can get a better idea of what it expects as inputs and outputs.</p>
<p>The compilers will sometimes use a response file in which all of the inputs and parameters are put into and then the response file is passed to the compiler.  Compilers that use response files are great since they avoid the problem of limited command line character limits.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=17</wfw:commentRss>
		</item>
		<item>
		<title>Running your programs on Vista (signed exes)</title>
		<link>http://www.openmakesoftware.com/build/?p=3</link>
		<comments>http://www.openmakesoftware.com/build/?p=3#comments</comments>
		<pubDate>Mon, 20 Aug 2007 17:33:26 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=3</guid>
		<description><![CDATA[Now that Vista is out, some of your existing programs don&#8217;t run like they use to. The User Access Control interface of Vista gets in the way causing messages to pop up unexpectedly. Microsoft wants to run only &#8220;signed&#8221; executables without the annoying messages. I think Microsoft did this as a way to combat the [...]]]></description>
			<content:encoded><![CDATA[<p>Now that Vista is out, some of your existing programs don&#8217;t run like they use to. The User Access Control interface of Vista gets in the way causing messages to pop up unexpectedly. Microsoft wants to run only &#8220;signed&#8221; executables without the annoying messages. I think Microsoft did this as a way to combat the security issues they have been hit with.</p>
<p>So to get your Windows exes signed you need a certificate from Thawte, Verisign or a like. We have a certificate that we use for signing our jar files that run via a Java Applet. (Only way to make a Java Applet talk to multiple machines and the file system).</p>
<p>The certificate is stored in the key3.db and cert7.db Netscape data files. The trick was to get the certificate from there into something Microsoft would recognize, since you need to use the Microsoft signing tools instead of the Netscape ones to sign a Windows exe.</p>
<p>Here are the steps I did to get me over to a Microsoft certificate store</p>
<p>1. Download the Netscape tools from:<br />
http://www.mozilla.org/projects/security/pki/nss/tools/index.html</p>
<p>An awesome set of tools and documentation for Cryto stuff!!!</p>
<p>2. Since my cert was stuck in a cert7.db instead of a cert8.db I had to go back and get the version of the tools to handle that.<br />
I used the nss-3.6.1.zip and nspr-4.2.2.zip pre-built packages for Windows.</p>
<p>3. I used pk12util to pull the certificate out of the cert7.db</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:0px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">pk12util -d &amp;lt;path to db dir&amp;gt; -n &amp;lt;cert name&amp;gt; -o mycert.p12</div></div>
<p>It prompts you for the password to the DB and then another password for the .p12 file</p>
<p>4. At this point I had the certificate in the PKCS12 format in the mycert.p12. Next was to add it to the Microsoft certificate store.</p>
<p>Just run certmgr.exe and a GUI will walk through getting the certificate imported. I just took the defaults. Used my password that<br />
I saved the .p12 file with and Marked the private key as exportable. I left enable strong private key encrytion off. Took the default<br />
of Automatically picking the store. And your done.</p>
<p>5. Now that its in the Microsoft store you can sign your exes. You need to use the signcode.exe or signtool.exe (depending on the version of the Microsoft SDK) to do the signing.</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:0px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">signcode -cn &quot;&amp;lt;Certificate Name&amp;gt;&quot; &amp;lt;executable name&amp;gt;</div></div>
<p>Note: Use a timestamp server /t option</p>
<p>6. To check that it was signed correctly, run signtool.exe verify or chktrust.exe</p>
<p>Thats it!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=3</wfw:commentRss>
		</item>
		<item>
		<title>fgets() uses 99% CPU</title>
		<link>http://www.openmakesoftware.com/build/?p=4</link>
		<comments>http://www.openmakesoftware.com/build/?p=4#comments</comments>
		<pubDate>Sun, 19 Aug 2007 17:33:26 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[AIX]]></category>

		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=4</guid>
		<description><![CDATA[I had the following code snippet use 99% CPU on AIX.
if &#40;fstat&#40;fileno&#40;fp&#41;,&#38;amp;st&#41; == 0&#41;
&#123;
iStr = &#40;char *&#41;malloc&#40;st.st_size&#41;;

memset&#40;iStr,'?',st.st_size&#41;;

while &#40;fgets&#40;iStr,st.st_size,fp&#41; != NULL&#41;

&#123;

safecat&#40;logtext,iStr&#41;;

safecat&#40;logtext,&#34; &#34;&#41;;

if &#40;fpout != NULL&#41;

fprintf&#40;fpout,&#34;%s &#34;,iStr&#41;;

&#125;
&#125;
if &#40;fp != NULL&#41;
fclose&#40;fp&#41;;
It appears that the first fgets() would get all of data except the EOF. The next time around fgets() should return NULL since EOF would be read. But [...]]]></description>
			<content:encoded><![CDATA[<p>I had the following code snippet use 99% CPU on AIX.</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:0px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/fstat"><span class="kw3">fstat</span></a><span class="br0">&#40;</span>fileno<span class="br0">&#40;</span>fp<span class="br0">&#41;</span><span class="sy0">,&amp;</span>amp<span class="sy0">;</span>st<span class="br0">&#41;</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
iStr <span class="sy0">=</span> <span class="br0">&#40;</span>char <span class="sy0">*</span><span class="br0">&#41;</span>malloc<span class="br0">&#40;</span>st<span class="sy0">.</span>st_size<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
memset<span class="br0">&#40;</span>iStr<span class="sy0">,</span><span class="st_h">'?'</span><span class="sy0">,</span>st<span class="sy0">.</span>st_size<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw1">while</span> <span class="br0">&#40;</span><a href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span>iStr<span class="sy0">,</span>st<span class="sy0">.</span>st_size<span class="sy0">,</span>fp<span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="kw2">NULL</span><span class="br0">&#41;</span><br />
<br />
<span class="br0">&#123;</span><br />
<br />
safecat<span class="br0">&#40;</span>logtext<span class="sy0">,</span>iStr<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
safecat<span class="br0">&#40;</span>logtext<span class="sy0">,</span><span class="st0">&quot; &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span>fpout <span class="sy0">!=</span> <span class="kw2">NULL</span><span class="br0">&#41;</span><br />
<br />
fprintf<span class="br0">&#40;</span>fpout<span class="sy0">,</span><span class="st0">&quot;<span class="es6">%s</span> &quot;</span><span class="sy0">,</span>iStr<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span>fp <span class="sy0">!=</span> <span class="kw2">NULL</span><span class="br0">&#41;</span><br />
<a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span>fp<span class="br0">&#41;</span><span class="sy0">;</span></div></div>
<p>It appears that the first fgets() would get all of data except the EOF. The next time around fgets() should return NULL since EOF would be read. But what happens is that the program uses 99% CPU and gets stuck there. I didn&#8217;t go into the debugger to see exactly what was going on but the fix was to allocate the buffer bigger than the file size. And use that larger size on the fgets().</p>
<p>Fixed Code</p>
<div class="codecolorer-container php " style="overflow:auto;white-space:nowrap;width:0px"><div class="php codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/fstat"><span class="kw3">fstat</span></a><span class="br0">&#40;</span>fileno<span class="br0">&#40;</span>fp<span class="br0">&#41;</span><span class="sy0">,&amp;</span>amp<span class="sy0">;</span>st<span class="br0">&#41;</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
iStr <span class="sy0">=</span> <span class="br0">&#40;</span>char <span class="sy0">*</span><span class="br0">&#41;</span>malloc<span class="br0">&#40;</span>st<span class="sy0">.</span>st_size<span class="sy0">+</span><span class="nu0">1024</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
memset<span class="br0">&#40;</span>iStr<span class="sy0">,</span><span class="st_h">'?'</span><span class="sy0">,</span>st<span class="sy0">.</span>st_size<span class="sy0">+</span><span class="nu0">1024</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw1">while</span> <span class="br0">&#40;</span><a href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span>iStr<span class="sy0">,</span>st<span class="sy0">.</span>st_size<span class="sy0">+</span><span class="nu0">1024</span><span class="sy0">,</span>fp<span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="kw2">NULL</span><span class="br0">&#41;</span><br />
<br />
<span class="br0">&#123;</span><br />
<br />
safecat<span class="br0">&#40;</span>logtext<span class="sy0">,</span>iStr<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
safecat<span class="br0">&#40;</span>logtext<span class="sy0">,</span><span class="st0">&quot; &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="kw1">if</span> <span class="br0">&#40;</span>fpout <span class="sy0">!=</span> <span class="kw2">NULL</span><span class="br0">&#41;</span><br />
<br />
fprintf<span class="br0">&#40;</span>fpout<span class="sy0">,</span><span class="st0">&quot;<span class="es6">%s</span> &quot;</span><span class="sy0">,</span>iStr<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw1">if</span> <span class="br0">&#40;</span>fp <span class="sy0">!=</span> <span class="kw2">NULL</span><span class="br0">&#41;</span><br />
<a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span>fp<span class="br0">&#41;</span><span class="sy0">;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=4</wfw:commentRss>
		</item>
		<item>
		<title>Virtual Build Systems</title>
		<link>http://www.openmakesoftware.com/build/?p=5</link>
		<comments>http://www.openmakesoftware.com/build/?p=5#comments</comments>
		<pubDate>Sat, 18 Aug 2007 18:26:04 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
		
		<category><![CDATA[Build]]></category>

		<category><![CDATA[Virtual]]></category>

		<guid isPermaLink="false">http://openmakesoftware.com/build/?p=5</guid>
		<description><![CDATA[I ran into a Build Meister at a conference and he asked me how to speed up builds. He was wondering if Virtual Build Systems would work. I told him no.
The Virtual Build System that they setup was to have many VMWare images running and have each image run a subset of the build. I [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into a Build Meister at a conference and he asked me how to speed up builds. He was wondering if Virtual Build Systems would work. I told him no.</p>
<p>The Virtual Build System that they setup was to have many VMWare images running and have each image run a subset of the build. I theory it looks like it would work well. Each VMWare image dedicated to running a slice of the whole build, so the compiles should run faster. But this is not that case, VMWare actually is getting in the way. No, matter how well VMWare works there are 2 things getting in the way. First, the I/O (network and disk). Secondly, the number of machine instructions executed is high. When the compiler runs, VMWare is running the compiler instructions and passing the instructions on to the Real OS. For VMWare to do this the processor must execute the instructions for VMWare itself as well as the compiler instructions. Therefor, no matter what you do the build is going to be slower.</p>
<p>The Virtualization does buy you a level of abstraction to move a build from one machine to another. But this begs the question, why is the build machine dependent? Shouldn&#8217;t a build be able to be recreated on any machine at any time? Openmake was designed with that requirement in place. To repeat a build on another machine you need a OS to run on. Does it need to be the same OS?, no. Running a build on Windows 2000 and Windows XP will produce the same resullts if the compiler version and source code are the same. The compiler can be checked in with the source and checked out with the source if you choose to do so to get a completely traceable build.</p>
<p>Most shops have a standard that they install for the compiler so checking it in and out is usually not need. I recommend just putting the CD on a shelf or off to Off-site storage for disaster recover and archival purposes.</p>
<p>I will get to the first bottle neck and solutions in a future post.</p>
<p>BTW, the Build Meister did confirm that Virtual Build System was slower in the testing that they have been doing. I just reconfirmed their findings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openmakesoftware.com/build/?feed=rss2&amp;p=5</wfw:commentRss>
		</item>
	</channel>
</rss>
