Monday, October 30, 2006
Video Recommendations
- Chad Vader: Day/Night Shift Manager. These shorts chronicle the comic tales of Darth Vader's hapless cousin. Chad begins as the day shift manager at Empire Grocery, but is demoted to working the night shift, separating him from his heartthrob. Despondent at losing her and his former position to his nemesis, Lord Vader struggles to find the will to go on. These episodes are worth watching simply for title montage in which the dark lord plucks an apple from a produce display with his force powers while a morose acoustic guitar lethargically thrums the Imperial March.
-
My Country, My Country. When I learned of this documentary about Iraq in the 6 months prior to the January 2005 election, I assumed that it would make a compelling case against the US's involvement. I was wrong. The film is a series of poignant scenes, such as a mother and grandmother encouraging a daughter to swat a fly, surreally immune to the ambient pounding of gunfire and mortars. The candidacy and home life of a Baghdad doctor tie together these scenes. Following Doctor Riyadh allows the viewer to see a rich cross section of the Iraq capital's life from the abduction for ransom of a fellow physician's son to supporting emotionally and financially a woman whose husband only leaves the house to consort with Muqtada al-Sadr and even a trip to Abu Ghraib to evaluate prisoner health. The catch-22 of the America's position is subtly laid out: conditions are terrible for Iraqis and coalition troops and contractors, but clearly would be worse if the government fell. While I offer kudos to PBS for airing this work, I must admit this show is not for everyone: Elizabeth fell asleep watching.
On an entirely separate level, the film is fascinating because its creator has been placed on the terrorist watch list with the highest possible threat rating. According to Laura Poitras:
Since finishing My Country, My Country, I've been placed on the Department of Homeland Security's terror watch list. Returning to the U.S. in August 2006 after screenings in Europe, I was detained at two airports. In Vienna, I was escorted out of the terminal to a police inspection area and was notified by security that my 'threat rating' was 400 points — the highest the Department of Homeland Security assigns. Upon arrival at JFK airport, I was again escorted by security to a holding area until Homeland Security gave permission for me to enter the country.
Monday, October 23, 2006
Credit where credit is due
The ("Nerdy") video has gotten a lot of attention, and the proliferation of places like YouTube (has) been a big help.I'd kind of written off the chance of ever having another hit single, since record labels weren't really releasing commercial ones. As much as people are griping about the Internet taking sales away from artists, it's been a huge promotional tool for me.
Friday, October 20, 2006
It's not tool use, but...
From Ursi's Blog
Tuesday, October 17, 2006
Quote o' the Day
If you're looking for the next foreclosure, follow the Hummer. A lot of these Hummers were paid for out of equity lines and refinances -- and the Lexuses and the Mercedes.Their income maybe was never enough to afford the loans, and their adjustable-rate mortgages are kicking in, and there's going to be some blood flowing in the streets.
Sunday, October 15, 2006
Free the podcasts
Saturday, October 14, 2006
Memory about Storage
I tell this "back in my day, uphill both ways" story only because I think it's wonderful that roughly 12 years later hard drive storage can be purchased at about $0.25 per GB, according to recent postings on SlickDeals. That's a 10,000 times increase in value compared to the price the local shop offered years ago, an annualized improvement of about 115%. Of course, those numbers are at least as suspect as my "through two feet of snow, barefoot" memory.
Wednesday, October 11, 2006
Integrating FxCop into CruiseControl.NET
- I wanted the CC.NET project which built the code and the FxCop project to break separately.
- I wanted the violated FxCop rules to appear on CC.NET dashboard.
- I didn't want the FxCop to checkout from version control or build the code.
- The official page on FxCop/CC.NET integration.
- John Rayner's posts on CC.NET, especially Getting FxCop to break the build
<XmlRead>
task of MSBuild Community
Tasks Project does have that ability.
The steps for my msbuild script are:
- Copy the files to be analyzed, including assemblies they depend on to a temporary folder.
- Run FxCop on the assemblies in question.
- Check the FxCop result and return an appropriate error code.
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="RunCheck" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Required Import to use MSBuild Community Tasks -->
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Target Name="RunCheck">
<CallTarget Targets="Copy" />
<CallTarget Targets="Check" />
<CallTarget Targets="Report" />
</Target>
<Target Name="RunFxCopUI">
<CallTarget Targets="Copy" />
<Exec Command="attrib +R $(FxCopProject)" />
<Exec Command='"$(FxCopExe)" $(FxCopProject)'/>
</Target>
<Target Name="Copy">
<Copy SourceFiles="@(DllsAndPdbs)" DestinationFolder="$(FxCopWorkDirectory)" SkipUnchangedFiles="true"/>
</Target>
<Target Name="Check">
<Exec Command='"$(FxCopCmdExe)" /project:$(FxCopProject) /out:$(FxCopOutput) /directory:$(FxCopWorkDirectory) /forceoutput' />
</Target>
<Target Name="Report">
<XmlRead ContinueOnError="True" XmlFileName="$(FxCopOutput)" XPath="string(count(//Issue[@Level='CriticalError']))">
<Output TaskParameter="Value" PropertyName="FxCopCriticalErrors" />
</XmlRead>
<XmlRead ContinueOnError="True" XmlFileName="$(FxCopOutput)" XPath="string(count(//Issue[@Level='Error']))">
<Output TaskParameter="Value" PropertyName="FxCopErrors" />
</XmlRead>
<XmlRead ContinueOnError="True" XmlFileName="$(FxCopOutput)" XPath="string(count(//Issue[@Level='CriticalWarning']))">
<Output TaskParameter="Value" PropertyName="FxCopCriticalWarnings" />
</XmlRead>
<XmlRead ContinueOnError="True" XmlFileName="$(FxCopOutput)" XPath="string(count(//Issue[@Level='Warning']))">
<Output TaskParameter="Value" PropertyName="FxCopWarnings" />
</XmlRead>
<Math.Add Numbers="$(FxCopCriticalErrors);$(FxCopErrors);$(FxCopCriticalWarnings);$(FxCopWarnings)">
<Output TaskParameter="Result" PropertyName="FxCopRuleViolations" />
</Math.Add>
<Error Text="FxCop encountered $(FxCopRuleViolations) rule violation(s). Critical errors: $(FxCopCriticalErrors). Errors: $(FxCopErrors). Critical warnings: $(FxCopCriticalWarnings). Warnings: $(FxCopWarnings)."
Condition="$(FxCopRuleViolations) > 0" />
</Target>
<ItemGroup>
<DllsAndPdbs Include="..\..\..\ThirdParty\lib\*.dll;bin\debug\*.dll;bin\debug\*.pdb;"/>
</ItemGroup>
<PropertyGroup>
<FxCopWorkDirectory>FxCop</FxCopWorkDirectory>
<FxCopProject>ProjectName.FxCop</FxCopProject>
<FxCopOutput>$(FxCopWorkDirectory)\ProjectName.FxCop.output.xml</FxCopOutput>
</PropertyGroup>
<ItemGroup>
<OutputFiles Include="FxCop\*.dll;FxCop\*.pdb" />
</ItemGroup>
<PropertyGroup>
<FxCopCriticalErrors>0</FxCopCriticalErrors>
<FxCopErrors>0</FxCopErrors>
<FxCopCriticalWarnings>0</FxCopCriticalWarnings>
<FxCopWarnings>0</FxCopWarnings>
</PropertyGroup>
<PropertyGroup>
<ExpectedFxCopCmdPath>C:\Program Files\Microsoft FxCop 1.35\FxCopCmd.exe</ExpectedFxCopCmdPath>
</PropertyGroup>
<Choose>
<When Condition="Exists($(ExpectedFxCopCmdPath))">
<!-- Hope that the expected version of FxCop is installed -->
<PropertyGroup>
<FxCopCmdExe>$(ExpectedFxCopCmdPath)</FxCopCmdExe>
</PropertyGroup>
</When>
<Otherwise>
<!-- Otherwise hope that FxCop is in the path. -->
<PropertyGroup>
<FxCopCmdExe>fxcopcmd.exe</FxCopCmdExe>
</PropertyGroup>
</Otherwise>
</Choose>
</Project>
To get the output of FxCop to appear on the CC.NET dashboard, I needed to tell FxCop to write its output to a file. Use the "
/out:<filename>
"
switch for that. The "/forceoutput
" switch is also
nice because it causes an output file to be written even if no rules
are violated. Then I needed to merge that into the CC.NET build
log. The CC.NET
merge task is intended for that. The gotcha I discovered is
that I needed to put the <merge>
task under the <publishers>
tag, not the <tasks>
tag. If it's under <tasks>
,
it's not executed if the build fails, which foils my goal of getting
the rule violations onto the CC.NET dashboard.
That leaves only the question of how to cause the FxCop CC.NET
project
to run after the main project completes successfully. CC.NET
includes a <projectTrigger>
,
which is perfect for this task. Not only is the project trigger
able to run the dependent project only when the parent project
completes successfully, but it also is smart enough not to run the
dependent project multiple times if the parent project completes while
the child is still running. Here's my ccnet.config:
My biggest disappointment with the result is that I couldn't get the detailed FxCop results to appear on the CC.NET web dashboard page for each build; rather they appear on the "FxCop Report" page, which I decided was not worth the effort to change. However, I really didn't like the look of the standard report, so I edited my<cruisecontrol>
<project name="FxCop">
<publishExceptions>true</publishExceptions>
<triggers>
<projectTrigger project="ParentProject">
<triggerStatus>Success</triggerStatus>
</projectTrigger>
</triggers>
<tasks>
<msbuild>
<timeout>1800</timeout>
<executable>C:\Windows\Microsoft.NET\Framework\v2.0.50727\msbuild.exe</executable>
<projectFile>ProjectFile.Fxcop.msbuild.xml</projectFile>
<buildArgs>/noconsolelogger /v:diag</buildArgs>
<logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</tasks>
<publishers>
<merge>
<files> <file>FxCop\ProjectName.FxCop.output.xml</file> </files>
</merge>
<xmllogger />
</publishers>
</project>
</cruisecontrol>
CruiseControl\webdashboard\dashboard.config
file to use Brian
Likes's XSL.Tuesday, October 10, 2006
Respectful Protest
Image swiped from cnn.com.
Monday, October 02, 2006
Random Coolness
- Montana's Democratic governor excitedly announced that a coal gasification plant will be built near Roundup. This old, but new again, technology will purportedly be significantly cleaner than typical coal power plants and will produce synthetic diesel as a byproduct. I thought it was particularly interesting that the Governor said that the state offered the proposed plant's owners no incentives; compare that to the FutureGen project, which while being more advanced, will cost the federal government $0.6 billion.
- Dress your dog as Darth Vader, Yoda, or Leia for Halloween.
Yes, it is a little freaky that those costumes' models are taxidermic.
Via neatorama.
Sunday, October 01, 2006
Quote o' the Day
HM QE II: Have we shown you how to start a nuclear war, yet?
Tony Blair: Ah, no.
HM QE II: Oh, first thing we do appearantly...
Tony Blair: You obviously know my job better than I do.
HM QE II: Yes. Well, you are my tenth Prime Minister, Mr. Blair. My first, of course, was Winston Churchill.Mondello: How's that for putting a man in his place?