<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jeff does Server &amp; Tools Online</title><link>http://weblogs.asp.net/jeff/default.aspx</link><description>The sillynonsense and .NET musings of Jeff Putz</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Where to find the jQuery 1.4.1 vsdoc file</title><link>http://weblogs.asp.net/jeff/archive/2010/02/07/where-to-find-the-jquery-1-4-1-vsdoc-file.aspx</link><pubDate>Mon, 08 Feb 2010 06:55:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7338552</guid><dc:creator>Jeff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7338552</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2010/02/07/where-to-find-the-jquery-1-4-1-vsdoc-file.aspx#comments</comments><description>&lt;p&gt;If you're like me and you were trying to update your ASP.NET MVC 2 RC2 project with the latest and greatest, and couldn't figure out where the new scripts are, they're here:&lt;/p&gt;&lt;p&gt;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplates\CSharp\Web\1033\EmptyMvcWebApplicationProjectTemplatev2.0.cs.zip\Scripts&lt;/p&gt;&lt;p&gt;That's where you'll find the jquery-1.4.1.min-vsdoc.js file (among others). I'm sure I wasn't the only one scratching my head.&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7338552" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/jeff/archive/tags/MVC/default.aspx">MVC</category></item><item><title>Variations on a simple repeater in ASP.NET MVC: A table/gallery</title><link>http://weblogs.asp.net/jeff/archive/2010/01/17/variations-on-a-simple-repeater-in-asp-net-mvc.aspx</link><pubDate>Mon, 18 Jan 2010 00:42:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7314005</guid><dc:creator>Jeff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7314005</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2010/01/17/variations-on-a-simple-repeater-in-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;There are times where I've decided that I didn't want to get too deep into a mess of markup in my views, which drives me to writing a simple HtmlHelper extension method. It's a convenient and quick way to introduce slightly more robust display logic into the view.&lt;/p&gt;

&lt;p&gt;But first off, if I may get up on my soapbox, I'd like to address the criticism around MVC views in general. I keep reading over and over again how some feel this is a step backward. That's nonsense. What we're doing in a view is not spaghetti code. We're not jumping around from place to place with data access and business rules mixed into the mess, like ASP.old. It just ain't the same thing. It's also not any worse/messy than using WebForms controls. Those are full of templates a bazillion properties to set, and you might still not get the HTML rendered that you'd really like.&lt;/p&gt;

&lt;p&gt;In any case, let's say that I'm building a table of images. I can't just do a simple foreach loop because there are new rows to start. I could work in similar logic to what I'm about to show you in the view itself, but it won't be reusable, and will look a little messy (though really not that bad). The logic, then, is that we want to build a table, and split the series every so often to start a new row. Ignoring for a moment the markup components of a table and its rows and cells, we fundamentally only need to repeat the individual cells and end/start rows. This is my first stab at just such a helper:&lt;/p&gt;

