About the author

J Sawyer is a developer based in Houston, TX who absolutely loves to write code. After spending 9 years at Microsoft, he moved on to other things and is currently the Lead Developer for the RealTime Data Management team at Logica US. He spends his days building Really Cool Things around StreamInsight and having a blast doing it.

He has been involved with HDNUG, one of the oldest and largest .NET-focused user groups in the US, since its inception in 2001 and has watched it grow from 5-10 technologists meeting around a conference table to a thriving community of over 5000 with regular meeting attendance averaging 100 attendees. He currently serves as the Vice President. You can join him at HDNUG on the second Thursday of every month at the Houston Microsoft office.

He also loves to ride his Yamaha FZ1. And sometimes his Ninja 650. And also his Honday XR-400 dirt bike. But he doesn't code and ride at the same time. That would be bad.

Changing Reading as we know it

September 22, 2010 12:28 PM

Let me start with some background as this helps put this in context.

I love to read. I will read almost anything and there are few books that I will abandon mid-read. I read all kinds of things … fantasy, sci-fi, history, non-fiction, classics, mysteries, suspense, horror, philosophy … you name it … with the very notable exception of things like Harlequin romance novels (I do have my standards). To be honest, I tend not to read books so much as devour them. I’ve always loved to read, for as long as I can remember. Even as a kid, I almost always had a book in my hand. In college, many years ago, I was an English Lit major with a Philosophy minor. More reading … a lot more reading … and I learned to do it faster while still retaining what I read. And I still loved it. Later in life, I took a speed reading class and that simply built on and expanding upon what I already had learned by necessity. While I don’t often use the speed reading techniques for my “enjoyment reading”, it is very useful for professional reading and I still have a high retention rate while speed reading. Most of what I read these days is simply for enjoyment and relaxation, so speed reading is actually counterproductive to that.

I capitalized “reading” in this title for a reason. It’s a key activity for transferring knowledge, something that has become even more important in the Internet age. But it’s more than transferring knowledge … it runs deeper than that, reaches into our individual and collective imagination, extends our mind and imagination in ways that are uniquely human. Yes, the devices and the medium have changed … but you still must read. And, like with everything else, practice makes perfect … the more you read, the better you are at doing it. Reading necessarily and deeply involves interpretation … you can never understand “author’s intent” but only attempt to understand, explain and analyze your interpretation of the resulting text; literature is a more intensely personal art than most realize. I’ll stop there and resist the temptation to delve further into linguistic theory and opinion.

There is something that brought this on. My wife got me the mostest bestest gift that I can imagine right now. I am difficult to buy for so I had to give her hints and stuff. What was it? A Kindle 3. I looked over and watched (carefully) the development of eBook readers from Amazon, Sony and Barnes & Noble. I played with devices in the stores and that friends owned. I looked at the number of available titles. The “flash” as pages changed annoyed me… I read “faster than the average bear” and that flash actually slowed me down as I had to wait for it, which annoyed me.

Then came the Kindle 3 … promising, most of all, to reduce the “flash”. I played with the original Kindle and the Nook … I’ve yet to see the Kindle 2 but, from what I’ve heard, the “flash” isn’t much better than with the Kindle 1 or the Nook. When I played with the Nook at a BN shop, I asked the staff about the “flash”. “I’ve gotten used to it” or “I don’t notice it” was the response. I got a similar response from Kindle 1 users. I did notice it and it got on my nerves … quickly. But then, again, I read faster than the average bear. But the Kindle 3 did live up to the promise … the flashing is still there but it’s a LOT faster. When I’m reading for enjoyment, it takes about the same amount of time that it takes me to move my eyes from the bottom of the page to the top of a new page. If I’m speed-reading, it will still slow me down but, since most of my reading is for enjoyment, that’s a minor issue.

But there is more than speed … and, while, Kindle 3 does fit well with my “enjoyment” reading speed, that’s not the only factor. I’m an IT guy and IT books tend to be a) heavy and b) costly. With the Kindle, these are stored on the device and, from what I’ve seen so far, about half the price of the physical books. This makes it a lot easier to “carry” and access technical reference books than we have traditionally known – with full searchability as an added bonus – at a lower cost. One device … the size and weight of a standard paperback … loaded with all the reference books that you need … and that sync’s with your PC so that you have the same reference books everywhere … well, that’s pretty damn cool.

This technology is a game-changer. In many ways, I’m a stodgy old fart when it comes to books … I do love the smell and feel of paper and that will never change. But the future of Reading is on these kinds of devices. Paper won’t go away but it will be marginalized – I, personally, have thousands of books with only a hundred (at most) that I would buy physically – and mostly these are old, early editions (I have one of the first printings of Nietzsche in English; Kindle just can’t compete with that). I just downloaded Chaucer’s Canterbury Tales in the original Middle English (yes, I can read and understand Middle English; taking both French and German helped A LOT)  with footnotes for $0.99 … and the book when I took the class in college was $100+ … used (but it is a pretty, pretty book and not one that I’ll ever let go). I actually want to have both … but I do realize that I am the exception rather than the rule. Ironically (or not), my professor for that class was the only prof that I had that would accept papers in digital form via email though I’m sure that’s much more common now that it was in 1992-ish. I can see my Chaucer professor (Arnie Sanders at Goucher College) assigning a set of Kindle locations rather than (or in addition to) pages. Back then, he was, IMHO, on the forefront of technology and literature … we even talked, at one point in time, about mixing HyperCard technology with Reader Response theory to create a truly interactive text that was a creative effort between the reader and the writer. He’s the same professor that introduced me to Neil Stephenson’s Snow Crash, ironic considering where my career took me.

But I digress.

This technology is a game-changer. I’ll say it again and I’ll say it over and over. It represents the the publishing medium of tomorrow. As a society/culture, we are moving (quickly) into a purely digital format and book publication has been lagging even further behind than music and video publishing. I carry my Kindle around everywhere now – it’s small, light and convenient. I also have the Kindle software on all of my PC's … this allows me to access all of the computer reference books that I have on the Kindle easily from anywhere and everywhere. Access is ubiquitous. It’s almost as good my music and video collection. With only my Kindle, I can download any book that is available from the Amazon Kindle store at any time, regardless of where I am. Besides the obvious “immediate gratification” aspect, this is moving the “Information Age” further … making information (i.e. books) available anywhere, anytime … and on any device (didn’t Microsoft say something about that???). As the “Information Age” generation grows up, they will expect more and more of this. The Kindle won’t be the end-all and be-all … there will need to be (and will be) a movement towards standardization of DRM on these devices that will further expand the platform. Most content cannot be exchanged between the Sony Reader, the Kindle and the Nook and this will need to change. As these devices and the platform matures, I have little doubt that it will change – the market will demand it. If the publishers want someone like me to by a physical copy, you’ll need to include a digital copy as well. The movie studios have figured this out. Print publishers will need to do the same thing, if only to compete.

The Kindle is the device that I currently have in my hands and, quite honestly, I love it. Really, I do, I love it. In a little over a week, it has completely changed how I read. And as I use it, I see the future of this technology and where it can go. There will be very, very few books that I purchase in “analog” format. And most of those I do buy will have been printed before things like the Internet existed. Or include a “digital” version. After all, I won’t purchase a movie without a digital version and I don’t see that changing regardless of medium.

I love to read. My Kindle makes it easier and more enjoyable to read. Therefore, I love my Kindle. That’s all there is to it.

{Sidebar: Microsoft had similar technology years ago in Microsoft Reader (c. 2000). This was the initial platform for ClearType. And while ClearType is now standard and expected across Microsoft operating systes, the Microsoft Reader concept was abandoned. They never took the leap to a dedicated reading device but insisted that it be a part of the Windows platform from core OS to Windows Mobile. Yet another example where Microsoft’s marketing didn’t capitalize on their technology and allowed others to take the lead and pushed Microsoft into the background.}

Tags:

Idle Babbling

About Build … A Rant

September 15, 2010 12:03 PM

As you may gather, I do a lot of work with Team Foundation Build. A whole lot. We have a defined process for our build/deploy cycle and we’ve gone a ways to automate a good bit of that via Team Foundation Build Server. That is a good thing.

And let me preface this rant a bit. TFS does a lot of things and it does them well. It does Build pretty well too (despite some issues). But the vast majority of the focus on TFS is about project management and source control … and the interaction between the two. Build is included but it’s often as an afterthought for development … usually as a validation of unit testing. This isn’t bad, but it’s incomplete. Why? Well … here’s the deal. Let’s say that you are really strenuous on project management and source control. You are religious on unit testing. You have a well-defined and honed process. What do you do when it comes time to release? Do you just shoot from the hip and build on the developer’s desktop? Or do you use TF Build without any thought to the process beyond compile-test-drop? Neither option really does justice to the work that you’ve put into process.

The more I work with TF Build, the more that I try to search the blogosphere and more for information to help, the more it seems to me that build is the single most under-used and under-implemented component of Team Foundation Server. There is a lot of focus on using TFS for project management – a good thing. There’s also a good deal on source control and Sharepoint integration. There is (sadly) pretty limited information on Reporting and, especially, the analysis warehouse – though that is relatively easily discoverable.

There is barely anything at all on Team Foundation Build. Yes, there are a couple of blogs with useful tidbits … but where is the documentation for the out-of-the-box build activities that ship with Team Foundation Server 2010? I’ve not found it, though I’ve searched and searched, which leads me to the conclusion that it just doesn’t exist. So … what exactly does a specific TFBuild activity do? I’m sure that someone at Microsoft knows but they ain’t telling. So we’re left to try to figure it out on our own. I, personally, have found that Reflector is absolutely essential to figuring this stuff out. I can only imagine how many untold hours are wasted by folks trying to figure this stuff out. Or … not. Maybe I’m one of the crazy few.

This bothers me and it bothers me a lot. First … it does seem that Microsoft really isn’t serious about enabling server-based builds for its own products. Sure, the core projects all support MSBuild but that’s about the end of it. There are still a TON of project types that integrated with Visual Studio that don’t support MSBuild … Reporting Services … SSIS … Visual Studio Deployment Projects (I won’t go there) … more. And then there are projects that integrated with Visual Studio that ostensibly support MSBuild but not in a way that is easily replicated outside of the Visual Studio environment … like on a build server. InfoPath is the first project type that comes to mind when I say this. Silverlight is another project type that comes to mind. And … since we do a lot of Sharepoint where I am, I was interested in the Sharepoint support in VS 2010 … and that it appeared to be supported via MSBuild. It was. But … try to build a solution from the command line. You won’t get your WSP packages. After much searching, I discovered that it could be done with certain properties that aren’t set by default. But I also found that this doesn’t work so well if you change the output folders - as is commonly done with TF Build. And for digging around in these project types, MSBuild Sidekick is the essential tool.

TFS 2010 Build is a huge step forward, to be sure. It offers far more easy extensibility out-of-the-box than the previous versions, which were pure MSBuild. But … it’s difficult to do little customizations for individual projects very easily with TFS 2010 Build while keeping the same process template for all of your builds, something that was easy to do with the MSBuild-based scripts. So … it’s great if you have builds that are all the same. But … when you are managing 100+ builds from projects that may (historically) span 3-4 years and where the risk for structural changes outweighs any possible benefits … TFS Build 2010 lacks a certainly flexibility that could be attained with 2005 and 2008. The ability to inherit from a base build process template would be good, but it doesn’t seem to be possible (though I may be wrong about that).

At the end of it … I do think that Microsoft could do a (much) better job providing a framework for building enterprise solutions. The reality is that a single TFS project collection may well incorporate over 100 projects. And when a single TFS server can service several project collections … well … you are getting some big numbers there. The kind of numbers that I’m looking at right now - 500+ projects with at least 4 project collections in the relatively near term – make it essential that we have a single, solid framework for build in place. And, since there are changes to the build/deployment process that need to be distributed globally, the default method of using Build Templates for each individual project simply doesn’t cut it. Right now, I have my template in one place and add it to each project … but there isn’t a way (documented, at least) to have this added as a part of the project creation process – unless you add an extension to the New Team Project wizard.

Tags:

Microsoft.TeamFoundation.Build.Workflow.Activities.ExpandEnvironmentVariables

September 15, 2010 12:01 PM

Since Microsoft doesn’t seem to be interested in publishing docs on built-in TF Build 2010 Activities, I’ll be publishing blog posts about activities that I’ve worked and/or experimented with. The titles will be the full name of the activity class with the hope that it’ll come up near the top on searches. The information here is a result of analysis of the activity from .NET Reflector as well as testing and experimentation in the context of a TFS 2010 Build Server but should not be construed as “official documentation”.

Description

This activity will expand Environment Variables specified in the standard MSBuild property syntax. For example, $(WinDir) will be expanded to the Windows directory on the current machine. Note that this may be different for the controller and the agent and will reflect the current machine context based on where it is executed in the build process. Because of that, be careful if you evaluate/cache results between these contexts.

The syntax is similar to an MSBuild property. For example, to expand the %WINDIR% environment variable, use $(WINDIR).

Note that this method only includes standard environment variables by default and does not include any default MSBuild or TFBuild (<2010) variables. Internally, it uses a regular expression to identify properties identified as $([VarName]). It first tries to resolve the matches using System.Environment::GetEnvironmentVariable. If that fails, it then looks in the dictionary supplied in the AdditionalVariables property.

Comments

Like MSBuild properties, this will use the $(PropName) syntax. For example, to expand %WinDir%, you will use $(WinDir).

While this activity does have its uses, there are some key variables missed. For example, any and all variables that were available in TF Build < 2010. This makes things very difficult to have a single template that can be used across many projects. To help with this, you can use the AdditionalVariables property and add any (custom) expansion variables that you want to, making this activity far more useful.

I will be creating activities to do this that will be available as a part of the Community TFS Build Extensions and may also be available separately. I’m planning a single, code-based activity to do one variable at a time as well as a composite activity that will do the standard TFS Build 2008 properties. In the meantime, you can download an example build process template here. It adds a couple of those TF Build <= 2008 standard properties as AdditionalVariables and also shows how to call a standard environment variable.

Once you figure this activity out, it’s pretty simple and can be highly useful. However, the lack of documentation (are you listening Microsoft DevDiv?) makes it far more complicated than it really needs to be. One should not need to use Reflector to understand how a Microsoft-supplied component works.

Tags:

TFS 2010 | TFS Build