<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>VSoft Technologies Blogs</title><description>VSoft Staff Blogs</description><link>http://www.finalbuilder.com/Resources/Blogs.aspx</link><item><title>Building Feature &amp; Personal branches with Continua CI</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/693/building-feature-personal-branches-with-continua-ci.aspx</link><category>Continua CI</category><pubDate>Mon, 11 Mar 2013 20:36:49 GMT</pubDate><description>&lt;p&gt;
With the rise of &amp;nbsp;Distributed Version Control systems in recent years, the
use of branching has exploded. Developers using DVCS think nothing of creating new
branches, &amp;nbsp;a common pattern being the use if &lt;a href="http://martinfowler.com/bliki/FeatureBranch.html" target="_blank" title="Martin Fowler on Feature Branching" re_target="_blank"&gt;Feature
Branches&lt;/a&gt; and Personal branches.&lt;/p&gt;
&lt;p&gt;
In older Continuous Integration Servers (like our own FinalBuilder Server), managing
builds on branches was somewhat problematic. In Continua CI, if you use Git, Mercurial
or Subversion, working with branches is easy.&lt;/p&gt;
&lt;p&gt;
For branch aware Repository types in Continua CI, you can select which branches
to monitor, either a Single Branch, All Branches or By Pattern (Subversion only
supports Single Branch or By Pattern).&lt;/p&gt;
&lt;p&gt;
If we select By Pattern, the UI changes to allow us to specify the pattern we want
to match on. The pattern is a Regular Expression that matches the branch names (as
seen &amp;amp; presented by Continua CI). In the example below, the Continua CI repository
would see commits in branches "master", and any branches that start with feature-&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
&lt;img alt="" src="/Portals/0/ArticleImages/BlogImages/vincent/Featurebranches/BranchPattern.png" /&gt;&lt;/p&gt;
&lt;p&gt;
This is only half the story though. Changing the branches that the Continua CI Repository
will monitor only controls which commits Continua CI knows about , but it doesn't
control which branches will be built.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
In most cases, you would just leave the repository monitoring all branches, because
it is &lt;a href="http://wiki.finalbuilder.com/display/continua/Repository+Trigger" target="_blank" title="Repository Trigger Documentation" re_target="_blank"&gt;Repository
Triggers&lt;/a&gt; which control which branches are built.&lt;/p&gt;
&lt;p&gt;
Repository Triggers point to a single Repository (you can however define as many
repositories and triggers as you like), and they allow you monitor commits from
All Branches, the Default Branch or a Pattern matched Branch&lt;/p&gt;
&lt;p&gt;
So lets say we want to control how our build is done when using a feature branch.
All we need to do is define a Trigger and specify the patten for the feature branch
names&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
&lt;img alt="" src="/Portals/0/ArticleImages/BlogImages/vincent/Featurebranches/PatternMatchTrigger.png" /&gt;
&lt;/p&gt;
&lt;p&gt;
Notice that we can also define the values of &lt;a href="http://wiki.finalbuilder.com/display/continua/Configuration+Variables" target="_blank" re_target="_blank"&gt;Configuration Variables&lt;/a&gt; which will be
set when the trigger queues the build. What this means is we can use the same Configuration
to build dev/release/feature branches, and enable and disable parts of the build
based on the variables set by the trigger (using the flow control actions in the
stage editor). So for example, if our release branches all started with release-
&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
&lt;img alt="" src="/Portals/0/ArticleImages/BlogImages/vincent/Featurebranches/ReleasePatternMatchTrigger.png" /&gt;
&lt;/p&gt;
&lt;p&gt;
The Branch Pattern Matching feature in Continua CI makes building Feature Branches
simple.&lt;/p&gt;</description></item><item><title>The future of FinalBuilder Server is Continua CI</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/694/the-future-of-finalbuilder-server-is-continua-ci.aspx</link><category>Continua CI,FinalBuilder Server</category><pubDate>Mon, 11 Mar 2013 18:36:02 GMT</pubDate><description>&lt;p&gt;It's been a long time coming, but the release of Continua CI, our next generation Continuous Integration server product is almost here. Continua CI will replace FinalBuilder Server (FBS),
in other words, FBS 7 is the last Major release of FinalBuilder Server. Of course we will continue to support FinalBuilder Server 7 for some time, but no new features will be added to it.&lt;/p&gt;
&lt;p&gt;Licensing wise, customers with current Software Assurance (on FinalBuilder Server User licenses) will automatically receive Continua CI licenses when it is released (using 2 User licenses = 1 Concurrent Build License).
I detailed how Continua CI licensing will work in &lt;a href="http://www.finalbuilder.com/Resources/Blogs/PostId/692/introducing-continua-ci-beta.aspx"&gt;this blog post.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;It's fair to say that FinalBuilder Server has some major limitations, the main one being scalability. The architecture of FBS is such that moving it forward to provide better performance and scability would be next to impossible,
so we decided to start from scratch, taking into account what customers were asking for, where the industry were heading, and looking for better ways to aproach continuous integration in general.&lt;/p&gt;
&lt;p&gt;Continua CI is written using C#, .NET 4, ASP.NET MVC4 + extensive use of jQuery. It uses a database engine (PostgreSQL or SQL Server 2008+) unlike FBS which uses .net serialization (which has been problematic).&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
&lt;/p&gt;
&lt;style&gt;
    .featureTable
    {
    border: 1px solid #0071c5;
    border-collapse: collapse;
    width:100%;
    margin-left: auto;
    margin-right: auto;
    }
    .featureTable thead
    {
    background-color : #0071c5;
    color : White;
    }
    .featureTable td
    {
    border: 1px solid #0071c5;
    padding : 5px;
    }
&lt;/style&gt;
&lt;table class="featureTable" align="center" cellspacing="0" cellpadding="0"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;td style="width: 20px;"&gt;Feature&lt;/td&gt;
            &lt;td style="width: 40%;"&gt;FinalBuilder Server&lt;/td&gt;
            &lt;td style="width: 40%;"&gt;Continua CI&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;Build Runners&lt;/td&gt;
            &lt;td&gt;FinalBuilder Only&lt;/td&gt;
            &lt;td&gt;FinalBuilder, Ant, Nant, MSBuild, Visual Studio (more will be added)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Version Control Systems&lt;/td&gt;
            &lt;td&gt;Accurev, Alien Brain, Bazaar, Starteam, CVS, File System, Git, Mercurial, Perforce, PlasticSCM, Subversion, SurroundSCM, Vault, SourceSafe, TFS&lt;/td&gt;
            &lt;td&gt;Bazaar, FileSystem, Git*, Mercurial*, Perforce, Subversion*, SurroundSCM, TFS, Vault (Others will be added based on demand.. except sourcesafe... let it die people!)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;VCS Branch Support*&lt;/td&gt;
            &lt;td&gt;Single Branch&lt;/td&gt;
            &lt;td&gt;*All Branches, Single Branch or *By Pattern (depends on VCS type)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;VCS Checkout/Get&lt;/td&gt;
            &lt;td&gt;Optional, can be handled by FB script.&lt;/td&gt;
            &lt;td&gt;Clean checkout into clean workspace for each build. Source is cached on Server and agents.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Issue Tracker support&lt;/td&gt;
            &lt;td&gt;None&lt;/td&gt;
            &lt;td&gt;FogBugz, Bugzilla,Jira, Youtrack, custom.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Stages, Conditions&lt;/td&gt;
            &lt;td&gt;Single FinalBuilder Script&lt;/td&gt;
            &lt;td&gt; Unlimited Stages, unlimited build runners.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Concurrent Builds&lt;/td&gt;
            &lt;td&gt;Only of different projects, builds of projects currently running are queued.&lt;/td&gt;
            &lt;td&gt;Concurrency based on license and agent(s) configuration.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Scalability&lt;/td&gt;
            &lt;td&gt;Single Server, requires full server install on other machines when single server is loaded too heavily.&lt;/td&gt;
            &lt;td&gt;Central Server, 1 or more agents installed on as many machines as you like. &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Licensing&lt;/td&gt;
            &lt;td&gt;Per User licensing.&lt;/td&gt;
            &lt;td&gt;Per Concurrent Build - Free install includes 1 Concurrent build, 1 local agent, unlimited users. At least 1 concurrent build license is needed to allow remote agents.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Security Model&lt;/td&gt;
            &lt;td&gt;Simple Users &amp;amp; Roles.&lt;/td&gt;
            &lt;td&gt;Users, Groups, Roles, Permissions, Access Control Lists (global, project and configuration levels)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Authentication&lt;/td&gt;
            &lt;td&gt;Limited Active Directory support, Forms Authentication only.&lt;/td&gt;
            &lt;td&gt;Forms only, Mixed or Windows only Authentication&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Platforms&lt;/td&gt;
            &lt;td&gt;Windows Only.&lt;/td&gt;
            &lt;td&gt;Windows Only - other Platforms in the future.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td colspan="3"&gt; (*) - Branch monitoring only available on Git, Mercurial and Subversion. &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;h3&gt;Migrating to Continua CI&lt;/h3&gt;
&lt;br /&gt;
&lt;h4&gt;Key Differences&lt;/h4&gt;
&lt;br /&gt;
&lt;p&gt;Whilst both Continua and FinalBuilder Server (FBS) are both Continuous Integration Servers, they are quite different in how they operate. Continua CI's design is based on feedback
from FinalBuilder Server customers, and with a view to making it appeal to more users (FBS is only of use to FinalBuilder Users). The differences in concepts between the two products
make it difficult to create an comprehensive automated migration from FBS to Continua. There is a conversion tool that provides a "leg up" in the conversion, but some manual intervention
will be needed (more on that in a future post).&lt;/p&gt;
&lt;br /&gt;
&lt;h4&gt;Working with FinalBuilder Projects&lt;/h4&gt;
&lt;br /&gt;
&lt;p&gt;Perhaps the biggest difference for FBS users is where the FinalBuilder Project Files live. In FBS, the FinalBuilder project files (.fbp7/.fbz7) are managed by FBS and each FBS project
references a single FB projects. In Continua, your FinalBuilder Project files must be in a version control Repository that is referenced by your Configuration. Continua is not tied to
FinalBuilder in any way, FinalBuilder is just one of a number of different Build Runner Actions available. &lt;/p&gt;
&lt;br /&gt;
&lt;h4&gt;Where and when the Build runs&lt;/h4&gt;
&lt;br /&gt;
&lt;p&gt;FinalBuilder Server projects all run on the same machine, the one where FBS is installed. This unfortunately limits how many builds can be run concurrently. FBS also doesn't allow
multiple builds of the same project to run concurrently, so for example a CI build triggered by a checkin, and a manually started build for the same project cannot run at the same time.
The main reason for this is that the working folder and source code are managed by the FinalBuilder project.&lt;/p&gt;
&lt;p&gt;Continua CI uses Build Agents to run the builds. Agents can be installed on the same machine as Continua Server, or on other machines. Each agent can run multiple concurrent builds
(limited only by hardware resources and software licenses), and each build get's its own working folder and copy of the source code (which is managed by Continua). When a build is queued in Continua, it's
requirements (compilers &amp;amp; other tools needed) are evaluated against the available Agents capabilities, and a suitable agent is selected. The build will run when a suitable agent is available
to run the build. This may be immediately or at a later time. If no suitable agent is available, then the build will stay on the queue until one becomes available or the build is cancelled by a user.&lt;/p&gt;
&lt;br /&gt;
&lt;h4&gt;Continua CI and FinalBuilder&lt;/h4&gt;
&lt;br /&gt;
&lt;p&gt;Continua includes a FinalBuilder Action which will run any FinalBuilder Project which is available in the build's workspace. To get the FinalBuilder project into the build workspace, it needs to
be in a Repository which is associated with the Configuration. Note that this action only supports FinalBuilder 7.0.0.1795 or later, if you are using older versions of FinalBuilder, you can still use
them with the Execute Program Action. FinalBuilder needs to be installed on each Agent machine (the agent will detect that it is installed, and report that to the server).&lt;/p&gt;
&lt;br /&gt;
&lt;h5&gt;FinalBuilder Project Variables&lt;/h5&gt;
&lt;br /&gt;
&lt;p&gt;Since Continua lacks the tight integration with FinalBuilder that FBS has, it has no knowledge of the internals of the FinalBuilder Project and that includes Project Variables. The FinalBuilder Action
in Continua allows you to set the values of those project variables from the action, but you will need to know what those project variables are. Continua is unable to inspect the FinalBuilder Project to
determine the varianbles needed as it has no access to the FinalBuilder Project file at design time. We are currently looking at ways to make this easier. &lt;/p&gt;
&lt;h4&gt;Continua CI and the future&lt;/h4&gt;
&lt;br /&gt;
&lt;p&gt;Of course, what will be released soon is only the start of what we have planned for Continua CI. We are planning an aggressive release cycle, with frequent updates. We have a long list of features
we plan to implement. Continua CI is built on a modular platform, and we will be releasing other modules over time.&lt;/p&gt;
&lt;br /&gt;
&lt;h4&gt;Documentation&lt;/h4&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://wiki.finalbuilder.com/display/continua/Continua+Documentation+Home"&gt;Documentation site&lt;/a&gt;&lt;a&gt;&lt;br /&gt;
&lt;/a&gt;&lt;a href="http://wiki.finalbuilder.com/display/continua/Concepts"&gt;Continua CI Concepts&lt;/a&gt;&lt;a&gt;&lt;br /&gt;
&lt;/a&gt;&lt;a href="http://wiki.finalbuilder.com/pages/viewpage.action?pageId=655774"&gt;Migrating from FinalBuilder Server&lt;/a&gt;&lt;a&gt;&lt;br /&gt;
&lt;/a&gt;&lt;a href="http://wiki.finalbuilder.com/display/continua/Setting+up+a+real+world+project"&gt;Setting up a real world project&lt;/a&gt;&lt;a&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a&gt;Take Continua CI for a spin&lt;/a&gt;&lt;/h4&gt;
&lt;a&gt;
&lt;br /&gt;
&lt;/a&gt;
&lt;p&gt;&lt;a&gt;The beta download links are pinned at the top of the &lt;/a&gt;&lt;a href="http://www.finalbuilder.com/forums/ContinuaCI/general-discussion/"&gt;Continua CI General Discussion forum&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;What if I find a bug?&lt;/h5&gt;
&lt;p&gt;Please post as much information as you can about your environment, the build of Continua CI you are using and the bug in the &lt;a href="http://www.finalbuilder.com/forums/ContinuaCI/bug-reports/"&gt;Continua CI Bug Reports forum&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Introducing Continua CI - Beta</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/692/introducing-continua-ci-beta.aspx</link><category>Continua CI,FinalBuilder Server</category><pubDate>Sun, 20 Jan 2013 21:13:42 GMT</pubDate><description>&lt;p&gt;We have now opened up the Beta program for Continua CI.&amp;nbsp; &lt;/p&gt;
&lt;h2&gt;What is Continua CI&lt;/h2&gt;
&lt;p&gt;Continua CI is our next generation Continuous Integration server product. This product will replace FinalBuilder Server once it's released.&lt;/p&gt;
&lt;p&gt;Continua CI is a far more advanced CI server than FinalBuilder Server, it's not tied to FinalBuilder (although it works very nicely with it), Continua CI supports FinalBuilder, MSBuild, ANT, NANT &amp;amp; Visual Studio as build engines (more will come in updates). The builds are performed by Agents, either on the same machine or on other machines as the Continua CI Server. &lt;/p&gt;
&lt;h5&gt;Version Control Support&lt;/h5&gt;
&lt;p&gt;In the initial release these version control systems will be supported : &lt;/p&gt;
&lt;p&gt;Bazaar, Git, Mercurial, Perforce, Subversion, SurroundSCM, TFS &amp;amp; Vault&lt;/p&gt;
&lt;p&gt;Note that we have absolutely no plans to add support for Source Safe(it's long overdue for retirement). We will add support for others in the future where there is demand. &lt;/p&gt;
&lt;h5&gt;System Requirements&lt;br /&gt;
&lt;br /&gt;
&lt;/h5&gt;
&lt;p&gt;Server : &lt;/p&gt;
&lt;p&gt;Windows Server 2003 or higher (no windows XP), .NET 4.0, SQLServer 2008 or higher, or PostgreSQL 9.1.3 or higher (this is the default db an installed with the server)&lt;/p&gt;
&lt;p&gt;Agent : Windows XP SP3 or higher, .NET 4.0 - other platform support is currently being investigated. &lt;/p&gt;
&lt;p&gt;Browser : HTML5 capable browser - IE9, Google Chrome 21 or higher, Firefox 14 or higher. &lt;/p&gt;
&lt;h5&gt;Licensing&lt;br /&gt;
&lt;br /&gt;
&lt;/h5&gt;
&lt;p&gt;Out of the box, Free of charge, Continua supports :&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Unlimited Users&lt;/li&gt;
    &lt;li&gt;Unlimited Projects&lt;/li&gt;
    &lt;li&gt;Unlimited Configurations&lt;/li&gt;
    &lt;li&gt;1 Local Agent(on the same machine as the server)&lt;/li&gt;
    &lt;li&gt;1 Concurrent Build.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After that you can purchase concurrent build licenses. Once you have at least 1 license installed, you can use as many remote agents as you like, agents do not take up licenses, concurrent builds do. &lt;/p&gt;
&lt;p&gt;We explored many different licensing schemes and we believe this scheme will work out better for most people. The most common complaint about FinalBuilder Server was the per user licensing. Managing user licenses is easy when you have a small local team, but for larger distributed teams it becomes problematic. Most build servers have lots of projects but they are typically only running a few projects concurrently. Also, by not licensing agents, it allows you to have agents with specific capabilities. Agents report their capabilities to the server and are chosen for a build based the requirments of the project and the agent's capabilities. Say for example you have a project that is rarely built and it uses a specific tool and only installed on one machine, installing an agent on that machine will not tie up a license, it will only use a license when that project is being built.&lt;/p&gt;
&lt;h5&gt;Moving from FinalBuilder Server&lt;/h5&gt;
&lt;p&gt;There is unfortunately no direct migration from FinalBuilder Server. The two products are very different, so unfortunately the only option at this time is to start from scratch. We do have someone working on migration scripts, but those scripts will not get you fully up and running in Continua CI. The main issue has to do with where the FinalBuilder project files live in FB Server (on the server) vs Continua CI (in your version control system).&lt;/p&gt;
&lt;p&gt;I recommend reading &lt;a href="http://wiki.finalbuilder.com/pages/viewpage.action?pageId=655774"&gt;this page&lt;/a&gt; to help understand the different concepts between the two products.&lt;/p&gt;
&lt;h5&gt;How much will I have to pay when it's released?&lt;/h5&gt;
&lt;p&gt;If you have a current FinalBuilder Server Users Software Assurance Subscription at the time of release, we will convert your FinalBuilder Server User licenses into Continua Concurrent Build licenses (2 users = 1 concurrent build license). &lt;br /&gt;
&lt;br /&gt;
New Concurrent Build licenses will be priced at US$199. &lt;/p&gt;
&lt;h5&gt;How do I get it?&lt;/h5&gt;
&lt;p&gt;The beta download links are pinned at the top of the &lt;a href="http://www.finalbuilder.com/forums/ContinuaCI/general-discussion/"&gt;Continua CI General Discussion forum&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;Can I see some Documentation?&lt;/h5&gt;
&lt;p&gt;Yes, the product documentation is &lt;a href="http://wiki.finalbuilder.com/display/continua/Continua+Documentation+Home"&gt;here&lt;/a&gt;. The documentation is still being written however there is fair bit there already. &lt;/p&gt;
&lt;h5&gt;What if I find a bug?&lt;/h5&gt;
&lt;p&gt;Please post as much information as you can about your environment, the build of Continua CI you are using and the bug in the &lt;a href="http://www.finalbuilder.com/forums/ContinuaCI/bug-reports/"&gt;Continua CI Bug Reports forum&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Introducing Delphi Mocks</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/417/introducing-delphi-mocks.aspx</link><category>Delphi</category><pubDate>Tue, 06 Nov 2012 15:36:53 GMT</pubDate><description>&lt;p&gt;Delphi has had Unit Testing support (in the form of DUnit)&amp;nbsp;for many years, but until now there very little in the way of Automatic Mocking. By contrast the .NET and Java worlds have plenty of mocking frameworks to choose from.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So what are Automatic Mocks anyway? Simply put, they are mock objects that you don't have to hand code. What's wrong with hand coding mock objects you might ask? Well nothing, really, but consider the following example, where we pass an
instance of our hand coded mock object to the object under test.&amp;nbsp;&lt;/p&gt;
[code:delphi]
type IFoo = interface
function Bar(param : integer) : string;
end;
procedure TTestSomething.SimpleTest;
var
something : ISomething;
mockFoo : IFoo;
begin
something := TSomething.Create;
mockFoo := TMockFoo.Create;
something.UseFoo(mockFoo);
end;
[/code]
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;What does our mockFoo mock object actually do, what is it's behavior, how many times will Bar be called and what will it return? It's not obvious from looking at the above code, so you would have to go off and find the TMockFoo
&lt;p&gt;
implementation. Not so hard, but what happens when someone else comes along and adds a new unit test that also uses TMockFoo, what happens if they change the TMockFoo implementation, will that break your existing tests. This is where automatic&lt;br /&gt;
mocks can help, because you define the behavior and expectations on you mock object right there in the unit test method :&lt;/p&gt;
[code:delphi]
procedure TTestSomething.SimpleTest;
var
something : ISomething;
mockFoo : TInterfaceMock&lt;ifoo&gt;
begin
something := TSomething.Create;
//create our auto mock
mockFoo := TInterfaceMock&lt;ifoo&gt;.Create;
//define the behavior of IFoo.Bar
mockFoo.Setup.WillReturn('hello something').When.Bar(1);
//define our expectations of how  many times TSomething will call IFoo.Bar
mockFoo.Setup.Expect.Once.When.Bar(1);
//now lets test ISomething.UseFoo
something.UseFoo(mockFoo);
//Now verify that ISomething used IFoo correctly
mockFoo.Verify;
end;
[/code]
&lt;p&gt;The auto mock object is defined right there in our unit test, and the behavior is not going to change unless we change it in our unit test. This sort of mocking makes it simple to focus our testing effort on TSomething rather than TFoo
(our real IFoo implementation) or TMockFoo.&lt;/p&gt;
&lt;p&gt;One of the reasons auto mocking hasn't really happened for Delphi is the lack of detailed and easy to use runtime type information (Rtti) and the lack of runtime code generation (yes it's always been possible, but not through a well
defined interface like Reflection.Emit in .NET). Auto mocking involves creating types on the fly, in the case of interfaces, creating a type and implementing an interface. That's not an easy thing to do. There are some examples of this in
Delphi's SOAP code, but they are not easy to follow. Delphi XE2 introduces some new features in the RTTI that make creating interface proxies simple. TVirtualInterface creates an implementation of an interface at runtime and marshals the method
calls to the OnInvoke method.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Delphi-Mocks -&amp;nbsp;&lt;a href="https://github.com/VSoftTechnologies/Delphi-Mocks"&gt;https://github.com/VSoftTechnologies/Delphi-Mocks&lt;/a&gt;&amp;nbsp;is an attempt to create an Auto
Mocking framework for Delphi. It makes use of Generics and Fluent style interfaces. Currently only interfaces can be mocked, and it supports only Delphi XE2 at this time. I hope to add support for TObject mocks and earlier versions (D2009+). &lt;/p&gt;
&lt;/ifoo&gt;&lt;/ifoo&gt;</description></item><item><title>EC2 Support in FinalBuilder 7.0</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/416/EC2-Support-in-FinalBuilder-70.aspx</link><category>FinalBuilder</category><pubDate>Sun, 04 Sep 2011 14:00:00 GMT</pubDate><description>&lt;p&gt;FinalBuilder 7.0.0.1497 adds support for Amazon's EC2 Cloud Services. The EC2 Actions allow you to interact with EC2 instances during your build process. This enables deploying to test or production environments running on EC2 services.&lt;/p&gt;
&lt;p&gt;The EC2 support add's 16 new Actions to FinalBuilder&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;EC2 Get Instance Properties - This action allows you to retrieve the selected property of instances available to you. You can filter which results to return using the optional filters.&lt;span style="font-family: calibri; font-size: 11pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;EC2 Change Instance States - This action enables you to change the state of one or more instances.&lt;/p&gt;
&lt;p&gt;EC2 Run&amp;nbsp;Instances - This action enables you to run (create) one or more instances.&lt;/p&gt;
&lt;p&gt;EC2 Terminate Instance - This action enables you to terminate one or more instances. Note that this action is permanent and cannot be undone.&lt;/p&gt;
&lt;p&gt;EC2 Get Image Properties - This action allows you to retrieve the selected property of images available to you. You can filter which results to return using the optional filters.&lt;/p&gt;
&lt;p&gt;EC2 Create Image - This action enables you to create an image from an instance.&lt;/p&gt;
&lt;p&gt;EC2 Deregister Image - This action enables you to deregister (delete) an image. Please note that this action is permanent and cannot be undone.&lt;/p&gt;
&lt;p&gt;EC2 Create Volume - This action enables you to create a volume,  either as a blank volume of a specific size, or a volume restored from a  snapshot.&lt;/p&gt;
&lt;p&gt;EC2 Delete Volume - This action enables you to delete a volume. Note that this action is permanent and cannot be undone.&lt;/p&gt;
&lt;p&gt;EC2 Attach Volume - This action enables you to attach a volume to an instance.&lt;/p&gt;
&lt;p&gt;EC2 Detatch Volume - This action enables you to detach a volume from any instances it is attached to.&lt;/p&gt;
&lt;p&gt;EC2 Get Volume Properties - This action allows you to retrieve the  selected property of volumes available to you. You can filter which  results to return using the optional filters.&lt;/p&gt;
&lt;p&gt;EC2 Get Snapshot Properties - This action allows you to retrieve the selected property of snapshots available to you. You can filter which results to return using the optional filters.&lt;/p&gt;
&lt;p&gt;EC2 Create Snapshot - The Access Key and Secret Key for your AWS account. If "Use Global Values" is checked, the values set in the options page (Tools &amp;gt; Options &amp;gt; Internet &amp;gt; EC2) will be used instead.&lt;/p&gt;
&lt;p&gt;EC2 Delete Snapshot - This action enables you to delete a snaphot. Note that this action is permanent and cannot be undone.&lt;/p&gt;
&lt;p&gt;EC2 Get Availability Zones - This action allows you to retrieve the name of availability zones available to you. You can filter which results to return using the optional filters.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>FinalBuilder: now with NuGet-y goodness</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/690/FinalBuilder-now-with-NuGet-y-goodness.aspx</link><category>FinalBuilder</category><pubDate>Fri, 27 May 2011 08:12:00 GMT</pubDate><description>&lt;p&gt;NuGet is a open source package management tool for .NET applications. It allows you to very simply install, create and share reusable assemblies. With the latest release, FinalBuilder now contains a set of actions to help you interact with NuGet&amp;nbsp;as part of&amp;nbsp;your automated build process.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color: white; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: tahoma, arial, helvetica, sans-serif;"&gt;
&lt;h2 style="color: #293955; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: 'trebuchet ms', helvetica, arial, sans-serif; line-height: 1.2em; font-size: 1.4em;"&gt;First things first&lt;/h2&gt;
&lt;p&gt;To get started, you'll need to download nuget.exe from&amp;nbsp;&lt;a style="color: #354c67; text-decoration: none;" href="http://nuget.codeplex.com/releases"&gt;codeplex&lt;/a&gt;. Optionally, if you'd like to Push or Delete to nuget.org you will need an APIKey. You can get one by creating an account at&amp;nbsp;&lt;a style="color: #354c67; text-decoration: none;" href="http://nuget.org"&gt;nuget.org&lt;/a&gt;&amp;nbsp;and going to the My Account page.&lt;/p&gt;
&lt;p&gt;Once you have those,&amp;nbsp;in FinalBuilder&amp;nbsp;go to Tools -&amp;gt; Options and under .Net Tools select NuGet. Set the path to the folder where nuget.exe is located and if you have an API Key, add it in as well.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" width="501" height="153" style="border-width: initial; border-color: initial;border-width: 0px;border-style: none;" src="/blogimages/ben/nuget/options.png" /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style="color: #293955; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: 'trebuchet ms', helvetica, arial, sans-serif; line-height: 1.2em; font-size: 1.4em;"&gt;Installing packages&lt;/h2&gt;
&lt;p&gt;If you use nHibernate, jQuery or any of the 1500 other packages that are available from nuget.org, you can use the NuGet Install action to keep your build process up to date. This is particularly useful if you're using FinalBuilder on a continious integration server such as FinalBuilder Server.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" style="border-width: initial; border-color: initial;border-width: 0px;border-style: none;" src="/blogimages/ben/nuget/install.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;install&gt;&lt;/install&gt;&lt;/p&gt;
&lt;p&gt;You can install from the default (nuget.org) server or your own custom package feed. Having your CI server pull down the latest version of a third party library is a quick and easy way to see if the latest version has any breaking changes for your codebase. If it does, you can choose to install a specific version until you've modified your code to be compatable with the changes.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style="color: #293955; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: 'trebuchet ms', helvetica, arial, sans-serif; line-height: 1.2em; font-size: 1.4em;"&gt;Sharing packages&lt;/h2&gt;
&lt;p&gt;If you develop an open source library for .NET and want people to use it, it makes a lot of sense to have it published on NuGet. And if you use FinalBuilder to build the library, it's pretty simple to add publishing into your build process. Or, if you have a lot of shared internal assemblies and are looking for a better way to distribute them, publishing to an internal NuGet server may make your life a lot easier.&lt;/p&gt;
&lt;p&gt;FinalBuilder has 4 actions to help with the publishing process. If you're familiar with using nuget.exe from the command line they should be very familiar.&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;&lt;strong&gt;Spec&lt;/strong&gt;&amp;nbsp;action creates a .nuspec file - either with placeholder data or with metadata from a project file (.csproj) or an assembly. The nuspec is an XML file, so after you've created it you can use FinalBuilder's XML actions to easily manipulate it.&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;&lt;strong&gt;Pack&lt;/strong&gt;&amp;nbsp;action creates a .nupgk file from your nuspec, ready for deployment. Alternatively, you can create a package directly from a project file. The Pack action lets you choose which project configuration to use (if you're using a csproj), override the version number and use a pattern to exclude files from the package.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" style="border-width: initial; border-color: initial;border-width: 0px;border-style: none;" src="/blogimages/ben/nuget/pack.png" /&gt;&lt;/p&gt;
&lt;p&gt;Once you have your nupkg, you can use the&amp;nbsp;&lt;strong&gt;Push&lt;/strong&gt;&amp;nbsp;action to publish it to either the default server on nuget.org, or to your custom NuGet server. If you prefer, you can upload but not publish the package. That way you can manually go to the site and press the Go button before anyone will see it.&lt;/p&gt;
&lt;p&gt;Lastly there's the&amp;nbsp;&lt;strong&gt;Delete&lt;/strong&gt;&amp;nbsp;action, which removes the package you specify from the server.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style="color: #293955; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: 'trebuchet ms', helvetica, arial, sans-serif; line-height: 1.2em; font-size: 1.4em;"&gt;Further information&lt;/h2&gt;
&lt;p&gt;&lt;a style="color: #354c67; text-decoration: none;" href="http://nuget.org"&gt;NuGet.org&lt;/a&gt;&amp;nbsp;is the place to go any lots more information. Scott Hanselman also has an&amp;nbsp;&lt;a style="color: #354c67; text-decoration: none;" href="http://www.hanselman.com/blog/NuGetForTheEnterpriseNuGetInAContinuousIntegrationAutomatedBuildSystem.aspx"&gt;excellent presentation&lt;/a&gt;&amp;nbsp;that covers everything you should need to know (although we disagree with his choice of build automation tools :) )&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>FinalBuilder Master Class - Part 1 - Hidden features. </title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/415/FinalBuilder-Master-Class-Part-1-Hidden-featu.aspx</link><category>FinalBuilder</category><pubDate>Tue, 26 Apr 2011 14:00:00 GMT</pubDate><description>&lt;p&gt;Over the next few posts, I'm going to try to talk about some of the lesser known features in FinalBuilder, and show some ideas and techniques that I hope will help you improve your FinalBuilder projects.&lt;/p&gt;
&lt;h6&gt;Wouldn't it be great if a failed action could automatically retry if it fails?&lt;/h6&gt;
&lt;p&gt;Absolutely, it's a great idea, and its a feature that's been in FinalBuilder for several years. Unfortunately it's not as obvious as it could be, we ran out of screen real estate a few versions back and it got pushed into another dialog (rather than add another tab!)&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://www.finalbuilder.com/Portals/0/ArticleImages/BlogImages/ActionRetry.png" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Note that this feature should really only be used when accessing a resource which might occasionally fail, for example we use this on our SignTool action when codesigning/timestamping the exe's because the timestamp server (Verisign's) sometimes fails to respond. We found if we ran the build again straight away, the timestamp server usually responds just fine, the server availability issue is usually transient and the retry option with a suitable pause resolves this issue nicely. It makes no sense to use this option on a compiler action though, as the result would most likely not change.&lt;/p&gt;
&lt;h6&gt;I&amp;nbsp;wish I could define local Variables!&lt;/h6&gt;
&lt;p style="text-align: left;"&gt;In FinalBuilder 7, you can! The Action Group action in FB7 allows you to define local variables. These variables are then available to all child actions of the Action Group action.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://www.finalbuilder.com/Portals/0/ArticleImages/BlogImages/FB7_LocalVar1.png" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h6&gt;How can I&amp;nbsp;capture and process the output of my custom executable?&lt;/h6&gt;
&lt;p style="text-align: left;"&gt;We get ask this one quite often, so I&amp;nbsp;guess we haven't done a great job of publicising the Output Monitors feature. Output Monitors are available on all actions, and they allow you to process the logged output of the action. A typical example of the use of output monitors might be to fail an action if a particular bit of text is output from the action.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://www.finalbuilder.com/Portals/0/ArticleImages/BlogImages/Outputmonitors.png" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h6&gt;Variable Suggestion (F12)&lt;/h6&gt;
&lt;p style="text-align: left;"&gt;This is another one of those features that has been there a while but is not well known. I&amp;nbsp;showed this feature to some of the newer developers here last week and got lots of "oh wow, I never knew that" type responses. I have to admit I'd forgotten about it myself until I&amp;nbsp;started looking for ideas for this post! The way it works is that pressing F12 on a text field will drop down a list of suggestions on variable usage. The list is weighted so that variables that replace the most of the original string will list at the top. This is a great help in making sure you don't hard code paths when the project needs to run on another machine.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://www.finalbuilder.com/Portals/0/ArticleImages/BlogImages/VariableSuggestion.png" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>DUnit and FinalBuilder/FinalBuilder Server - better integration.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/414/DUnit-and-FinalBuilderFinalBuilder-Server-bette.aspx</link><category>FinalBuilder,FinalBuilder Server</category><pubDate>Sun, 14 Nov 2010 14:00:00 GMT</pubDate><description>&lt;p&gt;FinalBuilder has had an NUnit action for some time now, but for DUnit  we have always advocated just compiling the unit test executable as a  console app using the TextTestRunner, and using the Execute Program  action. This has worked fine, however it doesn't provide the same sort  of integration into FinalBuilder Server as the NUnit action provides.&lt;/p&gt;
&lt;p&gt;FinalBuilder 7.0.0.848 or later includes a new DUnit action. This action  is designed to run DUnit test applications that are written as console  apps, and use the FinalBuilder.XMLTestRunner.pas file to run the unit  tests. This unit produces and xml report file in the same format as  NUnit, which means that FinalBuilder already knows how to parse it. Also  included in the FinalBuilder\DUnit folder is an XSL stylesheet and a CSS&amp;nbsp;file to transform the xml report file to html (which can be done using the TransformXML action. The  FinalBuilder.XMLTestRunner is a combination of the xml test runner and  the text test runner. It still writes out to the console (which the  action sends to the FinalBuilder log) and it also writes the xml report  file.&lt;/p&gt;
&lt;p&gt;When the DUnit action is used under FinaBuilder Server 7.x - the DUnit results are shown on the Status page :&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://www.finalbuilder.com/blogimages/DUnitSummary.png" /&gt;&lt;/p&gt;
&lt;p&gt;and in a separate tab on the Build Log page :&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" width="600" src="http://www.finalbuilder.com/blogimages/DUnitPass.png" /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" width="600" src="http://www.finalbuilder.com/blogimages/DUnitFailure.png" /&gt;&lt;/p&gt;
&lt;p&gt;The Passes and Failures can be inspected by clicking on the green or red buttons.&lt;/p&gt;
&lt;p&gt;The FinalBuilder\DUnit folder also includes a simple example test  application which shows how to structure your test executable to use the  FinalBuilder.XMLTestRunner.&lt;/p&gt;
&lt;p&gt;FinalBuilder 7.0.0.848 is available &lt;a href="http://www.finalbuilder.com/downloads/finalbuilder/aex6/FB700_848.exe"&gt;here&lt;/a&gt; - disclaimer - please note it is a Test build, which means it's a build which contains bug fixes and or new features since the last official update, but has not had the same testing applied to it as an official update build would.&lt;/p&gt;</description></item><item><title>Getting Started with Delphi XE's Regular Expressions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/413/Getting-Started-with-Delphi-XEs-Regular-Expressio.aspx</link><category /><pubDate>Thu, 02 Sep 2010 14:00:00 GMT</pubDate><description>&lt;p&gt;Delphi XE includes Regular Expression support, something that has been requested many times over the years. In this blog post I'll show some basic usage of regular expressions in delphi. I'm assuming you already understand regular expressions and the associated terminology, if not take a look &lt;a href="http://www.regular-expressions.info/"&gt;here&lt;/a&gt; for some tutorials etc.&lt;/p&gt;

&lt;p&gt;The regular expression engine in Delphi XE is &lt;a href="http://www.pcre.org/"&gt;PCRE&lt;/a&gt; (Perl Compatible Regular Expression). It's a fast and compliant (with generally accepted regex syntax) engine which has been around for many years. Users of earlier versions of delphi can use it with TPerlRegEx, a delphi class wrapper around it.&lt;/p&gt;  

&lt;p&gt;The XE interface to pcre is a layer of units based on contributions from various people, the pcre api header translations in RegularExpressionsAPI.pas (Florent Ouchet and co), the wrapper class TPerlRegEx (Jan Goyvaerts) in RegularExpressionsCore.pas and the record wrappers on RegularExpressions.pas (myself). This unit is based on code we currently use in FinalBuilder 6 &amp; 7, it's well tested and has proven to be very reliable in our products.&lt;/p&gt; 

&lt;p&gt;RegularExpressions.pas is what you will use in your code. It's loosely based on the .net regex interfaces.&lt;/p&gt;

&lt;p&gt;The main type in RegularExpressions.pas is TRegEx. TRegEx is a record with a bunch of methods and static class methods for matching with regular 
expressions. The static versions of the methods are provided for convenience, and should only be used for one off matches, if you are matching in a 
loop or repeating the same search often then you should create an 'instance' of the TRegEx record and use the non static methods.&lt;/p&gt;

&lt;p&gt;So lets look at how we might use TRegEx to find some text in a string.&lt;/p&gt;

&lt;pre class="brush: delphi"&gt;
procedure FindSomething(const searchMe : string);
var
   regexpr : TRegEx;
   match   : TMatch;
   group   : TGroup;
  i           : integer;
begin
// create our regex instance, and we want to do a case insensitive search, in multiline mode

  regexpr := TRegEx.Create('^.*\b(\w+)\b\sworld',[roIgnoreCase,roMultiline]);
  match := regexpr.Match(searchMe);
  if not match.Success then
  begin
    WriteLn('No Match Found');
    exit;
  end;

  while match.Success do
  begin
    WriteLn('Match : [' + match.Value + ']';
    //group 0 is the entire match, so count will always be at least 1 for a match
    if match.Groups.Count &gt; 1 then
    begin
      for i := 1 to match.Groups.Count -1 do
        WriteLn('     Group[' + IntToStr(i) + '] : [' + match.Value + ']';
    end;
    match := match.NextMatch;
  end;
end;
&lt;/pre&gt;

&lt;p&gt;In the above example, we are trying to extract the word before the "world", and capturing that in a group. The match method will always return a TMatch, even when no match is found, so you should check the Success property of the Match to determine if a match is found. The same applies to Match.NextMatch, this makes it easy to iterate the matches. You could also call TRegEx.Matches, this returns a TMatchCollection which supports enumeration (using the for in construct), e.g :&lt;/p&gt; 
&lt;pre class="brush: delphi"&gt;
  matches := regexpr.Matches(searchMe);
  for match in matches do
  begin
     if match.success then
     begin
     //do stuff with match here
     end;
  end;
&lt;/pre&gt;
&lt;p&gt;Something to remember when working with groups is that a match's Groups collection always returns the entire match as group 0, so the groups from your expression start at 1.
You will notice I don't free any of the TRegEx, TMatch or TGroups, that's because they are Records with methods rather than classes. This keeps memory management simple and helps avoid memory leaks, my original code used interfaces and reference counting but Embarcadero preferred to use records (as they have done with other new stuff introduced in recent releases).&lt;/p&gt;
&lt;p&gt;I have created a simple example application which will help in testing regular expressions :&lt;/p&gt;
&lt;img src="http://www.finalbuilder.com/blogimages/RegExTest.png" /&gt;
&lt;p&gt;The source to this app can be downloaded from &lt;a href="http://www.finalbuilder.com/downloads/delphi/regextester.zip"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We'll expand on this app in the next post&lt;/p&gt;
</description></item><item><title>Introducing FinalBuilder 7</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/412/Introducing-FinalBuilder-7.aspx</link><category>FinalBuilder</category><pubDate>Sun, 11 Jul 2010 14:00:00 GMT</pubDate><description>&lt;p&gt;It's been a long time in the making, but FinalBuilder 7 is almost here.  FinalBuilder 7 has been in private beta testing for a few weeks, and  today we are opening the beta to existing customers.&lt;/p&gt;
&lt;p&gt;If you have an  account on our website, and have a license for any version of  FinalBuilder then you should have access to the FinalBuilder 7 Beta  Forum. If you don't see it, try logging out and in again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #993300; font-size: medium;"&gt;What's new in FinalBuilder 7?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: larger;"&gt;NEW&amp;nbsp;IDE&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Well, as the saying goes, a picture is worth a thousand words.. so lets take a look :&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="/Portals/0/ArticleImages/BlogImages/FB7_IDE_1.png" target="_blank"&gt;&lt;img alt="" height="276" width="400" src="/Portals/0/ArticleImages/BlogImages/FB7_IDE_1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;FinalBuilder 7 sports a new IDE.&amp;nbsp; The FinalBuilder 7 IDE&amp;nbsp;is capable of opening multiple projects (whereas FB6 only allows 1 at a time). The new IDE includes docking, something that has been requested many times over the years, so you can lay out the IDE to suite your taste. The current theme is modelled on Visual Studio, however by the time FB7 ships we should have an alternative theme available too.&lt;/p&gt;
&lt;p&gt;There are many little enhancements and tweaks in the IDE. The most requested feature that we did implement is the renaming of variables. In FB6, when you rename a variable it does not rename references to it in the project. FB7 will attempt to find and rename all references (there may be a few cases we have missed, if you find any let us know).&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: larger;"&gt;&lt;strong&gt;&lt;span style="color: #993300;"&gt;Core Changes&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: larger;"&gt;Unicode Support&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;FinalBuilder is now compiled with a unicode aware compiler. The native internal string type is UTF16, and we have worked hard to ensure that all actions that work with files respect the original files encoding. This has been a massive endevour, and we are still in the process of testing actions to ensure compliance. The user interface should fully support unicode.&amp;nbsp; Note that while FinalBuilder may support unicode, many of the tools it calls do not.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: larger;"&gt;Variable Types&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In FinalBuilder 6 and earlier, all FinalBuilder variables are implemented as Variants. Those of you who have done some COM programming, or used Visual Basic 6 or earlier, or Delphi might be familiar with Variants. A Variant is a type that can store values of various types. Variants are very useful in many cases, but are not without their problems. For example, if you want to store a string "03" in a variant, you will have to put the double quotes around the 03, otherwise we have no idea it's not a number. To circumvent this problem, in FinalBuilder 7 we allow you to specify the variable type :&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="/Portals/0/ArticleImages/BlogImages/FB7_VariableType.png" target="_blank"&gt;&lt;img alt="" height="342" width="400" src="/Portals/0/ArticleImages/BlogImages/FB7_VariableType.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When you specify a variable type, that is how the variable will be treated, so for example if you attempt to assign a string value to an integer variable it will fail. Typed variables also allow you to specify a format string, which will be used when the variable is evaluated in an expression. For example, if you have a build number variable, that you always want to use as 4 digits, with zeros padding out the left, setting the format string to %.4d will do this.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: larger;"&gt;Local Variables&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In addition to the existing variable scopes (environment, application,user, project) and action list parameters, FinalBuilder 7 includes a local variable scope. The Action Group Action has a new property page that allows you to define the local variables.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="/Portals/0/ArticleImages/BlogImages/FB7_LocalVar1.png" target="_blank"&gt;&lt;img alt="" height="358" width="400" src="/Portals/0/ArticleImages/BlogImages/FB7_LocalVar1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;These variables are only visible to child actions of the group. Since groups can be nested, this provides the ability to override variables locally, and define variables for temporary use.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" height="101" width="280" src="/Portals/0/ArticleImages/BlogImages/FB7_LocalVar2.png" /&gt;&lt;/p&gt;
&lt;p&gt;Local variables cannot be persisted and cannot be used as environment variables.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #993300; font-size: medium;"&gt;New Actions &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Of course as with every new release we added a bunch of actions:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;- NDepend Action&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
- Git Actions&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
- Plastic SCM Actions&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
- Check If Host Exists Action&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
- SetupBuilder Actions&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
- SecureZIP Actions&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
- Signtool Actions&lt;br /&gt;
- Hyper V Actions&lt;br /&gt;
- Mercurial Actions&lt;br /&gt;
- SSH&amp;nbsp;Actions&lt;br /&gt;
- XML&amp;nbsp;Node Exists Action&lt;/p&gt;
&lt;p class="MsoNormal"&gt;And many of the existing actions had enhancements to them, support for filesets added to more actions.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; color: #993300;"&gt;What about FinalBuilder Server 7?&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The FinalBuilder Server 7 beta will be ready in a day or two. It's currently being used to build FB7 (FB7 is built using FB7 and FB Server 7).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color: #993300; font-size: medium;"&gt;What now&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;FinalBuilder 7 is feature complete for the 7.0  release, there are still many more features we would like to implement  in updates. Right now we are in Test/Bug fix mode, that is all the team  are working on. So now it's time for some feedback.. let us know what you think, and more importantly, if you find something that isn't working right then let us know. Please keep all beta bug reports and feeback to the FinalBuilder 7 Beta Forum. If you don't see the Beta forum and you are a customer please contact support at finalbuilder dot com and we'll grant you access.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>The quest for the perfect publish/subscribe mechanism in Delphi</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/411/The-quest-for-the-perfect-publishsubscribe-mechan.aspx</link><category>Delphi</category><pubDate>Thu, 03 Jun 2010 14:00:00 GMT</pubDate><description>&lt;p&gt;FinalBuilder's IDE is message driven. When you select an action in an actionlist for example, the actionlist view publishes a message to which other parts of the IDE can subscribe. The publish/subscribe mechanism used in the IDE has gone through a few revisions over the years, in the quest for the perfect publish/subscribe mechanism...&lt;/p&gt;
&lt;p&gt;Of course when I say "perfect", what I'm really after is the architecture that is the easiest to use, and more importantly, the easiest to maintain. In earlier versions of the IDE, we used simple interfaces with an event args object that can carry various payloads :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
type
IEventArgs = interface
  function EventID : integer;
  ..
  property IntfData : IInterface..
  property StringData : string...
  property IntData : integer..
  ...
end;
ISubscriber = interface
  procedure OnIDEEvent(const AEventArgs : IEventArgs);
end;
&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;This has worked well for a few revisions, but with FinalBuilder 7 we have a new IDE, the number of messages being published has doubled, and code was starting to look pretty ugly. Each subcriber's OnIDEEvent method was one long case statement... and we were always having to refer back to where the message was sent from to confirm exactly what the payload was. Not at all scalable. So I started looking for new ideas. In a c# app that a colleague here wrote, he used interfaces with generics to create a publish/subscribe mechanism :&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;pre class="brush: c#"&gt; 
public interface IConsumer { }
public interface IConsumerOf&lt;t&gt; : IConsumer where T : IMessage
{
  void Consume(T message);
}
&lt;/t&gt;&lt;/pre&gt;
&lt;p&gt;Well, Delphi 2010 has generics support and I'm already making extensive use of them (hard to imagine now how I did without them!), so I figured I'd see if I could use the same technique in delphi :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
IMessage = interface
['{BCBD228C-F184-461F-B4EE-2FC7A757C0AC}']
end;

ISubScriber = interface
['{B0D49727-272F-4D51-98B3-AA6E0708DD44}']
end;

//note the constraint so only message objects can be published
ISubScriberOf&lt;t:&gt; = interface(IConsumer)
//No guid for generic interfaces!
  procedure Consume(const message : T);
end;

TMyMessage = class(TIntefacedObject, IMessage)
end;
 
TMyOtherMessage = class(TIntefacedObject, IMessage)
end;
 
  
TMySubscriber = class(TIntefacedObject,ISubScriberOf&lt;tmymessage&gt;, ISubScriberOf&lt;tmyothermessage&gt;)
protected
  procedure Consume(const message : TMyMessage);overload;
  procedure Consume(const message : TMyOtherMessage);overload;
  ....
end;
&lt;/tmyothermessage&gt;&lt;/tmymessage&gt;&lt;/t:&gt;&lt;/pre&gt;
&lt;p&gt;Works perfectly.... except now I have a bunch of methods named Consume... and my class needs to implement an interface per message.
According to my well thumbed copy of Delphi in a Nutshell, a class can implement up to 9999 interfaces so that's not a problem, but,
it's just not quite as neat as I'd hoped. It worked well in the c# app as there were only a few message types. Most of my subscribers
are handling 20+ messages, navigating 20+ Consume methods isn't all that maintainable.&lt;/p&gt;
&lt;p&gt;Back to looking at the mother of all case statements in my existing architecture, it reminded me of a WndProc method and that got me thinking. How do message handlers work in the VCL? You know, this sort of thing :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE;
&lt;/pre&gt;
&lt;p&gt;I had always just assumed it was compiler magic... (back to Delphi in a Nutshell again), well they are dynamic methods, which are
invoked via TObject.Dispatch. This method takes a message record, and based on the message id, finds the matching method in the object's
dynamic method table (which is compiler generated), if not found then it looks up the class heirachy and then eventually calls
DefaultHandler if no match was found. Delphi's windows controls use this mechansim to dispatch windows messages, but there's really nothing
windows specific about it and it looks like it could be used for any messages. The key is that the messages must be records because
TObject.Dispatch treats them as such, and it looks at the first 4 bytes (DWoRD) as the message id. If you look in Messages.pas you will see
that most messages are typically 16 bytes long, and they are packed records. In my initial tests everything worked fine just keeping the first
4 bytes for the message id, however in my IDE strange things happened (random av's). It turns out the messages really do need to be at least
16 bytes. So my message types look like this :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
type
  TMyMessage = packed record
    MsgID : Cardinal;
    Unused : array[1..12] of Byte;
    MyPayload : whatever;
    .....
    constructor Create(APayload : whatever);
  end;
&lt;/pre&gt;
&lt;p&gt;Note that I use a constructor on the record. Constructors on records are really just psuedo constructors.. but they serve a purpose here..
this is where I make sure the message gets assigned the correct message id (from a constant). Without the constructor we would have to assign
it to the message before it is sent.. that opens the possibility of used the wrong id by mistake, which could cause random access violations :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
constructor TMyMessage.Create(APayload : whatever);
begin
  MsgID := IDE_MYMESSAGE; //constant 
  MyPayLoad := APayload;
end;
&lt;/pre&gt;
&lt;p&gt;One caveat with constructors on records is that they must have at least one parameter, so if your message has no payload then just use a dummy parameter.
Our Subscriber interface now looks like this :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
type
  ISubscriber = interface
    procedure Dispatch(var Message);
  end;
&lt;/pre&gt;
&lt;p&gt;The Dispatch message on the interface is declared the same as TObject.Dispatch, and TObject.Dispatch is our actual implementation on our
subscriber class so we don't need to do much other than declare that it implements the interface, and then provide the message handlers :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
TMySubscriber = class(TInterfacedObject,ISubscriber,...)
protected
  procedure DoMyMessage(var Message : TMyMessage);message IDE_MYMESSAGE;
  ....
end;
&lt;/pre&gt;
&lt;p&gt;Our publisher interface is quite simple too :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
IPublisher = inteface
  procedure SendMessage(var Message);
  procedure Subscribe(const subscriber : ISubscriber; const filter : integer = 0);
  procedure UnSubscribe(const subscriber : ISubscriber);
end;
&lt;/pre&gt;
&lt;p&gt;The SendMessage method takes an untype var parameter (just like Dispatch), so any message type can be passed to it. The Subscribe method
has an extra parameter, filter, which allows you to specify which messages a subscriber is interested in. If it's not specified then all
messages will be passed to the subscribers Dispatch method. The filter isn't strictly neccessary, but it does provide an opportunity for a
small optimisation if the subscriber really only handles a few messages.&lt;/p&gt;
&lt;p&gt;So is this the "perfect" publish/subscribe mechanism for delphi? Probably not. It's kinda neat how it's using something that's been there
in TObject probably back as far as Delphi 1 (I will have to dig out my D1 source disk and have a look!). We spent a day replacing our old
mechanism with this one throughout the entire FB7 IDE, and it's performing flawlessly. I've read that dynamic methods are a bit slower than
non dynamic methods.. but to be honest we haven't noticed any change in performance.. what we have noticed is how much easier our code is
to read and maintain.&lt;/p&gt;
&lt;p&gt;A sample D2010 app with full source is available &lt;a href="http://www.finalbuilder.com/downloads/delphi/publishsubscribe.zip"&gt;here.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Hybrid Version Control</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/689/Hybrid-Version-Control.aspx</link><category /><pubDate>Wed, 05 May 2010 01:37:00 GMT</pubDate><description>&lt;div style="background-color: rgb(255, 255, 255); margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-position: initial initial; background-repeat: initial initial; "&gt;
&lt;div&gt;Distributed verison control systems are gaining in usage and popularity, but many organisations still use traditional centralised VCSs like Subversion and Visual Source Safe. Recently I've been using a hybrid setup and getting many of the benefits of a DVCS without needing to move the whole team to a new VCS platform.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;When I started with VSoft a few months back my first chunk of work was to create Mercurial actions for the upcoming FinalBuilder 7. It was the first time I'd used a DVCS and after the initial shock I became quite fond of it.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;Internally we use a CVCS - Surround SCM. If you've never used Surround you can think of it as VSS done right. It uses similar concepts and abstractions but without all the pain and frustration. We're considering moving to a DVCS but haven't yet worked out if the increased flexibility is worth the extra overhead for our relatively small dev team.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;After getting to know Mercurial though, I knew what I was missing out on. Primarily for me that was version control of my local changes. This is becoming more important as FinalBulder 7 gets closer to completion and breaking the build becomes a bigger deal. I also like being able to easily clone and sync my repositories locally as a basic backup strategy.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;The setup I've come up with couldn't be simpler. If I'm going to work on a VS.NET solution I will:&lt;/div&gt;
&lt;ul&gt;
    &lt;li style="list-style-type: square; "&gt;check out the solution from Surround&lt;/li&gt;
    &lt;li style="list-style-type: square; "&gt;&lt;span style="font-family: 'Courier New'; "&gt;hg init&lt;/span&gt;&amp;#160;the solution directory to create a repository&lt;/li&gt;
    &lt;li style="list-style-type: square; "&gt;&lt;span style="font-family: 'Courier New'; "&gt;hg commit -A&lt;/span&gt;&amp;#160;which adds/removes all file changes to the repository&lt;/li&gt;
    &lt;li style="list-style-type: square; "&gt;work locally, committing whenever I feel like it&lt;/li&gt;
    &lt;li style="list-style-type: square; "&gt;when the solution is in a state where it won't break the build, check it in to Surround&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;To make things easier I've set up this alias in my Mercurial.ini:&lt;/div&gt;
&lt;div style="margin-left: 40px; "&gt;&lt;span style="font-family: 'Courier New'; "&gt;[alias]&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-left: 40px; "&gt;&lt;span style="font-family: 'Courier New'; "&gt;cam = commit -A -m&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-left: 40px; "&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;So to commit I just&amp;#160;&lt;span style="font-family: 'Courier New'; "&gt;hg cam "commit message"&lt;/span&gt;.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;Recently I started checking my .hg directory into Surround as well. That allows me to maintain the history of all my local commits, without cluttering up the Surround check-in logs.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;h3 style="font-family: Tahoma, Arial, Helvetica; font-size: 12px; font-weight: normal; color: rgb(0, 51, 102); "&gt;&lt;strong&gt;Caveats&lt;/strong&gt;&lt;/h3&gt;
&lt;div&gt;There's some things to be aware of when using a hyrbid system like this. While you could still use Mercurial for merging work from different developers it is much more complex than in a pure DVCS setup. I'll leave it to you to work out the details: it's not something I plan on ever doing.&amp;#160;&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;If you're checking your .hg folder in to your CVCS you need to be careful that it doesn't become corrupted through concurrent updates/merging. Of course if it does become corrupted you don't lose much by deleting and recreating it, because the check-in history for your major changes is in the CVCS's check-in logs.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;h3 style="font-family: Tahoma, Arial, Helvetica; font-size: 12px; font-weight: normal; color: rgb(0, 51, 102); "&gt;&lt;strong&gt;Other uses for Mercurial&lt;/strong&gt;&lt;/h3&gt;
&lt;div&gt;Because Mercurial repositories are so easy to create I've started using them for all sorts of things. For example, at home I have a perl script that runs nightly and exports the contents of my Wordpress blogs to XML. Previously I included the date in the filename and ended up with (literally) hundreds of files in my backup directory.&amp;#160;&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;Now I've set up a Mercurial repository, removed the date component from the filename and have my backup script commit after it downloads the latest version. The directory is now a lot cleaner as well as being smaller, because Mercurial only stores the changes between each night's backup.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;h3 style="font-family: Tahoma, Arial, Helvetica; font-size: 12px; font-weight: normal; color: rgb(0, 51, 102); "&gt;&lt;strong&gt;Further reading&lt;/strong&gt;&lt;/h3&gt;
&lt;div&gt;While running a hybrid system doesn't give you all the advantages of a pure DVCS it is a major improvement over a plain CVCS. It also allows you and your team to get comfortable with the DVCS methodology before moving away from CVCS completely.&lt;/div&gt;
&lt;div&gt;&amp;#160;&lt;/div&gt;
&lt;div&gt;For more information on Mercurial, see:&lt;/div&gt;
&lt;ul&gt;
    &lt;li style="list-style-type: square; "&gt;My&amp;#160;&lt;a style="text-decoration: none; color: rgb(6, 79, 147); font-family: Verdana, Arial, sans-serif; font-weight: normal; " href="/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=34"&gt;Getting started with Mercurial&lt;/a&gt;&amp;#160;article&lt;/li&gt;
    &lt;li style="list-style-type: square; "&gt;Joel Spolsky's&amp;#160;&lt;a style="text-decoration: none; color: rgb(6, 79, 147); font-family: Verdana, Arial, sans-serif; font-weight: normal; " href="http://hginit.com/"&gt;hg init&lt;/a&gt;&lt;/li&gt;
    &lt;li style="list-style-type: square; "&gt;&lt;a style="text-decoration: none; color: rgb(6, 79, 147); font-family: Verdana, Arial, sans-serif; font-weight: normal; " href="http://hgbook.red-bean.com/"&gt;Mercurial: The Defininitve Guide&lt;/a&gt;&lt;/li&gt;
    &lt;li style="list-style-type: square; "&gt;&lt;a style="text-decoration: none; color: rgb(6, 79, 147); font-family: Verdana, Arial, sans-serif; font-weight: normal; " href="http://mercurial.selenic.com/wiki/QuickReferenceCardsAndCheatSheets"&gt;Mercurial Cheat Sheets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;&amp;#160;&amp;#160;&lt;/p&gt;</description></item><item><title>WeakRefence in Delphi - solving circular interface references</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/410/WeakRefence-in-Delphi-solving-circular-interfac.aspx</link><category>Delphi</category><pubDate>Fri, 26 Mar 2010 14:00:00 GMT</pubDate><description>&lt;p&gt;Using interfaces and reference counting in Delphi works great for the most part. Its a feature I use a lot,
I'm a big fan of using interfaces to tightly control what parts of a class a consumer has access to. But, there
is one big achillies heel with reference counting in Delphi, you cannot keep circular references,
at least not easily, without causing memory leaks.&lt;/p&gt;
&lt;p&gt;Consider this trivial example :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
IChild = interface;
IParent = interface
['{62DC70E1-8D82-4012-BF01-452EB0F7F45A}']
  procedure AddChild(const AChild : IChild);
end;

IChild = interface
['{E1DB1DA0-55D6-408E-8143-072CA433412D}']
end;

TParent = class( TInterfacedObject, IParent )
private
  FChild : IChild;
  procedure AddChild(const AChild : IChild);
public
  destructor Destroy; override;
end;

TChild = class( TInterfacedObject, IChild )
private
  FParent : IParent;
public
  constructor Create( AParent : IParent );
  destructor Destroy; override;
end;

implementation
	
constructor TChild.Create(AParent: IParent);
begin
  inherited Create;
  FParent := AParent;
  AParent.AddChild(Self);
end;

destructor TChild.Destroy;
begin
  FParent := nil;
  inherited;
end;
	
procedure TParent.AddChild(const AChild: IChild);
begin
  FChild := AChild;
end;

destructor TParent.Destroy;
begin
  if Assigned( FChild ) then
    FChild := nil;
  inherited;
end;

procedure Test;
var 
  MyParent : IParent;
  MyChild : IChild;
begin
  MyParent := TParent.Create;
  MyChild := TChild.Create(MyParent);
  MyChild := nil;
  MyParent := nil;
end;
&lt;/pre&gt;
&lt;p&gt;Both parent and child are now orphaned and we have no reference to them and no way to free them! Ideally, the parent would
control the life of the child, but the child would not control the life parent.&lt;/p&gt;
&lt;p&gt;So how can we get around this? Well a technique that I have used a lot in the past is to not hold a reference to the
parent in the child, but rather just a pointer to the parent.&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
TChild = class(TInterfacedObject,IChild) 
private 
  FParent : Pointer; 
  ... 
end;

constructor TChild.Create(AParent : IParent); 
begin 
	FParent := Pointer(AParent); 
end; 
function TChild.GetParent : IParent; 
begin 
  result := IParent(FParent); // if the parent has been released the we are passing out a bad reference! 
                              // a nil reference would be preferable as it's easy to check. 
end; 
&lt;/pre&gt;
&lt;p&gt;This works well for the most part, but it does have the potential for access voilations if you do not understand or at least know how the child is referencing the parent.&lt;/p&gt;
&lt;p&gt;For example :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
var child : IChild; 
parent : IParent 
begin 
  parent := TParent.Create; 
  child := TChild.Create(parent): 
  parent := nil; //parent will now be freed, since nothing has a reference to it.
  ....... 
  parent := child.GetParent; //kaboom 
end; 
&lt;/pre&gt;
&lt;p&gt;One of my collegues kindly pointed out that C# doesn't suffer from this problem and he uses circular references all the
time without even thinking about it. While discussing this, he mentioned the &lt;a href="http://msdn.microsoft.com/en-us/library/system.weakreference.aspx"&gt;WeakReference&lt;/a&gt; class in .NET.
It basically allows you to hold a reference to a object without affecting it's lifecycle (ie, not influencing when it will be garbage collected).
I figured there must be a way to do this in Delphi, and so set about creating a WeakReference class for Delphi.&lt;/p&gt;
&lt;p&gt;I wasn't able to find a reliable way to do this with any old TInterfacedObject descendant, however by creating a TWeakReferencedObject class and the use of generics on
Delphi 2010 I did manage to implement something that works well and is not too cumbersome. Lets take a look at our Child/Parent example using
a weak reference.&lt;/p&gt;
&lt;p&gt;The important part in this is the use of the WeakReference to the parent in the Child class. So instead of declaring&lt;/p&gt;
&lt;pre class="brush: delphi"&gt;FParent : IParent;&lt;/pre&gt;
&lt;p&gt;we have&lt;/p&gt;
&lt;pre class="brush: delphi"&gt;FParent : IWeakReference&amp;lt;IParent&amp;gt;;&lt;/pre&gt;
&lt;p&gt;We create it using&lt;/p&gt;
&lt;pre class="brush: delphi"&gt;FParent := TWeakReference&amp;lt;IParent&amp;gt;.Create(parent); //value is an IParent instance&lt;/pre&gt;
&lt;p&gt;This is how our TChild.GetParent /SetParent methods look now :&lt;/p&gt;
&lt;pre class="brush: delphi"&gt; 
function TChild.GetParent: IParent; 
begin 
  if FParent &amp;lt;&amp;gt; nil then 
    result := FParent.Data as IParent 
  else 
    result := nil; 
end; 

procedure TChild.SetParent(const value: IParent); 
begin 
  if (FParent &amp;lt;&amp;gt; nil) and FParent.IsAlive then 
    FParent.Data.RemoveChild(Self); 
  FParent := nil; 
  if value &amp;lt;&amp;gt; nil then 
    FParent := TWeakReference&amp;lt;IParent&amp;gt;.Create(value); 
end; 
&lt;/pre&gt;
&lt;p&gt;Note the use of the IsAlive property on our weak reference, this tells us whether the referenced object is still available, and provides a
safe way to get a concrete reference to the parent.&lt;/p&gt;
&lt;p&gt;I still think this is something that could be solved in a better way by the delphi compiler/vcl guys n girls.&lt;/p&gt;
&lt;p&gt;Hopefully someone will find this useful, the code is available for download &lt;a href="http://www.finalbuilder.com/downloads/delphi/weakreference.zip"&gt;here&lt;/a&gt; - Updated Sunday 28/3/2010&lt;/p&gt;
&lt;p&gt;Feedback welcolme, I'm about to start making extensive use of
this code, so if you see any holes then please do let me know!&lt;/p&gt;</description></item><item><title>No more flash ads, ever.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/688/No-more-flash-ads-ever.aspx</link><category /><pubDate>Thu, 18 Feb 2010 14:00:00 GMT</pubDate><description>&lt;br /&gt;Yesterday, I stopped all of our flash based ad campaigns... forever.&lt;br /&gt;&lt;br /&gt;In late 2008, we started a large campaign which introduced our first flash ads. We had some fun making these and received mixed responses - some outrage, some love. But overall, I feel that just by using flash ads to communicate, we were becoming a little too closely affiliated with the many scam like flash ads. You know the ones, those before-and-after-weight-loss-body-shots. &lt;br /&gt;&lt;br /&gt;Advertising was once a powerful method of communicating, but no more. Thanks to the lowest common denominators in advertising, everyone suffers. Ad blockers are the proof. When the web is filled with before-and-after-weight-loss-body-shots, we block every ad. The 1% of useful information from advertising is not worth the 99% of junk!&lt;br /&gt;&lt;br /&gt;So what to do? How can we communicate with those who might want what we've got, without the medium implying we're offering cruft?&lt;br /&gt;&lt;br /&gt;Two ways: education and community involvement. &lt;br /&gt;&lt;br /&gt;From now on, these two methods will form the pillars of our overall marketing. A reply to a question on stackoverflow. A response to a customer on twitter. It's how FinalBuilder got it's start, before we could afford ad space, and now we're coming back to it because it's authentic and meaningful.&lt;br /&gt;&lt;br /&gt;Oh, and we have a few other, more exciting plans to get involved in the community. Watch this space. &lt;br /&gt;</description></item><item><title>FinalBuilder Roadmap for 2010</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/409/FinalBuilder-Roadmap-for-2010.aspx</link><category>FinalBuilder</category><pubDate>Mon, 14 Dec 2009 14:00:00 GMT</pubDate><description>&lt;p&gt;We don't usually have a published roadmap. I generally don't like to talk too much about the next version until I have something to show (ie when we are close to beta), however it's been a while since we release FB6 and some customers have asked what our plans are. &lt;br /&gt;
&lt;br /&gt;
I will say that FinalBuilder and FinalBuilder Server are being actively worked on.  Below is just a general outline of what we are up to :&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;FinalBuilder 7.0: &lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
1) Full Unicode support. This is something that we have been working on for the last year. It meant finding replacements for many libraries and components we use, the biggest of which was the Active Scripting support. We ended up having to write our own active scripting library as the old one was impossible to move forward with (the vendor has long since disappeared). This work is mostly completed. &lt;br /&gt;
&lt;br /&gt;
2) A new IDE - with the ability to open multiple projects, and hopefully be able to step into included projects. This required some major re-architecting of the core and the IDE and that is something we are still working on. &lt;/p&gt;
&lt;p&gt;3)&amp;nbsp;General enhancements to existing actions and some new actions. As usual, we have a long todo list to keep us busy. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FinalBuilder Server 7.0&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;FinalBuilder Server 7.0 will be a revision of the FBServer 6.0 code base. (Note that this has changed from my forum post in Nov. due to resourcing issues).&lt;/p&gt;
&lt;p&gt;1)&amp;nbsp;Support for more version control triggers. MKS, Clearcase and possibly Git have been identified as popular targets. &lt;/p&gt;
&lt;p&gt;2)&amp;nbsp;Enhancements to the user interface.. cleaning up html, more use of client side script to reduce postbacks.&lt;/p&gt;
&lt;p&gt;3)&amp;nbsp;Performance enhancements where possible. &lt;/p&gt;
&lt;p&gt;We will also be looking at feature requests to see what else we can implement, but many will be implemented in a future product (see below). &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FinalBuilder Server vNext + 1 &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Along side the developement of FinalBuilder, we have had another project running over the last year that was intended to be FinalBuilder Server 7. Due to a lack of resources (or more to the point, a lack of success in recruiting) we had to rethink our plans for this product. It's a large project, and it became clear over the last few weeks that it was not going to be ready to release alongside FinalBuilder 7. This project was born out of the feature requests and feedback from users, and an in depth look at what people were really asking for and why, as well as our own future needs (we are our own best customer!). It was clear quite early on that the architecture of FinalBuilder Server was not capable of supporting some of the features, and neither was ASP.NET. &lt;/p&gt;
&lt;p&gt;So we started fresh. FB Server vNext (actual product name yet to be decided) was designed from outset to support work flow, build agents (possibly also on other platforms), tight integration with bug tracking systems and version control. We are also focusing more on the release management side of things.. management of build artifacts, release notes, tracking which issues are related to which builds, which checkins are related to which builds etc. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When???&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now what you are probably wanting to hear is when will the next versions be released. I'm not going to make any promises here, but we are aiming for FinalBuilder 7 and FBServer 7 at the end of Q1 next year. FinalBuilder Server vNext will come later in the year.&lt;br /&gt;
&lt;br /&gt;
The biggest blocking issue for us at the moment is a lack of manpower (or woman power!). We are finding it hard to recruit suitable people. Canberra is a difficult place to run a software business, we have to compete with the many (both federal and ACT)&amp;nbsp;government departments for people... and despite the election promises the government has only gotten larger over the last 2 years. We will continue our recruitment drive in the new year (but feel free to submit your resume - if you have the right to work and live in Australia).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>"Initially I had resisted [FinalBuilder] because I thought it might be too easy."</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/687/Initially-I-had-resisted-FinalBuilder-because-I-t.aspx</link><category /><pubDate>Wed, 21 Jan 2009 14:00:00 GMT</pubDate><description>&lt;p&gt;Nelson Wolf recently published a &lt;a href="http://blog.wolfplusplus.com/?p=55"&gt;blog post&lt;/a&gt; to introduce the new FinalBuilder action he'd developed. The action checks that all required variables for a project are available at run-time. Quite a handy action if your projects include a lot of subprojects. You can download it from &lt;a href="https://launchpad.net/wolf-fbcustomactions"&gt;launchpad.net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;He's also created and made available example projects and a 'unit testing' project for the action.&lt;/p&gt;
&lt;p&gt;I have to comment on one other comment in the post that gave me a good laugh.&lt;/p&gt;
&lt;blockquote&gt;"Initially I had resisted [FinalBuilder] because I thought it might be too easy."&lt;/blockquote&gt;
&lt;p&gt;We've previously heard from devs who are hesitant to try a visual tool because of fears that it may restrict what you can automate, but I've never heard of someone avoiding FB because it might make automating builds too easy! &lt;img src="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/regular_smile.gif" alt="" /&gt;&lt;/p&gt;</description></item><item><title>Broken the Build? Time to get your just desserts</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/686/Broken-the-Build-Time-to-get-your-just-desserts.aspx</link><category /><pubDate>Thu, 08 Jan 2009 14:00:00 GMT</pubDate><description>&lt;p&gt;Suma, a frustrated stackoverflow member, recently asked "&lt;a href="http://stackoverflow.com/questions/211426/what-punishment-do-you-have-when-someone-on-the-team-breaks-the-build"&gt;what other teams do when someone breaks the build?&lt;/a&gt;"&lt;br /&gt;
&lt;br /&gt;
The answers, including photo evidence, were definitely some of the more humourous I've seen on stackoverflow.&lt;br /&gt;
&lt;br /&gt;
I think I prefer Jeff Atwood's penance of doughnuts over physical foam assault and humiliation, but that's just because of my sweet tooth and not my kindheartedness. &lt;img src="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/wink_smile.gif" alt="" /&gt;&lt;/p&gt;
&lt;div align="center"&gt;&lt;img height="289" width="500" alt="Penance of doughnuts - Jeff Atwood" src="/Portals/0/ArticleImages/BlogImages/penance-of-doughnuts.jpg" /&gt;&lt;/div&gt;
&lt;p align="right"&gt;&amp;#160;Image source: &lt;a href="http://stackoverflow.com/questions/211426/what-punishment-do-you-have-when-someone-on-the-team-breaks-the-build"&gt;Jeff Atwood on stackoverflow.com&lt;/a&gt;&lt;/p&gt;
&lt;p align="left"&gt;If you fear being the target of a Nerf assault, perhaps FinalBuilder Server can help with its &lt;a href="/build-responsibly.aspx"&gt;Build Responsibility&lt;/a&gt; flag. By taking responsibility for fixing the build you can mitigate the wrath of angry team members.&lt;/p&gt;</description></item><item><title>Seeking FinalBuilder experts available for contracting</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/685/Seeking-FinalBuilder-experts-available-for-contra.aspx</link><category /><pubDate>Sun, 07 Dec 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;&lt;span class="DNNAligncenter" id="dnn_ctr365_ContentPane"&gt;Kirk Marple, the Chief Software Architect at RadiantGrid Technologies, contacted me recently to find a contractor to help set up &lt;/span&gt;&lt;span class="DNNAligncenter" id="dnn_ctr365_ContentPane"&gt;RadiantGrid's&lt;/span&gt;&lt;span class="DNNAligncenter" id="dnn_ctr365_ContentPane"&gt; build process. If you're a FinalBuilder expert and available in Janurary 2009 why not contact Kirk?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You can learn more about the position in Kirk's forum post &lt;a href="/forums.aspx?aff=1&amp;amp;aft=8673&amp;amp;afv=topic"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span class="DNNAligncenter" id="dnn_ctr365_ContentPane"&gt;If you aren't available in January, but are a FinalBuilder professional who would like to offer your skills in future, &lt;/span&gt;please also &lt;a href="/contact.aspx"&gt;contact us&lt;/a&gt; so we can keep you up to date when positions like these become available. &lt;img src="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/regular_smile.gif" alt="" /&gt;&lt;/p&gt;</description></item><item><title>Team Foundation Build and FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/684/Team-Foundation-Build-and-FinalBuilder.aspx</link><category>FinalBuilder,TFS</category><pubDate>Tue, 02 Dec 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;&lt;span class="nodeText editable"&gt;The &lt;a href="http://blog.accentient.com"&gt;Accentient Blog&lt;/a&gt; provided an interesting post recently comparing &lt;a href="http://blog.accentient.com/TeamFoundationBuildAndFinalBuilder.aspx"&gt;Team Foundation Build and FinalBuilder&lt;/a&gt;.&lt;/span&gt; It was great to see them offer an unbiased insight in to the distinctive advantages of each of these tools and it's worth a read if you're using or planning to use one or both.&lt;/p&gt;
&lt;p&gt;&lt;span class="nodeText editable"&gt;We've had plenty to say over the years about the relationship between FinalBuilder and TFS/MSBuild&lt;/span&gt;&lt;span class="nodeText editable"&gt;/Team Foundation Build&lt;/span&gt;&lt;span class="nodeText editable"&gt;. Naturally, we have a slight bias toward one of the tools, but if you're interested in learning more about combining the two, check out:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;how to integrate &lt;a href="http://www.finalbuilder.com/Resources/Articles/ID/29/articles.aspx"&gt;FinalBuilder with TFS&lt;/a&gt;;&lt;/li&gt;
    &lt;li&gt;why you would use &lt;a href="http://www.finalbuilder.com/Resources/Blogs/tabid/77/EntryId/245/-I-have-Microsoft-Team-System-why-do-I-need-FinalBuilder.aspx"&gt;FinalBuilder when you already have Team System&lt;/a&gt;;&lt;/li&gt;
    &lt;li&gt;&lt;span class="nodeText editable"&gt;why &lt;a href="http://www.finalbuilder.com/Resources/Blogs/tabid/77/EntryId/252/Team-Foundation-Build-and-FinalBuilder-6-a-match-made-in-heaven.aspx"&gt;FinalBuilder and Team Foundation Build are a match made in heaven&lt;/a&gt;&lt;/span&gt;;&lt;/li&gt;
    &lt;li&gt;a comparison between the &lt;a href="http://www.finalbuilder.com/Resources/Blogs/tabid/77/EntryId/246/MSBuild-Wish-List-vs-FinalBuilder-Feature-Set.aspx"&gt;MSBuild community's wish list and the feature set of FinalBuilder&lt;/a&gt;; and&lt;/li&gt;
    &lt;li&gt;the benefits of using both &lt;a href="http://www.finalbuilder.com/team-foundation-server.aspx"&gt;FinalBuilder and TFS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, I must disagree with just one of Accentient's statments. The final line read:&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;&lt;quote&gt;As Team Foundation Build matures, it will likely provide a feature parity competitor to FinalBuilder, but it has some catching up to do.&lt;/quote&gt;&lt;/em&gt;&lt;/blockquote&gt;
&lt;p&gt;As Team Foundation Build matures, it may begin to provide feature parity with FinalBuilder 5 or even 6. However, by then we'll be on to FB 7 or FB 8 and we have every intention of making sure these future versions will offer unique and useful features. Team Foundation Build will always have some catching up to do with FinalBuilder. &lt;img alt="" src="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/regular_smile.gif" /&gt;&lt;/p&gt;</description></item><item><title>Deploying ClickOnce apps with FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/683/Deploying-ClickOnce-apps-with-FinalBuilder.aspx</link><category /><pubDate>Thu, 27 Nov 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;If you want to automate the deployment of ClickOnce apps in FinalBuilder, Dennis van der Stelt has posted an &lt;a target="_blank" href="http://bloggingabout.net/blogs/dennis/archive/2008/11/26/deploying-clickonce-applications-automated-using-finalbuilder.aspx"&gt;excellent tutorial&lt;/a&gt; on &lt;a target="_blank" href="http://bloggingabout.net"&gt;bloggingabout.net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Check it out and if you have any questions, &lt;a href="/contact.aspx"&gt;contact us&lt;/a&gt; for help. &lt;img src="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/regular_smile.gif" alt="" /&gt;&lt;/p&gt;</description></item><item><title>Code monkeys and your build scripts</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/681/Code-monkeys-and-your-build-scripts.aspx</link><category /><pubDate>Thu, 04 Sep 2008 14:00:00 GMT</pubDate><description>&lt;h4 align="center"&gt;&lt;font size="4"&gt;Code monkeys and build scripts&lt;/font&gt;&lt;/h4&gt;
&lt;p&gt;&lt;cite&gt;"The infinite monkey theorem states that a monkey hitting keys at random on a [computer] keyboard for an infinite amount of time will almost surely type a given text, such as the complete works of William Shakespeare"&lt;/cite&gt; - &lt;a href="http://en.wikipedia.org/wiki/Infinite_monkey_theorem"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But what about a working build script?&lt;/p&gt;
&lt;p&gt;We tested the theorem at VSoft. The results were conclusive - 99% of code monkeys build better with FinalBuilder.&lt;/p&gt;
&lt;p align="center"&gt;&lt;object height="392" width="437" id="viddler_855f6c13" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;
&lt;param value="http://www.viddler.com/player/855f6c13/" name="movie" /&gt;
&lt;param value="always" name="allowScriptAccess" /&gt;
&lt;param value="true" name="allowFullScreen" /&gt;&lt;embed height="392" width="437" name="viddler_855f6c13" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.viddler.com/player/855f6c13/"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;The video is actually a proof that was provided to us by the flash animator we hired for our latest advertising campaign. The flash versions of the VSoft code monkeys are appearing for about 1 million eyeballs per month across a variety of developer sites. Be sure to let us know if you see them in the wild. &lt;img src="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/regular_smile.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;By the way, if you like what you see, we're &lt;a href="/jobs.aspx"&gt;hiring&lt;/a&gt;. &lt;img src="/Providers/HtmlEditorProviders/Fck/FCKeditor/editor/images/smiley/msn/regular_smile.gif" alt="" /&gt;&lt;/p&gt;</description></item><item><title>Pervasiveness of Continuous Integration</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/680/Pervasiveness-of-Continuous-Integration.aspx</link><category /><pubDate>Tue, 02 Sep 2008 14:00:00 GMT</pubDate><description>&lt;h4 align="center"&gt;&lt;font size="4"&gt;Do you currently use a Continuous Integration system?&lt;/font&gt;&lt;/h4&gt;
&lt;p align="center"&gt;&lt;img alt="Continuous Integration among FinalBuilder Users" src="http://www.finalbuilder.com/images/2008-survey-charts/2008-survey-CI-system.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;Since releasing the full featured FBServer in April, we’ve seen healthy growth in its adoption as a Continuous Integration Server;  	however, the 2008 FB Survey showed quite low adoption of Continuous Integration systems in general among FinalBuilder users.&lt;br /&gt;
&lt;br /&gt;
More importantly, of those not using any CI system, 2/3’s did not intend to start using a CI system in the next 12 months!&lt;/p&gt;
&lt;h4 align="center"&gt;&lt;font size="4"&gt;Do you plan to start using a Continuous Integration system within the next 12 months?&lt;/font&gt;&lt;/h4&gt;
&lt;p align="center"&gt;&lt;img alt="Future Continuous Integration adoption amoung FinalBuilder Users" src="http://www.finalbuilder.com/images/2008-survey-charts/2008-survey-CI-system-12-months.png" /&gt;&lt;/p&gt;
&lt;p&gt;For users of an automated build tool, most of whom have free access to a very easy-to-configure  	&lt;a target="_blank" href="http://www.finalbuilder.com/finalbuilder-server.aspx"&gt;Continuous Integration server&lt;/a&gt;, these are incredibly low proportions!  	I can only speculate that perhaps the benefits of CI aren’t as well known, or appreciated, as the benefits of a fully automated build and release process.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;This is the 3rd post in a series discussing insights uncovered in the 2008 FinalBuilder survey. &lt;/font&gt;&lt;/p&gt;</description></item><item><title>Top 10 Version Control Systems</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/679/Top-10-Version-Control-Systems.aspx</link><category /><pubDate>Tue, 26 Aug 2008 14:00:00 GMT</pubDate><description>&lt;h4 align="center"&gt;&lt;font size="4"&gt;Which Version Control System do you currently use?&lt;/font&gt;&lt;/h4&gt;
&lt;p align="center"&gt;&lt;img src="http://www.finalbuilder.com/images/2008-survey-charts/2008-survey-source-control-current.png" alt="FinalBuilder Cutomer's Source Control Preference Chart" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;This year’s results continue to provide an interesting insight into FB user’s version control tool of choice.  &lt;br /&gt;
&lt;br /&gt;
Most notably:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Subversion has successfully grown to become number 1 among our customers. This is only a few years after&amp;#160;trailing SourceSafe significantly in our &lt;a size="3" href="http://www.vsoft-tech.com.au/blogs.aspx?EntryID=107" target="_blank"&gt;2005 survey&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Despite the efforts of some influential commentators in the developer community 	(&lt;a href="http://www.codinghorror.com/blog/archives/000660.html" target="_blank"&gt;one in particular comes to mind&lt;/a&gt;), 	SourceSafe continues to be a very popular VCS, at least among FinalBuilder customers.&lt;/li&gt;
    &lt;li&gt;It’s interesting, and quite surprising, to see the number of FB users who choose not to use a version control system.  	We tend to think of FB users as very savvy developers who seek out tools and technologies to improve their productivity, 	the type of developers some people generally include in the controversial  	&lt;a href="http://blog.red-bean.com/sussman/?p=79" target="_blank"&gt;20% category&lt;/a&gt;. 	However, a surprisingly large number seem to choose not to use version control. 	I deliberately say choose, because I imagine every developer using FB is well and truly aware of both the options and benefits of using source control.&lt;/li&gt;
    &lt;li&gt;TFS hasn’t come close to SourceSafe in adoption among FB users.  	I may be told I'm comparing apples with oranges, but it doesn't even look like adoption has grown much since 	&lt;a href="http://www.vsoft-tech.com.au/blogs.aspx?EntryID=190" target="_blank"&gt;2006&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A few caveats about comparing this year's results with those of previous years. Each year’s survey has a random sample.    	This year, the VCS question was also worded slightly differently to that used in previous years. 	&lt;br /&gt;
&lt;br /&gt;
In any case, it’s great to know that FinalBuilder supports all of the top 10 Source Control systems, in addition to &lt;a href="http://www.finalbuilder.com/Products/FinalBuilder/FeatureMatrix/FeaturesVersionControlSystemActions/tabid/101/Default.aspx" target="_blank"&gt;many others&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;This is the 2nd post in a series discussing insights uncovered in the 2008 FinalBuilder survey.  Future posts will look at testing tool usage, Vista adoption and the pervasiveness of Continuous Integration. &lt;/font&gt;&lt;/p&gt;</description></item><item><title>99% of FinalBuilder 6 users agree</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/678/99-of-FinalBuilder-6-users-agree.aspx</link><category /><pubDate>Sun, 24 Aug 2008 14:00:00 GMT</pubDate><description>&lt;h4&gt;&lt;font size="4"&gt;What is your overall rating of FinalBuilder 6?&lt;/font&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src="http://www.finalbuilder.com/images/2008-survey-charts/2008-survey-FB6-overall-rating.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;font size="3"&gt;99% of FinalBuilder 6 users agree that the latest version is either good or excellent, while not a single respondent felt FinalBuilder 6 was poor or terrible!&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="3"&gt;This was one of the heartening statistics found in the 2008 FinalBuilder Survey. It's great to see that we're able to continue to meet and exceed your expectations!&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;This is the first in a series of posts discussing insights uncovered in the 2008 FinalBuilder survey. Future posts will cover source control and testing tool usage, Vista adoption and the pervasiveness of Continuous Integration.&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Using Python in FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/625/Using-Python-in-FinalBuilder.aspx</link><category /><pubDate>Wed, 04 Jun 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;Today &lt;a target="_blank" href="http://www.finalbuilder.com/forums.aspx?forumid=1&amp;amp;postid=7229&amp;amp;view=topic"&gt;FB 6.1 was released as a beta version&lt;/a&gt;. One of the major new features in this version is Python language support. We're leveraging Microsoft's &lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython&lt;/a&gt; project for this, and because version 2 of IronPython is built on the Dynamic Language Runtime, we're expecting that as other DLR languages become available, we'll be able to support them in FinalBuilder as well.&lt;/p&gt;
&lt;p&gt;The Python language is pretty neat, and the fact that IronPython interacts seamlessly with the .NET Framework makes it pretty powerful by itself. It shares this feature with PowerShell.&lt;/p&gt;
&lt;p&gt;However, &lt;a target="_blank" href="http://xkcd.com/353/"&gt;what really makes Python awesome&lt;/a&gt; is the amount of extra library functionality that comes with the standard language distribution.&lt;/p&gt;
&lt;h2&gt;Example&lt;/h2&gt;
&lt;p&gt;This is a totally arbitrary example. Say your build process needs to calculate a SHA1 hash. FinalBuilder only supports MD5 at the moment. Can Python save the day?&lt;/p&gt;
&lt;h2&gt;Step One: Install Python Libraries&lt;/h2&gt;
&lt;p&gt;You need to install the Python standard libraries in order to get access to their many functions. You get this as part of the standard Windows Python distribution. Grab the "Windows Binary installer" from &lt;a target="_blank" href="http://python.org/download/"&gt;http://python.org/download/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Step Two: Tell FinalBuilder&lt;/h2&gt;
&lt;p&gt;You need to tell FinalBuilder where the Python library is installed. If you launch FinalBuilder and go to Tools -&amp;gt; Options -&amp;gt; FinalBuilder -&amp;gt; Script Options, as shown, you will see this options page:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Script Options Frame" src="/blogimages/Python/Options.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Enter the path to the Python library directory, as shown here. The options page says you need to restart, but you actually only need to do this if you've run a Python script since you started FinalBuilder.&lt;/p&gt;
&lt;h2&gt;Step Three: Run Script Action&lt;/h2&gt;
&lt;p&gt;I use the Action filter to search for the all-purpose Run Script action, which I can then add to my project:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Actions Tab" src="/blogimages/Python/ActionFilter.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;Step Four: Type in Script&lt;/h2&gt;
&lt;p&gt;Here's my SHA1 script code. I entered this in the OnExecute event, under the Script Editor tab at the bottom of the main FinalBuilder IDE. Make sure you set the script language to "Python", as shown:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Script Editor view" src="/blogimages/Python/ScriptEditor.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Note that the FBVariables object behaves just like a normal Python dictionary.&lt;/p&gt;
&lt;p&gt;&lt;a href="/blogimages/Python/Python SHA1 Example.zip"&gt;Click here to download a sample project file&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Step Five: Run it!&lt;/h2&gt;
&lt;p&gt;Here's the log output from the SHA1 Run Script:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Log Output" src="/blogimages/Python/LogOutput.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;Where do I go from here?&lt;/h2&gt;
&lt;p&gt;This was a pretty basic example, but the Python library provides you with literally hundreds of similar pieces of functionality. Take a look at the &lt;a target="_blank" href="http://docs.python.org/lib/"&gt;Python Library Reference&lt;/a&gt; for a complete list.&lt;/p&gt;
&lt;h2&gt;Can't I just use the .NET Framework?&lt;/h2&gt;
&lt;p&gt;Yes! The .NET Framework also provides you with a wealth of built-in functionality. Using it from IronPython is pretty simple, too. Here's Python code that performs the same functionality, written to use the .NET Framework instead of the Python library:&lt;/p&gt;
&lt;p&gt;&lt;img alt=".NET Framework version" src="/blogimages/Python/DotNetVersion.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;(It's a bit more complicated, mostly because I couldn't find a neat .NET-based way to convert a byte array to a hexadecimal string. Note that this approach does not require the Python libraries, it will work out of the box with FinalBuilder.)&lt;/p&gt;
&lt;p&gt;Both sample scripts are included in the &lt;a href="/blogimages/Python/Python SHA1 Example.zip"&gt;downloadable example&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It would also be possible to rewrite the .NET version to use PowerShell, instead. I'll leave that as an exercise.&lt;/p&gt;</description></item><item><title>Using Python in FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/651/Using-Python-in-FinalBuilder.aspx</link><category /><pubDate>Wed, 04 Jun 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;Today &lt;a target="_blank" href="http://www.finalbuilder.com/forums.aspx?forumid=1&amp;amp;postid=7229&amp;amp;view=topic"&gt;FB 6.1 was released as a beta version&lt;/a&gt;. One of the major new features in this version is Python language support. We're leveraging Microsoft's &lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython&lt;/a&gt; project for this, and because version 2 of IronPython is built on the Dynamic Language Runtime, we're expecting that as other DLR languages become available, we'll be able to support them in FinalBuilder as well.&lt;/p&gt;
&lt;p&gt;The Python language is pretty neat, and the fact that IronPython interacts seamlessly with the .NET Framework makes it pretty powerful by itself. It shares this feature with PowerShell.&lt;/p&gt;
&lt;p&gt;However, &lt;a target="_blank" href="http://xkcd.com/353/"&gt;what really makes Python awesome&lt;/a&gt; is the amount of extra library functionality that comes with the standard language distribution.&lt;/p&gt;
&lt;h2&gt;Example&lt;/h2&gt;
&lt;p&gt;This is a totally arbitrary example. Say your build process needs to calculate a SHA1 hash. FinalBuilder only supports MD5 at the moment. Can Python save the day?&lt;/p&gt;
&lt;h2&gt;Step One: Install Python Libraries&lt;/h2&gt;
&lt;p&gt;You need to install the Python standard libraries in order to get access to their many functions. You get this as part of the standard Windows Python distribution. Grab the "Windows Binary installer" from &lt;a target="_blank" href="http://python.org/download/"&gt;http://python.org/download/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Step Two: Tell FinalBuilder&lt;/h2&gt;
&lt;p&gt;You need to tell FinalBuilder where the Python library is installed. If you launch FinalBuilder and go to Tools -&amp;gt; Options -&amp;gt; FinalBuilder -&amp;gt; Script Options, as shown, you will see this options page:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Script Options Frame" src="/blogimages/Python/Options.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Enter the path to the Python library directory, as shown here. The options page says you need to restart, but you actually only need to do this if you've run a Python script since you started FinalBuilder.&lt;/p&gt;
&lt;h2&gt;Step Three: Run Script Action&lt;/h2&gt;
&lt;p&gt;I use the Action filter to search for the all-purpose Run Script action, which I can then add to my project:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Actions Tab" src="/blogimages/Python/ActionFilter.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;Step Four: Type in Script&lt;/h2&gt;
&lt;p&gt;Here's my SHA1 script code. I entered this in the OnExecute event, under the Script Editor tab at the bottom of the main FinalBuilder IDE. Make sure you set the script language to "Python", as shown:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Script Editor view" src="/blogimages/Python/ScriptEditor.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Note that the FBVariables object behaves just like a normal Python dictionary.&lt;/p&gt;
&lt;p&gt;&lt;a href="/blogimages/Python/Python SHA1 Example.zip"&gt;Click here to download a sample project file&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Step Five: Run it!&lt;/h2&gt;
&lt;p&gt;Here's the log output from the SHA1 Run Script:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Log Output" src="/blogimages/Python/LogOutput.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;Where do I go from here?&lt;/h2&gt;
&lt;p&gt;This was a pretty basic example, but the Python library provides you with literally hundreds of similar pieces of functionality. Take a look at the &lt;a target="_blank" href="http://docs.python.org/lib/"&gt;Python Library Reference&lt;/a&gt; for a complete list.&lt;/p&gt;
&lt;h2&gt;Can't I just use the .NET Framework?&lt;/h2&gt;
&lt;p&gt;Yes! The .NET Framework also provides you with a wealth of built-in functionality. Using it from IronPython is pretty simple, too. Here's Python code that performs the same functionality, written to use the .NET Framework instead of the Python library:&lt;/p&gt;
&lt;p&gt;&lt;img alt=".NET Framework version" src="/blogimages/Python/DotNetVersion.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;(It's a bit more complicated, mostly because I couldn't find a neat .NET-based way to convert a byte array to a hexadecimal string. Note that this approach does not require the Python libraries, it will work out of the box with FinalBuilder.)&lt;/p&gt;
&lt;p&gt;Both sample scripts are included in the &lt;a href="/blogimages/Python/Python SHA1 Example.zip"&gt;downloadable example&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It would also be possible to rewrite the .NET version to use PowerShell, instead. I'll leave that as an exercise.&lt;/p&gt;</description></item><item><title>Using Python in FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/677/Using-Python-in-FinalBuilder.aspx</link><category>FinalBuilder</category><pubDate>Wed, 04 Jun 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;Today &lt;a target="_blank" href="http://www.finalbuilder.com/forums.aspx?forumid=1&amp;amp;postid=7229&amp;amp;view=topic"&gt;FB 6.1 was released as a beta version&lt;/a&gt;. One of the major new features in this version is Python language support. We're leveraging Microsoft's &lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython&lt;/a&gt; project for this, and because version 2 of IronPython is built on the Dynamic Language Runtime, we're expecting that as other DLR languages become available, we'll be able to support them in FinalBuilder as well.&lt;/p&gt;
&lt;p&gt;The Python language is pretty neat, and the fact that IronPython interacts seamlessly with the .NET Framework makes it pretty powerful by itself. It shares this feature with PowerShell.&lt;/p&gt;
&lt;p&gt;However, &lt;a target="_blank" href="http://xkcd.com/353/"&gt;what really makes Python awesome&lt;/a&gt; is the amount of extra library functionality that comes with the standard language distribution.&lt;/p&gt;
&lt;h2&gt;Example&lt;/h2&gt;
&lt;p&gt;This is a totally arbitrary example. Say your build process needs to calculate a SHA1 hash. FinalBuilder only supports MD5 at the moment. Can Python save the day?&lt;/p&gt;
&lt;h2&gt;Step One: Install Python Libraries&lt;/h2&gt;
&lt;p&gt;You need to install the Python standard libraries in order to get access to their many functions. You get this as part of the standard Windows Python distribution. Grab the "Windows Binary installer" from &lt;a target="_blank" href="http://python.org/download/"&gt;http://python.org/download/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Step Two: Tell FinalBuilder&lt;/h2&gt;
&lt;p&gt;You need to tell FinalBuilder where the Python library is installed. If you launch FinalBuilder and go to Tools -&amp;gt; Options -&amp;gt; FinalBuilder -&amp;gt; Script Options, as shown, you will see this options page:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Script Options Frame" src="/blogimages/Python/Options.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Enter the path to the Python library directory, as shown here. The options page says you need to restart, but you actually only need to do this if you've run a Python script since you started FinalBuilder.&lt;/p&gt;
&lt;h2&gt;Step Three: Run Script Action&lt;/h2&gt;
&lt;p&gt;I use the Action filter to search for the all-purpose Run Script action, which I can then add to my project:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Actions Tab" src="/blogimages/Python/ActionFilter.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;Step Four: Type in Script&lt;/h2&gt;
&lt;p&gt;Here's my SHA1 script code. I entered this in the OnExecute event, under the Script Editor tab at the bottom of the main FinalBuilder IDE. Make sure you set the script language to "Python", as shown:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Script Editor view" src="/blogimages/Python/ScriptEditor.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Note that the FBVariables object behaves just like a normal Python dictionary.&lt;/p&gt;
&lt;p&gt;&lt;a href="/blogimages/Python/Python SHA1 Example.zip"&gt;Click here to download a sample project file&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Step Five: Run it!&lt;/h2&gt;
&lt;p&gt;Here's the log output from the SHA1 Run Script:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Log Output" src="/blogimages/Python/LogOutput.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;Where do I go from here?&lt;/h2&gt;
&lt;p&gt;This was a pretty basic example, but the Python library provides you with literally hundreds of similar pieces of functionality. Take a look at the &lt;a target="_blank" href="http://docs.python.org/lib/"&gt;Python Library Reference&lt;/a&gt; for a complete list.&lt;/p&gt;
&lt;h2&gt;Can't I just use the .NET Framework?&lt;/h2&gt;
&lt;p&gt;Yes! The .NET Framework also provides you with a wealth of built-in functionality. Using it from IronPython is pretty simple, too. Here's Python code that performs the same functionality, written to use the .NET Framework instead of the Python library:&lt;/p&gt;
&lt;p&gt;&lt;img alt=".NET Framework version" src="/blogimages/Python/DotNetVersion.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;(It's a bit more complicated, mostly because I couldn't find a neat .NET-based way to convert a byte array to a hexadecimal string. Note that this approach does not require the Python libraries, it will work out of the box with FinalBuilder.)&lt;/p&gt;
&lt;p&gt;Both sample scripts are included in the &lt;a href="/blogimages/Python/Python SHA1 Example.zip"&gt;downloadable example&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It would also be possible to rewrite the .NET version to use PowerShell, instead. I'll leave that as an exercise.&lt;/p&gt;</description></item><item><title>Hate Team Foundation Server?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/624/Hate-Team-Foundation-Server.aspx</link><category /><pubDate>Thu, 15 May 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;According to Google Analytics statistics for the past month, a number of people found the FinalBuilder web site in Google search results for the query &lt;a href="http://www.google.com/search?q=hate+%22team+foundation+server%22" target="_blank"&gt;&lt;strong&gt;&lt;em&gt;hate "Team Foundation Server"&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I didn't know so many people felt that way!&lt;/p&gt;
&lt;p&gt;(For the record, we think that &lt;a href="/team-foundation-server.aspx"&gt;FinalBuilder complements Team Foundation Build&lt;/a&gt; in very productive ways.)&lt;/p&gt;</description></item><item><title>Hate Team Foundation Server?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/650/Hate-Team-Foundation-Server.aspx</link><category /><pubDate>Thu, 15 May 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;According to Google Analytics statistics for the past month, a number of people found the FinalBuilder web site in Google search results for the query &lt;a href="http://www.google.com/search?q=hate+%22team+foundation+server%22" target="_blank"&gt;&lt;strong&gt;&lt;em&gt;hate "Team Foundation Server"&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I didn't know so many people felt that way!&lt;/p&gt;
&lt;p&gt;(For the record, we think that &lt;a href="/team-foundation-server.aspx"&gt;FinalBuilder complements Team Foundation Build&lt;/a&gt; in very productive ways.)&lt;/p&gt;</description></item><item><title>Hate Team Foundation Server?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/676/Hate-Team-Foundation-Server.aspx</link><category>FinalBuilder,TFS</category><pubDate>Thu, 15 May 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;According to Google Analytics statistics for the past month, a number of people found the FinalBuilder web site in Google search results for the query &lt;a href="http://www.google.com/search?q=hate+%22team+foundation+server%22" target="_blank"&gt;&lt;strong&gt;&lt;em&gt;hate "Team Foundation Server"&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I didn't know so many people felt that way!&lt;/p&gt;
&lt;p&gt;(For the record, we think that &lt;a href="/team-foundation-server.aspx"&gt;FinalBuilder complements Team Foundation Build&lt;/a&gt; in very productive ways.)&lt;/p&gt;</description></item><item><title>Delphi: Workaround for TThread Synchronize/WaitFor Deadlock</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/623/Delphi-Workaround-for-TThread-SynchronizeWaitFor-.aspx</link><category /><pubDate>Wed, 23 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;FinalBuilder is written in a combination of Delphi and C#. This is a blog post about a Delphi RTL threading issue that I recently ran into and had to work around.&lt;/p&gt;
&lt;p&gt;We recently had some bug reports of FinalBuilder deadlocking at shutdown under certain circumstances. I could reproduce the problem, but I was baffled for a long time because - according to the call stacks&amp;#160; - the program should have been fine.&lt;/p&gt;
&lt;p&gt;The issue I'd run into has been around for years, and is summed up nicely in this Borland QC note: &lt;a href="http://qc.borland.com/wc/qcmain.aspx?d=22267" target="_blank"&gt;&lt;span class="TextPlus"&gt;&lt;span class="opencolor" id="MainContentUserControl__ctl0_ShortDescriptionLabel"&gt;Synchronize and WaitFor methods of TThread can lead to a DeadLock in logically correct applications&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;The simple summary is: If you ever have a call stack which includes both Synchronize and WaitFor, and the thread you are waiting on also calls Synchronize at some point, you will occasionally get a deadlock.&lt;/p&gt;
&lt;p&gt;Explaining why is kind of tricky, but if you read the QC case you'll get the gist of it. The problematic sequence of events looks like this:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Thread A calls Synchronize(MethodA)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;Thread B calls Synchronize(MethodB)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, inside the context of the Main Thread:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Main thread calls CheckSynchronize() while processing messages&lt;/li&gt;
    &lt;li&gt;CheckSynchronize is implemented to batch-process all waiting calls(&lt;a target="_self" href="#commentary"&gt;*&lt;/a&gt;).&lt;a name="star"&gt;&lt;/a&gt; So it picks up the queue of waiting calls (containing MethodA and MethodB) and loops through them one by one.&lt;/li&gt;
    &lt;li&gt;MethodA executes in the main thread's context. Assume MethodA calls ThreadB.WaitFor&lt;/li&gt;
    &lt;li&gt;WaitFor calls CheckSynchronize to process any waiting calls to Synchronize&lt;/li&gt;
    &lt;li&gt;In theory, this should then process ThreadB's Synchronize(MethodB), allowing Thread B to complete.&lt;/li&gt;
    &lt;li&gt;However, MethodB is already a possession of the first CheckSynchronize call, so it never gets called.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DEADLOCK!&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;The ideal solution is to refactor your program so it will never call CheckSynchronize or WaitFor from inside an already-synchronized method call. For FinalBuilder, this was not a good option - all it takes is one Synchronized method call to call ProcessMessages and you're letting in dozens of potential deadlocks.&lt;/p&gt;
&lt;p&gt;The solution I came up with is to write a "SafeSynchronize" method that only allows one thread at a time to get on the Synchronize method queue. This comes with a performance hit, but prevents the deadlock.&lt;/p&gt;
&lt;p&gt;Here's a new class which implements the SafeSynchronize method:&lt;/p&gt;
&lt;p&gt;&amp;#160;&amp;#160;TSafeSyncThread&amp;#160;=&amp;#160;class(TThread)&lt;br /&gt;
&amp;#160;&amp;#160;private&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;procedure&amp;#160;SafeSynchronizeInner;&lt;br /&gt;
&amp;#160;&amp;#160;protected&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;procedure&amp;#160;SafeSynchronize(const&amp;#160;AThreadMethod:&amp;#160;TThreadMethod);&lt;br /&gt;
&amp;#160;&amp;#160;end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{&amp;#160;TSafeSyncThread&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronize&amp;#160;:&amp;#160;TCriticalSection;&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronizeTarget&amp;#160;:&amp;#160;TThreadMethod;&lt;br /&gt;
&lt;br /&gt;
procedure&amp;#160;TSafeSyncThread.SafeSynchronize(const&amp;#160;AThreadMethod:&amp;#160;TThreadMethod);&lt;br /&gt;
begin&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronize.Acquire;&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronizeTarget&amp;#160;:=&amp;#160;AThreadMethod;&lt;br /&gt;
&amp;#160;&amp;#160;Synchronize(SafeSynchronizeInner);&lt;br /&gt;
end;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
procedure&amp;#160;TSafeSyncThread.SafeSynchronizeInner;&lt;br /&gt;
var&lt;br /&gt;
&amp;#160;&amp;#160;targetMethod&amp;#160;:&amp;#160;TThreadMethod;&lt;br /&gt;
begin&lt;br /&gt;
&amp;#160;&amp;#160;targetMethod&amp;#160;:=&amp;#160;FSingleSynchronizeTarget;&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronize.Release;&amp;#160;//&amp;#160;Now&amp;#160;we're&amp;#160;inside&amp;#160;a&amp;#160;CheckSynchronize&amp;#160;call,&amp;#160;it's&amp;#160;safe&amp;#160;to&amp;#160;let&amp;#160;another&amp;#160;thread&amp;#160;join&amp;#160;the&amp;#160;queue&lt;br /&gt;
&amp;#160;&amp;#160;targetMethod;&amp;#160;&amp;#160;&lt;br /&gt;
end;&lt;/p&gt;
&lt;p&gt;Basically, this serializes access to the Synchronize queue. The performance hit is potentially quite large if you have a lot of concurrent SafeSynchronize calls and a busy main thread. FinalBuilder is designed in a way which minimizes this, so it's less of an issue for us.&lt;/p&gt;
&lt;p&gt;I put together a quick test project which demonstrates the issue (at least on Delphi 2007.) You can get it here &lt;a href="/blogimages/WaitForDeadlockExample.zip"&gt;if you want to have a look&lt;/a&gt;. It also contains &lt;a href="/blogimages/SafeSyncThread.pas"&gt;SafeSyncThread.pas&lt;/a&gt; if you want to incorporate the workaround into your own projects. This code comes with no guarantees and no warranty, obviously.&lt;/p&gt;
&lt;p&gt;If anyone has a better (preferably faster) solution to this problem, which doesn't require rewriting the RTL, please let us know. :).&lt;/p&gt;
&lt;p&gt;PS The test project example contains some fairly awful cut-and-paste code reproduction, which - for the record - I normally avoid like the plague. I used it here because the methods are very simple, and I couldn't see an easy way to rearchitect it.&lt;/p&gt;
&lt;p&gt;&lt;a name="commentary"&gt;&lt;/a&gt;(*) FWIW, I actually quite like the way that CheckSynchronize is implemented, using an InterlockedExchange to swap the old queue object with a brand new one. That way you can process the entire old queue at once, without granular locking. Check the source code if you want to see what I mean. It's just a shame about the deadlock. (&lt;a href="#star"&gt;back&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>Delphi: Workaround for TThread Synchronize/WaitFor Deadlock</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/649/Delphi-Workaround-for-TThread-SynchronizeWaitFor-.aspx</link><category /><pubDate>Wed, 23 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;FinalBuilder is written in a combination of Delphi and C#. This is a blog post about a Delphi RTL threading issue that I recently ran into and had to work around.&lt;/p&gt;
&lt;p&gt;We recently had some bug reports of FinalBuilder deadlocking at shutdown under certain circumstances. I could reproduce the problem, but I was baffled for a long time because - according to the call stacks&amp;#160; - the program should have been fine.&lt;/p&gt;
&lt;p&gt;The issue I'd run into has been around for years, and is summed up nicely in this Borland QC note: &lt;a href="http://qc.borland.com/wc/qcmain.aspx?d=22267" target="_blank"&gt;&lt;span class="TextPlus"&gt;&lt;span class="opencolor" id="MainContentUserControl__ctl0_ShortDescriptionLabel"&gt;Synchronize and WaitFor methods of TThread can lead to a DeadLock in logically correct applications&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;The simple summary is: If you ever have a call stack which includes both Synchronize and WaitFor, and the thread you are waiting on also calls Synchronize at some point, you will occasionally get a deadlock.&lt;/p&gt;
&lt;p&gt;Explaining why is kind of tricky, but if you read the QC case you'll get the gist of it. The problematic sequence of events looks like this:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Thread A calls Synchronize(MethodA)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;Thread B calls Synchronize(MethodB)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, inside the context of the Main Thread:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Main thread calls CheckSynchronize() while processing messages&lt;/li&gt;
    &lt;li&gt;CheckSynchronize is implemented to batch-process all waiting calls(&lt;a target="_self" href="#commentary"&gt;*&lt;/a&gt;).&lt;a name="star"&gt;&lt;/a&gt; So it picks up the queue of waiting calls (containing MethodA and MethodB) and loops through them one by one.&lt;/li&gt;
    &lt;li&gt;MethodA executes in the main thread's context. Assume MethodA calls ThreadB.WaitFor&lt;/li&gt;
    &lt;li&gt;WaitFor calls CheckSynchronize to process any waiting calls to Synchronize&lt;/li&gt;
    &lt;li&gt;In theory, this should then process ThreadB's Synchronize(MethodB), allowing Thread B to complete.&lt;/li&gt;
    &lt;li&gt;However, MethodB is already a possession of the first CheckSynchronize call, so it never gets called.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DEADLOCK!&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;The ideal solution is to refactor your program so it will never call CheckSynchronize or WaitFor from inside an already-synchronized method call. For FinalBuilder, this was not a good option - all it takes is one Synchronized method call to call ProcessMessages and you're letting in dozens of potential deadlocks.&lt;/p&gt;
&lt;p&gt;The solution I came up with is to write a "SafeSynchronize" method that only allows one thread at a time to get on the Synchronize method queue. This comes with a performance hit, but prevents the deadlock.&lt;/p&gt;
&lt;p&gt;Here's a new class which implements the SafeSynchronize method:&lt;/p&gt;
&lt;p&gt;&amp;#160;&amp;#160;TSafeSyncThread&amp;#160;=&amp;#160;class(TThread)&lt;br /&gt;
&amp;#160;&amp;#160;private&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;procedure&amp;#160;SafeSynchronizeInner;&lt;br /&gt;
&amp;#160;&amp;#160;protected&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;procedure&amp;#160;SafeSynchronize(const&amp;#160;AThreadMethod:&amp;#160;TThreadMethod);&lt;br /&gt;
&amp;#160;&amp;#160;end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{&amp;#160;TSafeSyncThread&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronize&amp;#160;:&amp;#160;TCriticalSection;&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronizeTarget&amp;#160;:&amp;#160;TThreadMethod;&lt;br /&gt;
&lt;br /&gt;
procedure&amp;#160;TSafeSyncThread.SafeSynchronize(const&amp;#160;AThreadMethod:&amp;#160;TThreadMethod);&lt;br /&gt;
begin&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronize.Acquire;&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronizeTarget&amp;#160;:=&amp;#160;AThreadMethod;&lt;br /&gt;
&amp;#160;&amp;#160;Synchronize(SafeSynchronizeInner);&lt;br /&gt;
end;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
procedure&amp;#160;TSafeSyncThread.SafeSynchronizeInner;&lt;br /&gt;
var&lt;br /&gt;
&amp;#160;&amp;#160;targetMethod&amp;#160;:&amp;#160;TThreadMethod;&lt;br /&gt;
begin&lt;br /&gt;
&amp;#160;&amp;#160;targetMethod&amp;#160;:=&amp;#160;FSingleSynchronizeTarget;&lt;br /&gt;
&amp;#160;&amp;#160;FSingleSynchronize.Release;&amp;#160;//&amp;#160;Now&amp;#160;we're&amp;#160;inside&amp;#160;a&amp;#160;CheckSynchronize&amp;#160;call,&amp;#160;it's&amp;#160;safe&amp;#160;to&amp;#160;let&amp;#160;another&amp;#160;thread&amp;#160;join&amp;#160;the&amp;#160;queue&lt;br /&gt;
&amp;#160;&amp;#160;targetMethod;&amp;#160;&amp;#160;&lt;br /&gt;
end;&lt;/p&gt;
&lt;p&gt;Basically, this serializes access to the Synchronize queue. The performance hit is potentially quite large if you have a lot of concurrent SafeSynchronize calls and a busy main thread. FinalBuilder is designed in a way which minimizes this, so it's less of an issue for us.&lt;/p&gt;
&lt;p&gt;I put together a quick test project which demonstrates the issue (at least on Delphi 2007.) You can get it here &lt;a href="/blogimages/WaitForDeadlockExample.zip"&gt;if you want to have a look&lt;/a&gt;. It also contains &lt;a href="/blogimages/SafeSyncThread.pas"&gt;SafeSyncThread.pas&lt;/a&gt; if you want to incorporate the workaround into your own projects. This code comes with no guarantees and no warranty, obviously.&lt;/p&gt;
&lt;p&gt;If anyone has a better (preferably faster) solution to this problem, which doesn't require rewriting the RTL, please let us know. :).&lt;/p&gt;
&lt;p&gt;PS The test project example contains some fairly awful cut-and-paste code reproduction, which - for the record - I normally avoid like the plague. I used it here because the methods are very simple, and I couldn't see an easy way to rearchitect it.&lt;/p&gt;
&lt;p&gt;&lt;a name="commentary"&gt;&lt;/a&gt;(*) FWIW, I actually quite like the way that CheckSynchronize is implemented, using an InterlockedExchange to swap the old queue object with a brand new one. That way you can process the entire old queue at once, without granular locking. Check the source code if you want to see what I mean. It's just a shame about the deadlock. (&lt;a href="#star"&gt;back&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>Delphi: Workaround for TThread Synchronize/WaitFor Deadlock</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/675/Delphi-Workaround-for-TThread-SynchronizeWaitFor-.aspx</link><category>Delphi</category><pubDate>Wed, 23 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;FinalBuilder is written in a combination of Delphi and C#. This is a blog post about a Delphi RTL threading issue that I recently ran into and had to work around.&lt;/p&gt;
&lt;p&gt;We recently had some bug reports of FinalBuilder deadlocking at shutdown under certain circumstances. I could reproduce the problem, but I was baffled for a long time because - according to the call stacks&amp;nbsp; - the program should have been fine.&lt;/p&gt;
&lt;p&gt;The issue I'd run into has been around for years, and is summed up nicely in this Borland QC note: &lt;a href="http://qc.borland.com/wc/qcmain.aspx?d=22267" target="_blank"&gt;&lt;span class="opencolor" id="MainContentUserControl__ctl0_ShortDescriptionLabel"&gt;Synchronize and WaitFor methods of TThread can lead to a DeadLock in logically correct applications&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;The simple summary is: If you ever have a call stack which includes both Synchronize and WaitFor, and the thread you are waiting on also calls Synchronize at some point, you will occasionally get a deadlock.&lt;/p&gt;
&lt;p&gt;Explaining why is kind of tricky, but if you read the QC case you'll get the gist of it. The problematic sequence of events looks like this:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Thread A calls Synchronize(MethodA)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;Thread B calls Synchronize(MethodB)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, inside the context of the Main Thread:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Main thread calls CheckSynchronize() while processing messages&lt;/li&gt;
    &lt;li&gt;CheckSynchronize is implemented to batch-process all waiting calls(&lt;a target="_self" href="#commentary"&gt;*&lt;/a&gt;).&lt;a name="star"&gt;&lt;/a&gt; So it picks up the queue of waiting calls (containing MethodA and MethodB) and loops through them one by one.&lt;/li&gt;
    &lt;li&gt;MethodA executes in the main thread's context. Assume MethodA calls ThreadB.WaitFor&lt;/li&gt;
    &lt;li&gt;WaitFor calls CheckSynchronize to process any waiting calls to Synchronize&lt;/li&gt;
    &lt;li&gt;In theory, this should then process ThreadB's Synchronize(MethodB), allowing Thread B to complete.&lt;/li&gt;
    &lt;li&gt;However, MethodB is already a possession of the first CheckSynchronize call, so it never gets called.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DEADLOCK!&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;The ideal solution is to refactor your program so it will never call CheckSynchronize or WaitFor from inside an already-synchronized method call. For FinalBuilder, this was not a good option - all it takes is one Synchronized method call to call ProcessMessages and you're letting in dozens of potential deadlocks.&lt;/p&gt;
&lt;p&gt;The solution I came up with is to write a "SafeSynchronize" method that only allows one thread at a time to get on the Synchronize method queue. This comes with a performance hit, but prevents the deadlock.&lt;/p&gt;
&lt;p&gt;Here's a new class which implements the SafeSynchronize method:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;TSafeSyncThread&amp;nbsp;=&amp;nbsp;class(TThread)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;private&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;procedure&amp;nbsp;SafeSynchronizeInner;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;protected&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;procedure&amp;nbsp;SafeSynchronize(const&amp;nbsp;AThreadMethod:&amp;nbsp;TThreadMethod);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;end;&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
{&amp;nbsp;TSafeSyncThread&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
&amp;nbsp;&amp;nbsp;FSingleSynchronize&amp;nbsp;:&amp;nbsp;TCriticalSection;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;FSingleSynchronizeTarget&amp;nbsp;:&amp;nbsp;TThreadMethod;&lt;br /&gt;
&lt;br /&gt;
procedure&amp;nbsp;TSafeSyncThread.SafeSynchronize(const&amp;nbsp;AThreadMethod:&amp;nbsp;TThreadMethod);&lt;br /&gt;
begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;FSingleSynchronize.Acquire;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;FSingleSynchronizeTarget&amp;nbsp;:=&amp;nbsp;AThreadMethod;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Synchronize(SafeSynchronizeInner);&lt;br /&gt;
end;&lt;/p&gt;
&lt;p &gt;
procedure&amp;nbsp;TSafeSyncThread.SafeSynchronizeInner;&lt;br /&gt;
var&lt;br /&gt;
&amp;nbsp;&amp;nbsp;targetMethod&amp;nbsp;:&amp;nbsp;TThreadMethod;&lt;br /&gt;
begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;targetMethod&amp;nbsp;:=&amp;nbsp;FSingleSynchronizeTarget;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;FSingleSynchronize.Release;&amp;nbsp;//&amp;nbsp;Now&amp;nbsp;we're&amp;nbsp;inside&amp;nbsp;a&amp;nbsp;CheckSynchronize&amp;nbsp;call,&amp;nbsp;it's&amp;nbsp;safe&amp;nbsp;to&amp;nbsp;let&amp;nbsp;another&amp;nbsp;thread&amp;nbsp;join&amp;nbsp;the&amp;nbsp;queue&lt;br /&gt;
&amp;nbsp;&amp;nbsp;targetMethod;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
end;&lt;/p&gt;
&lt;p&gt;Basically, this serializes access to the Synchronize queue. The performance hit is potentially quite large if you have a lot of concurrent SafeSynchronize calls and a busy main thread. FinalBuilder is designed in a way which minimizes this, so it's less of an issue for us.&lt;/p&gt;
&lt;p&gt;I put together a quick test project which demonstrates the issue (at least on Delphi 2007.) You can get it here &lt;a href="/blogimages/WaitForDeadlockExample.zip"&gt;if you want to have a look&lt;/a&gt;. It also contains &lt;a href="/blogimages/SafeSyncThread.pas"&gt;SafeSyncThread.pas&lt;/a&gt; if you want to incorporate the workaround into your own projects. This code comes with no guarantees and no warranty, obviously.&lt;/p&gt;
&lt;p&gt;If anyone has a better (preferably faster) solution to this problem, which doesn't require rewriting the RTL, please let us know. :).&lt;/p&gt;
&lt;p&gt;PS The test project example contains some fairly awful cut-and-paste code reproduction, which - for the record - I normally avoid like the plague. I used it here because the methods are very simple, and I couldn't see an easy way to rearchitect it.&lt;/p&gt;
&lt;p&gt;&lt;a name="commentary"&gt;&lt;/a&gt;(*) FWIW, I actually quite like the way that CheckSynchronize is implemented, using an InterlockedExchange to swap the old queue object with a brand new one. That way you can process the entire old queue at once, without granular locking. Check the source code if you want to see what I mean. It's just a shame about the deadlock. (&lt;a href="#star"&gt;back&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>FinalBuilder/Automise Keyboard Shortcuts</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/622/FinalBuilderAutomise-Keyboard-Shortcuts.aspx</link><category /><pubDate>Tue, 15 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;Brent was watching me fly through some FinalBuilder operations the other day and he suggested I write a blog post about the best keyboard shortcuts to use.&lt;/p&gt;
&lt;p&gt;Even as a power user/developer, you can sometimes use a tool every day and not know the best keyboard shortcuts for it. I only learned many of the keyboard shortcuts for Visual Studio after I attended a special session at TechEd last year.&lt;/p&gt;
&lt;p&gt;I don't want to drown you in information here, so I'm going to list four shortcuts that are essential to know,&lt;strong&gt; &lt;/strong&gt;and another four that are very useful.&lt;/p&gt;
&lt;h2&gt;Essential&lt;/h2&gt;
&lt;p&gt;If you own a keyboard and use FinalBuilder or Automise, the following keyboard shortcuts are essential. They will improve your productivity ten-fold!&lt;/p&gt;
&lt;p&gt;
&lt;table width="767" height="173" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-&lt;/font&gt;&lt;font face="Courier New"&gt;I&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Main IDE Window&lt;/td&gt;
            &lt;td&gt;
            &lt;p&gt;Focus the Actions filter field to search for a new action.&lt;br /&gt;
            If the filter field is already focused, this keystroke hides the Actions sidebar instead.&lt;sup&gt;*&lt;/sup&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-Right&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Indent the selected action(s) as new children of the action above them.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-Left&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Outdent the select action(s) relative to their parent action&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-Up/Down&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Move selected action(s) up and down&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;In my opinion, using the Ctrl-Arrow keys to rearrange actions is essential (drag and drop is just too fiddly!)&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;*&lt;/sup&gt; The "hide sidebar if currently focused" feature is new in FB 6.&lt;/p&gt;
&lt;h2&gt;Very Useful&lt;/h2&gt;
&lt;p&gt;The following key combinations are very useful when you are typing in a text field while editing an action:&lt;/p&gt;
&lt;p&gt;
&lt;table width="767" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;F3&lt;br /&gt;
            &lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Define a new variable on-the-fly.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;F2&amp;#160;&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Pop up an advanced edit dialog with lists of variables, PropertySets, etc.&amp;#160;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;F12&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Pop up a list of &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=251"&gt;suggested variable replacements&lt;/a&gt;.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-Space&amp;#160;&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Automatic completion for variable and PropertySet names.&amp;#160;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;For FB 6, we also did a lot of work on the Tabbing behaviour in the IDE. You should be able to use Tab to navigate the main IDE elements very easily.&lt;/p&gt;</description></item><item><title>FinalBuilder/Automise Keyboard Shortcuts</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/648/FinalBuilderAutomise-Keyboard-Shortcuts.aspx</link><category /><pubDate>Tue, 15 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;Brent was watching me fly through some FinalBuilder operations the other day and he suggested I write a blog post about the best keyboard shortcuts to use.&lt;/p&gt;
&lt;p&gt;Even as a power user/developer, you can sometimes use a tool every day and not know the best keyboard shortcuts for it. I only learned many of the keyboard shortcuts for Visual Studio after I attended a special session at TechEd last year.&lt;/p&gt;
&lt;p&gt;I don't want to drown you in information here, so I'm going to list four shortcuts that are essential to know,&lt;strong&gt; &lt;/strong&gt;and another four that are very useful.&lt;/p&gt;
&lt;h2&gt;Essential&lt;/h2&gt;
&lt;p&gt;If you own a keyboard and use FinalBuilder or Automise, the following keyboard shortcuts are essential. They will improve your productivity ten-fold!&lt;/p&gt;
&lt;p&gt;
&lt;table width="767" height="173" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-&lt;/font&gt;&lt;font face="Courier New"&gt;I&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Main IDE Window&lt;/td&gt;
            &lt;td&gt;
            &lt;p&gt;Focus the Actions filter field to search for a new action.&lt;br /&gt;
            If the filter field is already focused, this keystroke hides the Actions sidebar instead.&lt;sup&gt;*&lt;/sup&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-Right&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Indent the selected action(s) as new children of the action above them.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-Left&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Outdent the select action(s) relative to their parent action&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-Up/Down&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Move selected action(s) up and down&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;In my opinion, using the Ctrl-Arrow keys to rearrange actions is essential (drag and drop is just too fiddly!)&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;*&lt;/sup&gt; The "hide sidebar if currently focused" feature is new in FB 6.&lt;/p&gt;
&lt;h2&gt;Very Useful&lt;/h2&gt;
&lt;p&gt;The following key combinations are very useful when you are typing in a text field while editing an action:&lt;/p&gt;
&lt;p&gt;
&lt;table width="767" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;F3&lt;br /&gt;
            &lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Define a new variable on-the-fly.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;F2&amp;#160;&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Pop up an advanced edit dialog with lists of variables, PropertySets, etc.&amp;#160;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;F12&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Pop up a list of &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=251"&gt;suggested variable replacements&lt;/a&gt;.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;font face="Courier New"&gt;Ctrl-Space&amp;#160;&lt;/font&gt;&lt;/td&gt;
            &lt;td&gt;Automatic completion for variable and PropertySet names.&amp;#160;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;For FB 6, we also did a lot of work on the Tabbing behaviour in the IDE. You should be able to use Tab to navigate the main IDE elements very easily.&lt;/p&gt;</description></item><item><title>FinalBuilder/Automise Keyboard Shortcuts</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/674/FinalBuilderAutomise-Keyboard-Shortcuts.aspx</link><category>Automise,FinalBuilder</category><pubDate>Tue, 15 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;Brent was watching me fly through some FinalBuilder operations the other day and he suggested I write a blog post about the best keyboard shortcuts to use.&lt;/p&gt;
&lt;p&gt;Even as a power user/developer, you can sometimes use a tool every day and not know the best keyboard shortcuts for it. I only learned many of the keyboard shortcuts for Visual Studio after I attended a special session at TechEd last year.&lt;/p&gt;
&lt;p&gt;I don't want to drown you in information here, so I'm going to list four shortcuts that are essential to know,&lt;strong&gt; &lt;/strong&gt;and another four that are very useful.&lt;/p&gt;
&lt;h2&gt;Essential&lt;/h2&gt;
&lt;p&gt;If you own a keyboard and use FinalBuilder or Automise, the following keyboard shortcuts are essential. They will improve your productivity ten-fold!&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;table width="767" height="173" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-family: 'courier new';"&gt;Ctrl-&lt;/span&gt;&lt;span style="font-family: 'courier new';"&gt;I&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;Main IDE Window&lt;/td&gt;
            &lt;td&gt;
            &lt;p&gt;Focus the Actions filter field to search for a new action.&lt;br /&gt;
            If the filter field is already focused, this keystroke hides the Actions sidebar instead.&lt;sup&gt;*&lt;/sup&gt;&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-family: 'courier new';"&gt;Ctrl-Right&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Indent the selected action(s) as new children of the action above them.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-family: 'courier new';"&gt;Ctrl-Left&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Outdent the select action(s) relative to their parent action&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-family: 'courier new';"&gt;Ctrl-Up/Down&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;Selected action(s)&lt;/td&gt;
            &lt;td&gt;Move selected action(s) up and down&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In my opinion, using the Ctrl-Arrow keys to rearrange actions is essential (drag and drop is just too fiddly!)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;*&lt;/sup&gt; The "hide sidebar if currently focused" feature is new in FB 6.&lt;/p&gt;
&lt;h2&gt;Very Useful&lt;/h2&gt;
&lt;p&gt;The following key combinations are very useful when you are typing in a text field while editing an action:&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;table width="767" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-family: 'courier new';"&gt;F3&lt;br /&gt;
            &lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;Define a new variable on-the-fly.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-family: 'courier new';"&gt;F2&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;Pop up an advanced edit dialog with lists of variables, PropertySets, etc.&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-family: 'courier new';"&gt;F12&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;Pop up a list of &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=251"&gt;suggested variable replacements&lt;/a&gt;.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-family: 'courier new';"&gt;Ctrl-Space&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;Automatic completion for variable and PropertySet names.&amp;nbsp;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For FB 6, we also did a lot of work on the Tabbing behaviour in the IDE. You should be able to use Tab to navigate the main IDE elements very easily.&lt;/p&gt;</description></item><item><title>Log output formatting in FinalBuilder 6</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/408/Log-output-formatting-in-FinalBuilder-6.aspx</link><category>FinalBuilder</category><pubDate>Thu, 03 Apr 2008 14:00:00 GMT</pubDate><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In FinalBuilder 6, we have done a lot of work to improve the log output formatting. In particular, we wanted to make it easier to find errors, warnings in compiler output.&lt;/p&gt;
&lt;h2&gt;Output Grouping&lt;/h2&gt;
&lt;p&gt;Most compilers are quite verbose in their output, for example the Visual Studio action outputs reams text when using msbuild (the default for VS2005 and later). In the FinalBuilder 6 logging architecture, we add the ability to create Output groups. This allows us to structure the output in a manner that makes it much more readable, and they (as the name implies) allow us to group different parts of the action output. In the Visual Studio and MSBuild actions for example, we group the output but Project and Target :&lt;/p&gt;
&lt;p&gt;&lt;img width="856" height="318" alt="Visual Studio Action output" src="/Portals/0/ArticleImages/VSOutput.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Output Status Color Tagging&lt;/h2&gt;
&lt;p&gt;The output of most (if not all) actions in FinalBuilder 6 had been enhanced to use the new color tagging feature. When Error messages are generated, they are sent to the log with an error status, and the log displays the message in red. The screenshot below shows the message types and colors.&lt;/p&gt;
&lt;p&gt;&lt;img width="616" height="151" alt="Output color tagging" src="/Portals/0/ArticleImages/OuputColorTags.png" /&gt;&lt;/p&gt;
&lt;p&gt;You can also use this tagging when using action script events and in custom actions. This is how it's done from a script event (in JavaScript) :&lt;/p&gt;
&lt;p&gt;Action.SendLogMessage("This is Information message (the default).",stInformation)&lt;br /&gt;
Action.SendLogMessage("This is Success message.",stSuccess)&lt;br /&gt;
Action.SendLogMessage("This is a Warning message.",stWarning)&lt;br /&gt;
Action.SendLogMessage("This is an Error message.",stError)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>FinalBuilder 6 - Output Monitors</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/621/FinalBuilder-6-Output-Monitors.aspx</link><category /><pubDate>Thu, 03 Apr 2008 14:00:00 GMT</pubDate><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&amp;#160;Output Monitors give you a quick way to watch action output and change the behaviour of the action depending on what you see. This lets you extend built-in actions in powerful ways.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Sample Project&lt;/h2&gt;
&lt;p&gt;Unlike my normal "pie in the sky" examples, this one is based on a real problem. This morning we had a customer in our chatroom who had a problem deploying to QA:&lt;/p&gt;
&lt;blockquote&gt;when a user's connection to the database breaks, or if a user is accessing some of the files in QA and connected to a different database (different to the one we are checking against) the FinalBuilder project will try and deploy the files and get a sharing violation which causes the build to fail&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: the customer needed a way to tell if one or more files were open on a remote machine.&lt;/p&gt;
&lt;h2&gt;SysInternals Tools Are Awesome&lt;/h2&gt;
&lt;p&gt;SysInternals make PsTools and a raft of other excellent Windows "power administrator tools". If you haven't checked them out, &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals"&gt;you should&lt;/a&gt;. It's no wonder that Microsoft bought the company.&lt;/p&gt;
&lt;p&gt;For my solution to the above problem, I made use of two great SysInternals tools:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx"&gt;PsExec&lt;/a&gt; (part of PsTools) can deploy and run an executable on a remote machine. There's a PsExec action built into FinalBuilder, although you still need to download and install PsTools.&lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx"&gt;Handle&lt;/a&gt; is a great little command line tool that dumps (among other things) all of the open files on a system. An excellent debugging aid.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;The Plan&lt;/h2&gt;
&lt;p&gt;Use PsExec to deploy and execute handle.exe on the remote computer, and use FinalBuilder to scan the output for the file(s) we need to check for.&lt;/p&gt;
&lt;h2&gt;The Project&lt;/h2&gt;
&lt;p&gt;Here's the complete project, including my verbose comments. Because of the powerful Output Monitor (and the awesome Sysinternals tools), almost everything happens inside the PsExec action:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Check Remote Open File project" src="/blogimages/OutputMonitors4.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Output Monitor&lt;/h2&gt;
&lt;p&gt;To check for our file(s), we need to configure an Output Monitor on the PsExec action. We have two variables:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;fileName - The filespec or filename that we want to check for. This variable is set by the user.&lt;/li&gt;
    &lt;li&gt;fileInUse - The details of the file that's in use, if there is one. This variable is set when the PsExec action runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every action in FinalBuilder 6 has an option on the Runtime tab called "Monitor Action Output":&lt;/p&gt;
&lt;p&gt;&lt;img alt="Runtime Property Tab" align="middle" src="/blogimages/OutputMonitors1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;Click the button to edit the Output Monitors for that action:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Output Monitors Dialog with one monitor" src="/blogimages/OutputMonitors2.png" /&gt;&lt;/p&gt;
&lt;p&gt;For our monitor (shown above), we're checking for any content which contains %fileName% and saving the first match to the variable fileInUse.&lt;/p&gt;
&lt;p&gt;There are lots of other options for output monitor behaviour. Click on the dropdown for a full list:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Full list of behaviours" src="/blogimages/OutputMonitors3.png" /&gt;&lt;/p&gt;
&lt;p&gt;... For example, if we wanted a list of all matching lines, we could use the "Save All Matches to Variable" behaviour.&lt;/p&gt;
&lt;p&gt;As configured, the output monitor supports wildcard matching with * and ?. If we wanted it to be really powerful, we could change it to use a regular expression - grep-in-a-box!&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Project File&lt;/h2&gt;
&lt;p&gt;You can download the FinalBuilder 6 project file &lt;a href="/blogimages/CheckRemoteOpenFile.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Alternatives&lt;/h2&gt;
&lt;p&gt;Sometimes you need more powerful output processing, and Output Monitors are not up to the task. You can always use the OnStatusMessage script event to run some script every time the action outputs data. I actually did a &lt;a href="/blogs.aspx?EntryID=254"&gt;blog post about this&lt;/a&gt; a couple of weeks ago.&lt;/p&gt;</description></item><item><title>FinalBuilder 6 - Output Monitors</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/647/FinalBuilder-6-Output-Monitors.aspx</link><category /><pubDate>Thu, 03 Apr 2008 14:00:00 GMT</pubDate><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&amp;#160;Output Monitors give you a quick way to watch action output and change the behaviour of the action depending on what you see. This lets you extend built-in actions in powerful ways.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Sample Project&lt;/h2&gt;
&lt;p&gt;Unlike my normal "pie in the sky" examples, this one is based on a real problem. This morning we had a customer in our chatroom who had a problem deploying to QA:&lt;/p&gt;
&lt;blockquote&gt;when a user's connection to the database breaks, or if a user is accessing some of the files in QA and connected to a different database (different to the one we are checking against) the FinalBuilder project will try and deploy the files and get a sharing violation which causes the build to fail&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: the customer needed a way to tell if one or more files were open on a remote machine.&lt;/p&gt;
&lt;h2&gt;SysInternals Tools Are Awesome&lt;/h2&gt;
&lt;p&gt;SysInternals make PsTools and a raft of other excellent Windows "power administrator tools". If you haven't checked them out, &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals"&gt;you should&lt;/a&gt;. It's no wonder that Microsoft bought the company.&lt;/p&gt;
&lt;p&gt;For my solution to the above problem, I made use of two great SysInternals tools:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx"&gt;PsExec&lt;/a&gt; (part of PsTools) can deploy and run an executable on a remote machine. There's a PsExec action built into FinalBuilder, although you still need to download and install PsTools.&lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx"&gt;Handle&lt;/a&gt; is a great little command line tool that dumps (among other things) all of the open files on a system. An excellent debugging aid.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;The Plan&lt;/h2&gt;
&lt;p&gt;Use PsExec to deploy and execute handle.exe on the remote computer, and use FinalBuilder to scan the output for the file(s) we need to check for.&lt;/p&gt;
&lt;h2&gt;The Project&lt;/h2&gt;
&lt;p&gt;Here's the complete project, including my verbose comments. Because of the powerful Output Monitor (and the awesome Sysinternals tools), almost everything happens inside the PsExec action:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Check Remote Open File project" src="/blogimages/OutputMonitors4.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Output Monitor&lt;/h2&gt;
&lt;p&gt;To check for our file(s), we need to configure an Output Monitor on the PsExec action. We have two variables:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;fileName - The filespec or filename that we want to check for. This variable is set by the user.&lt;/li&gt;
    &lt;li&gt;fileInUse - The details of the file that's in use, if there is one. This variable is set when the PsExec action runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every action in FinalBuilder 6 has an option on the Runtime tab called "Monitor Action Output":&lt;/p&gt;
&lt;p&gt;&lt;img alt="Runtime Property Tab" align="middle" src="/blogimages/OutputMonitors1.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;Click the button to edit the Output Monitors for that action:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Output Monitors Dialog with one monitor" src="/blogimages/OutputMonitors2.png" /&gt;&lt;/p&gt;
&lt;p&gt;For our monitor (shown above), we're checking for any content which contains %fileName% and saving the first match to the variable fileInUse.&lt;/p&gt;
&lt;p&gt;There are lots of other options for output monitor behaviour. Click on the dropdown for a full list:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Full list of behaviours" src="/blogimages/OutputMonitors3.png" /&gt;&lt;/p&gt;
&lt;p&gt;... For example, if we wanted a list of all matching lines, we could use the "Save All Matches to Variable" behaviour.&lt;/p&gt;
&lt;p&gt;As configured, the output monitor supports wildcard matching with * and ?. If we wanted it to be really powerful, we could change it to use a regular expression - grep-in-a-box!&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Project File&lt;/h2&gt;
&lt;p&gt;You can download the FinalBuilder 6 project file &lt;a href="/blogimages/CheckRemoteOpenFile.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Alternatives&lt;/h2&gt;
&lt;p&gt;Sometimes you need more powerful output processing, and Output Monitors are not up to the task. You can always use the OnStatusMessage script event to run some script every time the action outputs data. I actually did a &lt;a href="/blogs.aspx?EntryID=254"&gt;blog post about this&lt;/a&gt; a couple of weeks ago.&lt;/p&gt;</description></item><item><title>FinalBuilder 6 - Output Monitors</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/673/FinalBuilder-6-Output-Monitors.aspx</link><category>FinalBuilder</category><pubDate>Thu, 03 Apr 2008 14:00:00 GMT</pubDate><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;Output Monitors give you a quick way to watch action output and change the behaviour of the action depending on what you see. This lets you extend built-in actions in powerful ways.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Sample Project&lt;/h2&gt;
&lt;p&gt;Unlike my normal "pie in the sky" examples, this one is based on a real problem. This morning we had a customer in our chatroom who had a problem deploying to QA:&lt;/p&gt;
&lt;blockquote&gt;when a user's connection to the database breaks, or if a user is accessing some of the files in QA and connected to a different database (different to the one we are checking against) the FinalBuilder project will try and deploy the files and get a sharing violation which causes the build to fail&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: the customer needed a way to tell if one or more files were open on a remote machine.&lt;/p&gt;
&lt;h2&gt;SysInternals Tools Are Awesome&lt;/h2&gt;
&lt;p&gt;SysInternals make PsTools and a raft of other excellent Windows "power administrator tools". If you haven't checked them out, &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals"&gt;you should&lt;/a&gt;. It's no wonder that Microsoft bought the company.&lt;/p&gt;
&lt;p&gt;For my solution to the above problem, I made use of two great SysInternals tools:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx"&gt;PsExec&lt;/a&gt; (part of PsTools) can deploy and run an executable on a remote machine. There's a PsExec action built into FinalBuilder, although you still need to download and install PsTools.&lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx"&gt;Handle&lt;/a&gt; is a great little command line tool that dumps (among other things) all of the open files on a system. An excellent debugging aid.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;The Plan&lt;/h2&gt;
&lt;p&gt;Use PsExec to deploy and execute handle.exe on the remote computer, and use FinalBuilder to scan the output for the file(s) we need to check for.&lt;/p&gt;
&lt;h2&gt;The Project&lt;/h2&gt;
&lt;p&gt;Here's the complete project, including my verbose comments. Because of the powerful Output Monitor (and the awesome Sysinternals tools), almost everything happens inside the PsExec action:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Check Remote Open File project" src="/blogimages/OutputMonitors4.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Output Monitor&lt;/h2&gt;
&lt;p&gt;To check for our file(s), we need to configure an Output Monitor on the PsExec action. We have two variables:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;fileName - The filespec or filename that we want to check for. This variable is set by the user.&lt;/li&gt;
    &lt;li&gt;fileInUse - The details of the file that's in use, if there is one. This variable is set when the PsExec action runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every action in FinalBuilder 6 has an option on the Runtime tab called "Monitor Action Output":&lt;/p&gt;
&lt;p&gt;&lt;img alt="Runtime Property Tab" align="middle" src="/blogimages/OutputMonitors1.png" style="vertical-align: middle;" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Click the button to edit the Output Monitors for that action:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Output Monitors Dialog with one monitor" src="/blogimages/OutputMonitors2.png" /&gt;&lt;/p&gt;
&lt;p&gt;For our monitor (shown above), we're checking for any content which contains %fileName% and saving the first match to the variable fileInUse.&lt;/p&gt;
&lt;p&gt;There are lots of other options for output monitor behaviour. Click on the dropdown for a full list:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Full list of behaviours" src="/blogimages/OutputMonitors3.png" /&gt;&lt;/p&gt;
&lt;p&gt;... For example, if we wanted a list of all matching lines, we could use the "Save All Matches to Variable" behaviour.&lt;/p&gt;
&lt;p&gt;As configured, the output monitor supports wildcard matching with * and ?. If we wanted it to be really powerful, we could change it to use a regular expression - grep-in-a-box!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Project File&lt;/h2&gt;
&lt;p&gt;You can download the FinalBuilder 6 project file &lt;a href="/blogimages/CheckRemoteOpenFile.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Alternatives&lt;/h2&gt;
&lt;p&gt;Sometimes you need more powerful output processing, and Output Monitors are not up to the task. You can always use the OnStatusMessage script event to run some script every time the action outputs data. I actually did a &lt;a href="/blogs.aspx?EntryID=254"&gt;blog post about this&lt;/a&gt; a couple of weeks ago.&lt;/p&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part Three, Custom Actions)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/620/FinalBuilder-6-PowerShell-Part-Three-Custom-Acti.aspx</link><category /><pubDate>Wed, 02 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;This is the last in a series of blog posts about PowerShell support in FinalBuilder 6.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=253"&gt;Part One&lt;/a&gt; showed how to use one-liners to create powerful PowerShell execute conditions.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=254"&gt;Part Two&lt;/a&gt; showed how to use PowerShell script events to parse output and change the behaviour of an action.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;For this last post, I'm going to walk through creating a custom action which scans the Event Log and reports the frequency of messages from different sources.&lt;/p&gt;
&lt;h2&gt;The Script&lt;/h2&gt;
&lt;p&gt;Here are the parts of the PowerShell script that I'm going to use to implement the new action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) A custom function&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WMI uses dmtf date formatting. This is a PowerShell function to create a dmtf datetime string representing (Now - $x hours) ago.&lt;/p&gt;
&lt;blockquote&gt; function dmtfWithin([int] $hours)&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;[System.Management.ManagementDateTimeconverter]::ToDmtfDateTime `&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;([DateTime]::Now.AddHours(- $hours))&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) Read Action Properties&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Action properties are loaded using the same syntax as other custom actions. If you've used ActionStudio before then this will look familiar. Coming in-the-pipeline are some CmdLets to make this look more like PowerShell and less like .NET.&lt;/p&gt;
&lt;blockquote&gt; # Set up parameters&lt;br /&gt;
$computerName = $Context.ExpandExpression($Context.Properties.PropertyAsString("ComputerName"), $True)&lt;br /&gt;
$hours = $Context.Properties.PropertyAsString("Hours")&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3) Process Event Log&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is where the dirty work happens - build a WQL filter string, get the WMI objects for the event log entries, and build a hashtable mapping event source names to their frequencies. The particularly neat line is the last one with the % sign - that's shorthand for "for each".&lt;/p&gt;
&lt;blockquote&gt; # Read results&lt;br /&gt;
$filter = "TimeWritten &amp;gt; '" + (dmtfWithin($hours)) + "'"&lt;br /&gt;
$results = Get-WmiObject -computer $computerName -class Win32_NTLogEvent -filter $filter&lt;br /&gt;
$freqTable = @{}&lt;br /&gt;
$results | % { $freqTable[$_.SourceName] += 1 }&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4) Log the Results&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Log the contents of our hash table, sorted and formatted into a table:&lt;/p&gt;
&lt;blockquote&gt;# Log Results&lt;br /&gt;
$freqTable.GetEnumerator() | sort -descending Value | ft Value, Name -autosize -wrap&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5) Set Result to True&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
The Result parameter determines whether or not to fail the action.&lt;/p&gt;
&lt;blockquote&gt;$Result = $True &lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Creating the custom action&lt;/h2&gt;
&lt;p&gt;I recorded a screencast showing how to create the custom action in ActionStudio. &lt;a target="_blank" href="/blogimages/PowerShell/Writing.html"&gt;Click here&lt;/a&gt; to view in a new window.&lt;/p&gt;
&lt;p&gt;&lt;object width="911" height="649" codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=7,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;
&lt;param value="/blogimages/PowerShell/Writing.swf" name="movie" /&gt;
&lt;param value="true" name="play" /&gt;
&lt;param value="false" name="loop" /&gt;
&lt;param value="transparent" name="wmode" /&gt;
&lt;param value="low" name="quality" /&gt; &lt;embed width="911" height="649" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent" loop="false" quality="low" src="/blogimages/PowerShell/Writing.swf"&gt;&lt;/embed&gt;  &lt;/object&gt; &lt;SCRIPT src='/blogimages/PowerShell/Writing.js'&gt;&lt;/script&gt;&lt;/p&gt;
&lt;h2&gt;Running the custom action&lt;/h2&gt;
&lt;p&gt;&lt;a target="_blank" href="/blogimages/PowerShell/Running.html"&gt;Click here&lt;/a&gt; to view this screencast in a new window.&lt;/p&gt;
&lt;p&gt;&lt;object width="834" height="628" codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=7,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;
&lt;param value="/blogimages/PowerShell/Running.swf" name="movie" /&gt;
&lt;param value="true" name="play" /&gt;
&lt;param value="false" name="loop" /&gt;
&lt;param value="transparent" name="wmode" /&gt;
&lt;param value="low" name="quality" /&gt; &lt;embed width="834" height="628" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent" loop="false" quality="low" src="/blogimages/PowerShell/Running.swf"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;/p&gt;
&lt;h2&gt;Download&lt;/h2&gt;
&lt;p&gt;&lt;a href="/blogimages/PowerShell/PowerShellCustomAction.zip"&gt;Click here to download&lt;/a&gt; a zip file with the custom action package. The unzipped .fbap file needs to be saved in the ActionDefs directory inside the FinalBuilder 6 program directory.&lt;/p&gt;
&lt;h2&gt;More Resources&lt;/h2&gt;
&lt;p&gt;The example action package "FBScriptExamples.fbap" comes with FinalBuilder, and contains some more sample PowerShell actions which can be loaded in ActionStudio.&lt;/p&gt;
&lt;p&gt;The ActionStudioManual.pdf file (located in the FinalBuilder Program directory) contains a reference section with built-in custom action types and methods, and also some more information on creating PowerShell actions.&lt;/p&gt;
&lt;h2&gt;Some Notes&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;This is a pretty simple example, but (like the others) it is fairly simple to extend it to cover lots of other Windows-related tasks.&lt;/li&gt;
    &lt;li&gt;FYI, there is a dedicated Get-EventLog command in PowerShell. In this instance, I chose to use WMI instead because WMI can read from remote machines, and can read across all event logs. If you use the dedicated command, you need to choose a single event log to read from.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part Three, Custom Actions)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/646/FinalBuilder-6-PowerShell-Part-Three-Custom-Acti.aspx</link><category /><pubDate>Wed, 02 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;This is the last in a series of blog posts about PowerShell support in FinalBuilder 6.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=253"&gt;Part One&lt;/a&gt; showed how to use one-liners to create powerful PowerShell execute conditions.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=254"&gt;Part Two&lt;/a&gt; showed how to use PowerShell script events to parse output and change the behaviour of an action.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;For this last post, I'm going to walk through creating a custom action which scans the Event Log and reports the frequency of messages from different sources.&lt;/p&gt;
&lt;h2&gt;The Script&lt;/h2&gt;
&lt;p&gt;Here are the parts of the PowerShell script that I'm going to use to implement the new action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) A custom function&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WMI uses dmtf date formatting. This is a PowerShell function to create a dmtf datetime string representing (Now - $x hours) ago.&lt;/p&gt;
&lt;blockquote&gt; function dmtfWithin([int] $hours)&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;[System.Management.ManagementDateTimeconverter]::ToDmtfDateTime `&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;([DateTime]::Now.AddHours(- $hours))&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) Read Action Properties&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Action properties are loaded using the same syntax as other custom actions. If you've used ActionStudio before then this will look familiar. Coming in-the-pipeline are some CmdLets to make this look more like PowerShell and less like .NET.&lt;/p&gt;
&lt;blockquote&gt; # Set up parameters&lt;br /&gt;
$computerName = $Context.ExpandExpression($Context.Properties.PropertyAsString("ComputerName"), $True)&lt;br /&gt;
$hours = $Context.Properties.PropertyAsString("Hours")&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3) Process Event Log&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is where the dirty work happens - build a WQL filter string, get the WMI objects for the event log entries, and build a hashtable mapping event source names to their frequencies. The particularly neat line is the last one with the % sign - that's shorthand for "for each".&lt;/p&gt;
&lt;blockquote&gt; # Read results&lt;br /&gt;
$filter = "TimeWritten &amp;gt; '" + (dmtfWithin($hours)) + "'"&lt;br /&gt;
$results = Get-WmiObject -computer $computerName -class Win32_NTLogEvent -filter $filter&lt;br /&gt;
$freqTable = @{}&lt;br /&gt;
$results | % { $freqTable[$_.SourceName] += 1 }&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4) Log the Results&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Log the contents of our hash table, sorted and formatted into a table:&lt;/p&gt;
&lt;blockquote&gt;# Log Results&lt;br /&gt;
$freqTable.GetEnumerator() | sort -descending Value | ft Value, Name -autosize -wrap&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5) Set Result to True&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
The Result parameter determines whether or not to fail the action.&lt;/p&gt;
&lt;blockquote&gt;$Result = $True &lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Creating the custom action&lt;/h2&gt;
&lt;p&gt;I recorded a screencast showing how to create the custom action in ActionStudio. &lt;a target="_blank" href="/blogimages/PowerShell/Writing.html"&gt;Click here&lt;/a&gt; to view in a new window.&lt;/p&gt;
&lt;p&gt;&lt;object width="911" height="649" codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=7,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;
&lt;param value="/blogimages/PowerShell/Writing.swf" name="movie" /&gt;
&lt;param value="true" name="play" /&gt;
&lt;param value="false" name="loop" /&gt;
&lt;param value="transparent" name="wmode" /&gt;
&lt;param value="low" name="quality" /&gt; &lt;embed width="911" height="649" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent" loop="false" quality="low" src="/blogimages/PowerShell/Writing.swf"&gt;&lt;/embed&gt;  &lt;/object&gt; &lt;SCRIPT src='/blogimages/PowerShell/Writing.js'&gt;&lt;/script&gt;&lt;/p&gt;
&lt;h2&gt;Running the custom action&lt;/h2&gt;
&lt;p&gt;&lt;a target="_blank" href="/blogimages/PowerShell/Running.html"&gt;Click here&lt;/a&gt; to view this screencast in a new window.&lt;/p&gt;
&lt;p&gt;&lt;object width="834" height="628" codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=7,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;
&lt;param value="/blogimages/PowerShell/Running.swf" name="movie" /&gt;
&lt;param value="true" name="play" /&gt;
&lt;param value="false" name="loop" /&gt;
&lt;param value="transparent" name="wmode" /&gt;
&lt;param value="low" name="quality" /&gt; &lt;embed width="834" height="628" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent" loop="false" quality="low" src="/blogimages/PowerShell/Running.swf"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;/p&gt;
&lt;h2&gt;Download&lt;/h2&gt;
&lt;p&gt;&lt;a href="/blogimages/PowerShell/PowerShellCustomAction.zip"&gt;Click here to download&lt;/a&gt; a zip file with the custom action package. The unzipped .fbap file needs to be saved in the ActionDefs directory inside the FinalBuilder 6 program directory.&lt;/p&gt;
&lt;h2&gt;More Resources&lt;/h2&gt;
&lt;p&gt;The example action package "FBScriptExamples.fbap" comes with FinalBuilder, and contains some more sample PowerShell actions which can be loaded in ActionStudio.&lt;/p&gt;
&lt;p&gt;The ActionStudioManual.pdf file (located in the FinalBuilder Program directory) contains a reference section with built-in custom action types and methods, and also some more information on creating PowerShell actions.&lt;/p&gt;
&lt;h2&gt;Some Notes&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;This is a pretty simple example, but (like the others) it is fairly simple to extend it to cover lots of other Windows-related tasks.&lt;/li&gt;
    &lt;li&gt;FYI, there is a dedicated Get-EventLog command in PowerShell. In this instance, I chose to use WMI instead because WMI can read from remote machines, and can read across all event logs. If you use the dedicated command, you need to choose a single event log to read from.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part Three, Custom Actions)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/672/FinalBuilder-6-PowerShell-Part-Three-Custom-Acti.aspx</link><category>FinalBuilder</category><pubDate>Wed, 02 Apr 2008 14:00:00 GMT</pubDate><description>&lt;p&gt;This is the last in a series of blog posts about PowerShell support in FinalBuilder 6.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=253"&gt;Part One&lt;/a&gt; showed how to use one-liners to create powerful PowerShell execute conditions.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=254"&gt;Part Two&lt;/a&gt; showed how to use PowerShell script events to parse output and change the behaviour of an action.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For this last post, I'm going to walk through creating a custom action which scans the Event Log and reports the frequency of messages from different sources.&lt;/p&gt;
&lt;h2&gt;The Script&lt;/h2&gt;
&lt;p&gt;Here are the parts of the PowerShell script that I'm going to use to implement the new action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) A custom function&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;WMI uses dmtf date formatting. This is a PowerShell function to create a dmtf datetime string representing (Now - $x hours) ago.&lt;/p&gt;
&lt;blockquote&gt; function dmtfWithin([int] $hours)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;[System.Management.ManagementDateTimeconverter]::ToDmtfDateTime `&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;([DateTime]::Now.AddHours(- $hours))&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) Read Action Properties&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Action properties are loaded using the same syntax as other custom actions. If you've used ActionStudio before then this will look familiar. Coming in-the-pipeline are some CmdLets to make this look more like PowerShell and less like .NET.&lt;/p&gt;
&lt;blockquote&gt; # Set up parameters&lt;br /&gt;
$computerName = $Context.ExpandExpression($Context.Properties.PropertyAsString("ComputerName"), $True)&lt;br /&gt;
$hours = $Context.Properties.PropertyAsString("Hours")&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3) Process Event Log&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is where the dirty work happens - build a WQL filter string, get the WMI objects for the event log entries, and build a hashtable mapping event source names to their frequencies. The particularly neat line is the last one with the % sign - that's shorthand for "for each".&lt;/p&gt;
&lt;blockquote&gt; # Read results&lt;br /&gt;
$filter = "TimeWritten &amp;gt; '" + (dmtfWithin($hours)) + "'"&lt;br /&gt;
$results = Get-WmiObject -computer $computerName -class Win32_NTLogEvent -filter $filter&lt;br /&gt;
$freqTable = @{}&lt;br /&gt;
$results | % { $freqTable[$_.SourceName] += 1 }&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4) Log the Results&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Log the contents of our hash table, sorted and formatted into a table:&lt;/p&gt;
&lt;blockquote&gt;# Log Results&lt;br /&gt;
$freqTable.GetEnumerator() | sort -descending Value | ft Value, Name -autosize -wrap&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5) Set Result to True&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
The Result parameter determines whether or not to fail the action.&lt;/p&gt;
&lt;blockquote&gt;$Result = $True &lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Creating the custom action&lt;/h2&gt;
&lt;p&gt;I recorded a screencast showing how to create the custom action in ActionStudio. &lt;a target="_blank" href="/blogimages/PowerShell/Writing.html"&gt;Click here&lt;/a&gt; to view in a new window.&lt;/p&gt;
&lt;p&gt;&lt;object width="911" height="649" codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=7,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;
&lt;param value="/blogimages/PowerShell/Writing.swf" name="movie"&gt;
&lt;param value="true" name="play"&gt;
&lt;param value="false" name="loop"&gt;
&lt;param value="transparent" name="wmode"&gt;
&lt;param value="low" name="quality"&gt; &lt;embed width="911" height="649" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent" loop="false" quality="low" src="/blogimages/PowerShell/Writing.swf"&gt;  &lt;/object&gt; &lt;/p&gt;
&lt;h2&gt;Running the custom action&lt;/h2&gt;
&lt;p&gt;&lt;a target="_blank" href="/blogimages/PowerShell/Running.html"&gt;Click here&lt;/a&gt; to view this screencast in a new window.&lt;/p&gt;
&lt;p&gt;&lt;object width="834" height="628" codebase="http://active.macromedia.com/flash5/cabs/swflash.cab#version=7,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;
&lt;param value="/blogimages/PowerShell/Running.swf" name="movie"&gt;
&lt;param value="true" name="play"&gt;
&lt;param value="false" name="loop"&gt;
&lt;param value="transparent" name="wmode"&gt;
&lt;param value="low" name="quality"&gt; &lt;embed width="834" height="628" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" wmode="transparent" loop="false" quality="low" src="/blogimages/PowerShell/Running.swf"&gt;  &lt;/object&gt;&lt;/p&gt;
&lt;h2&gt;Download&lt;/h2&gt;
&lt;p&gt;&lt;a href="/blogimages/PowerShell/PowerShellCustomAction.zip"&gt;Click here to download&lt;/a&gt; a zip file with the custom action package. The unzipped .fbap file needs to be saved in the ActionDefs directory inside the FinalBuilder 6 program directory.&lt;/p&gt;
&lt;h2&gt;More Resources&lt;/h2&gt;
&lt;p&gt;The example action package "FBScriptExamples.fbap" comes with FinalBuilder, and contains some more sample PowerShell actions which can be loaded in ActionStudio.&lt;/p&gt;
&lt;p&gt;The ActionStudioManual.pdf file (located in the FinalBuilder Program directory) contains a reference section with built-in custom action types and methods, and also some more information on creating PowerShell actions.&lt;/p&gt;
&lt;h2&gt;Some Notes&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;This is a pretty simple example, but (like the others) it is fairly simple to extend it to cover lots of other Windows-related tasks.&lt;/li&gt;
    &lt;li&gt;FYI, there is a dedicated Get-EventLog command in PowerShell. In this instance, I chose to use WMI instead because WMI can read from remote machines, and can read across all event logs. If you use the dedicated command, you need to choose a single event log to read from.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part Two, Script Events)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/619/FinalBuilder-6-PowerShell-Part-Two-Script-Events.aspx</link><category /><pubDate>Wed, 26 Mar 2008 05:00:00 GMT</pubDate><description>&lt;h2&gt;&amp;#160;PowerShell Script Events&lt;/h2&gt;
&lt;p&gt;This is Part Two in a series about the new PowerShell support in FinalBuilder 6. In &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=253&amp;amp;language=en-US"&gt;Part One&lt;/a&gt;, we learned how to create an action Execute Condition using PowerShell.&lt;/p&gt;
&lt;p&gt;In this article we will show how to use PowerShell as a scripting language in the FinalBuilder IDE, in order to customize the behaviour of a built-in FinalBuilder action. We'll also showcase some of the powerful string processing features in PowerShell.&lt;/p&gt;
&lt;h2&gt;Script Events&lt;/h2&gt;
&lt;p&gt;When you add an action to a FinalBuilder project, you also add at least three script events:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;BeforeAction - This script event is called before the action runs.&lt;/li&gt;
    &lt;li&gt;OnStatusMessage - This script event is called each time the action outputs something to the log.&lt;/li&gt;
    &lt;li&gt;AfterAction - This script event is called after the action has finished running.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can access the script events by clicking on the "Script Editor" tab in FinalBuilder. For this blog post, we're going to use PowerShell to create an implementation for each of these script events.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;PsLogList&lt;/h2&gt;
&lt;p&gt;I'm going use scripting to extend the built-in FinalBuilder action for the PsLogList tool. PsLogList is part of the &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx"&gt;PsTools suite from SysInternals/Microsoft&lt;/a&gt;. It dumps the contents of the event log on a local or remote machine.&lt;/p&gt;
&lt;p&gt;We're going to customize the action so it parses the list of log entries to automatically extract data about the frequency of events from different sources.&lt;/p&gt;
&lt;h2&gt;Output format&lt;/h2&gt;
&lt;p&gt;Here's an example log entry, as output from PsLogList:&lt;/p&gt;
&lt;blockquote&gt; [16664] Service Control Manager&lt;br /&gt;
Type:     INFORMATION&lt;br /&gt;
Computer: DYNAMO&lt;br /&gt;
Time:     3/03/2008 3:09:18 PM   ID:       7035 &lt;br /&gt;
User:     NT AUTHORITY\SYSTEM&lt;br /&gt;
The IMAPI CD-Burning COM Service service was successfully sent a start control.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;For our example, the piece of data want to extract would be "Service Control Manager" in the expression above. To extract this, we can use the following Regular Expression:&lt;/p&gt;
&lt;blockquote&gt;^\[\d+\] (.+)$&lt;/blockquote&gt;
&lt;p&gt;Regular expressions are supported directly in PowerShell. You can create a regular expression using a code snippet like this:&lt;/p&gt;
&lt;blockquote&gt;$headerExpr = [regex] "\[\d+\] (.+)"&lt;/blockquote&gt;
&lt;p&gt;(If you ever need help remembering Regular Expression syntax, I recommend &lt;a target="_blank" href="http://www.regular-expressions.info/reference.html"&gt;www.regular-expressions.info&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Hash tables&lt;/h2&gt;
&lt;p&gt;The other piece of PowerShell functionality that we're going to make use of is the hash table. We're going to create an empty PowerShell hash table, and then use it as a dictionary to store event source names along with the frequency that each source appears.&lt;/p&gt;
&lt;p&gt;Here's the script used to create a new empty hashtable:&lt;/p&gt;
&lt;blockquote&gt;$hashTable = ${}&lt;/blockquote&gt;
&lt;p&gt;To increment the frequency of an item in the table, we can use the increment operation += on the hashtable entry. If there is no entry, PowerShell returns $null, but ($null + 1) == 1 so it will work properly.&lt;/p&gt;
&lt;blockquote&gt;$hashTable[$name] += 1&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Scripting it up&lt;/h2&gt;
&lt;p&gt;Here are the complete script events: (&lt;a href="http://www.finalbuilder.com/blogimages/PowerShell Script Event Example.zip"&gt;download as project&lt;/a&gt;.)&lt;/p&gt;
&lt;h3&gt;BeforeAction Script Event&lt;/h3&gt;
&lt;blockquote&gt; # Create empty hash table for use in action (we need to store it in a Project Variable)&lt;br /&gt;
$FBVariables["FrequencyTable"] = @{ }&amp;#160;&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;
&lt;h3&gt;OnStatusMessage Script Event&lt;/h3&gt;
&lt;blockquote&gt;  # When output comes from the action, check if it is an Event header line&lt;br /&gt;
&lt;br /&gt;
$headerPattern = "^\[\d+\] (.+)$"&lt;br /&gt;
$RegexOptions = [System.Text.RegularExpressions.RegexOptions]&lt;br /&gt;
&lt;br /&gt;
foreach ( $match in [regex]::Matches( $StatusMessage.MessageText, $headerPattern, $RegexOptions::MultiLine ) )&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;$appName = $match.Groups[1].Value.Trim()&lt;br /&gt;
&amp;#160;&amp;#160;$freqTable = $FBVariables["FrequencyTable"]&lt;br /&gt;
&amp;#160; $freqTable[$appName] += 1&lt;br /&gt;
}  &lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h3&gt;AfterAction Script Event&lt;/h3&gt;
&lt;blockquote&gt; # Log the frequencies, sorted by value&lt;br /&gt;
"Frequencies for different sources"&lt;br /&gt;
$FBVariables["FrequencyTable"].GetEnumerator() | sort -descending Value | ft Value, Name -autosize -wrap&lt;br /&gt;
#&lt;br /&gt;
# (the .GetEnumerator() call in the expression above is a trick which allows us to sort the contents of the hashtable.)&lt;br /&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Download the Project&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.finalbuilder.com/blogimages/PowerShell Script Event Example.zip"&gt;Click here to download a sample project with this action&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The downloaded project has one more feature: it suppresses the normal output from PsLogList. Only our custom information is shown in the log.&lt;/p&gt;
&lt;h2&gt;Action output&lt;/h2&gt;
&lt;p&gt;Here's the log output from when the action is run normally:&lt;/p&gt;
&lt;blockquote&gt;Frequencies for different sources&lt;br /&gt;
Value Name&lt;br /&gt;
----- ----&lt;br /&gt;
29 Service Control Manager&lt;br /&gt;
3 Application Popup&lt;br /&gt;
2 W32Time&lt;br /&gt;
2 IPSec&lt;br /&gt;
2 EventLog&lt;br /&gt;
2 WinHttpAutoProxySvc&lt;br /&gt;
1 DCOM&lt;br /&gt;
1 AeLookupSvc&lt;br /&gt;
1 Tcpip6&lt;br /&gt;
1 Tcpip&lt;br /&gt;
1 redbook&lt;br /&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Why this is Useful&lt;/h2&gt;
&lt;p&gt;OK, so this example isn't particularly relevant for automated builds. However, this technique (or one like it) can be used to parse information from any tool which is run by FinalBuilder.&lt;/p&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;Having a script event run every time data is logged decreases the performance of the action. For actions which log very large amounts of data, it's better to use Log To Variable and then process the output all-at-once in a separate action.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You'll note that the actual regular expression call used in the script event is different to the example&amp;#160; expression showed at the beginning. We have to call the .NET RegularExpression class directly in order to use MultiLine mode. (If anyone from the PowerShell Team is reading this, please try and find a way to set the expression mode with simpler syntax!)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You can actually do everything shown in the example with JavaScript instead of PowerShell, using a Regexp object and an associative array. However, some steps (like automatically printing the results) are much more complex to do with JavaScript.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You could also get the same results from a PowerShell action by using get-wmi and the Win32_NTLogEvent class. That will be the subject of upcoming blog post Part Three: Custom actions.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part Two, Script Events)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/645/FinalBuilder-6-PowerShell-Part-Two-Script-Events.aspx</link><category /><pubDate>Wed, 26 Mar 2008 05:00:00 GMT</pubDate><description>&lt;h2&gt;&amp;#160;PowerShell Script Events&lt;/h2&gt;
&lt;p&gt;This is Part Two in a series about the new PowerShell support in FinalBuilder 6. In &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=253&amp;amp;language=en-US"&gt;Part One&lt;/a&gt;, we learned how to create an action Execute Condition using PowerShell.&lt;/p&gt;
&lt;p&gt;In this article we will show how to use PowerShell as a scripting language in the FinalBuilder IDE, in order to customize the behaviour of a built-in FinalBuilder action. We'll also showcase some of the powerful string processing features in PowerShell.&lt;/p&gt;
&lt;h2&gt;Script Events&lt;/h2&gt;
&lt;p&gt;When you add an action to a FinalBuilder project, you also add at least three script events:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;BeforeAction - This script event is called before the action runs.&lt;/li&gt;
    &lt;li&gt;OnStatusMessage - This script event is called each time the action outputs something to the log.&lt;/li&gt;
    &lt;li&gt;AfterAction - This script event is called after the action has finished running.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can access the script events by clicking on the "Script Editor" tab in FinalBuilder. For this blog post, we're going to use PowerShell to create an implementation for each of these script events.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;PsLogList&lt;/h2&gt;
&lt;p&gt;I'm going use scripting to extend the built-in FinalBuilder action for the PsLogList tool. PsLogList is part of the &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx"&gt;PsTools suite from SysInternals/Microsoft&lt;/a&gt;. It dumps the contents of the event log on a local or remote machine.&lt;/p&gt;
&lt;p&gt;We're going to customize the action so it parses the list of log entries to automatically extract data about the frequency of events from different sources.&lt;/p&gt;
&lt;h2&gt;Output format&lt;/h2&gt;
&lt;p&gt;Here's an example log entry, as output from PsLogList:&lt;/p&gt;
&lt;blockquote&gt; [16664] Service Control Manager&lt;br /&gt;
Type:     INFORMATION&lt;br /&gt;
Computer: DYNAMO&lt;br /&gt;
Time:     3/03/2008 3:09:18 PM   ID:       7035 &lt;br /&gt;
User:     NT AUTHORITY\SYSTEM&lt;br /&gt;
The IMAPI CD-Burning COM Service service was successfully sent a start control.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;For our example, the piece of data want to extract would be "Service Control Manager" in the expression above. To extract this, we can use the following Regular Expression:&lt;/p&gt;
&lt;blockquote&gt;^\[\d+\] (.+)$&lt;/blockquote&gt;
&lt;p&gt;Regular expressions are supported directly in PowerShell. You can create a regular expression using a code snippet like this:&lt;/p&gt;
&lt;blockquote&gt;$headerExpr = [regex] "\[\d+\] (.+)"&lt;/blockquote&gt;
&lt;p&gt;(If you ever need help remembering Regular Expression syntax, I recommend &lt;a target="_blank" href="http://www.regular-expressions.info/reference.html"&gt;www.regular-expressions.info&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Hash tables&lt;/h2&gt;
&lt;p&gt;The other piece of PowerShell functionality that we're going to make use of is the hash table. We're going to create an empty PowerShell hash table, and then use it as a dictionary to store event source names along with the frequency that each source appears.&lt;/p&gt;
&lt;p&gt;Here's the script used to create a new empty hashtable:&lt;/p&gt;
&lt;blockquote&gt;$hashTable = ${}&lt;/blockquote&gt;
&lt;p&gt;To increment the frequency of an item in the table, we can use the increment operation += on the hashtable entry. If there is no entry, PowerShell returns $null, but ($null + 1) == 1 so it will work properly.&lt;/p&gt;
&lt;blockquote&gt;$hashTable[$name] += 1&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h2&gt;Scripting it up&lt;/h2&gt;
&lt;p&gt;Here are the complete script events: (&lt;a href="http://www.finalbuilder.com/blogimages/PowerShell Script Event Example.zip"&gt;download as project&lt;/a&gt;.)&lt;/p&gt;
&lt;h3&gt;BeforeAction Script Event&lt;/h3&gt;
&lt;blockquote&gt; # Create empty hash table for use in action (we need to store it in a Project Variable)&lt;br /&gt;
$FBVariables["FrequencyTable"] = @{ }&amp;#160;&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;
&lt;h3&gt;OnStatusMessage Script Event&lt;/h3&gt;
&lt;blockquote&gt;  # When output comes from the action, check if it is an Event header line&lt;br /&gt;
&lt;br /&gt;
$headerPattern = "^\[\d+\] (.+)$"&lt;br /&gt;
$RegexOptions = [System.Text.RegularExpressions.RegexOptions]&lt;br /&gt;
&lt;br /&gt;
foreach ( $match in [regex]::Matches( $StatusMessage.MessageText, $headerPattern, $RegexOptions::MultiLine ) )&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;$appName = $match.Groups[1].Value.Trim()&lt;br /&gt;
&amp;#160;&amp;#160;$freqTable = $FBVariables["FrequencyTable"]&lt;br /&gt;
&amp;#160; $freqTable[$appName] += 1&lt;br /&gt;
}  &lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;h3&gt;AfterAction Script Event&lt;/h3&gt;
&lt;blockquote&gt; # Log the frequencies, sorted by value&lt;br /&gt;
"Frequencies for different sources"&lt;br /&gt;
$FBVariables["FrequencyTable"].GetEnumerator() | sort -descending Value | ft Value, Name -autosize -wrap&lt;br /&gt;
#&lt;br /&gt;
# (the .GetEnumerator() call in the expression above is a trick which allows us to sort the contents of the hashtable.)&lt;br /&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Download the Project&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.finalbuilder.com/blogimages/PowerShell Script Event Example.zip"&gt;Click here to download a sample project with this action&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The downloaded project has one more feature: it suppresses the normal output from PsLogList. Only our custom information is shown in the log.&lt;/p&gt;
&lt;h2&gt;Action output&lt;/h2&gt;
&lt;p&gt;Here's the log output from when the action is run normally:&lt;/p&gt;
&lt;blockquote&gt;Frequencies for different sources&lt;br /&gt;
Value Name&lt;br /&gt;
----- ----&lt;br /&gt;
29 Service Control Manager&lt;br /&gt;
3 Application Popup&lt;br /&gt;
2 W32Time&lt;br /&gt;
2 IPSec&lt;br /&gt;
2 EventLog&lt;br /&gt;
2 WinHttpAutoProxySvc&lt;br /&gt;
1 DCOM&lt;br /&gt;
1 AeLookupSvc&lt;br /&gt;
1 Tcpip6&lt;br /&gt;
1 Tcpip&lt;br /&gt;
1 redbook&lt;br /&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Why this is Useful&lt;/h2&gt;
&lt;p&gt;OK, so this example isn't particularly relevant for automated builds. However, this technique (or one like it) can be used to parse information from any tool which is run by FinalBuilder.&lt;/p&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;Having a script event run every time data is logged decreases the performance of the action. For actions which log very large amounts of data, it's better to use Log To Variable and then process the output all-at-once in a separate action.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You'll note that the actual regular expression call used in the script event is different to the example&amp;#160; expression showed at the beginning. We have to call the .NET RegularExpression class directly in order to use MultiLine mode. (If anyone from the PowerShell Team is reading this, please try and find a way to set the expression mode with simpler syntax!)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You can actually do everything shown in the example with JavaScript instead of PowerShell, using a Regexp object and an associative array. However, some steps (like automatically printing the results) are much more complex to do with JavaScript.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You could also get the same results from a PowerShell action by using get-wmi and the Win32_NTLogEvent class. That will be the subject of upcoming blog post Part Three: Custom actions.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part Two, Script Events)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/671/FinalBuilder-6-PowerShell-Part-Two-Script-Events.aspx</link><category>FinalBuilder</category><pubDate>Wed, 26 Mar 2008 05:00:00 GMT</pubDate><description>&lt;h2&gt;&amp;nbsp;PowerShell Script Events&lt;/h2&gt;
&lt;p&gt;This is Part Two in a series about the new PowerShell support in FinalBuilder 6. In &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=253&amp;amp;language=en-US"&gt;Part One&lt;/a&gt;, we learned how to create an action Execute Condition using PowerShell.&lt;/p&gt;
&lt;p&gt;In this article we will show how to use PowerShell as a scripting language in the FinalBuilder IDE, in order to customize the behaviour of a built-in FinalBuilder action. We'll also showcase some of the powerful string processing features in PowerShell.&lt;/p&gt;
&lt;h2&gt;Script Events&lt;/h2&gt;
&lt;p&gt;When you add an action to a FinalBuilder project, you also add at least three script events:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;BeforeAction - This script event is called before the action runs.&lt;/li&gt;
    &lt;li&gt;OnStatusMessage - This script event is called each time the action outputs something to the log.&lt;/li&gt;
    &lt;li&gt;AfterAction - This script event is called after the action has finished running.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can access the script events by clicking on the "Script Editor" tab in FinalBuilder. For this blog post, we're going to use PowerShell to create an implementation for each of these script events.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;PsLogList&lt;/h2&gt;
&lt;p&gt;I'm going use scripting to extend the built-in FinalBuilder action for the PsLogList tool. PsLogList is part of the &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx"&gt;PsTools suite from SysInternals/Microsoft&lt;/a&gt;. It dumps the contents of the event log on a local or remote machine.&lt;/p&gt;
&lt;p&gt;We're going to customize the action so it parses the list of log entries to automatically extract data about the frequency of events from different sources.&lt;/p&gt;
&lt;h2&gt;Output format&lt;/h2&gt;
&lt;p&gt;Here's an example log entry, as output from PsLogList:&lt;/p&gt;
&lt;blockquote&gt; [16664] Service Control Manager&lt;br /&gt;
Type:     INFORMATION&lt;br /&gt;
Computer: DYNAMO&lt;br /&gt;
Time:     3/03/2008 3:09:18 PM   ID:       7035 &lt;br /&gt;
User:     NT AUTHORITY\SYSTEM&lt;br /&gt;
The IMAPI CD-Burning COM Service service was successfully sent a start control.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For our example, the piece of data want to extract would be "Service Control Manager" in the expression above. To extract this, we can use the following Regular Expression:&lt;/p&gt;
&lt;blockquote&gt;^\[\d+\] (.+)$&lt;/blockquote&gt;
&lt;p&gt;Regular expressions are supported directly in PowerShell. You can create a regular expression using a code snippet like this:&lt;/p&gt;
&lt;blockquote&gt;$headerExpr = [regex] "\[\d+\] (.+)"&lt;/blockquote&gt;
&lt;p&gt;(If you ever need help remembering Regular Expression syntax, I recommend &lt;a target="_blank" href="http://www.regular-expressions.info/reference.html"&gt;www.regular-expressions.info&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Hash tables&lt;/h2&gt;
&lt;p&gt;The other piece of PowerShell functionality that we're going to make use of is the hash table. We're going to create an empty PowerShell hash table, and then use it as a dictionary to store event source names along with the frequency that each source appears.&lt;/p&gt;
&lt;p&gt;Here's the script used to create a new empty hashtable:&lt;/p&gt;
&lt;blockquote&gt;$hashTable = ${}&lt;/blockquote&gt;
&lt;p&gt;To increment the frequency of an item in the table, we can use the increment operation += on the hashtable entry. If there is no entry, PowerShell returns $null, but ($null + 1) == 1 so it will work properly.&lt;/p&gt;
&lt;blockquote&gt;$hashTable[$name] += 1&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Scripting it up&lt;/h2&gt;
&lt;p&gt;Here are the complete script events: (&lt;a href="http://www.finalbuilder.com/blogimages/PowerShell Script Event Example.zip"&gt;download as project&lt;/a&gt;.)&lt;/p&gt;
&lt;h3&gt;BeforeAction Script Event&lt;/h3&gt;
&lt;blockquote&gt; # Create empty hash table for use in action (we need to store it in a Project Variable)&lt;br /&gt;
$FBVariables["FrequencyTable"] = @{ }&amp;nbsp;&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;
&lt;h3&gt;OnStatusMessage Script Event&lt;/h3&gt;
&lt;blockquote&gt;  # When output comes from the action, check if it is an Event header line&lt;br /&gt;
&lt;br /&gt;
$headerPattern = "^\[\d+\] (.+)$"&lt;br /&gt;
$RegexOptions = [System.Text.RegularExpressions.RegexOptions]&lt;br /&gt;
&lt;br /&gt;
foreach ( $match in [regex]::Matches( $StatusMessage.MessageText, $headerPattern, $RegexOptions::MultiLine ) )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$appName = $match.Groups[1].Value.Trim()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$freqTable = $FBVariables["FrequencyTable"]&lt;br /&gt;
&amp;nbsp; $freqTable[$appName] += 1&lt;br /&gt;
}  &lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;AfterAction Script Event&lt;/h3&gt;
&lt;blockquote&gt; # Log the frequencies, sorted by value&lt;br /&gt;
"Frequencies for different sources"&lt;br /&gt;
$FBVariables["FrequencyTable"].GetEnumerator() | sort -descending Value | ft Value, Name -autosize -wrap&lt;br /&gt;
#&lt;br /&gt;
# (the .GetEnumerator() call in the expression above is a trick which allows us to sort the contents of the hashtable.)&lt;br /&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Download the Project&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.finalbuilder.com/blogimages/PowerShell Script Event Example.zip"&gt;Click here to download a sample project with this action&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The downloaded project has one more feature: it suppresses the normal output from PsLogList. Only our custom information is shown in the log.&lt;/p&gt;
&lt;h2&gt;Action output&lt;/h2&gt;
&lt;p&gt;Here's the log output from when the action is run normally:&lt;/p&gt;
&lt;blockquote&gt;Frequencies for different sources&lt;br /&gt;
Value Name&lt;br /&gt;
----- ----&lt;br /&gt;
29 Service Control Manager&lt;br /&gt;
3 Application Popup&lt;br /&gt;
2 W32Time&lt;br /&gt;
2 IPSec&lt;br /&gt;
2 EventLog&lt;br /&gt;
2 WinHttpAutoProxySvc&lt;br /&gt;
1 DCOM&lt;br /&gt;
1 AeLookupSvc&lt;br /&gt;
1 Tcpip6&lt;br /&gt;
1 Tcpip&lt;br /&gt;
1 redbook&lt;br /&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Why this is Useful&lt;/h2&gt;
&lt;p&gt;OK, so this example isn't particularly relevant for automated builds. However, this technique (or one like it) can be used to parse information from any tool which is run by FinalBuilder.&lt;/p&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;Having a script event run every time data is logged decreases the performance of the action. For actions which log very large amounts of data, it's better to use Log To Variable and then process the output all-at-once in a separate action.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You'll note that the actual regular expression call used in the script event is different to the example&amp;nbsp; expression showed at the beginning. We have to call the .NET RegularExpression class directly in order to use MultiLine mode. (If anyone from the PowerShell Team is reading this, please try and find a way to set the expression mode with simpler syntax!)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You can actually do everything shown in the example with JavaScript instead of PowerShell, using a Regexp object and an associative array. However, some steps (like automatically printing the results) are much more complex to do with JavaScript.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;You could also get the same results from a PowerShell action by using get-wmi and the Win32_NTLogEvent class. That will be the subject of upcoming blog post Part Three: Custom actions.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part One, Execute Conditions)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/618/FinalBuilder-6-PowerShell-Part-One-Execute-Condi.aspx</link><category /><pubDate>Tue, 18 Mar 2008 05:00:00 GMT</pubDate><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;PowerShell support in FinalBuilder 5.5 was limited to the Execute PowerShell Action. For FinalBuilder 6, we've made PowerShell a "first class" scripting language, alongside JavaScript and VBScript.&lt;/p&gt;
&lt;p&gt;This is the first in a series of blog posts which show the different ways PowerShell can integrate with FinalBuilder. Today's example is the Execute Condition.&lt;/p&gt;
&lt;h2&gt;Execute Conditions&lt;/h2&gt;
&lt;p&gt;Every action in FinalBuilder has a field called the "Execute Condition", on the Runtime property page.&lt;/p&gt;
&lt;p&gt;This lets you place a single line of script which evaluates as a boolean condition. If the script evaluates "True", the action will execute. If the script evaluates "False", the action will be skipped.&lt;/p&gt;
&lt;h2&gt;PowerShell Execute Conditions&lt;/h2&gt;
&lt;p&gt;Due to it's terse but expressive syntax, PowerShell seems to lend itself to one-line expressions (a quick &lt;a href="http://www.google.com.au/search?q=PowerShell+one-liners" target="_blank"&gt;Google search&lt;/a&gt; will confirm this.) This can be great for execute conditions.&lt;/p&gt;
&lt;h2&gt;Examples&lt;/h2&gt;
&lt;p&gt;If you want an action to only run if Notepad is executing, you can use this one-line expression:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;get-Process | where {$_.name -eq "NotePad"}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="PowerShell Execute Condition" src="/blogimages/PowerShell/PowerShellExecuteCondition.png" /&gt;&lt;/p&gt;
&lt;p&gt;If you want an action to run only if a remote computer is online, you can use this expression:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gwmi Win32_PingStatus -Filter "Address='remotePC'" |where {$_.StatusCode -eq 0}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PowerShell treats any non-null value as equivalent to $True, so any result will be regarded as True, while no result will be regarded as False.&lt;/p&gt;
&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;p&gt;I think one-liners are neat. It's probably because they remind me of growing up with my Apple //e and &lt;a href="http://en.wikipedia.org/wiki/Nibble_(magazine)" target="_blank"&gt;Nibble magazine's&lt;/a&gt; one-liner competition. However, like anything else, one liners can be abused. They can be the stuff of programming horror stories.&lt;/p&gt;
&lt;p&gt;My suggestions for responsible Execute Condition use:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Put something in the action comment field if the Execute Condition isn't self-documenting.&lt;/li&gt;
    &lt;li&gt;Use a script event if the Execute Condition gets longer than the text field on the Runtime page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;Next - &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=254"&gt;Part Two : Script Events&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;( Credits : thanks to beta tester Robert for the Notepad suggestion.)&lt;/p&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part One, Execute Conditions)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/644/FinalBuilder-6-PowerShell-Part-One-Execute-Condi.aspx</link><category /><pubDate>Tue, 18 Mar 2008 05:00:00 GMT</pubDate><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;PowerShell support in FinalBuilder 5.5 was limited to the Execute PowerShell Action. For FinalBuilder 6, we've made PowerShell a "first class" scripting language, alongside JavaScript and VBScript.&lt;/p&gt;
&lt;p&gt;This is the first in a series of blog posts which show the different ways PowerShell can integrate with FinalBuilder. Today's example is the Execute Condition.&lt;/p&gt;
&lt;h2&gt;Execute Conditions&lt;/h2&gt;
&lt;p&gt;Every action in FinalBuilder has a field called the "Execute Condition", on the Runtime property page.&lt;/p&gt;
&lt;p&gt;This lets you place a single line of script which evaluates as a boolean condition. If the script evaluates "True", the action will execute. If the script evaluates "False", the action will be skipped.&lt;/p&gt;
&lt;h2&gt;PowerShell Execute Conditions&lt;/h2&gt;
&lt;p&gt;Due to it's terse but expressive syntax, PowerShell seems to lend itself to one-line expressions (a quick &lt;a href="http://www.google.com.au/search?q=PowerShell+one-liners" target="_blank"&gt;Google search&lt;/a&gt; will confirm this.) This can be great for execute conditions.&lt;/p&gt;
&lt;h2&gt;Examples&lt;/h2&gt;
&lt;p&gt;If you want an action to only run if Notepad is executing, you can use this one-line expression:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;get-Process | where {$_.name -eq "NotePad"}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="PowerShell Execute Condition" src="/blogimages/PowerShell/PowerShellExecuteCondition.png" /&gt;&lt;/p&gt;
&lt;p&gt;If you want an action to run only if a remote computer is online, you can use this expression:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gwmi Win32_PingStatus -Filter "Address='remotePC'" |where {$_.StatusCode -eq 0}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PowerShell treats any non-null value as equivalent to $True, so any result will be regarded as True, while no result will be regarded as False.&lt;/p&gt;
&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;p&gt;I think one-liners are neat. It's probably because they remind me of growing up with my Apple //e and &lt;a href="http://en.wikipedia.org/wiki/Nibble_(magazine)" target="_blank"&gt;Nibble magazine's&lt;/a&gt; one-liner competition. However, like anything else, one liners can be abused. They can be the stuff of programming horror stories.&lt;/p&gt;
&lt;p&gt;My suggestions for responsible Execute Condition use:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Put something in the action comment field if the Execute Condition isn't self-documenting.&lt;/li&gt;
    &lt;li&gt;Use a script event if the Execute Condition gets longer than the text field on the Runtime page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;Next - &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=254"&gt;Part Two : Script Events&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;( Credits : thanks to beta tester Robert for the Notepad suggestion.)&lt;/p&gt;</description></item><item><title>FinalBuilder 6 : PowerShell (Part One, Execute Conditions)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/670/FinalBuilder-6-PowerShell-Part-One-Execute-Condi.aspx</link><category>FinalBuilder</category><pubDate>Tue, 18 Mar 2008 05:00:00 GMT</pubDate><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;PowerShell support in FinalBuilder 5.5 was limited to the Execute PowerShell Action. For FinalBuilder 6, we've made PowerShell a "first class" scripting language, alongside JavaScript and VBScript.&lt;/p&gt;
&lt;p&gt;This is the first in a series of blog posts which show the different ways PowerShell can integrate with FinalBuilder. Today's example is the Execute Condition.&lt;/p&gt;
&lt;h2&gt;Execute Conditions&lt;/h2&gt;
&lt;p&gt;Every action in FinalBuilder has a field called the "Execute Condition", on the Runtime property page.&lt;/p&gt;
&lt;p&gt;This lets you place a single line of script which evaluates as a boolean condition. If the script evaluates "True", the action will execute. If the script evaluates "False", the action will be skipped.&lt;/p&gt;
&lt;h2&gt;PowerShell Execute Conditions&lt;/h2&gt;
&lt;p&gt;Due to it's terse but expressive syntax, PowerShell seems to lend itself to one-line expressions (a quick &lt;a href="http://www.google.com.au/search?q=PowerShell+one-liners" target="_blank"&gt;Google search&lt;/a&gt; will confirm this.) This can be great for execute conditions.&lt;/p&gt;
&lt;h2&gt;Examples&lt;/h2&gt;
&lt;p&gt;If you want an action to only run if Notepad is executing, you can use this one-line expression:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;get-Process | where {$_.name -eq "NotePad"}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="PowerShell Execute Condition" src="/blogimages/PowerShell/PowerShellExecuteCondition.png" /&gt;&lt;/p&gt;
&lt;p&gt;If you want an action to run only if a remote computer is online, you can use this expression:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gwmi Win32_PingStatus -Filter "Address='remotePC'" |where {$_.StatusCode -eq 0}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PowerShell treats any non-null value as equivalent to $True, so any result will be regarded as True, while no result will be regarded as False.&lt;/p&gt;
&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;p&gt;I think one-liners are neat. It's probably because they remind me of growing up with my Apple //e and &lt;a href="http://en.wikipedia.org/wiki/Nibble_(magazine)" target="_blank"&gt;Nibble magazine's&lt;/a&gt; one-liner competition. However, like anything else, one liners can be abused. They can be the stuff of programming horror stories.&lt;/p&gt;
&lt;p&gt;My suggestions for responsible Execute Condition use:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Put something in the action comment field if the Execute Condition isn't self-documenting.&lt;/li&gt;
    &lt;li&gt;Use a script event if the Execute Condition gets longer than the text field on the Runtime page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Next - &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=254"&gt;Part Two : Script Events&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;( Credits : thanks to beta tester Robert for the Notepad suggestion.)&lt;/p&gt;</description></item><item><title>Team Foundation Build and FinalBuilder 6 (a match made in heaven)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/617/Team-Foundation-Build-and-FinalBuilder-6-a-match-.aspx</link><category /><pubDate>Fri, 14 Mar 2008 05:00:00 GMT</pubDate><description>&lt;p&gt;I just posted a new article on &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=29"&gt;Integrating FinalBuilder with Microsoft Team Foundation Server&lt;/a&gt;. The article deals with the great new Team Build integration in FinalBuilder 6.&lt;/p&gt;
&lt;p&gt;You can now do things with FinalBuilder 6 and Team Build which are impossible to achieve with any other tool combination, and you can do it all without editing any MSBuild files &lt;u&gt;at all&lt;/u&gt;.&lt;/p&gt;
&lt;p&gt;Need MbUnit test statistics in your Team Build Quality Report? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to deploy build results via FTP? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to build legacy Visual Studio 2003/Delphi/C++ Builder/VB 6 projects with Team Build, and see compiler metrics in the Team Build Report? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need smart version information management (including auto-incrementing version numbers across projects) without having to use custom C# code? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to do perform any of the thousands of other built-in operations, with full graphical configuration and structured logging output? &lt;em&gt;Do it with FinalBuilder&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;If you're interested, &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=29" target="_blank"&gt;check out the new article here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;I also wanted to plug a great (FREE) Screencast creator called &lt;a href="http://www.debugmode.com/wink/" target="_blank"&gt;Wink&lt;/a&gt;, by DebugMode Software. Paul put me onto this and I used it to create the Flash videos in the article. We also have a license to an expensive commercial product, but I don't think I'll ever want to use it again now that I've found Wink.&lt;/p&gt;</description></item><item><title>Team Foundation Build and FinalBuilder 6 (a match made in heaven)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/643/Team-Foundation-Build-and-FinalBuilder-6-a-match-.aspx</link><category /><pubDate>Fri, 14 Mar 2008 05:00:00 GMT</pubDate><description>&lt;p&gt;I just posted a new article on &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=29"&gt;Integrating FinalBuilder with Microsoft Team Foundation Server&lt;/a&gt;. The article deals with the great new Team Build integration in FinalBuilder 6.&lt;/p&gt;
&lt;p&gt;You can now do things with FinalBuilder 6 and Team Build which are impossible to achieve with any other tool combination, and you can do it all without editing any MSBuild files &lt;u&gt;at all&lt;/u&gt;.&lt;/p&gt;
&lt;p&gt;Need MbUnit test statistics in your Team Build Quality Report? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to deploy build results via FTP? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to build legacy Visual Studio 2003/Delphi/C++ Builder/VB 6 projects with Team Build, and see compiler metrics in the Team Build Report? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need smart version information management (including auto-incrementing version numbers across projects) without having to use custom C# code? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to do perform any of the thousands of other built-in operations, with full graphical configuration and structured logging output? &lt;em&gt;Do it with FinalBuilder&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;If you're interested, &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=29" target="_blank"&gt;check out the new article here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;I also wanted to plug a great (FREE) Screencast creator called &lt;a href="http://www.debugmode.com/wink/" target="_blank"&gt;Wink&lt;/a&gt;, by DebugMode Software. Paul put me onto this and I used it to create the Flash videos in the article. We also have a license to an expensive commercial product, but I don't think I'll ever want to use it again now that I've found Wink.&lt;/p&gt;</description></item><item><title>Team Foundation Build and FinalBuilder 6 (a match made in heaven)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/669/Team-Foundation-Build-and-FinalBuilder-6-a-match-.aspx</link><category>FinalBuilder,TFS</category><pubDate>Fri, 14 Mar 2008 05:00:00 GMT</pubDate><description>&lt;p&gt;I just posted a new article on &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=29"&gt;Integrating FinalBuilder with Microsoft Team Foundation Server&lt;/a&gt;. The article deals with the great new Team Build integration in FinalBuilder 6.&lt;/p&gt;
&lt;p&gt;You can now do things with FinalBuilder 6 and Team Build which are impossible to achieve with any other tool combination, and you can do it all without editing any MSBuild files &lt;span style="text-decoration: underline;"&gt;at all&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Need MbUnit test statistics in your Team Build Quality Report? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to deploy build results via FTP? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to build legacy Visual Studio 2003/Delphi/C++ Builder/VB 6 projects with Team Build, and see compiler metrics in the Team Build Report? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need smart version information management (including auto-incrementing version numbers across projects) without having to use custom C# code? &lt;em&gt;Do it with FinalBuilder.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Need to do perform any of the thousands of other built-in operations, with full graphical configuration and structured logging output? &lt;em&gt;Do it with FinalBuilder&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;If you're interested, &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=29" target="_blank"&gt;check out the new article here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I also wanted to plug a great (FREE) Screencast creator called &lt;a href="http://www.debugmode.com/wink/" target="_blank"&gt;Wink&lt;/a&gt;, by DebugMode Software. Paul put me onto this and I used it to create the Flash videos in the article. We also have a license to an expensive commercial product, but I don't think I'll ever want to use it again now that I've found Wink.&lt;/p&gt;</description></item><item><title>Variable Suggestion in FinalBuilder 6</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/407/Variable-Suggestion-in-FinalBuilder-6.aspx</link><category>FinalBuilder</category><pubDate>Wed, 12 Mar 2008 05:00:00 GMT</pubDate><description>&lt;p&gt;Variables in FinalBuilder make your build process more maintainable, but working out which variables to use where can be difficult, especially when you are trying to retrofit them into an existing project. Variable Suggestion is a new feature in FinalBuilder 6 which aims to ease the use of Variables.&lt;/p&gt;
&lt;p &gt;
&lt;img width="559" height="494" src="/Portals/0/ArticleImages/variablesuggestion.png" alt="Variable Suggestion" /&gt;&lt;/p&gt;
&lt;p&gt;Variable Suggestion is a very simple feature. In any text field, press F12. FinalBuilder will scan the text in the field and determine if there are possible variable replacements that could be made. It does this recursively (not infinately though, we limited the depth to preserve reasonable performance), and will then present the list of possible variable replacement. The order that the suggestions are shown in is based on the total number of characters replaced/saved by using the variables. Not a very scientifc method, but in practice we found that in most cases the top few suggestions are the ones that make sense.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>FinalBuilder 6 Tech Article - .NET custom action API</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/616/FinalBuilder-6-Tech-Article-NET-custom-action-A.aspx</link><category /><pubDate>Tue, 04 Mar 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;I just posted a new tech article about the &lt;a href="http://www.finalbuilder.com/Default.aspx?tabid=70&amp;amp;mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=28"&gt;FinalBuilder 6 .NET Custom Action API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you've ever done any custom action development with .NET, then I strongly suggest you check this out. It's a really nifty API and it makes designing FB 6 actions incredibly simple.&lt;/p&gt;
&lt;p&gt;In addition, it is still possible to tweak the API slightly to add functionality before FB 6 goes final - so please let us know if there's anything that you'd like to see added.&lt;/p&gt;</description></item><item><title>FinalBuilder 6 Tech Article - .NET custom action API</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/642/FinalBuilder-6-Tech-Article-NET-custom-action-A.aspx</link><category /><pubDate>Tue, 04 Mar 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;I just posted a new tech article about the &lt;a href="http://www.finalbuilder.com/Default.aspx?tabid=70&amp;amp;mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=28"&gt;FinalBuilder 6 .NET Custom Action API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you've ever done any custom action development with .NET, then I strongly suggest you check this out. It's a really nifty API and it makes designing FB 6 actions incredibly simple.&lt;/p&gt;
&lt;p&gt;In addition, it is still possible to tweak the API slightly to add functionality before FB 6 goes final - so please let us know if there's anything that you'd like to see added.&lt;/p&gt;</description></item><item><title>FinalBuilder 6 Tech Article - .NET custom action API</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/668/FinalBuilder-6-Tech-Article-NET-custom-action-A.aspx</link><category>FinalBuilder</category><pubDate>Tue, 04 Mar 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;I just posted a new tech article about the &lt;a href="http://www.finalbuilder.com/Default.aspx?tabid=70&amp;amp;mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=28"&gt;FinalBuilder 6 .NET Custom Action API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you've ever done any custom action development with .NET, then I strongly suggest you check this out. It's a really nifty API and it makes designing FB 6 actions incredibly simple.&lt;/p&gt;
&lt;p&gt;In addition, it is still possible to tweak the API slightly to add functionality before FB 6 goes final - so please let us know if there's anything that you'd like to see added.&lt;/p&gt;</description></item><item><title>"The Bus Factor", Software Development practices, and FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/615/The-Bus-Factor-Software-Development-practices-and.aspx</link><category /><pubDate>Wed, 27 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;(This blog post is shamelessly &lt;strike&gt;ripped off from&lt;/strike&gt; based on &lt;a href="http://weblogs.asp.net/rosherove"&gt;Roy Osherove&lt;/a&gt;'s praise of FinalBuilder(&lt;a href="#footnote1"&gt;*&lt;/a&gt;)&lt;a name="footnote1_top"&gt;&lt;/a&gt; during a session at TechEd Barcelona last year.)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;font size="4"&gt;&lt;em&gt;&lt;em&gt;"&lt;/em&gt;[&lt;em&gt;The Bus Factor]&lt;/em&gt; means if the developer who wrote [the project] is hit by a bus, you're screwed."&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;- &lt;a href="http://www.hanselman.com/blog/StrippingOutEmptyXmlElementsInAPerformantWayAndTheBusFactor.aspx"&gt;Scott Hanselman&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It's common to talk about the Bus Factor of a software project or a piece of code. Specifically, the Bus Factor is the number of people on your team who need to be "hit by a bus" (or change jobs, or change projects, or move away, or retire, or get sat on by an elephant) before the project is in trouble. The hallmark of a bad Bus Factor is having specialised, hard to access, knowledge which is only understood by one or two people on your team.&lt;/p&gt;
&lt;p&gt;FinalBuilder encourages a good Bus Factor for builds.&lt;/p&gt;
&lt;p&gt;To help demonstrate this, here's the Nant build process for one of my favourite .NET Open Source tools, &lt;a href="http://www.nunit.org"&gt;NUnit&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;(Start scrolling now...)&lt;/p&gt;
&lt;p&gt;&lt;a href="/blogimages/busfactor/NantBuild_1.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_1.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_2.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_2.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_3.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_3.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_4.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_4.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_5.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_5.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_6.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_6.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_7.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_7.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_8.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_8.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_9.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_9.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_10.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_10.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_11.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_11.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_12.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_12.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_13.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_13.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_14.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_14.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_15.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_15.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_16.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_16.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_17.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_17.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_18.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_18.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_19.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_19.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_20.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_20.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_21.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_21.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_22.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_22.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_23.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_23.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_24.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_24.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_25.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_25.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_26.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_26.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_27.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_27.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_28.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_28.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_29.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_29.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_30.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_30.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_31.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_31.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_32.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_32.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_33.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_33.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_34.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_34.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_35.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_35.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_36.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_36.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_37.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_37.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_38.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_38.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_39.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_39.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_40.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_40.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_41.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_41.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_42.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_42.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_43.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_43.png" alt="" /&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(&lt;a href="#footnote2"&gt;**&lt;/a&gt;)&lt;a name="footnote2_top"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The build process is 2,688 lines of XML, spread amongst 33 XML files. I combined them all into a PDF to create the images shown above. NUnit uses NAnt, but if you're using MSBuild then your build process will look very similar.&lt;/p&gt;
&lt;p&gt;Comparatively speaking, this a simple build process. The entire NUnit codebase is only around 70 thousand lines of C# code. The build above doesn't do anything particularly complex. Imagine how much worse this gets if either the codebase, or the level of functionality, needs to grow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Would you want to be a new developer in charge of working on that build process?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;For comparison sake, I recreated most of the NUnit build functionality in FinalBuilder (this is based on a rolling demo that we used at TechEd Barcelona.)&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/busfactor/FinalBuilder_1.png" alt="Main Action List" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_2.png" alt="PreBuild Action List" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_3.png" alt="Build and Test" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_4.png" alt="PostBuild" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_5.png" alt="Clean" /&gt;&lt;/p&gt;
&lt;p&gt;The FinalBuilder project doesn't do absolutely everything that the NAnt script does, but it could be extended to fill in the gaps without changing the appearance drastically from what you see here. The FinalBuilder project also does do some things that the NAnt project does not do - namely version control integration and FTP deployment.&lt;/p&gt;
&lt;p&gt;Ask yourself: &lt;strong&gt;Which type of build process would I like to see deployed in my organization?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nitpicker's Corner&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This isn't an entirely fair comparison, because lots of the details about &lt;em&gt;how&lt;/em&gt; the FinalBuilder project works are hidden away under the GUI abstraction. That's my the point, though: In FinalBuilder the project details aren't all in your face, but they're easy to find and understand if the person who wrote the build process happens to get hit by a bus.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#160;Footnotes:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name="footnote1"&gt;&lt;/a&gt;(*) For the record, we didn't ask Roy to praise FinalBuilder, and we definitely didn't pay him to do so. He said it all off his own bat. I hope he doesn't mind me quoting him. (&lt;a href="#footnote1_top"&gt;back&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a name="footnote2"&gt;&lt;/a&gt;(**) I don't mean to pick on NUnit here. Naturally, OSS development involves different factors which come into play when choosing tools. That said, we'd be happy to offer the NUnit project a free license (or two) of FinalBuilder for use with internal build and configuration management. (&lt;a href="#footnote2_top"&gt;back&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>"The Bus Factor", Software Development practices, and FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/641/The-Bus-Factor-Software-Development-practices-and.aspx</link><category /><pubDate>Wed, 27 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;(This blog post is shamelessly &lt;strike&gt;ripped off from&lt;/strike&gt; based on &lt;a href="http://weblogs.asp.net/rosherove"&gt;Roy Osherove&lt;/a&gt;'s praise of FinalBuilder(&lt;a href="#footnote1"&gt;*&lt;/a&gt;)&lt;a name="footnote1_top"&gt;&lt;/a&gt; during a session at TechEd Barcelona last year.)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;font size="4"&gt;&lt;em&gt;&lt;em&gt;"&lt;/em&gt;[&lt;em&gt;The Bus Factor]&lt;/em&gt; means if the developer who wrote [the project] is hit by a bus, you're screwed."&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;- &lt;a href="http://www.hanselman.com/blog/StrippingOutEmptyXmlElementsInAPerformantWayAndTheBusFactor.aspx"&gt;Scott Hanselman&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It's common to talk about the Bus Factor of a software project or a piece of code. Specifically, the Bus Factor is the number of people on your team who need to be "hit by a bus" (or change jobs, or change projects, or move away, or retire, or get sat on by an elephant) before the project is in trouble. The hallmark of a bad Bus Factor is having specialised, hard to access, knowledge which is only understood by one or two people on your team.&lt;/p&gt;
&lt;p&gt;FinalBuilder encourages a good Bus Factor for builds.&lt;/p&gt;
&lt;p&gt;To help demonstrate this, here's the Nant build process for one of my favourite .NET Open Source tools, &lt;a href="http://www.nunit.org"&gt;NUnit&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;(Start scrolling now...)&lt;/p&gt;
&lt;p&gt;&lt;a href="/blogimages/busfactor/NantBuild_1.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_1.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_2.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_2.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_3.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_3.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_4.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_4.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_5.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_5.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_6.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_6.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_7.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_7.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_8.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_8.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_9.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_9.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_10.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_10.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_11.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_11.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_12.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_12.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_13.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_13.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_14.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_14.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_15.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_15.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_16.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_16.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_17.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_17.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_18.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_18.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_19.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_19.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_20.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_20.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_21.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_21.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_22.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_22.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_23.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_23.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_24.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_24.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_25.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_25.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_26.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_26.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_27.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_27.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_28.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_28.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_29.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_29.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_30.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_30.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_31.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_31.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_32.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_32.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_33.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_33.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_34.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_34.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_35.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_35.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_36.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_36.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_37.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_37.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_38.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_38.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_39.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_39.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_40.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_40.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_41.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_41.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_42.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_42.png" alt="" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_43.png"&gt; &lt;img src="/blogimages/busfactor/Thumbs/NantBuild_43.png" alt="" /&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(&lt;a href="#footnote2"&gt;**&lt;/a&gt;)&lt;a name="footnote2_top"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The build process is 2,688 lines of XML, spread amongst 33 XML files. I combined them all into a PDF to create the images shown above. NUnit uses NAnt, but if you're using MSBuild then your build process will look very similar.&lt;/p&gt;
&lt;p&gt;Comparatively speaking, this a simple build process. The entire NUnit codebase is only around 70 thousand lines of C# code. The build above doesn't do anything particularly complex. Imagine how much worse this gets if either the codebase, or the level of functionality, needs to grow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Would you want to be a new developer in charge of working on that build process?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;For comparison sake, I recreated most of the NUnit build functionality in FinalBuilder (this is based on a rolling demo that we used at TechEd Barcelona.)&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/busfactor/FinalBuilder_1.png" alt="Main Action List" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_2.png" alt="PreBuild Action List" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_3.png" alt="Build and Test" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_4.png" alt="PostBuild" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_5.png" alt="Clean" /&gt;&lt;/p&gt;
&lt;p&gt;The FinalBuilder project doesn't do absolutely everything that the NAnt script does, but it could be extended to fill in the gaps without changing the appearance drastically from what you see here. The FinalBuilder project also does do some things that the NAnt project does not do - namely version control integration and FTP deployment.&lt;/p&gt;
&lt;p&gt;Ask yourself: &lt;strong&gt;Which type of build process would I like to see deployed in my organization?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nitpicker's Corner&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This isn't an entirely fair comparison, because lots of the details about &lt;em&gt;how&lt;/em&gt; the FinalBuilder project works are hidden away under the GUI abstraction. That's my the point, though: In FinalBuilder the project details aren't all in your face, but they're easy to find and understand if the person who wrote the build process happens to get hit by a bus.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#160;Footnotes:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name="footnote1"&gt;&lt;/a&gt;(*) For the record, we didn't ask Roy to praise FinalBuilder, and we definitely didn't pay him to do so. He said it all off his own bat. I hope he doesn't mind me quoting him. (&lt;a href="#footnote1_top"&gt;back&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a name="footnote2"&gt;&lt;/a&gt;(**) I don't mean to pick on NUnit here. Naturally, OSS development involves different factors which come into play when choosing tools. That said, we'd be happy to offer the NUnit project a free license (or two) of FinalBuilder for use with internal build and configuration management. (&lt;a href="#footnote2_top"&gt;back&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>"The Bus Factor", Software Development practices, and FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/667/The-Bus-Factor-Software-Development-practices-and.aspx</link><category>FinalBuilder</category><pubDate>Wed, 27 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;(This blog post is shamelessly &lt;span style="text-decoration: line-through;"&gt;ripped off from&lt;/span&gt; based on &lt;a href="http://weblogs.asp.net/rosherove"&gt;Roy Osherove&lt;/a&gt;'s praise of FinalBuilder(&lt;a href="#footnote1"&gt;*&lt;/a&gt;)&lt;a name="footnote1_top"&gt;&lt;/a&gt; during a session at TechEd Barcelona last year.)&lt;/p&gt;
&lt;p &gt;
&lt;span style="font-size: 18px;"&gt;&lt;em&gt;&lt;em&gt;"&lt;/em&gt;[&lt;em&gt;The Bus Factor]&lt;/em&gt; means if the developer who wrote [the project] is hit by a bus, you're screwed."&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;- &lt;a href="http://www.hanselman.com/blog/StrippingOutEmptyXmlElementsInAPerformantWayAndTheBusFactor.aspx"&gt;Scott Hanselman&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It's common to talk about the Bus Factor of a software project or a piece of code. Specifically, the Bus Factor is the number of people on your team who need to be "hit by a bus" (or change jobs, or change projects, or move away, or retire, or get sat on by an elephant) before the project is in trouble. The hallmark of a bad Bus Factor is having specialised, hard to access, knowledge which is only understood by one or two people on your team.&lt;/p&gt;
&lt;p&gt;FinalBuilder encourages a good Bus Factor for builds.&lt;/p&gt;
&lt;p&gt;To help demonstrate this, here's the Nant build process for one of my favourite .NET Open Source tools, &lt;a href="http://www.nunit.org"&gt;NUnit&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;(Start scrolling now...)&lt;/p&gt;
&lt;p&gt;&lt;a href="/blogimages/busfactor/NantBuild_1.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_1.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_2.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_2.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_3.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_3.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_4.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_4.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_5.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_5.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_6.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_6.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_7.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_7.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_8.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_8.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_9.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_9.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_10.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_10.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_11.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_11.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_12.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_12.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_13.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_13.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_14.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_14.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_15.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_15.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_16.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_16.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_17.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_17.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_18.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_18.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_19.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_19.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_20.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_20.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_21.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_21.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_22.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_22.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_23.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_23.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_24.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_24.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_25.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_25.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_26.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_26.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_27.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_27.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_28.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_28.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_29.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_29.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_30.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_30.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_31.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_31.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_32.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_32.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_33.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_33.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_34.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_34.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_35.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_35.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_36.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_36.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_37.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_37.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_38.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_38.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_39.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_39.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_40.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_40.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_41.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_41.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_42.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_42.png" /&gt; &lt;/a&gt; &lt;a href="/blogimages/busfactor/NantBuild_43.png"&gt; &lt;img alt="" src="/blogimages/busfactor/Thumbs/NantBuild_43.png" /&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(&lt;a href="#footnote2"&gt;**&lt;/a&gt;)&lt;a name="footnote2_top"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The build process is 2,688 lines of XML, spread amongst 33 XML files. I combined them all into a PDF to create the images shown above. NUnit uses NAnt, but if you're using MSBuild then your build process will look very similar.&lt;/p&gt;
&lt;p&gt;Comparatively speaking, this a simple build process. The entire NUnit codebase is only around 70 thousand lines of C# code. The build above doesn't do anything particularly complex. Imagine how much worse this gets if either the codebase, or the level of functionality, needs to grow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Would you want to be a new developer in charge of working on that build process?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For comparison sake, I recreated most of the NUnit build functionality in FinalBuilder (this is based on a rolling demo that we used at TechEd Barcelona.)&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/busfactor/FinalBuilder_1.png" alt="Main Action List" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_2.png" alt="PreBuild Action List" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_3.png" alt="Build and Test" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_4.png" alt="PostBuild" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/blogimages/busfactor/FinalBuilder_5.png" alt="Clean" /&gt;&lt;/p&gt;
&lt;p&gt;The FinalBuilder project doesn't do absolutely everything that the NAnt script does, but it could be extended to fill in the gaps without changing the appearance drastically from what you see here. The FinalBuilder project also does do some things that the NAnt project does not do - namely version control integration and FTP deployment.&lt;/p&gt;
&lt;p&gt;Ask yourself: &lt;strong&gt;Which type of build process would I like to see deployed in my organization?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nitpicker's Corner&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This isn't an entirely fair comparison, because lots of the details about &lt;em&gt;how&lt;/em&gt; the FinalBuilder project works are hidden away under the GUI abstraction. That's my the point, though: In FinalBuilder the project details aren't all in your face, but they're easy to find and understand if the person who wrote the build process happens to get hit by a bus.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;Footnotes:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name="footnote1"&gt;&lt;/a&gt;(*) For the record, we didn't ask Roy to praise FinalBuilder, and we definitely didn't pay him to do so. He said it all off his own bat. I hope he doesn't mind me quoting him. (&lt;a href="#footnote1_top"&gt;back&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a name="footnote2"&gt;&lt;/a&gt;(**) I don't mean to pick on NUnit here. Naturally, OSS development involves different factors which come into play when choosing tools. That said, we'd be happy to offer the NUnit project a free license (or two) of FinalBuilder for use with internal build and configuration management. (&lt;a href="#footnote2_top"&gt;back&lt;/a&gt;)&lt;/p&gt;</description></item><item><title>Safely Using Relative Paths in Actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/614/Safely-Using-Relative-Paths-in-Actions.aspx</link><category /><pubDate>Tue, 26 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;Using relative paths in a project is a good idea - they make a project more maintainable, readable and portable.&lt;/p&gt;
&lt;p&gt;However, lately I've seen quite a few sample FinalBuilder projects where people are using this kind of relative path in their actions:&lt;/p&gt;
&lt;p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;MySolutionFile.sln&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;.\MyProject\Installer\Project.iss&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;The idea is that if the file is located relative to the project file path, the relative path will resolve to the right directory.&lt;/p&gt;
&lt;p&gt;Great idea, right? Unfortunately, no.&lt;/p&gt;
&lt;p&gt;These relative paths rely on the current Windows working directory for the process. Unfortunately, FinalBuilder and Automise only have limited control over this property. Various API calls (made by actions, scripts or the IDE) might change this directory unexpectedly.&lt;/p&gt;
&lt;p&gt;The safe way to use relative paths in a FinalBuilder or Automise project is to use the variable &lt;strong&gt;%FBPROJECTDIR%&lt;/strong&gt; (called &lt;strong&gt;%PROJECTDIR%&lt;/strong&gt; in Automise.) This variable evaluates to the directory which contains the current project file.&lt;/p&gt;
&lt;p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Unsafe&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Safe&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;MySolution.sln&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\MySolution.sln&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;.\MyProject\&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\MyProject\Installer\Project.iss&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;We recommend defining new project variables to prevent these paths from becoming too long and unwieldy, and to make your project easier to read.&lt;/p&gt;
&lt;p&gt;For instance, you could define a project variable called &lt;em&gt;InstallerPath&lt;/em&gt; and set it to &lt;em&gt;%FBPROJECTDIR%\MyProject\Installer&lt;/em&gt;. Turn on the "Macro" option for the &lt;em&gt;InstallerPath&lt;/em&gt; variable to make sure variable references are expanded each time the variable is read.&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/FBPROJECTDIR-AddVariableMacro.png" alt="Add Macro Variable " installerpath="" /&gt;&lt;/p&gt;</description></item><item><title>Safely Using Relative Paths in Actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/640/Safely-Using-Relative-Paths-in-Actions.aspx</link><category /><pubDate>Tue, 26 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;Using relative paths in a project is a good idea - they make a project more maintainable, readable and portable.&lt;/p&gt;
&lt;p&gt;However, lately I've seen quite a few sample FinalBuilder projects where people are using this kind of relative path in their actions:&lt;/p&gt;
&lt;p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;MySolutionFile.sln&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;.\MyProject\Installer\Project.iss&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;The idea is that if the file is located relative to the project file path, the relative path will resolve to the right directory.&lt;/p&gt;
&lt;p&gt;Great idea, right? Unfortunately, no.&lt;/p&gt;
&lt;p&gt;These relative paths rely on the current Windows working directory for the process. Unfortunately, FinalBuilder and Automise only have limited control over this property. Various API calls (made by actions, scripts or the IDE) might change this directory unexpectedly.&lt;/p&gt;
&lt;p&gt;The safe way to use relative paths in a FinalBuilder or Automise project is to use the variable &lt;strong&gt;%FBPROJECTDIR%&lt;/strong&gt; (called &lt;strong&gt;%PROJECTDIR%&lt;/strong&gt; in Automise.) This variable evaluates to the directory which contains the current project file.&lt;/p&gt;
&lt;p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Unsafe&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Safe&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;MySolution.sln&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\MySolution.sln&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;.\MyProject\&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\MyProject\Installer\Project.iss&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;We recommend defining new project variables to prevent these paths from becoming too long and unwieldy, and to make your project easier to read.&lt;/p&gt;
&lt;p&gt;For instance, you could define a project variable called &lt;em&gt;InstallerPath&lt;/em&gt; and set it to &lt;em&gt;%FBPROJECTDIR%\MyProject\Installer&lt;/em&gt;. Turn on the "Macro" option for the &lt;em&gt;InstallerPath&lt;/em&gt; variable to make sure variable references are expanded each time the variable is read.&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/FBPROJECTDIR-AddVariableMacro.png" alt="Add Macro Variable " installerpath="" /&gt;&lt;/p&gt;</description></item><item><title>Safely Using Relative Paths in Actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/666/Safely-Using-Relative-Paths-in-Actions.aspx</link><category>Automise,FinalBuilder</category><pubDate>Tue, 26 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;Using relative paths in a project is a good idea - they make a project more maintainable, readable and portable.&lt;/p&gt;
&lt;p&gt;However, lately I've seen quite a few sample FinalBuilder projects where people are using this kind of relative path in their actions:&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;MySolutionFile.sln&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;.\MyProject\Installer\Project.iss&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The idea is that if the file is located relative to the project file path, the relative path will resolve to the right directory.&lt;/p&gt;
&lt;p&gt;Great idea, right? Unfortunately, no.&lt;/p&gt;
&lt;p&gt;These relative paths rely on the current Windows working directory for the process. Unfortunately, FinalBuilder and Automise only have limited control over this property. Various API calls (made by actions, scripts or the IDE) might change this directory unexpectedly.&lt;/p&gt;
&lt;p&gt;The safe way to use relative paths in a FinalBuilder or Automise project is to use the variable &lt;strong&gt;%FBPROJECTDIR%&lt;/strong&gt; (called &lt;strong&gt;%PROJECTDIR%&lt;/strong&gt; in Automise.) This variable evaluates to the directory which contains the current project file.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Unsafe&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Safe&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;MySolution.sln&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\MySolution.sln&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;.\MyProject\&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\MyProject\Installer\Project.iss&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
            &lt;td&gt;%FBPROJECTDIR%\..\..\MyOtherProject\MyProject.dproj&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;We recommend defining new project variables to prevent these paths from becoming too long and unwieldy, and to make your project easier to read.&lt;/p&gt;
&lt;p&gt;For instance, you could define a project variable called &lt;em&gt;InstallerPath&lt;/em&gt; and set it to &lt;em&gt;%FBPROJECTDIR%\MyProject\Installer&lt;/em&gt;. Turn on the "Macro" option for the &lt;em&gt;InstallerPath&lt;/em&gt; variable to make sure variable references are expanded each time the variable is read.&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/FBPROJECTDIR-AddVariableMacro.png" alt="Add Macro Variable " /&gt;&lt;/p&gt;</description></item><item><title>XML Actions and the "XPath returned no node" error.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/613/XML-Actions-and-the-XPath-returned-no-node-error.aspx</link><category /><pubDate>Mon, 25 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;(It's been a while since I blogged about anything, so I thought I'd write about this while my coffee kicks in on a Monday morning.)&lt;/p&gt;
&lt;p&gt;An issue which comes up quite often is people seeing this error when they try to use XML actions in FinalBuilder or Automise:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;XPath returned no node : /Project/Import&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The reason is because of the way MSXML deals with document namespaces.&amp;#160; If your XML file uses XML namespaces (and most do), then you need to tweak the action slightly.&lt;/p&gt;
&lt;p&gt;I'm not going to go into XML Namespaces in detail. There are &lt;a href="http://www.w3schools.com/xml/xml_namespaces.asp"&gt;better places to learn about them&lt;/a&gt;. I'll just show you an example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Say you have a Visual Studio 2005 .csproj file (which is really just an XML file wearing a funny hat.) You want to iterate over all of the imported project names with an XML Node Iterator action. If you try to use the XPath &lt;em&gt;/Project/Import&lt;/em&gt;, then you'll see the error I showed above.&lt;/p&gt;
&lt;p&gt;Here's the first line of the .csproj file:&lt;/p&gt;
&lt;p&gt;&lt;xmp&gt;&lt;Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;&lt;/xmp&gt;&lt;/p&gt;
&lt;p&gt;This means the document has a &lt;strong&gt;default XML Namespace&lt;/strong&gt;, which is "&lt;em&gt;http://schemas.microsoft.com/blahblahblah&lt;/em&gt;". This is why MSXML can't follow the XPath properly.&lt;/p&gt;
&lt;p&gt;To fix this, open the XML action and navigate to the "MSXML Parser" page.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/DefaultXMLNamespace.png" alt="MSXML Parser Dialog" /&gt;&lt;/p&gt;
&lt;p&gt;Turn on the "Automatically use namespace prefixes..." checkbox, and type a letter in the field for the default Namespace. I used "x" in the screenshot shown above.&lt;/p&gt;
&lt;p&gt;Now change your XPath from &lt;em&gt;/Project/Import&lt;/em&gt; to:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/x:Project/x:Import&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;It works! Namespace prefix "x" now refers to the default namespace in the document.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pedantic Details&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;There is a way to specify the namespace URI as part of the XPath, without using this prefix feature, but the resulting XPaths are enormous and hard for humans to read.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;If you have namespace prefixes defined as attributes in the document root node, ie &lt;em&gt;s:xmlns="http://www.myfunkyurl.com/namespace"&lt;/em&gt;, then turning on this option will let you use the prefixes in your XPath.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;This is the best solution we've come up with so far. We're planning to revisit this in future and (hopefully) make it all automatic without any manual configuration or custom prefixes.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>XML Actions and the "XPath returned no node" error.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/639/XML-Actions-and-the-XPath-returned-no-node-error.aspx</link><category /><pubDate>Mon, 25 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;(It's been a while since I blogged about anything, so I thought I'd write about this while my coffee kicks in on a Monday morning.)&lt;/p&gt;
&lt;p&gt;An issue which comes up quite often is people seeing this error when they try to use XML actions in FinalBuilder or Automise:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;XPath returned no node : /Project/Import&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The reason is because of the way MSXML deals with document namespaces.&amp;#160; If your XML file uses XML namespaces (and most do), then you need to tweak the action slightly.&lt;/p&gt;
&lt;p&gt;I'm not going to go into XML Namespaces in detail. There are &lt;a href="http://www.w3schools.com/xml/xml_namespaces.asp"&gt;better places to learn about them&lt;/a&gt;. I'll just show you an example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Say you have a Visual Studio 2005 .csproj file (which is really just an XML file wearing a funny hat.) You want to iterate over all of the imported project names with an XML Node Iterator action. If you try to use the XPath &lt;em&gt;/Project/Import&lt;/em&gt;, then you'll see the error I showed above.&lt;/p&gt;
&lt;p&gt;Here's the first line of the .csproj file:&lt;/p&gt;
&lt;p&gt;&lt;xmp&gt;&lt;Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;&lt;/xmp&gt;&lt;/p&gt;
&lt;p&gt;This means the document has a &lt;strong&gt;default XML Namespace&lt;/strong&gt;, which is "&lt;em&gt;http://schemas.microsoft.com/blahblahblah&lt;/em&gt;". This is why MSXML can't follow the XPath properly.&lt;/p&gt;
&lt;p&gt;To fix this, open the XML action and navigate to the "MSXML Parser" page.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/DefaultXMLNamespace.png" alt="MSXML Parser Dialog" /&gt;&lt;/p&gt;
&lt;p&gt;Turn on the "Automatically use namespace prefixes..." checkbox, and type a letter in the field for the default Namespace. I used "x" in the screenshot shown above.&lt;/p&gt;
&lt;p&gt;Now change your XPath from &lt;em&gt;/Project/Import&lt;/em&gt; to:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/x:Project/x:Import&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;It works! Namespace prefix "x" now refers to the default namespace in the document.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pedantic Details&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;There is a way to specify the namespace URI as part of the XPath, without using this prefix feature, but the resulting XPaths are enormous and hard for humans to read.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;If you have namespace prefixes defined as attributes in the document root node, ie &lt;em&gt;s:xmlns="http://www.myfunkyurl.com/namespace"&lt;/em&gt;, then turning on this option will let you use the prefixes in your XPath.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;This is the best solution we've come up with so far. We're planning to revisit this in future and (hopefully) make it all automatic without any manual configuration or custom prefixes.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>XML Actions and the "XPath returned no node" error.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/665/XML-Actions-and-the-XPath-returned-no-node-error.aspx</link><category>Automise,FinalBuilder</category><pubDate>Mon, 25 Feb 2008 06:00:00 GMT</pubDate><description>&lt;p&gt;(It's been a while since I blogged about anything, so I thought I'd write about this while my coffee kicks in on a Monday morning.)&lt;/p&gt;
&lt;p&gt;An issue which comes up quite often is people seeing this error when they try to use XML actions in FinalBuilder or Automise:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;XPath returned no node : /Project/Import&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The reason is because of the way MSXML deals with document namespaces.&amp;nbsp; If your XML file uses XML namespaces (and most do), then you need to tweak the action slightly.&lt;/p&gt;
&lt;p&gt;I'm not going to go into XML Namespaces in detail. There are &lt;a href="http://www.w3schools.com/xml/xml_namespaces.asp"&gt;better places to learn about them&lt;/a&gt;. I'll just show you an example:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Say you have a Visual Studio 2005 .csproj file (which is really just an XML file wearing a funny hat.) You want to iterate over all of the imported project names with an XML Node Iterator action. If you try to use the XPath &lt;em&gt;/Project/Import&lt;/em&gt;, then you'll see the error I showed above.&lt;/p&gt;
&lt;p&gt;Here's the first line of the .csproj file:&lt;/p&gt;
&lt;xmp&gt;&amp;lt;Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;/xmp&gt;
&lt;p&gt;This means the document has a &lt;strong&gt;default XML Namespace&lt;/strong&gt;, which is "&lt;em&gt;http://schemas.microsoft.com/blahblahblah&lt;/em&gt;". This is why MSXML can't follow the XPath properly.&lt;/p&gt;
&lt;p&gt;To fix this, open the XML action and navigate to the "MSXML Parser" page.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/DefaultXMLNamespace.png" alt="MSXML Parser Dialog" /&gt;&lt;/p&gt;
&lt;p&gt;Turn on the "Automatically use namespace prefixes..." checkbox, and type a letter in the field for the default Namespace. I used "x" in the screenshot shown above.&lt;/p&gt;
&lt;p&gt;Now change your XPath from &lt;em&gt;/Project/Import&lt;/em&gt; to:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/x:Project/x:Import&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It works! Namespace prefix "x" now refers to the default namespace in the document.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pedantic Details&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;There is a way to specify the namespace URI as part of the XPath, without using this prefix feature, but the resulting XPaths are enormous and hard for humans to read.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;If you have namespace prefixes defined as attributes in the document root node, ie &lt;em&gt;s:xmlns="http://www.myfunkyurl.com/namespace"&lt;/em&gt;, then turning on this option will let you use the prefixes in your XPath.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;This is the best solution we've come up with so far. We're planning to revisit this in future and (hopefully) make it all automatic without any manual configuration or custom prefixes.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>MSBuild Wish List vs FinalBuilder Feature Set</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/612/MSBuild-Wish-List-vs-FinalBuilder-Feature-Set.aspx</link><category /><pubDate>Fri, 07 Dec 2007 03:47:46 GMT</pubDate><description>&lt;p&gt;The MSBuild Team recently posted a &amp;quot;&lt;a href="http://blogs.msdn.com/msbuild/archive/2007/11/17/how-would-you-spend-100-on-msbuild.aspx"&gt;wish list&lt;/a&gt;&amp;quot; of potential new MSBuild features, and encouraged people to vote on which ones they would like to see in future versions. &lt;a href="http://blogs.msdn.com/msbuild/archive/2007/11/30/response-to-the-feature-poll.aspx"&gt;The results&lt;/a&gt; came out last week.&lt;/p&gt;
&lt;p&gt;We have a lot of respect for MSBuild here at VSoft Technologies. We're committed to making our own MSBuild support top-notch so you can easily interoperate between FinalBuilder and MSBuild projects. However, I wouldn't recommend MSBuild for end-to-end build automation.&lt;/p&gt;
&lt;p&gt;I couldn't help but compare the top ten most popular MSBuild feature requests with existing FinalBuilder features. &lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif';"&gt;  &lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight: bold;"&gt;1)&amp;nbsp; Debugger&lt;br /&gt;
&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;FinalBuilder gives you a full graphical debugging environment - breakpoints, stepping, watches, pause and resume.&lt;/p&gt;
&lt;p&gt;You also get a structured log which quickly allows you to move between your project's structure and it's output. No need to scan text log files for line numbers and target names.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; and &lt;strong&gt;3)&lt;/strong&gt; These both relate to converting existing non-MSBuild-friendly formats to MSBuild. This problem is more or less bypassed if you use FinalBuilder, because the built-in action types give you &amp;quot;first class&amp;quot; access to building these project types.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;strong&gt;4) Visualization&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is another feature that FinalBuilder gives you &amp;quot;out of the box&amp;quot; - FinalBuilder projects are represented as structured trees, and refactoring is often as simple as drag-and-drop.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5) Native Code / VC Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FinalBuilder has built-in support for Visual C++, at the same level of integration as other tools.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6) Distributed Builds&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FinalBuilder doesn't do this either. Yet.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7) Extensible reuseable inline tasks&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every single action in FinalBuilder has extensibility built in via VBScript, JavaScript, and soon PowerShell. (Ssh! Don't tell anyone I told you!)&amp;nbsp; If that's not enough, with ActionStudio you can whip up a custom action type in minutes, using one of these scripting languages or .NET.&lt;/p&gt;
&lt;p&gt;For further extensibility, resuseable action lists can be easily created and called from different parts of your project.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8) Multiprocessor Peformance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Async Action Groups let you automatically schedule parts of your build to run in parallel with others, allowing you to take advantage of multiprocessor architectures.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9) Extensible Functions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;See No. 7. The inclusion of scripting throughout a FinalBuilder project makes it easy to extend specific fields.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10) (Editing UI)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is FinalBuilder's core feature. The FinalBuilder IDE gives you a clear graphical layout of your build process, and combined with debugging and structured logging you have a quick and easy way to move between project structure and project output.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>MSBuild Wish List vs FinalBuilder Feature Set</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/638/MSBuild-Wish-List-vs-FinalBuilder-Feature-Set.aspx</link><category /><pubDate>Fri, 07 Dec 2007 03:47:46 GMT</pubDate><description>&lt;p&gt;The MSBuild Team recently posted a &amp;quot;&lt;a href="http://blogs.msdn.com/msbuild/archive/2007/11/17/how-would-you-spend-100-on-msbuild.aspx"&gt;wish list&lt;/a&gt;&amp;quot; of potential new MSBuild features, and encouraged people to vote on which ones they would like to see in future versions. &lt;a href="http://blogs.msdn.com/msbuild/archive/2007/11/30/response-to-the-feature-poll.aspx"&gt;The results&lt;/a&gt; came out last week.&lt;/p&gt;
&lt;p&gt;We have a lot of respect for MSBuild here at VSoft Technologies. We're committed to making our own MSBuild support top-notch so you can easily interoperate between FinalBuilder and MSBuild projects. However, I wouldn't recommend MSBuild for end-to-end build automation.&lt;/p&gt;
&lt;p&gt;I couldn't help but compare the top ten most popular MSBuild feature requests with existing FinalBuilder features. &lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif';"&gt;  &lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight: bold;"&gt;1)&amp;nbsp; Debugger&lt;br /&gt;
&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;FinalBuilder gives you a full graphical debugging environment - breakpoints, stepping, watches, pause and resume.&lt;/p&gt;
&lt;p&gt;You also get a structured log which quickly allows you to move between your project's structure and it's output. No need to scan text log files for line numbers and target names.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; and &lt;strong&gt;3)&lt;/strong&gt; These both relate to converting existing non-MSBuild-friendly formats to MSBuild. This problem is more or less bypassed if you use FinalBuilder, because the built-in action types give you &amp;quot;first class&amp;quot; access to building these project types.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;strong&gt;4) Visualization&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is another feature that FinalBuilder gives you &amp;quot;out of the box&amp;quot; - FinalBuilder projects are represented as structured trees, and refactoring is often as simple as drag-and-drop.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5) Native Code / VC Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FinalBuilder has built-in support for Visual C++, at the same level of integration as other tools.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6) Distributed Builds&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FinalBuilder doesn't do this either. Yet.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7) Extensible reuseable inline tasks&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every single action in FinalBuilder has extensibility built in via VBScript, JavaScript, and soon PowerShell. (Ssh! Don't tell anyone I told you!)&amp;nbsp; If that's not enough, with ActionStudio you can whip up a custom action type in minutes, using one of these scripting languages or .NET.&lt;/p&gt;
&lt;p&gt;For further extensibility, resuseable action lists can be easily created and called from different parts of your project.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8) Multiprocessor Peformance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Async Action Groups let you automatically schedule parts of your build to run in parallel with others, allowing you to take advantage of multiprocessor architectures.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9) Extensible Functions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;See No. 7. The inclusion of scripting throughout a FinalBuilder project makes it easy to extend specific fields.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10) (Editing UI)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is FinalBuilder's core feature. The FinalBuilder IDE gives you a clear graphical layout of your build process, and combined with debugging and structured logging you have a quick and easy way to move between project structure and project output.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>MSBuild Wish List vs FinalBuilder Feature Set</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/664/MSBuild-Wish-List-vs-FinalBuilder-Feature-Set.aspx</link><category>FinalBuilder</category><pubDate>Fri, 07 Dec 2007 03:47:46 GMT</pubDate><description>&lt;p&gt;The MSBuild Team recently posted a "&lt;a href="http://blogs.msdn.com/msbuild/archive/2007/11/17/how-would-you-spend-100-on-msbuild.aspx"&gt;wish list&lt;/a&gt;" of potential new MSBuild features, and encouraged people to vote on which ones they would like to see in future versions. &lt;a href="http://blogs.msdn.com/msbuild/archive/2007/11/30/response-to-the-feature-poll.aspx"&gt;The results&lt;/a&gt; came out last week.&lt;/p&gt;
&lt;p&gt;We have a lot of respect for MSBuild here at VSoft Technologies. We're committed to making our own MSBuild support top-notch so you can easily interoperate between FinalBuilder and MSBuild projects. However, I wouldn't recommend MSBuild for end-to-end build automation.&lt;/p&gt;
&lt;p&gt;I couldn't help but compare the top ten most popular MSBuild feature requests with existing FinalBuilder features. &lt;span style="font-family: arial, sans-serif; font-size: 10pt;"&gt;  &lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;&lt;span style="font-weight: bold;"&gt;1)&amp;nbsp; Debugger&lt;br /&gt;
&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;FinalBuilder gives you a full graphical debugging environment - breakpoints, stepping, watches, pause and resume.&lt;/p&gt;
&lt;p&gt;You also get a structured log which quickly allows you to move between your project's structure and it's output. No need to scan text log files for line numbers and target names.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; and &lt;strong&gt;3)&lt;/strong&gt; These both relate to converting existing non-MSBuild-friendly formats to MSBuild. This problem is more or less bypassed if you use FinalBuilder, because the built-in action types give you "first class" access to building these project types.&lt;/p&gt;
&lt;p &gt;
&lt;strong&gt;4) Visualization&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is another feature that FinalBuilder gives you "out of the box" - FinalBuilder projects are represented as structured trees, and refactoring is often as simple as drag-and-drop.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5) Native Code / VC Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FinalBuilder has built-in support for Visual C++, at the same level of integration as other tools.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6) Distributed Builds&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FinalBuilder doesn't do this either. Yet.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7) Extensible reuseable inline tasks&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every single action in FinalBuilder has extensibility built in via VBScript, JavaScript, and soon PowerShell. (Ssh! Don't tell anyone I told you!)&amp;nbsp; If that's not enough, with ActionStudio you can whip up a custom action type in minutes, using one of these scripting languages or .NET.&lt;/p&gt;
&lt;p&gt;For further extensibility, resuseable action lists can be easily created and called from different parts of your project.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8) Multiprocessor Peformance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Async Action Groups let you automatically schedule parts of your build to run in parallel with others, allowing you to take advantage of multiprocessor architectures.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9) Extensible Functions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;See No. 7. The inclusion of scripting throughout a FinalBuilder project makes it easy to extend specific fields.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10) (Editing UI)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is FinalBuilder's core feature. The FinalBuilder IDE gives you a clear graphical layout of your build process, and combined with debugging and structured logging you have a quick and easy way to move between project structure and project output.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>"I have Microsoft Team System, why do I need FinalBuilder?"</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/611/I-have-Microsoft-Team-System-why-do-I-need-FinalB.aspx</link><category /><pubDate>Wed, 07 Nov 2007 14:19:44 GMT</pubDate><description>&lt;p&gt;I'm writing this entry from a delegate work area at TechEd Barcelona. We've been talking to a lot of people over the past two days about FinalBuilder.&lt;/p&gt;
&lt;p&gt;Many people have said &amp;quot;Oh, we have Team System. We already have automated builds.&amp;quot; The surprising thing is how many people don't realise what they're missing out on, or that FinalBuilder can integrate directly with Team System.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With Team System you can do this in your build:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Get a fresh copy of your project's source&lt;/li&gt;
    &lt;li&gt;Build one or more Visual Studio 2005 solutions&lt;/li&gt;
    &lt;li&gt;Run Visual Studio tests &amp;amp; Visual Studio code coverage analysis&lt;/li&gt;
    &lt;li&gt;Deploy built applications to a network share&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;... &lt;strong&gt;that's about it&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Not that this is a bad thing - sometimes all you need to do is to build a solution, and you're done. It's still an automated build, and it's a world better than &lt;a href="http://www.codinghorror.com/blog/archives/000988.html"&gt;F5 as a build process&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, &lt;strong&gt;with FinalBuilder you can easily extend Team Build to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Change the build process without editing XML&lt;/li&gt;
    &lt;li&gt;Automatically update and increment version information&lt;/li&gt;
    &lt;li&gt;Build solutions with any version of Visual Studio or MSBuild&lt;/li&gt;
    &lt;li&gt;Create, edit or remove Work Items based on build outcomes&lt;/li&gt;
    &lt;li&gt;Deploy to multiple locations, or via FTP&lt;/li&gt;
    &lt;li&gt;Build third party projects&lt;/li&gt;
    &lt;li&gt;Build installers&lt;/li&gt;
    &lt;li&gt;Run tests using different test frameworks&lt;/li&gt;
    &lt;li&gt;Build multiple versions or editions of the same product&lt;/li&gt;
    &lt;li&gt;Build legacy code (possibly using different tools)&lt;/li&gt;
    &lt;li&gt;Retrieve source code from legacy source repositories&lt;/li&gt;
    &lt;li&gt;Generate structured build logs, with the ability to instantly jump to any points of failure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=20"&gt;FinalBuilder slots directly into Team Build as a build engine, in place of (or beside) MSBuild&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At TechEd, many people have recognised that they face one or more of these scenarios. A few have no other build requirements, but a lot of people have said &amp;quot;Oh, we've been doing that manually&amp;quot; or &amp;quot;Yes, we've been doing this with MSBuild but it's hard and it keeps breaking.&amp;quot;&lt;/p&gt;
&lt;p&gt;These are the cases where FinalBuilder can help create a true end-to-end build and release system, one which saves time and money and helps safeguard build quality and avoid last-minute surprises.&lt;/p&gt;
&lt;p&gt;... and no more XML files!&lt;/p&gt;</description></item><item><title>"I have Microsoft Team System, why do I need FinalBuilder?"</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/637/I-have-Microsoft-Team-System-why-do-I-need-FinalB.aspx</link><category /><pubDate>Wed, 07 Nov 2007 14:19:44 GMT</pubDate><description>&lt;p&gt;I'm writing this entry from a delegate work area at TechEd Barcelona. We've been talking to a lot of people over the past two days about FinalBuilder.&lt;/p&gt;
&lt;p&gt;Many people have said &amp;quot;Oh, we have Team System. We already have automated builds.&amp;quot; The surprising thing is how many people don't realise what they're missing out on, or that FinalBuilder can integrate directly with Team System.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With Team System you can do this in your build:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Get a fresh copy of your project's source&lt;/li&gt;
    &lt;li&gt;Build one or more Visual Studio 2005 solutions&lt;/li&gt;
    &lt;li&gt;Run Visual Studio tests &amp;amp; Visual Studio code coverage analysis&lt;/li&gt;
    &lt;li&gt;Deploy built applications to a network share&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;... &lt;strong&gt;that's about it&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Not that this is a bad thing - sometimes all you need to do is to build a solution, and you're done. It's still an automated build, and it's a world better than &lt;a href="http://www.codinghorror.com/blog/archives/000988.html"&gt;F5 as a build process&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, &lt;strong&gt;with FinalBuilder you can easily extend Team Build to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Change the build process without editing XML&lt;/li&gt;
    &lt;li&gt;Automatically update and increment version information&lt;/li&gt;
    &lt;li&gt;Build solutions with any version of Visual Studio or MSBuild&lt;/li&gt;
    &lt;li&gt;Create, edit or remove Work Items based on build outcomes&lt;/li&gt;
    &lt;li&gt;Deploy to multiple locations, or via FTP&lt;/li&gt;
    &lt;li&gt;Build third party projects&lt;/li&gt;
    &lt;li&gt;Build installers&lt;/li&gt;
    &lt;li&gt;Run tests using different test frameworks&lt;/li&gt;
    &lt;li&gt;Build multiple versions or editions of the same product&lt;/li&gt;
    &lt;li&gt;Build legacy code (possibly using different tools)&lt;/li&gt;
    &lt;li&gt;Retrieve source code from legacy source repositories&lt;/li&gt;
    &lt;li&gt;Generate structured build logs, with the ability to instantly jump to any points of failure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=20"&gt;FinalBuilder slots directly into Team Build as a build engine, in place of (or beside) MSBuild&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At TechEd, many people have recognised that they face one or more of these scenarios. A few have no other build requirements, but a lot of people have said &amp;quot;Oh, we've been doing that manually&amp;quot; or &amp;quot;Yes, we've been doing this with MSBuild but it's hard and it keeps breaking.&amp;quot;&lt;/p&gt;
&lt;p&gt;These are the cases where FinalBuilder can help create a true end-to-end build and release system, one which saves time and money and helps safeguard build quality and avoid last-minute surprises.&lt;/p&gt;
&lt;p&gt;... and no more XML files!&lt;/p&gt;</description></item><item><title>"I have Microsoft Team System, why do I need FinalBuilder?"</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/663/I-have-Microsoft-Team-System-why-do-I-need-FinalB.aspx</link><category>FinalBuilder,TFS</category><pubDate>Wed, 07 Nov 2007 14:19:44 GMT</pubDate><description>&lt;p&gt;I'm writing this entry from a delegate work area at TechEd Barcelona. We've been talking to a lot of people over the past two days about FinalBuilder.&lt;/p&gt;
&lt;p&gt;Many people have said "Oh, we have Team System. We already have automated builds." The surprising thing is how many people don't realise what they're missing out on, or that FinalBuilder can integrate directly with Team System.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With Team System you can do this in your build:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Get a fresh copy of your project's source&lt;/li&gt;
    &lt;li&gt;Build one or more Visual Studio 2005 solutions&lt;/li&gt;
    &lt;li&gt;Run Visual Studio tests &amp;amp; Visual Studio code coverage analysis&lt;/li&gt;
    &lt;li&gt;Deploy built applications to a network share&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;... &lt;strong&gt;that's about it&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Not that this is a bad thing - sometimes all you need to do is to build a solution, and you're done. It's still an automated build, and it's a world better than &lt;a href="http://www.codinghorror.com/blog/archives/000988.html"&gt;F5 as a build process&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, &lt;strong&gt;with FinalBuilder you can easily extend Team Build to:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Change the build process without editing XML&lt;/li&gt;
    &lt;li&gt;Automatically update and increment version information&lt;/li&gt;
    &lt;li&gt;Build solutions with any version of Visual Studio or MSBuild&lt;/li&gt;
    &lt;li&gt;Create, edit or remove Work Items based on build outcomes&lt;/li&gt;
    &lt;li&gt;Deploy to multiple locations, or via FTP&lt;/li&gt;
    &lt;li&gt;Build third party projects&lt;/li&gt;
    &lt;li&gt;Build installers&lt;/li&gt;
    &lt;li&gt;Run tests using different test frameworks&lt;/li&gt;
    &lt;li&gt;Build multiple versions or editions of the same product&lt;/li&gt;
    &lt;li&gt;Build legacy code (possibly using different tools)&lt;/li&gt;
    &lt;li&gt;Retrieve source code from legacy source repositories&lt;/li&gt;
    &lt;li&gt;Generate structured build logs, with the ability to instantly jump to any points of failure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=20"&gt;FinalBuilder slots directly into Team Build as a build engine, in place of (or beside) MSBuild&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At TechEd, many people have recognised that they face one or more of these scenarios. A few have no other build requirements, but a lot of people have said "Oh, we've been doing that manually" or "Yes, we've been doing this with MSBuild but it's hard and it keeps breaking."&lt;/p&gt;
&lt;p&gt;These are the cases where FinalBuilder can help create a true end-to-end build and release system, one which saves time and money and helps safeguard build quality and avoid last-minute surprises.&lt;/p&gt;
&lt;p&gt;... and no more XML files!&lt;/p&gt;</description></item><item><title>Blogging from TechEd in Barcelona</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/610/Blogging-from-TechEd-in-Barcelona.aspx</link><category /><pubDate>Mon, 05 Nov 2007 06:00:00 GMT</pubDate><description>&lt;p&gt;After a great two weeks holidaying in Germany and Spain, I'm back at work as we set up our booth at TechEd Barcelona. I'm looking forward to seeing some demos of new Microsoft technologies.&lt;/p&gt;
&lt;p&gt;We also have some exciting things to show in our booth here - a FinalBuilder build integrated with Team Foundation Server, some sneak peeks of the next FinalBuilder version, and some nifty Automise demos. Come by the Exhibitor Hall if you get a chance.&lt;/p&gt;</description></item><item><title>Blogging from TechEd in Barcelona</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/636/Blogging-from-TechEd-in-Barcelona.aspx</link><category /><pubDate>Mon, 05 Nov 2007 06:00:00 GMT</pubDate><description>&lt;p&gt;After a great two weeks holidaying in Germany and Spain, I'm back at work as we set up our booth at TechEd Barcelona. I'm looking forward to seeing some demos of new Microsoft technologies.&lt;/p&gt;
&lt;p&gt;We also have some exciting things to show in our booth here - a FinalBuilder build integrated with Team Foundation Server, some sneak peeks of the next FinalBuilder version, and some nifty Automise demos. Come by the Exhibitor Hall if you get a chance.&lt;/p&gt;</description></item><item><title>Blogging from TechEd in Barcelona</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/662/Blogging-from-TechEd-in-Barcelona.aspx</link><category /><pubDate>Mon, 05 Nov 2007 06:00:00 GMT</pubDate><description>&lt;p&gt;After a great two weeks holidaying in Germany and Spain, I'm back at work as we set up our booth at TechEd Barcelona. I'm looking forward to seeing some demos of new Microsoft technologies.&lt;/p&gt;
&lt;p&gt;We also have some exciting things to show in our booth here - a FinalBuilder build integrated with Team Foundation Server, some sneak peeks of the next FinalBuilder version, and some nifty Automise demos. Come by the Exhibitor Hall if you get a chance.&lt;/p&gt;</description></item><item><title>Window resizing issues on 64 bit Windows</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/406/Window-resizing-issues-on-64-bit-Windows.aspx</link><category>FinalBuilder</category><pubDate>Wed, 17 Oct 2007 04:20:17 GMT</pubDate><description>&lt;p&gt;I just spent the better part of 3 days trying to find out why the FinalBuilder IDE was not resizing properly on my machine. I have Windows Vista Business X64 on my machine, and found that code that worked perfectly on XP was not working on Vista. After many hours of debugging our source and the source to some third party components, I got nowhere.&amp;nbsp; I realised that I hadn't tested this on another Vista X64 machine, and sure enough... it worked fine on another machine. &lt;br /&gt;
&lt;br /&gt;
My first thought was to update my video drivers, and after rebooting and logging in to the machine, it seems the problem was resolved. However, as I was sitting there, resizing the window of my test application, the problem suddenly re-appeared! Since there were other applications still starting up at the time, it became a process of elimination.&lt;/p&gt;
&lt;p&gt;The culprit is Logitech SetPoint, which came with my Wireless keyboard &amp;amp; mouse (which I no longer use as they died when the office was flooded). Close SetPoint, and my test app (and FinalBuilder and Automise) resize properly. Start it up again and the problem is back.&lt;br /&gt;
&lt;br /&gt;
Since find the cause, we have tested on Vista 64 bit, Vista 32bit, XP 64 bit and XP 32bit. The problem only shows on 64 bit versions of windows.&amp;nbsp; I suspect this issue is one that Jordan Russell talks about here :&lt;/p&gt;
&lt;p&gt;&lt;a href="http://news.jrsoftware.org/news/toolbar2000/msg07779.html"&gt;http://news.jrsoftware.org/news/toolbar2000/msg07779.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So to sum up, if you see applications not resizing or not painting properly when resizing on 64 bit windows, see whether you have Logitech SetPoint running or not.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Automising the Calculator</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/605/Automising-the-Calculator.aspx</link><category /><pubDate>Fri, 10 Aug 2007 01:06:55 GMT</pubDate><description>&lt;div align="left"&gt;&lt;br /&gt;&lt;object width="640" height="480" align="middle" data="/Portals/0/LinkedFiles/FlowPlayerWhite.swf" type="application/x-shockwave-flash" id="FlowPlayer"&gt;&lt;br /&gt;&lt;param value="sameDomain" name="allowScriptAccess" /&gt;&lt;br /&gt;&lt;param value="/Portals/0/LinkedFiles/FlowPlayer.swf" name="movie" /&gt;&lt;br /&gt;&lt;param value="high" name="quality" /&gt;&lt;br /&gt;&lt;param value="noScale" name="scale" /&gt;&lt;br /&gt;&lt;param value="transparent" name="wmode" /&gt;&lt;br /&gt;&lt;param value="config={videoFile: 'CalculatorDemo.flv', hideControls: true, initialScale: 'orig', autoPlay: false, loop: false, showLoopButton: false, showMenu: false, splashImageFile: '/Portals/0/LinkedFiles/CalculatorDemoSplash.jpg'}" name="flashvars" /&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;NB: The project includes delay actions so you can see what's going on. Disable them, and it will run even faster!&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Want to try it yourself? Download the &lt;a href="/LinkClick.aspx?link=125&amp;tabid=70"&gt;Automise 2 Release Candidate&lt;/a&gt;, and the &lt;a href="http://www.finalbuilder.com/Portals/0/LinkedFiles/Calculator Demo.atz2"&gt;Calculator Demo project file&lt;/a&gt; (the demo is also included in the Automise 2 installation, under Examples\GUI Automation.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;This demo may not be particularly useful, but it shows off some of the power of the GUI Automation actions included in Automise 2. The demo project was created and tested in a matter of minutes. I've written a &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;ctl=ArticleView&amp;articleId=24"&gt;longer article on the subject&lt;/a&gt;, if you are interested in reading some more.&lt;/p&gt;</description></item><item><title>Automising the Calculator</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/631/Automising-the-Calculator.aspx</link><category /><pubDate>Fri, 10 Aug 2007 01:06:55 GMT</pubDate><description>&lt;div align="left"&gt;&lt;br /&gt;&lt;object width="640" height="480" align="middle" data="/Portals/0/LinkedFiles/FlowPlayerWhite.swf" type="application/x-shockwave-flash" id="FlowPlayer"&gt;&lt;br /&gt;&lt;param value="sameDomain" name="allowScriptAccess" /&gt;&lt;br /&gt;&lt;param value="/Portals/0/LinkedFiles/FlowPlayer.swf" name="movie" /&gt;&lt;br /&gt;&lt;param value="high" name="quality" /&gt;&lt;br /&gt;&lt;param value="noScale" name="scale" /&gt;&lt;br /&gt;&lt;param value="transparent" name="wmode" /&gt;&lt;br /&gt;&lt;param value="config={videoFile: 'CalculatorDemo.flv', hideControls: true, initialScale: 'orig', autoPlay: false, loop: false, showLoopButton: false, showMenu: false, splashImageFile: '/Portals/0/LinkedFiles/CalculatorDemoSplash.jpg'}" name="flashvars" /&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;NB: The project includes delay actions so you can see what's going on. Disable them, and it will run even faster!&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Want to try it yourself? Download the &lt;a href="/LinkClick.aspx?link=125&amp;tabid=70"&gt;Automise 2 Release Candidate&lt;/a&gt;, and the &lt;a href="http://www.finalbuilder.com/Portals/0/LinkedFiles/Calculator Demo.atz2"&gt;Calculator Demo project file&lt;/a&gt; (the demo is also included in the Automise 2 installation, under Examples\GUI Automation.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;This demo may not be particularly useful, but it shows off some of the power of the GUI Automation actions included in Automise 2. The demo project was created and tested in a matter of minutes. I've written a &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;ctl=ArticleView&amp;articleId=24"&gt;longer article on the subject&lt;/a&gt;, if you are interested in reading some more.&lt;/p&gt;</description></item><item><title>Automising the Calculator</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/657/Automising-the-Calculator.aspx</link><category>Automise</category><pubDate>Fri, 10 Aug 2007 01:06:55 GMT</pubDate><description>&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;object width="640" height="480" align="middle" data="/Portals/0/LinkedFiles/FlowPlayerWhite.swf" type="application/x-shockwave-flash" id="FlowPlayer"&gt;
&lt;param="" value="sameDomain" name="allowScriptAccess"&gt;
&lt;param="" value="/Portals/0/LinkedFiles/FlowPlayer.swf" name="movie"&gt;
&lt;param="" value="high" name="quality"&gt;
&lt;param="" value="noScale" name="scale"&gt;
&lt;param="" value="transparent" name="wmode"&gt;
&lt;/param=""&gt;
&lt;/param=""&gt;
&lt;/param=""&gt;
&lt;/param=""&gt;
&lt;/param=""&gt;
&lt;/object&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;NB: The project includes delay actions so you can see what's going on. Disable them, and it will run even faster!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Want to try it yourself? Download the &lt;a href="/LinkClick.aspx?link=125&amp;amp;tabid=70"&gt;Automise 2 Release Candidate&lt;/a&gt;, and the &lt;a href="http://www.finalbuilder.com/Portals/0/LinkedFiles/Calculator Demo.atz2"&gt;Calculator Demo project file&lt;/a&gt; (the demo is also included in the Automise 2 installation, under Examples\GUI Automation.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;This demo may not be particularly useful, but it shows off some of the power of the GUI Automation actions included in Automise 2. The demo project was created and tested in a matter of minutes. I've written a &lt;a href="http://www.finalbuilder.com/Resources/Articles/ID/24/Automating-GUI-Applications-with-Automise-2.aspx"&gt;longer article on the subject&lt;/a&gt;, if you are interested in reading some more.&lt;/p&gt;</description></item><item><title>CruiseControl.NET Plugin Released</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/603/CruiseControlNET-Plugin-Released.aspx</link><category /><pubDate>Thu, 19 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;EDIT: &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET version 1.3&lt;/a&gt; now ships with an integrated &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/FinalBuilder+Task"&gt;FinalBuilder Task&lt;/a&gt;. No more need for a plugin.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A few people have been enjoying this for a while, but you can now download an installer for the FinalBuilder CruiseControl.NET plugin. The plugin makes FinalBuilder available as a CruiseControl.NET build engine for continuous integration. The plugin is free, and works with both&amp;nbsp;FinalBuilder 3 and 4 (although FB 3 users will need the Professional Edition.)&lt;/p&gt;
&lt;p&gt;The current version of the plugin is for &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET 1.0&lt;/a&gt;, and we will make sure it&amp;nbsp;keeps up to date&amp;nbsp;with the current stable release.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>CruiseControl.NET Plugin Released</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/629/CruiseControlNET-Plugin-Released.aspx</link><category /><pubDate>Thu, 19 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;EDIT: &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET version 1.3&lt;/a&gt; now ships with an integrated &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/FinalBuilder+Task"&gt;FinalBuilder Task&lt;/a&gt;. No more need for a plugin.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A few people have been enjoying this for a while, but you can now download an installer for the FinalBuilder CruiseControl.NET plugin. The plugin makes FinalBuilder available as a CruiseControl.NET build engine for continuous integration. The plugin is free, and works with both&amp;nbsp;FinalBuilder 3 and 4 (although FB 3 users will need the Professional Edition.)&lt;/p&gt;
&lt;p&gt;The current version of the plugin is for &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET 1.0&lt;/a&gt;, and we will make sure it&amp;nbsp;keeps up to date&amp;nbsp;with the current stable release.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>CruiseControl.NET Plugin Released</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/655/CruiseControlNET-Plugin-Released.aspx</link><category /><pubDate>Thu, 19 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;EDIT: &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET version 1.3&lt;/a&gt; now ships with an integrated &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/FinalBuilder+Task"&gt;FinalBuilder Task&lt;/a&gt;. No more need for a plugin.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A few people have been enjoying this for a while, but you can now download an installer for the FinalBuilder CruiseControl.NET plugin. The plugin makes FinalBuilder available as a CruiseControl.NET build engine for continuous integration. The plugin is free, and works with both&amp;nbsp;FinalBuilder 3 and 4 (although FB 3 users will need the Professional Edition.)&lt;/p&gt;
&lt;p&gt;The current version of the plugin is for &lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET 1.0&lt;/a&gt;, and we will make sure it&amp;nbsp;keeps up to date&amp;nbsp;with the current stable release.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Runtime Assembly Reference Loading and the CLR</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/608/Runtime-Assembly-Reference-Loading-and-the-CLR.aspx</link><category /><pubDate>Fri, 06 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;Following on from my &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=239"&gt;earlier post&lt;/a&gt; about Assembly resolution and CLR versions, I have an observation to share about the .NET Just-In-Time compiler and the resolution of Assembly references. It's a fairly simple observation, but it came as a surprise to me.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;DISCLAIMER: This is just an observation. I can't find any real concrete specification of the behaviour I'm describing. My supporting documents are &lt;a href="http://research.microsoft.com/~zorn/mre04/PreJit%20Talk.ppt"&gt;this PowerPoint presentation&lt;/a&gt;, and &lt;a href="http://pubs.doc.ic.ac.uk/FlexibleLinking/FlexibleLinking.pdf"&gt;this doctoral thesis&lt;/a&gt;.&amp;nbsp; If you have better references, or consider this either blindingly obvious or blindingly wrong, please post in the comments.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I used to think that if &amp;quot;Assembly A&amp;quot; references another assembly, &amp;quot;Assembly B&amp;quot;, then Assembly B is loaded (or at least validated) when Assembly A is loaded. If Assembly B is missing, Assembly A won't run. Am I right?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It appears I am not right. The rule is that Assembly B will not normally be resolved (ie checked for existence and loaded) until the JIT compiler encounters some code which references a type belonging to that assembly. You could delete Assembly B entirely and Assembly A would work perfectly, providing it didn't touch Assembly B's types in any of the codepaths which you take.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I put together a simple pair of C# projects which demonstrate this behaviour. You can download them &lt;a href="http://www.finalbuilder.com/blogimages/angus/AssemblyResolution/Assembly%20Resolution%20Example.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The projects build two assemblies, ResolutionTest.exe and MissingAssembly.dll (such creative names!)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/folderBefore.png" alt="One .DLL and One .EXE File" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MissingAssembly contains one class, MissingClass. ResolutionTest contains a static Program class and another class, MainClass. Here is the code for MainClass:&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/mainClass.png" alt="MainClass Source" /&gt;&lt;/p&gt;
&lt;p&gt;(This is the executive summary version. The actual source has some other attributes and comments about inlining. I'll get to that in a minute.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here's what happens when it runs:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/appBefore.png" alt="Normal Execution" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;No great surprises. A MainClass object is instantiated. The constructor calls the SubMethod() method, which then creates a new object of type MissingClass from the MissingAssembly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;Now, suppose we delete MissingAssembly:&lt;/p&gt;
&lt;p align="left"&gt;&lt;img align="left" src="/blogimages/angus/AssemblyResolution/folderAfter.png" alt="Just an EXE, no DLL" /&gt;&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/appAfter.png" alt="Uh-oh! An exception!" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;An exception is raised because it can't find the MissingAssembly object. However, the MainClass() constructor still executes. The FileNotFoundException occurs when the call to SubMethod() is made. The JITter has examined SubMethod() and said &amp;quot;I need a MissingClass which is held in assembly MissingAssembly. I'd better go find that...&amp;quot;, and then failed to find it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;
&lt;h3&gt;Why is this worth knowing?&lt;/h3&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Because (I think) it means that you can &amp;quot;cheat&amp;quot; when binding assemblies. Previously I'd used late binding&amp;nbsp; via Reflection (&lt;a href="http://www.c-sharpcorner.com/UploadFile/samhaidar/LateBindingWithReflection09122005053810AM/LateBindingWithReflection.aspx"&gt;like this&lt;/a&gt;) when I didn't know if something might or might not be installed on the end user's machine. As far as I can tell, this approach is not wholly necessary - If the &amp;quot;third party&amp;quot; type references are all encapsulated nicely away from the &amp;quot;main&amp;quot; code, it should be possible to just use exception handling to react if the types aren't available at JIT-time.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It's also worth knowing because even if you call Assembly.Load() at runtime without any problems, it doesn't mean all the references have resolved. The loaded assembly could still break when you go to use it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Some things to remember&lt;/strong&gt;:&lt;/h3&gt;
&lt;ul style="list-style-type: disc;"&gt;
    &lt;li&gt;This isn't something that you can should use every day. You can dig yourself a big hole of shoddy design by doing this. In my case, I just needed a clean way to disable some functionality and fail cleanly when optional assemblies weren't available.&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;The assemblies still have to be available when the source is compiled to IL. You can't compile IL which references types or assemblies that do not exist.&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;This knowledge can help you &lt;a href="http://msdn2.microsoft.com/en-us/library/ms998547.aspx#scalenetchapt05_topic33"&gt;optimize your code&lt;/a&gt;, by controlling when extra loading and JITting is performed.&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;There is a chance that the JITter will &lt;a href="http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx"&gt;inline lightweight method calls&lt;/a&gt;. If MainClass.SubMethod() is inlined into the constructor, then it's possible that the constructor will fail. I originally tried to avoid this by attaching &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx"&gt;MethodImplOptions.NoInlining&lt;/a&gt; to SubMethod(). However, in the end I couldn't make it inline the code under any circumstances. It's possible that the JITter notices the unloaded type inside the method, and decides not to inline for that reason.&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;It's a bit of a hack, but you could dynamically link to one of several available assemblies at runtime, by going through a series of alternative wrapper classes (each referencing different assemblies) and finding the one which loads successfully. If all of the wrappers implemented a common interface, you could then use the components interchangeably with acceptable performance. A more generalised CLR-supported model of this is described in the doctoral thesis I linked to above (he demonstrates dynamically choosing an alternative to Windows.Forms for GUI display when running &lt;a href="http://research.microsoft.com/programs/europe/rotor/"&gt;Rotor&lt;/a&gt; on OS X or Linux.)&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;This probably doesn't work if you've used ngen.exe, for obvious reasons.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Runtime Assembly Reference Loading and the CLR</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/634/Runtime-Assembly-Reference-Loading-and-the-CLR.aspx</link><category /><pubDate>Fri, 06 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;Following on from my &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=239"&gt;earlier post&lt;/a&gt; about Assembly resolution and CLR versions, I have an observation to share about the .NET Just-In-Time compiler and the resolution of Assembly references. It's a fairly simple observation, but it came as a surprise to me.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;DISCLAIMER: This is just an observation. I can't find any real concrete specification of the behaviour I'm describing. My supporting documents are &lt;a href="http://research.microsoft.com/~zorn/mre04/PreJit%20Talk.ppt"&gt;this PowerPoint presentation&lt;/a&gt;, and &lt;a href="http://pubs.doc.ic.ac.uk/FlexibleLinking/FlexibleLinking.pdf"&gt;this doctoral thesis&lt;/a&gt;.&amp;nbsp; If you have better references, or consider this either blindingly obvious or blindingly wrong, please post in the comments.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I used to think that if &amp;quot;Assembly A&amp;quot; references another assembly, &amp;quot;Assembly B&amp;quot;, then Assembly B is loaded (or at least validated) when Assembly A is loaded. If Assembly B is missing, Assembly A won't run. Am I right?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It appears I am not right. The rule is that Assembly B will not normally be resolved (ie checked for existence and loaded) until the JIT compiler encounters some code which references a type belonging to that assembly. You could delete Assembly B entirely and Assembly A would work perfectly, providing it didn't touch Assembly B's types in any of the codepaths which you take.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I put together a simple pair of C# projects which demonstrate this behaviour. You can download them &lt;a href="http://www.finalbuilder.com/blogimages/angus/AssemblyResolution/Assembly%20Resolution%20Example.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The projects build two assemblies, ResolutionTest.exe and MissingAssembly.dll (such creative names!)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/folderBefore.png" alt="One .DLL and One .EXE File" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MissingAssembly contains one class, MissingClass. ResolutionTest contains a static Program class and another class, MainClass. Here is the code for MainClass:&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/mainClass.png" alt="MainClass Source" /&gt;&lt;/p&gt;
&lt;p&gt;(This is the executive summary version. The actual source has some other attributes and comments about inlining. I'll get to that in a minute.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here's what happens when it runs:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/appBefore.png" alt="Normal Execution" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;No great surprises. A MainClass object is instantiated. The constructor calls the SubMethod() method, which then creates a new object of type MissingClass from the MissingAssembly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;Now, suppose we delete MissingAssembly:&lt;/p&gt;
&lt;p align="left"&gt;&lt;img align="left" src="/blogimages/angus/AssemblyResolution/folderAfter.png" alt="Just an EXE, no DLL" /&gt;&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/appAfter.png" alt="Uh-oh! An exception!" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;An exception is raised because it can't find the MissingAssembly object. However, the MainClass() constructor still executes. The FileNotFoundException occurs when the call to SubMethod() is made. The JITter has examined SubMethod() and said &amp;quot;I need a MissingClass which is held in assembly MissingAssembly. I'd better go find that...&amp;quot;, and then failed to find it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;
&lt;h3&gt;Why is this worth knowing?&lt;/h3&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Because (I think) it means that you can &amp;quot;cheat&amp;quot; when binding assemblies. Previously I'd used late binding&amp;nbsp; via Reflection (&lt;a href="http://www.c-sharpcorner.com/UploadFile/samhaidar/LateBindingWithReflection09122005053810AM/LateBindingWithReflection.aspx"&gt;like this&lt;/a&gt;) when I didn't know if something might or might not be installed on the end user's machine. As far as I can tell, this approach is not wholly necessary - If the &amp;quot;third party&amp;quot; type references are all encapsulated nicely away from the &amp;quot;main&amp;quot; code, it should be possible to just use exception handling to react if the types aren't available at JIT-time.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It's also worth knowing because even if you call Assembly.Load() at runtime without any problems, it doesn't mean all the references have resolved. The loaded assembly could still break when you go to use it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Some things to remember&lt;/strong&gt;:&lt;/h3&gt;
&lt;ul style="list-style-type: disc;"&gt;
    &lt;li&gt;This isn't something that you can should use every day. You can dig yourself a big hole of shoddy design by doing this. In my case, I just needed a clean way to disable some functionality and fail cleanly when optional assemblies weren't available.&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;The assemblies still have to be available when the source is compiled to IL. You can't compile IL which references types or assemblies that do not exist.&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;This knowledge can help you &lt;a href="http://msdn2.microsoft.com/en-us/library/ms998547.aspx#scalenetchapt05_topic33"&gt;optimize your code&lt;/a&gt;, by controlling when extra loading and JITting is performed.&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;There is a chance that the JITter will &lt;a href="http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx"&gt;inline lightweight method calls&lt;/a&gt;. If MainClass.SubMethod() is inlined into the constructor, then it's possible that the constructor will fail. I originally tried to avoid this by attaching &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx"&gt;MethodImplOptions.NoInlining&lt;/a&gt; to SubMethod(). However, in the end I couldn't make it inline the code under any circumstances. It's possible that the JITter notices the unloaded type inside the method, and decides not to inline for that reason.&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;It's a bit of a hack, but you could dynamically link to one of several available assemblies at runtime, by going through a series of alternative wrapper classes (each referencing different assemblies) and finding the one which loads successfully. If all of the wrappers implemented a common interface, you could then use the components interchangeably with acceptable performance. A more generalised CLR-supported model of this is described in the doctoral thesis I linked to above (he demonstrates dynamically choosing an alternative to Windows.Forms for GUI display when running &lt;a href="http://research.microsoft.com/programs/europe/rotor/"&gt;Rotor&lt;/a&gt; on OS X or Linux.)&lt;/li&gt;
    &lt;li style="padding: 5px;"&gt;This probably doesn't work if you've used ngen.exe, for obvious reasons.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Runtime Assembly Reference Loading and the CLR</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/660/Runtime-Assembly-Reference-Loading-and-the-CLR.aspx</link><category>.NET</category><pubDate>Fri, 06 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;Following on from my &lt;a href="http://www.finalbuilder.com/blogs.aspx?EntryID=239"&gt;earlier post&lt;/a&gt; about Assembly resolution and CLR versions, I have an observation to share about the .NET Just-In-Time compiler and the resolution of Assembly references. It's a fairly simple observation, but it came as a surprise to me.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;DISCLAIMER: This is just an observation. I can't find any real concrete specification of the behaviour I'm describing. My supporting documents are &lt;a href="http://research.microsoft.com/~zorn/mre04/PreJit%20Talk.ppt"&gt;this PowerPoint presentation&lt;/a&gt;, and &lt;a href="http://pubs.doc.ic.ac.uk/FlexibleLinking/FlexibleLinking.pdf"&gt;this doctoral thesis&lt;/a&gt;.&amp;nbsp; If you have better references, or consider this either blindingly obvious or blindingly wrong, please post in the comments.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I used to think that if "Assembly A" references another assembly, "Assembly B", then Assembly B is loaded (or at least validated) when Assembly A is loaded. If Assembly B is missing, Assembly A won't run. Am I right?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It appears I am not right. The rule is that Assembly B will not normally be resolved (ie checked for existence and loaded) until the JIT compiler encounters some code which references a type belonging to that assembly. You could delete Assembly B entirely and Assembly A would work perfectly, providing it didn't touch Assembly B's types in any of the codepaths which you take.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I put together a simple pair of C# projects which demonstrate this behaviour. You can download them &lt;a href="http://www.finalbuilder.com/blogimages/angus/AssemblyResolution/Assembly%20Resolution%20Example.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The projects build two assemblies, ResolutionTest.exe and MissingAssembly.dll (such creative names!)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/folderBefore.png" alt="One .DLL and One .EXE File" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MissingAssembly contains one class, MissingClass. ResolutionTest contains a static Program class and another class, MainClass. Here is the code for MainClass:&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/mainClass.png" alt="MainClass Source" /&gt;&lt;/p&gt;
&lt;p&gt;(This is the executive summary version. The actual source has some other attributes and comments about inlining. I'll get to that in a minute.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here's what happens when it runs:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/appBefore.png" alt="Normal Execution" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;No great surprises. A MainClass object is instantiated. The constructor calls the SubMethod() method, which then creates a new object of type MissingClass from the MissingAssembly.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Now, suppose we delete MissingAssembly:&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;img align="left" src="/blogimages/angus/AssemblyResolution/folderAfter.png" alt="Just an EXE, no DLL" style="float: left;" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/AssemblyResolution/appAfter.png" alt="Uh-oh! An exception!" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;An exception is raised because it can't find the MissingAssembly object. However, the MainClass() constructor still executes. The FileNotFoundException occurs when the call to SubMethod() is made. The JITter has examined SubMethod() and said "I need a MissingClass which is held in assembly MissingAssembly. I'd better go find that...", and then failed to find it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Why is this worth knowing?&lt;/strong&gt;&lt;/h3&gt;
&lt;strong&gt;
&lt;/strong&gt;
&lt;p&gt;Because (I think) it means that you can "cheat" when binding assemblies. Previously I'd used late binding&amp;nbsp; via Reflection (&lt;a href="http://www.c-sharpcorner.com/UploadFile/samhaidar/LateBindingWithReflection09122005053810AM/LateBindingWithReflection.aspx"&gt;like this&lt;/a&gt;) when I didn't know if something might or might not be installed on the end user's machine. As far as I can tell, this approach is not wholly necessary - If the "third party" type references are all encapsulated nicely away from the "main" code, it should be possible to just use exception handling to react if the types aren't available at JIT-time.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It's also worth knowing because even if you call Assembly.Load() at runtime without any problems, it doesn't mean all the references have resolved. The loaded assembly could still break when you go to use it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Some things to remember&lt;/strong&gt;:&lt;/h3&gt;
&lt;ul style="list-style-type: disc;"&gt;
    &lt;li&gt;This isn't something that you can should use every day. You can dig yourself a big hole of shoddy design by doing this. In my case, I just needed a clean way to disable some functionality and fail cleanly when optional assemblies weren't available.&lt;/li&gt;
    &lt;li style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px;"&gt;The assemblies still have to be available when the source is compiled to IL. You can't compile IL which references types or assemblies that do not exist.&lt;/li&gt;
    &lt;li style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px;"&gt;This knowledge can help you &lt;a href="http://msdn2.microsoft.com/en-us/library/ms998547.aspx#scalenetchapt05_topic33"&gt;optimize your code&lt;/a&gt;, by controlling when extra loading and JITting is performed.&lt;/li&gt;
    &lt;li style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px;"&gt;There is a chance that the JITter will &lt;a href="http://blogs.msdn.com/ericgu/archive/2004/01/29/64717.aspx"&gt;inline lightweight method calls&lt;/a&gt;. If MainClass.SubMethod() is inlined into the constructor, then it's possible that the constructor will fail. I originally tried to avoid this by attaching &lt;a href="http://msdn2.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx"&gt;MethodImplOptions.NoInlining&lt;/a&gt; to SubMethod(). However, in the end I couldn't make it inline the code under any circumstances. It's possible that the JITter notices the unloaded type inside the method, and decides not to inline for that reason.&lt;/li&gt;
    &lt;li style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px;"&gt;It's a bit of a hack, but you could dynamically link to one of several available assemblies at runtime, by going through a series of alternative wrapper classes (each referencing different assemblies) and finding the one which loads successfully. If all of the wrappers implemented a common interface, you could then use the components interchangeably with acceptable performance. A more generalised CLR-supported model of this is described in the doctoral thesis I linked to above (he demonstrates dynamically choosing an alternative to Windows.Forms for GUI display when running &lt;a href="http://research.microsoft.com/programs/europe/rotor/"&gt;Rotor&lt;/a&gt; on OS X or Linux.)&lt;/li&gt;
    &lt;li style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px;"&gt;This probably doesn't work if you've used ngen.exe, for obvious reasons.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Automise, FinalBuilder and XML Formatted Data</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/609/Automise-FinalBuilder-and-XML-Formatted-Data.aspx</link><category /><pubDate>Thu, 05 Jul 2007 22:36:17 GMT</pubDate><description>&lt;p&gt;Now and again people comment that they think FinalBuilder or Automise uses proprietary binary formats. I sympathise entirely. Binary formats are a pain to work with in version control, and a format like XML can be great when you need to make a sweeping change or tweak something. (If the people who make our help authoring tool are reading this post, please take note!)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The good news is that all of FinalBuilder and Automise's data is available via XML or raw text, you just need to know how to look for it!&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;The project files are XML&lt;/h2&gt; &lt;p&gt;Both Automise and FinalBuilder save their project files as XML. If you save in the .FBP5 / .ATP2 "uncompressed" project format, then the project file is actually just an XML document. The XML isn't exquisitely formatted for human eyes, but a machine will be able to read it just fine..&lt;/p&gt; &lt;p&gt;If you save in the .FBZ5 / .ATZ2 "compressed" project format, the project file is compressed using industry-standard zip compression. If you rename the file to .ZIP, and open it in a zip program (like &lt;a href="http://www.7zip.org"&gt;7zip&lt;/a&gt;), then you can view or extract the uncompressed project file inside.&lt;/p&gt; &lt;p&gt;To choose whether to save "compressed" or "uncompressed" by default, go to Tools -&gt; Options -&gt; General IDE Options -&gt; Design Time Options:&lt;/p&gt; &lt;p&gt;&lt;img alt="Options Dialog, showing compressed file option" src="/blogimages/angus/xmlformat/options.png" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Project logs can be exported as XML&lt;/h2&gt; &lt;p&gt;OK, you've got me. Automise and FinalBuilder project log files (.fbl5 and .log2) are a &lt;a href="http://www.nexusdb.com"&gt;proprietary database format&lt;/a&gt;. In the old days, FinalBuilder 1 &amp; 2 used a text formatted log file (or so I'm told.) This led to performance problems with large log files and long running projects. Hence the move to an embedded database engine.&lt;/p&gt; &lt;p&gt;However, you can still export any project log as XML. To export a single log, go to the History tab, select a log, and click "Export Log to XML" (or HTML, or plain text.) To export the current log automatically as part of a running project, use the Export Log action:&lt;/p&gt; &lt;p&gt;&lt;img src="/blogimages/angus/xmlformat/exportlog.png" alt="Export Log Properties" /&gt;&lt;/p&gt; &lt;p&gt;Logs can be exported as text, HTML, or XML. XML formatted logs can be further tweaked via XSLT. It is possible to pass data from FB/AT to the XSL stylesheet, via the use of extra XSLT parameters. If you're interested in writing an XSL transform for the Export Log action, take a look at the "Stylesheets" directory in the FinalBuilder or Automise program directory. It contains the XSL files which are used to do the exports for text, xml and html.&lt;/p&gt; &lt;h2&gt;The Other Project Files are INI Files&lt;/h2&gt; &lt;p&gt;Any extra project files (like the FBD data file, or the FBV persistent variables file) are actually INI files which can be viewed in any text editor. Go ahead and try it!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;... armed with this knowledge, you should be diffing, merging, checking in, parsing, cutting, pasting and transforming in no time!&lt;/p&gt;</description></item><item><title>Automise, FinalBuilder and XML Formatted Data</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/635/Automise-FinalBuilder-and-XML-Formatted-Data.aspx</link><category /><pubDate>Thu, 05 Jul 2007 22:36:17 GMT</pubDate><description>&lt;p&gt;Now and again people comment that they think FinalBuilder or Automise uses proprietary binary formats. I sympathise entirely. Binary formats are a pain to work with in version control, and a format like XML can be great when you need to make a sweeping change or tweak something. (If the people who make our help authoring tool are reading this post, please take note!)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The good news is that all of FinalBuilder and Automise's data is available via XML or raw text, you just need to know how to look for it!&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;The project files are XML&lt;/h2&gt; &lt;p&gt;Both Automise and FinalBuilder save their project files as XML. If you save in the .FBP5 / .ATP2 "uncompressed" project format, then the project file is actually just an XML document. The XML isn't exquisitely formatted for human eyes, but a machine will be able to read it just fine..&lt;/p&gt; &lt;p&gt;If you save in the .FBZ5 / .ATZ2 "compressed" project format, the project file is compressed using industry-standard zip compression. If you rename the file to .ZIP, and open it in a zip program (like &lt;a href="http://www.7zip.org"&gt;7zip&lt;/a&gt;), then you can view or extract the uncompressed project file inside.&lt;/p&gt; &lt;p&gt;To choose whether to save "compressed" or "uncompressed" by default, go to Tools -&gt; Options -&gt; General IDE Options -&gt; Design Time Options:&lt;/p&gt; &lt;p&gt;&lt;img alt="Options Dialog, showing compressed file option" src="/blogimages/angus/xmlformat/options.png" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Project logs can be exported as XML&lt;/h2&gt; &lt;p&gt;OK, you've got me. Automise and FinalBuilder project log files (.fbl5 and .log2) are a &lt;a href="http://www.nexusdb.com"&gt;proprietary database format&lt;/a&gt;. In the old days, FinalBuilder 1 &amp; 2 used a text formatted log file (or so I'm told.) This led to performance problems with large log files and long running projects. Hence the move to an embedded database engine.&lt;/p&gt; &lt;p&gt;However, you can still export any project log as XML. To export a single log, go to the History tab, select a log, and click "Export Log to XML" (or HTML, or plain text.) To export the current log automatically as part of a running project, use the Export Log action:&lt;/p&gt; &lt;p&gt;&lt;img src="/blogimages/angus/xmlformat/exportlog.png" alt="Export Log Properties" /&gt;&lt;/p&gt; &lt;p&gt;Logs can be exported as text, HTML, or XML. XML formatted logs can be further tweaked via XSLT. It is possible to pass data from FB/AT to the XSL stylesheet, via the use of extra XSLT parameters. If you're interested in writing an XSL transform for the Export Log action, take a look at the "Stylesheets" directory in the FinalBuilder or Automise program directory. It contains the XSL files which are used to do the exports for text, xml and html.&lt;/p&gt; &lt;h2&gt;The Other Project Files are INI Files&lt;/h2&gt; &lt;p&gt;Any extra project files (like the FBD data file, or the FBV persistent variables file) are actually INI files which can be viewed in any text editor. Go ahead and try it!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;... armed with this knowledge, you should be diffing, merging, checking in, parsing, cutting, pasting and transforming in no time!&lt;/p&gt;</description></item><item><title>Automise, FinalBuilder and XML Formatted Data</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/661/Automise-FinalBuilder-and-XML-Formatted-Data.aspx</link><category>Automise,FinalBuilder</category><pubDate>Thu, 05 Jul 2007 22:36:17 GMT</pubDate><description>&lt;p&gt;Now and again people comment that they think FinalBuilder or Automise uses proprietary binary formats. I sympathise entirely. Binary formats are a pain to work with in version control, and a format like XML can be great when you need to make a sweeping change or tweak something. (If the people who make our help authoring tool are reading this post, please take note!)&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;The good news is that all of FinalBuilder and Automise's data is available via XML or raw text, you just need to know how to look for it!&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;The project files are XML&lt;/h2&gt;
&lt;p&gt;Both Automise and FinalBuilder save their project files as XML. If you save in the .FBP5 / .ATP2 "uncompressed" project format, then the project file is actually just an XML document. The XML isn't exquisitely formatted for human eyes, but a machine will be able to read it just fine..&lt;/p&gt;
&lt;p&gt;If you save in the .FBZ5 / .ATZ2 "compressed" project format, the project file is compressed using industry-standard zip compression. If you rename the file to .ZIP, and open it in a zip program (like &lt;a href="http://www.7zip.org"&gt;7zip&lt;/a&gt;), then you can view or extract the uncompressed project file inside.&lt;/p&gt;
&lt;p&gt;To choose whether to save "compressed" or "uncompressed" by default, go to Tools -&amp;gt; Options -&amp;gt; General IDE Options -&amp;gt; Design Time Options:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Options Dialog, showing compressed file option" src="/blogimages/angus/xmlformat/options.png" /&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Project logs can be exported as XML&lt;/h2&gt;
&lt;p&gt;OK, you've got me. Automise and FinalBuilder project log files (.fbl5 and .log2) are a &lt;a href="http://www.nexusdb.com"&gt;proprietary database format&lt;/a&gt;. In the old days, FinalBuilder 1 &amp;amp; 2 used a text formatted log file (or so I'm told.) This led to performance problems with large log files and long running projects. Hence the move to an embedded database engine.&lt;/p&gt;
&lt;p&gt;However, you can still export any project log as XML. To export a single log, go to the History tab, select a log, and click "Export Log to XML" (or HTML, or plain text.) To export the current log automatically as part of a running project, use the Export Log action:&lt;/p&gt;
&lt;p&gt;&lt;img src="/blogimages/angus/xmlformat/exportlog.png" alt="Export Log Properties" /&gt;&lt;/p&gt;
&lt;p&gt;Logs can be exported as text, HTML, or XML. XML formatted logs can be further tweaked via XSLT. It is possible to pass data from FB/AT to the XSL stylesheet, via the use of extra XSLT parameters. If you're interested in writing an XSL transform for the Export Log action, take a look at the "Stylesheets" directory in the FinalBuilder or Automise program directory. It contains the XSL files which are used to do the exports for text, xml and html.&lt;/p&gt;
&lt;h2&gt;The Other Project Files are INI Files&lt;/h2&gt;
&lt;p&gt;Any extra project files (like the FBD data file, or the FBV persistent variables file) are actually INI files which can be viewed in any text editor. Go ahead and try it!&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;... armed with this knowledge, you should be diffing, merging, checking in, parsing, cutting, pasting and transforming in no time!&lt;/p&gt;</description></item><item><title>Four different flavors of .NET Assemblies and the CLR</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/607/Four-different-flavors-of-NET-Assemblies-and-the-.aspx</link><category /><pubDate>Tue, 03 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;(This is a technical post about some of the &amp;quot;gotchas&amp;quot; when coding for .NET on 64- and 32-bit architectures.)&lt;/p&gt;
&lt;h2&gt;The short story:&lt;/h2&gt;
&lt;p&gt;The TeamFoundation client assemblies are x86-only assemblies. They don't work when called from an x64 .NET Application.&lt;/p&gt;
&lt;p&gt;Even though they're in the GAC, you'll get a FileNotFoundException if the CLR tries to load them.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2&gt;My story:&lt;/h2&gt;
&lt;p&gt;I already knew this, but it took me most of the day to realise that was my problem.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2&gt;The long story:&lt;/h2&gt;
&lt;p&gt;Microsoft's .NET CLR 2.0 supports three different processor architectures: &lt;a href="http://en.wikipedia.org/wiki/X86_architecture"&gt;x86&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/X86-64"&gt;x64&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Itanium"&gt;IA-64&lt;/a&gt;.&amp;nbsp; This means that there are three different CLR environments. x64 machines can host the x86 CLR alongside the native 64-bit CLR.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Although the CLR executes architecture-agnostic &lt;a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language"&gt;Common Intermediate Language&lt;/a&gt; (aka MSIL) code, any assembly can be marked as only suitable for one of the particular architectures.This is what happens when you choose a &amp;quot;Platform&amp;quot; type for a Visual Studio project. Choosing 'Any CPU' means that the project Assemblies are marked as language-agnostic CIL code.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It all plays out like this:&lt;/p&gt;
&lt;p&gt;
&lt;table width="496" height="113" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;CLR Type&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Be Hosted From&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Load These Assembly Types&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;x86&lt;/td&gt;
            &lt;td&gt;x86 or x64 Operating Systems&lt;/td&gt;
            &lt;td&gt;x86, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;x64&lt;/td&gt;
            &lt;td&gt;x64 Operating Systems&lt;/td&gt;
            &lt;td&gt;x64, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;IA-64&lt;/td&gt;
            &lt;td&gt;Itanium Operating Systems&lt;/td&gt;
            &lt;td&gt;IA-64, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Or, alternatively:&lt;/p&gt;
&lt;p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Assembly Type&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Run On&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;Any CPU&amp;quot; / MSIL&lt;/td&gt;
            &lt;td&gt;Any CLR&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;x86&amp;quot;&lt;/td&gt;
            &lt;td&gt;x86 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;x64&amp;quot;&lt;/td&gt;
            &lt;td&gt;x64 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;IA-64&amp;quot;&lt;/td&gt;
            &lt;td&gt;IA-64 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;To find out if an assembly is x86-only, you can use the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms164699(VS.80).aspx"&gt;CorFlags.exe&lt;/a&gt; utility which ships with the .NET SDK. You can also use this tool to tweak the assembly type, although doing this will break strong named assemblies and generally cause chaos.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When loading a.NET-based process, the .NET Framework decides which version of the CLR to load based on the assembly type. Processes based on &amp;quot;Any CPU&amp;quot; assemblies will load in the native CLR for the host system.&lt;/p&gt;
&lt;p&gt;This can lead to some funny situations. For example, the ASP.NET Development Server application is 32-bit only, so any web sites you run on it will run in the x86 CLR. On the other hand, on x64 IIS can run either 32- or 64-bit ASP.NET applications. This means you can move your ASP.NET application from the Development Server to IIS &lt;em&gt;on the same machine&lt;/em&gt;, and all of a sudden you will get a BadImageFormatException when an assembly refuses to load any more.&lt;/p&gt;
&lt;h2&gt;The Twist:&lt;/h2&gt;
&lt;p&gt;Sometimes you get a FileNotFoundException instead. This is when you try to reference an Assembly which is in the GAC.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;... and you think &amp;quot;That's odd, I thought that assembly was in the GAC.&amp;quot; and you look in the GAC browser, and there it is:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img alt="GAC Viewer In Explorer" src="http://www.finalbuilder.com/blogimages/angus/GACViewer.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;... the key is the &amp;quot;Processor Architecture&amp;quot; column on the righthand side.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As of .NET Framework 2.0, the CLR actually has &lt;a href="http://hoser.lander.ca/The+Wonders+Of+The+Whidbey+GAC++Part+I+Processor+Architecture.aspx"&gt;four different GACs&lt;/a&gt; - one for each architecture, and one for &amp;quot;Any CPU&amp;quot; MSIL Assemblies. You can see this quite literally if you &lt;a href="http://www.clariusconsulting.net/blogs/pga/archive/2006/04/05/685.aspx"&gt;disable the GAC Shell extension&lt;/a&gt;, and browse to the GAC directory.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Each version of the CLR can only load assemblies which exist in its own GAC, or in the architecture-agnostic MSIL GAC. If you try to load an assembly from a different GAC, you'll see the FileNotFoundException.&lt;/p&gt;</description></item><item><title>Four different flavors of .NET Assemblies and the CLR</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/633/Four-different-flavors-of-NET-Assemblies-and-the-.aspx</link><category /><pubDate>Tue, 03 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;(This is a technical post about some of the &amp;quot;gotchas&amp;quot; when coding for .NET on 64- and 32-bit architectures.)&lt;/p&gt;
&lt;h2&gt;The short story:&lt;/h2&gt;
&lt;p&gt;The TeamFoundation client assemblies are x86-only assemblies. They don't work when called from an x64 .NET Application.&lt;/p&gt;
&lt;p&gt;Even though they're in the GAC, you'll get a FileNotFoundException if the CLR tries to load them.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2&gt;My story:&lt;/h2&gt;
&lt;p&gt;I already knew this, but it took me most of the day to realise that was my problem.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2&gt;The long story:&lt;/h2&gt;
&lt;p&gt;Microsoft's .NET CLR 2.0 supports three different processor architectures: &lt;a href="http://en.wikipedia.org/wiki/X86_architecture"&gt;x86&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/X86-64"&gt;x64&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Itanium"&gt;IA-64&lt;/a&gt;.&amp;nbsp; This means that there are three different CLR environments. x64 machines can host the x86 CLR alongside the native 64-bit CLR.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Although the CLR executes architecture-agnostic &lt;a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language"&gt;Common Intermediate Language&lt;/a&gt; (aka MSIL) code, any assembly can be marked as only suitable for one of the particular architectures.This is what happens when you choose a &amp;quot;Platform&amp;quot; type for a Visual Studio project. Choosing 'Any CPU' means that the project Assemblies are marked as language-agnostic CIL code.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It all plays out like this:&lt;/p&gt;
&lt;p&gt;
&lt;table width="496" height="113" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;CLR Type&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Be Hosted From&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Load These Assembly Types&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;x86&lt;/td&gt;
            &lt;td&gt;x86 or x64 Operating Systems&lt;/td&gt;
            &lt;td&gt;x86, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;x64&lt;/td&gt;
            &lt;td&gt;x64 Operating Systems&lt;/td&gt;
            &lt;td&gt;x64, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;IA-64&lt;/td&gt;
            &lt;td&gt;Itanium Operating Systems&lt;/td&gt;
            &lt;td&gt;IA-64, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Or, alternatively:&lt;/p&gt;
&lt;p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Assembly Type&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Run On&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;Any CPU&amp;quot; / MSIL&lt;/td&gt;
            &lt;td&gt;Any CLR&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;x86&amp;quot;&lt;/td&gt;
            &lt;td&gt;x86 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;x64&amp;quot;&lt;/td&gt;
            &lt;td&gt;x64 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;IA-64&amp;quot;&lt;/td&gt;
            &lt;td&gt;IA-64 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;To find out if an assembly is x86-only, you can use the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms164699(VS.80).aspx"&gt;CorFlags.exe&lt;/a&gt; utility which ships with the .NET SDK. You can also use this tool to tweak the assembly type, although doing this will break strong named assemblies and generally cause chaos.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When loading a.NET-based process, the .NET Framework decides which version of the CLR to load based on the assembly type. Processes based on &amp;quot;Any CPU&amp;quot; assemblies will load in the native CLR for the host system.&lt;/p&gt;
&lt;p&gt;This can lead to some funny situations. For example, the ASP.NET Development Server application is 32-bit only, so any web sites you run on it will run in the x86 CLR. On the other hand, on x64 IIS can run either 32- or 64-bit ASP.NET applications. This means you can move your ASP.NET application from the Development Server to IIS &lt;em&gt;on the same machine&lt;/em&gt;, and all of a sudden you will get a BadImageFormatException when an assembly refuses to load any more.&lt;/p&gt;
&lt;h2&gt;The Twist:&lt;/h2&gt;
&lt;p&gt;Sometimes you get a FileNotFoundException instead. This is when you try to reference an Assembly which is in the GAC.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;... and you think &amp;quot;That's odd, I thought that assembly was in the GAC.&amp;quot; and you look in the GAC browser, and there it is:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img alt="GAC Viewer In Explorer" src="http://www.finalbuilder.com/blogimages/angus/GACViewer.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;... the key is the &amp;quot;Processor Architecture&amp;quot; column on the righthand side.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As of .NET Framework 2.0, the CLR actually has &lt;a href="http://hoser.lander.ca/The+Wonders+Of+The+Whidbey+GAC++Part+I+Processor+Architecture.aspx"&gt;four different GACs&lt;/a&gt; - one for each architecture, and one for &amp;quot;Any CPU&amp;quot; MSIL Assemblies. You can see this quite literally if you &lt;a href="http://www.clariusconsulting.net/blogs/pga/archive/2006/04/05/685.aspx"&gt;disable the GAC Shell extension&lt;/a&gt;, and browse to the GAC directory.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Each version of the CLR can only load assemblies which exist in its own GAC, or in the architecture-agnostic MSIL GAC. If you try to load an assembly from a different GAC, you'll see the FileNotFoundException.&lt;/p&gt;</description></item><item><title>Four different flavors of .NET Assemblies and the CLR</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/659/Four-different-flavors-of-NET-Assemblies-and-the-.aspx</link><category /><pubDate>Tue, 03 Jul 2007 05:00:00 GMT</pubDate><description>&lt;p&gt;(This is a technical post about some of the &amp;quot;gotchas&amp;quot; when coding for .NET on 64- and 32-bit architectures.)&lt;/p&gt;
&lt;h2&gt;The short story:&lt;/h2&gt;
&lt;p&gt;The TeamFoundation client assemblies are x86-only assemblies. They don't work when called from an x64 .NET Application.&lt;/p&gt;
&lt;p&gt;Even though they're in the GAC, you'll get a FileNotFoundException if the CLR tries to load them.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2&gt;My story:&lt;/h2&gt;
&lt;p&gt;I already knew this, but it took me most of the day to realise that was my problem.&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h2&gt;The long story:&lt;/h2&gt;
&lt;p&gt;Microsoft's .NET CLR 2.0 supports three different processor architectures: &lt;a href="http://en.wikipedia.org/wiki/X86_architecture"&gt;x86&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/X86-64"&gt;x64&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Itanium"&gt;IA-64&lt;/a&gt;.&amp;nbsp; This means that there are three different CLR environments. x64 machines can host the x86 CLR alongside the native 64-bit CLR.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Although the CLR executes architecture-agnostic &lt;a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language"&gt;Common Intermediate Language&lt;/a&gt; (aka MSIL) code, any assembly can be marked as only suitable for one of the particular architectures.This is what happens when you choose a &amp;quot;Platform&amp;quot; type for a Visual Studio project. Choosing 'Any CPU' means that the project Assemblies are marked as language-agnostic CIL code.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It all plays out like this:&lt;/p&gt;
&lt;p&gt;
&lt;table width="496" height="113" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;CLR Type&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Be Hosted From&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Load These Assembly Types&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;x86&lt;/td&gt;
            &lt;td&gt;x86 or x64 Operating Systems&lt;/td&gt;
            &lt;td&gt;x86, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;x64&lt;/td&gt;
            &lt;td&gt;x64 Operating Systems&lt;/td&gt;
            &lt;td&gt;x64, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;IA-64&lt;/td&gt;
            &lt;td&gt;Itanium Operating Systems&lt;/td&gt;
            &lt;td&gt;IA-64, &amp;quot;Any CPU&amp;quot;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Or, alternatively:&lt;/p&gt;
&lt;p&gt;
&lt;table width="200" cellspacing="1" cellpadding="1" border="1"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;strong&gt;Assembly Type&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;&lt;strong&gt;Can Run On&lt;/strong&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;Any CPU&amp;quot; / MSIL&lt;/td&gt;
            &lt;td&gt;Any CLR&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;x86&amp;quot;&lt;/td&gt;
            &lt;td&gt;x86 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;x64&amp;quot;&lt;/td&gt;
            &lt;td&gt;x64 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&amp;quot;IA-64&amp;quot;&lt;/td&gt;
            &lt;td&gt;IA-64 CLR Only&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;To find out if an assembly is x86-only, you can use the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms164699(VS.80).aspx"&gt;CorFlags.exe&lt;/a&gt; utility which ships with the .NET SDK. You can also use this tool to tweak the assembly type, although doing this will break strong named assemblies and generally cause chaos.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When loading a.NET-based process, the .NET Framework decides which version of the CLR to load based on the assembly type. Processes based on &amp;quot;Any CPU&amp;quot; assemblies will load in the native CLR for the host system.&lt;/p&gt;
&lt;p&gt;This can lead to some funny situations. For example, the ASP.NET Development Server application is 32-bit only, so any web sites you run on it will run in the x86 CLR. On the other hand, on x64 IIS can run either 32- or 64-bit ASP.NET applications. This means you can move your ASP.NET application from the Development Server to IIS &lt;em&gt;on the same machine&lt;/em&gt;, and all of a sudden you will get a BadImageFormatException when an assembly refuses to load any more.&lt;/p&gt;
&lt;h2&gt;The Twist:&lt;/h2&gt;
&lt;p&gt;Sometimes you get a FileNotFoundException instead. This is when you try to reference an Assembly which is in the GAC.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;... and you think &amp;quot;That's odd, I thought that assembly was in the GAC.&amp;quot; and you look in the GAC browser, and there it is:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img alt="GAC Viewer In Explorer" src="http://www.finalbuilder.com/blogimages/angus/GACViewer.png" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;... the key is the &amp;quot;Processor Architecture&amp;quot; column on the righthand side.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As of .NET Framework 2.0, the CLR actually has &lt;a href="http://hoser.lander.ca/The+Wonders+Of+The+Whidbey+GAC++Part+I+Processor+Architecture.aspx"&gt;four different GACs&lt;/a&gt; - one for each architecture, and one for &amp;quot;Any CPU&amp;quot; MSIL Assemblies. You can see this quite literally if you &lt;a href="http://www.clariusconsulting.net/blogs/pga/archive/2006/04/05/685.aspx"&gt;disable the GAC Shell extension&lt;/a&gt;, and browse to the GAC directory.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Each version of the CLR can only load assemblies which exist in its own GAC, or in the architecture-agnostic MSIL GAC. If you try to load an assembly from a different GAC, you'll see the FileNotFoundException.&lt;/p&gt;</description></item><item><title>Windows Vista compatibility</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/606/Windows-Vista-compatibility.aspx</link><category /><pubDate>Wed, 23 May 2007 05:00:00 GMT</pubDate><description>Now that FinalBuilder 5.5 is out, I've posted a short article detailing some of the things to keep in mind when using FB with Windows Vista and User Account Control (UAC.) The article can be found &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=27"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
On a more techy subject, most developers are probably already well and truly up to speed with Vista integration by now, but here are a few resources that I found invaluable while getting a grip on the concepts of UAC, manifests, elevation, virtualization, and the elevation prompt.&lt;br /&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt; &lt;a href="http://technet.microsoft.com/en-us/windowsvista/aa906021.aspx"&gt;User Account Control Overview&lt;/a&gt; at Microsoft TechNet. A good semi-technical (code-free) overview of&amp;nbsp; UAC.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://blogs.msdn.com/cjacks/archive/2006/09/08/exploring-manifests-part-2-default-namespaces-and-uac-manifests-in-windows-vista.aspx"&gt;Evolving the Software Organism: Default Namespaces and UAC Manifests in Windows Vista&lt;/a&gt;. Covers some gotchas when embedding a UAC manifest.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-_1320_-Part-4-_1320_-User-Account-Control.aspx"&gt;Kenny Kerr's Windows Vista for Developers (Part 4)&lt;/a&gt;. Great code summary of the two ways to request UAC elevation in Vista. Creating a process with an elevated token, or creating an elevated out-of-process COM object.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=BA73B169-A648-49AF-BC5E-A2EEBB74C16B&amp;amp;displaylang=en"&gt;Windows Vista Application Development Requirements for User Account Control Compatibility&lt;/a&gt;. 500-pound-gorilla Word document, covers everything you ever wanted to know (and then some.)&lt;/li&gt;
    &lt;p&gt;&amp;nbsp;&lt;/p&gt;
    &lt;p&gt;&lt;br /&gt;
    Happy Vista-ing!&lt;/p&gt;
&lt;/ul&gt;</description></item><item><title>Windows Vista compatibility</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/632/Windows-Vista-compatibility.aspx</link><category /><pubDate>Wed, 23 May 2007 05:00:00 GMT</pubDate><description>Now that FinalBuilder 5.5 is out, I've posted a short article detailing some of the things to keep in mind when using FB with Windows Vista and User Account Control (UAC.) The article can be found &lt;a href="http://www.finalbuilder.com/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=27"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
On a more techy subject, most developers are probably already well and truly up to speed with Vista integration by now, but here are a few resources that I found invaluable while getting a grip on the concepts of UAC, manifests, elevation, virtualization, and the elevation prompt.&lt;br /&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt; &lt;a href="http://technet.microsoft.com/en-us/windowsvista/aa906021.aspx"&gt;User Account Control Overview&lt;/a&gt; at Microsoft TechNet. A good semi-technical (code-free) overview of&amp;nbsp; UAC.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://blogs.msdn.com/cjacks/archive/2006/09/08/exploring-manifests-part-2-default-namespaces-and-uac-manifests-in-windows-vista.aspx"&gt;Evolving the Software Organism: Default Namespaces and UAC Manifests in Windows Vista&lt;/a&gt;. Covers some gotchas when embedding a UAC manifest.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-_1320_-Part-4-_1320_-User-Account-Control.aspx"&gt;Kenny Kerr's Windows Vista for Developers (Part 4)&lt;/a&gt;. Great code summary of the two ways to request UAC elevation in Vista. Creating a process with an elevated token, or creating an elevated out-of-process COM object.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=BA73B169-A648-49AF-BC5E-A2EEBB74C16B&amp;amp;displaylang=en"&gt;Windows Vista Application Development Requirements for User Account Control Compatibility&lt;/a&gt;. 500-pound-gorilla Word document, covers everything you ever wanted to know (and then some.)&lt;/li&gt;
    &lt;p&gt;&amp;nbsp;&lt;/p&gt;
    &lt;p&gt;&lt;br /&gt;
    Happy Vista-ing!&lt;/p&gt;
&lt;/ul&gt;</description></item><item><title>Windows Vista compatibility</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/658/Windows-Vista-compatibility.aspx</link><category>FinalBuilder</category><pubDate>Wed, 23 May 2007 05:00:00 GMT</pubDate><description>Now that FinalBuilder 5.5 is out, I've posted a short article detailing some of the things to keep in mind when using FB with Windows Vista and User Account Control (UAC.) The article can be found &lt;a href="http://www.finalbuilder.com/Resources/Articles/ID/27/FinalBuilder-and-Windows-Vista.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
On a more techy subject, most developers are probably already well and truly up to speed with Vista integration by now, but here are a few resources that I found invaluable while getting a grip on the concepts of UAC, manifests, elevation, virtualization, and the elevation prompt.&lt;br /&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt; &lt;a href="http://technet.microsoft.com/en-us/windowsvista/aa906021.aspx"&gt;User Account Control Overview&lt;/a&gt; at Microsoft TechNet. A good semi-technical (code-free) overview of&amp;nbsp; UAC.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://blogs.msdn.com/cjacks/archive/2006/09/08/exploring-manifests-part-2-default-namespaces-and-uac-manifests-in-windows-vista.aspx"&gt;Evolving the Software Organism: Default Namespaces and UAC Manifests in Windows Vista&lt;/a&gt;. Covers some gotchas when embedding a UAC manifest.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-_1320_-Part-4-_1320_-User-Account-Control.aspx"&gt;Kenny Kerr's Windows Vista for Developers (Part 4)&lt;/a&gt;. Great code summary of the two ways to request UAC elevation in Vista. Creating a process with an elevated token, or creating an elevated out-of-process COM object.&lt;/li&gt;
    &lt;li&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=BA73B169-A648-49AF-BC5E-A2EEBB74C16B&amp;amp;displaylang=en"&gt;Windows Vista Application Development Requirements for User Account Control Compatibility&lt;/a&gt;. 500-pound-gorilla Word document, covers everything you ever wanted to know (and then some.)&lt;/li&gt;
    &lt;p&gt;&amp;nbsp;&lt;/p&gt;
    &lt;p&gt;
    Happy Vista-ing!&lt;/p&gt;
&lt;/ul&gt;</description></item><item><title>Big day today...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/599/Big-day-today.aspx</link><category /><pubDate>Mon, 21 May 2007 14:00:00 GMT</pubDate><description>A day of releases today.&amp;nbsp; FinalBuilder 5.5 is released today, and so is our newest product, FinalBuilder Server!&lt;br /&gt;
&lt;br /&gt;
FinalBuilder 5.5 adds plenty of minor enhancements (including support for CodeGear Delphi 2007), bug fixes, etc, but the main thing is that the Professional version now gets a license of FinalBuilder Server thrown in!&amp;nbsp; That's how we're justifying the jump from 5.0 to 5.5 :)&amp;nbsp; We've already received a ton of very positive feedback on FinalBuilder Server, and I must say that it is quite nice to use.&lt;br /&gt;
&lt;br /&gt;
In a nutshell, FinalBuilder Server is a web interface for centralizing and managing your builds.&amp;nbsp; It relies on the FinalBuilder FBCMD.exe underneath as the build engine, but there are significant differences especially as far as logging is concerned.&amp;nbsp; There is now a separate logging server, and FBCMD redirects all the logging to that server.&amp;nbsp; This means that you can run more than one instance of the same project at the same time - plus of course FB Server needs access to the logs during and after the builds so that it can display the log output, statistics, build history etc.&lt;br /&gt;
&lt;br /&gt;
FinalBuilder Server has been almost a year in development, and we've had quite a long beta period for it too.&amp;nbsp; We have really been concentrating on ease-of-use and quality.&amp;nbsp; Many features were put on the todo list instead of implemented straight away because the number one goal was to build a very solid base to work on.&amp;nbsp; It's been running the FinalBuilder, FinalBuilder Server, and Automise builds for almost 5 months now, and we've had a fair number of customers use it during the beta - so, finally, today is the day for it's first release :)&lt;br /&gt;
&lt;br /&gt;
More information on FinalBuilder Server here: &lt;a href="http://www.finalbuilder.com/finalbuilder-server.aspx" target="_blank"&gt;http://www.finalbuilder.com/finalbuilder-server.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Also - I forgot to blog about it before, but Automise 2 was released a couple of weeks ago.&amp;nbsp; We added over 140 actions - there's some seriously cool stuff in there :)&amp;nbsp; More info: &lt;a href="http://www.finalbuilder.com/new-in-automise-2.aspx" target="_blank"&gt;http://www.finalbuilder.com/new-in-automise-2.aspx&lt;/a&gt;</description></item><item><title>HelpMaster Pro</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/598/HelpMaster-Pro.aspx</link><category /><pubDate>Mon, 12 Mar 2007 14:00:00 GMT</pubDate><description>&lt;a href="http://www.prdsoftware.com" target="_blank"&gt;PRD Software&lt;/a&gt; is a Canberra based company, just like VSoft, and they develop excellent help desk software.&amp;nbsp; As we grow our needs for a good CRM solution is becoming a top priority... so &lt;a href="http://www.prd-software.com.au/prd/help-desk-products/enterprise/default.asp" target="_blank"&gt;HelpMaster Pro&lt;/a&gt; is looking like it'll do just what we need: handle support, sales, bug and issue tracking, and with a solid workflow system which pulls it all together.&lt;br /&gt;
&lt;br /&gt;
I'm especially looking forward to the priority manager module, which can escalate jobs and notify both us and our customers :)</description></item><item><title>PNG Compression</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/597/PNG-Compression.aspx</link><category /><pubDate>Sun, 11 Mar 2007 14:00:00 GMT</pubDate><description>After reading &lt;a href="http://www.codinghorror.com/blog/archives/000810.html" target="_blank"&gt;Getting the Most Out of PNG&lt;/a&gt; on &lt;a href="http://www.codinghorror.com/blog/" target="_blank"&gt;Coding Horror&lt;/a&gt;... I thought I'd give it a go.&amp;nbsp; That is, try out the &lt;a href="http://advsys.net/ken/utils.htm" target="_blank"&gt;PNGOUT&lt;/a&gt; tool that will re-compress PNG images files; but not for the images on the website, on the PNGs in our help file.&lt;br /&gt;
&lt;br /&gt;
These are the results of running all of our 882 PNG Images in the help file through PNGOUT:&lt;br /&gt;
Before PNGOUT&amp;nbsp;&amp;nbsp;  13.2 MB&lt;br /&gt;
After PNGOUT&amp;nbsp;&amp;nbsp;  12.3 MB&lt;br /&gt;
&lt;br /&gt;
(Unlike Jeff, I used a short project in &lt;a href="http://www.automise.com/automise.aspx"&gt;Automise&lt;/a&gt; instead of a batch file...made it easy to pause the compression when I needed extra cpu cycles for other things :)&lt;br /&gt;
&lt;br /&gt;
So that's a saving of almost 1MB.&amp;nbsp; Not too shabby if you consider that this would directly translate to about 1MB shaved off the installer!</description></item><item><title>We're looking for a sales and marketing person</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/596/Were-looking-for-a-sales-and-marketing-person.aspx</link><category /><pubDate>Wed, 21 Feb 2007 14:00:00 GMT</pubDate><description>&lt;br /&gt;
The job market (well, at least in Canberra and Australia) is generally pretty, ummm... tight.&amp;nbsp; Good for people looking for jobs, but we're finding it hard to find a sales and marketing person.&amp;nbsp; Please pass this on if you know anyone that might be interested - &lt;a href="http://www.finalbuilder.com/jobs.aspx"&gt;http://www.finalbuilder.com/jobs.aspx&lt;/a&gt;</description></item><item><title>Who cares if the build is broken?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/595/Who-cares-if-the-build-is-broken.aspx</link><category /><pubDate>Sun, 04 Feb 2007 14:00:00 GMT</pubDate><description>"If the development team is serious about creating quality software,
then the entire team should care about the build being broken. Even if
the team does not use any sort of continuous integration practices, a
broken build is never a good thing."&lt;br&gt;&lt;br&gt;Read the whole blog post at &lt;a href="http://www.avocadosoftware.com/csblogs/dredge/archive/2007/01/31/682.aspx" target="_blank"&gt;Dim Blog As New ThoughtStream(me)&lt;/a&gt;&lt;br&gt;</description></item><item><title>Automise 2 Public Beta</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/594/Automise-2-Public-Beta.aspx</link><category /><pubDate>Wed, 31 Jan 2007 14:00:00 GMT</pubDate><description>Automise 2 is now in public beta testing.&lt;br&gt;&lt;br&gt;Here's the download (the beta download is at the bottom):&lt;br&gt;&lt;a href="/Default.aspx?tabid=125"&gt;http://www.automise.com/automise-downloads.aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;Now - here's the real news... for Automise 2 we've added literally hundreds of new actions.&amp;nbsp; Some of the really cool new stuff is all the Windows Admin type actions, eg. Windows Update, Activate Windows, Active Directory admin, managing System Restore Points, NTFS Junction Points actions, changing file permissions and even Emptying the Recycle Bin!&lt;br&gt;&lt;br&gt;Here the what's new:&lt;br&gt;&lt;a href="/Default.aspx?tabid=166"&gt;What's new in Automise 2&lt;/a&gt;&lt;br&gt;&lt;br&gt;We're really keen to hear about any issues or bugs with the new version - so please give the beta a whirl and let us know via email if you find a bug (or even if you've just testing some of the actions and they worked for you).&lt;br&gt;&lt;br&gt;.t8&lt;br&gt;</description></item><item><title>Office Flooded!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/405/Office-Flooded.aspx</link><category /><pubDate>Sun, 31 Dec 2006 14:00:00 GMT</pubDate><description>Hi All&lt;br&gt;
&lt;br&gt;There I was, enjoying a nice meal with family &amp;amp; friends on new years eve, when I get a call from our security company... the alarm in the office had been triggered,  but only in the server room. That's strange, because you can't access the server room without going through the main office. I decided it was worth the 15 minute drive to investigate, especially after the huge storm that had just passed through Canberra&lt;br&gt;&lt;br&gt;The
roof of our office building was damaged and our office was flooded! The servers,
printers and some workstations were drenched. I spent part of last
night and most of today cleaning up, shifting furniture etc so the
water could be mopped up! The carpet cleaning guys have just finished, I expect the carpets will take a while to dry out.&lt;br&gt;
&lt;br&gt;
At this stage the waterlogged pc's are drying out on my garage floor (most were turned off at the time and should be ok),
and we hope to be able to move back into the office sometime tomorrow,
however I expect that we will be a little slow responding to email
&amp;amp; support issues over the next day or so as we get our machines up &amp;amp; running (or restore from backups if need be). &lt;br&gt;&lt;br&gt;v.</description></item><item><title>Xmas special - only a few days left!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/592/Xmas-special-only-a-few-days-left.aspx</link><category /><pubDate>Thu, 21 Dec 2006 14:00:00 GMT</pubDate><description>If
you're sitting on the fence, one side is batch files, xml files, or no
build process at all, and the other side is a fully automated build
process - well, now's the time to take the plunge :)&amp;nbsp; And this applies
to those network admins and sys admins also who want to automate some
of the tedious and just plain boring stuff they have to do
day-in-and-day-out!&amp;nbsp; &lt;br&gt;&lt;br&gt;We've got a &lt;b&gt;special 20% off all FinalBuilder and Automise &lt;/b&gt;licenses purchased until the end of 2006!&lt;br&gt;&lt;br&gt;See the home page for more details: &lt;br&gt;&lt;a href="blogs.aspx"&gt;http://www.finalbuilder.com&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.automise.com/"&gt;http://www.automise.com&lt;/a&gt;</description></item><item><title>Flickr Emailr</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/593/Flickr-Emailr.aspx</link><category /><pubDate>Thu, 21 Dec 2006 14:00:00 GMT</pubDate><description>I'm a big fan of &lt;a href="http://www.flickr.com"&gt;flickr&lt;/a&gt;.&amp;nbsp; Mainly because I'm using it as an offsite backup, and it's a great way to share photos with friends and family.&lt;br&gt;&lt;br&gt;I've got a flickr pro account, which gives me up to 2GB of uploads per month.&amp;nbsp; I've still got a big backlog of photos to upload (I've almost done all my 2006 photos, so only another 5 years worth of photos or so to go...).&lt;br&gt;&lt;br&gt;Anyway, I've found the flickr uploadr to be very unreliable lately.&amp;nbsp; And I'm even using one of their unofficial betas of the uploadr because it fixes some bug that I was experiencing.&amp;nbsp; It's a pity they don't do a bit more work on the uploadr.&amp;nbsp; For one, it could retry if there was an error or timeout!&amp;nbsp; Normally I set it going just before I go to bed, and lately it's been dying after uploading only a few photos :(&amp;nbsp; I've also tried the jUploader Java based tool and it didn't work at all for me!&lt;br&gt;&lt;br&gt;&lt;b&gt;So.... the solution to the problem? &lt;br&gt;Answer:&lt;/b&gt; An Automise project to scan for photos and send them to flickr via email (using the magic email address).&lt;br&gt;&lt;br&gt;I've designed it so that it retries if there was an error sending the email, plus it will not upload a photo that it's already uploaded!&amp;nbsp; The project is set to scan for all .jpg files in the chosen directory, and you can change it to do a recursive search by checking one option.&amp;nbsp; It only sends one photo per email - which is much safer than trying to send multiple photos per email.&lt;br&gt;&lt;br&gt;The Automise project can be renamed to .fbp5 or .fbp4 for use in FinalBuilder also.&lt;br&gt;&lt;br&gt;Download from here:&lt;br&gt;&lt;a href="http://www.automise.com/community-downloads.aspx?grm2id=34"&gt;http://www.automise.com/community-downloads.aspx?grm2id=34&lt;/a&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Simplicity ain't so simple</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/591/Simplicity-aint-so-simple.aspx</link><category /><pubDate>Mon, 18 Dec 2006 14:00:00 GMT</pubDate><description>I've been reading Nick Bradbury's series of posts about simplicity vs. features.&amp;nbsp; Definitely worth a read, here's the links:&lt;br&gt;&lt;br&gt;&lt;a href="http://nick.typepad.com/blog/2006/12/simplicity_aint.html"&gt;Simplicity Ain't So Simple, Part I: Decide What to Hide&lt;/a&gt;&lt;br&gt;&lt;a href="http://nick.typepad.com/blog/2006/12/simplicity_aint_1.html"&gt;Simplicity Ain't So Simple, Part II: Stop Showing Off&lt;/a&gt;&lt;br&gt;&lt;a href="http://nick.typepad.com/blog/2006/12/simplicity_aint_2.html"&gt;Simplicity Ain't So Simple, Part III: Don't Add Features You Can't Support&lt;/a&gt;&lt;br&gt;&lt;a href="http://nick.typepad.com/blog/2006/12/simplicity_aint_3.html"&gt;Simplicity Ain't So Simple, Part IV: The Blessed Curse of Power Users&lt;/a&gt;&lt;br&gt;&lt;a href="http://nick.typepad.com/blog/2006/12/simplicity_aint_4.html"&gt;Simplicity Ain't So Simple, Part V: Combine Features&lt;/a&gt;&lt;br&gt;&lt;a href="http://nick.typepad.com/blog/2006/12/simplicity_aint_5.html"&gt;Simplicity Ain't So Simple, Part VI: Simple = Secure&lt;/a&gt;&lt;br&gt;&lt;a href="http://nick.typepad.com/blog/2006/12/simplicity_aint_6.html"&gt;Simplicity Ain't So Simple, Part VII: Know When to Stop&lt;/a&gt;&lt;br&gt;&lt;br&gt;So... you've just read all of them I hope?&amp;nbsp; Good.&amp;nbsp; Here's some of my comments in relation to FinalBuilder and Automise :)&lt;br&gt;&lt;br&gt;Firstly, I reckon it's a great series of posts - definitely some great advice in there to stop featuritis creeping in... which bring me to FinalBuilder and Automise...&amp;nbsp; FB and AT have so many features that we loose track of them ourselves.&amp;nbsp; I'm not joking either.&amp;nbsp; And I don't know whether we should be ashamed or proud... (probably ashamed after reading that above post).&amp;nbsp; Sometimes a user will ask "can I do X?" and we have to ask around if anyone knows if we've implemented that or not...&amp;nbsp; But, more features can make a wider audience of users satisfied.&lt;br&gt;&lt;br&gt;It's a fine line of course.&amp;nbsp; You need to put features in to keep people happy, but you must present them so they don't get in the way during day-to-day use.&amp;nbsp; It's also interesting to note that FinalBuilder has gone through a long growing phase of about 6 years with a huge amount of features added each release.&amp;nbsp; We take a lot of suggestions (and opinions) from our users, and will generally add a new feature or option as opposed to not adding it in for the sake of simplicity.&amp;nbsp; But, we tend to be quite careful of where we add the option, and to make it obvious from the icon or wording or placement of what the option is for.&amp;nbsp; Plus we think hard about the default behaviour.&lt;br&gt;&lt;br&gt;One interesting example that we added in for FinalBuilder 4 is a Build Summary screen.&amp;nbsp; It's implemented as a tab which changes the main view from the "Design and Debugging" of your project into a view designed to show overall progress.&amp;nbsp; It was a major new feature for FB4, and it has some advantages over the old way of watching a build.&amp;nbsp; But, we knew a lot of existing customers would hate it.&amp;nbsp; The default behaviour is that the IDE will automatically switch to the Build Summary screen when a build starts.&amp;nbsp; &lt;br&gt;&lt;br&gt;These are the options we added to make everyone happy:&lt;br&gt;&lt;br&gt;A set of radio buttons (only one option can be chosen, top one is the default):&lt;br&gt;&lt;ul&gt;&lt;li&gt;Always show build summary (Run, Run from Current, Run Selected, etc)&lt;/li&gt;&lt;li&gt;Only show build summary on Run&lt;/li&gt;&lt;li&gt;Show Build Summary when build completes&lt;/li&gt;&lt;li&gt;Never show build summary&lt;/li&gt;&lt;/ul&gt;And some checkboxes (either, both or none can be turned on):&lt;br&gt;&lt;ul&gt;&lt;li&gt;Always show build summary if auto build&lt;/li&gt;&lt;li&gt;Show build summary on startup&lt;/li&gt;&lt;/ul&gt;So, quite a lot of options, and you have to access them via the Tools menu | Options | FinalBuilder category | General IDE Options | Runtime Options tab.&amp;nbsp; Pretty hidden away - maybe we'll get a tick for that :)&amp;nbsp; But self explanatory - it's unlikely you need to read the help file to understand what those options are going to do.&lt;br&gt;&lt;br&gt;Another interesting graph I came across a few weeks ago is the &lt;a href="http://headrush.typepad.com/creating_passionate_users/2005/06/featuritis_vs_t.html"&gt;Featuritis vs. the Happy User Peak graph&lt;/a&gt;.&amp;nbsp; Somebody mentioned that they thought FinalBuilder was on the top - thanks for that!&amp;nbsp; But, the perception of a product is different for every person.&amp;nbsp; FinalBuilder is the type of product where there will *always* be users who need more (eg. please support completely unknown product X - our forums are full of people asking for new features EVERY DAY), whereas other people get lost in the sea of configuration options. &lt;br&gt;&lt;br&gt;If I was to choose an application with too few options or too many, I reckon I'd choose the one with too many (most of the time)!&lt;br&gt;&lt;br&gt;</description></item><item><title>Chistmas special for FinalBuilder and Automise!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/590/Chistmas-special-for-FinalBuilder-and-Automise.aspx</link><category /><pubDate>Wed, 13 Dec 2006 14:00:00 GMT</pubDate><description>If you're sitting on the fence, one side is batch files, xml files, or no build process at all, and the other side is a fully automated build process - well, now's the time to take the plunge :)&amp;nbsp; And this applies to those network admins and sys admins also who want to automate some of the tedious and just plain boring stuff they have to do day-in-and-day-out!&amp;nbsp; &lt;br&gt;&lt;br&gt;We've got a &lt;b&gt;special 20% off all FinalBuilder and Automise &lt;/b&gt;licenses purchased from today until the end of 2006!&lt;br&gt;&lt;br&gt;See the home page for more details: &lt;br&gt;&lt;a href=""&gt;http://www.finalbuilder.com&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.automise.com"&gt;http://www.automise.com&lt;/a&gt;&lt;br&gt;</description></item><item><title>Automise 1.5</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/589/Automise-15.aspx</link><category /><pubDate>Tue, 05 Dec 2006 14:00:00 GMT</pubDate><description>We've just released a minor update to Automise, so it's now at version 1.5&lt;br&gt;&lt;br&gt;There a lot of bug fixes, enhancements, and a few new features.&amp;nbsp; Free update to all existing Automise customers!&lt;br&gt;&lt;br&gt;See &lt;a href="/automise-version-history.aspx"&gt;What's New.&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.automise.com/downloads/automise/150/AT150_311.exe"&gt;Download Automise 1.5 Here&lt;/a&gt;.&lt;br&gt;</description></item><item><title>A One Day Special</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/588/A-One-Day-Special.aspx</link><category /><pubDate>Thu, 30 Nov 2006 14:00:00 GMT</pubDate><description>&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;A while ago, I read a message on one of the ASP (Association
of Shareware Professionals) private newsgroups announcing a new "Special
of the Day" type website. It was to be called &lt;a href="http://www.bitsdujour.com"&gt;Bits du Jour&lt;/a&gt; -
 BDJ for short.&amp;nbsp;
BDJ would work along similar lines to &lt;a href="http://www.woot.com/"&gt;Woot!&lt;/a&gt;, but would only feature
software products.&amp;nbsp; I thought “Wow,
great idea... that's a fantastic way to promote a software product.”&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Of course, the software vendor has to discount the product
and provide a cut for BDJ, so the total revenue for each license would be much
smaller than usual, but there is potential to reach a new crowd of people. It
provides a way to promote the product at a lower price point, as a loss leader.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Wait&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I contacted Ellen Craw from BDJ and we exchanged a few
emails.&amp;nbsp; That was back in March 2006,
and Automise 1.0 was still a month away from release. When you release a brand
new product, how do you get the word out?&amp;nbsp;
Bits du Jour sounded like a great way to make a splash and build up a
user base.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Automise retails for $195 US, and Ellen suggested that
products priced over $20 don't sell so well on BDJ.&amp;nbsp; It's all about impulse buys, and it sounds like twenty bucks is
about the threshold. At the time we thought that $20 was just too cheap for a
$200 product… no sale!&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Time passed.&amp;nbsp;
Automise generated some sales and some interest, including some positive
reviews, but we still didn’t have the widespread market penetration that we
wanted.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;So, in early November 2006, I thought we'd approach BDJ
again.&amp;nbsp; 90% discount off any product is
sure to generate a lot of new sales.&amp;nbsp; We
also figured that BDJ should have gained in popularity since it's launch
earlier in the year, and there should be a reasonable number of people now
subscribed to it's RSS feeds and emails.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;[As a side note, I bought &lt;a href="http://www.thestarwoking.co.uk/software/bar_genie.php"&gt;Bar Genie&lt;/a&gt; through BDJ a few months
back... it was a good deal and a nice reference for mixing cocktails!]&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Preparation&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;We set a date - Wednesday 29th November 2006.&amp;nbsp; Nothing special about it, but we chose a day
in the middle of the week so that it wouldn’t overlap with a weekend or public
holiday in any timezone. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Recently, Paul has done a considerable amount of work on our
website store. This made it easy for us to set up a new coupon code that would
last 24 hours.&amp;nbsp; A few simple tests and
we were ready.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Ellen drafted the BDJ article on Automise, and she also ran
through the whole process to verify that everything held together.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;D-Day&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The special went live at midnight in the US (Central
Standard Time).&amp;nbsp; It was 5 in the
afternoon here.&amp;nbsp; I checked the BDJ site
and Automise was on the home page.&amp;nbsp; 90%
discount was highlighted with red stars on either side - there's no question
that this was a big discount. :)&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br&gt;&lt;p&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/automise%20on%20bdj.png" alt="automise on bdj.png" border="0" height="96" width="389"&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;!--[endif]--&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I sent out some emails to some of our existing customers,
users that we maintain a good relationship with.&amp;nbsp; The email notified them of the special on BDJ for Automise, and
encouraged them to spread the news. :)&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The first sale came through 17 minutes after the special
went live. Bloody Great! :)&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;The next sale came in at 22 minutes past, then another at
31, and another at 38.&amp;nbsp; “Wow... this is
awesome.”&amp;nbsp; In the first hour we made
seven sales.&amp;nbsp; Seven new customers.
Excellent!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Then it went a bit quiet.&amp;nbsp;
Over the next six or seven hours there were between about two and six
sales an hour.&amp;nbsp; Still great though, and
by this time it was late evening in Australia.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Now, I want to give you some background on our order
process.&amp;nbsp; To place an order for Automise
or FinalBuilder, you need to be a registered user on our website.&amp;nbsp; New registrations need to have their email
addresses confirmed (via a link in an email.)&amp;nbsp;
After you’re registered, you can add items to your shopping cart and go
through the checkout process.&amp;nbsp; During
checkout, there is a coupon field. This is where the BitsDuJour coupon needed
to be added in order to grant the 90% discount.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;After checkout, our store redirects to the WorldPay payment
gateway. WorldPay handles all of the credit card processing.&amp;nbsp; We receive a Web Services callback with the
status of the order, and send an automated email to the customer.&amp;nbsp; The order then goes into a “pending” state
so that we can review the order (eg. to check for fraud) and then we click a
button to process it.&amp;nbsp; FinalBuilder and
Automise aren't high turnover products, so this process works great and we
catch 99.9% of fraud before the license key is sent out.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Anyhow...I woke up the next morning and checked the pending
orders.&amp;nbsp; “Wow...” over 80 orders had come
in during the night!&amp;nbsp; Now someone had to
process them.&amp;nbsp; And guess what, that
someone was me…&amp;nbsp; It was a case of mixed
emotions: heaps of sales, but a boring job manually checking and processing
each one!&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Sales continued to come in for the rest of the day. All up,
the final count was 226 sales.&amp;nbsp; We were
all stoked, and a bit tired too.&amp;nbsp; The
sale had generated quite a bit of extra support work, and also there were also
some bugs that showed up in the order process.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I emailed Ellen to let her know how we went, and got the
following reply:&lt;/p&gt;

&lt;p&gt;"That's GREAT - you just broke all my records. Thank
YOU!"&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Also, traffic on the BDJ site was about 40% higher than
usual.&amp;nbsp; We tried to promote the special
as much as we could.&amp;nbsp; Some fairly high
profile bloggers mentioned the deal, eg. Roy Osherove (ISerializable) and Troy
Magennis (LINQed IN).&amp;nbsp; I'm sure a lot of
traffic came to the site because of this.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Here's a graph of our sales volume over the 24 hour period:&lt;/p&gt;

&lt;p&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/BDJ%20Sales%20over%20the%2024%20hours%20of%20Automise.png" alt="BDJ Sales over the 24 hours of Automise.png" border="0" height="487" width="931"&gt;&lt;br&gt;&lt;!--[endif]--&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;And here's our daily website traffic.&amp;nbsp; Because of our timezone the traffic is
spread over both the Wednesday and Thursday.&amp;nbsp;
There's a pretty obvious spike!&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/BDJ%20related%20website%20traffic.png" alt="BDJ related website traffic.png" border="0" height="263" width="577"&gt;&lt;br&gt;&lt;!--[endif]--&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;So, there you have it.&amp;nbsp;
Overall it's been a great opportunity to feature Automise on Bits du
Jour.&amp;nbsp; If you're thinking about
featuring your product on BDJ, and the software has a fairly general audience,
then I reckon you should go for it!&amp;nbsp;
Thanks heaps to Ellen and Bits du Jour, the people who helped us promote
the special, and especially to all our new customers. :)&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problems&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Over the course of the sale, we experience a few minor
problems that we hadn’t noticed before.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;1. One of the main problems was that the store would allow
you to enter the coupon code (and validate it) with an extra space character
"BitsDuJour ".&amp;nbsp; But then when
the Process Order button was pressed, the coupon would be rejected. Many people
reported that they couldn't get the coupon code to work, and it wasn't until
about 18 hours into the special that we figured out why and fixed the bug.&amp;nbsp; We lost sales because of this - people emailed
us and told us so.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;2. Another weird problem was that some people (normally from
Germany) had problems with the store redirected to WorldPay.&amp;nbsp; This was caused by the regional settings
using a comma in the total amount instead of a decimal point.&amp;nbsp; We fixed the bug but also had to process
some of these orders manually before we had figured out the reason why.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;3. We accidentally had heaps of references to FinalBuilder
in the automated emails sent out for the store. This was more of an
embarrassment than a problem, and we fixed it during the day as well.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What we've learnt&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;1. Bits du Jour was great idea.&amp;nbsp; The customer base for Automise has grown, and there are a lot of
happy people.&amp;nbsp; The price was low enough
to create impulse purchases, and will hopefully act as a loss leader to make
Automise better known.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;2. There were some bugs in the store that we should have
known about.&amp;nbsp; More testing required!&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;3. The order process is too difficult.&amp;nbsp; A lot of people got a bit peeved at the
entire process, and I'm sure some people gave up.&amp;nbsp; There was a short thread on the Joel on Software forums with some
criticism of the process:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://discuss.joelonsoftware.com/default.asp?biz.5.421152.9"&gt;http://discuss.joelonsoftware.com/default.asp?biz.5.421152.9&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;4. Promotion is very important.&amp;nbsp; See below for mentions of the Automise special which appeared on
various blogs.&amp;nbsp; I posted the deal on a
couple of mailing lists as well.&amp;nbsp; This
made a huge difference.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links from the Blogosphere, and other coverage of the BDJ
Automise special&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://wesnerm.blogs.com/net_undocumented/2006/11/components.html"&gt;http://wesnerm.blogs.com/net_undocumented/2006/11/components.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Coincidentally, &lt;a href="blogs.aspx?EntryID=221"&gt;his post today is
offering Automise for $19&lt;/a&gt;&amp;nbsp;(down from $199) for 24 hours in &lt;a href="http://bitsdujour.com/"&gt;Bits du Jour&lt;/a&gt;, a site, much like &lt;a href="http://www.woot.com/"&gt;Woot&lt;/a&gt;, offering new discounted software
daily."&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://aspiring-technology.com/blogs/troym/archive/2006/11/29/63.aspx"&gt;http://aspiring-technology.com/blogs/troym/archive/2006/11/29/63.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Todays deal caught my eye - its 90% off. Automise - a
general purpose automation tool (think GUI based scripting and debugging)."&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/rosherove/archive/2006/11/28/cool-promotion-automise-for-20-for-24h-window.aspx"&gt;http://weblogs.asp.net/rosherove/archive/2006/11/28/cool-promotion-automise-for-20-for-24h-window.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"A little bird tells me that in a few hours you'll be
able to get Automise
(that's the system admin's version of FinalBuilder - my favorite build
automation tool) &lt;a href="http://www.bitsdujour.com/"&gt;over here&lt;/a&gt; for a 90%
discount - less than $20 instead of $195 for a 24 hour window."&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mortonfox.livejournal.com/465710.html"&gt;http://mortonfox.livejournal.com/465710.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Got a copy of Automise at a 90%
discount, thanks to &lt;a href="http://www.bitsdujour.com/"&gt;Bits du Jour&lt;/a&gt;. When
I have more time, I'll dig deeper into the software to see if it's really that
much better than &lt;a href="http://www.autohotkey.com/"&gt;AutoHotkey&lt;/a&gt;. I have
Bits du Jour in my &lt;a href="http://del.icio.us/pcheah"&gt;del.icio.us bookmarks&lt;/a&gt;,
but I'd forgotten all about it until IanH. &lt;a href="http://discuss.joelonsoftware.com/default.asp?joel.3.420886.3"&gt;mentioned
the deal&lt;/a&gt; on the Joel on Software discussion forum."&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://midspot.wordpress.com/2006/11/29/automise-at-a-great-deal/"&gt;http://midspot.wordpress.com/2006/11/29/automise-at-a-great-deal/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;"Automise does it for you. I downloaded the trial last night and it is pretty slick and
powerful. Try it for free, and today only you can get a &lt;a href="http://www.bitsdujour.com/"&gt;huge discount on the product&lt;/a&gt;."&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some other user comments&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Holy discount, Batman! I almost feel duty bound to buy this 'cos of
the 90% off!&amp;nbsp; Nice job BDJ and
Automise!"&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;"Thank you very much for this generous rebate!"&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;"Very cool tool!&lt;br&gt;
I have tested many automation tools and Automise is one of the best.&lt;br&gt;
When I saw this promotion this morning I just bought it - thank you!"&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;"I've heard good things about it, and at 90% off, you can't really go
wrong, can you?"&lt;/p&gt;

</description></item><item><title>Automise on Bits du Jour</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/587/Automise-on-Bits-du-Jour.aspx</link><category /><pubDate>Tue, 28 Nov 2006 14:00:00 GMT</pubDate><description>If you're thinking about buying Automise, or you need an automation tool for Windows... &lt;b&gt;today is your lucky day&lt;/b&gt;!&lt;br&gt;&lt;br&gt;Yep, Automise is being featured on Bits du Jour today (Wednesday 29th November 2006).&lt;br&gt;&lt;br&gt;&lt;a href="http://www.bitsdujour.com/"&gt;http://www.bitsdujour.com/&lt;/a&gt;&lt;br&gt;</description></item><item><title>MVP offers!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/586/MVP-offers.aspx</link><category /><pubDate>Tue, 21 Nov 2006 14:00:00 GMT</pubDate><description>If you're an MVP (Microsoft Valued Professionals), please contact me directly (tate at finalbuilder dot com, or tate at automise dot com) for a very special offer&amp;nbsp; :)&lt;br&gt;</description></item><item><title>Finally there is a law and suitable punishment for breaking the build!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/585/Finally-there-is-a-law-and-suitable-punishment-fo.aspx</link><category /><pubDate>Fri, 17 Nov 2006 14:00:00 GMT</pubDate><description>Good on you Plip!&lt;br&gt;&lt;br&gt;&lt;a href="http://weblogs.asp.net/plip/archive/2006/11/16/who-broke-the-build.aspx"&gt;Who Broke the Build?&lt;/a&gt;</description></item><item><title>David Hayden is now a self confessed Build Junkie :)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/584/David-Hayden-is-now-a-self-confessed-Build-Junkie-.aspx</link><category /><pubDate>Thu, 16 Nov 2006 14:00:00 GMT</pubDate><description>"I am officially a build junkie. I love the automation. I love how quickly
I can check-in new code and have the build process get me a fresh,
working copy of everything in seconds. Yes, seconds. FinalBuilder makes it easy - &lt;strong&gt;really easy.&lt;/strong&gt;"&lt;br&gt;&lt;br&gt;From: &lt;a href="http://davidhayden.com/blog/dave/archive/2006/11/15/FinalBuilderBuildAutomation.aspx"&gt;FinalBuilder - Leverage the Software Delivery / Automated Build Process in .NET&lt;/a&gt;, blog post by &lt;a href="http://www.davidhayden.com"&gt;David Hayden.&lt;/a&gt;&lt;br&gt;</description></item><item><title>FinalBuilder 5 reviewed at Larkware</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/583/FinalBuilder-5-reviewed-at-Larkware.aspx</link><category /><pubDate>Sun, 12 Nov 2006 14:00:00 GMT</pubDate><description>Mike Gunderloy over at &lt;a href="http://www.larkware.com/"&gt;Larkware&lt;/a&gt; has just &lt;a href="http://www.larkware.com/NewReviews/finalbuilder5.aspx"&gt;reviewed FinalBuilder 5!&lt;/a&gt; :)&lt;br&gt;&lt;br&gt;Here's a couple of quotes:&lt;br&gt;&lt;br&gt;"FinalBuilder, 
which just released its fifth major version, offers a full-featured IDE for 
managing complex software build and deployment processes."&lt;br&gt;&lt;br&gt;"I've been using FinalBuilder myself for several years now, and I'm quite 
happy with it. VSoft continues to add new features, while preserving the ease of use that attracted
    me to the product in the first place. If visual tools appeal to you more than XML ones, and you need a 
powerful build and management utility, you ought to check it out for yourself."&lt;br&gt;&lt;br&gt;Thanks Mike!&lt;br&gt;</description></item><item><title>A dead GUID</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/582/A-dead-GUID.aspx</link><category /><pubDate>Thu, 02 Nov 2006 14:00:00 GMT</pubDate><description>Yeah, we all know the jokes about killing &lt;a href="http://en.wikipedia.org/wiki/Guid"&gt;GUIDs&lt;/a&gt; (ie. creating them for no reason), and I just happened to need another GUID a few minutes ago, so I went and generated one a new one, but it was already DEAD... check it out:&lt;br&gt;&lt;br&gt;{3B795CB4-DEAD-4064-B5E1-6174B7414563}&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Windows Powershell</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/581/Windows-Powershell.aspx</link><category /><pubDate>Tue, 31 Oct 2006 14:00:00 GMT</pubDate><description>Was just reading &lt;a href="http://arnonel.com/blogs/arnonel/default.aspx"&gt;Arno Nel's blog&lt;/a&gt;, and he reminded me about Windows Powershell.&lt;br&gt;&lt;br&gt;All of us here had a look at Powershell a few weeks back and were really impressed - and we're going to be investigating adding support into FinalBuilder and Automise for Powershell soonish hopefully :)&lt;br&gt;&lt;br&gt;Here's a few links:&lt;br&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx"&gt;Windows PowerShell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx"&gt;Scripting with Windows PowerShell&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/PowerShell/"&gt;Windows PowerShell Blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Windows_PowerShell"&gt;Windows PowerShell - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;</description></item><item><title>Daily Grind 1000</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/580/Daily-Grind-1000.aspx</link><category /><pubDate>Thu, 26 Oct 2006 14:00:00 GMT</pubDate><description>Congratulations to Mike Gunderloy over at &lt;a href="http://www.larkware.com/"&gt;Larkware&lt;/a&gt;... he's up to the 1000th Daily Grind - an essential read every morning to get the important news and other stuff going on in the Windows and .NET development world.&lt;br&gt;&lt;br&gt;Impressive mate, keep it up!&lt;br&gt;</description></item><item><title>FinalBuilder 5 is out!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/579/FinalBuilder-5-is-out.aspx</link><category /><pubDate>Mon, 23 Oct 2006 14:00:00 GMT</pubDate><description>It's been almost a year in the making, but &lt;a href="/finalbuilder-5-press-release.aspx"&gt;today&lt;/a&gt; is the day - FinalBuilder 5 is released (&lt;a href="/download.aspx"&gt;download trial&lt;/a&gt;).&lt;br&gt;&lt;br&gt;We've now got over 600 actions (see &lt;a href="/new-in-finalbuilder-5.aspx"&gt;what's new&lt;/a&gt;), which is a pretty decent improvement on the 440 in FinalBuilder 4.&amp;nbsp; &lt;br&gt;There's also heaps of really &lt;a href="/blogs.aspx?EntryID=203"&gt;cool&lt;/a&gt; &lt;a href="/blogs.aspx?EntryID=205"&gt;new&lt;/a&gt; &lt;a href="/blogs.aspx?EntryID=207"&gt;stuff&lt;/a&gt; in the IDE.&amp;nbsp; &lt;br&gt;We've even made the logo a nice blue with beveled edges :) [geez, the old logo sucked!]&lt;br&gt;Prices remain the same too.&lt;br&gt;
&lt;br&gt;
&lt;img src="/Portals/0/images/finalbuilder_logo_small.png"&gt;</description></item><item><title>FinalBuilder 5 Release Candidate 2</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/578/FinalBuilder-5-Release-Candidate-2.aspx</link><category /><pubDate>Fri, 20 Oct 2006 05:00:00 GMT</pubDate><description>&lt;a href="downloads/finalbuilder/500/FB500_44.exe"&gt;http://www.finalbuilder.com/downloads/finalbuilder/500/FB500_44.exe&lt;/a&gt;
&lt;br&gt;[it seems that links I post on my blog get screwed up in the rss feed... sorry... :( ]&lt;br&gt;&lt;br&gt;&lt;optimism&gt;This is the last build before release...&lt;/optimism&gt;&lt;br&gt;&lt;br&gt;But seriously, please report any bugs ASAP to support if you can afford a little time to give it a test, thanks!&lt;br&gt;&lt;br&gt;.t8&lt;br&gt;
</description></item><item><title>New in FinalBuilder 5 - more actions now support FileSets</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/577/New-in-FinalBuilder-5-more-actions-now-support-.aspx</link><category /><pubDate>Tue, 17 Oct 2006 05:00:00 GMT</pubDate><description>FileSets are cool.&amp;nbsp; We introduced them in FinalBuilder 4 but in FinalBuilder 5 we've made them natively supported by more actions, plus some other brand new actions also natively support FileSets.&lt;br&gt;&lt;br&gt;So, firstly, just a quick lesson on FileSets:&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;A FileSet is a collection of files.&amp;nbsp; The collection of files is defined by using the "FileSet Define" action, where you specify the base directory and then various selections and exclusions to get exactly which files you want.&amp;nbsp; For example, you might include *.txt and *.pdf files modified after yesterday, but exclude files that have "temp" in their name.&amp;nbsp; The Include Patterns, Exclude Patterns and Filters in the FileSet Define action are really quite powerful.&lt;/li&gt;&lt;li&gt;Some of the other FileSet actions are: FileSet Delete Files (deletes all physical files listed in the FileSet), FileSet Copy/Move (copy of move the files to another location), FileSet log files (record what files are in the FileSet in the FinalBuilder log).&amp;nbsp; There's a few more too, but you get the idea.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;b&gt;And here's the what's new bit in FinalBuilder 5 - we've extended the following actions to natively support FileSets: Burn CD/DVD, Create ISO File, FTP Upload, and File Exists.&lt;br&gt;Other new actions in FinalBuilder 5 that support FileSets: Spell Checking, Image Manipulation, and JPEG Lossless Rotate.&lt;/b&gt;&lt;br&gt;&lt;br&gt;I reckon the best news is for people using the Burn CD/DVD and Create ISO actions, as the selection dialog for files is not the best in the world, and nowhere near as flexible as using FileSets.&amp;nbsp; Plus we've had plenty of requests for the FTP Upload action to support FileSets too.&lt;br&gt;&lt;br&gt;Here's a couple of screenshots showing how to define a FileSet and using it in the Burn CD/DVD action:&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/FileSet1.png" alt="FileSet1.png" border="0"&gt;&lt;br&gt;Defining the FileSet - give it a name and a base directory&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;img src="/Portals/0/ArticleImages/BlogImages/FileSet2.png" alt="FileSet2.png" border="0"&gt;&lt;br&gt;Include *.cs and *.sln files (recursive too)&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;img src="/Portals/0/ArticleImages/BlogImages/FileSet3.png" alt="FileSet3.png" border="0"&gt;&lt;br&gt;Don't include any files that have "TEMP" in their name&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;img src="/Portals/0/ArticleImages/BlogImages/FileSet4.png" alt="FileSet4.png" border="0"&gt;&lt;br&gt;Only get files that have been modified after 1st October 2006, and they're not System or Hidden files (why source files would be hidden or system I don't know.... but this is just an example :)&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;img src="/Portals/0/ArticleImages/BlogImages/FileSet5.png" alt="FileSet5.png" border="0"&gt;&lt;br&gt;Now the Burn CD/DVD action.&amp;nbsp; Select the burner to use and give the disc a name.&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;img src="/Portals/0/ArticleImages/BlogImages/FileSet6.png" alt="FileSet6.png" border="0"&gt;&lt;br&gt;And then select the FileSet just created as the source of the files.&amp;nbsp; Too easy!&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>New in FinalBuilder 5 - Image Manipulation Actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/576/New-in-FinalBuilder-5-Image-Manipulation-Actions.aspx</link><category /><pubDate>Sun, 15 Oct 2006 14:00:00 GMT</pubDate><description>We've added two actions to &lt;a href="/"&gt;FinalBuilder&lt;/a&gt; 5 to manipulate image files (ie. JPEG, GIF, etc):&lt;br&gt;&lt;ul&gt;&lt;li&gt;Image Manipulation&lt;/li&gt;&lt;li&gt;JPEG Lossless Transform&lt;/li&gt;&lt;/ul&gt;So, what can these do? &lt;br&gt;&lt;br&gt;Well, firstly, JPEG Lossless Transform can be used to rotate, flip, transpose, mirror, or transverse transpose a JPEG image without loss of any information.&amp;nbsp; Normally, if you rotate a JPEG it has to be recompressed, and this causes information loss.&amp;nbsp; So this action can do these basic operations without recompressing the JPEG.&amp;nbsp; But what's cooler is that it can perform a rotation if required automatically based on &lt;a href="http://en.wikipedia.org/wiki/Exif"&gt;Exif&lt;/a&gt; information stored in the JPEG.&lt;br&gt;&lt;br&gt;Let me explain further - most digital cameras store certain information about the photo inside the JPEG file (called Exif).&amp;nbsp; This information can be the size of the photo, exposure time, if the flash was on or not, the make/model of the camera, etc.&amp;nbsp; Some cameras also detect the orientation of the camera when the photo was taken, and also record this information.&amp;nbsp; This is great when taking portrait shots as the photos can be automatically rotated using this orientation information in the Exif to rotate the photo so that it appears correctly on your monitor.&amp;nbsp; I know most Canon and Nikon cameras store the orientation, but not sure about others.&amp;nbsp; So, basically, you could use FinalBuilder to scan your entire hard disk and automatically rotate any photos that need rotating!&lt;br&gt;&lt;br&gt;The other action is the Image Manipulation.&amp;nbsp; Here are some of the things it can do:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Convert image to: BMP, JPEG, GIF, PDF, TIFF, and PNG&lt;/li&gt;&lt;li&gt;Rotate Image&lt;/li&gt;&lt;li&gt;Mirror Image&lt;/li&gt;&lt;li&gt;Flip Image&lt;/li&gt;&lt;li&gt;Resize (to specific pixels, or percentage, and with choice of resize algorithm)&lt;/li&gt;&lt;/ul&gt;And you can combine functions - for example you can resize an image to a thumbnail of 100x75 and then convert to PNG.&amp;nbsp; Both the Image Manipulation and JPEG Lossless Transform actions also accept a FileSet, so you can easily do bulk operations.&lt;br&gt;&lt;br&gt;So, a couple of practical examples - just say you want to convert all your .bmp screenshots in your help file to .png, or create thumbnails sized images for your screenshots on your website - very easy with these new actions.&amp;nbsp; And I already use the auto rotate using Exif information to automatically rotate my own photos :)&lt;br&gt;&lt;br&gt;Some screenshots of the Image Manipulation action:&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/ImageManipulate1.png" alt="ImageManipulate1.png" border="0"&gt;&lt;br&gt;
&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/ImageManipulate2.png" alt="ImageManipulate2.png" border="0"&gt;&lt;br&gt;
&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/ImageManipulate3.png" alt="ImageManipulate3.png" border="0"&gt;&lt;br&gt;
&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/ImageManipulate4.png" alt="ImageManipulate4.png" border="0"&gt;&lt;br&gt;</description></item><item><title>FinalBuilder 5 - Stack and Queue Actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/575/FinalBuilder-5-Stack-and-Queue-Actions.aspx</link><category /><pubDate>Mon, 09 Oct 2006 14:00:00 GMT</pubDate><description>For FinalBuilder 5 we've added a new set of actions for storing and retrieving data in &lt;a href="http://en.wikipedia.org/wiki/Stack_%28data_structure%29"&gt;stacks&lt;/a&gt;
and &lt;a href="http://en.wikipedia.org/wiki/Queue"&gt;queues&lt;/a&gt;.&amp;nbsp; These actions allow you to build up a list of items and then access
them them in either a first in, first out (Queue) or first in, last out
(Stack) manner. Create a new Stack or Queue using the Define action,
and then to add items, use the Push or Insert actions. To use the items
in the list, either use the Pop action to access them one at a time, or
use the Iterator to perform the same action on each item until the list
is empty. The new actions are:&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;img src="/Portals/0/ArticleImages/BlogImages/StackQueue.png" alt="StackQueue.png" border="0" height="234" width="241"&gt;
&lt;ul&gt;&lt;li&gt;Stack/Queue define - define a stack or a queue 
&lt;/li&gt;&lt;li&gt;Stack/Queue Log Items - write to the log all items 
&lt;/li&gt;&lt;li&gt;Stack/Queue Push Items - add a new item or set of items to the list 
&lt;/li&gt;&lt;li&gt;Stack/Queue Pop - get an item from the top 
&lt;/li&gt;&lt;li&gt;Stack/Queue Peek - get an item without removing it 
&lt;/li&gt;&lt;li&gt;Stack/Queue get Count - get the count of how many items are in the list 
&lt;/li&gt;&lt;li&gt;Stack/Queue Insert Item - add an item in a particular location in the list 
&lt;/li&gt;&lt;li&gt;Stack/Queue is Empty - check if list is empty or not 
&lt;/li&gt;&lt;li&gt;Stack/Queue Clear - remove all items from the list 
&lt;/li&gt;&lt;li&gt;Stack/Queue Iterator - run child actions for each item in the list&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;These actions are interesting because it opens up interesting possibilities with recursion and processing lists of data.&amp;nbsp; For example, you may have some process at the start of your build to build up a list, lets say a list of filenames, and maybe this list comes from calling an external process like your version control system.&amp;nbsp; Then you might want to run a set of actions for each of those files, but it's possible that while processing a file you might need to add extra files onto the list.&amp;nbsp; So, you might end up with the following:&lt;br&gt;&lt;br&gt;Define Stack&lt;br&gt;Push Items on Stack (from external process)&lt;br&gt;Is Stack Empty (set variable IsEmpty)&lt;br&gt;While Action (controlled by IsEmpty)&lt;br&gt;&amp;nbsp;&amp;nbsp; Pop Stack (into varible CurrentFile)&lt;br&gt;&amp;nbsp;&amp;nbsp; Do some processing on the CurrentFile&lt;br&gt;&amp;nbsp;&amp;nbsp; maybe push more items on the stack&lt;br&gt;&amp;nbsp;&amp;nbsp; Is Stack Empty (set variable IsEmpty)&lt;br&gt;
End While&lt;br&gt;&lt;br&gt;This "PsudoActionCode" shows that you can control a loop by the amount of data you need to process which may change during the course of processing the data.&amp;nbsp; We haven't found a use for it yet in our build process, but we have had customers ask for these types of data structures.&amp;nbsp; I'd be very interested in seeing how these actions are used in a real build process.&lt;br&gt;</description></item><item><title>New in FinalBuilder 5 - Configure Packages Wizard</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/573/New-in-FinalBuilder-5-Configure-Packages-Wizard.aspx</link><category /><pubDate>Mon, 09 Oct 2006 05:00:00 GMT</pubDate><description>&lt;a href="/"&gt;FinalBuilder&lt;/a&gt; has a plugin architecture, and almost all actions in FinalBuilder are loaded via a plugin (we call them Action Packages, or just Packages).&amp;nbsp; Each package contains one or more related actions.&amp;nbsp; For example, the FB50PDF package contains the "PDF Merge Files", "Convert to PDF", "PDF Insert Text" and "Convert PDF" actions.&amp;nbsp; All up there is 105 packages loaded by default when FinalBuilder starts.&amp;nbsp; That's quite a lot of packages!&lt;br&gt;&lt;br&gt;Now having a lot of packages does slow the startup time for FinalBuilder.&amp;nbsp; Each package takes around 0.02 of a second to load, so without any packages the IDE would start about 2 seconds quicker.&amp;nbsp; On my machine FinalBuilder 5 takes about 4 seconds to load, so half of that are the plugins loading.&amp;nbsp; It's not a drastic slowdown, but quicker is better, so the less plugins you need to load the better :)&lt;br&gt;&lt;br&gt;The other disadvantage with so many packages, is that there's sooooo many actions to choose from in the IDE.&amp;nbsp; &lt;b&gt;All up there's just over 600 actions.&lt;/b&gt;&amp;nbsp; But, I'd say that most people would only use a very small percentage of them.&amp;nbsp; For example, if you use Microsoft TeamFoundation version control, you don't need the Perforce actions, Subversion actions, AccuRev, MKS, Surround, ClearCase, TeamCoherence, etc, etc.&lt;br&gt;&lt;br&gt;So, we've introduced a new wizard that runs the first time you start FinalBuilder 5 (and it's in the Tools menu).&amp;nbsp; The Configure Wizard is designed to make it easy for you to turn off packages that you'll never need.&amp;nbsp; They're still installed, and can be easily turned on if you need them later, but it's a good way to encouraging people to turn off some packages.&lt;br&gt;&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/ConfigWizard.png" alt="ConfigWizard.png" border="0"&gt;&lt;br&gt;&lt;br&gt;The Configure Wizard contains the following page: Version Control Systems, Compilers, Help Compilers, Installers, Licensing Tools, and Other Packages.&amp;nbsp; It also has a page which allows you to configure the default script language, the maximum number of builds to store in the log file, and the key bindings (either Microsoft Style, or Borland Style).&lt;br&gt;&lt;br&gt;FinalBuilder 5 in now in beta testing. Read the &lt;a href="/finalbuilder-5-beta-press-release.aspx"&gt;Press Release&lt;/a&gt;. See &lt;a href="/new-in-finalbuilder-5.aspx"&gt;What's New in FB5&lt;/a&gt;.</description></item><item><title>FinalBuilder 5 Release Candidate 1</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/574/FinalBuilder-5-Release-Candidate-1.aspx</link><category /><pubDate>Sun, 08 Oct 2006 14:00:00 GMT</pubDate><description>We're getting close now :)&lt;br&gt;&lt;br&gt;&lt;a class="moz-txt-link-freetext" href="downloads/finalbuilder/500/FB500_37.exe"&gt;http://www.finalbuilder.com/downloads/finalbuilder/500/FB500_37.exe&lt;/a&gt;
&lt;br&gt;&lt;br&gt;Please email support at finalbuilder dot com if you find a bug/issue or would like to make any comments.&lt;br&gt;</description></item><item><title>USB Hamster Wheel</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/572/USB-Hamster-Wheel.aspx</link><category /><pubDate>Thu, 05 Oct 2006 14:00:00 GMT</pubDate><description>I can't wait until I can buy one of these (I'm not sure if that's sarcasm or the truth...)&lt;br&gt;&lt;br&gt;
&lt;img src="http://www.crazyaboutgadgets.com/uploads/usb-hamster.jpg"&gt;&lt;br&gt;&lt;a href="http://www.crazyaboutgadgets.com/related.asp?product_extra=USB%20Hamster%20Wheel"&gt;http://www.crazyaboutgadgets.com/related.asp?product_extra=USB%20Hamster%20Wheel&lt;/a&gt;&lt;br&gt;&lt;br&gt;It's designed to run whenever you type... but I'm sure that could be changed!&amp;nbsp; How cool would it be if the hamster would run whenever we have a &lt;a href=""&gt;FinalBuilder&lt;/a&gt; build going? :) &lt;br&gt;</description></item><item><title>FinalBuilder 5 - Build Statistics</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/571/FinalBuilder-5-Build-Statistics.aspx</link><category /><pubDate>Tue, 03 Oct 2006 14:00:00 GMT</pubDate><description>Here's one of my &lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;favourite &lt;/span&gt;new features of FinalBuilder 5:&lt;br&gt;&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/Build_History.png" alt="Build_History" border="0" height="301" width="839"&gt;&lt;br&gt;&lt;br&gt;The Build Stats tab gives you a whole bunch of ways to graphically view (and print and export) the historical statistics of your build project.&amp;nbsp; All the graphs here are actually our FinalBuilder 5 build machine.&amp;nbsp; There's quite a downward trend in the amount of builds per day thankfully, and we've only had two days without a failed build for some reason or another...&lt;br&gt;&lt;br&gt;Here's some other cool graphs you can get out of the build stats:&lt;br&gt;&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/Build_History_DayOfWeek.png" alt="Build_History_DayOfWeek.png" border="0" height="377" width="572"&gt;&lt;br&gt;&lt;br&gt;The above graph shows that you can turn on the legend if you want, view either successful or failed or both, and turn off the 3D view also.&amp;nbsp; Thankfully there's no builds done on Saturday or Sunday!&amp;nbsp; And if you don't want the build to fail, try not to do it on a Thursday ;)&lt;br&gt;&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/Build_History_TimeOfDay.png" alt="Build_History_TimeOfDay.png" border="0" height="365" width="1012"&gt;&lt;br&gt;&lt;br&gt;Also a Success Ratio pie chart can display at a glance the ratio of successful to failed builds of the selected date range.&lt;br&gt;We also do all our builds during business hours.&lt;br&gt;&lt;br&gt;One important change we had to make for FinalBuilder 5 to enable this, was that we need to maintain a record of all historic builds in the log file.&amp;nbsp; The detailed log information is deleted the same way as in FB4 (ie. a user configurable number of the most recent detailed logs are kept, older ones are deleted), but an extra table in the database has a permanent record of all past builds.&lt;br&gt;&lt;br&gt;(please email us if you would like to participate in the FinalBuilder 5 beta)&lt;br&gt;&lt;br&gt;</description></item><item><title>What we drink...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/570/What-we-drink.aspx</link><category /><pubDate>Thu, 28 Sep 2006 14:00:00 GMT</pubDate><description>A couple of weeks ago we got a small bar fridge for the office... and it's stocked with a variety of drinks (non-alcoholic unfortunately...).&amp;nbsp; And what do you do with empties before you recycle them? Well, you build a pyramid, right?&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/BlogImages/FinalBuilderDrinkingHabits.jpg" alt="FinalBuilderDrinkingHabits" border="0" height="453" width="244"&gt;&lt;br&gt;&lt;br&gt;I'm responsible for the Lemonade and some of the Solo&lt;br&gt;Vincent drinks Solo and some Coke&lt;br&gt;Angus goes for Coke and sometimes Solo&lt;br&gt;And Paul drinks Diet Coke&lt;br&gt;&lt;br&gt;Anyway, it's time to recycle now, and begin the rebuild ;)&lt;br&gt;</description></item><item><title>What's new in FinalBuilder 5 - FinalBuilder VariableSense™</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/404/Whats-new-in-FinalBuilder-5-FinalBuilder-Variab.aspx</link><category>FinalBuilder</category><pubDate>Wed, 27 Sep 2006 05:00:00 GMT</pubDate><description>As software developers, we've all be spoiled by modern development IDE's like Microsoft Visual Studio, Borland Delphi, JBuilder etc. We've become so accustomed to the Code Completion or Intellisense features that we find it hard to write code in notepad these days! Every day, we deal with class libraries with hundreds or even thousands of classes, methods, variables etc and we couldn't possibly remember the names of every identifier. How many times a day do you find yourself typing a class or type name in the code editor, then typing a dot and waiting for the Intellisense drop down list to appear, and then spend a few minutes exploring what's on offer. Well, why should it be any different when working in text fields in FinalBuilder (the script editor already has a code completion feature)? Enter FinalBuilder VariableSense&amp;trade;.&lt;br /&gt;
&lt;br /&gt;
&lt;img src="/Portals/0/ArticleImages/BlogImages/variablesense.gif" alt="variablesense.gif" height="156" width="480" style="border-width: 0px;border-style: solid;" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Simply Type the Variable delimeter character ( % ) and down pops a list of variables available. As you type the list is filtered. You can use the up/down arrow keys and page up/down keys to scroll the list, hit enter to insert the currently selected entry. &lt;br /&gt;
&lt;br /&gt;
VariableSense&amp;trade; works in all Edit Boxes and Combo Boxes that allow typing. In the future we'll be extending this to other control types such as grids etc.&lt;br /&gt;
&lt;br /&gt;</description></item><item><title>Squidoo</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/569/Squidoo.aspx</link><category /><pubDate>Tue, 26 Sep 2006 14:00:00 GMT</pubDate><description>I'm an avid reader of &lt;a href="http://sethgodin.typepad.com/seths_blog/"&gt;Seth Godin's blog.&lt;/a&gt;&amp;nbsp; I don't hang on every word he says, but it's nice to read his opinions, comments and advice.&lt;br&gt;&lt;br&gt;One of his latest blog entries, was &lt;a href="http://www.squidoo.com/topfreethings/"&gt;"The 8 Free Things Every Site Should Do"&lt;/a&gt;, which includes building a Lens on &lt;a href="http://www.squidoo.com"&gt;Squidoo&lt;/a&gt;.&amp;nbsp; Squidoo is Seth's fairly new site - it's sort-of like a more commercially oriented &lt;a href="http://www.wikipedia.org/"&gt;wikipedia&lt;/a&gt; where a "lens master" can write about their subject of passion.&lt;br&gt;&lt;br&gt;So, that's what I did - here's the &lt;a href="http://www.squidoo.com/finalbuilder"&gt;FinalBuilder Lens&lt;/a&gt;.&lt;br&gt;</description></item><item><title>FinalBuilder 5 feature list</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/567/FinalBuilder-5-feature-list.aspx</link><category /><pubDate>Mon, 25 Sep 2006 14:00:00 GMT</pubDate><description>FinalBuilder 5 beta - yep, it's &lt;a href="/finalbuilder-5-beta-press-release.aspx"&gt;official now&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Here's what's new:&lt;br&gt;&lt;a href="/new-in-finalbuilder-5.aspx"&gt;http://www.finalbuilder.com/new-in-finalbuilder-5.aspx&lt;/a&gt;&lt;br&gt;</description></item><item><title>Josh McFarlane and Implementing the Joel Test</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/568/Josh-McFarlane-and-Implementing-the-Joel-Test.aspx</link><category /><pubDate>Mon, 25 Sep 2006 14:00:00 GMT</pubDate><description>&lt;a href="http://www.joshmcfarlane.com/2006/09/implementing_the_joel_test.html"&gt;Interesting story&lt;/a&gt; by Josh McFarlane who describes the way he's taken his company from a score of 1 out of 12 on the &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;Joel Test&lt;/a&gt;, to about 7 or 8 and still working on it.&lt;br&gt;&lt;br&gt;But, what really caught my interest was that it sounds like he's fully taking advantage of the &lt;a href="/blogs.aspx?EntryId=125"&gt;ASync actions&lt;/a&gt; in FinalBuilder which lets you run multiple steps in parallel:&lt;br&gt;&lt;br&gt;&lt;i&gt;"Asynchronous building: My development machine has 2 dual core
processors. Invoking one build command only uses 1 of the 4 logical
CPUs. With asynchronous tasks, I can run up to 4 builds at once,
shortening our build time."&lt;/i&gt;&lt;br&gt;&lt;br&gt;"Overall, I'm happy with FinalBuilder. The only complaint I have about
it is that I have not been able to create "local" action list
variables, but thats more than likely my fault for not looking hard
enough rather."&lt;br&gt;&lt;br&gt;Thanks Josh.&amp;nbsp; And yes, you can create ActionList variables - have a look in the project menu for "Action List Parameters..."&lt;br&gt;</description></item><item><title>FinalBuilder 5 in beta</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/566/FinalBuilder-5-in-beta.aspx</link><category /><pubDate>Sun, 24 Sep 2006 14:00:00 GMT</pubDate><description>&lt;br&gt;FinalBuilder 5 has just gone into beta testing.&amp;nbsp; There a heap of cool new features and plenty of new actions - but more on that when we make an official announcement :)&lt;br&gt;&lt;br&gt;If you would like to help
test the new version, please send us an email at support [at]
finalbuilder dot com.&lt;br&gt;&lt;br&gt;We're aiming to release FinalBuilder 5 at around the end of October, but all depends on how the beta goes... (ie. we won't release it if it's not ready).&amp;nbsp; This means FB5 will be almost exactly a year after FB4 was released, which seems about the right sort of time between major releases.&amp;nbsp; I know some will complain, but others will be very happy (especially those who have Software Assurance).&lt;br&gt;&lt;br&gt;Hopefully I'll get a bit of time to start blogging about some of the new features in FB5 - so stay tuned!&lt;br&gt;</description></item><item><title>FinalBuilder Ratings</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/565/FinalBuilder-Ratings.aspx</link><category /><pubDate>Wed, 20 Sep 2006 05:00:00 GMT</pubDate><description>Here's the next installment of some of the statistics we got from the customer survey.&lt;br&gt;
&lt;br&gt;
&lt;img src="/blogimages/FinalBuilder_Overall_Rating.png" border="1"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img src="/blogimages/FinalBuilder_Stability_Rating.png" border="1"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img src="/blogimages/FinalBuilder_Support_Rating.png" border="1"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img src="/blogimages/FinalBuilder_HelpFiles_Rating.png" border="1"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img src="/blogimages/FinalBuilder_Website_Rating.png" border="1"&gt;
&lt;br&gt;
&lt;br&gt;There you have it.&amp;nbsp; We're very happy with the rating people have given us, and it's an improvement on last year.&amp;nbsp; And obviously our customers are pretty happy with FinalBuilder - that's the main thing!&amp;nbsp; The website rating has improved a lot over last years results, so the choice to go with &lt;a href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/a&gt; has been a good one (plus there is now more content, like &lt;a href="/articles.aspx"&gt;articles&lt;/a&gt; and the &lt;a href="/community-downloads.aspx"&gt;Community Downloads&lt;/a&gt; section).&lt;br&gt;&lt;br&gt;So, where to from here?&lt;br&gt;&lt;br&gt;Well, the worst of the ratings was the Help files and other Documentation.&amp;nbsp; This has always been the worst part of FinalBuilder (and we have always freely admitted this), mainly because the documentation is written by us (the programmers) and not dedicated technical writers.&amp;nbsp; I am pleased to say though, that we are taking the documentation a lot more seriously now.&amp;nbsp; For example, we have recently generated a report on which actions don't have a quick help file or a help topic and after a few weeks work every action now has a help topic and a quick help file.&amp;nbsp; Plus we're more conscious of writing better quality help and we make sure that an action is properly documented before it's released to the public.&lt;br&gt;&lt;br&gt;Other than that, we obviously want more dark green (excellent) than light green (good and average) - it's hard work making people happy with a product, but that's our ultimate goal.&amp;nbsp; &lt;a href=""&gt;FinalBuilder&lt;/a&gt; certainly isn't one of those products that you write and let it rot while a new product is being developed.&amp;nbsp; Our todo list seems to get longer every day instead of shorter.&amp;nbsp; The next major version is in the pipeline with some very cool new features.&amp;nbsp; Stay tuned :)&lt;br&gt;
</description></item><item><title>Go Karting!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/564/Go-Karting.aspx</link><category /><pubDate>Thu, 07 Sep 2006 14:00:00 GMT</pubDate><description>Go Karting?&lt;br&gt;&lt;br&gt;What's that got to do with FinalBuilder, Automise, programming, Version Control Systems, Microsoft, or any of the other products and stuff I normally talk about? Well, not much, but a little.&amp;nbsp; Let me explain.&lt;br&gt;&lt;br&gt;We live in &lt;a href="http://en.wikipedia.org/wiki/Canberra"&gt;Canberra&lt;/a&gt;.&amp;nbsp; Well, more correctly, the VSoft Technologies office is in Canberra.&amp;nbsp; I actually live in Queanbeyan which is very close to Canberra; commuting takes about 15mins from home to work.&amp;nbsp; But anyway, Canberra is a fairly small city and there really aren't many ISV's based in Canberra, mainly because most developers here work for Government departments because it's the capital of Australia.&lt;br&gt;&lt;br&gt;One of the other ISV's in Canberra is &lt;a href="http://www.prd-software.com.au/"&gt;PRD Software&lt;/a&gt;.&amp;nbsp; Great bunch of guys.&amp;nbsp; And they make a bloody good Help Desk product - &lt;a href="http://www.prd-software.com.au/prd/help-desk-products/enterprise/default.asp"&gt;HelpMaster Pro&lt;/a&gt;. We know them because they're FinalBuilder customers [see the connection now?]&lt;br&gt;&lt;br&gt;So, today, we all knocked off early and headed out to one of the local Go-Kart tracks.&amp;nbsp; &lt;br&gt;&lt;br&gt;It was a race: PRD vs. VSoft, Delphi vs. VB, Kart with no brakes vs. Kart with no grip.&lt;br&gt;&lt;br&gt;Who knows who won.&amp;nbsp; But it didn't matter - we all had such a great time and there weren't too many "racing incidents" :)&lt;br&gt;&lt;br&gt;Anyway, great way to end a hard working week and get to know some local developers.&amp;nbsp; Thanks Rod and gang - looking forward to next time!&amp;nbsp; Paintball eh? hmmm.....&lt;br&gt;</description></item><item><title>What's in a name.... CLR Version 3?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/403/Whats-in-a-name-CLR-Version-3.aspx</link><category /><pubDate>Wed, 06 Sep 2006 14:00:00 GMT</pubDate><description>The Microsoft .NET framework version 3 is not a new version of the framework... just a bunch of additions to version 2.0,&amp;nbsp; so why did they decide to call it version 3? To make matters worse, it breaks the CLR installation detection in FinalBuilder 4. FinalBuilder scans the registry and the [SysDrive]:\WINDOWS\Microsoft.NET\Framework folder to detect which versions of the CLR are installed, so that it can allow the user to choose which version to host. So we installed .NET v3 RC1 this week, and discovered FinalBuilder will not load it. &lt;br&gt;&lt;br&gt;We checked our detection code, it was correctly identifying the installation folder for the framework, and passing the correct framework version to CorBindToRuntimeEx (the CLR Hosting entry point). CorBindToRuntimeEx however is putting up an error saying the version of the framework we are requesting is not available. That's obvious, version 3 is not really a new version of the framework... so why then did microsoft call it version 3? Beats me, sounds very much like a misguided management decision. &lt;br&gt;&lt;br&gt;So in our .NET framework code, we now have to ignore version 3... an update to FinalBuilder 4 will be out soon with a fix to our framework detection code. &lt;br&gt;&lt;br&gt;v.&lt;br&gt;</description></item><item><title>Vista Screenshots</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/563/Vista-Screenshots.aspx</link><category /><pubDate>Mon, 04 Sep 2006 14:00:00 GMT</pubDate><description>We finally got &lt;a href="http://www.microsoft.com/windowsvista/default.aspx"&gt;Vista&lt;/a&gt; up and running last week.&amp;nbsp; I had a play with Vista way back at &lt;a href="http://msdn.microsoft.com/events/pdc/"&gt;PDC '05&lt;/a&gt;, but wanted to wait for at least an RC build (Release Candidate) before bothering to muck about and get it running.&amp;nbsp; The Vista build I installed was "pre-RC1".&amp;nbsp; These guys certainly have imagination ;)&lt;br&gt;&lt;br&gt;Anyway, installing it went find after convincing Vista that it could read the PATA 40GB HDD.&amp;nbsp; It's weird, because the installer couldn't see it even after doing a Shift-F10 to a command prompt and then use DISKPART to partition it (the prompt could see the C: drive, but not the installer).&amp;nbsp; I gave up at this point but Angus used the WindowsXP installer disk to re-format the drive and then Vista could see it.&amp;nbsp; &lt;br&gt;&lt;br&gt;It was during this process that I came across the &lt;b&gt;single best new feature of Vista&lt;/b&gt; - you can now load 3rd party drivers during install using not just a floppy disk, but also CDs and USB drives!&amp;nbsp; About bloody time too...&lt;br&gt;&lt;br&gt;So, obviously the reason for installing Vista was to see if FinalBuilder runs OK.&amp;nbsp; And I'm very happy to report it does, but with one small exception.&amp;nbsp; FinalBuilder hosts the .NET CLR, and with Vista you get v3 of the CLR which for some reason doesn't yet work with FB (we're looking into it now, especially since the RC of .NET v3 is now &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=19e21845-f5e3-4387-95ff-66788825c1af&amp;amp;displaylang=en"&gt;available for download&lt;/a&gt;).&amp;nbsp; Luckily all you need to do is tell FB to host the v2 of the CLR and it all works perfectly!&lt;br&gt;&lt;br&gt;Here's a couple of screenshots:&lt;br&gt;&lt;br&gt;
&lt;a href="/blogimages/FinalBuilder_Screenshot_Vista.png" target="_blank"&gt;&lt;img src="/blogimages/FinalBuilder_Screenshot_Vista_small.png"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="/blogimages/FinalBuilder_Screenshot_Vista2.png" target="_blank"&gt;&lt;img src="/blogimages/FinalBuilder_Screenshot_Vista2_small.png"&gt;&lt;/a&gt;</description></item><item><title>Eric Sink on how to get people talking about your product</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/562/Eric-Sink-on-how-to-get-people-talking-about-your.aspx</link><category /><pubDate>Thu, 24 Aug 2006 14:00:00 GMT</pubDate><description>[here's my small comment on Eric Sink's &lt;a href="http://software.ericsink.com/articles/Buzz.html"&gt;latest post&lt;/a&gt;]&lt;br&gt;&lt;br&gt;Eric - as always, a great post :)&lt;br&gt;&lt;br&gt;Yes, FinalBuilder is written in Delphi (well, most if it, some is now in C# and JScript...), and up until a couple of years ago we certainly had been concentrating on marketing to the Delphi crowd.&amp;nbsp; Which is where the TeamCoherence users come from, obviously.&lt;br&gt;&lt;br&gt;I would like to make the point that in the last few years we've been spreading our wings so-to-speak and are now making most of our sales to the Microsoft development mob (and, yes, there certainly are a lot of them!).&amp;nbsp; We've been adding features to the product that appeal to this different group, and we have also spent money marketing to them.&amp;nbsp; So, in a sense, it's good to start small, capture a niche, and then when you out grow it, move up to a bigger group of people when you have the resources, features, respect, and experience to help you succeed in that new marketplace.</description></item><item><title>Another case study</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/561/Another-case-study.aspx</link><category /><pubDate>Mon, 21 Aug 2006 14:00:00 GMT</pubDate><description>The latest case study is an excellent example of how FinalBuilder can really reduce the workload of doing builds - &lt;b&gt;"FinalBuilder reduces our build time for a product line from around 3 days to less than 3 hours." &lt;/b&gt;Impressive!

&lt;br&gt;&lt;br&gt;Boian Mitov (of &lt;a href="http://www.mitov.com/"&gt;Mitov Software&lt;/a&gt;) develops Visual C++ libraries, and Delphi, C++ Builder and .NET component packages for very fast Digital Signal Processing (DSP): "As part of our process we perform 138 package builds, 322
Delphi and C++ Builder demo projects, 3 Visual C++ libraries, 1 Delphi, 1 C++
Builder and 2 Visual C++ DLLs, 1 .NET library, and 138 Visual C++ examples, 15
Installs, 18 Help files."

Imagine doing all that by hand!&lt;br&gt;&lt;br&gt;Read the full case study &lt;a href="/case-studies.aspx?articleType=ArticleView&amp;amp;articleId=21"&gt;here.&lt;/a&gt;&lt;br&gt;</description></item><item><title>Downloading and email addresses</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/560/Downloading-and-email-addresses.aspx</link><category /><pubDate>Thu, 17 Aug 2006 14:00:00 GMT</pubDate><description>As an &lt;a href="http://en.wikipedia.org/wiki/Independent_software_vendor"&gt;ISV&lt;/a&gt;, you have to decide how people will evaluate your product before they make a purchasing decision.&amp;nbsp; &lt;br&gt;&lt;ul&gt;&lt;li&gt;Can they directly download it from your website? &lt;/li&gt;&lt;li&gt;Do they have to sign up and get sent a url and/or a license key? &lt;/li&gt;&lt;li&gt;Do they have to contact sales and someone will give you a call on the 'phone before you can get your hands on the trial (if at all)?&lt;/li&gt;&lt;/ul&gt;Ever since &lt;a href="/"&gt;FinalBuilder&lt;/a&gt; was released, it was a direct download.&amp;nbsp; Anyone can download it, and can do so completely anonymously.&amp;nbsp; This has a few advantages, but the main one is that it doesn't p*ss anyone off - it's a single click to download. Easy and simple!&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;But, what happens if we want to ask these people how they went on the trial? Answer - you can't.&amp;nbsp; As is the case with all shareware, trialware, demoware, etc, you get a huge amount of downloads, and you get a fairly small conversion rate.&amp;nbsp; We don't track this very accurately, but it's in the order of 5% probably.&amp;nbsp; That means for every 100 downloads, we get about 5 sales.&amp;nbsp; I'd say it's a pretty good conversion rate, but why didn't the other 95% of people buy?&amp;nbsp; Maybe they bought a competing product, maybe they found a bug, maybe they downloaded FinalBuilder just to take a look?&amp;nbsp; The point is, we just don't know.&lt;br&gt;&lt;br&gt;So, obviously the answer is to ask people for their contact details before they download.&amp;nbsp; That way you can email them or call them and ask them how they go with the trial.&amp;nbsp; Put your hand up if you would rather not give your email address just so you can download a trial of a piece of software.&amp;nbsp; Yep, I'm sure there's a significant percentage of people who would not download in this case - so maybe the answer isn't so simple.&amp;nbsp; It's a big risk to change from one model (ie. direct downloads) to another (ie. contact details before download), and that's certainly not a risk we're prepared to take.&amp;nbsp; But we would still like to be able to contact people to ask them how they went.&lt;br&gt;&lt;br&gt;So - &lt;b&gt;our answer&lt;/b&gt; has been to make it optional.&amp;nbsp; That is, if you don't want to give us your details, don't, but if you don't mind us contacting you then you can provide your email address.&amp;nbsp; I &lt;a href="/download.aspx"&gt;implemented this change&lt;/a&gt; on our website yesterday, so no real results yet, but so far it's been about 50/50.&amp;nbsp; 50% are happy to give their email address, and the other 50% take the direct download link.&amp;nbsp; Now - granted, the direct download link is not exactly obvious, but it's not hidden and hard to find.&amp;nbsp; We're not in the business of spamming people, but we will send people an email at the end of their trial asking for their thoughts; hopefully we might get some useful information.&lt;br&gt;&lt;br&gt;We're going to monitor this over the next couple of weeks to see how it goes.&amp;nbsp; &lt;br&gt;&lt;br&gt;What are your thoughts on this issue?&lt;br&gt;</description></item><item><title>Mixing up FinalBuilder with Team System (no more XML files!)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/604/Mixing-up-FinalBuilder-with-Team-System-no-more-X.aspx</link><category /><pubDate>Thu, 17 Aug 2006 14:00:00 GMT</pubDate><description>One of the comments that we frequently hear from users is "I couldn't do &lt;i&gt;xyz&lt;/i&gt; with MSBuild, but I can now with FinalBuilder."&lt;br&gt;&lt;br&gt;This is great, but hardly surprising. FinalBuilder includes out-of-the-box support for many more tools and processes than MSBuild. Not to mention that it has a GUI to set up your build process - no more editing XML files!&lt;br&gt;&lt;br&gt;Lately, though, an increasing number of our users are moving to Microsoft Team System. One of the cornerstones of the Team System process is the Team Foundation Build engine, which is built on top of MSBuild.&lt;br&gt;&lt;br&gt;Now, the Team Foundation Build wizard is fine if you only need to create simple build processes. Get some files, build some solutions, deploy some binaries to a file share. If you need to do anything more, though (and who doesn't?), then you're stuck back in XML land... The same applies if you want to edit your build processes after you've created them.&lt;br&gt;&lt;br&gt;Plain XML editing, with no built-in support for third-party tools, no support for data processing, no support for parallelisation, FTP transfers, Active Scripting, structured exceptions, recursion or Windows system functionality...&lt;br&gt;&lt;br&gt;FinalBuilder to the rescue!&lt;br&gt;&lt;br&gt;The Team Foundation Build engine allows you to add custom MSBuild tasks at any stage of your build process. This means that, with just a couple of lines of XML, you can &lt;u&gt;move your entire Team Build process&lt;/u&gt; to FinalBuilder! FinalBuilder can be used in place of MSBuild to provide functionality at &lt;u&gt;every stage&lt;/u&gt; of the Team Foundation build process (fetch, compile, test &amp;amp; deploy.) What's more, it all fits perfectly within the Team System framework!&lt;br&gt;&lt;br&gt;To see how, take a look at the walkthrough I just wrote: &lt;a href="/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=20"&gt;Integrating FinalBuilder with Microsoft Team Foundation Build&lt;/a&gt;.&lt;br&gt;&lt;br&gt;... Happy building!&lt;br&gt;</description></item><item><title>Mixing up FinalBuilder with Team System (no more XML files!)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/630/Mixing-up-FinalBuilder-with-Team-System-no-more-X.aspx</link><category /><pubDate>Thu, 17 Aug 2006 14:00:00 GMT</pubDate><description>One of the comments that we frequently hear from users is "I couldn't do &lt;i&gt;xyz&lt;/i&gt; with MSBuild, but I can now with FinalBuilder."&lt;br&gt;&lt;br&gt;This is great, but hardly surprising. FinalBuilder includes out-of-the-box support for many more tools and processes than MSBuild. Not to mention that it has a GUI to set up your build process - no more editing XML files!&lt;br&gt;&lt;br&gt;Lately, though, an increasing number of our users are moving to Microsoft Team System. One of the cornerstones of the Team System process is the Team Foundation Build engine, which is built on top of MSBuild.&lt;br&gt;&lt;br&gt;Now, the Team Foundation Build wizard is fine if you only need to create simple build processes. Get some files, build some solutions, deploy some binaries to a file share. If you need to do anything more, though (and who doesn't?), then you're stuck back in XML land... The same applies if you want to edit your build processes after you've created them.&lt;br&gt;&lt;br&gt;Plain XML editing, with no built-in support for third-party tools, no support for data processing, no support for parallelisation, FTP transfers, Active Scripting, structured exceptions, recursion or Windows system functionality...&lt;br&gt;&lt;br&gt;FinalBuilder to the rescue!&lt;br&gt;&lt;br&gt;The Team Foundation Build engine allows you to add custom MSBuild tasks at any stage of your build process. This means that, with just a couple of lines of XML, you can &lt;u&gt;move your entire Team Build process&lt;/u&gt; to FinalBuilder! FinalBuilder can be used in place of MSBuild to provide functionality at &lt;u&gt;every stage&lt;/u&gt; of the Team Foundation build process (fetch, compile, test &amp;amp; deploy.) What's more, it all fits perfectly within the Team System framework!&lt;br&gt;&lt;br&gt;To see how, take a look at the walkthrough I just wrote: &lt;a href="/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=20"&gt;Integrating FinalBuilder with Microsoft Team Foundation Build&lt;/a&gt;.&lt;br&gt;&lt;br&gt;... Happy building!&lt;br&gt;</description></item><item><title>Mixing up FinalBuilder with Team System (no more XML files!)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/656/Mixing-up-FinalBuilder-with-Team-System-no-more-X.aspx</link><category>FinalBuilder,TFS</category><pubDate>Thu, 17 Aug 2006 14:00:00 GMT</pubDate><description>One of the comments that we frequently hear from users is "I couldn't do &lt;em&gt;xyz&lt;/em&gt; with MSBuild, but I can now with FinalBuilder."&lt;br /&gt;
&lt;br /&gt;
This is great, but hardly surprising. FinalBuilder includes out-of-the-box support for many more tools and processes than MSBuild. Not to mention that it has a GUI to set up your build process - no more editing XML files!&lt;br /&gt;
&lt;br /&gt;
Lately, though, an increasing number of our users are moving to Microsoft Team System. One of the cornerstones of the Team System process is the Team Foundation Build engine, which is built on top of MSBuild.&lt;br /&gt;
&lt;br /&gt;
Now, the Team Foundation Build wizard is fine if you only need to create simple build processes. Get some files, build some solutions, deploy some binaries to a file share. If you need to do anything more, though (and who doesn't?), then you're stuck back in XML land... The same applies if you want to edit your build processes after you've created them.&lt;br /&gt;
&lt;br /&gt;
Plain XML editing, with no built-in support for third-party tools, no support for data processing, no support for parallelisation, FTP transfers, Active Scripting, structured exceptions, recursion or Windows system functionality...&lt;br /&gt;
&lt;br /&gt;
FinalBuilder to the rescue!&lt;br /&gt;
&lt;br /&gt;
The Team Foundation Build engine allows you to add custom MSBuild tasks at any stage of your build process. This means that, with just a couple of lines of XML, you can &lt;span style="text-decoration: underline;"&gt;move your entire Team Build process&lt;/span&gt; to FinalBuilder! FinalBuilder can be used in place of MSBuild to provide functionality at &lt;span style="text-decoration: underline;"&gt;every stage&lt;/span&gt; of the Team Foundation build process (fetch, compile, test &amp;amp; deploy.) What's more, it all fits perfectly within the Team System framework!&lt;br /&gt;
&lt;br /&gt;
To see how, take a look at the walkthrough I just wrote: &lt;a href="/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=20"&gt;Integrating FinalBuilder with Microsoft Team Foundation Build&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
... Happy building!</description></item><item><title>Version Control Systems... again.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/559/Version-Control-Systems-again.aspx</link><category /><pubDate>Sun, 13 Aug 2006 14:00:00 GMT</pubDate><description>This is now becoming an anuual event.&amp;nbsp; We did a quick customer survey a couple of weeks ago, and not breaking tradition, we again asked what Version Control Systems people are using.&amp;nbsp; It's a very important question for us because it's such an integral part of the build process.&amp;nbsp; If FinalBuilder doesn't natively support the VCS you use, then it's possible, but harder, to use FinalBuilder to do your builds.&lt;br&gt;&lt;br&gt;Here's the graph:&lt;br&gt;&lt;img src="/Portals/0/ArticleImages/FinalBuilder_VCS.png" alt="FinalBuilder_VCS.png" border="0" height="549" width="754"&gt;&lt;br&gt;&lt;br&gt;So, out of all that the only VCS's we currently don't have native support for are &lt;a href="http://www.mks.com/products/source"&gt;MKS SourceIntegrity&lt;/a&gt;, Code Coop, Continuus, and &lt;a href="http://www.accurev.com/"&gt;Accurev&lt;/a&gt;.&amp;nbsp; We're currently in the process of adding MKS SourceIntegrity and Accurev actions.&lt;br&gt;&lt;br&gt;What's interesting about this graph is that it's showing some trends over the past year and a bit.&amp;nbsp; Microsoft TeamSystem is really jumping in popularity, as is Subversion.&amp;nbsp; The popularity of SourceSafe is dropping off, but not as fast as I would have thought.&lt;br&gt;&lt;br&gt;It's suprising to see less usage of &lt;a href="http://jedivcs.sourceforge.net/"&gt;JediVCS&lt;/a&gt;/FreeVCS - I wonder what these people are using now?&amp;nbsp; And it's also good to see that the percentage of people using no version control system has halved since last year.&lt;br&gt;</description></item><item><title>Case Studies</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/558/Case-Studies.aspx</link><category /><pubDate>Tue, 08 Aug 2006 14:00:00 GMT</pubDate><description>One thing has really been missing from our website - Case Studies on FinalBuilder.&lt;br&gt;&lt;br&gt;Case Studies (I reckon) can really help sell a product to some people.&amp;nbsp; I personally don't normally bother reading them, but they can be a great thing to dump on a manager's desk and say "Read this... look how benefitial this product was for them - that's why we need it too!"&lt;br&gt;&lt;br&gt;So, now we have some case studies for FinalBuilder - and they were pretty easy to get as we had plenty of customers who were more than happy to write them (and a big thanks to those people!).&amp;nbsp; &lt;br&gt;&lt;br&gt;Here's the first four, a couple more are in the works and will be ready in a couple of weeks time.&lt;br&gt;&lt;ul&gt;

&lt;li&gt;Case Study: Codix and FinalBuilder [&lt;a href="/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=19"&gt;as an article&lt;/a&gt;] [&lt;a href="/community-downloads.aspx?grm2id=28"&gt;download the pdf&lt;/a&gt;]&lt;/li&gt;

&lt;li&gt;Case Study: TOWER Software and FinalBuilder [&lt;a href="/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=17"&gt;as an article&lt;/a&gt;] [&lt;a href="/community-downloads.aspx?grm2id=26"&gt;download the pdf&lt;/a&gt;]&lt;/li&gt;

&lt;li&gt;Case Study: Alter Ego Services and FinalBuilder [&lt;a href="/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=18"&gt;as an article&lt;/a&gt;] [&lt;a href="/community-downloads.aspx?grm2id=27"&gt;download the pdf&lt;/a&gt;]&lt;/li&gt;

&lt;li&gt;Case Study: Platespin and FinalBuilder [&lt;a href="/articles.aspx?mid=370&amp;amp;ctl=ArticleView&amp;amp;articleId=16"&gt;as an article&lt;/a&gt;] [&lt;a href="/community-downloads.aspx?grm2id=25"&gt;download the pdf&lt;/a&gt;]&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;ps. long time no blog... yeah, yeah, I know...&lt;br&gt;</description></item><item><title>Regulazy</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/557/Regulazy.aspx</link><category /><pubDate>Sun, 09 Jul 2006 14:00:00 GMT</pubDate><description>Regulazy is a visual Regular Expression builder - looks like &lt;a href="http://weblogs.asp.net/rosherove/default.aspx"&gt;Roy&lt;/a&gt; has been busy :)&lt;br&gt;&lt;br&gt;&lt;span class="Normal" id="dnn_ctr542_HtmlModule_HtmlHolder"&gt;&lt;div&gt;&lt;a href="http://regulazy.osherove.com/"&gt;&lt;strong&gt;"Regulazy&lt;/strong&gt; &lt;/a&gt;is an attempt to build a small "Expert System" for creating .NET Regular Expressions.&lt;/div&gt;
&lt;div&gt;It lets the user create an expression based on a real life example of text they would like to parse. &lt;/div&gt;
&lt;div&gt;As the user interacts with Regulazy using the mouse, Regulazy
offers the user possible expressions that would fit the currently
selected text. As the user selects "rules" to apply on various parts of
the text,&lt;/div&gt;
&lt;div&gt;a regular expression is built automatically in the lower application pane."&lt;br&gt;&lt;br&gt;Looks very cool to me!&lt;br&gt;&lt;/div&gt;&lt;/span&gt;&lt;br&gt;</description></item><item><title>5 days left</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/556/5-days-left.aspx</link><category /><pubDate>Mon, 26 Jun 2006 05:00:00 GMT</pubDate><description>&lt;br&gt;5 days left for &lt;a href="/automise-pricing.aspx"&gt;special Automise introductory offer&lt;/a&gt;... &lt;i&gt;&lt;b&gt;never to be repeated&lt;/b&gt;&lt;/i&gt;... it's a bargain - go get it now! :)&lt;br&gt;&lt;br&gt;</description></item><item><title>sudoWn - superuser do for Windows</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/555/sudoWn-superuser-do-for-Windows.aspx</link><category /><pubDate>Thu, 15 Jun 2006 14:00:00 GMT</pubDate><description>"The sudoWn project can execute individual programs (or even a whole Windows shell) with temporary Administrator privileges &lt;i&gt;under your user profile&lt;/i&gt;."&lt;br&gt;&lt;br&gt;The difference between sudoWn and "Run As..." is that sudoWn launches programs under your account profile - not an Admin account.&amp;nbsp; This means that the launched programs see your Documents &amp;amp; Settings folders, Desktop, Start menu, etc.&amp;nbsp; sudoWn also caches the password so you don't have to keep entering it as you would with Run As...&amp;nbsp; &lt;br&gt;&lt;br&gt;So, pretty cool tool [and it's GPL]... more info at: &lt;a href="http://sudown.mine.nu/"&gt;http://sudown.mine.nu/&lt;/a&gt;&lt;br&gt;</description></item><item><title>Coupon Codes</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/554/Coupon-Codes.aspx</link><category /><pubDate>Wed, 07 Jun 2006 14:00:00 GMT</pubDate><description>&lt;a href="http://software.ericsink.com/"&gt;Eric Sink()&lt;/a&gt; has just concluded his Coupon Code experiment for &lt;a href="http://www.sourcegear.com/vault/index.html"&gt;Vault&lt;/a&gt;.&amp;nbsp; The results are &lt;a href="http://software.ericsink.com/entries/Coupon_Results.html"&gt;very interesting&lt;/a&gt;, and well worth a read.&lt;br&gt;&lt;br&gt;We are doing something a little similar - there is currently a huge discount as a special introductory offer for &lt;a href="http://www.automise.com"&gt;Automise&lt;/a&gt; - which we will &lt;b&gt;never repeat&lt;/b&gt;.&amp;nbsp; The coupon code is &lt;a href="http://www.automise.com/automise-pricing.aspx"&gt;not well hidden&lt;/a&gt;, and the promotion ends in a couple of weeks.&lt;br&gt;</description></item><item><title>Programmer or Serial Killer</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/553/Programmer-or-Serial-Killer.aspx</link><category /><pubDate>Thu, 01 Jun 2006 14:00:00 GMT</pubDate><description>&lt;br&gt;
Take this quiz to see if you can tell which ones are Serial Killers, and which are Programming Language inventors...&lt;br&gt;
&lt;br&gt;
&lt;font face="Arial" size="2"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;http://www.malevole.com/mv/misc/killerquiz/&lt;/span&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;I didn't do so well - got 5/10.&amp;nbsp; Scary!&amp;nbsp; &lt;br&gt;&lt;br&gt;The other weird thing was that one of the people reminded me of one of my University lecturers, although he'd be closer to a programming language inventor than a serial killer, I think..., but maybe that's just bad judgement considering my score.... :|&lt;br&gt;</description></item><item><title>Our website as a graph</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/551/Our-website-as-a-graph.aspx</link><category /><pubDate>Tue, 30 May 2006 14:00:00 GMT</pubDate><description>&lt;img src="/blogimages/FinalBuilderWebsiteAsGraph.png"&gt;
&lt;br&gt;&lt;br&gt;Isn't it pretty :)
&lt;br&gt;&lt;br&gt;Probably too many tables in there, but we've got our hands tied because of the combination of the skin we chose and DotNetNuke.
&lt;br&gt;&lt;br&gt;Draw your own graph &lt;a href="http://www.aharef.info/2006/05/websites_as_graphs.htm"&gt;here.&lt;/a&gt;</description></item><item><title>That new Wii controller? What's it good for?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/552/That-new-Wii-controller-Whats-it-good-for.aspx</link><category /><pubDate>Tue, 30 May 2006 14:00:00 GMT</pubDate><description>I suppose that when I heard about the new &lt;a href="http://wii.nintendo.com/"&gt;Wii controller&lt;/a&gt; I thought that was cool.... but probably quite limited, ie. just a few games, and probably not for everyone - if your thoughts are like that, you better watch this video as I reckon it'll change your mind:&lt;br&gt;&lt;br&gt;http://www.wimp.com/controller/&lt;br&gt;&lt;br&gt;cool, huh?!&lt;br&gt;</description></item><item><title>Flash Solid State Laptop</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/550/Flash-Solid-State-Laptop.aspx</link><category /><pubDate>Thu, 25 May 2006 14:00:00 GMT</pubDate><description>This is what I've been waiting for.... and looks like it's finally going to happen:&lt;br&gt;&lt;a href="http://www.laptoplogic.com/news/detail.php?id=921"&gt;http://www.laptoplogic.com/news/detail.php?id=921&lt;/a&gt;&lt;br&gt;&lt;br&gt;Yes, it is expensive and underspec'ed, and is only 32GB of storage... but it's a good start.&lt;br&gt;</description></item><item><title>Five things you need to know before buying an Automated Build Tool</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/549/Five-things-you-need-to-know-before-buying-an-Aut.aspx</link><category /><pubDate>Tue, 23 May 2006 14:00:00 GMT</pubDate><description>&lt;p&gt;There are many Automated Build Tools available, some are free, some are very 
expensive and there are lots of others in between.&amp;nbsp; Each tool is different: 
different architecture, different features, different user interface, etc.&amp;nbsp; 
Before you decide on a tool to help you with your software builds, there are 
many things you need to consider; I have listed five of the most important ones 
below:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Choose a tool you can trust and is well supported.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Your build tool is going to be building the software which will be sent to 
your customers, you simply have to be able to trust it.&amp;nbsp; Make sure the build 
tool has been around for some time and that there are high profile customers 
using the software; this is your assurance that the &lt;strong&gt;build engine is 
robust&lt;/strong&gt;.&amp;nbsp; When something does go wrong, either a bug or a usability 
issue, how and where do you get support? Does the tool vendor offer &lt;strong&gt;free 
support for the life of the product&lt;/strong&gt;? Is there a community forum where 
you can discuss ideas, offer suggestions and report bugs?&amp;nbsp; How quickly does the 
vendor respond to bug reports?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. The tool should support most or all of the tools you currently use 
and may use in the future.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let's face it, you're not looking for a tool that is as basic as a batch 
file.&amp;nbsp; The build tool needs to &lt;strong&gt;hide the complexity&lt;/strong&gt; of the tools 
which you need to automate; for example your compilers, install builders, 
version control systems, etc.&amp;nbsp; Do you really care what command line parameters 
you need to use for your compiler? Of course not, it's much easier to fill in a 
field called "Project File" and click a checkbox called "Include version 
information in project".&amp;nbsp; Also, consider what tools you'll be using in the 
future.&amp;nbsp; Maybe you're thinking of moving to a .NET compiler, maybe to TeamSystem 
or some other Version Control System.&amp;nbsp; Also, how easy is it to pass information 
from one step in your build process to another? Does it make it easy to store, 
load, manipulate and apply version information?&amp;nbsp; Can you download a 30 day 
&lt;strong&gt;fully functional&lt;/strong&gt; evaluation version?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Free will not necessarily be cheaper over the long 
term.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We hear from lots of users of NAnt and ANT that are ready to move on.&amp;nbsp; Yes, 
they are open source products (ie. free) but they typically take a lot longer to 
get to grips with - remember that your time isn't free.&amp;nbsp; If you're sick of 
paying the angle bracket tax, look for a tool which makes it easy for you to 
create, modify, debug and run your builds.&amp;nbsp; Also consider that someone in the 
future may take over the builds; how easy will it be for a new person to learn 
the software?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. The user interface is easy to use and very powerful.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This has already been touched on in some of the other points - but the user 
interface is very important.&amp;nbsp; Look for a UI which is fast, rich, easy to use and 
modern.&amp;nbsp; Does the UI support &lt;strong&gt;Drag&amp;amp;Drop&lt;/strong&gt;? Does the UI provide 
custom editors for each of the steps in the build process? Are there 
&lt;strong&gt;debugging aids&lt;/strong&gt; like variable watches, hierarchial logging, 
pause, run current action, etc?&amp;nbsp; Is it easy to find information in the log (eg. 
find all steps in error), and can you do a find and replace in your build steps? 
For example, you may want change all references to C:\Projects to 
C:\Build\Projects in all steps in your entire build process.&amp;nbsp; Can you easily 
break up your build into smaller, easier to manage parts?&amp;nbsp; And is there an easy 
way to &lt;strong&gt;see the progress&lt;/strong&gt; of the build process while the build is 
running?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. The essential feature set of any build tool.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We have been doing builds for quite some time, and with constant feedback 
from our customers we have a pretty good idea what features are essential in a 
build tool:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;A great user interface (see point 4) 
&lt;/li&gt;&lt;li&gt;Logging to a database engine - the &lt;strong&gt;only reliable way&lt;/strong&gt; to 
store and retrieve log information 
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Running build steps in parallel&lt;/strong&gt; - essential for reducing 
the time taken to run your builds 
&lt;/li&gt;&lt;li&gt;Support for most tools used by software developers (see point 2) 
&lt;/li&gt;&lt;li&gt;An easy way to add new functionality to the build engine (especially if 
custom inhouse tools need to be automated) 
&lt;/li&gt;&lt;li&gt;Flexible flow control, for example if/then/else, switch/case, for/while 
loops 
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Error handling steps&lt;/strong&gt; like&amp;nbsp;try/except/finally and a 
&lt;strong&gt;global catchall&lt;/strong&gt; for any unhandled errors&lt;br&gt;&amp;nbsp; 
&lt;/li&gt;&lt;/ul&gt;So, there you have it.... my list of essentials.&amp;nbsp; Of course &lt;a HREF="/finalbuilder.aspx"&gt;FinalBuilder&lt;/a&gt; 4 fulfills all these criteria and a &lt;a href="feature-matrix.aspx"&gt;lot more&lt;/a&gt;. Please download the &lt;a href="/downloads/finalbuilder/Trial/FB4EvalSetup.exe"&gt;30-day trial&lt;/a&gt; now, and 
see for yourself! </description></item><item><title>First Automise review</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/548/First-Automise-review.aspx</link><category /><pubDate>Tue, 23 May 2006 05:00:00 GMT</pubDate><description>&lt;div id="dnn_ctr509_ModuleContent"&gt;&lt;span class="Normal" id="dnn_ctr509_HtmlModule_HtmlHolder"&gt;
&lt;h5&gt;Automise: Automate almost anything&lt;/h5&gt;
&lt;p&gt;"&lt;a href="http://www.automise.com/automise.aspx"&gt;Automise&lt;/a&gt; aims to fill 
that gap between batch hell and “not so much hell if I can automate it”, and 
does it beautifully."&lt;/p&gt;
&lt;p&gt;"it is one of the best tools around for automating tasks"&lt;/p&gt;&lt;a href="http://weblogs.asp.net/rosherove/archive/2006/05/22/AutomiseReview.aspx"&gt;ISerializable 
- Roy Osherove's Blog&lt;/a&gt;&lt;br&gt;&lt;br&gt;Thanks Roy!&lt;br&gt;&lt;/span&gt;&lt;!-- End_Module_509 --&gt; &lt;/div&gt;</description></item><item><title>Agile Vs. Formal Methodologies</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/547/Agile-Vs-Formal-Methodologies.aspx</link><category /><pubDate>Mon, 15 May 2006 14:00:00 GMT</pubDate><description>Roy &lt;span class="author-parent"&gt;Osherove [&lt;a href="http://weblogs.asp.net/rosherove/"&gt;ISerializable&lt;/a&gt;] has an interesting few questions and answers about &lt;a href="http://weblogs.asp.net/rosherove/archive/2006/05/15/AgileVsFormal.aspx"&gt;Agile Vs. Formal Methodologies&lt;/a&gt;.&lt;br&gt;&lt;br&gt;"99% of the projects I've seen come from a formal background and implement Agile practices incrementally. For example, &lt;a HREF="/"&gt;doing daily builds&lt;/a&gt;, then adding unit tests, then adding TDD, then adding Rolling Wave Planning etc.."&lt;br&gt;&lt;/span&gt;</description></item><item><title>Windows Vista Icons</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/546/Windows-Vista-Icons.aspx</link><category /><pubDate>Sun, 07 May 2006 14:00:00 GMT</pubDate><description>There's a &lt;a href="http://www.codeproject.com/useritems/using_vista_icons.asp"&gt;short article&lt;/a&gt; about a change to .ico files for Windows Vista on The Code Project.&lt;br&gt;&lt;br&gt;Basically, .ico files will allow use of the PNG format, and sizes up to 256x256.&amp;nbsp; It's great that PNG is now supported, but imagine how high the resolution of your screen has to be to have a 256x256 "icon" be a reasonable size...&amp;nbsp; or maybe MS are planning on putting 256x256 icons in the Start menu or something even more crazy?!?&lt;br&gt;</description></item><item><title>Microsoft Authenticode and the Micro-ISV</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/545/Microsoft-Authenticode-and-the-Micro-ISV.aspx</link><category /><pubDate>Thu, 04 May 2006 14:00:00 GMT</pubDate><description>Abstract:&lt;br&gt;"Microsoft introduced their Authenticode code signing mechanism in 1996, in answer to an increasing number of 
malicious web (ActiveX) controls and executable programs on the Internet. Code signing attempts to authenticate 
authorship by applying a digital certificate to the control or program.


&lt;p&gt;Internet downloads have become the preferred delivery mechanism for small Independent Software Vendors (Micro-ISVs). 
Authenticode should help to verify that these products are genuine and have not been tampered with, but some 
Micro-ISVs are reluctant to purchase or use Authenticode certificates.
&lt;/p&gt;

&lt;p&gt;This paper analyzes Authenticode from the point of view of the Micro-ISV, including both the positive aspects 
and the perceived flaws. Micro-ISV attitudes and experiences with Authenticode are surveyed."&lt;/p&gt;Interesting read, from &lt;a href="http://www.winwaed.com/index.shtml"&gt;Winwaed Software Technology&lt;/a&gt;.&amp;nbsp; Full article &lt;a href="http://www.winwaed.com/info/authenticode/authenticode.shtml"&gt;here&lt;/a&gt;.&lt;br&gt;</description></item><item><title>Stardock's 10 rules for success</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/402/Stardocks-10-rules-for-success.aspx</link><category /><pubDate>Thu, 04 May 2006 05:00:00 GMT</pubDate><description>Brad Wardell's 10 rules for success... a very interesting read. &lt;br&gt;&lt;span class="Normal"&gt;&lt;br&gt;&lt;a href="http://draginol.joeuser.com/articles.asp?c=1&amp;amp;AID=114319"&gt;http://draginol.joeuser.com/articles.asp?c=1&amp;amp;AID=114319&lt;/a&gt;&lt;br&gt;&lt;br&gt;I'd like to think that we live up to most if not all of those rules, it's certainly something worth aspiring to.&lt;br&gt;&lt;br&gt;v.&lt;br&gt;&lt;/span&gt;</description></item><item><title>Automise for 50% off! WOW!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/544/Automise-for-50-off-WOW.aspx</link><category /><pubDate>Wed, 03 May 2006 14:00:00 GMT</pubDate><description>We've decided to have a never-to-be-repeated special introductory special for Automise of 50% off!&lt;br&gt;&lt;br&gt;That means you can grab Automise now for only $97.50&lt;br&gt;&lt;br&gt;&lt;b&gt;Bargain&lt;/b&gt;.... &lt;a HREF="/automise-pricing.aspx"&gt;go get it now&lt;/a&gt;!&lt;br&gt;</description></item><item><title>Tao of the Windows Installer</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/543/Tao-of-the-Windows-Installer.aspx</link><category /><pubDate>Wed, 03 May 2006 05:00:00 GMT</pubDate><description>Here's an interesting blog entry from the Windows Installer Team:&lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/windows_installer_team/archive/2006/05/01/587990.aspx"&gt;http://blogs.msdn.com/windows_installer_team/archive/2006/05/01/587990.aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;If you ever do any Windows Installer stuff, probably a good read... and you have my sympathies ;)&lt;br&gt;&lt;br&gt;.t8&lt;br&gt;</description></item><item><title>Virtual Build Machine</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/542/Virtual-Build-Machine.aspx</link><category /><pubDate>Thu, 27 Apr 2006 14:00:00 GMT</pubDate><description>This blog entry inspired by &lt;a href="http://www.obishawn.com/archive/2006/03/27/11.aspx"&gt;Build Machine Virtualization&lt;/a&gt; by Obishawn.&lt;br&gt;&lt;br&gt;We also use virtual machines for our build environment.&amp;nbsp; We have a pretty beefy server - Dual Xeon with 6GB RAM and RAID 5, running Server 2003 64 bit edition and can run quite a few VM's simultaneously (we also use VM's to run other Version Control Systems and other software which FinalBuilder supports).&lt;br&gt;&lt;br&gt;We have a few build machines; firstly there is the mainline build machine which uses the mainline branch to build the latest and greatest.&amp;nbsp; Each time we have a minor or major release, we clone the build machine.&amp;nbsp; So, for example, when we released FinalBuilder 4.1, we cloned the mainline build and called it FB41Maint.&amp;nbsp; Sometimes we fix a bug and have to back-port it to FinalBuilder 3... easy, fire up the FB3 build machine and run the build :)&lt;br&gt;&lt;br&gt;For all this VM business, we're actually using VMWare Professional.&amp;nbsp; It works great.&amp;nbsp; We did try VMWare Server (when it was in Beta) and it didn't want to open our existing vm's for some reason?... so we went back to VMWare pro.&lt;br&gt;</description></item><item><title>We did it. We did it! :)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/541/We-did-it-We-did-it-.aspx</link><category /><pubDate>Wed, 26 Apr 2006 05:00:00 GMT</pubDate><description>Significant day for us today... the &lt;a href="http://www.automise.com/automise-press-release.aspx"&gt;release&lt;/a&gt; date of our second product, Automise! :)&lt;br&gt;&lt;br&gt;(sorry, nothing to do with Dory's and Marlin's victory song...)&lt;br&gt;
&lt;br&gt;Now granted... &lt;a href="http://www.automise.com/automise.aspx"&gt;Automise&lt;/a&gt; is largely based on &lt;a href="/finalbuilder.aspx"&gt;FinalBuilder&lt;/a&gt; (ie. same actions, same engine, same UI, etc), but it has taken the best part of four months full time - which was a lot longer than we anticipated.&amp;nbsp; &lt;br&gt;&lt;br&gt;It's amazing how "FinalBuildery" a lot of the code was.... for example, the error messages, captions in the UI, system variables visible in the user interface, help file, file extensions, etc.&amp;nbsp; So all this had to be made generic and driven by constants and defines - which is certainly easy to do, but when you've got to go over hundreds of thousands of lines of code it gets a little tedious after a while.&amp;nbsp; We've also had some good beta testers help with all this... so big thanks to them! :)&lt;br&gt;&lt;br&gt;The help file still needs some work; we're using the same &lt;a href="http://www.ec-software.com/"&gt;Help&amp;amp;Manual&lt;/a&gt; file to generate both the FinalBuilder and Automise help files - each with slightly different content.&amp;nbsp; There are a few hundred screen pictures which still need updating, but not much point holding up the release for that.&lt;br&gt;&lt;br&gt;And one of the pre-requisites was to update the website.&amp;nbsp; The new website was finished last week and is a &lt;b&gt;vast&lt;/b&gt; improvement over the old FinalBuilder one - all based on &lt;a href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/a&gt; which has proved to be quite a good experience (especially for people like us who are a little graphically challenged). &lt;br&gt;&lt;br&gt;Now we've just got to wait for that first sale!&lt;br&gt;</description></item><item><title>New aggregate RSS feed</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/418/New-aggregate-RSS-feed.aspx</link><category /><pubDate>Wed, 19 Apr 2006 00:00:00 GMT</pubDate><description>Here's our new VSoft Technologies aggregate RSS feed:&lt;BR&gt;&lt;A href="http://www.vsoft-tech.com.au/blogs.aspx?rssid=0"&gt;http://www.vsoft-tech.com.au/blogs.aspx?rssid=0&lt;/A&gt;</description></item><item><title>NNTP vs Web Forums</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/372/NNTP-vs-Web-Forums.aspx</link><category /><pubDate>Sat, 15 Apr 2006 00:00:00 GMT</pubDate><description>Last week we went live with our new website, which is implemented using DotNetNuke. &lt;br&gt;&lt;br&gt;When we were looking into what to use to develop our web portal, the issue of the news server web interface came up often and was something we spent a lot of time discussing in the office. The web interface does not integrate with DNN, and that presented a problem. While we do have a lot of people using the news server with nntp clients such as outlook express and thunderbird, we found that the majority were using the web interface. In the office, the consensus was that while we ourselves prefer to use a newsreader (I monitor a bunch of different newsgroups on different servers and find it very convenient), the majority of our customers either prefer the web interface or are forced to use it because of nntp restrictions in their corporate environment. &lt;br&gt;&lt;br&gt;We considered developing a DNN forums module to sit over the top of our nntp server, however that would distract us from our core business. We considered paying another party to develop the module but that proved to be cost prohibitive. So the decision was taken to use a commercial forums module, and keep the the nntp server running but without it's web interface and with only a singe active group. It does mean we'll have to do double duty, monitoring both the forums and the news server. Hopefully we can keep everyone happy. &lt;br&gt;&lt;br&gt;Perhaps in the future we can persuade the forums vendor to develop an nntp server module as well (not holding my breath though, it's not a simple thing to do).&lt;br&gt;&lt;br&gt;&amp;nbsp;v.&lt;br&gt;</description></item><item><title>Why do I need a separate Store and website login?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/373/Why-do-I-need-a-separate-Store-and-website-login.aspx</link><category /><pubDate>Sat, 15 Apr 2006 00:00:00 GMT</pubDate><description>Our online store is a custom written asp.net 2.0 application, written over a year ago. Since we decided to implement the website using DNN, this has raised some issues with regards to single signon. At the moment, and for the next few months at least you will need to login separately to the store and the website. &lt;br&gt;&lt;br&gt;We are in the process of contracting a company to redevelop our store as a DNN module, once this is done we will merge the logins so that you only need to login once to access any part of our website. &lt;br&gt;&lt;br&gt;v. </description></item><item><title>New website, new blogs</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/540/New-website-new-blogs.aspx</link><category /><pubDate>Fri, 14 Apr 2006 02:59:00 GMT</pubDate><description>&lt;P&gt;New website, check it out: &lt;A href="http://www.finalbuilder.com/"&gt;http://www.finalbuilder.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Based on &lt;A href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/A&gt; - some pretty awesome things you can get happening with DNN, not perfect, but overall the experience has been quite good.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And our blogs have moved too... here's the new links:&lt;/P&gt;
&lt;P&gt;www: &lt;A href="http://www.finalbuilder.com/blogs.aspx"&gt;http://www.finalbuilder.com/blogs.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Vincent's feed: &lt;A href="http://www.finalbuilder.com/Default.aspx?tabid=77&amp;rssid=1"&gt;http://www.finalbuilder.com/Default.aspx?tabid=77&amp;rssid=1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Tate's feed: &lt;A href="http://www.finalbuilder.com/Default.aspx?tabid=77&amp;rssid=2"&gt;http://www.finalbuilder.com/Default.aspx?tabid=77&amp;rssid=2&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>So what do you think?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/374/So-what-do-you-think.aspx</link><category /><pubDate>Tue, 04 Apr 2006 00:00:00 GMT</pubDate><description>&lt;P&gt;We've put a lot of effort into getting DotNetNuke up &amp;amp; running and configured how we like, but obviuosly we're interested in hearing from you in how we can improve it further. Visit our feedback forum and let us know your ideas, comments etc.&lt;/P&gt;
&lt;P&gt;.v&lt;/P&gt;</description></item><item><title>FinalBuilder blogs have moved.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/419/FinalBuilder-blogs-have-moved.aspx</link><category /><pubDate>Tue, 04 Apr 2006 00:00:00 GMT</pubDate><description>Our blogs have moved.&amp;nbsp; Please update your reader.&lt;br&gt;&lt;br&gt;We have just converted 
our entire website over to &lt;a href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/a&gt;, 
and with it&amp;nbsp;our blogs.&amp;nbsp; The old .Text based blog will continue to be available 
for now, but new content will only appear here.</description></item><item><title>FinalBuilder 4.1 is released.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/539/FinalBuilder-41-is-released.aspx</link><category /><pubDate>Fri, 31 Mar 2006 03:59:00 GMT</pubDate><description>&lt;P&gt;Yay!&lt;/P&gt;
&lt;P&gt;Press release here: &lt;A href="http://www.finalbuilder.com/pr/FB4.1.html"&gt;http://www.finalbuilder.com/pr/FB4.1.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Download here: &lt;A href="http://www.finalbuilder.com/downloads/finalbuilder/Trial/FB4EvalSetup.exe"&gt;http://www.finalbuilder.com/downloads/finalbuilder/Trial/FB4EvalSetup.exe&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Detailed version info: &lt;A href="http://www.finalbuilder.com/finalbuilder/versionhistory.html"&gt;http://www.finalbuilder.com/finalbuilder/versionhistory.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Go get it! :)&lt;/P&gt;</description></item><item><title>AdwordsReporter</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/538/AdwordsReporter.aspx</link><category /><pubDate>Fri, 24 Mar 2006 20:10:00 GMT</pubDate><description>&lt;P&gt;Here's a cool piece of software - &lt;A href="http://www.adwordsreporter.com/"&gt;AdwordsReporter&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I've just started using it, as seeing trends for our Adwords advertising is pretty hard to do in the Google Adwords website.&amp;nbsp; With AdwordsReporter you have to create an Adwords&amp;nbsp;report and then import the .xml file into the program.&amp;nbsp; From here you automatically get a graph of the date range you specify, and it's easy to change which data values it graphs.&amp;nbsp; It's great to be able to see what effect changes you make has on the clicks, impressions and so-on.&amp;nbsp; For example, we increased our Adwords budget in mid January and this lets us see very easily what effect this has on impressions, clicks, daily spend, position, etc.&lt;/P&gt;</description></item><item><title>Automise</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/537/Automise.aspx</link><category /><pubDate>Thu, 23 Mar 2006 23:50:00 GMT</pubDate><description>&lt;p&gt;Today we are finally making public the beta of &lt;a href="http://www.automise.com/"&gt;Automise&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What is Automise you ask?&lt;/p&gt;
&lt;p&gt;Well... Automise is an automation tool for System Admins, Network Admins and other IT Professionals.&amp;#160;Whereas &lt;a href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/a&gt; is targetted and very much focused on developers, Automise is a more general purpose automation tool.&amp;#160; Both are build off the same code base, but there are subtle differences especially when it comes to editions - eg. for FinalBuilder we have &lt;a href="http://www.finalbuilder.com/finalbuilder/featurematrix.html"&gt;two editions&lt;/a&gt;: Standard and Professional, whereas Automise will not have different editions and the mix of actions shipped will be slightly different too.&amp;#160; Automise will not include compiler support, version control system support and many of the other tools developers use, but will include ASync action groups, FileSet, File operations, XML Actions, Database actions, CD/DVD burning, etc.&lt;/p&gt;
&lt;p&gt;So - please, if you have time, why not &lt;a href="http://www.automise.com/automise-downloads.aspx"&gt;download Automise&lt;/a&gt; and give it a go and spread the word!? :)&lt;/p&gt;
&lt;p&gt;Discussion forums &lt;a href="http://forums.automise.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Who broke the build?!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/536/Who-broke-the-build.aspx</link><category /><pubDate>Tue, 14 Mar 2006 21:06:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://www.hamang.net/index.php?option=com_content&amp;task=view&amp;id=16&amp;Itemid=9"&gt;This&lt;/A&gt; is a novel use of a TV connected to a continuous integration build machine.&lt;/P&gt;
&lt;P&gt;“&lt;EM&gt;There are actually&amp;nbsp;three different&amp;nbsp;failed screens, depending on what failed (compilation failures, code analysis failures and test failures). All screens are red and the text is blinking. In addition, the errormessage is displayed to see what went wrong, and best of all, the face of the developer who last checked in the code is displayed (kind of a pillory&amp;nbsp;:)).”&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;how cool is that? :)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Diagnose WMI problems</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/535/Diagnose-WMI-problems.aspx</link><category /><pubDate>Tue, 07 Mar 2006 02:12:00 GMT</pubDate><description>&lt;P&gt;Microsoft have just released &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=d7ba3cd6-18d1-4d05-b11e-4c64192ae97d&amp;displaylang=en"&gt;WMIDiag&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;“A new utility to help system administrators diagnose and repair problems with the WMI service”&lt;/P&gt;</description></item><item><title>Visual Regular Expression evaluator</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/534/Visual-Regular-Expression-evaluator.aspx</link><category /><pubDate>Wed, 01 Mar 2006 21:50:00 GMT</pubDate><description>&lt;P&gt;Wow... this very cool!&amp;nbsp; It's a visual &lt;A href="http://osteele.com/tools/reanimator/"&gt;regular expression evaluator&lt;/A&gt; called “Reanimator”.&lt;/P&gt;
&lt;P&gt;Actually it's very cool in many ways:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You can type in any regular expression&lt;/LI&gt;
&lt;LI&gt;You can type in any text to test against the regexpr&lt;/LI&gt;
&lt;LI&gt;It draws a deterministic and non-deterministic state diagram of the reg expr&lt;/LI&gt;
&lt;LI&gt;As you type in text, it shows which state the regexpr is in by highlighting the relevant state in the diagram&lt;/LI&gt;
&lt;LI&gt;It also underlines the relevant character on the regular expression itself which is expected next&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;[via &lt;A href="http://weblogs.asp.net/rosherove/"&gt;ISerializable&lt;/A&gt;]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Check a website for dead links.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/533/Check-a-website-for-dead-links.aspx</link><category /><pubDate>Tue, 28 Feb 2006 20:18:00 GMT</pubDate><description>&lt;P&gt;Thomas Huijer has just released an action “WebSiteCheck”:&lt;/P&gt;
&lt;P&gt;“Here's an &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; Action we use internally for our website. It (recursively) checks pages of a given website. It can check the repsonse code or the contents of the response for a given text or the absense of the given text. We found it very useful to find dead links on a site.&lt;/P&gt;
&lt;P&gt;Extract the contents of the zip to the FinalBuilder 4\ActionDefs directory. The Action is called WebsiteCheck. Source is available on demand.”&lt;/P&gt;
&lt;P&gt;Grab it from the attachements newsgroup, or the &lt;A href="http://forums.finalbuilder.com/readmessage?id=%3C4c2371a5$494412d2$272c6@VSOFT%3E&amp;group=public.finalbuilder.attachments"&gt;forum&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>Code generation with FinalBuilder?!?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/532/Code-generation-with-FinalBuilder.aspx</link><category /><pubDate>Thu, 16 Feb 2006 21:19:00 GMT</pubDate><description>&lt;P&gt;We market &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; as a tool for software developers to automate their build process.&amp;nbsp; So we support compilers, version control systems, installation tools, etc, etc - we try to cover a very broad range of tools so people new to FinalBuilder have coverage of pretty much everything they use.&lt;/P&gt;
&lt;P&gt;But really, FinalBuilder is just a platform with a whole bunch of plugins - it's a very general purpose tool which can do pretty much anything you want to.&amp;nbsp; In many ways it's as flexible as programming languages (it supports loops, error handling, conditions, sub-procedures, etc) but on the other hand it is easy to learn and can be easily used by non-developers.&amp;nbsp; The whole “development environment” is visual - you simply find an icon which represents what you want to do (eg. read a text file) and plonk it in the right place.&amp;nbsp; Using FinalBuilder for things other than building software is not a new idea, we have many customers who use FB for all sorts of different stuff like backing up files, creating development environments for new team members, and the list goes on.&lt;/P&gt;
&lt;P&gt;Anyway - I found this very interesting &lt;A href="http://mikester.typepad.com/mikesters_blog/"&gt;blog [Mikester's Blog]&lt;/A&gt; this morning which describes how FinalBuilder was used as a Code Generator (that's gotta be a first!).&amp;nbsp; Here's the &lt;A href="http://mikester.typepad.com/mikesters_blog/2006/02/code_generation.html"&gt;first post&lt;/A&gt; about it which describes how he gets the idea, and the &lt;A href="http://mikester.typepad.com/mikesters_blog/2006/02/code_generation_1.html"&gt;second post&lt;/A&gt; goes on to describe the &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;enormous &lt;/SPAN&gt;benefits which were realised by using FinalBuilder to do the code generation.&lt;/P&gt;</description></item><item><title>Yahoo's Javascript Library</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/531/Yahoos-Javascript-Library.aspx</link><category /><pubDate>Wed, 15 Feb 2006 21:03:00 GMT</pubDate><description>&lt;P&gt;Not very FinalBuilder related, but Yahoo have &lt;A href="http://developer.yahoo.net/yui/"&gt;released their JavaScript library&lt;/A&gt; (under the BSD license).&amp;nbsp; Very cool stuff indeed... and plenty of examples of how to use it.&amp;nbsp; I wish I had this about 5 years ago when I was doing lots of web development!&lt;/P&gt;
&lt;P&gt;[From &lt;A href="http://www.lemanix.com/nickblog/PermaLink,guid,96df3fc3-4260-4590-86de-2f64e93b6c5f.aspx"&gt;Nick's Delphi Blog&lt;/A&gt;]&lt;/P&gt;</description></item><item><title>Subversion on Windows</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/530/Subversion-on-Windows.aspx</link><category /><pubDate>Wed, 15 Feb 2006 20:50:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://subversion.tigris.org/"&gt;Subversion&lt;/A&gt; is a bit of a learning curve for most people (except those who use &lt;A href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/A&gt; probably!), but is a very popular and capable Version Control System which happens to be opensource.&amp;nbsp; &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; has a whole bunch of built in actions for Subversion: Add, Checkout, Cleanup, Commit, Copy, Export, Import, Mkdir, Revert, Status, Switch, Update, and a Generic action so you can use other Subversion functions which don't have a specific FB action.&lt;/P&gt;
&lt;P&gt;“The aim of this series, is to bring everything together in one place from a Windows perspective. Hopefully this will be of use to people other than just me.”&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://staff.interesource.com/james/feb06/winsvn1.htm"&gt;Part 1&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://staff.interesource.com/james/feb06/winsvn2.htm"&gt;Part 2&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://staff.interesource.com/james/feb06/winsvn3.htm"&gt;Part 3&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://staff.interesource.com/james/feb06/svnwin4.htm"&gt;Part 4&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;From: &lt;A href="http://staff.interesource.com/james/"&gt;James Higgs's Blog&lt;/A&gt; &lt;/P&gt;</description></item><item><title>You dont need to be Part of an Agile team to be Agile.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/529/You-dont-need-to-be-Part-of-an-Agile-team-to-be-A.aspx</link><category /><pubDate>Mon, 13 Feb 2006 20:50:00 GMT</pubDate><description>&lt;P&gt;You dont need to be Part of an Agile team to be Agile - You just need the tools.&lt;/P&gt;
&lt;P&gt;“Nightly Builds.&lt;BR&gt;Build Scripts are a thing of the past! FinalBuilder is the Visual Studio IDE for scripts. It does it all and reduces maintenance, debugging and sneaky undetectable errors.”&lt;/P&gt;
&lt;P&gt;From &lt;A href="http://thedigitalmatrix.blogspot.com/2006/01/you-dont-need-to-be-part-of-agile-team.html"&gt;The Digital Matrix &lt;/A&gt;&lt;/P&gt;</description></item><item><title>Extracting stuff out of MSI files</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/528/Extracting-stuff-out-of-MSI-files.aspx</link><category /><pubDate>Fri, 10 Feb 2006 21:21:00 GMT</pubDate><description>&lt;P&gt;I know this little utility will be useful for a lot of those people out there using MSI - It allows you to extract the contents of a .msi file.&amp;nbsp; And it's command line based so shouldn't be a problem to integrate with FinalBuilder... maybe someone will write an ActionStudio based plugin for it? :)&lt;/P&gt;
&lt;P&gt;Grab it here: &lt;A href="http://blogs.pingpoet.com/overflow/archive/2005/06/02/2449.aspx"&gt;Less MSIérables: A tool to Extract the contents of an .msi File&lt;/A&gt; &lt;/P&gt;</description></item><item><title>Sending SMS's via FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/527/Sending-SMSs-via-FinalBuilder.aspx</link><category /><pubDate>Wed, 08 Feb 2006 20:20:00 GMT</pubDate><description>&lt;P&gt;We've recently added the ability to send SMS's in &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; using the &lt;A href="http://www.icq.com"&gt;ICQ&lt;/A&gt; network.&amp;nbsp; Unfortunately it's quite limited because the ICQ network only supports a &lt;A href="http://www.icq.com/sms/"&gt;handful of networks&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Another way to send SMS's is via SMS gateways... there's literally &lt;A href="http://www.google.com.au/search?q=sms+gateway"&gt;hundreds of them&lt;/A&gt; and they are all different (ie. different pricing models, different way to send SMS's etc, etc.).&amp;nbsp; The “Intellectual mollusc” on his &lt;A href="http://finalbuilder.toflidium.com/"&gt;FinalBuilder blog&lt;/A&gt; has just released an &lt;A href="http://finalbuilder.toflidium.com/2006/02/custom-action-1.html"&gt;FB action to send SMS's&lt;/A&gt; via the &lt;A href="http://www.clickatell.com/"&gt;Clickatell&lt;/A&gt; gateway.&amp;nbsp; Worth checking out if you need to send SMS's via FB and your cell phone network is not supported by ICQ.&lt;/P&gt;</description></item><item><title>Using CodeSmith and the .Net XSD tool with FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/526/Using-CodeSmith-and-the-Net-XSD-tool-with-FinalBu.aspx</link><category /><pubDate>Tue, 07 Feb 2006 22:07:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://cs.rthand.com/blogs/blog_with_righthand/default.aspx"&gt;Miha Markic&lt;/A&gt;, an MVP for C#, has written a couple of FinalBuilder actions: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.codesmithtools.com/"&gt;CodeSmith&lt;/A&gt; generator action&lt;/LI&gt;
&lt;LI&gt;.NET &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconxmlschemadefinitiontoolxsdexe.asp"&gt;XSD tool&lt;/A&gt;&amp;nbsp;(XML Schema Definition Tool )&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;You can find the download of the actions on &lt;A href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2006/02/04/307.aspx"&gt;this page&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>FinalBuilder Tips and Tricks</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/525/FinalBuilder-Tips-and-Tricks.aspx</link><category /><pubDate>Tue, 07 Feb 2006 00:08:00 GMT</pubDate><description>&lt;P&gt;Here's a new interesting site: &lt;A href="http://finalbuilder.toflidium.com/"&gt;Working&amp;nbsp;with FinalBuilder&lt;/A&gt;&amp;nbsp;(by Intellectual mollusc [&lt;A href="http://www.toflidium.com/finalbuilder/atom.xml"&gt;atom&lt;/A&gt;]),&amp;nbsp;that promises Tips and Tricks with &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://finalbuilder.toflidium.com/2006/02/tip-1-including-script-in-action-one.html"&gt;first tip&lt;/A&gt; shows you how to include an external script in an action event, and he also has an FB project file which can be used to &lt;A href="http://finalbuilder.toflidium.com/2006/02/project-1-convert-compressed-fb4.html"&gt;convert between the different project formats&lt;/A&gt; (ie. to and from .fbz4 and .fbp4).&lt;/P&gt;
&lt;P&gt;Certainly a site to keep an eye on.&lt;/P&gt;</description></item><item><title>Some recent mention of FinalBuilder on the net</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/524/Some-recent-mention-of-FinalBuilder-on-the-net.aspx</link><category /><pubDate>Thu, 22 Dec 2005 19:37:00 GMT</pubDate><description>&lt;P&gt;Just a few recent mentions of FinalBuilder... :)&lt;/P&gt;
&lt;P&gt;“one of my favorite tools has released a new version, chalk full of features...” &lt;BR&gt;&lt;A href="http://timheuer.com/blog/archive/2005/12/05/6327.aspx"&gt;Tim Heuer&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;“I've been using FinalBuilder myself for several years now, and I'm quite happy with it.” &lt;BR&gt;&lt;A href="http://www.larkware.com/Reviews/finalbuilder4.html"&gt;Review of FinalBuilder 4&lt;/A&gt;&amp;nbsp;by Mike Gunderloy&lt;/P&gt;
&lt;P&gt;&lt;A href="http://finalbuilder.com/"&gt;“FinalBuilder&lt;/A&gt; a great automated build tool ... TMH uses it regularly and thinks it's excellent”&lt;BR&gt;New link on &lt;A href="http://tmhare.mvps.org/links.htm"&gt;The March Hare&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;“Simplesmente indispensável.” [Simply indispensable - translated from Portuguese] &lt;BR&gt;Blog entry&amp;nbsp;by &lt;A href="http://www.ericksasse.com.br/?p=412"&gt;Erick Sasse&lt;/A&gt;&amp;nbsp;[&lt;A href="http://www.google.com/translate?u=http%3A%2F%2Fwww.ericksasse.com.br%2F%3Fp%3D412&amp;langpair=pt%7Cen&amp;hl=en&amp;ie=UTF8"&gt;English translation&lt;/A&gt;]&lt;/P&gt;
&lt;P&gt;“Setting up a new build process (without my prior knowledge of FB) was very easy and fast and all the actions I need were already there.”&lt;BR&gt;On Righthand blogs by &lt;A href="http://cs.rthand.com/blogs/blog_with_righthand/archive/2005/12/16/259.aspx"&gt;Miha Markic&lt;/A&gt; [MVP C#]&amp;nbsp;&lt;/P&gt;
&lt;P&gt;“If you are looking for a build and release managment tool for your application development process, you may want to check out the latest release of FinalBuilder“&lt;BR&gt;On &lt;A href="http://davidhayden.com/blog/dave/archive/2005/12/01/2603.aspx"&gt;David Hayden's&lt;/A&gt; blog&lt;/P&gt;
&lt;P&gt;“One of the best products I've used for build management, and it gets better every release.”&lt;BR&gt;On &lt;A href="http://weblogs.asp.net/rosherove/archive/2005/12/01/431943.aspx"&gt;Roy Osherove's&lt;/A&gt; Blog&amp;nbsp;&lt;/P&gt;
&lt;P&gt;“This is by far the best build tool I’ve used.”&lt;BR&gt;On &lt;A href="http://weblogs.asp.net/KennyKerr/archive/2005/12/05/432383.aspx"&gt;Kenny Kerr's&lt;/A&gt;&amp;nbsp;Blog&amp;nbsp;&lt;/P&gt;</description></item><item><title>Aardvark DVD</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/523/Aardvark-DVD.aspx</link><category /><pubDate>Thu, 15 Dec 2005 23:05:00 GMT</pubDate><description>&lt;P&gt;Today we received our &lt;A href="http://www.projectaardvark.com/movie"&gt;Aardvark DVD&lt;/A&gt;.&amp;nbsp; It arrived amazingly quickly, in less than a week, and we're in Australia.&amp;nbsp; I suppose the amazing speed is thanks to &lt;A href="http://www.joelonsoftware.com/articles/HowToShipAnything.html"&gt;Joel's streamlined shipping production line&lt;/A&gt; :)&lt;/P&gt;
&lt;P&gt;Now just gotta find time to watch it!&lt;/P&gt;</description></item><item><title>Search Engine Optimization</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/522/Search-Engine-Optimization.aspx</link><category /><pubDate>Sat, 10 Dec 2005 03:58:00 GMT</pubDate><description>&lt;P&gt;Came across this &lt;A href="http://www.seomoz.org/articles/beginners-1-page.php"&gt;Search Engine Optimization&lt;/A&gt; article yesterday (by &lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Rand Fishkin of SEOmoz.org&lt;STRONG&gt;)&lt;/STRONG&gt;&lt;/SPAN&gt;, and it's quite good.&amp;nbsp; There's a few tips I learnt which I'll be adding to the FinalBuilder web pages when I get the time.&amp;nbsp; There's some quite interesting information, for example “it's also important to keep URLs limited to as few dynamic parameters as possible ... In an ideal site, there should never be more than two.”&amp;nbsp; (By dynamic parameters, they're talking about things like this: ?param1=a&amp;param2=1 that goes after the URL).&amp;nbsp; We don't use any dynamic parameters on the FinalBuilder webpage, but certainly something to keep in mind.&lt;/P&gt;
&lt;P&gt;Anyway, it's worth the read if you maintain any websites.&lt;/P&gt;</description></item><item><title>Now that the dust has settled...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/521/Now-that-the-dust-has-settled.aspx</link><category /><pubDate>Fri, 02 Dec 2005 03:09:00 GMT</pubDate><description>&lt;P&gt;Yesterday was a pretty &lt;A href="http://www.finalbuilder.com/pr/FB4.html"&gt;big day&lt;/A&gt;... luckily you don't have to get a major release out the door more than about once a year!&amp;nbsp; It's amazing all the extra &lt;STRONG&gt;crap&lt;/STRONG&gt; you have to do -&amp;nbsp;it's not about writing software getting the release out, it's all the press releases, downloads, website content, new graphics, newsgroup posts, database updates, generating keys for Software Assurance customers, sending out emails, etc, etc.&amp;nbsp; We still have a pretty long list of stuff to do... but the majority is done.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Anyway, I took some time to do a few images which people can use on their website to show others that they use an automated build process&amp;nbsp;and to help us promote FB :)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/finalbuilder/images/BuiltWithFinalBuilder1.png"&gt; &lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.finalbuilder.com/finalbuilder/images/BuiltWithFinalBuilder2.png"&gt; &lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://www.finalbuilder.com/finalbuilder/images/BuiltWithFinalBuilder3.png"&gt; &lt;BR&gt;&lt;BR&gt;
&lt;P&gt;So, feel free to make use of them.... and I'd appreciate it if you could email me if you've put one up on your website, thanks!&lt;/P&gt;</description></item><item><title>FinalBuilder 4 is out!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/520/FinalBuilder-4-is-out.aspx</link><category /><pubDate>Thu, 01 Dec 2005 06:38:00 GMT</pubDate><description>&lt;P&gt;Here's the press release: &lt;A href="http://www.finalbuilder.com/pr/FB4.html"&gt;http://www.finalbuilder.com/pr/FB4.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;But for the nice technical stuff, here's the list of what's new: &lt;A href="http://www.finalbuilder.com/finalbuilder/WhatsNew.html"&gt;http://www.finalbuilder.com/finalbuilder/WhatsNew.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;And the eval download: &lt;A href="http://www.finalbuilder.com/downloads/finalbuilder/Trial/FB4EvalSetup.exe"&gt;http://www.finalbuilder.com/downloads/finalbuilder/Trial/FB4EvalSetup.exe&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;ENJOY!&lt;/P&gt;</description></item><item><title>FinalBuilder 4 release candidate 1 is out....</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/519/FinalBuilder-4-release-candidate-1-is-out.aspx</link><category /><pubDate>Sat, 26 Nov 2005 02:10:00 GMT</pubDate><description>&lt;P&gt;*phew* - we're almost there.&lt;/P&gt;
&lt;P&gt;Here's the download url for RC1:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.finalbuilder.com/downloads/finalbuilder/beta/400/FB400_61.exe"&gt;http://www.finalbuilder.com/downloads/finalbuilder/beta/400/FB400_61.exe&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;If all goes well we'll release mid next week - so let us know if you find any bugs!&lt;/P&gt;</description></item><item><title>Great news everyone!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/518/Great-news-everyone.aspx</link><category /><pubDate>Sat, 26 Nov 2005 01:42:00 GMT</pubDate><description>&lt;P&gt;(sorry, this has nothing to do with &lt;A href="http://www.gotfuturama.com/"&gt;Futurama&lt;/A&gt;!)&lt;/P&gt;
&lt;P&gt;Probably the biggest new feature of &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; 4 is the &lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/10/04/732.aspx"&gt;ASync action group&lt;/A&gt;.&amp;nbsp; It opens massive possibilities in your build process - in short, it allows you to run multiple actions simultaneously with sync points.&lt;/P&gt;
&lt;P&gt;Unfortunately, we had to impose a limitation with this, namely that you couldn't run other actions lists or include other FinalBuilder projects under the ASync action group.&amp;nbsp; The reason behind this was that Actions are not re-entrant, this means that if Action A was running (say compiling a VS.Net solution) then if that same action was also called by another thread then it would cause major problems.&amp;nbsp; So, this needed to be prevented and hence the limitation as allowing run action list and including FB projects is the only way that you could get the situation where FB would be able to run the same instance of an action multiple times.&amp;nbsp; Sorry if I lost you, the good news is almost here :)&lt;/P&gt;
&lt;P&gt;The limitation for a lot of people made ASync action groups not very useful, as the majority of their actions are split up into separate action groups... so it'd be like one step forwards, two steps back.&amp;nbsp; We were planning to revisit this for a 4.1 release... but because of so many people asking us about it, and because it's pretty much the only thing people were critical of in FB4, it was decided to fix it!&lt;/P&gt;
&lt;P&gt;Well, as you could probably guess - the limitation is now gone!&amp;nbsp; Now ASync Action Groups can contain both Run Action list actions and Include FinalBuilder project actions! &lt;/P&gt;
&lt;P&gt;A small new limitation needed to be added... (that's &lt;A href="http://en.wikipedia.org/wiki/Professor_Hubert_Farnsworth"&gt;Professor Hubert Farnsworth&lt;/A&gt; bad news :)... but the limitation is a lot less limiting.&amp;nbsp;&amp;nbsp; The limitation is that a single action can not be run at the same time.&amp;nbsp; So, for example if you have a Compile action in an action list and your ASync action group contains two Run Action List actions both calling the same action list with the Compile action, then if the compile action is actually running and the second thread wants to run the compile action, then it must wait until the first one is finished.&amp;nbsp; In other words, running the same FB actions at the same time is serialised.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>FinalBuilder 4 beta Quality Survey results &amp;amp; analysis</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/517/FinalBuilder-4-beta-Quality-Survey-results-amp-an.aspx</link><category /><pubDate>Thu, 17 Nov 2005 22:07:00 GMT</pubDate><description>&lt;P&gt;First of all, a big thankyou to all who have tried the FB4 beta and also to those people who completed our quality survey!&lt;/P&gt;
&lt;P&gt;Here are some of the results from the survey:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Have you tried the FinalBuilder 4 beta yet?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;83% Yes, 17% No&lt;/P&gt;
&lt;P&gt;[Wow... that's awesome!&amp;nbsp; Out of that, probably about 70% of people were using the latest build at the time.]&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;How do you rate the overall quality of the beta so far?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;91% High/Very High, 9% Moderate/Low/Very Low&lt;/P&gt;
&lt;P&gt;[Not too bad - especially considering that quite a lot of people aren't on the latest beta build]&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Please rate the stability of FinalBuilder 4 beta.&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;91% High/Very High, 9% Moderate/Low/Very Low&lt;/P&gt;
&lt;P&gt;[Very similar to the overall quality, with the exception that the spread between High and Very High was different, the percentage of Very High was higher]&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;STRONG&gt;Have you tried running any production builds with FinalBuilder 4 yet?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;69% Yes&lt;/P&gt;
&lt;P dir=ltr&gt;[This was very surprising to us, and is really excellent news.&amp;nbsp; It means that the FB4 beta is getting a very good workout, not just a quick look]&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;STRONG&gt;Did FinalBuilder 4 successfully import your projects from previous versions?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;We're aiming for 100% here, but there were 4 projects which weren't imported from earlier versions.&amp;nbsp; The JediVCS support was missing from an earlier beta version so this probably accounts for a couple at least.&amp;nbsp; One customer reported that an FB2 project containing SourceSafe didn't work correctly, but that has now been resolved.&amp;nbsp; If anyone has any backwards compatibility issues, please let us know.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;STRONG&gt;Do you think FinalBuilder 4 is a compelling upgrade over previous versions?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;80% was Definitely Yes or Cautiously Yes.&amp;nbsp;&amp;nbsp;Only one person answered Definitely Not and only one person answered Probably Not.&amp;nbsp; So, this is pretty encouraging.&amp;nbsp; It was very interesting what people answered for the “best new feature in FB4“; the answers were very mixed, but if I had to pick a winner it would be the ASync group.&amp;nbsp; But, pretty much all the new features got at least one mention - great news.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;STRONG&gt;What area or areas is the quality lacking?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P dir=ltr&gt;Did we have to ask this question?&amp;nbsp; Documentation comes out on top... and yes, we are adressing this.&amp;nbsp; Many of the other problems that were reported had already been fixed in a later build, and some of the answers were slightly too vague for us to do anything about, eg. “UI“ and “some actions could be improved“.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;We're planning to conduct another survey just before we release FB4 - and hopefully we'll see some kind of improvement :)&lt;/P&gt;
&lt;P dir=ltr&gt;Overall, this has been quite a useful exercise for us.&amp;nbsp; It's really good to get feedback on the quality of the beta, and we get lots of feature requests, bug reports, and just very honest comments&amp;nbsp;and opinions in these surveys.&lt;/P&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>File Dependencies</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/602/File-Dependencies.aspx</link><category /><pubDate>Thu, 17 Nov 2005 01:18:00 GMT</pubDate><description>&lt;P&gt;Have you ever wished you can have your build check whether or not files have changed, so you know whether or not to rebuild?&lt;/P&gt;
&lt;P&gt;With &lt;A href="http://www.finalbuilder.com/finalbuilder/FB4Beta.html"&gt;FinalBuilder 4&lt;/A&gt;,&amp;nbsp;you now&amp;nbsp;can! Check out the new File Dependency action (you will need the latest public beta.)&lt;/P&gt;
&lt;P align=left&gt;&lt;IMG alt="Sample Project" src="http://www.finalbuilder.com/blogimages/angus/filedep/DemoProject.gif"&gt;&lt;/P&gt;
&lt;P&gt;This is a skeleton action list&amp;nbsp;that does&amp;nbsp;two things:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;It synchronizes&amp;nbsp;a local copy of the source files&amp;nbsp;(via SurroundSCM Get.) 
&lt;LI&gt;It&amp;nbsp;checks the file dependencies to see if anything has changed. Lets&amp;nbsp;zoom in on the File Dependency action:&lt;/LI&gt;&lt;/OL&gt;
&lt;P align=center&gt;&lt;IMG alt="Source Files" src="http://www.finalbuilder.com/blogimages/angus/filedep/FilesToCheck.gif"&gt;&lt;/P&gt;&lt;/IMG&gt;
&lt;P align=left&gt;In &lt;STRONG&gt;Files and Folders to check&lt;/STRONG&gt;, I'm telling FinalBuilder to look at the modification dates of all the main FinalBuilder source and resource&amp;nbsp;files.&amp;nbsp; Because I've chosen &lt;STRONG&gt;Recurse into subdirectories&lt;/STRONG&gt;, FinalBuilder&amp;nbsp;will scan&amp;nbsp;the subdirectories of&amp;nbsp;each for all files of&amp;nbsp;those&amp;nbsp;types.&lt;/P&gt;
&lt;P align=left&gt;So, how do we know if the files have changed?&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt="Source Files" src="http://www.finalbuilder.com/blogimages/angus/filedep/DateToCompare.gif"&gt;&lt;/IMG&gt;&lt;/P&gt;
&lt;P align=left&gt;As you can see, I've told FinalBuilder to&amp;nbsp;check for any files which have changed since the last time the action was run. In the &lt;STRONG&gt;Options&lt;/STRONG&gt; section, I've elected to have FinalBuilder ignore any files created within two minutes of the last run, to compensate for jitter in the modification dates.&lt;/P&gt;
&lt;P align=left&gt;You can see in the greyed-out&amp;nbsp;“&lt;STRONG&gt;Use date from file“&lt;/STRONG&gt; section that I could have elected to compare the modification dates of the compiled libraries, in order to be really sure whether or not to rebuild.&lt;/P&gt;
&lt;P align=left&gt;In fact, you can build a&amp;nbsp;simple continous integration tool with just one more action:&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt="Poor Man's Continous Integration" src="http://www.finalbuilder.com/blogimages/angus/filedep/PoorMansContinuousIntegration.gif"&gt;&lt;/IMG&gt;&lt;/P&gt;
&lt;P align=left&gt;Example1 re-schedules itself (using the Schedule Add action and the Windows Scheduler) to run 10 minutes after it finishes, but only starts a build if there are files that have changed.&lt;/P&gt;
&lt;P align=left&gt;Example 2 is&amp;nbsp;even simpler - it loops continously checking for changed files (with a short delay in between each loop.) I also put in a separate check so the help file is only rebuilt if it has changed.&lt;/P&gt;</description></item><item><title>File Dependencies</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/628/File-Dependencies.aspx</link><category /><pubDate>Thu, 17 Nov 2005 01:18:00 GMT</pubDate><description>&lt;P&gt;Have you ever wished you can have your build check whether or not files have changed, so you know whether or not to rebuild?&lt;/P&gt;
&lt;P&gt;With &lt;A href="http://www.finalbuilder.com/finalbuilder/FB4Beta.html"&gt;FinalBuilder 4&lt;/A&gt;,&amp;nbsp;you now&amp;nbsp;can! Check out the new File Dependency action (you will need the latest public beta.)&lt;/P&gt;
&lt;P align=left&gt;&lt;IMG alt="Sample Project" src="http://www.finalbuilder.com/blogimages/angus/filedep/DemoProject.gif"&gt;&lt;/P&gt;
&lt;P&gt;This is a skeleton action list&amp;nbsp;that does&amp;nbsp;two things:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;It synchronizes&amp;nbsp;a local copy of the source files&amp;nbsp;(via SurroundSCM Get.) 
&lt;LI&gt;It&amp;nbsp;checks the file dependencies to see if anything has changed. Lets&amp;nbsp;zoom in on the File Dependency action:&lt;/LI&gt;&lt;/OL&gt;
&lt;P align=center&gt;&lt;IMG alt="Source Files" src="http://www.finalbuilder.com/blogimages/angus/filedep/FilesToCheck.gif"&gt;&lt;/P&gt;&lt;/IMG&gt;
&lt;P align=left&gt;In &lt;STRONG&gt;Files and Folders to check&lt;/STRONG&gt;, I'm telling FinalBuilder to look at the modification dates of all the main FinalBuilder source and resource&amp;nbsp;files.&amp;nbsp; Because I've chosen &lt;STRONG&gt;Recurse into subdirectories&lt;/STRONG&gt;, FinalBuilder&amp;nbsp;will scan&amp;nbsp;the subdirectories of&amp;nbsp;each for all files of&amp;nbsp;those&amp;nbsp;types.&lt;/P&gt;
&lt;P align=left&gt;So, how do we know if the files have changed?&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt="Source Files" src="http://www.finalbuilder.com/blogimages/angus/filedep/DateToCompare.gif"&gt;&lt;/IMG&gt;&lt;/P&gt;
&lt;P align=left&gt;As you can see, I've told FinalBuilder to&amp;nbsp;check for any files which have changed since the last time the action was run. In the &lt;STRONG&gt;Options&lt;/STRONG&gt; section, I've elected to have FinalBuilder ignore any files created within two minutes of the last run, to compensate for jitter in the modification dates.&lt;/P&gt;
&lt;P align=left&gt;You can see in the greyed-out&amp;nbsp;“&lt;STRONG&gt;Use date from file“&lt;/STRONG&gt; section that I could have elected to compare the modification dates of the compiled libraries, in order to be really sure whether or not to rebuild.&lt;/P&gt;
&lt;P align=left&gt;In fact, you can build a&amp;nbsp;simple continous integration tool with just one more action:&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt="Poor Man's Continous Integration" src="http://www.finalbuilder.com/blogimages/angus/filedep/PoorMansContinuousIntegration.gif"&gt;&lt;/IMG&gt;&lt;/P&gt;
&lt;P align=left&gt;Example1 re-schedules itself (using the Schedule Add action and the Windows Scheduler) to run 10 minutes after it finishes, but only starts a build if there are files that have changed.&lt;/P&gt;
&lt;P align=left&gt;Example 2 is&amp;nbsp;even simpler - it loops continously checking for changed files (with a short delay in between each loop.) I also put in a separate check so the help file is only rebuilt if it has changed.&lt;/P&gt;</description></item><item><title>File Dependencies</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/654/File-Dependencies.aspx</link><category>FinalBuilder</category><pubDate>Thu, 17 Nov 2005 01:18:00 GMT</pubDate><description>&lt;p&gt;Have you ever wished you can have your build check whether or not files have changed, so you know whether or not to rebuild?&lt;/p&gt;
&lt;p&gt;With &lt;a href="http://www.finalbuilder.com/finalbuilder/FB4Beta.html"&gt;FinalBuilder 4&lt;/a&gt;,&amp;nbsp;you now&amp;nbsp;can! Check out the new File Dependency action (you will need the latest public beta.)&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;img alt="Sample Project" src="http://www.finalbuilder.com/blogimages/angus/filedep/DemoProject.gif" /&gt;&lt;/p&gt;
&lt;p&gt;This is a skeleton action list&amp;nbsp;that does&amp;nbsp;two things:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;It synchronizes&amp;nbsp;a local copy of the source files&amp;nbsp;(via SurroundSCM Get.)
    &lt;/li&gt;
    &lt;li&gt;It&amp;nbsp;checks the file dependencies to see if anything has changed. Lets&amp;nbsp;zoom in on the File Dependency action:&lt;/li&gt;
&lt;/ol&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="Source Files" src="http://www.finalbuilder.com/blogimages/angus/filedep/FilesToCheck.gif" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;In &lt;strong&gt;Files and Folders to check&lt;/strong&gt;, I'm telling FinalBuilder to look at the modification dates of all the main FinalBuilder source and resource&amp;nbsp;files.&amp;nbsp; Because I've chosen &lt;strong&gt;Recurse into subdirectories&lt;/strong&gt;, FinalBuilder&amp;nbsp;will scan&amp;nbsp;the subdirectories of&amp;nbsp;each for all files of&amp;nbsp;those&amp;nbsp;types.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;So, how do we know if the files have changed?&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="Source Files" src="http://www.finalbuilder.com/blogimages/angus/filedep/DateToCompare.gif" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;As you can see, I've told FinalBuilder to&amp;nbsp;check for any files which have changed since the last time the action was run. In the &lt;strong&gt;Options&lt;/strong&gt; section, I've elected to have FinalBuilder ignore any files created within two minutes of the last run, to compensate for jitter in the modification dates.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;You can see in the greyed-out&amp;nbsp;&amp;ldquo;&lt;strong&gt;Use date from file&amp;ldquo;&lt;/strong&gt; section that I could have elected to compare the modification dates of the compiled libraries, in order to be really sure whether or not to rebuild.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;In fact, you can build a&amp;nbsp;simple continous integration tool with just one more action:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="Poor Man's Continous Integration" src="http://www.finalbuilder.com/blogimages/angus/filedep/PoorMansContinuousIntegration.gif" /&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Example1 re-schedules itself (using the Schedule Add action and the Windows Scheduler) to run 10 minutes after it finishes, but only starts a build if there are files that have changed.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Example 2 is&amp;nbsp;even simpler - it loops continously checking for changed files (with a short delay in between each loop.) I also put in a separate check so the help file is only rebuilt if it has changed.&lt;/p&gt;</description></item><item><title>FinalBuilder 4 beta quality survey</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/516/FinalBuilder-4-beta-quality-survey.aspx</link><category /><pubDate>Fri, 11 Nov 2005 02:42:00 GMT</pubDate><description>&lt;P&gt;We have just put together a very quick survey (which should take only a minute or two to fill out) regarding the quality of the FinalBuilder 4 beta.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://survey.finalbuilder.com/survey.php?sid=29"&gt;http://survey.finalbuilder.com/survey.php?sid=29&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;We're very interested in any feedback you can provide - we're aiming to release at the end of November, and want FB4 to be a quality release.&amp;nbsp; Even if you haven't yet tried the beta we're also interested in that as it would be very interesting to know just how many people do try the beta, and the reasons why people don't try it.&amp;nbsp; The survey also asks what you think is missing, as well as what you think the best new feature of FinalBuilder 4 is!&lt;/P&gt;
&lt;P&gt;So, what you waiting for - let us know what you &lt;A href="http://survey.finalbuilder.com/survey.php?sid=29"&gt;think&lt;/A&gt;!&lt;/P&gt;</description></item><item><title>FinalBuilder 4 public beta</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/515/FinalBuilder-4-public-beta.aspx</link><category /><pubDate>Wed, 09 Nov 2005 03:13:00 GMT</pubDate><description>&lt;P&gt;FB4 is now ready for a public &lt;A href="http://www.finalbuilder.com/finalbuilder/FB4Beta.html"&gt;beta&lt;/A&gt;, yay!&lt;/P&gt;
&lt;P&gt;We're actually very happy with the way the beta has gone so-far; of course there have been a lot of bugs, but the feedback has been really, really great! Thanks to all who have helped!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;One thing about beta testing a build tool is that people don't want to risk breaking their builds with a beta product, so in the past it has been very hard to get much feedback.&amp;nbsp; Most of the feedback (and bug reports) normally come in the following two weeks or so after the&amp;nbsp;release, but with FB4 I reckon (and hope) that this won't be the case!&amp;nbsp; It seems that we're reached some sort of point now that we're actually getting enough people to help test most of the new stuff.&lt;/P&gt;
&lt;P&gt;So - if you haven't done so already, we'd love you to give FB4 a test: load up your FB1, FB2, or FB3 projects, make sure everything works, and try out some of the new features (we'll have&amp;nbsp;the complete new features list soon hopefully...), and let us know how you went whether it went well, or not so well!&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Build Engine changes</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/514/Whats-new-in-FinalBuilder-4-Build-Engine-changes.aspx</link><category /><pubDate>Wed, 02 Nov 2005 01:22:00 GMT</pubDate><description>&lt;P&gt;We did a lot of work on the build engine for &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; 4, mainly in the area of performance.&amp;nbsp; It's not like the performance of the FB3 build engine is slow, but there is always room for improvement!&amp;nbsp;&amp;nbsp;The basic architecture of FinalBuilder is that there is a build engine (produces messages), a message queuing system, the&amp;nbsp;user interface (subscribes to the messages), and the logging sub-system&amp;nbsp;(which also subscribes to the build messages).&amp;nbsp; All of these run in their own thread.&amp;nbsp; The build engine and messaging systems have code in them to force context switches to other threads and also to &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleep.asp"&gt;sleep&lt;/A&gt; for a while to allow the other threads to breathe.&amp;nbsp; One of the problems with this is that sometimes the sleeps are too long, and sometimes they're too short - and these depend on many factors, eg. CPU speed, number of CPUs, the volume and type of messages coming from the build engine, the overhead of other tools which the build engine is calling, etc.&lt;/P&gt;
&lt;P&gt;When the sleeps are too long&amp;nbsp;the build time suffers; when the sleeps are too short it's possible for the build engine to be ahead of the UI and the logging.&amp;nbsp; We have done some experiments where the UI would take over 30 mins to catch up to the build engine because of the enourmous volume of messages still left in the message queues.&lt;/P&gt;
&lt;P&gt;One technique we experimented with was to dynamically change the sleep time depending on the CPU load.&amp;nbsp; We query the CPU and get it's load and then calculate a sleep time depending on the load and the last sleep time - the target was about 95% CPU load.&amp;nbsp; We tested it on a variety of machines, all of different speeds and it worked reasonably well - was generally faster than FB3 in most situations, but was still not optimal.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The technique we ended up with is very simple - calculate the total amount of messages in all the internal messages queues and sleep until the total amount of messages is below 10.&amp;nbsp; (almost too simple, eh).&amp;nbsp; This change has the effect that we never sleep for too long (ie. don't waste CPU cycles), and the build engine waits until almost all messages are processed,&amp;nbsp;meaning the build engine will never get a long way ahead of the UI and Logging.&amp;nbsp; The net effect is that build times in FB4 are shorter, and the UI and Logging&amp;nbsp;is never behind the build engine.&lt;/P&gt;</description></item><item><title>Whats new in FinalBuilder 4 - More on logging</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/513/Whats-new-in-FinalBuilder-4-More-on-logging.aspx</link><category /><pubDate>Tue, 01 Nov 2005 01:37:00 GMT</pubDate><description>&lt;P&gt;In FinalBuilder 3, when a build runs you have two options as far as live logging goes: on or off.&amp;nbsp; The default is off (to reduce memory overhead and to reduce the CPU usage of FinalBuilder), but it's pretty annoying when a build fails as you have to double click on the row in the build history, and then expand nodes to find the one which is in error.&lt;/P&gt;
&lt;P&gt;I've already discussed the new database logging architecture in FinalBuilder 4 &lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/10/07/737.aspx"&gt;here&lt;/A&gt; -&amp;nbsp;one of the things this allows us to do is to instantly find actions with an error status in the log file.&amp;nbsp; We've also spend quite a bit of time enhancing the general usability experience in the area also... so this is how it all works in FB4:&lt;/P&gt;
&lt;P&gt;Firstly you get to choose how/when the live logging is turned on/off:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Disable Live Logging by Default&lt;/LI&gt;
&lt;LI&gt;Enable Live Logging by Default&lt;/LI&gt;
&lt;LI&gt;Remember last Live Logging state&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;These are the global settings; there is still the “Live Logging” checkbox on the log tab which allows you to turn live logging on/off instantly.&lt;/P&gt;
&lt;P&gt;When a build runs, the bottom set of tabs automatically changes to the Build History tab (the top part of the screen is &lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/10/10/739.aspx"&gt;different&lt;/A&gt;).&amp;nbsp; But you can also choose to “Switch to live logging tab if live logging enabled” (Tools menu-&gt;Option-&gt;FinalBuilder-&gt;General Options category-&gt;GUI Options).&lt;/P&gt;
&lt;P&gt;Now, the bit we worked on quite a bit was what happens when a build completes.&amp;nbsp; If a build completes successfully, then generally you don't care about what's in the log - probably more about overall build statistics, but when a build fails you want to see what action caused the failure and see the error messages.&amp;nbsp; When a build completes successfully, the log is loaded in the Build Log tab but the tab stays on the Build History so you can compare the overall build statistics.&amp;nbsp; When a build falls over, the bottom tab changes to the Build Log and loads just the action which caused the error (the action output and error messages&amp;nbsp;are expanded in the tree), so you get an instant view of the action that caused the build to fail (notice the Show all Error Actions and Show Ignored Errors buttons too):&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_BuildLog.png"&gt; 
&lt;P&gt;This is a big improvement over FinalBuilder 3 - the logging does as you'd expect; it focuses on errors if the build fails, or shows you build statistics if the build succeeds.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Project Tab</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/512/Whats-new-in-FinalBuilder-4-Project-Tab.aspx</link><category /><pubDate>Thu, 27 Oct 2005 00:03:00 GMT</pubDate><description>&lt;P&gt;We've added yet another cool usability enhancment for &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; 4 - the Project tab.&amp;nbsp; The project tab uses a tree control to display the various action lists, scripts and variables in the current project, as you can see here:&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_ProjectTab.png"&gt; 
&lt;P&gt;The main reason this tab was introduced was that if you have more than a few extra action lists (in this case there are four extra ones: Do Compiles, Installer, Help Files and Doco, and Deployment Stuff), then it's a real&amp;nbsp;&lt;A href="http://www.answers.com/topic/pita-2?method=6"&gt;pita&lt;/A&gt; to reorder them - you have to right click on the tab you want to reorder, and then select “Move Left“ or “Move Right“ and the tab will move along to the left or right by one.&amp;nbsp; Now, just imagine you have 50 or 100 action lists and you want to move a tab from one end to the other! (yes, I know some of you don't have to imagine because you do actually have this many...).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;So, we needed an alternate view of the action lists in your project, including a much better way to reorder and select them.&amp;nbsp; Double-clicking on an action list in the tree&amp;nbsp;will select it, you can drag and drop action lists around to reorder them, or use the Ctrl-Up or Ctrl-Down keys, or even use the right-click context menu, or even use the Up and Down arrows!&amp;nbsp; Hopefully we've covered all bases here&amp;nbsp;:)&lt;/P&gt;
&lt;P&gt;Other functions on the project tab include:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Easy way to bring up the Global Script editor dialog&lt;/LI&gt;
&lt;LI&gt;Easy way to bring up the Variables Editor dialog&lt;/LI&gt;
&lt;LI&gt;Easy way to view project, user, environment and system variables (including their default values)&lt;/LI&gt;
&lt;LI&gt;Easy way to add a new variable, or edit an existing one&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It's one of those features that once you start using it, you wonder how you lived without it...&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Console version now in Standard edition</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/511/Whats-new-in-FinalBuilder-4-Console-version-now.aspx</link><category /><pubDate>Tue, 25 Oct 2005 21:39:00 GMT</pubDate><description>&lt;P&gt;The FinalBuilder console (FBCMD) is now available in both the Standard and Professional edtions of FinalBuilder 4 - I know this will make a lot of people very happy! :)&lt;/P&gt;
&lt;P&gt;We've also done a log of work on the&amp;nbsp;logging output of the console verion.&amp;nbsp; The output is has been improved for readability including colorised output.&amp;nbsp; The build result and build time are now displayed when the build completes also.&amp;nbsp; Here's some screenshots so you can see the difference.&lt;/P&gt;
&lt;P&gt;FB3CMD Output:&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_FB3CMD_Output.png"&gt; 
&lt;P&gt;And this is the same build (look at the file in the command line parameters) under FBCMD version 4:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_FBCMD_Output.png"&gt;&lt;/P&gt;
&lt;P&gt;So - significantly more readable and also brings FB in line with other command line build tools like &lt;A href="http://msdn2.microsoft.com/en-us/library/0k6kkbsd.aspx"&gt;MSBuild&lt;/A&gt; and &lt;A href="http://nant.sourceforge.net/"&gt;NAnt&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Property Sets</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/510/Whats-new-in-FinalBuilder-4-Property-Sets.aspx</link><category /><pubDate>Thu, 20 Oct 2005 04:19:00 GMT</pubDate><description>&lt;p&gt;Property Sets is a huge new feature in FinalBuilder 4.&amp;#160; It's a real time saver and greatly improves the readability and maintainability of your build process!&amp;#160; The rationale behind property sets was that probably our most frequently asked question was along the lines of:&lt;/p&gt;
&lt;blockquote dir="ltr" style="margin-right: 0px"&gt;
&lt;p&gt;&lt;em&gt;“How do I set the version information of all the modules in my product to be the same, including sycronisation and incrementing of version numbers”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Our answer for this has been to use script in the BeforeAction events of the compiler actions, and we even have an article explaining how to do it. But that is so old-skool in FinalBuilder 4, as we've introduced PropertySets which do all the hard work for you! :)&lt;/p&gt;
&lt;p&gt;Here are the available PropertySet actions:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.finalbuilder.com/blogimages/FinalBuilder4_PropertySets.png" /&gt;&lt;/p&gt;
&lt;p&gt;Here's how they work - you use a &lt;strong&gt;PropertySet define&lt;/strong&gt; action, which allows you to give a property set a name and you get to choose the type.&amp;#160; A property set is basically a whole bunch of values which are held together by this PropertySet, an example is the Win32 Version Numbers type which contains: MajorVersion, MinorVersion, ReleaseVersion, BuildVersion integer values.&amp;#160; Then you can load that property set from somewhere,&amp;#160;for example an&amp;#160;INI file, the registry, the FinalBuilder project version number file (FBD) or you can assign the values using other FinalBuilder variables.&amp;#160; After you load the property set you may also want to increment a value in it using the &lt;strong&gt;PropertySet increment&lt;/strong&gt; value action.&lt;/p&gt;
&lt;p&gt;Then you can use this property set in other actions, for example the&amp;#160;Build VC6 action:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.finalbuilder.com/blogimages/FinalBuilder4_UsingPropertySetsWithVC6.png" /&gt;&lt;/p&gt;
&lt;p&gt;Notice all the greyed out fields - these will be automatically set using the Property Set “MyVersionInfo“. And you can use this property set in all your other compiler actions, and elsewhere too.&amp;#160; For example you might want to generate a filename based on version numbers - easy, use the &lt;strong&gt;PropertySet to Variable&lt;/strong&gt; action which allows you to combine property set values in any order with other text to create the filename.&lt;/p&gt;
&lt;p&gt;When you're done with the property set you'll probably want to persist it somehow - save to INI, FBD, registry or directly access the items of the property sets like variables and save them using some other means.&lt;/p&gt;
&lt;p&gt;So, there you have it - a very brief overview of PropertySets.&amp;#160; PropertySets really do save a lot of time and it gets rid of heaps of script code all throughout your project, at the same time making it easy to load and persist version information and applying a common set of version information to all the various modules during the build process.&lt;/p&gt;</description></item><item><title>FinalBuilder 4 - more on Async Action Groups</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/401/FinalBuilder-4-more-on-Async-Action-Groups.aspx</link><category>FinalBuilder</category><pubDate>Wed, 19 Oct 2005 01:04:00 GMT</pubDate><description>&lt;p&gt;Tate blogged about &lt;a href="http://blogs.finalbuilder.com/tate/archive/2005/10/04/732.aspx"&gt;Async Action Groups&lt;/a&gt; a few weeks ago, however there is a lot of confusion about how they work amongst the beta testers(something we need to address in the documentation!). I'm going to explain here exactly how they work and discuss some of the limitations inherent in threaded builds. &lt;/p&gt;
&lt;p&gt;Lets take a look at an Action List&amp;nbsp;with an async group :&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.finalbuilder.com/blogimages/FinalBuilder4_AsyncGroups1.png" style="border-width: 1px;border-style: solid;" /&gt; &lt;/p&gt;
&lt;p&gt;In the above example, Action 1, Action 2 and Action 3 will be started simultaneously. Each immediate child action of the Async Group is treated like an action inside their own action lists, and this is in fact how it is implemented. The actions are mapped onto a pseudo action list object and then the pseudo action list object is executed in it's own thread with it's own execution engine. &lt;/p&gt;
&lt;p&gt;If we look at the above list, the general execution order will be something like :&lt;/p&gt;
&lt;p&gt;(in thread 1) Action 1, Action 1.1, Action 1.2, Action 1.2.1&lt;br /&gt;
(in thread 2) Action 2, Action 2.1, Action 2.2, Action 2.2.1&lt;br /&gt;
(in thread 3) Action 3, Action 3.1, Action 3.2, Action 3.2.1&lt;/p&gt;
&lt;p&gt;The actual execution order (ie the real time execution order) would probably be completely different depending on which actions are used and how long they take to execute, however Action 1,2 &amp;amp; 3 will always start at pretty much (give or take a few milliseconds) the same time. &lt;/p&gt;
&lt;p&gt;So now we know how Async Groups are supposed to work, lets mull over some of the implications of using Async Groups and look at some of the limitations. Just like threading in your application code, Async Groups are no silver bullet. Having two or more actions running in parallel will not necessarily translate into reduced build times. Your milage will vary, depending on whether your actions are I/O bound, or CPU bound. Running two cpu bound actions in parallel will probably increase the time they take compared to running them in serial. The same applies to i/o bound actions. So the smart thing to do is run a cpu bound&amp;nbsp;action in parallel with an i/o bound action. Of course, if you are running your builds on multi-cpu machines with very fast hard disks and gigabit Ethernet then these rules go out the window.. and trial and error will prevail. &lt;br /&gt;
&lt;br /&gt;
So what limitations are there with Async? Well,&amp;nbsp;some actions need exclusive access to a resource,&amp;nbsp;&amp;nbsp;for example the&amp;nbsp;Visual Source Safe actions change settings in the ss.ini file before running the source safe command line tool. These settings need to be changed for the command line tool to give us the behavior we require. So what happens if we execute two source safe actions together? The results are unreliable at best. In the current beta (build 31), we don't have anything to prevent this from happening. In the next build we upload, we have implemented a generic resource locking scheme in the execution engine, so that when an action is executed, it can indicate whether it needs a resource lock or not. The source safe actions will now provide this indication, and the net effect is that the source safe actions will be serialized, even if they are running in an async group. This applies only to source safe actions using the same srcsafe.ini file (ie vss database). If another source&amp;nbsp;safe action is using a different&amp;nbsp;database then that action would not require serialization.&amp;nbsp;The same applies to the CD Burner and Create ISO actions. In our tests, we found that&amp;nbsp;the cdburner library we use is not thread safe and so requires locking. In the next few weeks we'll be testing all the actions in &lt;a title="Finalbuilder Website" href="http://www.finalbuilder.com/finalbuilder/" target="_blank"&gt;Finalbuilder&lt;/a&gt; for thread safety and implementing resource locking as required. &lt;/p&gt;
&lt;p&gt;Another limitation is that you cannot use the &amp;ldquo;Run Actionlist&amp;ldquo; and &amp;ldquo;Include FinalBuilder Project&amp;ldquo; actions under an Async group. The reasons for this are complicated. If the same actionlist was executed multiple times, it would require multiple instances of the action list to avoid re-entrance issues, and that brings with it a whole host of other related gotchas. While I do plan to spend some more time investigating enabling these actions under Async Groups, I'm not expecting that this will happen before 4.0 is released. &lt;/p&gt;
&lt;p&gt;When we looked at adding the Async Group action during our planning for FinalBuilder 4, we figured people might potentially achieve&amp;nbsp;10-15% faster builds. So far, the feedback from beta testers has proven that to be the case. In our own builds, we achieved around a 5% boost, on a single cpu VMWare virtual machine. We did try the virtual smp support in VMWare 5.5&amp;nbsp; beta, however it actually resulted in slower builds. We'll try again when VMWare 5.5 is released. &lt;/p&gt;
&lt;p&gt;v.&lt;/p&gt;</description></item><item><title>What's new in FinalBuilder 4 - Persistent Project Variables</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/509/Whats-new-in-FinalBuilder-4-Persistent-Project-.aspx</link><category /><pubDate>Wed, 19 Oct 2005 00:08:00 GMT</pubDate><description>&lt;P&gt;FinalBuilder 4 can now automatically load and store the value of a variable.&amp;nbsp;&amp;nbsp;To enable a variable to be automatically persistent simply flag the variable as persistent in the Edit Variables dialog (see below). Persistent variables are stored in the &lt;project&gt;.fbv file.&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_PersisentVariables.png"&gt; 
&lt;P&gt;In the past this had to be done manually;&amp;nbsp;for example you might read a bunch of variables from a INI file, the registry or an XML file&amp;nbsp;at the beginning of a build, and then write the value back again at the end of a build - so now it's a simple matter of setting the persistent checkbox when creating a variable and it's all done automatically!&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Project Edit Password</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/508/Whats-new-in-FinalBuilder-4-Project-Edit-Passwo.aspx</link><category /><pubDate>Sat, 15 Oct 2005 02:11:00 GMT</pubDate><description>&lt;P&gt;FinalBuilder 4 now allows the owner of the project to set an Edit Password.&amp;nbsp; This password is required for the project to be viewed in design mode and before any changes can be made to the project.&amp;nbsp; When you open a project that&amp;nbsp;has an edit password, it will open on the Build Summary screen - clicking the Design tab will prompt for&amp;nbsp;the password.&amp;nbsp; The project can be run without the Password.&lt;/P&gt;
&lt;P&gt;To set an edit password, choose “Set Edit Password” from the project menu:&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_SetEditPasswordMenu.png"&gt; 
&lt;P&gt;This will bring up the Project Edit Password dialog - type in the password required to edit the project.&amp;nbsp; To set no password for the project, simply leave the new password fields blank.&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_SetEditPassword.png"&gt; 
&lt;P&gt;Now that the project password is set, if you click on the Design tab you get the following prompt:&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_EnterEditPassword.png"&gt; 
&lt;P&gt;One of the limitations with project edit passwords is that the project file must be saved as a compressed project file (.fbz3) - if we stored the password in the xml version of the project file it would be too easy to remove manually!&lt;/P&gt;</description></item><item><title>Calculating Estimated Progress in FinalBuilder 4</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/507/Calculating-Estimated-Progress-in-FinalBuilder-4.aspx</link><category /><pubDate>Thu, 13 Oct 2005 21:41:00 GMT</pubDate><description>&lt;P&gt;FinalBuilder 4 introduces a new feature: &lt;STRONG&gt;Estimated Progress&lt;/STRONG&gt;.&amp;nbsp; It's a progress bar that increments by one every time an action completes while your build runs, and the total is dynamically calculated&amp;nbsp; (see it in context &lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/10/10/739.aspx"&gt;here&lt;/A&gt;).&amp;nbsp; It's the total, and more specifically the calculation of the total that I'm going to shed some light on in this post.&amp;nbsp; But first, here's a quick screenie of what the progress bar looks like during a build:&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_EstimatedProgress.png"&gt; 
&lt;P&gt;Estimated Progress was a bit of a &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;controversial &lt;/SPAN&gt;issue for us.&amp;nbsp; On one hand it'd be great to see how your build is going as a percentage, but on the other, it's something that is almost impossible to predict accurately due to the very dynamic ways people can set up their build process (eg. loops, conditions, case statements, etc).&amp;nbsp; So, we needed a way to predict the total progress somehow.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;When a build first starts, the progress is set to zero and the progress bar total is calculated.&lt;/LI&gt;
&lt;LI&gt;First the log archive is queried to find the last successful build.&amp;nbsp; If there was a last successful build, then the amount of actions that executed in that build is used to set the total (this was a&amp;nbsp;cinch to get a count of the last actions, as the log files are now a relational&amp;nbsp;&lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/10/07/737.aspx"&gt;database&lt;/A&gt;).&lt;/LI&gt;
&lt;LI&gt;If there was no last successful build, then FinalBuilder calculates how many actions are in your build process and uses that as the total.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Now, we realise that the above two methods will not be adequate for some build processes.&amp;nbsp; For example, a build process may have two modes (eg. Full and BugFix).&amp;nbsp; The two different modes may have very different progress totals, and using the last successful build action count method will only work some of the time.&amp;nbsp; Thanks to the beta testers, we've introduced a new script method “SetEstimatedProgressTotal” which takes a single integer parameter which allows the progress total to be set to any value at any time during the build process.&lt;/P&gt;
&lt;P&gt;So, how can you use this?&lt;/P&gt;
&lt;P&gt;Well, lets use the same example above -&amp;nbsp;your build process has Full and BugFix modes.&amp;nbsp; You know (because you've run a Full build enough times) that a Full build will run 469 actions, and that a BugFix build runs only 210 actions.&amp;nbsp; Your build process will have some logic at the start which figures out if a Full build or BugFix build is required, and using that same logic it can call the script function for the full build (in JScript):&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;if (FullBuild){ &lt;BR&gt;&amp;nbsp; SetEstimatedProgressTotal(469) &lt;BR&gt;} else { &lt;BR&gt;&amp;nbsp; SetEstimatedProgressTotal(210) &lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;This gives you complete control over the estimated progress, and it can be set at any time during your build.&amp;nbsp; Of course, you could also use a persistent project variables (ooh, better blog about this soon)&amp;nbsp;to set the total progress... so you can make it as complicated as you want!&amp;nbsp; For the FinalBuilder build process, we rely on the default behaviour as the last successful build is a very good indication for how many actions will execute in the next build.&lt;/P&gt;</description></item><item><title>The Build Master book has shipped.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/506/The-Build-Master-book-has-shipped.aspx</link><category /><pubDate>Wed, 12 Oct 2005 23:58:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/vincem"&gt;Vincent Maraia's (vincem)&lt;/A&gt;&amp;nbsp;book “The Build Master - Microsoft's Software Configuration Management Best Practices” has &lt;A href="http://blogs.msdn.com/vincem/archive/2005/10/08/478525.aspx"&gt;just shipped&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I'm about half way through&amp;nbsp;a draft copy he gave me at PDC this year - so far it's been a very interesting insight into the build practices at &lt;A href="http://www.microsoft.com/"&gt;Microsoft&lt;/A&gt; and other enormous organisations.&amp;nbsp; There's a lot of good ideas in there; it's a &lt;A href="http://www.awprofessional.com/title/0321332059"&gt;worthwhile read&lt;/A&gt; especially if you're in a large organisation.&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Restart build if build fails</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/505/Whats-new-in-FinalBuilder-4-Restart-build-if-bu.aspx</link><category /><pubDate>Wed, 12 Oct 2005 00:15:00 GMT</pubDate><description>&lt;P&gt;This is a great new little feature:&amp;nbsp;if a build fails, you can fix the problem and then continue the build without resetting the log.&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_ContinueBuild.png" border=1&gt; 
&lt;P&gt;The screen pic above shows that a build has just failed, and the Restart build from selected action button becomes enabled.&amp;nbsp; At this point you would normally switch over to the design view, fix whatever needs to be fixed, select the action to restart from and then restart the build.&amp;nbsp; This is &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;particularly &lt;/SPAN&gt;useful if you have a long build process and you don't have time to start from the beginning again, or maybe you have a sequence of actions at the start of the build that you really don't want to rerun (maybe they're incrementing version numbers or something).&amp;nbsp;&amp;nbsp;Don't confuse this with the “Run from here” function - Run from here starts a new log file, resets all the build status and starts the build from the selected action.&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Build Summary</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/504/Whats-new-in-FinalBuilder-4-Build-Summary.aspx</link><category /><pubDate>Mon, 10 Oct 2005 23:45:00 GMT</pubDate><description>&lt;P&gt;For FinalBuilder 4 we wanted to add a new view of the build process as it runs.&amp;nbsp; This new view was designed with the following ideas in mind:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Provide an “at a glance” status of the build (eg. running, completed, error, etc). 
&lt;LI&gt;Provide an estimated progress of current build. 
&lt;LI&gt;Provide action statistics (eg. how many actions completed, in error, skipped, etc). 
&lt;LI&gt;Have a better way of showing &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;multiple &lt;/SPAN&gt;actions running in parallel 
&lt;LI&gt;Have a better way of showing the status of an action while it's running (eg. progress, progress messages etc.)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;To &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;achieve &lt;/SPAN&gt;this, we added a new top level tab for the IDE:&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_BuildSummaryTab.png" border=1&gt; 
&lt;P&gt;The Design tab is where you have to be when you're adding, deleting and editing actions in your build process or when you're debugging the build process&amp;nbsp;- the Build Summary tab is where you &lt;STRONG&gt;can be&lt;/STRONG&gt; when you run the build.&amp;nbsp; There are plenty of options that can be set to decide when this view is automatically switched to, for example you can decide to only switch to this view when a build starts running, or maybe you want to start with this view when you open FinalBuilder.&lt;/P&gt;
&lt;P&gt;This is a screen pic of the Build Summary tab:&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_BuildSummaryRunning.png"&gt; 
&lt;P&gt;So, lets dissect what's going on here.&amp;nbsp; Starting with the left hand side we have:&lt;/P&gt;
&lt;P&gt;1. The Running Man in action - when the build completes you get a big X or a big Tick; easy to see at a glance.&lt;/P&gt;
&lt;P&gt;2. “Build Running” - this text changes depending on the status of the build&lt;/P&gt;
&lt;P&gt;3. The Start Time and Run Time of the build&lt;/P&gt;
&lt;P&gt;4. “Run” and “Stop” buttons -&amp;nbsp;duplicated on this screen for &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;convenience&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;5. Estimated Progress bar.&amp;nbsp; We're 40% through the build.&lt;/P&gt;
&lt;P&gt;6. Action Statistics - an at-a-glance look at how many actions&amp;nbsp;are done, broken up&amp;nbsp;by&amp;nbsp;completed status&lt;/P&gt;
&lt;P&gt;7. Recent actions - this is a list of recent actions that have completed in descending order.&lt;/P&gt;
&lt;P&gt;Quite a bit of information about the build state.&amp;nbsp; A lot of this information is not easily accessible in FinalBuilder 3 and it's certainly easier to see what the build process is up to at a quick glance.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Now for the right hand side.&amp;nbsp; This side shows the current status of the current action list, as well as each action which is currently running (remember, FinalBuilder 4 now supports running &lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/10/04/732.aspx"&gt;multiple actions in parallel&lt;/A&gt;).&amp;nbsp; This screen pic is showing that we're currently on the Main action list, and that two actions are currently running: a Compile Delphi project action and a Compile VS.Net action.&amp;nbsp; The Delphi action is showing that it's 20% complete and that it's up to the “Running Delphi Compiler...” stage.&amp;nbsp; The raw output of the action is not shown by default, but clicking on the “Show action output” will display any live while the action runs.&lt;/P&gt;
&lt;P&gt;There you have it - this is by far the biggest UI change we've done to &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; for a while.&amp;nbsp; The Build Summary tab displays running statistics, the current state of all running actions, as well as an at-a-glance view of the build status.&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Logging to a database</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/503/Whats-new-in-FinalBuilder-4-Logging-to-a-databa.aspx</link><category /><pubDate>Fri, 07 Oct 2005 20:19:00 GMT</pubDate><description>&lt;P&gt;Ready for another installment of what's new?&amp;nbsp; There's plenty more we've got up our sleeve, so keep tuned :)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Logging to a database&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;FinalBuilder versions 1, 2 and 3 record all the log information in memory during a build (this includes when an action starts, finishes, it's status, action lists, errors, output from the tools called, etc - basically everything that FinalBuilder does during a build is logged).&amp;nbsp; When the build ends (in FB1-3) the log information is written out to an xml file and then stored in a &lt;A href="http://www.aidaim.com/single_file_system.htm"&gt;SingleFileSystem&lt;/A&gt; with the previous logs.&lt;/P&gt;
&lt;P&gt;This approach has the following disadvantages:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;There is a memory overhead, as the log information cannot be written out until the end of the build&lt;/LI&gt;
&lt;LI&gt;Writing the log file at the end of the build can take a considerable time for very big builds&lt;/LI&gt;
&lt;LI&gt;The SingleFileSystem used occasionally gets corrupted, and there is no cure except to delete the log file&lt;/LI&gt;
&lt;LI&gt;Searching and/or filtering&amp;nbsp;the log is almost impossible and would be very slow&lt;/LI&gt;
&lt;LI&gt;Supporting &lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/10/04/732.aspx"&gt;running actions in parallel&lt;/A&gt; would be a big job&lt;/LI&gt;
&lt;LI&gt;There is significant overhead dealing with large xml files (eg. loading them up to view in Build Log pane)&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;So, we had to come up with a different approach for FinalBuilder 4 that was extremely fast, very robust and also negated all the disadvantages of the previous FinalBuilder logging architecture.&amp;nbsp; The logging changes also had to be completely transparent to the user - FinalBuilder 4 has to work in exactly the same way and provide at least the same functionality.&amp;nbsp; The solution we came up with was to use an embedded database known for it's high performance and it's feature set - &lt;A href="http://www.nexusdb.com/"&gt;NexusDB&lt;/A&gt;.&amp;nbsp; We initially ran some performance tests to make sure it could cope with the type of abuse FinalBuilder could throw at it, and it passed with flying colours, the big challenge was replacing the current logging architecture with the embedded database.&amp;nbsp; I won't go into gory details, but suffice to say the integration went fairly well mainly due to the decoupled internal architecture of the build engine in FinalBuilder.&lt;/P&gt;
&lt;P&gt;The end result is that FinalBuilder 4 now uses an embedded database to handle all the logging, which is written to disk during&amp;nbsp;the build.&amp;nbsp; The database has very little memory overhead, is able to store and retrieve data very quickly, and will eventually include sorting and filtering of build logs.&amp;nbsp; Also, logging actions&amp;nbsp;run in&amp;nbsp;parallel was a no-brainer, and loading previous builds in the Build Log has been improved for very large builds.&amp;nbsp; I won't post a screen pic of FinalBuilder 4 showing off the new database logging in this case, because the UI has stayed exactly the same, except for an extra button “Pack log file“ which is used to reclaim space in the log database.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Buy FinalBuilder 3 now and get FinalBuilder 4 free when released!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/400/Buy-FinalBuilder-3-now-and-get-FinalBuilder-4-fre.aspx</link><category /><pubDate>Thu, 06 Oct 2005 21:36:00 GMT</pubDate><description>Last week we  announced on our newsgroups that the Free Upgrade period started on Oct 1 2005. This means, that any new purchase of &lt;a title="Finalbuilder Website" href="http://www.finalbuilder.com/finalbuilder/" target="_blank"&gt;Finalbuilder&lt;/a&gt; 3 (Standard or Pro) made on or after Oct 1 2005 will recieve a free upgrade to FinalBuilder 4 when it's released. Note that this applies to New license purchases only, not to upgrades from earlier FinalBuilder versions. We'll announce upgrade pricing closer to the release date (when it's ready!).

Yesterday we sent out an email blast to existing customers to tell them about the FinalBuilder 4 Beta. If you are and existing customer and didn't get the email, it probably means we either do not have your current email address, or your spam filter ate the email. Emaill us (support at finalbuilder dot com) with a subject of FB4 Beta and we'll reply with the beta information. 

We will be opening the beta to non customers in a few weeks. 

v.</description></item><item><title>What's new in FinalBuilder 4 - Text Find Action</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/502/Whats-new-in-FinalBuilder-4-Text-Find-Action.aspx</link><category /><pubDate>Thu, 06 Oct 2005 00:27:00 GMT</pubDate><description>&lt;P&gt;FinalBuilder 4 adds a new action which makes it easier to find text in either a file or a FinalBuilder variable. Some build processes need to search for error strings in files, or maybe certain text from the output of a version control system action.&amp;nbsp; In the past this would be achieved by either using a file iterator with some script, or completely in VBScript/JScript.&amp;nbsp;&amp;nbsp;Our build process uses this method to search for error strings in the output of the help file generator we use.&amp;nbsp; We also answer questions about how to search for a text string quite often, so we know this action is going to get a good workout!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's how we use the new action:&amp;nbsp;&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_TextFindAction.png"&gt; 
&lt;P&gt;The Text Find Action can automatically search for a text string or a regular expression and cause the action to fail if the occurrences is less or more than a predefined amount.&lt;/P&gt;</description></item><item><title>CruiseControl.NET</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/601/CruiseControlNET.aspx</link><category /><pubDate>Wed, 05 Oct 2005 02:46:00 GMT</pubDate><description>&lt;P&gt;I've also been working on a FinalBuilder plugin&amp;nbsp;for the open source continuous integration tool,&amp;nbsp;&lt;A href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;We're still testing the&amp;nbsp;plugin&amp;nbsp;right now, but it will be released&amp;nbsp;in time for FinalBuilder 4.&amp;nbsp;You can add a FinalBuilder project to CruiseControl.NET with just two XML tags!&lt;/P&gt;
&lt;P&gt;If you would like to beta test,&amp;nbsp;please&amp;nbsp;&lt;A href="mailto:support@finalbuilder.com"&gt;let us know&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>CruiseControl.NET</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/627/CruiseControlNET.aspx</link><category /><pubDate>Wed, 05 Oct 2005 02:46:00 GMT</pubDate><description>&lt;P&gt;I've also been working on a FinalBuilder plugin&amp;nbsp;for the open source continuous integration tool,&amp;nbsp;&lt;A href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;We're still testing the&amp;nbsp;plugin&amp;nbsp;right now, but it will be released&amp;nbsp;in time for FinalBuilder 4.&amp;nbsp;You can add a FinalBuilder project to CruiseControl.NET with just two XML tags!&lt;/P&gt;
&lt;P&gt;If you would like to beta test,&amp;nbsp;please&amp;nbsp;&lt;A href="mailto:support@finalbuilder.com"&gt;let us know&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>CruiseControl.NET</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/653/CruiseControlNET.aspx</link><category>FinalBuilder</category><pubDate>Wed, 05 Oct 2005 02:46:00 GMT</pubDate><description>&lt;p&gt;I've also been working on a FinalBuilder plugin&amp;nbsp;for the open source continuous integration tool,&amp;nbsp;&lt;a href="http://ccnet.thoughtworks.com/"&gt;CruiseControl.NET&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We're still testing the&amp;nbsp;plugin&amp;nbsp;right now, but it will be released&amp;nbsp;in time for FinalBuilder 4.&amp;nbsp;You can add a FinalBuilder project to CruiseControl.NET with just two XML tags!&lt;/p&gt;
&lt;p&gt;If you would like to beta test,&amp;nbsp;please&amp;nbsp;&lt;a href="mailto:support@finalbuilder.com"&gt;let us know&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>New XML Actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/600/New-XML-Actions.aspx</link><category /><pubDate>Wed, 05 Oct 2005 02:32:00 GMT</pubDate><description>&lt;P&gt;I'm now into my fourth month here at VSoft, so it must be about time for a first blog post!&lt;/P&gt;
&lt;P&gt;I've been working on all kinds of new actions for FinalBuilder 4. I think lots of you who requested features will be very happy with the upcoming release (and everyone else should find something useful, too.)&lt;/P&gt;
&lt;P&gt;Today I just wanted to demonstrate two new XML actions : the XML Iterator&amp;nbsp;and the XML Read from Variable Action. Combined with the already strong XML support in FinalBuilder, you can work with data from almost any XML file. Allow me to demonstrate:&lt;/P&gt;
&lt;P&gt;Here's the project:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_project.gif"&gt;&lt;/IMG&gt;&lt;/P&gt;
&lt;P&gt;The XML file I'm iterating is a 3Mb chunk of the &lt;A href="http://jv.wikipedia.org/"&gt;Javanese edition of the Wikipedia&lt;/A&gt;, exported as XML. I'm going to catalogue all the users who made edits, and record their usernames as well as any comments they recorded. I don't want to record revisions by the automatic MediaWiki bots.&lt;/P&gt;
&lt;P&gt;So, I iterate through the XPath /mediawiki/page/revision, saving the absolute XPath in to each revision in the 'Page' FinalBuilder variable:&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_xmliterator.gif"&gt;&lt;/P&gt;
&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once I have the absolute XPath to&amp;nbsp;each node, I can&amp;nbsp;read the 'Comment' and 'Contributor' tags into FinalBuilder variables. Here's the action which reads 'Comment':&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_readxmlvalue.gif"&gt;&lt;/P&gt;
&lt;P&gt;The 'Comment' tag is optional, so I use a Try... Catch block to blank out the comment if there isn't one.&lt;/P&gt;
&lt;P&gt;Together with a 'Write Text File', these&amp;nbsp;actions are&amp;nbsp;all you need to create a list of contributors and their comments.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;This sort of technique can be used to parse any kind of XML file&amp;nbsp;as part of&amp;nbsp;your build process. If you need to, you can even create an XML file which gives instructions to your build process. But &lt;A href="http://nant.sourceforge.net/"&gt;who'd want to do that&lt;/A&gt;?&lt;/P&gt;</description></item><item><title>New XML Actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/626/New-XML-Actions.aspx</link><category /><pubDate>Wed, 05 Oct 2005 02:32:00 GMT</pubDate><description>&lt;P&gt;I'm now into my fourth month here at VSoft, so it must be about time for a first blog post!&lt;/P&gt;
&lt;P&gt;I've been working on all kinds of new actions for FinalBuilder 4. I think lots of you who requested features will be very happy with the upcoming release (and everyone else should find something useful, too.)&lt;/P&gt;
&lt;P&gt;Today I just wanted to demonstrate two new XML actions : the XML Iterator&amp;nbsp;and the XML Read from Variable Action. Combined with the already strong XML support in FinalBuilder, you can work with data from almost any XML file. Allow me to demonstrate:&lt;/P&gt;
&lt;P&gt;Here's the project:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_project.gif"&gt;&lt;/IMG&gt;&lt;/P&gt;
&lt;P&gt;The XML file I'm iterating is a 3Mb chunk of the &lt;A href="http://jv.wikipedia.org/"&gt;Javanese edition of the Wikipedia&lt;/A&gt;, exported as XML. I'm going to catalogue all the users who made edits, and record their usernames as well as any comments they recorded. I don't want to record revisions by the automatic MediaWiki bots.&lt;/P&gt;
&lt;P&gt;So, I iterate through the XPath /mediawiki/page/revision, saving the absolute XPath in to each revision in the 'Page' FinalBuilder variable:&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_xmliterator.gif"&gt;&lt;/P&gt;
&lt;P align=center&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once I have the absolute XPath to&amp;nbsp;each node, I can&amp;nbsp;read the 'Comment' and 'Contributor' tags into FinalBuilder variables. Here's the action which reads 'Comment':&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_readxmlvalue.gif"&gt;&lt;/P&gt;
&lt;P&gt;The 'Comment' tag is optional, so I use a Try... Catch block to blank out the comment if there isn't one.&lt;/P&gt;
&lt;P&gt;Together with a 'Write Text File', these&amp;nbsp;actions are&amp;nbsp;all you need to create a list of contributors and their comments.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;This sort of technique can be used to parse any kind of XML file&amp;nbsp;as part of&amp;nbsp;your build process. If you need to, you can even create an XML file which gives instructions to your build process. But &lt;A href="http://nant.sourceforge.net/"&gt;who'd want to do that&lt;/A&gt;?&lt;/P&gt;</description></item><item><title>New XML Actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/652/New-XML-Actions.aspx</link><category>FinalBuilder</category><pubDate>Wed, 05 Oct 2005 02:32:00 GMT</pubDate><description>&lt;p&gt;I'm now into my fourth month here at VSoft, so it must be about time for a first blog post!&lt;/p&gt;
&lt;p&gt;I've been working on all kinds of new actions for FinalBuilder 4. I think lots of you who requested features will be very happy with the upcoming release (and everyone else should find something useful, too.)&lt;/p&gt;
&lt;p&gt;Today I just wanted to demonstrate two new XML actions : the XML Iterator&amp;nbsp;and the XML Read from Variable Action. Combined with the already strong XML support in FinalBuilder, you can work with data from almost any XML file. Allow me to demonstrate:&lt;/p&gt;
&lt;p&gt;Here's the project:&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_project.gif" /&gt;&lt;/p&gt;
&lt;p&gt;The XML file I'm iterating is a 3Mb chunk of the &lt;a href="http://jv.wikipedia.org/"&gt;Javanese edition of the Wikipedia&lt;/a&gt;, exported as XML. I'm going to catalogue all the users who made edits, and record their usernames as well as any comments they recorded. I don't want to record revisions by the automatic MediaWiki bots.&lt;/p&gt;
&lt;p&gt;So, I iterate through the XPath /mediawiki/page/revision, saving the absolute XPath in to each revision in the 'Page' FinalBuilder variable:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_xmliterator.gif" /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Once I have the absolute XPath to&amp;nbsp;each node, I can&amp;nbsp;read the 'Comment' and 'Contributor' tags into FinalBuilder variables. Here's the action which reads 'Comment':&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img alt="" src="http://www.finalbuilder.com/blogimages/FB4_XMLIterator_readxmlvalue.gif" /&gt;&lt;/p&gt;
&lt;p&gt;The 'Comment' tag is optional, so I use a Try... Catch block to blank out the comment if there isn't one.&lt;/p&gt;
&lt;p&gt;Together with a 'Write Text File', these&amp;nbsp;actions are&amp;nbsp;all you need to create a list of contributors and their comments.&lt;/p&gt;
&lt;p &gt;This sort of technique can be used to parse any kind of XML file&amp;nbsp;as part of&amp;nbsp;your build process. If you need to, you can even create an XML file which gives instructions to your build process. But &lt;a href="http://nant.sourceforge.net/"&gt;who'd want to do that&lt;/a&gt;?&lt;/p&gt;</description></item><item><title>What's new in FinalBuilder 4 - Async action group</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/501/Whats-new-in-FinalBuilder-4-Async-action-group.aspx</link><category /><pubDate>Tue, 04 Oct 2005 21:45:00 GMT</pubDate><description>&lt;P&gt;This is one of the best new features in &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; 4, and here is the action that represents it:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_AsyncActionGroup.png" border=1&gt;&lt;/P&gt;
&lt;P&gt;I know it doesn't look like much, but it represents a significant new way of structuring your build process which can result in huge time savings when you run your build.&lt;/P&gt;
&lt;P&gt;Here's how it works - &lt;STRONG&gt;every&amp;nbsp;immediate child action of the action group is run in it's own thread and started simultaneously.&lt;/STRONG&gt;&amp;nbsp; The next sibling of the Async Action Group waits until all it's children complete processing before the next action runs (equivalent to a sync point).&lt;/P&gt;
&lt;P&gt;This is a flow diagram of the process:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_AsyncActionFlow.png" border=1&gt;&lt;/P&gt;
&lt;P&gt;And here is the FinalBuilder representation of this flow diagram:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_AsyncActionGroupInFB.png" border=1&gt;&lt;/P&gt;
&lt;P&gt;Of course, the “Do Something“, Task A, B, C, and “Do something else” can be any actions in your build process.&amp;nbsp; This new action makes it very easy for you to execute certain actions in your build process in parallel.&amp;nbsp; Don't be deceived by it's simplicity - the ASync Action Group is extremely powerful.&amp;nbsp; For example, it is possible to nest ASync Action Groups inside other ASync Action Groups; it's also possible to represent any combination of sync points and parallel execution using this single action.&lt;/P&gt;
&lt;P&gt;The benefit of the ASync Action Group is that you can run &lt;A href="http://www.answers.com/io%20bound"&gt;IO bound&lt;/A&gt; actions in parallel with &lt;A href="http://www.answers.com/cpu%20bound"&gt;CPU bound&lt;/A&gt; actions, which should result in significant overall time savings in your build process.&amp;nbsp; Also, if you have a &lt;A href="http://www.intel.com/technology/computing/dual-core/"&gt;dual&lt;/A&gt; &lt;A href="http://multicore.amd.com/en/"&gt;core&lt;/A&gt; machine or multi-CPU machine, then FinalBuilder can take advantage of the other CPUs to run multiple actions simultaneously which can result in a dramatic performance improvement of your build process.&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Project Global Script</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/500/Whats-new-in-FinalBuilder-4-Project-Global-Scri.aspx</link><category /><pubDate>Fri, 30 Sep 2005 21:16:00 GMT</pubDate><description>&lt;P&gt;This is one of those features we'd planned to do for ages, and customers kept asking us to make script code reuse easier (if FB3 you can include an external script file, but this is less than ideal).&amp;nbsp; FinalBuilder 4 now allows you to have global VBScript and JScript stored in your project file and the script code is available to all actions in the project.&lt;/P&gt;
&lt;P&gt;For example, define some global VBScript (access this dialog from the Project menu):&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_ProjectGlobalScript.png"&gt; &lt;/P&gt;
&lt;P&gt;This dialog supports syntax highlighting, code completion, parameter hints and also will display subs, functions, constants, etc in the right hand side section to make it easy to see an overview of your code at a glance as well as easy navigation within the script (double-click an item and it scrolls the code to the right spot).&lt;/P&gt;
&lt;P&gt;And then you can use the script as you would a normal function, sub, etc. &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_UsingProjectGlobalScript.png" border=1&gt;&lt;/P&gt;
&lt;P&gt;(also of note in the above screen shot is that the Run Status tab has been removed and a new Action Information tab...)&lt;/P&gt;</description></item><item><title>What's new in FinalBuilder 4 - Automatic Action Retry</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/499/Whats-new-in-FinalBuilder-4-Automatic-Action-Re.aspx</link><category /><pubDate>Thu, 29 Sep 2005 20:38:00 GMT</pubDate><description>&lt;P&gt;Yesterday we &lt;A href="http://www.finalbuilder.com/finalbuilder/FB4Beta.html"&gt;announced FinalBuilder 4&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I'll be trying to blog about a new feature in FB4 every day or so... this is the first in the series :)&lt;/P&gt;&lt;STRONG&gt;What's new in FinalBuilder 4 - Automatic Action Retry&lt;/STRONG&gt; 
&lt;P&gt;FinalBuilder 4 now includes the option to allow actions to retry automatically if they fail.&amp;nbsp; A maximum retry limit can be set as well as the wait time between retries.&amp;nbsp; This can be useful if a particular action has a tendency to fail but might succeed if it is re-run.&amp;nbsp; An example of this might be a network resource failing the first time, but the second time the network resource might be available.&amp;nbsp; The retry option is available for every action in FinalBuilder 4.&lt;/P&gt;
&lt;P&gt;Here is a screen pic of the property dialog showing the new retry options:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/FinalBuilder4_ActionRetry.png"&gt;&lt;/P&gt;
&lt;P&gt;Obviously, after the 3rd retry and the action still fails, then it will stop retrying and fail the action as per usual.&amp;nbsp; If a retry is successful, then the build continues on as the action does finally report success.&lt;/P&gt;</description></item><item><title>FinalBuilder 4 coming soon...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/498/FinalBuilder-4-coming-soon.aspx</link><category /><pubDate>Thu, 29 Sep 2005 01:22:00 GMT</pubDate><description>&lt;P&gt;Yes, it's true, &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; 4 is about to go into beta testing, with a scheduled release near the end of November 2005.&lt;/P&gt;
&lt;P&gt;I've been pretty quiet on the blog scene lately, mainly because all of the things I wanted to blog about were cool new FinalBuilder 4 features, but we didn't want to announce FB4 too early (for lots of reasons).&amp;nbsp; So, now I'm free to tell you about the cool new stuff in FB4 - hopefully I'll cover something new every day or every second day.&amp;nbsp; Also, &lt;A href="http://msdn.microsoft.com/events/pdc/"&gt;PDC05&lt;/A&gt; and &lt;A href="http://www.microsoft.com/australia/events/teched2005/default.aspx"&gt;Tech.Ed&lt;/A&gt; were pretty busy for us... when you don't have a dedicated marketing &amp; sales team everything is up to the developers...&lt;/P&gt;
&lt;P&gt;Initially all our existing customers will receive an email for the FB4 beta download (in the next few days), and once we're happy with the stability we'll open it up to the general public.&amp;nbsp; TeamFB members have already had FB4 for a few days and it's looking pretty solid already.&amp;nbsp; There have been some &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;mammoth &lt;/SPAN&gt;changes to the core, so this is pretty &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;encouraging &lt;/SPAN&gt;:)&lt;/P&gt;
&lt;P&gt;One thing we weren't planning on spending much time on during the development of FB4 was ActionStudio (AS), but we have recently been using AS a lot ourselves as heaps of the new actions are written with AS (ie. &lt;A href="http://en.wikipedia.org/wiki/Eat_one's_own_dog_food"&gt;dogfooding&lt;/A&gt;...).&amp;nbsp; I'm pleased to say that AS is now even easier to use, supports some cool new features such as common property pages, global script, common images control; and we've fixed up lots of minor usability issues and bugs.&lt;/P&gt;
&lt;P&gt;Anyway, gotta update the website now... stay tuned for more FB4 new stuff.&lt;/P&gt;</description></item><item><title>Microsoft PDC05</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/497/Microsoft-PDC05.aspx</link><category /><pubDate>Mon, 19 Sep 2005 21:46:00 GMT</pubDate><description>&lt;P&gt;Wow, it's been a hectic couple of weeks.&amp;nbsp; First was Tech.Ed in Australia, then a week back at the office, and then last week we were exhibiting at the &lt;A href="http://msdn.microsoft.com/events/pdc/"&gt;Microsoft PDC05&lt;/A&gt; in LA.&amp;nbsp; It was a massive event - apparently almost 8,000 developers were there.&amp;nbsp; Bill Gates opened the keynote and throughout the conference there were literally hundreds of Microsoft employees everywhere you looked.&amp;nbsp; We got a lot out of the conference: meeting existing customers,&amp;nbsp;demoing FinalBuilder to&amp;nbsp;potential customers, and networking with other vendors and Microsoft employees (and, of course, the special event at Universal Studios).&lt;/P&gt;
&lt;P&gt;And a big thankyou to &lt;A href="http://www.hoogendoorn.nl/hoogengroup_eng/groepalgeng.html"&gt;Raoul Molenkamp&lt;/A&gt; who helped us out at the booth!&lt;/P&gt;</description></item><item><title>We're at Tech.Ed at the Gold Coast</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/496/Were-at-TechEd-at-the-Gold-Coast.aspx</link><category /><pubDate>Wed, 31 Aug 2005 19:43:00 GMT</pubDate><description>&lt;P&gt;We're exhibiting at Microsoft Tech.Ed at the Gold Coast, Queensland, Australia this week.&amp;nbsp; So if you're up here for the show, stop by our booth and say hello! :)&lt;/P&gt;
&lt;P&gt;Tech.Ed Australia is much bigger this year (which is a great thing for an exhibitor) - it feels two or three times bigger than last year in terms of how many delegates are attending.&lt;/P&gt;
&lt;P&gt;We have a new set of marketing material including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;New Logo&lt;/LI&gt;
&lt;LI&gt;New Colours&lt;/LI&gt;
&lt;LI&gt;New Brochures&lt;/LI&gt;
&lt;LI&gt;New Banners&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;So... keep your eye on the website, as we'll be updating it with the new logo and colours soon.&lt;/P&gt;</description></item><item><title>JediVCS - you asked for it...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/495/JediVCS-you-asked-for-it.aspx</link><category /><pubDate>Mon, 15 Aug 2005 21:40:00 GMT</pubDate><description>&lt;P&gt;A big thankyou goes out to Mathias Burbach of &lt;A href="http://maranatha-consulting.com/index.html"&gt;Maranatha Consulting&lt;/A&gt; for developing the FinalBuilder integration for &lt;A href="http://jedivcs.sourceforge.net"&gt;JediVCS&lt;/A&gt;!&lt;/P&gt;
&lt;P&gt;The actions are currently in Beta testing - please contact me at&amp;nbsp;“tate @ finalbuilder dot com”&amp;nbsp;if you would like to help test them.&lt;/P&gt;
&lt;P&gt;Here is the list of actions:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Synchronize Project&lt;/LI&gt;
&lt;LI&gt;Label Project&lt;/LI&gt;
&lt;LI&gt;Check Out&lt;/LI&gt;
&lt;LI&gt;Undo Check Out&lt;/LI&gt;
&lt;LI&gt;Check In&lt;/LI&gt;
&lt;LI&gt;List Projects&lt;/LI&gt;
&lt;LI&gt;List Project Modules&lt;/LI&gt;
&lt;LI&gt;List Locks&lt;/LI&gt;
&lt;LI&gt;Synchronise Project for Label&lt;/LI&gt;&lt;/UL&gt;</description></item><item><title>PDC and Tech.Ed</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/494/PDC-and-TechEd.aspx</link><category /><pubDate>Tue, 02 Aug 2005 21:52:00 GMT</pubDate><description>&lt;p&gt;Just put some info up on our webpage for upcoming events - we'll be exhibiting at &lt;a href="http://www.microsoft.com/australia/events/teched2005/"&gt;Tech.Ed Australia&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/events/pdc/"&gt;PDC&lt;/a&gt; in LA this year.&amp;#160; And thanks to &lt;a href="http://codebetter.com/blogs/brendan.tompkins/archive/2005/07/07/128917.aspx"&gt;Brendan Tompkins&lt;/a&gt; for the cool PDC image :)&lt;/p&gt;</description></item><item><title>ClearCase integration for FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/493/ClearCase-integration-for-FinalBuilder.aspx</link><category /><pubDate>Wed, 27 Jul 2005 00:44:00 GMT</pubDate><description>&lt;P&gt;Check it out (pun intended...):&lt;/P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/finalbuilder_clearcase.png"&gt; 
&lt;P&gt;&lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; now has very comprehensive integration for &lt;A href="http://www-306.ibm.com/software/awdtools/clearcase/"&gt;IBM/Rational ClearCase&lt;/A&gt;.&amp;nbsp; The actions support both ClearCase Base and UCM to do anything you'll need to do in an automated build process!&amp;nbsp; And if there happens to be some particular ClearCase operation which isn't covered, you can use the “ClearCase Run Cleartool (Generic)” action which allows you to specify the exact command line parameters to use with cleartool.&lt;/P&gt;
&lt;P&gt;So, this really starts to &lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/05/18/701.aspx"&gt;round out&lt;/A&gt; the support for version control systems in FinalBuilder.&amp;nbsp; Currently in development is integration with &lt;A href="http://lab.msdn.microsoft.com/teamsystem/default.aspx"&gt;Microsoft TeamSystem&lt;/A&gt; and &lt;A href="http://jedivcs.sourceforge.net/"&gt;JediVCS&lt;/A&gt; (hang in there if you're waiting for this!)&lt;/P&gt;</description></item><item><title>We've moved!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/492/Weve-moved.aspx</link><category /><pubDate>Sat, 16 Jul 2005 00:19:00 GMT</pubDate><description>&lt;P&gt;The &lt;A href="http://www.sourcegear.com/"&gt;SourceGear&lt;/A&gt; guys are &lt;A href="http://software.ericsink.com/entries/lease_signed.html"&gt;just about to move&lt;/A&gt;, but we beat them to it :)&lt;/P&gt;
&lt;P&gt;We finished moving into the new office yesterday -&amp;nbsp;today we're getting stuck into some &lt;A href="http://www.finalbuilder.com/"&gt;real work&lt;/A&gt;.&amp;nbsp; The new office is a lot bigger; actually I think it's about 4 or 5 times bigger!&amp;nbsp; The company is expanding and we need to fit the extra people in somewhere.&amp;nbsp; There's even space for a big round table for meetings and eating our lunch at.&lt;/P&gt;
&lt;P&gt;We've even got a server room now (wow!).&amp;nbsp; We've wired the whole place up with CAT6, got a big switch and patch panel to make all the connections a breeze.&amp;nbsp; The last thing we're waiting for is the phone system - next week sometime hopefully :)&lt;/P&gt;</description></item><item><title>Interesting User Interface idea</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/399/Interesting-User-Interface-idea.aspx</link><category /><pubDate>Sun, 10 Jul 2005 22:27:00 GMT</pubDate><description>&lt;P&gt;I was just surfing looking for some user interface inspiration (trying to get away from modal dialogs!) and came across this interesting site : &lt;A href="http://www.dontclick.it/"&gt;http://www.dontclick.it/&lt;/A&gt;&amp;nbsp;- see how long you can go without clicking! &lt;/P&gt;
&lt;P&gt;v.&lt;/P&gt;</description></item><item><title>Another interesting article</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/491/Another-interesting-article.aspx</link><category /><pubDate>Mon, 04 Jul 2005 21:58:00 GMT</pubDate><description>&lt;P&gt;hmm... I didn't realise that the “&lt;!--StartFragment --&gt;&lt;FONT class=post&gt;&lt;A href="http://blogs.finalbuilder.com/tate/archive/2005/07/04/716.aspx"&gt;The Importance of Building Earnestly&lt;/A&gt;“ article was published in Feb this year, so it's sortof old news - but a good read nontheless.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;And here's another article by the same guys:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.cmcrossroads.com/ubbthreads/showflat.php?Number=43071"&gt;Building for success&lt;/A&gt;&amp;nbsp;&lt;FONT class=post&gt;by Brad Appleton, Robert Cowham and Steve Berczuk&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;“&lt;FONT class=post&gt;Since builds are so fundamental to the development of software, it is vital that they be done well“&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>The Importance of Building Earnestly</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/490/The-Importance-of-Building-Earnestly.aspx</link><category /><pubDate>Mon, 04 Jul 2005 21:45:00 GMT</pubDate><description>&lt;P&gt;Quite an interesting article on CM Crossroads titled:&amp;nbsp;&lt;!--StartFragment --&gt; &lt;B&gt;&lt;FONT size=3&gt;&lt;SPAN id=subject0&gt;&lt;A href="http://www.cmcrossroads.com/ubbthreads/showflat.php?Number=39804"&gt;The Importance of Building Earnestly&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;“&lt;!--StartFragment --&gt; &lt;FONT class=post&gt;The Build is an essential link in the development process. Improving this link will make your life easier, whatever your role is. Take small steps towards making your process better and your work will be more enjoyable. Even if your build process seems to work, consider how you might improve it further, perhaps keeping in mind the words of Laurie Anderson: “Paradise is exactly like where you are right now, only much, much better.” [Anderson]”&lt;/FONT&gt;&lt;/P&gt;</description></item><item><title>PDC 2005-  if you haven't booked a hotel already... start looking!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/398/PDC-2005-if-you-havent-booked-a-hotel-already-s.aspx</link><category /><pubDate>Fri, 24 Jun 2005 03:54:00 GMT</pubDate><description>&lt;P&gt;I&amp;nbsp;just spent the last hour or so searching for a hotel near the Los Angeles Convention Center. Turns out just about everything anywhere nearby is totally booked out for PDC. I'm not too fussy about hotels(well, within reason), we'll be kinda busy and I&amp;nbsp;really just need somewhere to sleep. But I do require high speed internet access, either wifi or wired, preferably in my room.&amp;nbsp;I use Skype a lot when I travel, saves a fortune on phone calls. I booked at&amp;nbsp;the &lt;A href="http://book.bestwestern.com/bestwestern/productInfo.do?propertyCode=05341"&gt;Best Western Dragon Gate Inn&lt;/A&gt; (about 2 miles/3km from the convention center), it was the&amp;nbsp;closest we could find that had rooms and that says it has highspeed internet access.&amp;nbsp;It's&amp;nbsp;Wifi but I guess thats better than&amp;nbsp;nothing. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Oh, and when you are looking at hotels and distances to the convention center, &lt;A href="http://maps.google.com/"&gt;Google Maps&lt;/A&gt; is your friend! It's “The best thing since sliced bread!”&lt;SUP&gt;TM&lt;/SUP&gt;&lt;/P&gt;
&lt;P&gt;I'm going to keep trying to find something&amp;nbsp;closer but it's not looking good at the moment. So if you are&amp;nbsp;going to PDC and haven't booked a hotel, and you want to be reasonably close&amp;nbsp;then&amp;nbsp;start looking.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;v.&lt;/P&gt;</description></item><item><title>Hiring and Interview Questions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/489/Hiring-and-Interview-Questions.aspx</link><category /><pubDate>Thu, 23 Jun 2005 21:58:00 GMT</pubDate><description>&lt;P&gt;*phew*&lt;/P&gt;
&lt;P&gt;We've just finished interviewing for the &lt;A href="http://www.finalbuilder.com/jobs/juniordeveloper.html"&gt;Junior Programmer position&lt;/A&gt; at VSoft Technologies.&amp;nbsp; The position was geared towards a current university student in their final year, or a recent graduate and they will be working on the future development of &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;We advertised the job on &lt;A href="http://www.seek.com.au/"&gt;SEEK&lt;/A&gt; - we have had quite a lot of responses and the advertising experience was quite good, I think we'll use SEEK again.&amp;nbsp; But the &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;disappointing&lt;/SPAN&gt; thing has been the quality of the applicants.&amp;nbsp; &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Unfortunately&lt;/SPAN&gt; we've had to automatically exclude all candidates from interstate (or overseas), as it's just too hard and too risky for us to bring people to &lt;A href="http://www.canberratourism.com.au/"&gt;Canberra&lt;/A&gt;.&amp;nbsp; Also, Canberra has a fairly small population - so finding talented people is always going to be challenging.&amp;nbsp; There are two universities in Canberra - the &lt;A href="http://www.anu.edu.au/"&gt;Australian National University&lt;/A&gt; (ANU)&amp;nbsp;and the &lt;A href="http://www.canberra.edu.au/"&gt;University of Canberra&lt;/A&gt; (UC).&amp;nbsp; Both offer B.E. in software and UC also offers Bachelor of Information Technology and a few other IT related qualifications.&amp;nbsp; There are also other learning institutions here too, the &lt;A href="http://www.cit.act.edu.au/"&gt;Canberra Institute of Technology&lt;/A&gt; springs to mind.... there's probably others too.&lt;/P&gt;
&lt;P&gt;So, we decided to interview seven people - one person got another job before we interviewed them, so we ended up with six... a pretty good number actually.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;The interview questions.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Everyone seems to go fairly well with verbal questions - eg. what experience have you had, what is your favourite programming language, etc.&amp;nbsp; What really sorts the men-from-the-boys are the little &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;practicals&lt;/SPAN&gt; we gave the candidates:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Read some code&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We gave the candidate a print out of a very simple routine.&amp;nbsp; I'm not going to tell you what it is, but suffice to say it was only about&amp;nbsp;five lines long.&amp;nbsp; We specifically chose some &lt;A href="http://www.borland.com/us/products/delphi/index.html"&gt;Delphi&lt;/A&gt; code as we wanted to assess the skills of the candidate to be able to read code in a different programming language than they were used to.&amp;nbsp; The results were a little &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;surprising&lt;/SPAN&gt; (if not disturbing)... &lt;A href="http://blogs.finalbuilder.com/vincent/"&gt;Vincent&lt;/A&gt; and I started thinking that maybe the routine was a bit difficult (maybe it should only be 2 lines long?!?!).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. Write some code&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We gave the candidates a very simple class diagram.&amp;nbsp; It contained two classes, one derived from the other and a couple of methods and attributes.&amp;nbsp; We asked them to write the code based on the class diagram in Notepad.&amp;nbsp; This was&amp;nbsp;a good question, actually a very good question :)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. Customer &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;liaison&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We deal with a lot of customers.&amp;nbsp; We have newsgroups as well as handling support and pre-sales issues via email.&amp;nbsp; We need to know how someone would handle this task - we gave the candidates a real email which we received from a customer and asked them to write their response.&amp;nbsp; This question was generally handled fairly well as we were able to judge their liaison skills, politeness, and just how they handle this type of thing in general.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. Research skills&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The candidates were asked some questions that they wouldn't know the answer to, and they had to use a web browser to find the answers.&amp;nbsp; I think we'll probably refine the research question a little next time we interview, but it was&amp;nbsp;certainly a good question to ask.&amp;nbsp; Some &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;candidates &lt;/SPAN&gt;took a minute or two, others were asked to stop after about 10 minutes.&amp;nbsp; At least with the people who took longer I was able to read a few pages of &lt;A href="http://www.amazon.com/exec/obidos/ASIN/0060517123/ref=pd_sxp_f/102-6762497-1141748"&gt;Crossing the Chasm&lt;/A&gt;&amp;nbsp;- so the time was not wasted :)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5. Using FinalBuilder&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This test was designed to assess the both the candidates' problem solving skills, as well as assess whether they had downloaded FinalBuilder in their own time to study the product before the interview.&amp;nbsp; It also allowed us to do a bit of usability testing - we watched as the&amp;nbsp;candidates' followed a list of instructions to create a very simple build&amp;nbsp;process in FinalBuilder&amp;nbsp;:)&amp;nbsp; It was very interesting, to say the least.&amp;nbsp; A side effect was that we were also able to assess the candidates ability to follow instructions - this was a good question indeed.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The result.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;There was one candidate who generally&amp;nbsp;stood out above the rest - we have asked him to join the FinalBuilder development team, and he is starting tomorrow.&amp;nbsp; Keep an eye out for his blog.&amp;nbsp; Of the other candidates, there were two who were very high on the list.&amp;nbsp; We wish all the candidates who applied for this job success for their future.&lt;/P&gt;
&lt;P&gt;Some closing notes.&lt;/P&gt;
&lt;P&gt;Some candidates took the time to read our website before they arrived for the interview.&amp;nbsp; Some even had downloaded FinalBuilder and had a play with it.&amp;nbsp; This does count for a lot in our books - why someone wouldn't spend a little time finding out about the company they might be working for is a little &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;surprising&lt;/SPAN&gt;.&amp;nbsp; Also, the technical skills of the &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-AU; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;candidates &lt;/SPAN&gt;did seem a little lacking - we do understand that the job is for a Junior developer, but a good understanding of basic OO principles and the ability to write simple code shouldn't be too much to ask for, is it?&lt;/P&gt;</description></item><item><title>Come &amp;amp; see us at PDC'05</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/397/Come-amp-see-us-at-PDC05.aspx</link><category /><pubDate>Thu, 16 Jun 2005 21:00:00 GMT</pubDate><description>&lt;P&gt;We'll be exhibiting at&amp;nbsp;Microsoft PDC'05&amp;nbsp;- September 13, 2005 - September 16, 2005&amp;nbsp;at the Los Angeles Convention Center, California. This will be our first visit to PDC, we've exhibited at Tech Ed in Australia before but never at such a huge conference like PDC (apparently around 5000 developers are expected). &lt;/P&gt;
&lt;P&gt;The last PDC was in 2003, and I recall lots of people missing out because it was sold out, so if you are planning on going this year, make sure you &lt;A href="http://msdn.microsoft.com/events/pdc/registration/default.aspx"&gt;register&lt;/A&gt; before July 15 (to get the early bird discount). &lt;/P&gt;
&lt;P&gt;See&amp;nbsp;ya there!&lt;/P&gt;</description></item><item><title>Junior Developer</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/488/Junior-Developer.aspx</link><category /><pubDate>Thu, 16 Jun 2005 02:16:00 GMT</pubDate><description>&lt;P&gt;We're looking for another person to join the &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; team...&lt;/P&gt;
&lt;P&gt;Job description is &lt;A href="http://www.finalbuilder.com/jobs/juniordeveloper.html"&gt;here&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>A job posting that lists FinalBuilder as a desired aptitude</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/487/A-job-posting-that-lists-FinalBuilder-as-a-desire.aspx</link><category /><pubDate>Mon, 06 Jun 2005 23:52:00 GMT</pubDate><description>&lt;P&gt;This is interesting... Voxco, on their &lt;A href="http://www.voxco.com/en/careers.html"&gt;careers&lt;/A&gt; page,&amp;nbsp;are currently looking for an&amp;nbsp;&lt;!--StartFragment --&gt; &lt;A href="http://www.voxco.com/en/PDF/offre_Programmer_analyst_andsoftdepl_EN.pdf" target=_blank&gt;Programmer Analyst : Specialist in software rollout (Montreal)&lt;/A&gt; and they list &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; as a desired aptitude.&amp;nbsp; So, if you're a FinalBuilder user looking to move to Canada, this just might be your chance :)&lt;/P&gt;</description></item><item><title>Dilbert does FinalBuilder :)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/486/Dilbert-does-FinalBuilder-.aspx</link><category /><pubDate>Mon, 30 May 2005 22:35:00 GMT</pubDate><description>&lt;P&gt;This is very cool.... &lt;A href="http://www.dilbert.com"&gt;Dilbert&lt;/A&gt; discovers &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; :) &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.dilbert.com/comics/dilbert/archive/images/dilbert2005052209279.jpg"&gt;&lt;/P&gt;</description></item><item><title>List of bug tracking software</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/485/List-of-bug-tracking-software.aspx</link><category /><pubDate>Sat, 28 May 2005 06:03:00 GMT</pubDate><description>&lt;A href="http://weblogs.asp.net/fmarguerie/"&gt;Fabrice&lt;/A&gt; has compiled a nice list of &lt;A href="http://weblogs.asp.net/fmarguerie/articles/408858.aspx"&gt;bug tracking software&lt;/A&gt;.&amp;nbsp; We have recently started using &lt;A href="http://www.fogcreek.com/FogBugz/"&gt;FogBugz&lt;/A&gt; here for &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt;, and it really works well.&amp;nbsp; Probably the best feature is that it acts as an email client for our support system.</description></item><item><title>The sound of my own voice!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/484/The-sound-of-my-own-voice.aspx</link><category /><pubDate>Sat, 28 May 2005 04:15:00 GMT</pubDate><description>&lt;P&gt;This was not in my job description.... recording my voice... it's horrible listening to yourself speak!&lt;/P&gt;
&lt;P&gt;Today we've created an “Introduction to FinalBuilder” video with &lt;A href="http://www.techsmith.com"&gt;Camtasia Studio&lt;/A&gt;.&amp;nbsp; It's the first in a series of videos we're creating to help people get started using the product.&amp;nbsp; This first video creates a very simple project and runs it.&amp;nbsp; The other movies we've got planned will cover more advanced topics like Action Lists, Variables, ActionStudio, etc.&lt;/P&gt;
&lt;P&gt;So, you wanna listen to my voice? The movie is &lt;A href="http://www.finalbuilder.com/finalbuilder/movies/introduction/CreatingASimpleBuildWithFinalBuilder.html"&gt;here&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>Version Control Systems</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/483/Version-Control-Systems.aspx</link><category /><pubDate>Thu, 19 May 2005 01:01:00 GMT</pubDate><description>&lt;P&gt;In our recent &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; customer survey, one question we asked was “What Version Control System do you currently use, or plan to use in the next 12 months”.&amp;nbsp; The question allowed mulitple answers, so the bars aren't a percentage.&amp;nbsp; I've removed the actual numbers because the relative widths of the bars is what is important.&lt;/P&gt;
&lt;P&gt;So, here are the results:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/Version_Control_Systems_FinalBuilder.png"&gt;&lt;/P&gt;
&lt;P&gt;So, interesting results, eh?&amp;nbsp; Obviously Microsoft Team System is high on the agenda for us, and looks like a lot of people will be taking a serious look at the new verison control system.&lt;/P&gt;
&lt;P&gt;We'd expect the Subversion bar to continue to grow at a very high rate - last year when we ran a similar survey only 3% of people were using Subversion. SourceGear Vault has also grown a lot, Vault was down the bottom last year, and this year it's really moved up the rankings to just behind CVS.&amp;nbsp; Most of the other VCS's have been pretty steady.&lt;/P&gt;
&lt;P&gt;Comments welcome.&lt;/P&gt;</description></item><item><title>Make your build process Famous!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/482/Make-your-build-process-Famous.aspx</link><category /><pubDate>Tue, 17 May 2005 21:46:00 GMT</pubDate><description>&lt;p&gt;Would you like part of your build process to be famous?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/a&gt; advertises in the &lt;a href="http://msdn.microsoft.com/msdnmag/"&gt;MSDN magazine&lt;/a&gt; which has a readership of over 70,000 people.&lt;/p&gt;
&lt;p&gt;Every month we create a new "mini build" which appears in the advertisment.&amp;#160; Our past ads are here: http://www.finalbuilder.com/finalbuilder/advertising.html&lt;/p&gt;
&lt;p&gt;So - send us your mini-build and the August edition of MSDN can feature your build process!&amp;#160; Vincent and I will choose the most interesting set of FinalBuilder actions to include on the ad.&lt;/p&gt;
&lt;p&gt;The conditions are:&lt;br /&gt;
1.&amp;#160; 15 to 20 actions (we must be able to fit it in the available space)&lt;br /&gt;
2.&amp;#160; Any actions are allowed, including custom actions&lt;br /&gt;
3.&amp;#160; Submissions must be a .fbz3 or .fbp3 file&lt;br /&gt;
4.&amp;#160; Email all submissions to tate at finalbuilder.com&lt;br /&gt;
5.&amp;#160; Dealine: 1 June 2005&lt;br /&gt;
6.&amp;#160; Judges decision is Final :)&lt;/p&gt;
&lt;p&gt;Good luck!&lt;/p&gt;</description></item><item><title>Wow... gotta be happy with that!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/481/Wow-gotta-be-happy-with-that.aspx</link><category /><pubDate>Sat, 14 May 2005 04:20:00 GMT</pubDate><description>&lt;P&gt;Here's the result of one of the questions in the recent &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; customer survey we ran.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/blogimages/finalbuilder_rating.png"&gt;&lt;/P&gt;
&lt;P&gt;Need I say more??? Yeah... while I'm at it here are some of the comments that people left:&lt;/P&gt;
&lt;P&gt;“Friends don't let friends build with anything else.“&amp;nbsp; (this is my favourite one...)&lt;/P&gt;
&lt;P&gt;“I think FinalBuilder is an excellent product and it has revolutionised the way I handle builds. Congratulations on a superb product!“&lt;/P&gt;
&lt;P&gt;“Well done to the developers, FB saves me a great deal of time &amp; ensures that builds are done consistently every time.”&lt;/P&gt;
&lt;P&gt;“FB team has spoiled us. I find I now get frustrated at other vendors when they don't respond in such timely fashion as your goodselves. Keep up the good work!“&lt;/P&gt;
&lt;P&gt;“A brilliant product which I use simply because it saves me hours of time and makes it easy to use as a backup tool as well. As a one person business my time is everything. Well done.“&lt;/P&gt;
&lt;P&gt;“This is fantastic software, you can tell the developers really believe in their product. I cannot rate it high enough, well done.“&lt;/P&gt;
&lt;P&gt;“Great system! Keep up the good work!”&lt;/P&gt;
&lt;P&gt;“FB has helped us very much to organize and optimize the build process. Now, everyone can build, even if the "build master" is out of office!”&lt;/P&gt;
&lt;P&gt;“FinalBuilder is great.”&lt;/P&gt;
&lt;P&gt;“I love your product. Thank you.”&lt;/P&gt;
&lt;P&gt;“We rely on FinalBuilder pretty heavily - it's a great product. Keep up the good work!”&lt;/P&gt;
&lt;P&gt;“Awesome interface and tons of functionality. Great tool”&lt;/P&gt;
&lt;P&gt;“Great product, great price. It has saved me many hours.“&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;And that's just the tip of the iceberg :)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>FinalBuilder Customer Survey</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/480/FinalBuilder-Customer-Survey.aspx</link><category /><pubDate>Wed, 11 May 2005 20:05:00 GMT</pubDate><description>&lt;P&gt;We're currently conducting a survey of existing &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; customers.&amp;nbsp; If you have not received a direct email with a link to the survey and would like to participate then&amp;nbsp;please email me directly.&lt;/P&gt;
&lt;P&gt;The preliminary results are very interesting, and it's going to have a very real infulence on the further direction of FinalBuilder.&lt;/P&gt;
&lt;P&gt;We'll be blogging about particular results in the coming weeks, so keep tuned.&lt;/P&gt;
&lt;P&gt;Thanks to all who have responded already!&lt;/P&gt;</description></item><item><title>Ada for .Net</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/479/Ada-for-Net.aspx</link><category /><pubDate>Fri, 06 May 2005 19:41:00 GMT</pubDate><description>&lt;P&gt;Well, this is mildly interesting.... there is now &lt;A href="http://www.usafa.af.mil/df/dfcs/bios/mcc_html/a_sharp.cfm"&gt;Ada for .Net&lt;/A&gt;, and they're calling&amp;nbsp;it A#&lt;/P&gt;
&lt;P&gt;Ada was the first programming language I learnt - that was back in 1993 at the &lt;A href="http://www.canberra.edu.au"&gt;University of Canberra&lt;/A&gt;.&amp;nbsp; Ada does have some very interesting and cool features, but can be a bit verbose... and I seem to remember the compiler error messages were sometimes a bit too cryptic!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>FinalBuilder integrates with Perforce better</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/478/FinalBuilder-integrates-with-Perforce-better.aspx</link><category /><pubDate>Thu, 05 May 2005 18:55:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; has had&amp;nbsp;pretty basic &lt;A href="http://www.perforce.com/"&gt;Perforce&lt;/A&gt;&amp;nbsp;integration for quite a long time.&amp;nbsp; But since we offer excellent integration with &lt;A href="http://msdn.microsoft.com/ssafe/"&gt;Visual SourceSafe&lt;/A&gt;, &lt;A href="http://www.qsc.co.uk/"&gt;Team Coherence&lt;/A&gt;, &lt;A href="http://www.gnu.org/software/cvs/"&gt;CVS&lt;/A&gt;, &lt;A href="http://subversion.tigris.org/"&gt;Subversion&lt;/A&gt;, &lt;A href="http://www.seapine.com/"&gt;Surround SCM&lt;/A&gt;, &lt;A href="http://www.sourcegear.com/"&gt;Vault&lt;/A&gt;, &lt;A href="http://www.qumasoft.com/"&gt;QVCS&lt;/A&gt;, and &lt;A href="http://www.borland.com/starteam/"&gt;StarTeam&lt;/A&gt;, we thought it was about time to upgrade the Perforce support. (Oh, and&amp;nbsp;&lt;!--StartFragment --&gt; &lt;A href="http://www.componentsoftware.com/"&gt;ComponentSoftware RCS&lt;/A&gt; is supported using the plugin written by&amp;nbsp;Martin Rothschink, which is available &lt;A href="http://www.finalbuilder.com/finalbuilder/customactions.html"&gt;here&lt;/A&gt;.)&lt;/P&gt;
&lt;P&gt;So, here's a nice screen pic of the upgraded Perforce integration:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/images/Perforce_in_FinalBuilder.png"&gt;&lt;/P&gt;
&lt;P&gt;The actions are still being tweaked and documented, but will be available very soon.&lt;/P&gt;</description></item><item><title>Fun and games with HTML email</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/477/Fun-and-games-with-HTML-email.aspx</link><category /><pubDate>Tue, 03 May 2005 21:39:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt; has been able to send HTML emails for some time, but it's not as flexible as some users required.&amp;nbsp; We've recently added the ability to specify a separate “Plain Body” to the “HTML Body”.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Unfortunately we've encounted a few problems - mainly the way that different email clients handle the HTML and Plain Text parts, especially in conjunction with an attachment.&amp;nbsp; To add to that, some email clients don't even display, or allow display of the text part of an HTML email (eg. &lt;A href="http://www.pocomail.com/"&gt;PocoMail&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;Anyway, some R&amp;D was required to figure out how all the different parts fit together to form a email message which can be correctly read by the majortity of email clients.&amp;nbsp; Here what I ended up with:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;Plain Body only&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&gt; ContentType = ''&lt;BR&gt;Plain Body + Attachment&amp;nbsp;-&gt; ContentType = 'multipart/mixed'&lt;BR&gt;HTML Body only&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&gt; ContentType = ''&lt;BR&gt;HTML Body + Attachment&amp;nbsp;&amp;nbsp;-&gt; ContentType = 'multipart/mixed'&lt;BR&gt;Plain Body + HTML Body&amp;nbsp;&amp;nbsp;-&gt; ContentType = 'multipart/alternative'&lt;BR&gt;Plain, HTML, Attachment&amp;nbsp;-&gt; Part1 = 'multipart/mixed' (consists of Part2 and Attachments)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Part2 = 'multipart/alternative' (consists of Plain and HTML parts)&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Hmmm... doesn't look too complicated when it's layed out nicely like that, does it?&amp;nbsp; The problems was finding a nice readable guide on how to get the correct ContentTypes.&amp;nbsp; Unfortunately the &lt;A href="http://www.indyproject.org/"&gt;Indy &lt;/A&gt;documentation didn't help much at all, and the example email client in Indy didn't deal with HTML email.&amp;nbsp; This is the best article I found which did help quite a lot: &lt;A href="http://bdn.borland.com/article/0,1410,32075,00.html"&gt;http://bdn.borland.com/article/0,1410,32075,00.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;So, at the end of all this, the HTML email support in FinalBuilder is now more compatible and better featured than before.&lt;/P&gt;</description></item><item><title>FinalBuilder 3 &amp;amp; Visual Studio 2005 Beta 2</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/396/FinalBuilder-3-amp-Visual-Studio-2005-Beta-2.aspx</link><category /><pubDate>Fri, 22 Apr 2005 03:04:00 GMT</pubDate><description>&lt;FONT face=Arial size=2&gt;
&lt;P align=left&gt;I spent the last few days playing with VS 2005, testing the VS.NET support in &lt;a title="Finalbuilder Website" href="http://www.finalbuilder.com/finalbuilder/" target="_blank"&gt;Finalbuilder&lt;/a&gt; 3. If you are trying to build VS2005 Beta 2 projects with the current build of FinalBuilder you will run into problems which are due to the changes between Beta 1 &amp; 2. Since we've only just got our hands on the beta (like every one else), it's going to take us a while to get to grips with it, understand how it works under the hood and figure out what we need to do. We've made a start, and the information below is based on a preliminary review of Beta 2.&lt;/P&gt;
&lt;P align=left&gt;&lt;/P&gt;
&lt;P align=left&gt;The good news is you can still use the current build of FinalBuilder with VS 2005 Beta 2 but it needs some gentle persuasion. &lt;/P&gt;
&lt;P align=left&gt;&lt;/P&gt;
&lt;P align=left&gt;The "Build VS.NET Solution" action works (I only tested .net apps, not C++), however it doesn't parse the available configs correctly as the solution file format has changed slightly. Configs in the solution file look something like this : "Debug|.NET" - just select the config you want then trim of the |.NET part and it should build fine. Updating Assembly info works, but not for ASP.NET 2.0 projects. ASP.NET seems to have the most changes, and we'll need some time to understand how they fit together and what we can do with them. To precompile ASP.NET 2.0 applications, use the MSBuild action and use the solution file as the project file (interesting that msbuild knows about solution files even though it's not part of vs). Compiling an asp.net application in VS2005 seems to be just a syntax check from what I can see, no binaries are produced. &lt;/P&gt;
&lt;P align=left&gt;&lt;/P&gt;
&lt;P align=left&gt;The "C#/VB.NET/J# Project Compiler" actions will not work at all with VS2005 Beta 2 Projects. The reason for this is that the project file formats (csproj,vbproj,vjsproj) have changed and are not at all backwards compatible. The good news is the files are really just msbuild files, and you can build them quite easily with the MSBuild Action. &lt;/P&gt;
&lt;P align=left&gt;&lt;/P&gt;
&lt;P align=left&gt;While it's early days still, and Microsoft may still make further changes to file formats, where they live etc (although I hope they don't!), we plan on getting the VS2005 Beta 2 support done asap. The "Build VS.NET Solution" action needs some tweaking. For asp.net 2.0 projects, we'll be creating a new action for pre-compiling them. We will also be creating new actions that are the equivalent of the "C#/VB.NET/J# Project Compiler" actions, they will leverage the work we have already done on the MSBuild action. &lt;/P&gt;
&lt;P align=left&gt;&lt;/P&gt;
&lt;P&gt;Stay Tuned!&lt;/P&gt;&lt;/FONT&gt;</description></item><item><title>XenoCode and FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/476/XenoCode-and-FinalBuilder.aspx</link><category /><pubDate>Thu, 21 Apr 2005 21:19:00 GMT</pubDate><description>&lt;p&gt;&lt;a href="http://community.xenocode.com/blogs/kenjioba/archive/2005/04/12/140.aspx"&gt;Kenji Obata&lt;/a&gt; from &lt;a href="http://www.xenocode.com"&gt;XenoCode&lt;/a&gt; has just moved his build process to &lt;a href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/a&gt; -&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“In just a few hours, I had the entire Xenocode build process running under FB.&amp;#160; The IDE and scripting model is extremely intuitive and easy-to-learn (it earned a perfect score on my key usability measure, number of queries required into the manual -- zero).“&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At the time FB only supported XenoCode 2004, but FB3.1 now supports XenoCode 2005 as well.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;</description></item><item><title>Dealing with email... and growing pains</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/395/Dealing-with-email-and-growing-pains.aspx</link><category /><pubDate>Wed, 20 Apr 2005 22:45:00 GMT</pubDate><description>&lt;P&gt;One of the&amp;nbsp;difficult issues we face as&amp;nbsp;a small isv, is managing growth. The fact is we are growing and our customer base is expanding, which is great. But it does have it's down side. Back when we were a one man band (ie, me!), all support and sales emails naturally came into my inbox. That was fine, there wasn't too much email and it rarely took me more than an hour&amp;nbsp;each morning to deal with it. Trouble is, as our customer base has grown, and as &lt;a title="Finalbuilder Website" href="http://www.finalbuilder.com/finalbuilder/" target="_blank"&gt;Finalbuilder&lt;/a&gt; has become more widely known, so has the volume of email we recieve (and the amount of spam). A few weeks back it got to where I found myself spending most&amp;nbsp;of the day dealing with email, and considering I'm still the lead developer and architect for FinalBuilder, that's far from an ideal situation. &lt;/P&gt;
&lt;P&gt;Enter &lt;A href="http://www.fogcreek.com/FogBugz/"&gt;Fogbugz&lt;/A&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I started looking around for a system that had a customer facing page, ie somewhere people could fill in a support request etc. I was already aware with FogBugz since we've had some dealing's with the FogCreek people in the past (they use FinalBuilder), but&amp;nbsp; it had been a while since I had looked at it. Fogbugz 4 was released earlier this&amp;nbsp;year, and one of the features that piqued my&amp;nbsp;interest was it's&amp;nbsp;email abilities. Lot's of bug tracking systems can send emails, but not many can recieve emails, filter them, categorise them and also filter out spam. We spent 2 days evaluating the product. I have&amp;nbsp;a “rule”&amp;nbsp; that the amount of time spent evaluating software should be proportional to the cost of the product. If it's less than &lt;$100 then why spend weeks. With some products, the only way to evaluate is to use. Now it's all good &amp; well to enter a few bug's, mess with assigning bugs to people etc, but it doesn't really tell you what it's going to be like in a real world situation. So we bought a few licenses (US$99 per user)&amp;nbsp;and put it to work.&lt;/P&gt;
&lt;P&gt;We've been using it for a few weeks now, and I am totally sold. The&amp;nbsp;&lt;!--StartFragment --&gt; Bayesian filtering in FogBugz takes a while to get up to speed (the more emails it recieves the quicker it learns), but it's incredibly accurate, filtering out spam and categorising emails into sales,&amp;nbsp;bug reports etc. The&amp;nbsp;result is that I'm spending less time&amp;nbsp;each&amp;nbsp;day either replying to email or forwarding it to someone else to deal with, and I get to see what&amp;nbsp;discussion has taken place with a customer (so if I do deal with them I'm up to speed in minutes)&amp;nbsp;without others having to cc me on everything. &amp;nbsp;&lt;/P&gt;
&lt;P&gt;We're working on automating and formalising processes so that when we&amp;nbsp;hire staff, they are able to get up to speed and contribute within hours, not weeks. Now I'm not saying FogBugz is for everyone, in fact with larger companies I suspect it would fall short in areas such as workflow (other products do have customisable workflow), but for small to medium sized companies it fits very nicely. &lt;/P&gt;
&lt;P&gt;It's not often that I get excited by a product, but FogBugz is helping us deal with the growing pains we are experiencing at the moment and making a big difference to my working day. &lt;/P&gt;
&lt;P&gt;.v&lt;/P&gt;</description></item><item><title>FinalBuilder 3.1 out</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/475/FinalBuilder-31-out.aspx</link><category /><pubDate>Sat, 16 Apr 2005 06:09:00 GMT</pubDate><description>&lt;P&gt;FinalBuilder 3.1 is out, major features include:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Integration for &lt;A href="http://www.seapine.com"&gt;Seapine Surround SCM&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;FinalBuilder console application - run FB from the command line without the GUI&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;More info &lt;A href="http://www.finalbuilder.com/finalbuilder/FB3.1.html"&gt;here&lt;/A&gt;&lt;/P&gt;</description></item><item><title>New server makes the build go fast.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/474/New-server-makes-the-build-go-fast.aspx</link><category /><pubDate>Thu, 14 Apr 2005 02:40:00 GMT</pubDate><description>&lt;P&gt;We've finally got our new server up-and-running, YAY!&lt;/P&gt;
&lt;P&gt;Hardware specs:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Dual Xeon 2.8Ghz with EMT64&lt;/LI&gt;
&lt;LI&gt;Areca PCI-X Raid Controller with 4x120GB SATA disks in RAID5&lt;/LI&gt;
&lt;LI&gt;2GB RAM&lt;/LI&gt;
&lt;LI&gt;Nice black case...and other bits and pieces&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The main thing is that our builds for FinalBuilder (using &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder &lt;/A&gt;of course) runs soooo much quicker. The build server is a Virtual Machine (using &lt;A href="http://www.vmware.com"&gt;VMWare 5&lt;/A&gt;) so moving it to the new server was very easy.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#800080&gt;The build time of FinalBuilder has gone from about 25mins on the old server, to about 9mins on the new server!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Pretty awsome speedup.... and our version control system is on the new server too, and it's also shown a major improvement in speed :)&lt;/P&gt;</description></item><item><title>Office Re-org</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/473/Office-Re-org.aspx</link><category /><pubDate>Wed, 06 Apr 2005 02:17:00 GMT</pubDate><description>&lt;P&gt;We've spend most of today re-organising the office. The office isn't too big, and we're getting ready to expand (ie. more developers) and so need to squeeze more desks in. The desks are the easy bit... it's the cabling that can drive sane people up the wall :) &lt;/P&gt;
&lt;P&gt;A&amp;nbsp;new server is arriving tomorrow which will run our version control system, build VM, and our other virtual machines (we need a quite a few since we support so many 3rd party tools). The hardware is going to be a dual-Xeon with 2GB RAM... so will be a big improvement!&lt;/P&gt;</description></item><item><title>FinalBuilder free for MVPs</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/472/FinalBuilder-free-for-MVPs.aspx</link><category /><pubDate>Wed, 23 Mar 2005 03:56:00 GMT</pubDate><description>&lt;P&gt;Wow! This is exciting news....! &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; 3 Professional is now available for free for current MVP (Microsoft Valued Professionals).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;More info &lt;A href="http://www.finalbuilder.com/pr/FreeForMVP.html"&gt;here&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>Roy Osherove praises FB3 :)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/471/Roy-Osherove-praises-FB3-.aspx</link><category /><pubDate>Tue, 15 Mar 2005 18:35:00 GMT</pubDate><description>&lt;P&gt;&lt;!--StartFragment --&gt;&amp;nbsp;Roy Osherove (of &lt;A href="http://weblogs.asp.net/rosherove/"&gt;ISerializable&lt;/A&gt;) praises &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder &lt;/A&gt;3 on his &lt;A href="http://weblogs.asp.net/rosherove/archive/2005/03/12/394337.aspx"&gt;blog&lt;/A&gt;...&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;“One of the coolest things about it is that you can also add your own custom tasks to&amp;nbsp;[FinalBuilder] - using .NET. they integrate fully into the "IDE" and that means you can pretty much do anything you like. That's why, while I like them as a concept, I don't use tools such as Nant or MSBuild today - the configuration is not as easy and seamless as it should be. To me that's one of the most important things - if you can't manage the build process easily you're wasting a lot of time and effort needlessly.”&lt;/EM&gt;&lt;/P&gt;</description></item><item><title>Mike Gunderloy reviews FinalBuilder 3</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/470/Mike-Gunderloy-reviews-FinalBuilder-3.aspx</link><category /><pubDate>Thu, 03 Mar 2005 00:09:00 GMT</pubDate><description>&lt;P&gt;The review is at: &lt;A href="http://www.larkware.com/Reviews/FinalBuilder3.html"&gt;http://www.larkware.com/Reviews/FinalBuilder3.html&lt;/A&gt;&lt;/P&gt;</description></item><item><title>FinalBuilder will probably never have this "feature" of ANT</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/469/FinalBuilder-will-probably-never-have-this-featur.aspx</link><category /><pubDate>Thu, 03 Mar 2005 00:02:00 GMT</pubDate><description>&lt;P&gt;Hmmm, someones certainly has too much time on their hands, they've written a &lt;A href="http://jonaquino.blogspot.com/2005/02/first-video-game-written-in-ant.html"&gt;video game in ANT&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; does now have a console mode... but, hey, I think we'll put our efforts into supporting more 3rd party tools instead&amp;nbsp;:)&lt;/P&gt;</description></item><item><title>Resize Firefox search bar</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/468/Resize-Firefox-search-bar.aspx</link><category /><pubDate>Mon, 28 Feb 2005 23:24:00 GMT</pubDate><description>I've always wanted to resize the search bar in &lt;A href="http://www.mozilla.org/products/firefox/"&gt;Firefox&lt;/A&gt;.&amp;nbsp; By default it's a bit small and I didn't want to waste any more space by having the google toolbar - finally found out how to do it via &lt;A href="http://codebetter.com/blogs/darrell.norton/archive/2005/02/21/51271.aspx"&gt;Darrell Norton's blog&lt;/A&gt;.</description></item><item><title>Nice (mini) review of FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/467/Nice-mini-review-of-FinalBuilder.aspx</link><category /><pubDate>Mon, 28 Feb 2005 03:03:00 GMT</pubDate><description>
Check out what Tim Heuer &lt;a href="http://timheuer.com/blog/archive/2005/02/23/1688.aspx"&gt;has to say&lt;/a&gt; about FinalBuilder.</description></item><item><title>Agile Development Process</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/466/Agile-Development-Process.aspx</link><category /><pubDate>Wed, 23 Feb 2005 00:12:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://blogs.consultantsguild.com/index.php/jlawlor/index.php/jlawlor"&gt;Jake Lawlor&lt;/A&gt; mentions on his &lt;A href="http://blogs.consultantsguild.com/index.php/jlawlor/index.php/jlawlor/2005/02/12/portrait_of_an_agile_development_process"&gt;blog&lt;/A&gt; a whole bunch of Agile patterns and practices to choose from when crafting your development processes. &lt;/P&gt;
&lt;P&gt;"F. Establishing an Automated Build, Test, Source Control, Stage and Deploy Process &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;EM&gt;Automated builds refer to the automation of the many tedious steps involved in building the application components, managing source control, running unit tests and packaging and deploying the application components to the development, test and production environments. This traditionally can be an entire job description all by itself. By automating this process we eliminate a lot of manual work and potential errors due to human error. Our automated build additionally applies a source control label and creates a new versioned directory to a network location containing all files that will be applied for whatever environment is being deployed to (development, test or production). This staging directory provides for a natural rollback code base in addition to an easy location for future reference or trouble shooting!"&lt;/EM&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So, sounds like pretty good advice! Of course &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; would be the best tool to use :) &lt;/P&gt;</description></item><item><title>Where am I?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/465/Where-am-I.aspx</link><category /><pubDate>Thu, 10 Feb 2005 09:32:00 GMT</pubDate><description>&lt;P&gt;Check out the &lt;A href="http://www.csthota.com/blogmap/"&gt;BlogMap&lt;/A&gt;!&amp;nbsp; Interesting idea, wish I could zoom my map out a bit so it doesn't look like I live in the middle of no-where!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.csthota.com/blogmap" alt="BlogMap"&gt;&lt;IMG style="BORDER-RIGHT: black 1px dashed; BORDER-TOP: black 1px dashed; BORDER-LEFT: black 1px dashed; BORDER-BOTTOM: black 1px dashed" alt=http://www.csthota.com/blogmap/ src="http://www.csthota.com/blogmap/blogapi.ashx?method=blogmap&amp;feed=http://blogs.finalbuilder.com/tate/Rss.aspx&amp;height=250&amp;width=150&amp;label=Tate Needham"&gt;&lt;/A&gt;&lt;/P&gt;</description></item><item><title>What's been going on?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/464/Whats-been-going-on.aspx</link><category /><pubDate>Tue, 08 Feb 2005 01:45:00 GMT</pubDate><description>&lt;P&gt;Well, Vincent and I have been very quiet for the last month-and-a-half (on our blogs at least...) &lt;/P&gt;
&lt;P&gt;Appart from the xmas break, we've been polishing and polishing and polishing &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder &lt;/A&gt;3. It's been feature complete for quite some time now and it's certainly shaping up to be the most stable release yet! The major holdup for the release of FB3 is not FB3 itself, but the reimplementation of the backend customer systems. With the amount of customers who have bought FB1, FB2 Developer (with or without Software Assurance) and FB3 Enterprise (with or without Software Assurance) there are quite a few permutations of possible upgrades to FB3 Std (with or without Software Assurance) or FB3 Pro (with or without Software Assurance). &lt;/P&gt;
&lt;P&gt;Also, there was a requirement to fully automate the order system as well as provide a better means for customers to view and download their keys. So, the new backend system deals with upgrades of existing customers automatically as well as a much better way for us to handle orders. T&lt;/P&gt;
&lt;P&gt;here has also been some company changes... as you may have noticed FinalBuilder is no longer part of &lt;A href="http://www.atozed.com"&gt;AtoZed Software&lt;/A&gt;. I won't go into the reasons etc, but we still have a very close relationship with AtoZed Software and we're still friends with the guys over there too :) &lt;/P&gt;</description></item><item><title>FinalBuilder 3 Release Date update</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/463/FinalBuilder-3-Release-Date-update.aspx</link><category /><pubDate>Wed, 22 Dec 2004 03:35:00 GMT</pubDate><description>&lt;P&gt;Ok, things have been very quiet from me lately (well, at least on this blog). &lt;/P&gt;
&lt;P&gt;We have just undergone some company restructuring (more on this later), and the timing for releasing a new product is not ideal. &lt;/P&gt;
&lt;P&gt;From Vincent's post on the public &lt;A href="news://news.finalbuilder.com"&gt;FB newsgroups&lt;/A&gt;: &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;"We had planned to ship &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; 3 a few weeks ago, but sadly our intended shipdate has come &amp; gone. While the beta is very stable (and can be installed alongside FB2 BTW) we have not yet finished the documentation and are still fixing a few minor bugs. With the holiday season approaching we have decided to delay the release of FB3 until mid January 2005."&lt;/EM&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;But, we have decided to make FB3 beta public :) YAY!&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;So, please &lt;A href="http://downloads.atozedsoftware.com/finalbuilder/beta/300/FB300_56.exe"&gt;download&lt;/A&gt;, test it all you want, and let us know what you think!&lt;/P&gt;</description></item><item><title>Why are spam filters so dumb?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/394/Why-are-spam-filters-so-dumb.aspx</link><category /><pubDate>Fri, 03 Dec 2004 09:19:00 GMT</pubDate><description>&lt;P&gt;I just sent out an email blast to &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; users with info on the latest Finalbuilder 3 beta. In the email&amp;nbsp;I included a few lines of sample vbscript &amp; javascript to illustrate a new feature in the code completion in FinalBuilder 3. The response was amazing, I have a ton of replies from spam &amp; virus &amp;nbsp;filters telling me my email contained a worm/virus/or some other disease or was spam and was blocked. &lt;BR&gt;&lt;BR&gt;Now excuse me for being so dumb.. but this was a plain text message, how the hell can that be deemed a worm or virus.. are email clients really that stupid that they just execute anything that looks like script? Am I missing something here? Oh, and these mail server based spam &amp; virus filters were all well know and high priced products (I looked up a few).. I wonder if these people know how much email they are missing as a result of bad logic/over zealousness. &lt;/P&gt;
&lt;P&gt;Oh, if you didn't get the email and you should have... you know where to look first before contacting me :)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Installers...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/462/Installers.aspx</link><category /><pubDate>Thu, 02 Dec 2004 19:49:00 GMT</pubDate><description>&lt;P&gt;Well, we've added more installer to &lt;A href="http://www.atozed.com/finalbuilder"&gt;FinalBuilder&lt;/A&gt; 3:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/fb/installbuilders.png"&gt;&lt;/P&gt;
&lt;P&gt;Hopefully whatever you use we've got it covered :)&lt;/P&gt;
&lt;P&gt;The new ones added for FB3 are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.installaware.com"&gt;InstallAware&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://www.nullsoft.com/free/nsis/"&gt;Nullsoft Installer (NSIS)&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://www.installanywhere.com"&gt;InstallAnywhere Enterprise&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://www.installanywhere.com/products_ianet.shtml"&gt;InstallAnywhere .Net&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>FinalBuilder on .NET Rocks!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/393/FinalBuilder-on-NET-Rocks.aspx</link><category /><pubDate>Thu, 02 Dec 2004 07:45:00 GMT</pubDate><description>&lt;P&gt;Billy Hollis had some good things to say about &lt;a title="FinalBuilder" href="http://www.finalbuilder.com/finalbuilder/" target="_blank"&gt;FinalBuilder&lt;/a&gt; on the Nov 29 .NET Rocks show. (at 1hr 13:30). &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.franklins.net/fnetdotnetrocks/dotnetrocks.aspx?showid=92"&gt;http://www.franklins.net/fnetdotnetrocks/dotnetrocks.aspx?showid=92&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Vault 3.0 support in FinalBuilder 3.0</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/461/Vault-30-support-in-FinalBuilder-30.aspx</link><category /><pubDate>Wed, 01 Dec 2004 21:21:00 GMT</pubDate><description>&lt;P&gt;Just beefed up the &lt;A href="http://www.sourcegear.com/vault/index.html"&gt;Vault&lt;/A&gt; support in &lt;A href="http://www.atozedsoftware.com/finalbuilder"&gt;FinalBuilder&lt;/A&gt; 3.0.&lt;/P&gt;
&lt;P&gt;FB3&amp;nbsp;adds support the Diff command and GetDiffLabel commands from Vault 3.0 to the already fairly comprehensive coverage of &lt;A href="http://www.sourcegear.com/"&gt;SourceGear&lt;/A&gt; Vault.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/fb/vaultinfb3.png"&gt;&lt;/P&gt;</description></item><item><title>Variables enhancements in FB3</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/460/Variables-enhancements-in-FB3.aspx</link><category /><pubDate>Wed, 01 Dec 2004 19:33:00 GMT</pubDate><description>&lt;P&gt;We've made a lot of cool changes in &lt;A href="http://www.aotzedsoftware.com/finalbuilder"&gt;FinalBuilder&lt;/A&gt; 3 with variables.&lt;/P&gt;
&lt;P&gt;This particular enhancement makes it easier to edit expressions in the action properties dialog.&lt;/P&gt;
&lt;P&gt;When you're editing any field in the action properties dialog, you can press Ctrl-Space to display a hint of what the expression evaluates to.&amp;nbsp; Also, when you type “%“ the hint shows automatically.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/fb/ctrlspace_good.png"&gt; &lt;/P&gt;
&lt;P&gt;This next screen pic shows what happens if the expression is invalid:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/fb/ctrlspace_error.png"&gt;&lt;/P&gt;
&lt;P&gt;And hitting F3 allows you to add a new FB variable without closing the action properties dialog :)&lt;IMG src="http://www.t8software.com/images/fb/addnewvar.png"&gt;&lt;/P&gt;</description></item><item><title>The Delphi Magazine reviews FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/459/The-Delphi-Magazine-reviews-FinalBuilder.aspx</link><category /><pubDate>Sun, 28 Nov 2004 22:25:00 GMT</pubDate><description>&lt;P&gt;Coming up in the &lt;A href="http://www.thedelphimagazine.com/nextis.php"&gt;January 2005 (Issue 113)&lt;/A&gt; of &lt;A href="http://www.thedelphimagazine.com/index.php"&gt;The Delphi Magazine&lt;/A&gt; - &lt;A href="http://www.craigmurphy.com/"&gt;Craig Murphy&lt;/A&gt; reviews Automated Build Studio (from AutomatedQA) and &lt;A href="http://www.atozedsoftware.com/finalbuilder"&gt;FinalBuilder&lt;/A&gt; (from AToZed Software): &lt;STRONG&gt;which is the best tool to help you make your software builds as painless as possible&lt;/STRONG&gt;?&lt;/P&gt;
&lt;P&gt;This one will be worth a read :)&lt;/P&gt;</description></item><item><title>FB makes it into the list of cool Tools Every .Net Developer should be aware of</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/458/FB-makes-it-into-the-list-of-cool-Tools-Every-Net.aspx</link><category /><pubDate>Sat, 27 Nov 2004 18:22:00 GMT</pubDate><description>&lt;A href="http://weblogs.asp.net/rosherove/"&gt;Roy Osherove&lt;/A&gt; has demo'ed a list of “&lt;A href="http://weblogs.asp.net/rosherove/archive/2004/11/26/270637.aspx"&gt;Cool Tools Every .Net Developer should be aware of&lt;/A&gt;” at the .Net Deep Dive event; &lt;A href="http://www.finalbuilder.com/finalbuilder"&gt;FinalBuilder&lt;/A&gt; is listed, very cool!&amp;nbsp;:)</description></item><item><title>Sending MSN messages</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/457/Sending-MSN-messages.aspx</link><category /><pubDate>Fri, 26 Nov 2004 21:36:00 GMT</pubDate><description>&lt;P&gt;Here's a &lt;A href="http://blogs.conchango.com/jamessimmonds/archive/2004/11/24/322.aspx"&gt;cool utility&lt;/A&gt; to send MSN messages as part of your build scripts.&lt;/P&gt;
&lt;P&gt;I haven't tried it myself, but &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; should be able to call it fine using the execute program action.&lt;/P&gt;</description></item><item><title>FinalBuilder 3 gets new database actions</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/456/FinalBuilder-3-gets-new-database-actions.aspx</link><category /><pubDate>Fri, 26 Nov 2004 08:20:00 GMT</pubDate><description>&lt;P&gt;I've been working on adding database actions for FB3.&amp;nbsp; One action is to run a stored procedure using ADO.&amp;nbsp; The property page (ie. the design time editor) is worth having a look at.&lt;/P&gt;&lt;IMG src="http://www.t8software.com/images/fb/adostoredproc.png"&gt; 
&lt;P&gt;Connection String - enter an ADO&amp;nbsp;connection string or let the wizard build it for you.&lt;/P&gt;
&lt;P&gt;Refresh - will load the available stored procedures of the specified database.&lt;/P&gt;
&lt;P&gt;When a stored procedure is selected, the parameters are retrieved and allows you to set the parameter input value (which also accepts variables) and set output value to a variable.&lt;/P&gt;
&lt;P&gt;If the stored procedure returns a result set, then this can be saved as an xml file to disk as well as output to the FinalBuilder log.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>FinalBuilder 3 sneak peek (7Zip)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/455/FinalBuilder-3-sneak-peek-7Zip.aspx</link><category /><pubDate>Thu, 25 Nov 2004 01:28:00 GMT</pubDate><description>&lt;P&gt;One of the new set of actions in &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; 3 is the support for &lt;A href="http://www.7-zip.org/"&gt;7Zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;7Zip is a file archiver with a very high compression ratio (30-70% better than Zip), and it also supports many other popular compression formats.&lt;/P&gt;
&lt;P&gt;New 7Zip actions in FinalBuilder 3:&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0cm" type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l3 level2 lfo3; tab-stops: list 72.0pt"&gt;Create Archive (supports Zip, 7z, GZip, BZip2, TAR)&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l3 level2 lfo3; tab-stops: list 72.0pt"&gt;Test Archive (supports Zip, 7z, GZip, BZip2, TAR)&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l3 level2 lfo3; tab-stops: list 72.0pt"&gt;List files in Archive (supports Zip, 7z, GZip, BZip2, TAR, RAR, ARJ, CAB, CPIO, RPM, DEB, SPLIT)&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l3 level2 lfo3; tab-stops: list 72.0pt"&gt;Extract Archive (supports Zip, 7z, GZip, BZip2, TAR, RAR, ARJ, CAB, CPIO, RPM, DEB, SPLIT)&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l3 level2 lfo3; tab-stops: list 72.0pt"&gt;Update Archive (supports Zip, 7z, GZip, BZip2, TAR)&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l3 level2 lfo3; tab-stops: list 72.0pt"&gt;Delete file from Archive (supports Zip, 7z, GZip, BZip2, TAR)&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l3 level2 lfo3; tab-stops: list 72.0pt"&gt;FinalBuilder 3 is currently in Beta; the beta is open to existing customers.&lt;/P&gt;</description></item><item><title>FinalBuilder vs. WANT</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/454/FinalBuilder-vs-WANT.aspx</link><category /><pubDate>Tue, 23 Nov 2004 08:11:00 GMT</pubDate><description>&lt;P&gt;Came across this interesting &lt;A href="http://translate.google.com/translate?u=http%3A%2F%2Fwww.cnblogs.com%2Farming%2Farchive%2F2004%2F09%2F01%2F38267.html&amp;langpair=zh-CN%7Cen&amp;hl=en&amp;ie=UTF-8&amp;oe=UTF-8&amp;prev=%2Flanguage_tools"&gt;comparison&lt;/A&gt; between FinalBuilder and &lt;A href="http://sourceforge.net/projects/want/"&gt;WANT&lt;/A&gt;, it's so interesting that it needs to be translated from Chinese to English.... yeouch!&amp;nbsp; The link will translate the &lt;A href="http://www.cnblogs.com/arming/archive/2004/09/01/38267.html"&gt;original&lt;/A&gt; using google... I spose it does a reasonable job, but it's still damn difficult to figure out what it all means.&lt;/P&gt;
&lt;P&gt;An interesting bit:&lt;/P&gt;
&lt;P&gt;Usability - &lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;FONT size=3&gt;Contact surface whether simple Yi Yong?&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;FinalBuilder: &lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;FONT size=3&gt;Yes, completely &lt;SPAN lang=EN-US&gt;GUI &lt;/SPAN&gt;Contact surface, also supports the order line&lt;/FONT&gt;&lt;/SPAN&gt; 
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;FONT size=3&gt;WANT: &lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;FONT size=3&gt;Is not too convenient, control bench procedure, when disposition must compile &lt;SPAN lang=EN-US&gt;XML &lt;/SPAN&gt;Document &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;FONT size=3&gt;So, I suppose the translation meant: FinalBuilder has a good user interface and supports the command line, but WANT is not easy to use as you must manually edit an XML document.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;FONT size=3&gt;&lt;SPAN lang=EN-US&gt;&lt;?XML:NAMESPACE PREFIX = O /&gt;&lt;O:p&gt;A couple of things they didn't seem to pick up on was that FinalBuilder can be extended through the development of plugins, and that it has an XML file format like WANT does.&lt;/O:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;FONT size=3&gt;&lt;SPAN lang=EN-US&gt;&lt;O:p&gt;And does this means they chose FB over WANT? &amp;nbsp;&lt;/O:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: ??; mso-font-kerning: 0pt; mso-bidi-font-family: ??"&gt;&lt;SPAN lang=EN-US&gt;&lt;O:p&gt;&lt;FONT size=3&gt;&lt;EM&gt;“&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: ??; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'"&gt;Therefore, compares from the sexual price above looks, &lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 12pt"&gt;FB2 &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: ??; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'"&gt;Thinks through the implementation to one every day constructs constructs improves the software mass sum management quality the company says, should be the quite good choice”&lt;/SPAN&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/O:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;</description></item><item><title>FinalBuilder 3 in Beta</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/453/FinalBuilder-3-in-Beta.aspx</link><category /><pubDate>Sat, 20 Nov 2004 22:43:00 GMT</pubDate><description>&lt;P&gt;FinalBuilder version 3.0 is currently in Beta.&lt;/P&gt;
&lt;P&gt;The beta is curretly open to existing FB2 customers.&amp;nbsp; And, the big news is that if you &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;buy FinalBuilder 2 now, you'll automatically get FB3 when it ships&lt;/FONT&gt;&lt;/STRONG&gt; (new purchases only, doesn't include upgrades from 1.x).&lt;/P&gt;
&lt;P&gt;FB3 is going to be quite a big release.&amp;nbsp; A huge amount of work has gone into the core, the IDE, new and updated plugins, and also a brand new plugin architecture which supports ActiveScript, COM, and native .Net plugins.&lt;/P&gt;
&lt;P&gt;Stay tuned to &lt;A href="http://blogs.atozed.com/vincent"&gt;Vincent's&lt;/A&gt; and my blog for more juicy bits-and-pieces on FB3.&lt;/P&gt;</description></item><item><title>Search Engine for Source Code</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/452/Search-Engine-for-Source-Code.aspx</link><category /><pubDate>Thu, 18 Nov 2004 06:59:00 GMT</pubDate><description>&lt;P&gt;This is cool... it's a search engine where you specify the language (eg. c#, vb, delphi, etc.) and a search term and it searches for hits confined to files of the&amp;nbsp;programming language specified.&amp;nbsp; Seems that most hits come from source code stored on SourceForge.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.koders.com"&gt;http://www.koders.com&lt;/A&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Yet another yet another blogger blogging about Google Desktop Search</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/451/Yet-another-yet-another-blogger-blogging-about-Go.aspx</link><category /><pubDate>Sun, 31 Oct 2004 02:01:00 GMT</pubDate><description>&lt;P&gt;Yeah, yeah, you've heard it all before... &lt;A href="http://desktop.google.com/"&gt;Google Desktop Search&lt;/A&gt; is cool, except it needs to also search &lt;insert favourite file extension here&gt;.&amp;nbsp; When the desktop search first came it, it did sound cool... but was so lacking in what it can search,&amp;nbsp;I never bothered.&lt;/P&gt;
&lt;P&gt;Well, today I finally installed Google Desktop Search, but only because I read &lt;A href="http://distribucon.com/blog/archive/2004/10/27/323.aspx"&gt;Dan Miser's blog&lt;/A&gt; about it -&gt; there's a &lt;A href="http://lordcrc.no-ip.com/public/DesktopSearchHack.zip"&gt;hack&lt;/A&gt; to allow searching for *.pas, *.dpr,&amp;nbsp;and *.cs files (instead of .cgi, .py and .pl files).&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And, I do like it.&amp;nbsp; Searching is instantaneous, results looks nice and familiar, and it just works :)&amp;nbsp; It's also very cool how when you're searching the web (using Google) it also lists any desktop search hits on the top of the search page too.&lt;/P&gt;
&lt;P&gt;Of course, a post about Google Desktop Search wouldn't be complete without the list of things I wished it searched, so here we go:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.pocomail.com/"&gt;PocoMail&lt;/A&gt; .mbx mail files (plain text, and I think are in a standard RFC format?)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.miranda-im.org/"&gt;Miranda&lt;/A&gt; IM conversations&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;See, I'm not too demanding, am I?!&lt;/P&gt;</description></item><item><title>Piracy - the death knoll for commercial software?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/392/Piracy-the-death-knoll-for-commercial-software.aspx</link><category /><pubDate>Fri, 29 Oct 2004 00:35:00 GMT</pubDate><description>&lt;P&gt;A few years back, when the Open Source movement was starting to gain momentum, I remember thinking that would be the death of commercial software. That hasn't happened... it's certainly had an impact though, in some respects it's made commercial software vendors improve their products. &lt;/P&gt;
&lt;P&gt;Sadly, the same can't be said about piracy. I've heard all sorts of views on piracy over the years, some even going as far as to say it's good for the vendor. I guess if you are a redmond based monopoly that could be said, but for small ISV's like AtoZed it does have a negative impact. &lt;/P&gt;
&lt;P&gt;The conventional wisdom is that people who pirate your software wouldn't have bought it anyway, but I don't subscribe to that point of view. Sure,&amp;nbsp;most probably wouldn't have bought it, but there are many people who are opportunistic pirates, ie “I'll buy it if I can't find a cracked/warez copy/keygen etc“. You would be supprised how many people fall into this category. If most people where honest enough, they would admit to having used pirated software at some stage in their lives, and many people don't believe they are doing anything wrong, in fact they have the same attitude to piracy of music/dvd's etc. &lt;/P&gt;
&lt;P&gt;What does piracy really cost us, and how can we calculate it? I have no idea.. I suspect most people who&amp;nbsp;quote the cost of piracy are plucking their figures from thin air, it's like answering the&amp;nbsp;question “how long is a piece of string”.&lt;/P&gt;
&lt;P&gt;What I do know is it&amp;nbsp;costs us when it comes to dealing with support, as it's impossible to&amp;nbsp;distinguish between a potential customer requiring pre-sales support and a person using&amp;nbsp;a pirated copy. Large companies get around this but not offering any unpaid support, unfortunately thats not something small ISV's can get away with. And there's the increased bandwith usage on our server (this I can quantify), we pay&amp;nbsp;to&amp;nbsp;colocate our server, so increased downloads can cost. Ordinarily this wouldn't be a problem, since we'd expect that with increased downloads of the eval versions of our products we'd be seeing increased sales. &lt;/P&gt;
&lt;P&gt;Why the sudden urge to blog about piracy you might ask? Well downloads of one of our products went through the roof last week, increasing by 1000% (no, that's not a typo, that's&amp;nbsp;one thousand percent). When I matched that against referals it didn't take long to find the site that had a new&amp;nbsp;crack for our product. Not the sort of thing I want to see when I'm working 12-18hr days &amp; haven't had a real holiday in last 10 years. Kinda makes me want to find a new career sometimes.. developing &amp; selling software doesn't seem quite so attractive these days.&lt;/P&gt;
&lt;P&gt;Sigh..&lt;/P&gt;</description></item><item><title>FeedDemon/Topstyle</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/450/FeedDemonTopstyle.aspx</link><category /><pubDate>Tue, 26 Oct 2004 19:46:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://nick.typepad.com/blog"&gt;Nick Bradbury&lt;/A&gt;, who created the most excellent &lt;A href="http://www.bradsoft.com/topstyle/index.asp"&gt;TopStyle&lt;/A&gt; and &lt;A href="http://www.bradsoft.com/feeddemon/index.asp"&gt;FeedDemon&lt;/A&gt;, uses &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; for his &lt;A href="http://nick.typepad.com/blog/2004/08/delphi_readers_.html"&gt;builds&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>TeamFB</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/449/TeamFB.aspx</link><category /><pubDate>Tue, 19 Oct 2004 00:20:00 GMT</pubDate><description>&lt;P&gt;Introducting TeamFB (Team FinalBuilder).&lt;/P&gt;
&lt;P&gt;TeamFB members are FinalBuilder users who have demonstrated their excellent knowledge of FinalBuilder &amp; configuration management in general, and a willingness to help others.&lt;/P&gt;
&lt;P&gt;TeamFB Members:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Jon Robertson&lt;/LI&gt;
&lt;LI&gt;Steve Forbes&lt;/LI&gt;
&lt;LI&gt;Matthew Jones&lt;/LI&gt;
&lt;LI&gt;Peter Thörnqvist&lt;/LI&gt;
&lt;LI&gt;Paul Spain&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;TeamFB members have a close relationship with AtoZed Software, have access to private alphas &amp; betas, and have the opportunity to influence the future direction of FinalBuilder. Please note that TeamFB members are not paid&amp;nbsp;support staff, please do not send them email with support questions.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Get to know theyse guys on the FinalBuilder newsgroup: &lt;A href="news://news.atozedsoftware.com/atozedsoftware.finalbuilder"&gt;news://news.atozedsoftware.com/atozedsoftware.finalbuilder&lt;/A&gt;&lt;/P&gt;</description></item><item><title>Creating a self-signed SSL certificate for IIS</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/448/Creating-a-self-signed-SSL-certificate-for-IIS.aspx</link><category /><pubDate>Sat, 16 Oct 2004 07:15:00 GMT</pubDate><description>&lt;P&gt;We recently had a bug report in the Vault support of FinalBuilder.&amp;nbsp; The bug was that if SSL encrypted client to server communication was enabled, the Vault actions in FinalBuilder would fail.&amp;nbsp; When I re-familiarised myself with the Vault command line options, I found the following:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;-ssl&amp;nbsp; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; Enables SSL for server connection&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now, this is not the hardest of command line parameters to pass to the vault client, and indeed, the FinalBuilder code was doing exactly that... so, further investigation as to why the FB action was failing had to be done.&lt;/P&gt;
&lt;P&gt;So, after updating our vault client and server to the latest version, the next thing was to enable SSL.&amp;nbsp; This quickly turned into a larger task than I was hoping for - SSL requires a certificate in IIS; you have to generate a certificate request file, sign up to a certificate provider (instantSSL, Comodo, Thawte, etc, etc), get a trial certificate, and then install the certificate in IIS.&amp;nbsp; One of the problems with this series of steps is that the certificate provider has to verify your identity (via faxing your details to them or some other low-tech stuff....) and this can take some time, time that&amp;nbsp;we didn't have to solve this seemingly simple problem.&lt;/P&gt;
&lt;P&gt;So, getting the the point, you can self-sign your certificate files.&amp;nbsp; Of course, if this was for an ecommerce website for customers, it wouldn't be a great idea to have a non-trustworthy certificate provider... but for a development box, it's perfect.&lt;/P&gt;
&lt;P&gt;Here's the link to the tutorial I used to get IIS working in SSL including creating a self signed SSL certificate:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.dylanbeattie.net/docs/openssl_iis_ssl_howto.html"&gt;http://www.dylanbeattie.net/docs/openssl_iis_ssl_howto.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This turned out to be exactly what was required.&amp;nbsp; We got SSL working, Vault was happy, and the problem was diagnosed and fixed.&amp;nbsp; It turned out that the vault client was outputting ssl information to stdout before the &lt;vault&gt; xml tag, and that caused FinalBuilder to fail parsing the xml output, and hence the action was reported as failed (even though it probably succeeded).&lt;/P&gt;</description></item><item><title>a small conversation negotiating with a colleague over a file in a version control system</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/447/a-small-conversation-negotiating-with-a-colleague.aspx</link><category /><pubDate>Tue, 28 Sep 2004 02:28:00 GMT</pubDate><description>&lt;P&gt;Ok, this is pretty off-topic.... but is quite funny.&amp;nbsp; This conversation just took place at one of the places where I do a bit of consulting work.&amp;nbsp; The person's name has been changed to Joe... to protect their identity (and it's not Vincent or any of the AtoZed team). Enjoy.&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;4:11:56 PM tate: Joe, do you still need the tlb stuff checked out?&lt;BR&gt;4:12:07 PM Joe.: yes&lt;BR&gt;4:12:12 PM tate: how long?&lt;BR&gt;4:13:36 PM Joe.: 5 mins to longer, I thought I knew what I wanted, to add, but upon closer inspection, I am not sure, so, if you need it, I can check it back in&lt;BR&gt;4:13:52 PM tate: i can wait 5 minutes.&lt;BR&gt;4:13:58 PM Joe.: to longer?&lt;BR&gt;4:14:13 PM tate: to longer?&lt;BR&gt;4:14:41 PM Joe.: ok 5 mins&lt;BR&gt;4:15:08 PM tate: Google: No definitions were found for "to longer"&lt;BR&gt;4:15:29 PM Joe.: checked in.&lt;BR&gt;4:15:32 PM tate: ta :)&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Gotta Love wireless hotspots..</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/391/Gotta-Love-wireless-hotspots.aspx</link><category /><pubDate>Fri, 17 Sep 2004 23:27:00 GMT</pubDate><description>&lt;P&gt;Tate &amp; I are sitting here at San Fransicso Intl airport (waiting for a flight back to Australia), I'm connected via the T-Mobile hotspot &amp; Tate's connected to my machine via a crossover cable.&amp;nbsp;We were both just talking to our wives on Skype (pc to pc phone) while I was downloading a file at 2MB/s :) - wish I had a connection this fast at home!&lt;/P&gt;
&lt;P&gt;Wireless is really making it easier when we travel these days.. no more trying to convince internet cafe managers to let me plugin my notebook, or paying silly payphone rates for a dialup connection. It also makes time fly a lot faster while waiting for flights :)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Heading home</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/446/Heading-home.aspx</link><category /><pubDate>Fri, 17 Sep 2004 23:16:00 GMT</pubDate><description>&lt;p&gt;We're all heading home after a pretty busy conference.&amp;#160; Vincent and I are waiting in San Francisco airport trying to catch up with email, newsgroups etc.&amp;#160; We appologise to everyone if our newsgroup and email support has been a bit slow over the last week.&amp;#160; Today was spent doing the tourist thing around SF, I managed to take 101 photos over a 5 hour period - not bad eh?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.skype.com/"&gt;Skype&lt;/a&gt;.&amp;#160; Awesome product. Vincent &lt;a href="http://blogs.finalbuilder.com/vincent/archive/2004/08/11/426.aspx"&gt;blogged&lt;/a&gt; about it before.&amp;#160; Pretty much the whole AtoZed team use it, and we all love it.&amp;#160; I've been able to talk to my family at home (in Australia) at length and not have to worry about how much it's going to cost.&amp;#160; 30 minute skype calls are the norm and don't cost a cent (it's pc to pc of course).&amp;#160; Last year was a different story, we'd make very quick phone calls using mobile (cell) phones with global roaming -&amp;#160;each call would cost way too much.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.t8software.com/images/blog/goldengatebridge.jpg" alt="" /&gt;&lt;/p&gt;</description></item><item><title>Programs Roy Osherove can't live without.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/445/Programs-Roy-Osherove-cant-live-without.aspx</link><category /><pubDate>Thu, 16 Sep 2004 02:47:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://weblogs.asp.net/rosherove/"&gt;Roy&lt;/A&gt; mentions a bunch of programs that he can't live without - and FinalBuilder gets a mention!&lt;/P&gt;
&lt;P&gt;Check it out &lt;A href="http://weblogs.asp.net/rosherove/archive/2004/09/04/225459.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>BorCon 2004 - Day... ummm, three, maybe?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/444/BorCon-2004-Day-ummm-three-maybe.aspx</link><category /><pubDate>Thu, 16 Sep 2004 02:30:00 GMT</pubDate><description>&lt;P&gt;Ok, it's all starting to blur a bit now - and it's not because last night was a bit of a heavy one... well maybe that is the reason.&amp;nbsp; Anyway, good day to meet and greet people today and we're getting a lot of interest for both FinalBuilder and Intraweb.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Some of the big news is that &lt;A href="http://www.atozed.com/intraweb"&gt;Intraweb&lt;/A&gt; 7.2 will be bundled with the next version of &lt;A href="http://www.borland.com/delphi/"&gt;Delphi&lt;/A&gt; (codenamed “DiamondBack”).&amp;nbsp; So congratulations to the Intraweb team on that one.&lt;/P&gt;
&lt;P&gt;Numbers for BorCon were a bit down from last year, so dissapointing for everyone there - apparently there were around 1,500 delegates.&amp;nbsp; Anyway, last day tomorrow and we'll all be heading home.&lt;/P&gt;</description></item><item><title>The AtoZed Booth</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/443/The-AtoZed-Booth.aspx</link><category /><pubDate>Tue, 14 Sep 2004 13:45:00 GMT</pubDate><description>&lt;P&gt;So, it's BorCon Day&amp;nbsp;2 now.&amp;nbsp; Day 1 was a bit of a non-event really (as far as an exhibitor goes)... just the opening ceremony in the evening.&amp;nbsp; The only traffic through the exhibitor hall were either other exhibitors or people doing pre-conference tutorials.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Anyway, we got the booth set up and got into the swing of things:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/blog/atozed_booth.jpg"&gt;&lt;/P&gt;
&lt;P&gt;From the left we have: Leena, Olaf, Jason (from Arcana Technology), Chad, Vincent.&lt;/P&gt;
&lt;P&gt;Also notice that the lolly bowl is full... even though we didn't have many visitors, the lolly supply was quite depleted at the end of the day.&lt;/P&gt;</description></item><item><title>Danny on .Net 2.0 through the eyes of Nick</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/442/Danny-on-Net-20-through-the-eyes-of-Nick.aspx</link><category /><pubDate>Mon, 13 Sep 2004 00:27:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://www.lemanix.com/nick/archive/2004/09/11/1261.aspx"&gt;http://www.lemanix.com/nick/archive/2004/09/11/1261.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;well worth the read....&lt;/P&gt;</description></item><item><title>BorCon 2004 - Day 0</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/441/BorCon-2004-Day-0.aspx</link><category /><pubDate>Mon, 13 Sep 2004 00:10:00 GMT</pubDate><description>&lt;P&gt;&lt;A href="http://blogs.atozed.com/vincent"&gt;Vincent&lt;/A&gt; and I flew in from Australia today to San Fransisco... it was a rather long flight, especially being cramped in “toilet class” (ie. the very back of the plane).&amp;nbsp; I managed to get a little sleep, and Vincent a bit less than that!&lt;/P&gt;
&lt;P&gt;Here is the entrance (well, exit for us)&amp;nbsp;of the airpot:&lt;BR&gt;&lt;IMG src="http://www.t8software.com/images/blog/sf.jpg"&gt;&lt;/P&gt;
&lt;P&gt;And then we stood back and admired the wonderful view:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/blog/sfview.jpg"&gt; &lt;/P&gt;
&lt;P&gt;I'm not sure how I managed to take a photo without a car, pickup, or taxi getting in the way... pure luck I spose.&lt;/P&gt;
&lt;P&gt;So, after taking a shuttle bus from San Fransisco to San Jose (about an hour south) we checked into the hotel and went and found the conference centre:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="http://www.t8software.com/images/blog/confcentre.jpg"&gt;&lt;/P&gt;
&lt;P&gt;It is setting up day today (and tomorrow) for the vendor area - and this is how it starts out: &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/blog/abouttosetup.jpg"&gt; &lt;/P&gt;
&lt;P&gt;That's all for today, too tired... must sleep.&lt;/P&gt;</description></item><item><title>Automating Code Signing</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/440/Automating-Code-Signing.aspx</link><category /><pubDate>Fri, 03 Sep 2004 19:04:00 GMT</pubDate><description>&lt;P&gt;Matthew Jones has a great &lt;A href="http://www.matthew-jones.com/articles/codesigning.html"&gt;article&lt;/A&gt; on the basics of Code Signing.&lt;/P&gt;
&lt;P&gt;And, of course, “To actually sign the code, I used &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; to make sure it is done each time and every time reliably”&lt;/P&gt;
&lt;P&gt;Code Signing is much more relevant to your downloadable files now that WinXP SP2 checks for it when &lt;A href="http://msdn.microsoft.com/security/productinfo/xpsp2/default.aspx?pull=/library/en-us/dnwxp/html/xpsp2web.asp#xpsp_topic2"&gt;downloading&lt;/A&gt; a file with IE.&lt;/P&gt;</description></item><item><title>Longhorn FAQ</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/439/Longhorn-FAQ.aspx</link><category /><pubDate>Mon, 30 Aug 2004 19:52:00 GMT</pubDate><description>&lt;P&gt;With Microsofts recent &lt;A href="http://www.microsoft.com/presspass/press/2004/Aug04/08-27Target2006PR.asp"&gt;announcements&lt;/A&gt; of Longhorn in 2006, WinFS, Avalon, etc,&amp;nbsp; I found this &lt;A href="http://msdn.microsoft.com/Longhorn/Support/lhdevfaq/default.aspx"&gt;FAQ&lt;/A&gt; quite informative.&lt;/P&gt;</description></item><item><title>Future Development Platform.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/438/Future-Development-Platform.aspx</link><category /><pubDate>Mon, 16 Aug 2004 23:25:00 GMT</pubDate><description>&lt;P&gt;We recently surveyed the existing &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt; customers, and one of the questions was “What do you see as your future development platform?” - here are the results.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/futuredevplatform.png" border=1&gt; &lt;/P&gt;
&lt;P&gt;So, not many surprises here.&lt;/P&gt;
&lt;P&gt;Without giving too much away, the future of FinalBuilder development will also be a combination of the Windows32 and .Net platforms.&amp;nbsp; Maybe we'll have something to show at &lt;A href="http://info.borland.com/conf2004/"&gt;Borcon&lt;/A&gt; in September :)&lt;/P&gt;</description></item><item><title>Meet the team at Borcon 2004</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/390/Meet-the-team-at-Borcon-2004.aspx</link><category /><pubDate>Thu, 12 Aug 2004 07:30:00 GMT</pubDate><description>&lt;P&gt;We're exhibiting again at this year's Borland Developer conference in San Jose, September 11-15&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/images/borcon2004.gif"&gt;&lt;/P&gt;
&lt;P&gt;Be sure to stop by and say hello, take a look at what we have to offer, see what's cookin in the labs etc.&lt;/P&gt;
&lt;P&gt;&lt;/IMG&gt;&lt;/P&gt;</description></item><item><title>The best thing since sliced bread!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/389/The-best-thing-since-sliced-bread.aspx</link><category /><pubDate>Thu, 12 Aug 2004 02:04:00 GMT</pubDate><description>&lt;P&gt;I'm just nuts about &lt;A href="http://www.skype.com"&gt;Skype&lt;/A&gt;! I've tried many other internet phone type applications over the years, but none of them worked very well and certainly not on slower internet connections.&lt;/P&gt;
&lt;P&gt;My family is spread out all over the world (UK, South Africa, US &amp; Australia) and phone calls can cost a small fortune. As a result, we don't tend to talk too often, keeping in touch mostly by email (I still have to educate my brother about the what the reply button does in outlook though!). A few days ago, I finally got my dad on skype (he was sceptical, still using dialup) and we spoke for an hour, probably the longest conversation in years! &lt;BR&gt;&lt;BR&gt;Never mind the technical achievements of skype (amazing quality &amp; performance, even when using dialup connections), the social impact will be enormous. People might actually start talking to each other again, instead of email.. I know I plan to. &lt;/P&gt;
&lt;P&gt;.v&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;</description></item><item><title>More Tech.Ed thoughts.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/437/More-TechEd-thoughts.aspx</link><category /><pubDate>Fri, 06 Aug 2004 04:00:00 GMT</pubDate><description>&lt;P&gt;It's damn boring when the sessions are on. Blah, blah, blah.... no one to talk to, and there's only so many business cards I can type into Excel before my brain tries to switch off.&amp;nbsp; Oh, and the wireless network&amp;nbsp;is shocking today (provided by Telstra - oh gee, we love Telstra in Australia), it drops out almost too often to be useful.&lt;/P&gt;
&lt;P&gt;One thing we have noticed is that that a lot of the attendees are “System Admin” types - probably at a rough guess it'd be something like 50% developers, 40% Sys Admins, and 10% of other types.&amp;nbsp; I'd be nice if we could talk about what we've got planned in the Sys Admin space - maybe in a few months... ;)&lt;/P&gt;</description></item><item><title>Tech.Ed Aussie style day 1</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/436/TechEd-Aussie-style-day-1.aspx</link><category /><pubDate>Thu, 05 Aug 2004 22:27:00 GMT</pubDate><description>&lt;P&gt;Well, the amount of people here is amazing.&amp;nbsp; We thought there was a lot on Day 0.... but geez.... multiply that by about 3...!&amp;nbsp; The booth has been pretty busy in the morning, but cooled off a lot in the afternoon - we need some sort of attraction to bring people here (I'm thinking maybe a free XBox or a couple of boothbabes :)&lt;/P&gt;
&lt;P&gt;The layout of Tech.Ed is fantastic - all the vendors are around the outside of a pretty big hall, and it's in this hall that people eat, drink, and chat.&amp;nbsp; There are lounge chairs, and normal tables and chairs all though the hall, so it's great for both the delegates and the exhibitors.&lt;/P&gt;</description></item><item><title>Tech.Ed Australia Day 0</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/435/TechEd-Australia-Day-0.aspx</link><category /><pubDate>Wed, 04 Aug 2004 19:56:00 GMT</pubDate><description>&lt;P&gt;The exhibition might have only been open for half a day (3pm to 8pm) but I'm stuffed already.&amp;nbsp; The croud was pretty good - especially since Day 0 is free for anyone!&amp;nbsp; The (primarily) Microsoft crowd was very receptive to hear about FinalBuilder, so hopefully the event will be a big success.&lt;/P&gt;
&lt;P&gt;The booth:&lt;/P&gt;&lt;IMG src="http://www.t8software.com/images/dscn9880_small.jpg"&gt;</description></item><item><title>The best build tool by far!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/434/The-best-build-tool-by-far.aspx</link><category /><pubDate>Wed, 04 Aug 2004 17:18:00 GMT</pubDate><description>&lt;P&gt;“&lt;STRONG&gt;Best Build Tool&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;No competition.&lt;/B&gt; This is a brand new category, so no one knew what to expect. What happened was a blowout, with Atozed Software's FinalBuilder taking 79% of the vote.”&lt;/P&gt;&lt;IMG src="http://delphizine.com/newsletterarticle/2004/08/di200408jc_l/di200408jc_l_image003.gif"&gt; 
&lt;P&gt;source: &lt;A href="http://delphizine.com/newsletterarticle/2004/08/di200408jc_l/di200408jc_l.asp"&gt;http://delphizine.com/newsletterarticle/2004/08/di200408jc_l/di200408jc_l.asp&lt;/A&gt;&lt;/P&gt;</description></item><item><title>We're at Tech Ed Australia 2004 this week</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/388/Were-at-Tech-Ed-Australia-2004-this-week.aspx</link><category /><pubDate>Tue, 03 Aug 2004 08:24:00 GMT</pubDate><description>&lt;P&gt;At last, a major conference in the city where I live (Canberra, Australia)! No 12hr flights, no cramped seats only big enough for midgets, no 10 levels of security, no taking my shoes off to be sniffed, no turning my notebook pc on and off 50 times before I get there (here's a tip.. never travel with 2 notebooks, and here's another, hibernate your pc before you leave..&amp;nbsp; much quicker than a cold boot!). I always seem to be the last person to board the plane, often just as the pilot is apologising for the delay, telling my fellow travelers that they are just waiting on one late passenger to board.. &lt;/P&gt;
&lt;P&gt;This time it's a 15 minute drive into the city (ok, and probably a 30 minute search for parking).&amp;nbsp; That I can deal with!&lt;/P&gt;
&lt;P&gt;We're exhibiting at Tech Ed, so we might seem a bit scarce on the newsgroups this week, the exhibit area is open very long hours and we're supposed to man the booth the whole time.. I just hope there's a wireless network! &lt;/P&gt;
&lt;P&gt;If you are attending, be sure to stop by our booth and say hello. &lt;BR&gt;v.&lt;/P&gt;</description></item><item><title>Awards (again)</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/433/Awards-again.aspx</link><category /><pubDate>Sun, 01 Aug 2004 21:56:00 GMT</pubDate><description>&lt;P&gt;Patric just &lt;A href="http://blogs.atozed.com/patric/archive/2004/07/31/412.aspx"&gt;blogged&lt;/A&gt; about the three&amp;nbsp;&lt;A href="http://www.delphizine.com/"&gt;Delphi Informant Magazine&lt;/A&gt; awards which &lt;A href="http://www.atozed.com/"&gt;AtoZed&lt;/A&gt; won- here they are as images :)&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.delphizine.com/Images/Portal/DIRCA04Winner_233.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;IMG src="http://www.delphizine.com/Images/Portal/DIRCA04Winner_232.gif"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;IMG src="http://www.delphizine.com/Images/Portal/DIRCA04Winner_235.gif"&gt;&lt;/P&gt;</description></item><item><title>Version Control System.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/432/Version-Control-System.aspx</link><category /><pubDate>Sat, 31 Jul 2004 01:52:00 GMT</pubDate><description>&lt;P&gt;We recently surveyed the existing FinalBuilder customers, and one of the questions was “Which Version Control System do you use?”.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.t8software.com/images/fb_vcs.png" border=1&gt;&lt;/P&gt;
&lt;P&gt;So, a few interesting things from these results:&lt;/P&gt;
&lt;P&gt;a. I forgot to include Perforce (doh!) and almost all of the “Other” people specified Perforce.&lt;/P&gt;
&lt;P&gt;b. A very high percentage are using VSS - higher than we thought.&amp;nbsp; During development of FB2 we started rewriting the VSS actions to use the VSS command line interface instead of COM - but we abandoned that because we couldn't make it backwards compatible.&amp;nbsp; We may resurect this project though, as the COM based interface to VSS can be unreliable - but any new actions would be in addition to what already exists.&lt;/P&gt;
&lt;P&gt;c. We also have more users than we expected using FreeVCS.&lt;/P&gt;
&lt;P&gt;d. It's interesting that nobody who answered the survey uses Accurev or Surround SCM - the nature of FB means that it's very important to support as many VCS's as possible... maybe the Accurev and Surround SCM users haven't bought FB because we don't have native support?&lt;/P&gt;
&lt;P&gt;e. FB currently has native support for&amp;nbsp;Perforce, VSS, StarTeam, CVS, QVCS, Team Coherence, and Vault - which accounts for 68% of our users.&amp;nbsp; So not too bad, but we will improve that soon :)&lt;/P&gt;
&lt;P&gt;Your thoughts?&lt;/P&gt;</description></item><item><title>Some people don't automate.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/431/Some-people-dont-automate.aspx</link><category /><pubDate>Mon, 26 Jul 2004 20:04:00 GMT</pubDate><description>&lt;P&gt;As well as being a 3-day-a-week programmer for &lt;A href="http://www.finalbuilder.com"&gt;FinalBuilder&lt;/A&gt;, I also do the odd bit of consulting.&amp;nbsp; One company I have been consulting to for a while now has a huge FinalBuilder project to build their software products.&amp;nbsp; The build script was a bit out of date (!!!) and so I was asked to spend a few hours modifying it to make it easier to maintain and add support for new parts of their build process.&lt;/P&gt;
&lt;P&gt;This was all fine, and I especially like working on real FB build scripts so that I can actually use the software I help write (and it's amazing what things I'd like to change - but maybe that's a topic for another blog entry...).&lt;/P&gt;
&lt;P&gt;Anyway... what I came up against was, to me, a little strange.&amp;nbsp; There is one employee (lets call him Fred) who seems to be just fine with things the way they are.&amp;nbsp; For example, one step in the build process is to burn a master CD for distributing to customers; the build script copies all the relevant files to a directory on a particular machine which has a burner, then someone has to physically go to the machine, open up Nero, create a new project, add the files, name the CD, burn it, verify it, and wait for it to pop out.&amp;nbsp; I get tired just typing it, but Fred prefers to do it this way instead of setting up a “Create ISO” action in FinalBuilder to build an ISO image on the build machine which anyone can then use to burn the master CD.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Of course, we could also &lt;STRONG&gt;&lt;EM&gt;do&lt;/EM&gt;&lt;/STRONG&gt; the burn on the build machine automatically - but one step at a time, eh?&amp;nbsp; I am a little lost as to why people are like this - the investment of their time to automate the task will pay off after doing the task manually once or twice (not a bad ROI...).&amp;nbsp; I suppose it's an education and trust thing, Fred does trust the rest of the build process in FB, so why not trust one extra step?&amp;nbsp; And, before I told Fred about the CD burning and ISO creation capability he didn't know they existed - but now he does.... SO NO EXCUSES!&lt;/P&gt;
&lt;P&gt;Anyway, I feel better I have it off my chest now, and I can get back to some more coding :)&lt;/P&gt;</description></item><item><title>Microsoft Tech.Ed Australia</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/430/Microsoft-TechEd-Australia.aspx</link><category /><pubDate>Tue, 20 Jul 2004 19:58:00 GMT</pubDate><description>&lt;P&gt;It's time for Microsofts developer &lt;A href="http://www.microsoft.com/australia/events/teched2004/default.aspx"&gt;conference &lt;/A&gt;&amp;nbsp;in Australia.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Tech.Ed 2004 | National Convention and Exhibition Centre | Canberra - 3 - 6 August 2004&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;AtoZed Software will be exhibiting - with &lt;A href="http://blogs.atozed.com/vincent"&gt;Vincent &lt;/A&gt;&amp; I manning the booth.&amp;nbsp; If you're attending the conference and you're an existing &lt;A href="http://www.atozed.com/finalbuilder"&gt;FinalBuilder&lt;/A&gt; customer (or not!), we'd love to catch up with you&amp;nbsp;- make sure you drop by and say hello!&lt;/P&gt;
&lt;P&gt;If you're not attending the full conference, then you can visit the Exhibit area between 3:00pm and 8:00pm, Tuesday 3rd August for &lt;STRONG&gt;FREE&lt;/STRONG&gt;, but you must &lt;A href="http://www.local.microsoft.com.au/australia/events/register/home.aspx?levent=252516&amp;linvitation="&gt;register&lt;/A&gt;&amp;nbsp;(it also includes the Microsoft Tech.Ed Welcome Reception).&lt;/P&gt;</description></item><item><title>Everyone's on vacation it seems... </title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/387/Everyones-on-vacation-it-seems-.aspx</link><category /><pubDate>Fri, 16 Jul 2004 10:40:00 GMT</pubDate><description>&lt;P&gt;Well, almost! I just sent out an email blast to registered &lt;a title="FinalBuilder" href="http://www.finalbuilder.com/finalbuilder/" target="_blank"&gt;FinalBuilder&lt;/a&gt; users, and I'm now recieiving an incredibly high percentage of “Out of Office” replies! &lt;BR&gt;&lt;BR&gt;Hmm.. will have to try this vacation thing sometime... sigh!&lt;BR&gt;&lt;/P&gt;</description></item><item><title>FinalBuilder 2.7 released!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/386/FinalBuilder-27-released.aspx</link><category /><pubDate>Wed, 30 Jun 2004 07:15:00 GMT</pubDate><description>&lt;P&gt;Today we released the &lt;A title=FinalBuilder href="http://www.finalbuilder.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; 2.7 update. You can download load it &lt;A href="http://www.finalbuilder.com/download.aspx"&gt;here&lt;/A&gt;. This is a Free update for all existing registered FinalBuilder 2.x users.&lt;/P&gt; &lt;P&gt;&lt;STRONG&gt;So what's new in 2.7&lt;/STRONG&gt;&lt;/P&gt; &lt;P&gt;FinalBuilder 2.7 adds some new Flow Control type actions which make it much easier to create a dynamic build process. &lt;/P&gt; &lt;P&gt;&lt;STRONG&gt;Try/Catch/Finally&lt;/STRONG&gt;&lt;/P&gt; &lt;P&gt;The most significant of the new actions are the Try/Catch/Finally action, which enable structured exception handling just like you have in many programming languages. The image below shows how they can be used to create localised error handling. &lt;/P&gt; &lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/finalbuilder/images/trycatchfinally.png"&gt;&lt;/P&gt; &lt;P&gt;The Try/Catch/Finally actions also need an End action to complete the block and they all need to be at the same node level in the tree to form a valid block. You can also nest the Try/Catch/Finally blocks, and they can be used in Try/Catch/Finally/End or Try/Catch/End or Try/Finally/End constructs. &lt;/P&gt; &lt;P&gt;&lt;STRONG&gt;Switch/Case/Else&lt;/STRONG&gt;&lt;/P&gt; &lt;P&gt;The Switch/Case/Else actions provide a selector construct using simple case insensitive string comparisons. &lt;/P&gt; &lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/finalbuilder/images/switchcase.png"&gt;&lt;/P&gt; &lt;P&gt;The Case Action must be a child of the Switch Action, the same goes for the Else. Note that the Else can also be used with the If..Then action :&lt;/P&gt; &lt;P&gt;&lt;IMG src="http://www.finalbuilder.com/finalbuilder/images/ifthenelse.png"&gt;&lt;BR&gt;When used with the If..Then action the Else action must be the next sibling action of the If..Then action. Another new action is the “If Previous Action Failed” action. This action will only work if it's previous sibling action has Ingnore Failure enabled (otherwise the build would stop). &lt;BR&gt;&lt;BR&gt;FinalBuilder 2.7 installs some examples that show the use of the above actions in the FinalBuilder2\Examples\Flow Control folder. &lt;/P&gt; &lt;P&gt;Enjoy.&lt;/P&gt;</description></item><item><title>Visual Studio 2005 &amp;amp; FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/385/Visual-Studio-2005-amp-FinalBuilder.aspx</link><category /><pubDate>Mon, 28 Jun 2004 01:41:00 GMT</pubDate><description>&lt;P&gt;We've been getting an increasing amount of emails enquiring about the future of &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; since Microsoft announced Visual Studio Team System, and before that MSBuild.&amp;nbsp;It seems we're not the only vendor getting this sort of email, &lt;A href="http://software.ericsink.com/item_10169.html"&gt;Sourcegear's Eric Sink&lt;/A&gt;&amp;nbsp;commented about this in his blog last month and &lt;A href="http://software.ericsink.com/item_10192.html"&gt;again recently&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;MSBuild&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;MSBuild was first shown last year at PDC in LA, before that I hadn't heard about it. I can tell you that at first I was crestfallen, I could see my business going down the tubes and the prospect of once again looking for a job looming. Fortunately we're still surviving and I haven't had to go out looking for a job yet&amp;nbsp;:) &lt;/P&gt;
&lt;P&gt;Since PDC, more information and betas have become available and I've become more comfortable with how msbuild will affect us. I still believe FinalBuilder offers a superior Automated Build Environment which is much easier to use and much more flexible. Sales have improved since PDC, and I think that is in part because developers are more aware of automated builds in general and are looking for something easier to use than&amp;nbsp;manually editing&amp;nbsp;xml files. &lt;/P&gt;
&lt;P&gt;In FinalBuilder 2.5 we added an MSBuild Action (along with actions for Ant &amp; NANT), so&amp;nbsp;FinalBuilder already supports building VS 2005 projects (the project files are msbuild files), and of course when&amp;nbsp;VS2005/.NET 2.0&amp;nbsp;gets closer to release we'll look at tighter integration (it's a moving target at the moment). &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Visual Studio Team System&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;VSTS is a huge product, and from what we've seen so far (TechEd videos and the info on msdn) it looks very exciting, but it won't be for everyone. It's already becoming apparent that the full product &lt;A href="http://blogs.msdn.com/buckh/archive/2004/06/16/157022.aspx"&gt;won't be included in an MSDN Universal subscription&lt;/A&gt;&amp;nbsp;(see the comments by &lt;A id=Comments.ascx_CommentList__ctl2_NameLink target=_blank&gt;Raju Malhotra&lt;/A&gt;) , and my feeling is the server product&amp;nbsp;(Foundation Server, which is required) won't be cheap (apart from also requiring mssql which is itself not cheap). I get the impression that Microsoft are positioning VSTS to compete with IBM/Rational, and to a lesser degree with Borland (who's ALM&amp;nbsp;products like StarTeam &amp; CaliberRM are direct competitors). &lt;/P&gt;
&lt;P&gt;Are we happy that Microsoft are now planning to compete with us? Well of course not, but it's no use us crying over it. I do think Microsoft treading a fine line, they need a healthy third party developer tools market, without it the microsoft platform will stagnate and become less attractive (especially if vendors actually get serious about linux). Sadly any hope of a level playing field went out like a damp squid a few years ago... &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;So what's the future hold for FinalBuilder?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I suspect many developer tools vendors&amp;nbsp;will suffer, and ultimately go out of business (or change their target markets).We don't intend that to let that happen to us however only time will tell. &lt;BR&gt;&lt;BR&gt;Our position with FinalBuilder has always been to support as many products (equally well) as we can without an agenda (we don't have a compiler or version control&amp;nbsp;product to push). To this end we already have around 200 actions in FinalBuilder supporting products from many different vendors&amp;nbsp;such as &amp;nbsp;microsoft, borland &amp; java compilers, help generators, version control systems like StarTeam, Perforce, CVS, SourceGear Vault, QVCS, installers like InnoSetup, InstallShield, Wise&amp;nbsp;etc. Many of these products Microsoft will never support themselves. Of course we can't support everything ourselves and we don't have the resources of Microsoft, however we won't shy away from supporting&amp;nbsp;products that compete with Microsoft's.&lt;/P&gt;
&lt;P&gt;Work on the next major version of FinalBuilder has already begun, currently we're in the R phase of R&amp;D, but our plans are taking shape quite nicely. We've come up with enough new features to fill several major revisions, over the next few weeks we'll be trimming that down to what we think is the most usefull features and what can realisticaly be achieved with the resources and time that we have, and then we'll be getting stuck into the D phase of R&amp;D. I'm not going to start talking about release dates just yet, far too early for that.&lt;/P&gt;
&lt;P&gt;We have also been finishing&amp;nbsp;off FinalBuilder 2.7 which we hope to release this week. FinalBuilder 2.7 includes some nice new flow control type actions to make it even easier than before to create a dynamic build process. FinalBuilder 2.7 is a free update for all registered 2.x users.&lt;/P&gt;
&lt;P&gt;v.&lt;/P&gt;</description></item><item><title>Vote for FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/384/Vote-for-FinalBuilder.aspx</link><category /><pubDate>Wed, 23 Jun 2004 05:30:00 GMT</pubDate><description>&lt;P&gt;The &lt;A href="http://www.delphizine.com/ballot2004/"&gt;Delphi Informant Magazine's Reader's Choice Awards 2004&lt;/A&gt; are open for voting, please show your support for &lt;a title="FinalBuilder" href="http://www.finalbuilder.com/finalbuilder/" target="_blank"&gt;FinalBuilder&lt;/a&gt; by casting a vote for it.&lt;/P&gt;
&lt;P&gt;.v&lt;/P&gt;</description></item><item><title>WebDAV is a pain in the...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/429/WebDAV-is-a-pain-in-the.aspx</link><category /><pubDate>Tue, 22 Jun 2004 19:58:00 GMT</pubDate><description>&lt;P&gt;FinalBuilder now uses WebDAV as an optional way to update a VisualStudio.NET web projects' Assembly Info.&amp;nbsp; Sounds rather simple, huh? Not as simple at it should be IMHO...&amp;nbsp; The most annoying part of WebDAV is all the IIS security around it - it takes hours to figure out why certain files can't be uploaded or downloaded.&amp;nbsp; Most of the doco out there regarding WebDAV and IIS security is how to lock it all down to prevent unauthorised access; there's virtually nothing which tells you how to open things up a bit so it's easier for developers to update their files (from a non-Microsoft tool at least).&lt;/P&gt;
&lt;P&gt;Which brings me to my next (rambling) point - it seems that when MS uses WebDAV (and it seems they use it quite a bit with things like Exchange and VS.Net) it all just works perfectly and without the user even knowing it's WebDAV under the covers... MS-2-MS stuff works quite nicely thankyou.&amp;nbsp; But it's when a 3rd parties want to speak WebDAV to MS that things get a bit hairy.... I'll leave it at that, I feel better now&amp;nbsp;;)&lt;/P&gt;</description></item><item><title>To .NET or NOT, or maybe...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/383/To-NET-or-NOT-or-maybe.aspx</link><category /><pubDate>Mon, 21 Jun 2004 20:12:00 GMT</pubDate><description>&lt;P&gt;Something I get asked quite often with regards to &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; is “why don't I rewrite it in a .NET language, that way anyone could write plugins”. I have to admit it is tempting, because currently only Borland Delphi 7 users can write custom actions, while all those VS.NET users out there are stuck with what's in the box (so to speak!). Before we started on FinalBuilder 2 I spent a few weeks investigating porting to .NET, however it turned out to be a bigger task than I could manage in one product revision. At the time, Delphi 8 for .NET hadn't been released so it wasn't an option, and we had way too much code to rewrite in C#, so in the end we stuck with Win32 and Delphi 7. Delphi and Win32 have have served us well over the last 9 years, in a way that no other win32 development tool could (not looking to start a language/tool war here, just stating my opinion!), but the future is .NET.&lt;/P&gt;
&lt;P&gt;We're currently at the planning &amp; R&amp;D phase for FinalBuilder 3.&amp;nbsp;This weekend I found myself with a few hours to spare&amp;nbsp;so I decided to start some R&amp;D.&amp;nbsp;It may not be obivous to every&amp;nbsp;VS.NET or Delphi 8 user, but those IDE's are UnManaged Win32 applications, yet they seem to interop quite well with .NET by hosting the CLR. So that got me thinking about doing the same thing in FinalBuilder. Unfortunately there's not a lot of info out there on how to do this in Delphi, in fact I found nothing of use on Google. So I started poking around in my .NET SDK directory and found enough to get me started. &lt;BR&gt;&lt;BR&gt;The good news that I was able to host the CLR in a Delphi win32 application, load assemblies, instantiate .net objects and call methods on them, pass Delphi objects (disguised as com objects) to an assembly written in C# and then call methods on the delphi object from within the C# assembly. So far so good, I have yet to hit a roadblock, in that everything I wanted to do I was able to.&lt;BR&gt;&lt;BR&gt;So what does this all mean for the future of FinalBuilder. Well, the plan is to migrate to a fully managed application eventually, but the first step will be to enable custom actions to be written with any .net language, and host those in the unmanaged FinalBuilder IDE. Any new actions we write after that will be managed code. I still have more R&amp;D to do but it looks promising.... stay tuned.&lt;/P&gt;
&lt;P&gt;.v&lt;/P&gt;</description></item><item><title>Icons</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/428/Icons.aspx</link><category /><pubDate>Fri, 11 Jun 2004 07:17:00 GMT</pubDate><description>&lt;P&gt;&lt;EM&gt;Icons are a real pain for us developers - so why do we use them so much?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.finalbuilder.com/tate/articles/286.aspx"&gt;Click here for article.&lt;/A&gt;&lt;/P&gt;</description></item><item><title>Product Activation... how to drive users away!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/382/Product-Activation-how-to-drive-users-away.aspx</link><category /><pubDate>Wed, 09 Jun 2004 19:37:00 GMT</pubDate><description>&lt;P&gt;Last week I had a call from the company that sells the accounting package I use. They had a special upgrade offer going, and since it was on my todo list to upgrade I decided to upgrade. The package arrived this week and last night I went install it. Unusually (well for me at least) I decided to read the doco that came with the disk, and wouldn't ya know it, the product requires activation. If anything drives me nuts it's activation, having had several bad experiences with activation and Microsoft products I vowed never to user products that require activation again. Sadly, that's becoming nigh on impossible these days. &lt;/P&gt;
&lt;P&gt;For some products it's not so critical, but accounting software is a critical part of&amp;nbsp;any business and I won't be put in a position where I can't use it. This particular package requires “re-activation“ every 4-9 months. Have you ever heard of anything so rediculous! Of course they didn't mention this when they sold me the upgrade.&lt;/P&gt;
&lt;P&gt;A word to the wise for software vendors, if you use activation and you have a competitor who doesn't, guess which product I'll be buying( and I'm sure I'm not alone). As for the accounting upgrade, well I'm now looking at alternatives and if I find a decent one I'll be returning the upgrade and switching to one of their competitors. &lt;/P&gt;
&lt;P&gt;.v&lt;/P&gt;</description></item><item><title>Testing the UI</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/427/Testing-the-UI.aspx</link><category /><pubDate>Wed, 09 Jun 2004 01:31:00 GMT</pubDate><description>&lt;P&gt;How does one test the usability of the magnificient UI you've just created?&lt;/P&gt;
&lt;P&gt;I presume that most times, the UI is created with the developers personal tastes in mind and then during a beta cycle, feedback from a few testers may finetune it a bit.&amp;nbsp; Then, when the real users get to it, they may or may not be able to figure out how to use it.&lt;/P&gt;
&lt;P&gt;What would be fantastic, though, if we could watch people using the software to see how they actually use it (or how they actually can't use it...).&lt;/P&gt;
&lt;P&gt;Jon Udell briefly discusses this same thing is his &lt;A href="http://weblog.infoworld.com/udell/categories/infoworld/2004/06/06.html#a1016"&gt;blog&lt;/A&gt;, and points to TechSmith's Morae and UsersFirst's VisualMark (still in beta)&amp;nbsp;as two software packages which “&lt;EM&gt;use live video and screen video, in combination, to observe and analyze how people really use (or fail to use) software&lt;/EM&gt;”&lt;/P&gt;</description></item><item><title>BorCon 2003 (a Lino blast from the past).</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/426/BorCon-2003-a-Lino-blast-from-the-past.aspx</link><category /><pubDate>Tue, 08 Jun 2004 03:39:00 GMT</pubDate><description>&lt;P&gt;Thinking about Lino and his gang, how could I forget Lino at his best from BorCon 2003 ? &lt;IMG src="http://www.atozed.com/shows/BorCon2003/IMG_0291.JPG" width=200&gt; &lt;/P&gt;
&lt;P&gt;Click &lt;A href="http://www.atozed.com/shows/BorCon2003/IMG_0291.JPG"&gt;here&lt;/A&gt; for the full sized image. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.atozed.com/shows/BorCon2003/page0001.html"&gt;Here&lt;/A&gt; is the Photo Gallery of BorCon 2003 through &lt;A href="http://blogs.atozed.com/olaf"&gt;Olaf's&lt;/A&gt; camera.&lt;/P&gt;</description></item><item><title>ADUG FalafelCon....</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/425/ADUG-FalafelCon.aspx</link><category /><pubDate>Tue, 08 Jun 2004 03:36:00 GMT</pubDate><description>&lt;P&gt;The &lt;A href="http://www.adug.org.au/"&gt;Australian Delphi User's Group&lt;/A&gt; recently had a “Mini BorCon” - The &lt;A href="http://www.adug.org.au/meetings/Symposia/2004/Default.htm"&gt;Delphi .NET Conference.&lt;/A&gt; - Hosted by ADUG, by special arrangement with &lt;A href="http://www.falafelsoft.com/"&gt;Falafel Software&lt;/A&gt;, and in association with &lt;A href="http://www.borland.com/"&gt;Borland&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The speakers were: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://homepages.borland.com/dthorpe"&gt;Danny Thorpe&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://falafelsoft.com/Flogs/steve/"&gt;Steve Texiera&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://falafelsoft.com/Flogs/Lino/"&gt;Lino Tadros&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://falafelsoft.com/Flogs/charlie/"&gt;Charlie Calvert&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.glennstephens.com.au/tech/"&gt;Glenn Stephens&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;The hugely successfull event was run over two days in Sydney, and then the presenters repeated the feat in Melbourne. It was a really great event packed with heaps of info and American accents - well, except Glenn of course.&amp;nbsp; It was even funnier that when Lino told the same jokes that he told before, we all still laughed at them - must be the way he tells them :)</description></item><item><title>Snap!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/424/Snap.aspx</link><category /><pubDate>Tue, 08 Jun 2004 01:11:00 GMT</pubDate><description>&lt;P&gt;Was just having a look at &lt;A href="http://homepages.borland.com/cdunn/blog/"&gt;Corbin Dunn's&lt;/A&gt; new blog and noticed all the WRX's that park at the Borland offices...&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.t8software.com/wrx/main.jpg"&gt;This is my ride&lt;/A&gt;&amp;nbsp;- geez, I just love it when it rains :)&lt;/P&gt;
&lt;P&gt;Also, Petter Solberg (Subaru World Rally Team)&amp;nbsp;just won the &lt;A href="http://www.swrt.com/"&gt;Acropolis Rally&lt;/A&gt;.&lt;/P&gt;</description></item><item><title>Coder to Developer - a mini book review.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/381/Coder-to-Developer-a-mini-book-review.aspx</link><category /><pubDate>Tue, 08 Jun 2004 00:06:00 GMT</pubDate><description>&lt;P&gt;I mentioned in&amp;nbsp;an earlier&amp;nbsp;post about a book I had on order called Coder to Developer - by Mike Gunderloy. That book arrived the next day and I've only just had some time to do some reading(while recovering from the flu the last few days).&lt;/P&gt;
&lt;P&gt;I'm not sure sure how to classify this book, it's not a configuration management book as such, and it won't tell you how to write code.&amp;nbsp; What it does attempt to do however, is show programmers how to become well rounded developers, by opening their eyes to the other things (other than coding that is)&amp;nbsp;you need to do to deliver a project. The foreword by Joel Spolsky sums up the book quite nicely, it's about “moving you from a person who can write code to a person who can develop software“. Those of you who think they are the same thing can order your copy right now!&lt;/P&gt;
&lt;P&gt;There are 15 chapters covering topics as diverse as Project Planning, Version Control, Unit Testing, Bug Tracking, Automated Builds, Installers and much more. Of course my favourite chapter is “Chapter 13, Mastering the Build Process”. Mike talks about the need for an automated build process, reasons why you would need it and then covers some of the more affordable build tools. &lt;a title="FinalBuilder" href="http://www.atozedsoftware.com/finalbuilder/" target="_blank"&gt;FinalBuilder&lt;/a&gt; gets 2 pages of coverage including a screenshot (so do our&amp;nbsp;competitors). Oh, and another Atozed product &lt;A href="http://www.atozedsoftware.com/project/"&gt;A to Z Project Billing&lt;/A&gt; &amp;nbsp;gets a mention in Chapter 1 under Time &amp; Billing Tools!&lt;/P&gt;
&lt;P&gt;If you are already using version control, unit testing, automated builds, bug tracking etc then you probably don't need this book (although it might be worth a&amp;nbsp;read just to give you and idea about the alternatives to the tools you already use). If you aren't then this book would be an excellent starting point. If you&amp;nbsp;are moving from being a single developer to a team member in a small team, or you are establishing a small team then this book will&amp;nbsp;be a great help in setting up your team development environment.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Considering the number of developers I've met over the years that don't even use version control, I can see the need for this book to have been written. It's the sort of book I wish I had read when I first started my&amp;nbsp;programming career (when all&amp;nbsp;I wanted to read at the time were books on&amp;nbsp;C &amp; C++). I found it to be an enjoyable read, the writing style is clear and concise and the coverage of each topic is complete enough (given that each chapter could have been&amp;nbsp; a separate book themselves) to get you on your way to becoming a software developer rather than just a code cutter. &lt;/P&gt;
&lt;P&gt;v.&lt;/P&gt;</description></item><item><title>Late Introduction</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/423/Late-Introduction.aspx</link><category /><pubDate>Sat, 05 Jun 2004 07:44:00 GMT</pubDate><description>&lt;P&gt;Ok, I better introduce myself....&lt;/P&gt;
&lt;P&gt;My name is Tate Needham, and I am employed by AtoZed Software as a developer of &lt;A href="http://www.finalbuilder.com/"&gt;FinalBuilder&lt;/A&gt;&amp;nbsp;(the best build automation tool available!).&amp;nbsp; I also do odd bits of contracting work, as well as computer parts and systems retail.&amp;nbsp; Life is pretty busy, work wise, and also because of my two kids and wife!&amp;nbsp; I'm also in the process of putting together a &lt;A href="http://www.t8computers.com/htpc.html"&gt;Home Theatre PC&lt;/A&gt; (HTPC) based on &lt;A href="http://www.mythtv.org/"&gt;MythTV&lt;/A&gt;&amp;nbsp;- which is proving to be quite a challenging learning experience, but that's another story...&lt;/P&gt;</description></item><item><title>Praise for FinalBuilder</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/380/Praise-for-FinalBuilder.aspx</link><category /><pubDate>Sat, 05 Jun 2004 03:19:00 GMT</pubDate><description>&lt;P&gt;&lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; user Steve Troxell just posted this (unsolicited)&amp;nbsp;on the &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; newsgroup.. the kind of post that makes the effort and time to develop &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; all worthwhile. I'm quoting verbatim here :&lt;/P&gt;
&lt;P&gt;I have had &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; for a year or so, but used 2.6 really extensively just this past week. &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; has always been one of my favorite tools (and it ain't easy to get on my "good tool" list) but now I gotta say it is probably the best productivity leveraging tool I have. And I don't just use it for builds....I use it to automate every task I can think of. It is so&lt;BR&gt;much easier and quicker to string together some &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; actions than to write an application...and I can always stick in a little console app anywhere I need extra help...but I'm not forced to do that for everything.&lt;BR&gt;&lt;BR&gt;The "Run &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; Project" action let's me modularize specific tasks quite easily without having to go to the trouble of actually writing a new action plug-in. By making good use of project variables, and surprisingly little scripting, I was able to build a very extensive, reusable build process preamble which works for any application I need to build. This preamble is used as a "Run &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; Project" action at the top of the application-specific FB project and with it, all I have to do is enter a version number, a build number and optionally a VCS label, and I can kick off a build for any application, or any prior version of that application at any time. It even prepares builds of prior versions to compile with an old version of Delphi if that's what was used at the time. The version/build numbers are stored in an INI file in the VCS so usually all I enter is a build number and off it goes. When I start a new application, this FB subproject and a "Compile Delphi" action go into a new FB project, define some project variables, and poof! I have a minimal automated build for the new application that is fully integrated into the VCS and handles automatic version numbering and VCS tasks consistently with all other application builds.&lt;BR&gt;&lt;BR&gt;Sorry, I am usually spending gobs of time discovering and working around problems in third-party software. I am just so happy that &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; works so well and actually gives me back time.&amp;nbsp; I just had to say something.&lt;BR&gt;&lt;BR&gt;Steve Troxell&lt;/P&gt;</description></item><item><title>Configuration Management Books.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/379/Configuration-Management-Books.aspx</link><category /><pubDate>Mon, 31 May 2004 00:47:00 GMT</pubDate><description>&lt;P&gt;Someone recently asked me if I knew of any good configuration management books. I have to confess I that I don't often buy books these days (I have a bookshelf full of books I've never gotten around to reading!) but one book I did buy recently and have&amp;nbsp;been reading is :&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/0201741172/103-6848787-1886210"&gt;Software Configuration Management Patterns - Effective Teamwork, Practial Integration&lt;/A&gt;&amp;nbsp;- by Stephen P. Berczuk &amp; Brad Appleton.&lt;/P&gt;
&lt;P&gt;The book deals with (as you would expect from the title) patterns for configuration management. It has certainly made me stop and take a look at my development environment and practices. The book covers a lot of ground, with a heavy emphisis on version control best practices, but also topics such as automated builds, unit testing etc. &lt;/P&gt;
&lt;P&gt;Chapter 9 - “Integration Build“ talks about the need to do centralised builds, as often as possible. Interestingly, the authors suggest that the centralised builds&amp;nbsp;be “as close as possible to the final product build“ - which is something I'm always saying and is where I got the name &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; from! &lt;/P&gt;
&lt;P&gt;One of the topics that comes up on the &lt;A href="news://news.atozedsoftware.com"&gt;&lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; newsgroups&lt;/A&gt; quite often is how to manage third party components, managing different versions etc. Chapter 10 - “Third Party Codeline”&amp;nbsp;has some nice ideas I'm starting to put in to practice here. I use a lot of third party components as well as some of my own, and managing the different versions etc can be a bit a of a nightmare. &lt;/P&gt;
&lt;P&gt;Another thing the authors focus on in Chapter 6 is the use of “Private Workspaces” for individual developers (and is a pattern that gets coverage throughout the rest of the book). In&amp;nbsp;essence, a Private Workspace is a private branch in your version control. I like this idea a lot, unfortunately branching is still (imho) an area that is still too difficult to use in most version control systems (something I'll&amp;nbsp;post about&amp;nbsp;on another day). &lt;/P&gt;
&lt;P&gt;I'd have to give this book a “Highly Recommended” rating. &lt;/P&gt;
&lt;P&gt;Another book I have on order is “&lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/078214327X/103-6848787-1886210"&gt;Coder to Developer: Tools and Strategies for Delivering Your Software&lt;/A&gt;“ - by Mike Gunderloy. Mike's an avid &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt; user and has written about it a few times&amp;nbsp;before for &lt;A href="http://mcpmag.com/backissues/columns/article.asp?EditorialsID=514"&gt;MCP magazine&lt;/A&gt;&amp;nbsp;and &lt;A href="http://www.adtmag.com/article.asp?id=8626"&gt;ADTMag.com&lt;/A&gt;, so it will be an interesting book to read. I'll post some comments here when I finally get it in my hands (incredibly, it takes 2 weeks for amazon to ship to Australia, a message in a bottle wouldn't take that long!).&lt;/P&gt;
&lt;P&gt;.v&lt;/P&gt;</description></item><item><title>How do you read blogs?</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/422/How-do-you-read-blogs.aspx</link><category /><pubDate>Fri, 28 May 2004 22:00:00 GMT</pubDate><description>&lt;P&gt;I've just started to use &lt;A href="http://www.bradsoft.com/feeddemon/index.asp"&gt;FeedDemon&lt;/A&gt; from Bradbury Software to read blogs... very nice piece of software I must say.&lt;/P&gt;
&lt;P&gt;You can set up channel groups and&amp;nbsp;watches, it's very easy to add new rss feeds (and it discovers them automatically), and it has a cool “Group Newspaper” feature that shows the latest posts of a group in a newspaper type layout.&lt;/P&gt;</description></item><item><title>Dan Miser talks about automated builds.</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/378/Dan-Miser-talks-about-automated-builds.aspx</link><category /><pubDate>Fri, 28 May 2004 21:15:00 GMT</pubDate><description>&lt;P&gt;I was just trolling the blogsphere (I'm trialing Nick Bradbury's FeedDemon, makes reading blogs as easy as reading newsgroups!) and came across Dan Miser's blog. Dan's a legend in the delphi world for his work with the Midas technology(something that never lived up to it's potential due to Borland's licensing fees), and he recently posted about Automated builds (even mentions &lt;A title=FinalBuilder href="http://www.atozedsoftware.com/finalbuilder/" target=_blank&gt;FinalBuilder&lt;/A&gt;).&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://distribucon.com/blog/archive/2004/05/19/238.aspx"&gt;http://distribucon.com/blog/archive/2004/05/19/238.aspx&lt;/A&gt;&lt;/P&gt;</description></item><item><title>Virtual Worlds</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/421/Virtual-Worlds.aspx</link><category /><pubDate>Fri, 28 May 2004 19:43:00 GMT</pubDate><description>&lt;P&gt;Came across this very interesting article this morning:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.walrusmagazine.com/04/05/06/1929205.shtml"&gt;http://www.walrusmagazine.com/04/05/06/1929205.shtml&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;It talks about virtual worlds, and more specifically how they actually have real economies.&lt;/P&gt;
&lt;P&gt;“[EverQuest]&lt;EM&gt; was the seventy-seventh richest country in the world. And it didn't even exist.”&amp;nbsp;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Quite amazing actually; people trade virtual goods in the real world and some people actually make their living from it.&amp;nbsp; I'm downloading There.com just to have a look what all the fuss is about - although, I know I don't have time to play the game properly... unless I get hooked of course ;)&lt;/P&gt;</description></item><item><title>I never knew it could do that..</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/377/I-never-knew-it-could-do-that.aspx</link><category /><pubDate>Fri, 28 May 2004 09:27:00 GMT</pubDate><description>&lt;P&gt;We recently moved our website, mail&amp;nbsp;and news servers to our own nice new dedicated dual xeon server. If you've ever had to move servers then you've probably spent plenty of time on it. I had no idea how time consuming it was going to be this time, even though I'd done it the previous time we moved (no, we're not planning on moving again for a while!). &lt;/P&gt;
&lt;P&gt;One of the main challenges was getting the files across to the new server and making sure I picked up any changes made since the initial copy (which i did using leechftp). I went looking for a tool to do this and came across a reference to Beyond Compare. I've been a Beyond Compare user for a few years now and love the tool but I didn't realise it did FTP Synchronise! &lt;/P&gt;
&lt;P&gt;Makes me wonder, what other tools do I have with hidden gems just waiting to be discovered (well by myself at least!). &lt;/P&gt;
&lt;P&gt;PS. Oh, and in case you're wondering, BC handled the ftp sync with ease (fortunately both servers are in&amp;nbsp;dallas and have a 10mbit connection between them, even though they are in different data centres). &lt;/P&gt;</description></item><item><title>Ok, so now what...</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/376/Ok-so-now-what.aspx</link><category /><pubDate>Fri, 28 May 2004 09:03:00 GMT</pubDate><description>&lt;P&gt;Well, I spent the day configuring .Text, it's all working nicely now, even the aggregate page (after some time scouring the asp.net forums!). So now I guess it's time to start blogging.&lt;/P&gt;
&lt;P&gt;Firstly, let me introduce myself to those of you who don't know me :)&lt;/P&gt;
&lt;P&gt;My name is Vincent Parrett, I'm&amp;nbsp;one of the founders of&amp;nbsp; Atozed Software (along with Chad Hower) and the author of FinalBuilder, our Automated Build Tool. I live in Canberra, Australia, married with 3 kids &amp; a dog. I work from home in my purpose build home office (inside my very large garage), probably for more hours a day than is healthy. &lt;/P&gt;
&lt;P&gt;Configuration management is an area I have a keen interest in, so you can expect me to at least write something about along those lines. Of course I'll be writing plenty about automated builds in particular.&lt;/P&gt;</description></item><item><title>1st post</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/420/1st-post.aspx</link><category /><pubDate>Fri, 28 May 2004 02:19:00 GMT</pubDate><description>Righto... here we go...&amp;nbsp; ummm.. testing...</description></item><item><title>.Text up at last!</title><link>http://www.finalbuilder.com/Resources/Blogs/PostId/375/Text-up-at-last.aspx</link><category /><pubDate>Thu, 27 May 2004 23:59:00 GMT</pubDate><description>I finally managed to get .Text up &amp; running.. if ever there was a need for an installer... 4hrs of applying forehead to space bar to get this far!</description></item></channel></rss>