Scott Hanselman

ScottGu MVC Presentation and ScottHa Screencast from ALT.NET Conference

October 9, '07 Comments [78] Posted in ASP.NET | ASP.NET MVC | Microsoft | Programming | Ruby | Screencasts | Silverlight | Speaking
Sponsored By
ScottHaOnDLRandMVCatALTNET

I attended the ALT.NET Conference last weekend in Austin, TX. I personally find the name "Alt" as in "Alternative" too polarizing and prefer terms like "Pragmatic.NET" or "Agile.NET." At the conference I suggested, partially in jest, that we call it "NIH.NET" as in "Not Invented Here.NET." ;)

Ultimately this is a group that believes in:

  • Continuous Learning
  • Being Open to Open Source Solutions
  • Challenging the Status Quo
  • Good Software Practices
  • DRY (Don't Repeat Yourself)
  • Common Sense when possible

I asked "Why is this alternative," and Martin Fowler echoed those sentiments. When I was at Corillian we were using NAnt, NUnit, Subversion, NCover, NDoc, NDepend, CruiseControl, Watir/Watin and Ruby and we practiced Scrum with an Agile Coach. Did that make us alternative or were we just getting the job done? We made practical and pragmatic decisions and it worked out OK.

Whether this is Alternative .NET or just Practical .NET, it's a conversation and that's a a good thing.

ScottGuOnMVCatALTNETScottGu gave an hour long presentation on the upcoming MVC Framework and I took some guerilla video. ScottGu's presentation is here in Silverlight and it's about 60 minutes long. Considering it's so long, the video squished nicely.

This was the first time the MVC Framework was shown publicly.  Note that this was a Prototype, not the Production code and both ScottGu and I make that point a number of times to drive home that it's early. Some of the code was written on a plane, just to give you an idea.

After The Gu did his piece on the MVC Framework, I showed some prototype hacking that I'd done over the previous few days along with some work Phil Haack did. My presentation is here as Silverlight and it's about 30 minutes long. I showed the Model View Controller with Controllers in IronPython and an IronPython view using a WebFormViewEngine. Then I talked about the possibilities of alternate ViewEngines and showed Phil Haack's prototype RubyViewEngine.

Both talks show lots of code. Of course, this is prototype madness. No warranty, express or implied. Features come and go, but I hope this shows that we're committed to aiming for as much awesomeness as is humanly possible. I hope you enjoy them, even though my webcam hand was shaky after an hour. I used a new Microsoft NX-7000 Lifecam for the recoding - it's a great camera for the Alpha Geek. ;)

Here's the videos I promised:

If you want to link to these, link to this post, not those links, as the videos might move around. Thanks.

Here's some of the buzz around the new Framework. I hope this framework is a harbinger of things to come in future frameworks.

Things are looking up.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

REMINDER: Register TODAY for the Fight Diabetes with Halo 3 Big Screen Party

October 9, '07 Comments [3] Posted in Diabetes | Gaming
Sponsored By

Just a reminder if you're in Portland or SW Washington that now is the time to register for the Halo at Cinetopia for Diabetes Party. You need to pre-register and please, do tell your friends and family! Let's fill it up!

WHAT

We're renting out TWO SUPER HIGH DEF (2048p) 50 foot Movie Theaters and playing Halo. There will be soda and popcorn and pownage. Eighteen and older please.

WHERE

The Glory and Wonder that is Cinetopia just over the bridge in Vancouver.

WHEN

The event is this Thursday, October 11th from 7pm to Midnight.

HOW

Your donation of $25 or more at the door will go straight to the America Diabetes Association. You can also pre-donate and bring your printed receipt to the door. We have room for only 120 people so register today!

Register for this event at http://iammasterchief.com/ with the RSVP code "FIGHTDIABETES". The event is Thursday, October 11th from 7pm to Midnight.

Note that the banner in the upper left of the reservation site does mention the “PRELAUNCH PARTY 09 24 07” even though the center box shows “10/11/07 – Cinetopia”. Just make sure to use the right RSVP code.

WHY

Because it's Halo. And to Fight Diabetes.

We'll see you there!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Mixing Languages in a Single Assembly in Visual Studio seamlessly with ILMerge and MSBuild

October 6, '07 Comments [13] Posted in ASP.NET | Microsoft | Programming | XML
Sponsored By

I really like the new LINQ to XML direct language support in VB9. However, while it's cool, I'm not ready (or willing) to dump C# and start using VB. But, if I could only use VB9 just for the XML stuff...

Sure, I could create a VB assembly and a C# assembly and add them to a solution, but then I'd have two assemblies. I could add a PostBuildEvent batch file and call ILMerge myself (merging the two assemblies into one), but that just doesn't seem pure enough.

solutionWhat I really want is to be able to mark an assembly as merge-able and have it automatically merged in just because it's referenced.

Here's what I came up with. Thanks to Dan Moseley and Joshua Flanagan for their help. Thanks to Jomo Fisher for the Target File.

First, here's the sample project. There's a C# MergeConsole.exe that references a C# MainLibraryILMerge.dll that references a VB XmlStuffLibrary.

If I compile it as it is, I get a folder structure that includes three resulting assemblies.

folder1

Now, here's were we start messing around. Remember, we don't want to have the extra VB-specific XmlStuffLibrary right? We just want to use the XML features.

First, download and install ILMerge in the standard location.

Now, go to C:\Program Files\MSBuild (or C:\Program Files (x86)\MSBuild on x64) and make a new text file called "Ilmerge.CSharp.targets". This file is the start of a hack we're going to borrow from Jomo Fisher.

