<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3303841473713500702</id><updated>2011-08-16T22:02:52.415-07:00</updated><category term='install'/><category term='autotools'/><category term='Jackalope'/><category term='Windows XP'/><category term='optimize compile'/><category term='nil pointer'/><category term='RAID'/><category term='optimize build'/><category term='Linux Symposium'/><category term='OMAP'/><category term='ARM'/><category term='gcc benchmark'/><category term='benchmark'/><category term='fast compile'/><category term='open source'/><category term='black screen'/><category term='Leopard'/><category term='Jaunty'/><category term='Fog Creek'/><category term='make'/><category term='NULL pointer'/><category term='build benchmark'/><category term='Ubuntu 9.04'/><category term='Mac Pro'/><category term='dual-boot'/><category term='Vaio'/><category term='Mac OS'/><category term='GUADEC'/><category term='Mac OS X'/><category term='FogBugz'/><category term='dual boot'/><category term='eye candy'/><category term='VGN-AR'/><category term='GLX'/><category term='Macintosh Pro'/><category term='glGetString'/><category term='Install FogBugz'/><category term='triple boot'/><category term='Windows Vista'/><category term='Sony'/><category term='compile benchmark'/><category term='cell phone'/><category term='configure'/><category term='Jaunty Jackalope'/><category term='triple-boot'/><category term='compile'/><category term='fast build'/><category term='build'/><category term='Linux'/><category term='embedded Linux'/><category term='XScale'/><category term='gcc'/><category term='Ubuntu'/><category term='pkg-config'/><category term='Linux kernel'/><title type='text'>bobertville</title><subtitle type='html'>He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me. –Thomas Jefferson</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-954096082665702641</id><published>2011-08-16T19:57:00.000-07:00</published><updated>2011-08-16T22:02:52.477-07:00</updated><title type='text'>Making Mac Installers</title><content type='html'>&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:130%;"&gt;&lt;blockquote&gt;&lt;/blockquote&gt;Apple's PackageMaker is buggy, buggy, buggy. Also poorly documented. And buggy.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;PackageMaker is Cupertino's preferred tool for making installers for Mac software, and comes in two flavors: the PackageMaker GUI tool, and the packagemaker command-line tool.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Having used many awkward installer tools on Mac and Windows, I wasn't expecting a bed of roses. But what I got, others have already described eloquently &lt;a href="http://stackoverflow.com/questions/4053957/mac-osx-packagemaker-how-to-install-multiple-packages-and-post-processing"&gt;here&lt;/a&gt;, and &lt;a href="http://stackoverflow.com/questions/1378443/is-packagemaker-considered-the-standard-for-mac-os-x-software-installation-or-is"&gt;here&lt;/a&gt;, or &lt;a href="http://stackoverflow.com/questions/2010902/mac-packagemaker-random-reset-of-owner-group-perms"&gt;here&lt;/a&gt;, and many other places on StackOverflow and Apple's installer-dev list.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In short, the PackageMaker GUI is the worst software I've seen come out of Apple since I began programming for the Mac in 1984. It crashes, it creates installers that crash, and it may take values you set and silently reset them to their defaults.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The command-line tool is much better, and I even used it for a while, but if you need more than a simple one-item install, it has scant documentation, and a steep learning curve requiring time-consuming experimentation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:130%;"&gt;What To Do?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's what I'm currently using as effective ways to make Mac installers:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;One-off installers.&lt;/b&gt; These are installers which you will build once and never have to build again. In this case, the PackageMaker GUI will probably be fine if you're willing to tolerate the occasional crash. However, if you move your PackageMaker project to a different directory or a different Mac, it will silently reset options in the project and you'll get all kinds of unpleasant surprises come time to run installers you build from that project.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Installing one executable, and building the installer from the command line.&lt;/b&gt; This also includes building the installer as a shell command inside Xcode. I've done this, and the packagemaker command-line tool works fine. I pretty much just got all the info from &lt;a href="http://www.codeography.com/2009/09/04/automating-apple-s-packagemaker.html"&gt;Christopher Sexton's Codeography post&lt;/a&gt;, particularly the command at the end preceded by "Run the package maker build on the command line".&lt;/li&gt;&lt;li&gt;&lt;b&gt;Everything else.&lt;/b&gt; Use one of the &lt;a href="http://s.sudre.free.fr/Packaging.html"&gt;two excellent tools&lt;/a&gt;&lt;span&gt;&lt;span&gt; Stéphane Sudre has written. Iceberg is aimed at old-style "bundle" installers, and is what I'm currently using. Packages is aimed at newer "flat" installers - I haven't tried it as of this writing, but I have high hopes for it.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(119, 119, 119); font-family: helvetica, arial, sans-serif; font-size: 11px; "&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I hope that by the time you read this, Apple will have turned PackageMaker into a well-documented, stable system. But if you have troubles with PackageMaker at all, you can save yourself a lot of stress by immediately looking into alternatives.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-954096082665702641?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/954096082665702641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=954096082665702641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/954096082665702641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/954096082665702641'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2011/08/making-mac-installers.html' title='Making Mac Installers'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-5068039159934934485</id><published>2010-10-17T14:47:00.000-07:00</published><updated>2010-10-17T14:59:47.725-07:00</updated><title type='text'>Redmine: Creating a new custom query</title><content type='html'>&lt;div&gt;As I mentioned in the last post, Redmine's documentation isn't very thorough. Here's how to create a new custom query in version 1.0.&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Log into your project.&lt;/li&gt;&lt;li&gt;Select the &lt;b&gt;Issues&lt;/b&gt; tab.&lt;/li&gt;&lt;li&gt;Open the disclosure triangle for &lt;b&gt;Filters&lt;/b&gt;, and set the status and any other filters you want.&lt;/li&gt;&lt;li&gt;Open the disclosure triangle for &lt;b&gt;Options&lt;/b&gt;, and set the columns and grouping you want.&lt;/li&gt;&lt;li&gt;Click on the &lt;b&gt;Apply&lt;/b&gt; button above the results table.&lt;/li&gt;&lt;li&gt;If you aren't satisfied with what you see, change the filters/columns/grouping, and press the &lt;b&gt;Apply&lt;/b&gt; button again.&lt;/li&gt;&lt;li&gt;When you're satisfied with what you have, press the &lt;b&gt;Save&lt;/b&gt; button above the results table. This will take you to the &lt;b&gt;New query&lt;/b&gt; page.&lt;/li&gt;&lt;li&gt;Enter a name for the query in the &lt;b&gt;Name&lt;/b&gt; field. If you like, you can make the query public, and make it available either for the current project or all projects.&lt;/li&gt;&lt;li&gt;Make any changes you want to the sort order. (You can also change the grouping, filters and columns, but presumably you set those up the way you wanted before.&lt;/li&gt;&lt;li&gt;Press the &lt;b&gt;Save&lt;/b&gt; button at the bottom of the page.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-5068039159934934485?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/5068039159934934485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=5068039159934934485' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/5068039159934934485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/5068039159934934485'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2010/10/redmine-creating-new-custom-query.html' title='Redmine: Creating a new custom query'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-5506743470453144884</id><published>2010-10-17T13:35:00.000-07:00</published><updated>2010-10-17T14:45:59.915-07:00</updated><title type='text'>Subtasks: Dumping FogBugz for Redmine</title><content type='html'>&lt;div&gt;As you'll note in an earlier post, my wife and I had been using FogBugz for issue tracking – but I was dissatisfied with it. As I remarked in that post, the installation instructions and general support for any server platform other than Windows are mediocre. And in version 6 (which we were running), the wiki didn't support Safari.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But what was really annoying was that &lt;b&gt;FogBugz 6 didn't support subtasks&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I personally find subtasks incredibly useful for organizing work! I like to take a big task – such as a major feature that may take a week or two – and break it down into sub-tasks, and sub-sub-tasks, and so on, to a level of granularity where each bottom-level task is clear and easy to complete in a few hours or less. Then I can just do them, and tick them off, and when all the lower-level tasks are done, the top-level task is done.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So when I upgraded our version-control and issue tracking server to Ubuntu Lucid, I thought, "I can get subtasks by upgrading FogBugz to version 7. Or I can look around and see if there are any alternatives."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But when I started looking around, I was amazed to see that, despite how many requests you'll see for subtask support, few issue tracking systems do it well! Trac doesn't do it at all. And as I found out when working at &lt;a href="http://www.kno.com/"&gt;Kno&lt;/a&gt;, Jira only offers one level of subtasks – which isn't enough for me as a lone developer, let alone for what we were trying to do at Kno.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was particularly astonishing to me because subtasks are a tree, and for a competent computer scientist, trees should be trivial. All I can figure is that the people who originally designed these systems didn't even consider the need for hierarchy, and then found that extending it was difficult. And even that I find odd, because most of them are based on relational databases, and adding a "parent task" column to the "task" table shouldn't be hard. So they must have put some unusual roadblocks in their own way.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And then, like the sun rising after a storm, I found... &lt;a href="http://www.redmine.org/"&gt;Redmine&lt;/a&gt;. It's open-source (e.g. free as in beer). It has unlimited levels of sub-tasks. It has custom fields. It has a wiki that works with every browser I've tried it with. It has forums. It's easier to install on Ubuntu than FogBugz – even from source (which I did). I just love it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, except that (as of Oct. 1o, 2010) its documentation is very incomplete, and some operations can only be done in a clunky way. But at least you can do them! And I'll explain one thing I figured out how to do in the next post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-5506743470453144884?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/5506743470453144884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=5506743470453144884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/5506743470453144884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/5506743470453144884'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2010/10/subtasks-dumping-fogbugz-for-redmine.html' title='Subtasks: Dumping FogBugz for Redmine'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-7225499416003403234</id><published>2010-01-03T15:05:00.000-08:00</published><updated>2010-01-03T15:36:50.056-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NULL pointer'/><category scheme='http://www.blogger.com/atom/ns#' term='nil pointer'/><category scheme='http://www.blogger.com/atom/ns#' term='GLX'/><category scheme='http://www.blogger.com/atom/ns#' term='glGetString'/><title type='text'>Getting glGetString To Return Something Useful</title><content type='html'>Here's a small-but-useful factoid.&lt;br /&gt;&lt;br /&gt;In OpenGL,  &lt;span style="font-weight: bold;"&gt;glGetString()&lt;/span&gt;&lt;span&gt; is the API to query&lt;/span&gt; the configuration of the system your code is running on, like the OpenGL version, or which OpenGL extensions are available.&lt;br /&gt;&lt;br /&gt;However, if you call &lt;span style="font-weight: bold;"&gt;glGetString()&lt;/span&gt; before you have a &lt;a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetString.xml"&gt;current GL connection&lt;/a&gt;, no matter which configuration string you're querying, it will just return a NULL (nil) pointer.&lt;br /&gt;&lt;br /&gt;If you're working in GLX, the solution is to call &lt;a href="http://www.opengl.org/sdk/docs/man/xhtml/glXMakeCurrent.xml"&gt;&lt;span style="font-weight: bold;"&gt;glXMakeCurrent()&lt;/span&gt;&lt;/a&gt; before calling &lt;span style="font-weight: bold;"&gt;glGetString()&lt;/span&gt;. That will open a current GL connection and you'll start getting strings back.&lt;br /&gt;&lt;br /&gt;Unfortunately, most GLX tutorials and sample code either assume you know this, or use a utility library like GLUT that solves the problem for you without telling you how. After reading the man pages, this solution seems pretty obvious in retrospect. But as far as I can tell, it's only clearly spelled out in &lt;a href="http://www.mesa3d.org/brianp/sig97/exten.htm#Runtime"&gt;one place on the Net&lt;/a&gt; - until now. (That page also tells what to do on Windows.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-7225499416003403234?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/7225499416003403234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=7225499416003403234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/7225499416003403234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/7225499416003403234'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2010/01/getting-glgetstring-to-return-something.html' title='Getting glGetString To Return Something Useful'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-2671003128740452929</id><published>2009-09-19T23:20:00.000-07:00</published><updated>2009-09-19T23:34:35.413-07:00</updated><title type='text'>Linux Builds Part II: The Acceleration Incantation</title><content type='html'>Ubuntu offers a system monitor that can show graphs of how system resources are being used. It's very interesting to turn on all the graphs on and build a large project without fiddling with the build. You'll see some interesting things.&lt;br /&gt;&lt;br /&gt;First, the CPU usage will jump up and down, and so will the disk activity - but you'll rarely see them both high at the same time. That's because the compiler typically operates in three phases on a source file:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It reads the source file and all the headers. This is disk-intensive but not CPU-intensive.&lt;/li&gt;&lt;li&gt;Then it does all the usual compiling stuff like lexical analysis and parsing and code generation and optimizing. This makes heavy use of the CPU and RAM, but doesn't hit the hard disk much.&lt;/li&gt;&lt;li&gt;Then it writes the object file out to disk. Again, the disk is very busy, and the CPU just waits around.&lt;/li&gt;&lt;/ol&gt;So at any one time, the compiler is making good use of the CPU or the disk, but not both. If you could keep them both busy, things would go faster.&lt;br /&gt;&lt;br /&gt;The answer to this is &lt;span style="font-style: italic;"&gt;parallel builds&lt;/span&gt;. Common build tools like make and jam offer command line options to compile multiple files in parallel, using separate compiler instances in separate processes. That way, if one compiler process is waiting for the disk, the Linux kernel will give the CPU to another compiler process that's waiting for the CPU. Even on a single-CPU, single-core computer, a parallel build will make better use of the system and speed things up.&lt;br /&gt;&lt;br /&gt;Second, if you're running on a multi-CPU or multi-core system and not doing much else, even at its peak, CPU usage won't peg out at the top of the panel. That's because builds are typically sequential, so they only use one core in one CPU, and any other compute power you have is sitting idle. If you could make use of those other CPUs/cores, things would go faster. And again, the answer is parallel builds.&lt;br /&gt;&lt;br /&gt;Fortunately, the major C/C++ build systems support parallel builds, including GNU make, jam, and SCons. In particular, GNU make and jam both offer the "-j X" parameter, where X is the number of parallel jobs to compile at the same time.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NfEQVqCyzvM/SrXKDIGdoxI/AAAAAAAAAAM/721nDN5xxUQ/s1600-h/ExpectedGraph2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 307px;" src="http://1.bp.blogspot.com/_NfEQVqCyzvM/SrXKDIGdoxI/AAAAAAAAAAM/721nDN5xxUQ/s320/ExpectedGraph2.jpg" alt="" id="BLOGGER_PHOTO_ID_5383431084654306066" border="0" /&gt;&lt;/a&gt;The graph above shows what I would generally expect the results of parallel builds to be on a particular hardware configuration, going from left to right.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When running with one compile at a time, sequentially, system resources are poorly utilized, so a build takes a long time.&lt;/li&gt;&lt;li&gt;As the number of compiles running in parallel increases, the wall time for the build drops, until you hit a minimum. This level of parallelization provides the balanced utilization of CPU, disk, and memory we're looking for. We'll call this number of parallel compiles N.&lt;/li&gt;&lt;li&gt;As the number of compiles passes N, the compile processes will increasingly contend for system resources and become blocked, so the build time will rise a bit.&lt;/li&gt;&lt;li&gt;Then as the number of parallel compiles continues to rise, more and more of the compile processes will be blocked at any time, but roughly N of them will still be operating efficiently. So the build time will flatten out, and asymptotically approach some limit.&lt;/li&gt;&lt;/ul&gt;Anticipating further posts, that is what you actually see, except the rise after the minimum is tiny, often to the point where the times in the flat tail are only a tiny bit higher than the minimum time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;A Brief Aside On Significance&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In any physical system, there's always some variation in measurements, and the same is true of computer benchmarks. So an important question in this kind of experimentation is: when you see a difference, is it meaningful or just noise?&lt;br /&gt;&lt;br /&gt;To answer that, I ran parallelized benchmarks on Valentine (a two-core Sony laptop) and Godzilla (an eight-core Mac Pro). In each case, the Linux kernel was built twenty times with the same settings. Here are the results:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Valentine, cached build, j=3. Average 335.91 seconds, standard deviation (sigma) 2.15, or 0.64% of the average.&lt;/li&gt;&lt;li&gt;Valentine, non-cached build, j=3. Average 340.09 seconds, standard deviation 4.22, or 1.24% of the average.&lt;/li&gt;&lt;li&gt;Godzilla, non-cached build, j=12. Average 67.82 seconds, standard deviation 0.54, or 0.79% of the average.&lt;/li&gt;&lt;/ul&gt;Generally speaking, a difference of one sigma or less is probably not significant, while a difference of two sigma or more is probably significant. So I'll generally use the rule of thumb, based on the above, that differences between individual values of 2% or less are probably not significant and may easily be due to experimental error (noise).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-2671003128740452929?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/2671003128740452929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=2671003128740452929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/2671003128740452929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/2671003128740452929'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2009/09/linux-builds-part-ii-acceleration.html' title='Linux Builds Part II: The Acceleration Incantation'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NfEQVqCyzvM/SrXKDIGdoxI/AAAAAAAAAAM/721nDN5xxUQ/s72-c/ExpectedGraph2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-6067648097723961443</id><published>2009-09-19T15:24:00.000-07:00</published><updated>2009-09-19T17:07:43.135-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fast build'/><category scheme='http://www.blogger.com/atom/ns#' term='gcc'/><category scheme='http://www.blogger.com/atom/ns#' term='build benchmark'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize build'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='gcc benchmark'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu 9.04'/><category scheme='http://www.blogger.com/atom/ns#' term='fast compile'/><category scheme='http://www.blogger.com/atom/ns#' term='optimize compile'/><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><category scheme='http://www.blogger.com/atom/ns#' term='compile benchmark'/><title type='text'>Linux Build Optimization I: The Need for Speed</title><content type='html'>gcc may be many things, but it most certainly is &lt;i&gt;slow&lt;/i&gt;. Anybody who's worked with a really fast C/C++ compiler - like the late, lamented Metrowerks Codewarrior for MacOS and Windows - will be happy to tell you that.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But build speed matters a lot! As &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;Joel Spolsky points out&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;&lt;/a&gt;&lt;blockquote&gt;If your compilation process takes more than a few seconds, getting the latest and greatest computer is going to save you time. If compiling takes even 15 seconds, programmers will get bored while the compiler runs and switch over to reading The Onion, which will suck them in and kill hours of productivity.&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;I currently work with a team on a Linux-based system involving about twenty million lines of C/C++. Building everything using the default settings on our normal development hardware takes hours. So if someone changes a file down in the bowels of some low-level component half the system relies on, here's how we spend our time:&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imgs.xkcd.com/comics/compiling.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 413px; height: 360px;" src="http://imgs.xkcd.com/comics/compiling.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;What can we do?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are some options for speeding up the build cycle. I think they would all be great if everybody could do them, but only one of them is universally applicable:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;Change to a faster compiler that will do the job&lt;/div&gt;&lt;div&gt;That would be lovely if there were one - but unfortunately, the easily-available option I know of for replacing gcc is the combination of &lt;a href="http://llvm.org/"&gt;LLVM&lt;/a&gt; and &lt;a href="http://clang.llvm.org/"&gt;clang&lt;/a&gt;. I have high hopes for that compiler system someday, but at present, real-world benchmarks don't indicate it's hugely faster at compiling than gcc, and clang doesn't support critical C++ features many programmers need.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;Throw money at hardware&lt;/div&gt;&lt;div&gt;This would also be lovely if everyone were in a position to do that. But if you just don't have much spare money, this is a non-starter. And even if you do have a fair bit of change to spend on hardware, what I plan to discuss will still help you improve your use of it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;Be clever&lt;/div&gt;&lt;div&gt;Now we get to the meat of these posts: taking your existing gcc compiler, and your existing hardware, and tweaking things so that the build cycle is quicker. The best case would be without spending a dime, and the worst case would involve spending very little money.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;The Ground Rules&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These posts will largely consist of a series of experiments. Each experiment will involve applying a technique that might accelerate builds, benchmarking it, and analyzing the results.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unless otherwise specified, the tests will involve:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Building the Linux 2.6.30.3 kernel using the default x86 configuration. (If you look at the various components used for the &lt;a href="http://distcc.googlecode.com/svn/trunk/doc/web/benchmark.html"&gt;distcc benchmarks&lt;/a&gt;, the Linux kernel seems like a pretty representative large set of code.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Running under Ubuntu 9.04 using gcc version 4.3.3.&lt;/li&gt;&lt;li&gt;The benchmark is the first thing done after rebooting the computer, with nothing but a couple of terminal windows running.&lt;/li&gt;&lt;li&gt;The benchmark script, by default, avoids unrealistically fast builds due to disk caching from previous passes. (It does this by unpackaging the kernel tarball on every build pass.) It also has options to support disk caching, and allow adjustment of build options such as parallelization.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The results are all based on "wall time" - what you'd see on a clock on the wall - because I mainly care about not wasting my time waiting for builds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Major Factors That Determine Build Speed&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When you're doing a build, the main things that happen are:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The CPU calculates things and makes decisions&lt;/li&gt;&lt;li&gt;The hard drive reads and writes files&lt;/li&gt;&lt;li&gt;Memory-based data is read from and written to RAM.&lt;/li&gt;&lt;/ul&gt;The fastest build you could do on a particular set of hardware would strike a balance among the CPU, hard drive, and RAM, so that all of them are constantly busy, with none of them ever waiting any of the others.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Realistically, you will never achieve that 100% utilization on all three components. Even if you adjusted the system so that file foo.c would compile at 100% utilization on all three, if file bar.c used more or larger header files, compiling it might not achieve 100% CPU utilization because the system would spend more time reading header files from the disk, and the CPU would have to wait for that. Also, settings that are optimal for the compiler might not be optimal for the linker. So all we can aim at is an overall good build time.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are other resources one can apply to compiles which I also plan to address - in particular, underutilized CPU horsepower out on the network via distcc.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So on to the next post... and I would love to get feedback and suggestions!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-6067648097723961443?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/6067648097723961443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=6067648097723961443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/6067648097723961443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/6067648097723961443'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2009/09/linux-build-optimization-i-need-for.html' title='Linux Build Optimization I: The Need for Speed'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-5723432293265934876</id><published>2009-05-24T21:07:00.000-07:00</published><updated>2009-07-16T21:57:42.470-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu 9.04'/><category scheme='http://www.blogger.com/atom/ns#' term='Jaunty Jackalope'/><category scheme='http://www.blogger.com/atom/ns#' term='Jackalope'/><category scheme='http://www.blogger.com/atom/ns#' term='FogBugz'/><category scheme='http://www.blogger.com/atom/ns#' term='Jaunty'/><category scheme='http://www.blogger.com/atom/ns#' term='Fog Creek'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Install FogBugz'/><title type='text'>Installing FogBugz on Ubuntu 9.04</title><content type='html'>Joel Spolsky is a notable netizen in the technology industry for a variety of reasons, including his blog, &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Joel on Software&lt;/span&gt;, his articles for Inc. magazine, his speeches at many industry conferences, and co-founding the &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Stack Overflow&lt;/span&gt; programmers' website.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Joel's day job is as CEO of Fog Creek Software, and Fog Creek's flagship product is FogBugz, an inexpensive web-based issue tracking system with some other nice features like an integrated wiki.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When my wife and I switched from Mac OS 9 to Mac OS X for day-to-day productivity work, we'd been using Seapine's TestTrack for bug tracking, but it became less and less viable for us. So she did a search for alternatives, and liked FogBugz the best. The commercial bug tracking systems were pretty expensive, and there weren't any open-source equivalents with good documentation at the time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;FogBugz is still quite reasonable for a small team that doesn't have IT staff: it's pretty cheap, and pretty good, and pretty functional, and pretty bug-free, and doesn't take a lot of administration or maintenance. Some of the open-source alternatives like Trac have probably caught up with it on features and ease of installation and administration. But FogBugz costs only $36.50 per programmer per year for a maintenance contract, so it' s not worth it to us to switch.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, in my opinion, FogBugz has one big flaw. While it runs on Windows, Mac OS X, Linux, and Unix servers, the FogBugz documentation and support is &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;heavily&lt;/span&gt; Windows-oriented. If you want to install on a non-Windows platform, Fog Creek's instructions are decidedly not turnkey and not updated even yearly. Their tech support people are nice, and happy to transfer licenses or point you to hard-to-find documentation URLs, but if you're having an unusual problem on a non-Windows platform that their documentation doesn't cover, they are of limited help.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, I decided to upgrade our FogBugz server from an older version of Ubuntu to 9.04 (Jaunty Jackalope), and did so by wiping the hard drive and re-installing everything, including FogBugz. So here are the general steps, after you've installed Ubuntu. This also is not exactly turnkey - you should be a reasonably knowledgeable Ubuntu user and know when to sudo things, for instance - but it should help keep you from running into roadblocks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Review a few URLs&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You should at least skim these, and may want to print them out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are some Fog Creek pages, but don't take them for gospel truth. I'm writing this post to correct and expand upon them: &lt;a href="http://www.fogcreek.com/FogBugz/docs/60/topics/setup/UnixGettingYourServerRead.html#deb"&gt;Getting Your Unix Server Ready For FogBugz&lt;/a&gt; and &lt;a href="http://www.fogcreek.com/FogBugz/docs/60/topics/setup/UnixSystemRequirements.html"&gt;Unix System Requirements&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You should also look at &lt;a href="https://help.ubuntu.com/community/ApacheMySQLPHP"&gt;ApacheMySQLPHP&lt;/a&gt; on the Ubuntu site, which has some slightly dated background on other components you'll need to install and configure.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Install a LAMP stack&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The FogBugz documentation's list of packages to install is very dated and incomplete. You don't need to install mono because it's included with Ubuntu 9.04 desktop. But you need to install a &lt;span class="Apple-style-span" style="font-style: italic;"&gt;lot&lt;/span&gt; of other packages so that the Apache, MySQL, and PHP parts of a LAMP stack will work correctly with FogBugz. Here's what I eventually wound up installing via Synaptic:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;apache2&lt;br /&gt;&lt;/li&gt;&lt;li&gt;php5&lt;br /&gt;&lt;/li&gt;&lt;li&gt;php5-cli&lt;br /&gt;&lt;/li&gt;&lt;li&gt;php5-imap&lt;br /&gt;&lt;/li&gt;&lt;li&gt;php5-dev&lt;br /&gt;&lt;/li&gt;&lt;li&gt;mysql-server&lt;br /&gt;&lt;/li&gt;&lt;li&gt;mysql-client&lt;br /&gt;&lt;/li&gt;&lt;li&gt;curl&lt;br /&gt;&lt;/li&gt;&lt;li&gt;php5-mysql&lt;br /&gt;&lt;/li&gt;&lt;li&gt;php-pear&lt;br /&gt;&lt;/li&gt;&lt;li&gt;mono-gmcs&lt;br /&gt;&lt;/li&gt;&lt;li&gt;mono-devel&lt;br /&gt;&lt;/li&gt;&lt;li&gt;php5-curl&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;When you install mysql, you'll have to give it an administrator account name and password. Remember these! You'll need them later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;And then these two are just handy:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mysql-query-browser&lt;br /&gt;&lt;/li&gt;&lt;li&gt;mysql-admin&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Configure Networking, Apache, and PHP&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If your server has a static IP address, edit &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/etc/hosts&lt;/span&gt;, and make sure your local and fully-qualified machine names (both &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;foo&lt;/span&gt; and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;foo.example.com&lt;/span&gt;) are associated with that IP address.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Edit &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/etc/apache2/httpd.conf&lt;/span&gt; and add a server name line:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ServerName foo.example.com&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Make sure all the PHP modules are enabled, and then restart the Apache web server:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo a2enmod php5&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo /etc/init.d/apache2 restart&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Set up a test page for your PHP extensions: edit &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/var/www/test.php&lt;/span&gt; and fill it with the PHP test info from &lt;a href="http://www.fogcreek.com/FogBugz/docs/60/topics/setup/UnixSystemRequirements.html"&gt;here&lt;/a&gt;. Then open &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;http://localhost/test.php&lt;/span&gt; in Firefox and make sure the XML, imap, mysql, and iconv lines all have a 1 at the end.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Install eAccelerator&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;eAccelerator is a caching system for PHP that FogBugz highly recommends. I do, too - when you're working with the FogBugz database from a client machine over a network, if you don't have eAccelerator installed, you'll be going on a lot of coffee breaks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, Ubuntu doesn't supply an eAccelerator package, so you have to build it from sources. The official page on how to do this is &lt;a href="http://eaccelerator.net/wiki/InstallFromSource"&gt;here&lt;/a&gt;, but I didn't find it very helpful on Ubuntu. &lt;a href="http://www.howtoforge.com/eaccelerator_php5_debian_etch"&gt;This page&lt;/a&gt; is a lot more accurate and detailed for Ubuntu installation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Configure MySQL&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, you'll need to get a MySQL prompt. You did write down your administrator name and password above, right?&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;mysql -u your_administrator_name &lt;administrator&gt; -p&lt;/administrator&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and enter the password when prompted.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, you'll need to follow the instructions &lt;a href="https://help.ubuntu.com/community/ApacheMySQLPHP#After%20installing%20MySQL"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I populated my FogBugz database by a simple directory copy of an old version, so I didn't run into this today. But from an earlier installation, I knew that FogBugz is &lt;a href="http://www.fogcreek.com/FogBugz/KB/errors/MySQLClientdoesnotsupport.html"&gt;not compatible&lt;/a&gt; with the most recent MySQL password scheme. That means if you're doing an initial installation or you're populating the database via export/import, you'll have to follow some &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/old-client.html"&gt;further instructions&lt;/a&gt; to tell MySQL to use an older password scheme.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Install FogBugz&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Download and unpackage the FogBugz tarball, and follow the &lt;a href="http://www.fogcreek.com/FogBugz/docs/60/topics/setup/UnixSetupSteps.html"&gt;Unix Setup Steps&lt;/a&gt; instructions. Unlike the instructions, I ran install.sh as superuser. When you run the install, it will ask if you want to install various Pear files; just type "y" for all of them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Eventually, you'll get to a web-based FogBugz configuration screen. You still do remember that MySQL administrator account information, right? Here's what I used:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;Server: localhost&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;Database name: fogbugz&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;FogBugz user account: fogbugz&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then the web screen will ask you for your Fog Creek order number and email address, and try to validate it with the Fog Creek license server. If you're doing a new installation, after this, you should be up and running.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was transferring the database and license from a previous installation. That confused the Fog Creek license server and it wanted me to call in to get my installation count incremented. However, I had done a straight backup of &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/var/lib/mysql/fogbugz&lt;/span&gt; on the older installation, so I:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Closed the web browser page that was telling me to call Fog Creek.&lt;/li&gt;&lt;li&gt;Shut down mysql&lt;/li&gt;&lt;li&gt;Did a &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;cp -pr&lt;/span&gt; from the backup into my new installation&lt;/li&gt;&lt;li&gt;Did a chown/chgrp of the copied files to mysql, and&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Restarted mysql&lt;/li&gt;&lt;/ol&gt;And at that point, FogBugz was back in operation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It all took a few hours, and would certainly have been a lot quicker if I'd had this post!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Update (16 July 2009)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;David Llopis remarked in the comments: &lt;span class="Apple-style-span" style="font-style: italic;"&gt;I think if you install "apache2", Ubuntu defaults to installing "apache2-mpm-worker" rather than the "apache2-mpm-prefork" that you should use.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You do need prefork for PHP to run correctly, and David is correct if you do something like just go into Synaptic and select the "apache2" package and hit the "Apply" button.. However, if you don't hit the "Apply" button right away, and select the "php5" package, that will deselect the worker package and select the prefork package. Anyway, you should definitely double-check that you're installing prefork, particularly if you're installing in a different Ubuntu version than 9.04.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, Chris Lamb posted &lt;a href="http://chris-lamb.co.uk/2009/04/11/installing-fogbugz-debian-way/"&gt;instructions&lt;/a&gt; on installing FogBugz into Debian Lenny; they contain a few configuration tweaks that might be worth a look.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-5723432293265934876?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/5723432293265934876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=5723432293265934876' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/5723432293265934876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/5723432293265934876'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2009/05/installing-fogbugz-on-ubuntu-904.html' title='Installing FogBugz on Ubuntu 9.04'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-6412536612783651340</id><published>2008-12-31T16:41:00.000-08:00</published><updated>2008-12-31T17:32:21.682-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS'/><category scheme='http://www.blogger.com/atom/ns#' term='dual boot'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac Pro'/><category scheme='http://www.blogger.com/atom/ns#' term='Macintosh Pro'/><category scheme='http://www.blogger.com/atom/ns#' term='dual-boot'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='black screen'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Leopard'/><title type='text'>Curing Ubuntu's Black Screen of Death on a Mac Pro</title><content type='html'>My wife recently gave me her very recent Mac Pro, and I wanted to set it up for triple-boot Leopard, Snow Leopard, and Ubuntu 8.10 (Intrepid Ibex). The Mac OS X installs were, of course, trivial - but much to my surprise, Ubuntu wasn't.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd recently used the general approach from the Ubuntu wiki to set up an old Intel iMac with dual-boot Leopard/Intrepid, and everything went like clockwork:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Boot from the Leopard install DVD&lt;/li&gt;&lt;li&gt;Early in the OS X install process, use Disk Utility to create a small HFS Plus partition and a big partition I would later snuff for use by Ubuntu, then install Leopard.&lt;/li&gt;&lt;li&gt;Install rEFIt.&lt;/li&gt;&lt;li&gt;Use a GParted LiveCD to turn the partition from step 2 into free space.&lt;/li&gt;&lt;li&gt;Install Ubuntu Intrepid from a LiveCD.&lt;/li&gt;&lt;/ol&gt;Then I went to do the same thing for the Mac Pro, but when the LiveCD went into graphics mode, the screen went black.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That was odd, since lots of people have reported successfully installing various Ubuntu versions on Mac Pros.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, black screens for Ubuntu are not unusual; they generally indicate some kind of driver or X configuration mismatch. I routinely run into them when doing kernel updates on one of my boxen, and the usual search engines offer lots of hits for solutions. But none of the usual techniques worked on this particular Mac Pro.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To cut to the chase, here's the solution. Starting after Step 3 above...&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;From the Mac System Profiler, determine the manufacturer and details of your video card. (Mine was an ATI Radeon HD 2600 with 256 MB RAM.)&lt;/li&gt;&lt;li&gt;Start the installation from the Ubuntu Alternate CD, which uses an old DOS-style text mode for its user interface. (If you use the LiveCD or LiveDVD, it will try to go into graphics mode and you're toast.)&lt;/li&gt;&lt;li&gt;Zap that big partition you made as part of the installation process. You may also have to manually specify the size of your swap space. You can look up details on how to do this using the usual search engines.&lt;/li&gt;&lt;li&gt;When you reboot at the end of your Ubuntu install, you'll get the black screen. Press command-control-F1 to switch to a command prompt. (The meta-keys may be different if you picked a non-Macintosh keyboard during install.)&lt;/li&gt;&lt;li&gt;Use &lt;span class="Apple-style-span" style="font-style: italic;"&gt;sudo apt-get&lt;/span&gt; to update everything, and reboot.&lt;/li&gt;&lt;li&gt;When the screen goes black, use the key combo again to get a command prompt. Use &lt;span class="Apple-style-span" style="font-style: italic;"&gt;sudo apt-get&lt;/span&gt; to install &lt;span class="Apple-style-span" style="font-style: italic;"&gt;envyng-gtk&lt;/span&gt;. Then do &lt;span class="Apple-style-span" style="font-style: italic;"&gt;sudo envyng -t&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Pick the manufacturer of your video card from the envyng list, then reboot.&lt;/li&gt;&lt;/ol&gt;At that point, I was successfully booting into the Ubuntu GUI.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-6412536612783651340?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/6412536612783651340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=6412536612783651340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/6412536612783651340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/6412536612783651340'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2008/12/curing-ubuntus-black-screen-of-death-on.html' title='Curing Ubuntu&apos;s Black Screen of Death on a Mac Pro'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-8088497948154118469</id><published>2008-12-03T15:05:00.000-08:00</published><updated>2008-12-03T16:01:32.227-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='dual boot'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='Vaio'/><category scheme='http://www.blogger.com/atom/ns#' term='triple-boot'/><category scheme='http://www.blogger.com/atom/ns#' term='RAID'/><category scheme='http://www.blogger.com/atom/ns#' term='VGN-AR'/><category scheme='http://www.blogger.com/atom/ns#' term='triple boot'/><category scheme='http://www.blogger.com/atom/ns#' term='dual-boot'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Sony'/><title type='text'>Triple-Boot Sony Vaio VGN-AR Notebook - Part II: How I Did It</title><content type='html'>&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I finally got my Sony Vaio VGN-AR290G laptop to triple-boot XP, Vista, and Ubuntu. Here's the general gist of how I did it.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;This is not a detailed how-to - it's pretty general, and only includes the major steps but not the details. So if you decide to do this, you should read it fully first, and then look up any specific steps you're not sure about. You also need to be sure to read &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.howtogeek.com/howto/windows/resolving-setup-did-not-find-any-hard-disk-drives-during-windows-xp-installation/"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;this article&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; first.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Make sure the hard drivers are not coupled as RAID. The instructions for this are in &lt;/span&gt;&lt;a href="http://bobertville.blogspot.com/2008/11/triple-boot-sony-vaio-vgn-ar-notebook.html"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;my previous post&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Put a recent GParted boot CD in the CD-ROM drive and reboot. (I used version 0.3.9-4.) Use GParted to delete all partitions from both drives. Don't create any new ones. Exit GParted.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;On an existing XP installation, go to the &lt;/span&gt;&lt;a href="http://esupport.sony.com/US/perl/swu-list.pl?mdl=VGNAR290G"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AR290G support page&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and download the one file under the RAID heading - the file description is "Original - Intel® RAID Driver". You don't need anything else from there right now.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Make an empty directory somewhere on the XP installation machine. Run the program you downloaded in step 4. It will want to install files onto a floppy, but change it to install the files into the directory you made. Those files are the driver files you'll slipstream.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;On the same existing XP installation, go to &lt;/span&gt;&lt;a href="http://www.nliteos.com/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;the nLite home pag&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;e and download the nLite slipstreaming utility.Get an original Windows XP SP2 installation disk (I made mine from the MSDN Professional DVD). Use nLite per the instructions from &lt;/span&gt;&lt;a href="http://www.howtogeek.com/howto/windows/resolving-setup-did-not-find-any-hard-disk-drives-during-windows-xp-installation/"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;the site I told you to read abov&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;e to create a slipstreamed XP installer ISO image.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Burn the ISO image onto a blank CD-ROM. This is your slipstreamed XP installer CD. I used a MacBook to do this; the Mac OS Disk Utility works great for this and comes for free with Mac OS. There are other utilities to do this on Windows (e.g. Nero) and Linux (e.g. Brasero) that will work fine as long as you have a compatible CD burner.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Put the slipstreamed XP installer CD into the Vaio and reboot. It will eventually tell you there are no installable disk partitions, and give you the choice of formatting one. Format a partition on the first drive that only uses part of the drive, and install there. (My two drives are each about 93 GB, so I made this partition 40 GB). Finish the XP install, and reboot. Verify you can boot from your XP installation.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Put a Vista installer CD or DVD into the Vaio and reboot it. (I used a Vista Ultimate DVD that came with an MSDN Professional subscription.) Tell it to install into the unformatted space on the first drive. (This is the leftover space on the first drive from the last step.) Finish the installation, and verify the Vista bootloader appears and lets you boot either from Vista or an "earlier" version of Windows (your XP installation). Verify you can boot into each Windows version.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Put a Ubuntu 8.10 Alternate Install CD into the Vaio and reboot it. Tell it to install into the largest unformatted space, which will be the entire second drive. Finish the installation. In one of the last screens, confirm that grub should let you boot into either Ubuntu or the Vista bootloader.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;After removing the Ubuntu CD, verify you can boot into Ubuntu, Windows XP via the Vista bootloader, and Windows Vista via the Vista bootloader.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style=" "&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Now you're triple-booting, but there's one more important step. On a computer other than the Vaio (the XP system from step 3 will work fine), go back to &lt;/span&gt;&lt;a href="http://esupport.sony.com/US/perl/swu-list.pl?mdl=VGNAR290G"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;the AR290G support page&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and download installers for video and networking drivers, and any other drivers or programs you think you'll need. Copy them onto a USB flash drive, then boot into XP on your Vaio, attach the USB flash drive, and install the drivers and programs you downloaded.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;    &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;You're done!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span" style="font-family: georgia; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Questions and Answers&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Q:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Why did you decouple the RAID?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; I had tried this with RAID enabled, and was able to get either XP or Ubuntu working, but not both at the same time. Also, my main interest in this machine is doing compiles. I ran some benchmarks, and saw absolutely zero benefit to using RAID.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Q:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; What? Using RAID provided no benefit?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Yes. I set the system up as RAID 0, installed Ubuntu, and compiled gcc 4.3.2. Then I decoupled the drives, re-installed Ubuntu, and compiled gcc 4.3.2. And I got the following results:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Extract (tar xf) the gcc tarball: RAID0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;2.5s, No RAID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;10s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;./configure: RAID0 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;5s, No RAID&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;6s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;make (sequential compile): RAID0&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;1h 26m&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, No RAID &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;1h 26m&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;make -j 8 (parallel compile)&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;: RAID0 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;13m 22s&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, No RAID &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style=" ;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;12m 50s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Q:&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; That's weird. Why do you think RAID doesn't accelerate compiles?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A:&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Because gcc is not disk-bound, it's CPU-bound. On top of that, I believe the RAID in the Vaio is &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Redundant_array_of_independent_disks#Firmware.2Fdriver-based_RAID"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"fake RAID"&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, which uses the CPU to implement some of the RAID capabilities. So when you do parallel compiles and really beat up the CPU, the extra CPU overhead to implement the RAID actually slows down the compile. (It's possible other compilers, such as Visual Studio, might benefit from a RAID 0 configuration, but that's just a guess.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Q:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Why did you use GParted and Ubuntu Alternate Install?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; I had them handy. I suspect that I could have used the Ubuntu LiveCD. Then in step 3 I would have booted from the LiveCD and used the Partition Editor, and in step 12 I would have installed from the LiveCD. But I don't know for sure this will work.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Q:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Why did you install all those drivers into XP at step 13? Why not slipstream them in step 8?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; I couldn't figure out an easy way to slipstream them, and this way works fine.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style=" ;font-family:Helvetica;font-size:12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-8088497948154118469?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/8088497948154118469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=8088497948154118469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/8088497948154118469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/8088497948154118469'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2008/12/triple-boot-sony-vaio-vgn-ar-notebook.html' title='Triple-Boot Sony Vaio VGN-AR Notebook - Part II: How I Did It'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-2475274648642308328</id><published>2008-11-18T12:38:00.000-08:00</published><updated>2008-11-18T13:22:20.799-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='dual boot'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='Vaio'/><category scheme='http://www.blogger.com/atom/ns#' term='triple-boot'/><category scheme='http://www.blogger.com/atom/ns#' term='RAID'/><category scheme='http://www.blogger.com/atom/ns#' term='VGN-AR'/><category scheme='http://www.blogger.com/atom/ns#' term='triple boot'/><category scheme='http://www.blogger.com/atom/ns#' term='dual-boot'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Sony'/><title type='text'>Triple-Boot Sony Vaio VGN-AR Notebook - Part I: RAID Uncoupling</title><content type='html'>I needed a portable development machine that would let me triple-boot XP, Vista, and Ubuntu.&lt;br /&gt;&lt;br /&gt;So far, not a problem - but here's the kicker: it also needs a PCMCIA Type II (CardBus) slot. I occasionally code for a dated interface which, for laptops, is only available in PCMCIA. Unfortunately, PCMCIA has almost entirely been replaced by ExpressCard. As far as I can tell, in late 2008 you can get it on a few expensive Dells, a few of Acer's low-end Extensas - and Sony's Vaio VGN-AR series.&lt;br /&gt;&lt;br /&gt;These Vaios had a lot of other things I liked, including a nice big 17" screen, and dual SATA drives. Woohoo - different drives for different OS's!&lt;br /&gt;&lt;br /&gt;So I got a lightly used VGN-AR290G from eBay, and then found something out...&lt;br /&gt;&lt;br /&gt;Those dual hard drives? They're hooked up to an Intel hardware RAID controller, and by default are configured as RAID 1. The upshot?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can install Vista.&lt;/li&gt;&lt;li&gt;You can also install the custom, pre-slipstreamed version of XP Media Center Edition that comes with it - but that's not what I need for development&lt;/li&gt;&lt;li&gt;You &lt;span style="font-style: italic;"&gt;can't&lt;/span&gt; install plain old XP Pro, because it doesn't see any disk drives.&lt;/li&gt;&lt;li&gt;Ubuntu sees both disk drives, and &lt;span style="font-style: italic;"&gt;appears&lt;/span&gt; to install, but &lt;span style="font-style: italic;"&gt;doesn't boot&lt;/span&gt;. That's because Ubuntu attempts to install as non-RAID, and then when you boot, the GRUB bootloader is all confused.&lt;/li&gt;&lt;/ul&gt;There are instructions online for getting Ubuntu installed onto RAID, and somebody claims to have gotten it to work with the 290G with dual boot, but I didn't have much luck. It would rock to have the speed of RAID0 on this thing, but I decided it would be simpler to uncouple the RAID.&lt;br /&gt;&lt;br /&gt;And that, as usual, is easier said than done. But to save you the time I spent figuring it out, here's the recipe:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Reboot the laptop.&lt;/li&gt;&lt;li&gt;When the Sony logo comes on the screen, hold down the F2 key. You can let up when the laptop starts beeping at you. After a few seconds, this will bring you into the BIOS utility.&lt;/li&gt;&lt;li&gt;Go to BIOS utility's &lt;span style="font-weight: bold;"&gt;Advanced&lt;/span&gt; tab and switch RAID Configuration to &lt;span style="font-weight: bold;"&gt;Show&lt;/span&gt; (if it's not set to that already). Then save the BIOS configuration and exit. The laptop should now reboot.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You should now see more boot messages, and eventually get to a screen that shows you the disk configuration. During the few seconds this is up, hold down the &lt;span style="font-weight: bold;"&gt;Ctrl&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;I&lt;/span&gt; keys at the same time. This should switch the computer into the RAID editor utility.&lt;/li&gt;&lt;li&gt;In the RAID utility, from main menu, choose the option to &lt;span style="font-weight: bold;"&gt;Reset Disks to Non-RAID&lt;/span&gt;. Save the configuration and exit.&lt;/li&gt;&lt;/ol&gt;The most common sequence for setting up an XP/Vista/Linux triple-boot is to partition the drive(s) with gparted, then install XP, Vista, and Linux in that order. But alas, after all this, XP Pro still didn't recognize the hard drives. So I just installed Ubuntu 8.10, since that was my most pressing need, and it now works fine.&lt;br /&gt;&lt;br /&gt;My guess is that I'll have to slipstream the RAID driver onto the XP Pro install CD, but that's a job (and a post) for another day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-2475274648642308328?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/2475274648642308328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=2475274648642308328' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/2475274648642308328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/2475274648642308328'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2008/11/triple-boot-sony-vaio-vgn-ar-notebook.html' title='Triple-Boot Sony Vaio VGN-AR Notebook - Part I: RAID Uncoupling'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-5009646261811972319</id><published>2008-10-27T11:31:00.000-07:00</published><updated>2008-10-27T11:53:13.556-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='OMAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux Symposium'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='GUADEC'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='eye candy'/><category scheme='http://www.blogger.com/atom/ns#' term='cell phone'/><category scheme='http://www.blogger.com/atom/ns#' term='XScale'/><title type='text'>Coding Eye-Candy for Portable Linux Devices</title><content type='html'>At ACCESS, I've had the opportunity to do interesting things with Linux on cell phones. Some modern ARM chips, such as the Marvell XScale and TI OMAP series, have unusual frame buffer architectures that let you do "eye candy" on the cheap, without requiring a GPU.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In July 2008, I presented a paper about this work at the Ottawa Linux Symposium. I was also supposed to give it at GUADEC in Istanbul, but wasn't able to attend, so&lt;a href="http://opensourcetogo.blogspot.com/"&gt; David "Lefty" Schlesinger&lt;/a&gt; gave it for me there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested, here are links to:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The &lt;a href="http://idisk.mac.com/bobertjmurphy-Public/OLS%202008/murphy.pdf"&gt;paper&lt;/a&gt; itself, which is somewhat academic in tone&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The &lt;a href="http://idisk.mac.com/bobertjmurphy-Public/OLS%202008/Eye%20Candy.ppt"&gt;PowerPoint presentation&lt;/a&gt; based on the paper, which is more informal&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A &lt;a href="http://idisk.mac.com/bobertjmurphy-Public/OLS%202008/OverlayTransparency.mp4"&gt;movie&lt;/a&gt; showing this in action on an XScale-based Zylonite prototype system, with narration by yours truly&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;As of the date of this post, I'm in the middle of porting this system to an OMAP 3430-based system.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-5009646261811972319?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/5009646261811972319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=5009646261811972319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/5009646261811972319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/5009646261811972319'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2008/10/coding-eye-candy-for-portable-linux.html' title='Coding Eye-Candy for Portable Linux Devices'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3303841473713500702.post-6338247464289512719</id><published>2008-10-20T00:05:00.000-07:00</published><updated>2008-10-27T11:25:57.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='pkg-config'/><category scheme='http://www.blogger.com/atom/ns#' term='configure'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='autotools'/><category scheme='http://www.blogger.com/atom/ns#' term='make'/><title type='text'>Open Source Builds For Newbies</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you build open source software, you'll run into a lot of variants of the following list of commands:&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;  cd (some directory)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  ./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  sudo make install&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some common variants replace the &lt;span style="font-weight: bold;font-family:courier new;"&gt;./configure&lt;/span&gt; with &lt;span style="font-weight: bold;font-family:courier new;"&gt;./autogen.sh,&lt;/span&gt; or add some extra stuff on the end of that line or the make line. This article explains what's going on with this kind of command sequence.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;Makefiles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you look at most programs and other software components whose purpose is not trivial, they're made from more than one source file. There are several ways to tell a computer how to put all those source files together to create a component, and the most common is called a &lt;span style="font-style: italic;"&gt;makefile&lt;/span&gt;. (There are also various kinds of &lt;span style="font-style: italic;"&gt;project&lt;/span&gt; files that are used with development systems like Microsoft's Visual Studio, or Metrowerks' CodeWarrior.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;The Bad Old Days&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The problem with makefiles is that they can need different contents to account for different computers and operating systems and compiler systems. For example, you might need one makefile for Linux on an x86 computer with version 3.4 of the gcc compiler, another for the same system using gcc 4.2, yet another for a Sun workstation running Solaris, and yet another for Mac OS X.&lt;br /&gt;&lt;br /&gt;Up through the mid 1990s, the normal way to cope with this was to supply a different makefile for each combination of hardware, operating system, and compiler. That often meant a dozen or more makefiles. And if you had an unsupported combination, you had to write your own makefile.&lt;br /&gt;&lt;br /&gt;Also, many software components rely on other software components, mostly known as &lt;span style="font-style: italic;"&gt;libraries&lt;/span&gt;. But people work on libraries, so they change over time, and it's possible to get mismatches. For instance, if you write a program that works with PNG images, you'll probably want to use the "libpng" library. But there are different versions of libpng, and in the old days, if you wrote your program to work with one version, and somebody got your source code and tried to build it with a different version of libpng, the build might have failed, or the program might not have worked right. And makefiles have no reasonable way to check to see if you have the right version of a library.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;The Good New Days&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Several tools solve this whole problem - these are called the GNU Autotools, and pkg-config.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The &lt;span style="font-weight: bold;"&gt;GNU Autotools&lt;/span&gt; create the &lt;span style="font-weight: bold;"&gt;configure&lt;/span&gt; file, which is a set of commands that builds a makefile for your particular computer, operating system, and compiler collection.&lt;/li&gt;&lt;li&gt;Then the &lt;span style="font-weight: bold;"&gt;configure&lt;/span&gt; file typically uses &lt;span style="font-weight: bold;"&gt;pkg-config&lt;/span&gt; to make sure you have the right versions of any libraries you need, and complains if you don't.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;What Each Step Does&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;"&gt;cd (some directory)&lt;/span&gt; makes that directory the current one.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;"&gt;./configure&lt;/span&gt; runs the configure script in that directory. That checks your operating system, compiler, CPU, and what libraries you have installed. If everything is okay, it creates a makefile in that same directory.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;"&gt;make&lt;/span&gt; gets information from the makefile to build your software component&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;"&gt;sudo make install&lt;/span&gt; takes the component you built at the make step, and installs it where it needs to go on your computer to be useful.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;For more information&lt;/span&gt;&lt;br /&gt;Here are links about:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.elitecoders.de/mags/cscene/CS2/CS2-10.html"&gt;makefiles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Make_%28software%29"&gt;make&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/GNU_build_system"&gt;GNU Autotools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Pkg-config"&gt;pkg-config&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3303841473713500702-6338247464289512719?l=bobertville.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobertville.blogspot.com/feeds/6338247464289512719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3303841473713500702&amp;postID=6338247464289512719' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/6338247464289512719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3303841473713500702/posts/default/6338247464289512719'/><link rel='alternate' type='text/html' href='http://bobertville.blogspot.com/2008/10/open-source-builds-for-newbies.html' title='Open Source Builds For Newbies'/><author><name>bobert</name><uri>http://www.blogger.com/profile/07769961155254146563</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