&lt;pre&gt;public static void SeriesSplitter&amp;lt;T&amp;gt;(this System.Web.Mvc.HtmlHelper htmlHelper, IEnumerable&amp;lt;T&amp;gt; &lt;br&gt;   items, int itemsBeforeSplit, Action&amp;lt;T&amp;gt; template, Action seriesSplitter)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (items == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var i = 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (var item in items)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (i != 0 &amp;amp;&amp;amp; i % itemsBeforeSplit == 0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; seriesSplitter();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; template(item);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; i++;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/pre&gt;
&lt;p&gt;As you can see, there isn't much to it. The first parameter extends the HtmlHelper class (the Html property of a ViewPage), the second takes the enumerable series you want to split up, the third says how many items to display before doing the split, and finally we take some Action objects to render. We're still doing a foreach, but if we get to a number of items that's divisible by the parameter you supplied, we pop in the splitter markup as well. In the view, your markup ends up looking something like this:&lt;/p&gt;
&lt;pre&gt;&amp;lt;table&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;% Html.SeriesSplitter(Model.Photos, 4, photo =&amp;gt; { %&amp;gt;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;img src="&amp;lt;%=ResolveUrl("~/Thumbnail.ashx?id=" + photo.ID)%&amp;gt;" &lt;br&gt;                     alt="&amp;lt;%=Html.Encode(photo.Title)%&amp;gt;" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%}, () =&amp;gt; { %&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;% }); %&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br&gt;&amp;lt;/table&amp;gt; &lt;/pre&gt;
&lt;p&gt;What's particularly fun is that even the HTML validates right in Visual Studio (I take the small wins. :)). Here you can see we're making a table that does four cells at a time, and if it has to start a new row, it drops in those tr elements. Piece of cake, and still pretty clear to read.&lt;br&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7314005" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/jeff/archive/tags/MVC/default.aspx">MVC</category></item><item><title>Current technology stack</title><link>http://weblogs.asp.net/jeff/archive/2010/01/17/current-technology-stack.aspx</link><pubDate>Mon, 18 Jan 2010 00:17:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7313983</guid><dc:creator>Jeff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7313983</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2010/01/17/current-technology-stack.aspx#comments</comments><description>&lt;p&gt;Every once in awhile, I feel like I've changed enough stuff around
the technology that I'm using to take a sort of inventory. Mostly I
just want to be able to refer back to it the next time I feel compelled
to do so.&lt;/p&gt;
&lt;p&gt;In terms of hardware, the last year or so has been full of upgrades.
Last March I replaced my laptop with a 17" MacBook Pro, because I
desperately wanted more screen resolution. It's not the size that's
special, it's the resolution. The 15" model I had for three years at
that point was also restricted to 2 gigs of RAM, which was less than
ideal.&lt;/p&gt;
&lt;p&gt;On the desktop, I just replaced my three-year-old Mac Pro after
three years. It's not that it was inadequate in any way at all. In
fact, it was still pretty ridiculous in terms of its computing power. I
replaced it because I wanted a bigger screen at a higher
resolution&amp;nbsp;(see the pattern forming here?), and the new 27" iMacs were
the ticket. I was able to sell the old computer and buy the new one for
about $400 difference. So for that amount, I gained a giant and bright,
high resolution LED-lit screen, a computer newer by three years and
only "lost" two CPU cores. On top of that, I still have the old 20"
Dell monitor, and it sites next to it. I've got nearly 6 million pixels
to spread out multiple instance of Visual Studio, Photoshop, browsers,
chat, etc. It's also the best video editing setup I've ever had.&lt;/p&gt;
&lt;p&gt;In other more peripheral categories, I have an Iomega 1.5 TB USB
drive where I'm storing video, the Time Machine drive on the router is
still the 1 TB no-name I got from NewEgg, I still use the gross (thank
God it's black) Microsoft ergonomic keyboard that has been out for
years (same one at work, used by nearly everyone). Since I couldn't
wait to spend money in the company store, I also scored an Explorer
Mouse to replace the even more disgusting one I had for five years. It
glows blue when you wake it up. :)&lt;/p&gt;
&lt;p&gt;The Web server at The Planet, tucked away somewhere in Dallas, is
the same one I've had now for over six years. It's a P4 2.4 GHz with a
pair of 40 gig hard drives and a gig of RAM. I can't believe it's still
running. As traffic has picked up, it has shown some cracks here and
there, in part because of my own poor coding, and partly because it's
just so ancient. I would like to replace it, but I'm waiting for
CoasterDynamix to pick up and move to their new site. I've been toying
with the idea of going to &lt;a href="http://softlayer.com/" mce_href="http://softlayer.com/" target="_blank"&gt;SoftLayer&lt;/a&gt;,
but haven't researched them thoroughly. I haven't had any real issues
with The Planet, except for one recently, but I guess I just feel like
a change.&lt;/p&gt;
&lt;p&gt;Software has changed dramatically over the years. Chief among those
changes is that I don't use a physical PC at home. I'm using Parallels
5 to host instances of Windows 7. Dedicating 4 gigs of memory to it has
been awesome, and Parallels has gotten to the point where it even
supports all of the eye candy and what not within Windows. As much as I
hated Vista, 7 is such an enormous improvement. They really spent time
thinking about little usability things, like snapping windows to the
side to do split screens, for example. I started to toy with it going
back as far as to before my interview, but once it came installed on
the new box at work, I became a fan.&lt;/p&gt;
&lt;p&gt;I'm still using Visual Studio 2008 at this point, not 2010. Even
though I could get super new builds, I'm not sure I'd want to commit
until ReSharper is updated to support it. I'm just too reliant on
ReSharper now to go without.&lt;/p&gt;
&lt;p&gt;For Web development, I'm mostly building on top of ASP.NET MVC, and
will probably upgrade to the new version once it's released. MouseZoom
will be MVC, except of course the forum since I'm certainly not going
to rewrite that. I use NUnit for unit testing and Moq for mocking
(neither of which I'm doing much of on MouseZoom since it's almost
entirely composed of existing components). At work we use xUnit and
Moq. For data, we've been experimenting with NHibernate, but for my
home projects I've been sticking to LINQ to SQL. On the client side,
the big story is still jQuery and its various plug-ins.&lt;/p&gt;
&lt;p&gt;For Web browsers, I'm pretty sold on Google Chrome now. After using
Firefox for years, it just seems to have become a dog, and I'm not sure
why. Maybe it's the history that needs to be cleared out? I dunno,
since Chrome is hooked right into Google search, I love that I can
start typing something and pretty much get to where I want to go. I
still use Firefox for Firebug though, as Google's tool isn't quite as
slick. The Mac version still has some quirks (like a bookmark manager
that only half-works), but it'll get there.&lt;/p&gt;
&lt;p&gt;Adium is my chat client at home. It just works and is updated
frequently. At work, when I use something at all, I use the Gmail chat
with AIM enabled. Other than checking in with Diana, I don't interact
that often with people while at work.&lt;/p&gt;
&lt;p&gt;On the video front, I upgraded to the latest version of Final Cut
Studio last fall, and I dig it. The latest version of Compressor in
particular is impressive, and still super fast even with the dual-core
CPU. The ProRes codec is what I've been using to edit with, transcoding
the H.264 stuff recorded by my camera. Works exceptionally well in
terms of performance and holding on to as many bits as possible.&lt;/p&gt;
&lt;p&gt;I've talked plenty about the cameras, so I'll skip that, except to
say that I may endeavor to buy a shoulder rig so I can properly shoot
video before the baby is born.&lt;/p&gt;
&lt;p&gt;When I stop and look at what we have available today, I'm really
astounded at how far things have come these days. Cultural implications
aside (i.e., real life social behavior), I'm amazed at what an iPhone
can do. It's a computer, plain and simple, that can do far more than
even a top of the line PC from ten years ago. That's crazy.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7313983" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/jeff/archive/tags/unit+testing/default.aspx">unit testing</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/jeff/archive/tags/MVC/default.aspx">MVC</category></item><item><title>ASP.NET MVC: Why your dislikes may be wrong</title><link>http://weblogs.asp.net/jeff/archive/2010/01/14/asp-net-mvc-why-your-dislikes-may-be-wrong.aspx</link><pubDate>Fri, 15 Jan 2010 05:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7311421</guid><dc:creator>Jeff</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7311421</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2010/01/14/asp-net-mvc-why-your-dislikes-may-be-wrong.aspx#comments</comments><description>&lt;p&gt;Wow, so I keep talking about how I want to write more, particularly now that I'm an "insider" working in Redmond, and yet it has been a month since my last post. But hey, I've been here two months and I just finally spent some time in downtown Seattle for the first time last weekend, so get off my case. :)&lt;/p&gt;&lt;p&gt;Anyway, as is typical in the professional world of software development, I've seen a great deal of debate about whether or not ASP.NET MVC is the second coming or a step backward. There are also peripheral discussions about what Microsoft sees as the future, but given the outright declaration of &lt;a href="http://weblogs.asp.net/scottgu/" target="_blank" mce_href="http://weblogs.asp.net/scottgu/"&gt;that guy with the red shirt&lt;/a&gt; and the fact that we've got new versions of Webforms and MVC on the way this year, I think it's pretty clear that you use whatever the best tool for the job is. Isn't it funny how that comes up with every religious debate about development tools?&lt;/p&gt;&lt;p&gt;In any case, there are a few themes to the online chatter around MVC that don't give it proper credit. I'm not suggesting that these are stupid people, but rather people who don't have the whole picture for one reason or another. This isn't an exhaustive list I'm sure, but it is noise that may prevent you from investigating the framework further, or inspire you to spread misinformation. There's a positive theme that builds up here, as you'll see.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;ASP.NET MVC is too primitive.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Generally I think this statement is made in the context of MVC's lack of server controls. Some people don't like generating markup, particularly those who've enjoyed the drag-and-drop RAD nature of ASP.NET. Let's face it, when we first saw demos of ASP.NET v1 prior to its release, it looked a lot like VB6, solving problems around the stateless nature of HTTP and letting us build stuff quickly. Behold the editable DataGrid, right?&lt;/p&gt;&lt;p&gt;The thing is, I would observe that as time went on, people weren't using these features out in the wild, particularly with big, sprawling, public facing apps. (I'd like to see the DataTable class stricken from the .NET Framework.) Personally, I almost always used Repeater controls, or variations on them I wrote myself, so I'd have more control over how the markup was rendered. And I almost never used in-place editing either, partly because I wasn't building Excel on the Web, and partly because getting your head around the event model was sometimes a pain.&lt;/p&gt;&lt;p&gt;So MVC goes minimal on the UI end of things by rendering simple HTML via the HtmlHelpers, and there's a remarkably simple state bag to hold on to your goodies when your server side validation says something isn't right. That you can simply wire up objects to those helpers without all of the "MyTextBox.Text = myObject.Foo" and the reverse nonsense in event handlers is a huge time saver. Give it a try!&lt;/p&gt;&lt;p&gt;&lt;b&gt;MVC is a step backward to ASP.OLD and spaghetti code.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;This is a pretty huge perception problem. I have to admit though, the first time I saw it demo'd, I thought the same thing. I remember the horror of ASP and trying to debug it, and this &lt;i&gt;looked&lt;/i&gt; the same. That was because I didn't truly appreciate what Model-View-Controller really meant. After reading through a Ruby On Rails tutorial and reading various articles about the MVC pattern, something clicked in my head and I investigated further. Then I drank the Kool-Aid® at various Mix conferences and I was hooked.&lt;/p&gt;&lt;p&gt;But back to the Italian food, the biggest thing that colors your perception is that there are a lot of really bad examples of what a view should look like. That doesn't mean that it's conceptually broken. Remember that the MVC pattern facilitates the famous separation of concerns, meaning a view should not participate in any logic except perhaps some very basic display logic (most often, looping through some enumerable set of data). If you see some example on the Internets of a view that is calculating salaries, or worse, hitting a database, politely post on that site: "MVC: ur doin it wroung."&lt;/p&gt;&lt;p&gt;&lt;b&gt;It's a lot of work deciding how to split everything up.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Again, I think that's only true if you aren't doing it right. Admittedly, it takes some practice to decide where things go, but after awhile it becomes pretty obvious. If you're dealing with a view, ask yourself if it's doing anything more than displaying stuff. If you're dealing with a controller, ask yourself if it's doing anything more than coordinating what to show the user, and shuttling data between the views and the models. If you're dealing with models (which is a pretty nebulous umbrella term in a lot of texts), ask yourself if it's doing any decision making about what to display or how to display it.&lt;/p&gt;&lt;p&gt;Don't be intimidated over the many related subjects around this concern soup. Dependency injection isn't that hard to get down, and like anything it takes practice to fully grasp why you'd want to soak up its awesomeness (see: Loose coupling).&lt;/p&gt;&lt;p&gt;In fact, the "ah ha" moments really may not come until you've forced yourself to sit down and do an end-to-end science project. While I understand that test driven development is a huge leap that's hard to make, unit testing can make your life easier even if it's slightly after the fact. In order to unit test, you have to figure out how to decouple your bits. That subject is too enormous here to cover, so you'll have to take it on faith until you try it.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Ugh, but it takes so long to do everything "right."&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Think about how much time you may spend debugging a code-behind or a custom server control. If we share any experience, it's probably around those hours we'll never get back. Now imagine that you have some tight model that just does what it does, probably interacting with a database (or rather an interface that in production happens to be a database). Imagine you have a controller that takes the request, feeds its data to the model, then sends the model's data to a view to be rendered. Each phase of that can be looked at in total isolation. The points of failure are much easier to narrow down. And because it can be looked at in isolation, each part can also be tested in isolation. The speed at which you can debug this arrangement is far greater than what you do in Webforms.&lt;/p&gt;&lt;p&gt;The bottom line is that MVC is just... different. I happen to be a strong advocate of it because it gets back to the basics of what HTTP truly is, without a huge mess of abstraction on top of it to hide the way it works. That's important these days, because we trust the browser to do more work than ever now. The framework also gets us thinking about (but doesn't force us) how to do things in a way that is testable, more maintainable, and ultimately, more simple.&lt;/p&gt;&lt;p&gt;If you don't think you like MVC, but haven't really looked into it, go check out &lt;a href="http://www.asp.net/mvc/learn/" target="_blank" mce_href="http://www.asp.net/mvc/learn/"&gt;the learning page on ASP.NET/mvc&lt;/a&gt;. Read the tutorials, view the video (that Hanselman guy is a trip). &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7311421" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/jeff/archive/tags/MVC/default.aspx">MVC</category></item><item><title>You don't know Microsoft culture</title><link>http://weblogs.asp.net/jeff/archive/2009/12/15/you-don-t-know-microsoft-culture.aspx</link><pubDate>Tue, 15 Dec 2009 07:23:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7279070</guid><dc:creator>Jeff</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7279070</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/12/15/you-don-t-know-microsoft-culture.aspx#comments</comments><description>&lt;p&gt;I'm closing in on a month now at Microsoft. OK, not really, because with the holidays and a week out for a pre-hired trip, I'm obviously still in a bit of a ramp up mode. Although I checked in some code last week, which is very exciting.&lt;/p&gt;
&lt;p&gt;In any case, I've taken my share of cheap shots about the Borg, evil empire, M$ and the other predictable nonsense. Now I just find it sad that people spend that much time and energy on hating a company. I get it, some folks think the company is evil. Whatever.&lt;/p&gt;
&lt;p&gt;The thing that I've noticed about Microsoft, from an internal view, is that it's an enormous company. I find diversity in teams, groups, divisions, top to bottom. In orientation and training, this diversity is reinforced in every aspect, from the way people develop product to the way they interact with each other.&lt;/p&gt;
&lt;p&gt;Externally, you may also notice diversity. There are epic success stories, like the Xbox edging out the established players or Silverlight quickly iterating and gaining market share. On the other hand, you have things like Vista (which might have been more of a critical failure than financial, in my non-expert opinion) and Windows Mobile, which fails to make any traction.&lt;/p&gt;
&lt;p&gt;Do you see what I'm getting at? You can't make generalizations about the culture of Microsoft. When I tell friends that I work in an agile team, in a room together, delivering value regularly, don't get bogged down in e-mail or specs that people never read, they think I'm lying. Are there "old school" teams around the company? I'm sure there are. Maybe there are even business reasons for it. But to suggest that Microsoft on the whole is incapable of doing amazing things in a very forward and progressive way is to suggest that a huge company operates in exactly the same way, from end to end. That's just silly.&lt;/p&gt;
&lt;p&gt;I might drink some of the Kool-Aid®, but I'm not naive enough to believe that Microsoft doesn't deserve much of the criticism it gets. That said, the press and the average fashion hater are not credible when they paint the company with one broad brush. You don't need to work there to see that the different parts of the company roll in different ways. There are thousands of very different, and very real, people in this organization.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7279070" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Career/default.aspx">Career</category><category domain="http://weblogs.asp.net/jeff/archive/tags/culture/default.aspx">culture</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Community+News/default.aspx">Community News</category></item><item><title>Why Facebook didn't really change anything, and people are zombies</title><link>http://weblogs.asp.net/jeff/archive/2009/12/14/why-facebook-didn-t-really-change-anything-and-people-are-zombies.aspx</link><pubDate>Tue, 15 Dec 2009 03:05:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7278991</guid><dc:creator>Jeff</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7278991</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/12/14/why-facebook-didn-t-really-change-anything-and-people-are-zombies.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://calacanis.com/2009/12/13/is-facebook-unethical-clueless-or-unlucky/" target="_blank" mce_href="http://calacanis.com/2009/12/13/is-facebook-unethical-clueless-or-unlucky/"&gt;Calacanis wrote a rant about Facebook&lt;/a&gt; that causes me to question his credibility. Seriously, is he a lucky entrepreneur or just full of it half of the time? Like many "pundits" in the tech field, he tends to jump into the fray with whatever fashionable rant is the rage. These days it appears to be Facebook, probably because it's a big target. (I work for Microsoft, and I have a growing appreciation for being a big target.)&lt;/p&gt;&lt;p&gt;The long in-depth "articles" written by the haters and the EFF, among others, allege some ridiculous things, and Calacanis takes it one step further by implying naughty intent. It's that last part that really annoys the piss out of me. Ad hominem anecdotes about Zuckerberg hardly prove any ill intentions.&lt;/p&gt;&lt;p&gt;What did Facebook &lt;i&gt;really&lt;/i&gt; do? Most importantly, they killed networks. Because people didn't understand what they were, and wanted to belong, they joined a network and by default showed all of the nonsense they posted to everyone else in that network. That's why teachers get fired for having photos of them with drinks on a cruise ship or whatever. While that in itself is pretty ridiculous, it was probably the right thing to do, since I doubt many people use Facebook for meeting new people.&lt;/p&gt;&lt;p&gt;The second thing they did is change the UI around setting these permissions. When I got the prompt to set them, I didn't change anything, and since I wasn't in a network, nothing changed.&lt;/p&gt;&lt;p&gt;Again, what really annoys me is the suggestion that Zuckerberg and his minions sit around planning how they're going to dupe people into giving up their privacy, thinking no one would be the wiser. Come on, really? Whatever you may think about the boy CEO, he's certainly not stupid. And the predictions about Facebook's ultimate demise are pretty hilarious too, because if Calacanis et al would get out of their tech bubble just for a moment, they'd see that even my 83-year-old grandfather is on there, along with the rest of my family, because that's how we track each other.&lt;/p&gt;&lt;p&gt;The take away is that sometimes people in our line of work get so close to technology that we fail to see the bigger picture. Don't be a pundit zombie. &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7278991" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/culture/default.aspx">culture</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Internet/default.aspx">Internet</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Starting at Microsoft</title><link>http://weblogs.asp.net/jeff/archive/2009/11/17/starting-at-microsoft.aspx</link><pubDate>Wed, 18 Nov 2009 02:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7258603</guid><dc:creator>Jeff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7258603</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/11/17/starting-at-microsoft.aspx#comments</comments><description>&lt;p&gt;I had my first "real" day at Microsoft today (the first day is mostly an HR thing). There's still a great deal of stuff to do to really get settled, as anyone who has ever started a developer job knows, but it felt like I actually worked there today.&lt;/p&gt;&lt;p&gt;I'll be working on the forums team in Server &amp;amp; Tools Online, which owns the forums on the MSDN site, among others. Since I'm only at a point where I'm trying to find the restrooms, I'm not sure yet what kinds of things I'll be able to blog about, but given the fairly non-proprietary nature of what we do in that group, I hope to be able to blog more. Over the last few years I've not posted a lot here outside of stuff relevant to &lt;a href="http://coasterbuzz.com/" target="_blank" mce_href="http://coasterbuzz.com/"&gt;CoasterBuzz&lt;/a&gt;, one of my own personal sites, but the more interesting stuff that I couldn't blog about had to do with previous employers. The really off-the-wall non-technical junk (complete with the occasional naughty word) will appear on &lt;a href="http://jeffputz.com/" target="_blank" mce_href="http://jeffputz.com/"&gt;my personal blog&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;A quick shout out goes to the relocation folks at Microsoft, for making the move from Cleveland (relatively) painless. In another week or so, the move should be history overall, not counting the sale of my houses back in Cleveland. I think things have gone as non-stressful as could be expected. &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7258603" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Career/default.aspx">Career</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/jeff/archive/tags/MSDN/default.aspx">MSDN</category></item><item><title>Google Maps: They have humans!</title><link>http://weblogs.asp.net/jeff/archive/2009/10/19/google-maps-they-have-humans.aspx</link><pubDate>Mon, 19 Oct 2009 19:51:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7233222</guid><dc:creator>Jeff</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7233222</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/10/19/google-maps-they-have-humans.aspx#comments</comments><description>&lt;p&gt;The last refresh of Google Maps messed up my street. I live two houses down from an intersection, where on one side the street has one name, and a different name on the other (two subdivisions started years apart). In the last refresh, they had the name from the other street extending half way down my street. I noticed a "report problem" link on the map, so I did. Here's what I got...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi Jeff,&lt;br&gt;&lt;br&gt;Your Google Maps problem report has been reviewed, and you were right! We'll update the map within a month and email you when you can see the change.&lt;/p&gt;
&lt;p style="margin-left: 50px; margin-right: 50px; background-color: rgb(224, 224, 224); word-wrap: break-word;"&gt;&lt;em&gt;Report history&lt;br&gt;Problem ID: A4EE-24E3-19D7-40FE&lt;br&gt;&lt;br&gt;Your report:&lt;/em&gt; Beaumont Dr. actually extends to N. Carpenter. It's Red Clover to the east, Beaumont to the west.&lt;/p&gt;
&lt;p&gt;Thanks for your help,&lt;br&gt;The Google Maps team&lt;/p&gt;
&lt;/blockquote&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7233222" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Interview to start: Six and a half weeks</title><link>http://weblogs.asp.net/jeff/archive/2009/10/14/interview-to-start-six-and-a-half-weeks.aspx</link><pubDate>Thu, 15 Oct 2009 03:36:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7230270</guid><dc:creator>Jeff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7230270</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/10/14/interview-to-start-six-and-a-half-weeks.aspx#comments</comments><description>
&lt;p&gt;Trying to wrap your head around leaving an area you've been around for 36 years for a destination and job 2,400 miles away is one of the single most bizarre things that I've encountered in my life. The time between my arrival in Seattle to interview at Microsoft (I was in town for just 27 hours) to my start date is going to be about six and a half weeks, or a month and a half. I'm not sure if that's making good time or not, and I'd love to hear stories from other current Microfolk who have relocated. The only unknown variable left is the move scheduling.&lt;/p&gt;
&lt;p&gt;We're downsizing a bit, because we simply can't buy a house. The housing market here around Cleveland has been a brutal disaster, and between my wife's unsold house of 18 months, which we'll take a bath on eventually, and my own which may sell quickly but erase most of the equity, this move is very much like starting over. We're not angry or bitter about it, but it isn't the most cheery subject. Lots of nice apartments and townhouses around the Seattle metro, and we look forward to waking up to much better scenery every day.&lt;/p&gt;
&lt;p&gt;It's weird how you can end up in a particular place for much longer than you expected. A great many life changes have affected me the last five years or so, which led me to one of the big "I'm a grown up" discoveries: That I can move if I want. Between visiting my new family out in Snoqualmie and frequent trips to Orlando to support my theme park habit, I was done with Midwest winters. Then I lost my job, twice in the span of a year, and I started to realize how awful the job market here was. Duh, good time to move.&lt;/p&gt;
&lt;p&gt;I've only had a few other "I'm a grown up" moments. The earliest one was that I could buy a season pass to &lt;a href="http://cedarpoint.com/" target="_blank" mce_href="http://cedarpoint.com/"&gt;Cedar Point&lt;/a&gt; and go as much as I wanted to. It makes me a little sad to break the streak of 11 straight seasons of passholderness. Another moment was they day I realized I could buy a house to live in. The most recent one was about two years ago, when I had a lot of bonus cash in hand and decided I could buy a completely non-essential expensive item: a hot tub.&lt;/p&gt;
&lt;p&gt;But the moving on to a new place and new job bit is the best moment of all for me. I've been a fan (and critic) of Microsoft for a very long time. I got caught up in the excitement of product development when I was writing my book, privy to early builds and roadmaps under NDA, and wondered what it might be like on the inside. Then the Mix conferences (I've been to three of the four) gave me warm fuzzies about how the Server &amp;amp; Tools division as a whole was coming along. Now I get to work with smart people who are very rapidly changing the way the customers of those products are interacting with the company. Very exciting times, indeed.&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7230270" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Career/default.aspx">Career</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Community+News/default.aspx">Community News</category></item><item><title>The animated featured content box: Critical design issues</title><link>http://weblogs.asp.net/jeff/archive/2009/10/14/the-animated-featured-content-box-critical-design-issues.aspx</link><pubDate>Wed, 14 Oct 2009 16:02:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7229863</guid><dc:creator>Jeff</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7229863</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/10/14/the-animated-featured-content-box-critical-design-issues.aspx#comments</comments><description>&lt;p&gt;I saw &lt;a href="http://weblogs.asp.net/kencox/archive/2009/10/13/animation-on-msdn-web-pages-no-thanks.aspx" target="_blank" mce_href="http://weblogs.asp.net/kencox/archive/2009/10/13/animation-on-msdn-web-pages-no-thanks.aspx"&gt;this post from Ken Cox&lt;/a&gt; about his displeasure with the preview of the new VB developer site, specifically the animated box at the bottom. You've seen these before on a million different sites, where a number of featured content items are previewed.&lt;/p&gt;&lt;p&gt;Putting aside for a moment that this one is particularly non-useful (no single frame hangs out long enough to read it), what do these really accomplish? We can assume that the goal is to get a number of different things in front of the viewer. News sites in particular seem to love using these. I've certainly not conducted a human factors study on the subject, but my gut feeling is that this is completely ineffective.&lt;/p&gt;&lt;p&gt;The first flaw is that it's easier to scan a handful of headlines that are all there. My armchair designer mind says that people are drawn to pictures and retained longer by them, but I'm sure not I buy it. ABC News used to have an annoying headline rotator, but they recently switched to something that shows the picture as well as allows for the quick scan of headlines.&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/jeff/abcnews.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/jeff/abcnews.png" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ESPN went a step further, realizing that their strength is the mountains of video they have. They abandoned the rotator entirely for video right there, immediately available.&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/jeff/espn.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/jeff/espn.png" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It's funny how the traditional media is doing it better, while new and trendy get it wrong. Revision3 has the classic interpretation of this, and it's a failure. First off, they're using a busy image with text over it that's hard to read. Then they have the goofy "highlighted square" navigation in the top right that you almost miss. I shouldn't even call it navigation, because it doesn't tell you anything other than the number of frames, which is nearly useless information. There's no incentive to hang out and see what's next. It also continues to animate whether you like it or not.&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/jeff/rev3.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/jeff/rev3.png" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;But in my quick survey of things, no one gets it quite as wrong as MTV. They have the good old fashioned mystery meat keyframes at right, and many of the text descriptions are too long to read before the next frame.&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/jeff/mtv.png"&gt;&lt;img src="http://weblogs.asp.net/blogs/jeff/mtv.png" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Ultimately, I think some of these attempts come from stakeholders who all get in a room and believe that their content is most important. That's a nightmare you'll frequently run into if you do client work in particular. Other attempts at this I think are simply imitation of a trend.&lt;/p&gt;&lt;p&gt;So what would I consider the critical thinking points around these things if I were in charge? In no particular order...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Is it critical that everything sits above the fold? If not, then why are you trying to cram it all into the first 400 pixels? We live in a Google Analytics world. You can see how often people are clicking down the page.&lt;/li&gt;&lt;li&gt;Is everything you want to show really that important? If it is, are you sure there aren't other means of discovery? If you're a marketing department and everyone in your company thinks their stuff is most important, rank it yourself or get someone senior to the various departments involved.&lt;br&gt;&lt;/li&gt;&lt;li&gt;What is your audience looking for? This seems like such an obvious question, and I don't think designers ask it enough. If they're looking for headlines, give them headlines. If you want to pair with images, make sure they don't come at the expense of headlines. If the reverse is true, again, keep in mind that too much compromise may not effectively give your audience what they're looking for.&lt;/li&gt;&lt;li&gt;If you're convinced you have to show more than one thing in a given space, don't rely on conventions you've seen elsewhere. Mystery meat navigation sucks and it pisses off users. As it is, they're probably not going to hang out for more than a few seconds.&lt;/li&gt;&lt;li&gt;Animate only if you have to. You're falling into a trap where you have to predict the future in terms of how fast your readers can read, how long the content will be as long as you're using the animation, and you're living on the assumption that the dwell time on the page is long enough to see it all. If the average user sees 1.5 of your frames, you've already failed in getting the rest of that "important" stuff in front of the user.&lt;/li&gt;&lt;/ul&gt;Getting into the weeds like this is an important exercise I think. It's something that I've thought about quite a bit, and because of the objections I arrive at, I've never used one of these devices in my projects. That doesn't mean I won't, but I've yet to come up with something appropriate for my specific use cases. I think ABC News probably has the best implementation for their audience, and not surprisingly, it does the least.&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7229863" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/Internet/default.aspx">Internet</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>New MSDN preview from Hanselman</title><link>http://weblogs.asp.net/jeff/archive/2009/10/09/new-msdn-preview-from-hanselman.aspx</link><pubDate>Fri, 09 Oct 2009 18:24:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7226317</guid><dc:creator>Jeff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7226317</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/10/09/new-msdn-preview-from-hanselman.aspx#comments</comments><description>&lt;p&gt;If you haven't seen it (or don't otherwise subscribe to his blog), do &lt;a href="http://www.hanselman.com/blog/ANewMSDNForANewOperatingSystemAndANewDevelopmentEnvironment.aspx" mce_href="http://www.hanselman.com/blog/ANewMSDNForANewOperatingSystemAndANewDevelopmentEnvironment.aspx"&gt;check out Hanselman's peek at the new MSDN&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;My impression is that I'll be working in some subset of this new stuff when I get there next month, so I now have a vested interest. :) &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7226317" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/jeff/archive/tags/MSDN/default.aspx">MSDN</category></item><item><title>I'm joining the mothership</title><link>http://weblogs.asp.net/jeff/archive/2009/10/05/i-m-joining-the-mothership.aspx</link><pubDate>Mon, 05 Oct 2009 18:10:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7223737</guid><dc:creator>Jeff</dc:creator><slash:comments>20</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7223737</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/10/05/i-m-joining-the-mothership.aspx#comments</comments><description>
&lt;p&gt;&lt;a href="http://weblogs.asp.net/jeff/archive/2009/09/28/redmond-bound-dismal-job-market-at-home.aspx" mce_href="http://weblogs.asp.net/jeff/archive/2009/09/28/redmond-bound-dismal-job-market-at-home.aspx"&gt;As I mentioned previously&lt;/a&gt;, I interviewed in Redmond for a position with Microsoft in the Server &amp;amp; Tools Online group, specifically Community Applications &amp;amp; Services (Codeplex, MSDN forums and other stuff in that area). I got the word Friday that I had an offer, today I verbally accepted it, and pending a background check and move, I should be starting some time in early November! I posted a few words about the interview experience on &lt;a href="http://jeffputz.com/blog/more-details-about-my-day-in-redmond" target="_blank" mce_href="http://jeffputz.com/blog/more-details-about-my-day-in-redmond"&gt;my personal blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;From a personal and professional standpoint, there are a million reasons why this is the right thing at the right time, and I really look forward to getting started. Those who have followed me on blogs over the years know that online communities have been a passion for me for as long as the Web has been around, and that's a perfect match to my enthusiasm for much of what Microsoft is doing. I look forward to being a part of the stuff in between the products and the people using them. Very exciting times!&lt;/p&gt;
&lt;p&gt;In the process of networking around Microsoft, I've also talked to quite a few people there outside of the group I'll be working in, and it feels good to have a greater awareness of what's going on. By the time I left Seattle last week, I was more convinced than ever that for the most part, the Server and Tools division of Microsoft is headed in the right direction. After living in a market (Cleveland) where nothing outside of medicine is doing anything with forward motion, it's a relief to see myself as a part of something good.&lt;/p&gt;
&lt;p&gt;So for the next few weeks, I'll be spending time selling non-essential stuff, making minor house repairs, closing out the season at &lt;a href="http://cedarpoint.com/" mce_href="http://cedarpoint.com/" target="_blank"&gt;Cedar Point&lt;/a&gt;, throwing a party to end all parties for our friends, and figure out how to get the cats to Seattle without causing them major trauma. My wife is stoked too, since her brother and his family lives out there.&lt;/p&gt;&lt;p&gt;What a year... marriage, honeymoon, unemployment, sell a house, move 2,400 miles, start a new job and prepare for a little bundle. Heck of a year! &lt;br&gt;&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7223737" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Career/default.aspx">Career</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Community+News/default.aspx">Community News</category></item><item><title>Redmond bound, dismal job market at home</title><link>http://weblogs.asp.net/jeff/archive/2009/09/28/redmond-bound-dismal-job-market-at-home.aspx</link><pubDate>Mon, 28 Sep 2009 19:50:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7219499</guid><dc:creator>Jeff</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7219499</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/09/28/redmond-bound-dismal-job-market-at-home.aspx#comments</comments><description>&lt;p&gt;I'm coming out this week to Redmond again to visit Microsoft and interview, this time for a developer gig.&lt;br&gt;&lt;/p&gt;&lt;p&gt;That last time, I was interviewing for a PM gig that I didn't entirely understand, and the vetting process before coming out was not particularly rich. I was an awful fit for that job, I think, and in retrospect, I'm not even sure how they came across me because I had never applied for it. But it was still a good experience, because it gave me a peek into the culture that I would never have had otherwise.&lt;/p&gt;&lt;p&gt;When I lost my job in April, the day after my honeymoon no less, my game plan became pretty obvious after a few days. I had to broaden the search and think more nationally in terms of the kinds of places I wanted to work. I also wanted to use the time I wasn't working (which has been a lot longer than I expected) to try new things, learn new things and develop my side business (mostly &lt;a href="http://coasterbuzz.com/" target="_blank" mce_href="http://coasterbuzz.com/"&gt;CoasterBuzz&lt;/a&gt;) into something that could sustain me for the duration. I feel like I did most of that.&lt;/p&gt;&lt;p&gt;Locally, in Northeast Ohio, the work potential is the worst it has been since 2001. The smaller short-term contract stuff kept leading me to the "over-qualified" response (seriously, for three months, doesn't that make me a low-risk bargain?), and the three really solid gigs I encountered after long interview processes ended up in two "we can't spend that money right now" endings and one that went to one of my mentors from two jobs ago, who also got let go and was clearly the better candidate, by a long shot.&lt;/p&gt;&lt;p&gt;We're not at all tied down here in any way other than real estate (another dismal market), so I've been targeting a number of well-known companies and watching their job postings, mostly in the Pacific Northwest and Central Florida. Good choices, too, as &lt;i&gt;Forbes&lt;/i&gt; recently named Seattle as the best place for tech jobs, and Orlando was third place. I never forgot the trip to Microsoft, and going to conferences and what not just made me want to be a part of what goes on there even more. It's a far cry from the start-ups I've been working at, but internally, there are a lot of people taking initiative to better their product areas. Who wouldn't want to be a part of that? I've been watching the boards for start-ups and small companies as well, but the number that are hiring in these regions seems to be nearly zero.&lt;br&gt;&lt;/p&gt;&lt;p&gt;This trip feels much different already. I had two brutal phone screens that were far more intense than most face-to-face interviews. The vetting process was solid and I go in feeling like I understand the gig, they understand me and flying me out there is a good decision for everyone. I'm really psyched for the trip. Plus there are bonus points because I'll have a short window to visit family out there.&lt;/p&gt;&lt;p&gt;I'll share more about the process after I get back, and hopefully have good news to share as well! &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7219499" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Career/default.aspx">Career</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Dependency injection, providers and ASP.NET MVC</title><link>http://weblogs.asp.net/jeff/archive/2009/09/16/dependency-injection-providers-and-asp-net-mvc.aspx</link><pubDate>Wed, 16 Sep 2009 15:23:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7208223</guid><dc:creator>Jeff</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7208223</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/09/16/dependency-injection-providers-and-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;I've been thinking a lot about all of the frameworks we have now to use with our, uh, frameworks. There's a framework to solve every problem. Dependency injection frameworks are of particular interest to a lot of people because they make unit testing ridiculously easy. They're also well suited to something like ASP.NET MVC, where you're trying to make as few dependencies as possible between the various concerns.&lt;/p&gt;&lt;p&gt;But I was chatting with someone the other day about all of the frameworks for DI, and he expressed concern that he wasn't comfortable depending on a lot of external libraries for some things. His view (pun intended) was that you start to junk up a relatively simple framework like MVC by putting all kinds of other stuff into it to support another framework, and that introduces different kinds of risks. For example...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You're decorating everything with attributes.&lt;/li&gt;&lt;li&gt;There are all kinds of configuration files or classes to do the hookup.&lt;/li&gt;&lt;li&gt;You'll replace the standard controller factories, perhaps giving new devs one more thing to learn about for your project.&lt;/li&gt;&lt;li&gt;Global.asax becomes even more of a dumping ground (more because of the placement of routing there plus DI framework init).&lt;/li&gt;&lt;li&gt;It just feels dirty to some to be using another library you don't own.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I think these are all valid concerns, though the scope of them depends a lot on your specific scenario. The funny thing about using frameworks that are named after design patterns is that everything becomes an academic debate about where and how you do this and that. And if you're a junior developer wanting to impress your peers, or a senior developer not wanting to set a precedent for the "wrong" thing, you want to get it "right."&lt;/p&gt;&lt;p&gt;Many of the examples published on the Web and in books suggest simply using different constructors on MVC controllers to handle DI in a rational way that doesn't require an additional framework. That allows you to keep the default controller factory and let your unit tests instantiate them with your mock objects. I read a lengthy discussion forum thread that suggested this wasn't proper either because you aren't testing the way that the objects are created in the real production environment. I thought that was a pretty thin argument, but I do see the point.&lt;/p&gt;&lt;p&gt;I got to thinking about how the provider model introduced in ASP.NET 2.0 worked pretty well for a lot of things, and it was used effectively before that in wiring up swappable data access layers on various apps. Creating a lightweight container to do that wire-up would be pretty straight forward, even if it did reinvent some wheels.&lt;/p&gt;&lt;p&gt;I don't really have a point that I'm after here. I guess these are things I'd like to hear people talk more about. What are you doing in the real world to keep things testable and maintainable?&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7208223" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/jeff/archive/tags/unit+testing/default.aspx">unit testing</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/jeff/archive/tags/MVC/default.aspx">MVC</category></item><item><title>On constant connectivity and information overload in the online social age</title><link>http://weblogs.asp.net/jeff/archive/2009/08/29/on-constant-connectivity-and-information-overload-in-the-online-social-age.aspx</link><pubDate>Sat, 29 Aug 2009 16:21:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7185162</guid><dc:creator>Jeff</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jeff/rsscomments.aspx?PostID=7185162</wfw:commentRss><comments>http://weblogs.asp.net/jeff/archive/2009/08/29/on-constant-connectivity-and-information-overload-in-the-online-social-age.aspx#comments</comments><description>&lt;p&gt;There was &lt;a href="http://www.visitmix.com/Opinions/Unplug-Unfollow-Drop-Out" target="_blank" mce_href="http://www.visitmix.com/Opinions/Unplug-Unfollow-Drop-Out"&gt;a solid post on the Mix blog&lt;/a&gt; about just letting go of all the stuff going on in the online social world and getting back to work. It's a subject that I've thought a great deal about lately for a lot of reasons. With a baby on the way, balancing life is important to me. I see friends who can't got five minutes without checking Twitter. Sometimes I worry about whether or not I'm learning the right things. The presence of information itself causes worry.&lt;/p&gt;&lt;p&gt;The thing that I keep coming back to is that there are a number of means to limit what you're exposed to, and they're not always electronic tools. Some people make it their job to find stuff and filter out the unimportant stuff (heck, I'm applying for just such a job). I find that in areas of expertise or interest, your overload is reduced when you find these human filters. The method of transmission is unimportant. I've been filtering out amusement industry news for almost ten years on &lt;a href="http://coasterbuzz.com/" target="_blank" mce_href="http://coasterbuzz.com/"&gt;CoasterBuzz&lt;/a&gt;, with a Web site. Remember Web sites? Pages, hypertext, pictures? It doesn't matter if it's a blog, Twitter, Facebook or a newsletter printed on dead trees. Fundamentally, there are still sources that act as information aggregators for things you care about. In the .NET world we have these folks, and they're authors, Microsofties, code project owners, etc.&lt;/p&gt;&lt;p&gt;The bottom line is that I don't think you need to be on 100% of the time trying to follow it all yourself. The trickle down filters work pretty well for most people.&lt;/p&gt;&lt;p&gt;If it's your job to have a higher awareness, then yes, engage at an appropriate level. But at the same time, make sure you're monitoring your peers, and if people report to you, listen to what they have to say. The tools and conduits are only a discovery mechanism, and most of them don't even offer a lot of depth or context. Engaging with people is still necessary.&lt;/p&gt;&lt;p&gt;Don't be lured into the real-time trap to the extent that you feel you have to see every last thing. If it's important, it'll keep coming up, and you'll see it tomorrow. The only exception I can think of is if you're a thought leader, but in those cases, shouldn't you be the originator of the important brain snacks in the first place? &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7185162" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Community+News/default.aspx">Community News</category></item></channel></rss>