jeffcal's blogland

rem koolhaas couldn't build better than us!

  • and now for a change of pace

    over the past year or two, i've only inconsistently updated my blog, and each time i've promised to write more frequently.  now it's time to live up to my promises.

    as most of you know, we're wrapping up whidbey and getting very close to shipping this product we've been working on for the last several years of our lives.  much of your feedback has directly affected what we're shipping and i think you'll be happy with what we're offering.  msbuild can help you and your organization solve many complex problems, and it can also improve your experience performing some of the simple tasks you do all the time (in some cases without even knowing it).

    so given that we're about to ship very broadly and many new users will no doubt get their very first introductions to msbuild, i'd like to spend some time over the next couple of months explaining the basics of how to use msbuild.  you'll of course be able to find much of this information at msdn, but my aim here is to focus on the broad picture and explain with clear language how to get things done.  additionally, i'd like to weave into the discussion some insights into the design and development of msbuild, which msdn most likely won't offer.  from time to time i may have to recruit other team members to provide their expertise when i think my explanation may not be adequate.  hopefully if we build from the basic blocks, we can work our way up to some of the cool stuff later.

    as always, keep in touch!  if you think i missed something, or i don't explain something clearly, or in general you have any feedback for me, then let me know!  it's likely others share your question or issue and they'd also benefit from having it addressed.

    let's go!

    jeff.

  • building everett apps with msbuild

    check out this post from mark michaelis, where he describes the work he did to build everett apps with msbuild.

    many customers are tackling this problem and it's encouraging to see them meet it with success.

    jeff.

  • early msbuild documentation

    there's an msbuild wiki over at channel 9, and there's a good preview of the msbuild documentation over at msdn:

    http://msdn2.microsoft.com/library/0k6kkbsd.aspx

    as always, feedback is welcome (and encouraged).

    jeff.

  • don't interrupt unless it's important

    anyone know of a tool i could dock in the system tray which can alert me to new exchange mail if and only if the new mail meets some criteria i set?  i'd like to leave outlook closed most of the day while i work without missing the high pri mails (eg, those nifty requests to "update" my aol account information).

    jeff.

  • water cooler

  • important: we need your feedback

    lately it seems like i've been pointing a lot at other content rather than providing too much of my own; i'll continue that trend today with the promise to change it tomorrow. 

    but this one's particularly important:  alex kipman, the msbuild program manager, has posted an important call for input from the community regarding how msbuild ships.  please go share your opinion with him, we want to hear from each of you.

    jeff.

  • everyone wants it...

    easily one of the top requests we get from customers is support for targeting msbuild to the everett (1.1) framework.  well jomo's recently posted an instructional explanation of how one might approach this problem.  and now robert mclaws has taken that and run with it to try to make it more versatile...  frankly, i'm excited to see customers already using our product to accomplish their work even when we can't explicitly support it.  i think that speaks volumes about both the ingenuity of our customers and the versatility of our product.

    jeff.

  • new msbuild wiki

    over at the nunitaddin blog, there's a post announcing a new msbuild wiki maintained by external customers and developers.  i'm sure you'll find a few of the msbuild team members contributing there too.  please share any interesting resources/tips with others!

    keep your eyes open for the official msbuild site/wiki coming soon.

    jeff.

  • the sequel

    once again, the msbuild team will be packing our bags and heading to a secret location to fix as many bugs as possible.  hopefully it will be as successful as last time.  unfortunately, we'll be missing some of the helping hands we had last time, but maybe we can pick up a free agent or two.  either way, i'll keep you posted.

    jeff.

  • msbuild developer jomo fisher has joined the blogging ranks

    one of the devs on msbuild, jomo fisher, has just started a new blog.  check it out - he knows his stuff!

    http://blogs.msdn.com/Jomo_Fisher/  (RSS)

    ciao-

    jeff.

  • debugging a build process - what works for you?

    building a large piece of software can take a very long time.  combine the times to compile and link with syncing sources, running test suites and unit tests, mailing a build report, copying the bins over the network, etc. and you have a process that can easily take hours.  what happens when some step in this process fails? 

    i'm curious what those of you out there do. 

    how do you track the problem down?  how do you correct it?  how do you carry on with the build?  do you rely solely on the build's logs?  do they normally contain the information you're interested in?  what information are you interested in?  do you try to repro the problem?  does dependency analysis save you the trouble of again running those parts of the build which were successful?

    let me know :)

    jeff.

  • reducing our bug backlog, or why "The MSBuild team rocks!!!"

    it's been nearly eight weeks since my last post, but i promise i've been doing something for you!  and i can easily account for one of the eight with an explanation of what my whole team did just last week.

    recently a couple teammates were trying to think about what issues they were concerned about resolving before we could ship a great first version of MSBuild.  they weren't talking about specific bugs or work items, but more generally about the mileage between that day and the day we ship, and how we can make sure we cover that distance.  reducing our bug count came up for several reasons:

    1.  lately the count has been pretty flat.  in other words, the number of bugs we resolve (fixed, doesn't repro, by design, ...) has been roughly the same as the number of bugs people are opening.

    2.  devs have lots of other work to do aside from fixing bugs.

    3.  some important but lower priority bugs were starting to look ripe for kicking down to version 2 (which makes no one happy).

    4.  fixing bugs seemed like something program managers and testers could help the developers with.  and if we (the testers) were fixing bugs, presumably we wouldn't be finding them....more on that later.

    a plan was set:  for one week, the MSBuild team - developers, program managers, and testers - would all sit in the same conference room in an unusual building (read:  far away from the people most likely to distract us) while fixing MSBuild bugs on our laptops.  we wouldn't answer mail, wouldn't have phones, wouldn't go to meetings, and wouldn't work on anything other than fixing bugs.  period.  there were obviously some initial concerns about this:  who would take care of our dogfooders?  which bugs would we fix?  could testers and program managers even fix bugs?  what would make this a success?  we came up with the answers we could but otherwise dove straight in hoping we'd accomplish something.  at the very least, this experiment would be a week of doing something different and exciting, and there was potential for significant results. 

    let's start with what we were facing:  at 12:01 AM on monday the 26th, there were 437 bugs without an available fix open against MSBuild.  to put this number in perspective a bit: the bug count sat just above 300 from early february to late april, before steadily rising to just under 450 from late april to mid june.  for the next six weeks, we hovered there at about the same spot.  over the past six months, our bug count had increased by about 50%.

    so there was a lot of work to do.  the first obstacle:  the conference room we'd reserved as our temporary home wasn't on any building maps and the receptionist had no idea where it was.  we feared the mysterious room was a black hole, but a recent admission by steven hawking allayed those fears.  once we'd all discovered the room, we fixed bugs.  and read bugs we thought maybe we could fix.  and fixed bugs.  and read the same bugs we thought we could fix before but still didn't know how to fix.  and fixed bugs.  and talked about fixing bugs.  and fixed bugs.  we also ate a few dozen krispy kreme donuts, a lot of bagels and cream cheese, sumedh's banana, and even some pizza with indian food on top of it.

    by the end of the week, we'd all learned a lot and several of us had new nicknames (not all of which were desirable).  the developers were especially patient while helping the others out with everything from process details to code reviews to discussions of potential fixes.  the testers actually did open nine new bugs during the week.  eight of those were opened by our resident star tester dan, who finds bugs while putting his shoes on.  i personally learned a ton about our codebase and debugged more managed->unmanaged transitions than the mariners after piniella's been tossed.

    here's the details though: 

    Monday 12:01 AM:  437 unfixed bugs
    Friday 11:59 AM:  264 unfixed bugs

    frankly, we'd hoped to reduce the count by about 100 for the week, or about 2/person/day.  in fact, we were able to reduce the count by about 3.5/person/day, even including the 16 new bugs opened over the week.  these numbers deserve a few qualifications:  our goal was simply to reduce the bug count by as much as possible, so many of us chose the easiest bugs to fix rather than the most important bugs; we don't yet know how many new bugs we introduced, or how the regression rate compares to the usual scenario when only developers are working on the codebase; some of us actually did read our mail during the week (and deserve slaps on the wrists!).  but no matter the qualifications, it was a great success and discussions are already underway about when we should do it again.  it'd be nice if our work will encourage other teams to try similar experiments. 

    hopefully MSBuild will be a better product when we ship it because of this experiment; i personally think it will.

    jeff.

    ps - i'll write sooner next time!

    [Edit: removed link]

  • dependency analysis in msbuild

    when people first get their hands on msbuild, especially those familiar with other build systems, one of the first things they notice is msbuild's dependency analysis mechanism.  the msbuild engine offers basic dependency checking based on explicitly declared target inputs and outputs.  currently, the analysis is pretty simple, although helpful in many cases:  msbuild checks output timestamps and input timestamps and if some of the outputs are older than some of the inputs (i'm glossing over details here), the engine will execute the target.

    users of other build systems have pointed out a fairly obvious limitation of this mechanism:  dependency analysis often must be more complex than timestamp checking.  i couldn't agree more.

    however, this limitation of msbuild's dependency checking mechanism should not be mistaken for a limitation of msbuild itself.  reason:  the author of a project file is not strictly limited to using the msbuild engine for her dependency checking, nor is she required to allow the engine to perform any dependency analysis at all!  furthermore, and most importantly, this mechanism (whether opting in or out) in no way precludes tasks from performing their own dependency analysis at any level of precision they'd like, exactly as many (N)Ant tasks do today.  the resgen task our team has developed does just this.  we found in some cases simple filestamp checking would lead to skipped calls to resgen when they were actually required, so we simply moved the dependency analysis from the target level to the task level and voila! problem solved.

    all this still leaves room for the engine to do more complex analysis while still exposing more control over it to the user, and we're thinking hard about how to make that happen.

    jeff.

     

  • coming soon: wix tasks for msbuild

    hey y'all, and sorry i haven't written in a couple of weeks.  we're working hard to ship our first beta of msbuild right now so my blog unfortunately sat down with a hefty piece of neglect pie.  but i'm back now (to the three of you who actually read this; well, two of you if i can't count my mother). 

    as many of you know by now, microsoft has dipped its toes into the open source waters by opening up the wix project to the community.  a wise dev on my team pointed out that the wix open source announcement was followed almost immediately by a few requests for msbuild tasks which wrapped the core wix tools.  so on my backburner for the past month has been figuring out how to make sure this happens.  i started by reading a little more about wix and thinking about how it should fit into the build process, and finally before typing any code decided to ask if anyone else at microsoft had endeavored to create such tasks.  i was silly to ask “if” rather than “who” because within about twenty minutes i'd learned that one of our top dogfooders (in another state no less) had already authored working versions of the tasks!  so we're going to work with the wix guys to make sure these useful tasks see the light of day outside microsoft too...

    in other task development news, i recently stumbled across some frustrating fusion loading issues, presented to me in the concise, if not elegant, form of HRESULT 0x80131040.  i haven't quite tracked down exactly what the problem is but i'm certainly having fun trying.

    have a good memorial day weekend.  i'll be watching “fishing with john“ and a couple of sergio leone/clint eastwood westerns...

    jeff.

  • today on dr. phil: resolving conflict among dependencies

    Since joining the MSBuild team, I've learned more than I ever thought imaginable about .NET references and dependencies, largely because I'm responsible for testing the ResolveAssemblyReference task we'll be shipping as part of our task library.  Between my testing of that task and the patient guidance of one of our developers, I've learned about many of the intricate details of reference resolution.  It's amazing to me how much this thing can do, and how many scenarios rely on this little (ok, well, not so little) task in one way or another. 

    One cool new feature in Whidbey is at build time the ResolveAssemblyReference task can automatically choose the latest versions of your references and dependencies.  So if I have some cool MusicWidget in my app which depends on Version 1.0 of WidgetBackend.dll but my MovieWidget depends on Version 2.0 of WidgetBackend.dll, the ResolveAssemblyReference task can ensure my app is compiled with Version 2.0.  In most cases, when the owners of WidgetBackend.dll are playing nicely and maintaining backwards compatibility, this is exactly what I'd want, but I'd rather not have to worry about the details of which versions of support files my widgets are using.  I just want to use my widgets!  Of course, there will still be cases when for one reason or another I'm not prepared to migrate to Version 2.0, and I'll be able to direct the ResolveAssemblyReference task to still use the old version if so.

    Similarly, 99.99% of apps written against version 1.1 of the .NET Framework will depend on some Framework assembly such as System.dll or System.Data.dll.  When you install the Whidbey .NET Framework and rebuild your apps, the ResolveAssemblyReference task will see your Whidbey .NET Framework and pick those versions of System.dll and System.Data.dll for the compiler to use.  And you won't even have to so much as browse to a file on disk.  Of course the same provision applies here for those who aren't ready to move all of their dependencies to Whidbey:  you can just tell MSBuild to use the specific version you've been using all along.

    Hopefully the work we're doing in this area will give developers confidence in choosing the right solutions for their problems rather than worrying about what new problems may be introduced by their solutions...

    jeff.

More Posts Next page »

© 2008 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker