• 30Jun

    Another maddening bout with misleading error messages.

    Running the build on our build server using nant worked perfectly. That is until CruiseControl.Net tried to run it and I got

    Invalid element <msbuild>. Unknown task or datatype.

    I installed nantcontrib in the same folder as nant so it just automatically picked up the additional tasks. Everything pointed to something different in the environment, but what? I finally tried loading the tasks explicitly from the nant build file using:

    <loadtasks assembly="${path::combine(nant::get-base-directory(),'NAnt.Contrib.Tasks.dll')}" />

    and I got an error message that was actually helpful:

    Failure scanning "C:\Program Files\Nant\bin\NAnt.Contrib.Tasks.dll" for extensions.
    Could not load file or assembly 'file:///C:\Program Files\Nant\bin\NAnt.Contrib.Tasks.dll' or one of its dependencies. Access is denied.

    Ah… Permissions. A quick check on the permissions revealed that for some reason the nantcontrib files had different permissions from the rest of the files in the folder which didn’t allow the ccnet service to see them. I won’t even try to understand why the permissions end up that way, but just chalk it up to one of the ‘joys’ of working with Windows.

  • 29Jun

    It took way longer to set up an msbuild using the nant msbuild task than it should have.

    I started out with:

    <msbuild project="Solution.sln">
    <property name="Configuration" value="Release"/>
    <property name="OutDir" value="${dir.output}"/>
    </msbuild>

    I got a error message saying that the OutDir needed to end in a slash. So I changed it to this:

    <msbuild project="Solution.sln">
    <property name="Configuration" value="Release"/>
    <property name="OutDir" value="${dir.output}\"/>
    </msbuild>

    Which lead to the not so helpful error message ‘illegal characters in path’. Only the path was as simple as can be without any possible illegal characters or spaces or anything. After hours of searching I found a comment at the bottom of this blog post with the trick. I need two slashes at the end of the path!

    Here is the code that worked:

    <msbuild project="Solution.sln">
    <property name="Configuration" value="Release"/>
    <property name="OutDir" value="${dir.output}\\"/>
    </msbuild>

    Obvious, right? ;-)

  • 29Dec

    Over the last 10 years, there have been great advances in many areas of our personal lives affecting the way we communicate and interact with the world. However, when it comes to Personal Finance, we are stuck in almost the same place. There is no effective main-stream, mass-market personal finance solution.

    Quicken has been the top of the market for years, but I argue that the market is narrow. It doesn’t come close to iTunes, iPhoto, Facebook, or Flickr. I am one of a minority of people that are meticulous about personal finance. Having used Quicken for years, I tracked every transaction enabling detailed reports on spending, budgeting, and investments at my fingertips. As much as tools like Quicken have improved upon the manual process of 20 years ago, they still require a good amount of time to remain useful. If the data is not up-to-date, then the reporting had no value. And most people have no interest in spending the time on something as uninteresting as personal finance.

    This is The Personal Finance Problem.

    The solution must address a number of issues.

    1. Automation. Most people don’t care enough about personal finance to spend much, if any, time on it. The solution has to be automatic. Tools like Quicken provide the ability to download transactions from a bank which is a step, but not automatic. Services like Mint and Wesasbe take it a step further, but suffer from compatibility and other issues.

    2. Infrequency. It must allow for people to look at their finances only a couple times a year and get value with a minimum expenditure of time. Automation helps with this, but there are other obstacles such as limitations imposed by banks only allowing access to the last couple months of transactions. Also the raw data has to be transformed into useful information which generally requires some sort of categorization.

    3. Strategic. The tools must be focused on the strategic, providing information and insight for making decisions. When people do spend the little infrequent time that they have on personal finance, the value is not derived from tedious activities such as reconciling accounts, paying bills, and entering or categorizing transactions. It needs to quickly answer simple questions such as ‘How much have I saved this year?’ or ‘Can I afford to go on this big trip?’.

    4. Security. People are funny about protecting their financial information. While they may publish every detail of their lives on Facebook and Twitter, they won’t do the same with their bank account. Perhaps this is due to legitimate concerns about security, or perhaps it is to avoid embarrassment.

    So why am I writing about this? Basically, I am tired of managing personal finances and surely the solution lies in software. I spend too much time on the tedious and not enough on the strategic. There has to be a better way. In the next few posts, I plan to write a bit about some of my experiences and observations. It won’t be a complete review of products and services, but will evaluate some of the ones that I have looked at and the shortcomings of each. I can only hope that with time, someone will solve The Personal Finance Problem.

  • 28Jul

    Earlier this year a new member of the dev team convinced us we should use Sandcastle to generate documentation for our C# code. I like the idea of publishing documentation and didn’t have anything yet, so gave the go-ahead to set it up. We ran into all sorts of issues, but after several days finally got it working with our continuous integration and automatically published the documentation our dev server. I was pleased.

    The problem is, nobody used it. The output was only organized by namespace and didn’t have any type of search. So you have to guess the namespace and drill down to find what you are looking for. It felt like a reference book without an index.

    After running across some recommendations for Doxygen and reviewing sample output, I thought I would give it a shot. I played around with it for a bit then set it up with CruiseControl.net and publishing to our build server within a couple hours.

    Beautiful!