Note the red bits in the file below. We're creating an "AfterBuild" target...a Post Build Event in the MSBUILD world.

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
    
  <Target Name="AfterBuild">
    <CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true' and '%(ReferencePath.IlMerge)'=='true'">
      <Output TaskParameter="Include" ItemName="IlmergeAssemblies"/>
    </CreateItem>
    <Message Text="MERGING: @(IlmergeAssemblies->'%(Filename)')" Importance="High" />
    <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" />
  </Target>
  <Target Name="_CopyFilesMarkedCopyLocal"/>
</Project>

In this target, we're going to look for assemblies that are marked CopyLocal but also that have IlMerge equal to true. Then we'll call IlMerge passing in those referenced assemblies.

Is this some undocumented MSBUILD thing? No, you can put whatever you want in an MSBUILD file and refer to it later. Since CSPROJ files (Visual Studio Projects) are MSBUILD files, we can open it in Notepad.

Open the CSPROJ for the C# project that references the VB one and make these changes: 

... 
<ItemGroup>
   <ProjectReference Include="..\XmlStuffLibrary\XmlStuffLibrary.vbproj">  
    <Project>{someguid}</Project>    
    <Name>XmlStuffLibrary</Name>
    <Private>True</Private>
    <IlMerge>True</IlMerge>
  </ProjectReference>
</ItemGroup>  
<Import Project="$(MSBuildExtensionsPath)\Ilmerge.CSharp.targets" />
<!-- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> -->
...

At the bottom there, we're commenting out Microsoft.CSharp.targets (but notice that it's included back in at the top of the new  Ilmerge.CSharp.targets.

Then a totally made-up element <IlMerge> is added. That's the most important part. We're saying we want this specific Reference (or References) merged into the final assembly. This made-up element is referenced in the conditional "'%(ReferencePath.IlMerge)" above in the AfterBuild.

The addition of this IlMerge element to Jomo's original hack gives me the flexibility to pick which references I want to merge in, and in my specific case, I'll use the VB9 new XML hotness inside my C# assemblies. Schwing.

Close and save. If you're running Visual Studio, switch back there and it'll prompt you to Reload your project file.Because we've messed it it, you'll get this warning dialog. Select "Load project normally" and click OK.

Security Warning for MainLibraryILMerge

At this point we can build either from the command-line using MSBUILD on the Solution (SLN) file, but more importantly we can (of course) build from inside Visual Studio.

MergeConsole - Microsoft Visual Studio

You can see the output in the Output Window in VS.NET.

MERGING: XmlStuffLibrary
"C:\Program Files (x86)\Microsoft\Ilmerge\Ilmerge.exe"
  /out:bin\Debug\MainLibrary.dll "obj\Debug\MainLibrary.dll"   
  "C:\dev\CSharpVBTogetherAtLast\MergeConsole\XmlStuffLibrary
  \bin\Debug\XmlStuffLibrary.dll"

And the results in the bin folder:

folder2

Looks like the VB XmlStuffLibrary is gone! But where it is? Let's load up MainLibrary in Reflector:

reflector1

Looks like they are both in there. To refresh, if I want to merge in VB assemblies:

  • Change the referencing CSPROJ to import "IlMerge.CSharp.targets"
  • Add <IlMerge>True</IlMerge> to the references you want merged in.
  • Save, Reload, Build

C# and VB, living together, mass hysteria!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

The Red Ring of Death makes itself known

October 4, '07 Comments [32] Posted in Gaming
Sponsored By

CIMG7489Crap. Now what?

I wish I know exactly what causes/caused this.

Last night Mo said the Xbox locked up hard while she was listening to her Zune. She thought she broke it. Reboot and we were fine.

Later, I wasn't able to connect to the Windows Home Server to stream pictures. Reboot and the Xbox locked up while in the "splash screen" presentation.

Smells like heat. I unplugged everything and plugged it back in again and it's working fine. Haven't had a problem since.

However, this was the FIRST and only time I ever had any trouble with the thing. It's a "launch day" Xbox360 with the add-on 120gig drive. I'm wondering if I should send it in for a replacement or just get an HDMI-enabled 1080p model.

Sigh.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Hanselminutes Podcast 83 - Microsoft to release .NET Framework Libraries Source

October 3, '07 Comments [22] Posted in Learning .NET | Microsoft | Podcast
Sponsored By

2swan-asa3 Yes, you read that correctly. Microsoft is releasing the source code to a bunch of .NET Framework Libraries under the "Microsoft Reference License." This means you can view the source for reference, but not for recompilation, etc.

This is a lot like Symbol Servers, which I've talked about on the blog before, but this'll be a "Public Source Server" (Source Servers are an old concept, but rare to see in the wild) so that you be a able to debug seamlessly between your code and the Framework's code.

In my first "scoop" in my new job at Microsoft, I've already got a show ready for you, recorded last week! See, I told you I'd take care of you. 

This show is actually an interview with Shawn Burke the mastermind behind this move who posted his intent to make this happen on his personal blog in 2005! His current job is being in charge of the Ajax Toolkit, but he's been working on this source code release idea for years - plural.

Support for this new public Microsoft .NET Source Server feature will be in Visual Studio 2008 when it comes out later this year. It'll be a simple setup process and you'll be on your way to "Stepping Into" the code.

We talk on the podcast about the differences between using Reflector to look at source and looking at the source itself. We ask Shawn about Source Servers vs. Symbol Servers, and how Microsoft is going to size their network to support the demand.

dlprocess_thumb

As soon as I have details on how this configuration process will work, I'll let you know. I suspect it'll be very similar to the way Symbol and Source Servers work today in Visual Studio.

Enjoy!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.