July 09 ,2008


Wallace B. McClure
 
 Nine Questions with Wally McClure--7/9/2008 8:17:00 PM

http://www.blogusmaximus.net/archive/2008/07/08/123658.aspx

Recently, Chris Williams sent me a questionaire for his blog.  I had some time on my wya beack from NM and sent it back to him.  Here are the answers, for better or worse.

7/9/2008 8:21 PM




David Hayden
 
 Data Access Layer O/R Mapper - Lite ORM Library v2 on CodeProject--7/9/2008 1:36:00 PM
As someone who has written a simple O/R Mapper - Hayden.ActiveRecord - I can tell you that writing a simple, opinionated O/R Mapper is easy and fun! But...
7/9/2008 5:35 PM


Ayende Rahien
 
 Boo Migration DSL--7/9/2008 9:39:56 AM

Nathan Stott is doing some really interesting things with Rhino DSL and Boo. His latest post outlines how to create this syntax:

CreateTable "Cats":
    Int32 "Id", { "identity" : true, "primary" : true }
    String "Name", { "length" : 50 }

I like it.

7/9/2008 9:39 AM


Jason Haley
 
 Interesting Finds: July 9, 2008--7/9/2008 7:33:00 AM

Other stuff
Tom - Using .NET for Mobile Applications
Sara Ford - Did you know… You can bring over your Visual Studio 2005 settings either at First Launch or Anytime? - #255
Stein Borge - Yet Another Code Generator
Charles_Sterling - Recipe for making an MVP
fallenrogue - Lambda and Scope in C#
Roy Osherove - Non Paged CLR Host
Sunny Chaganty - Design Patterns - A deep dive 3
Steven Smith - Run Tests By Project With MSTest
Steve Lamb - How to re-partition a hard disk under Vista or Server 2008 without having to re-install
James Avery - Project Spotlight: WhatIWantMost
Tomas Restrepo - NTFS Junction Points

WCF stuff
Nicholas Allen - Configuring SSL Host Headers

Web stuff
Dion Almaer - Unobtrusive DOM 2 Event implementation for IE; Uniform Event Model revisited and Extending Firebug Tutorials
Tim Huffam - ASP.NET 3.5 controls not being rendered
Anders Malmen - Create a image cropping control
Phil Haack - User Input In Sheep’s Clothing
Mike Pope - Tag cloud control
Steve Schofield - IIS7 - post #70 - IIS 7.0 podcast by Steve Schofield
Mike Gunderloy - 3 More Ways to Supercharge Firefox
Joe Stagner - Advanced ASP.NET AJAX Server Controls
Scott Hanselman - Deploying ASP.NET MVC on ASP.NET 2.0
Mads Kristensen - BlogEngine.NET memory leak fix
Stephen Walther - ASP.NET MVC Tip #15 – Pass Browser Cookies and Server Variables as Action Parameters
Steven Smith - Getting RSS Right
Nikhil Kothari - Ajax Server Controls Book
Dare Obasanjo - Gnip: FeedBurner + Ping Server for Web APIs

Database stuff
Tibor Karaszi - Yet some more fixes for sp_indexinfo...
Greg Low - Book: The Microsoft Data Warehouse Toolkit : Joy Mundy and Warren Thornthwaite
Aaron Bertrand - Very important SQL Server update
Kalen Delaney - Did You Know the History of SQL Server?

Debugging stuff
John Robbins - Hear My Interview on Debugging
Tom - Migrating to Debugging .NET after Win32

Cloud computing stuff
Erik Sherman - Microsoft Pushes on Hosted Software
Niall Kennedy - Google App Engine optimizations
Know It All - Questioning Carr and MSFT Prices Cloud Offerings

SOA stuff
Joe McKendrick - Study: Only one out of five SOA efforts bearing fruit

Architect stuff
pdestoop - Domain Driven Design Quickly

Business stuff
Guy Kawasaki - Everything You Need to Know About Online Advertising--Advice from 1923
Rich - Avoiding Startup Pitfalls: An Entrepreneur’s Guide and How Parents Can Help Young Entrepreneurs

Career stuff
Be Excellent - Instilling a Culture of Accountability and New Leaders and Their Coaching Needs
Steve Pavlina - Pre-order Personal Development for Smart People
Adam - Writing a book: technical tools & collaboration
Rajesh Setty - Stop worrying about your idea and start focusing on execution

Other link blogs
Mike Gunderloy - Double Shot #244
Chris Alcock - The Morning Brew #132
Business-Driven Architect - Links for 2008-07-08 [del.icio.us]
Steve Pietrek - Links (7/8/2008)
Arjan Zuidhof - LINKBLOG for July 8, 2008

7/9/2008 5:33 PM




K. Scott Allen
 
 Keeping LINQ Code Healthy--7/9/2008 5:38:00 AM

In the BI space I’ve seen a lot of SQL queries succumb to complexity. A data extraction query adds some joins, then some filters, then some nested SELET statements, and it becomes an unhealthy mess in short order. It’s unfortunate, but standard SQL just isn’t a language geared for refactoring towards simplification (although UDFs and CTEs in T-SQL have helped).

I’ve really enjoyed writing LINQ queries this year, and I’ve found them easy to keep pretty.

For example, suppose you need to parse some values out of the following XML:

<ROOT>
<
data>
<
record>
<
field name="Country">Afghanistan</field>
<
field name="Year">1993</field>
<
field name="Value">16870000</field>
<!--
... -->
</
record>
<!--
... -->
</
data>
</
ROOT>

A first crack might look like the following:

var entries =
from r in doc.Descendants("record")
select new
{
Country = r.Elements("field")
.Where(f => f.Attribute("name") .Value == "Country")
.First().Value,
Year = r.Elements("field")
.Where(f => f.Attribute("name").Value == "Year")
.First().Value,
Value = double.Parse
(r.Elements("field")
.Where(f => f.Attribute("name").Value == "Value")
.First().Value)
};

The above is just a mass of method calls and string literals. But, add in a quick helper or extension method…

public static XElement Field(this XElement element, string name)
{
return element.Elements("field")
.Where(f => f.Attribute("name").Value == name)
.First();
}

… and you can quickly turn the query around into something readable.

var entries =
from r in doc.Descendants("record")
select new
{
Country = r.Field("Country").Value,
Year = r.Field("Year").Value,
Value = double.Parse(r.Field("Value").Value)
};

If only SQL code was just as easy to break apart!

7/9/2008 5:38 AM



July 08 ,2008


Roy Osherove
 
 Non Paged CLR Host--7/8/2008 10:36:43 PM

Sasha and Alon have released an open source project called "Non Paged CLR Host" which has the following benefits(quoted):

  1. Applications will benefit from no paging during normal operation.  Even if other applications are actively allocating memory, allocations performed under the non-paged CLR host will be locked into physical memory.
  2. No paging will occur when the application is idle, providing a great benefit to low-latency processes such as GUI applications (even if the user has fallen asleep in front of the monitor).  The normal working set management scheme employed by Windows will not affect processes running under the non-paged CLR host.

That's Pretty cool. I've had the pleasure of working on a project with both of them, where CLR memory boundaries are constantly challenged. I wonder if it could benefit from such a piece of code!

PS

If you're not following sasha's blog - you really should.

7/9/2008 8:18 AM


Eric Gunnerson
 
 Taking on dependencies--7/8/2008 7:11:00 PM

A recent discussion on how to deal with dependencies when you're an agile team got me thinking...

Whether you are doing agile or waterfall (and whether the team you are dependent on is doing agile or waterfall), you should assume that what the other group delivers will be late, broken, and lacking important functionality.

Does that sound too pessimistic? Perhaps, but my experience is that the vast majority of teams assume the exact opposite perspective - that the other group will be on time, everything will be there, and everything will do what you need it to do. And then they have to modify their plan based upon the "new information" that they got (it's late/somethings been cut/whatever).

I think groups that plan that way are deluding themselves about the realities of software development. Planning for things to go bad up front not only makes things smoother, you tend to be happily surprised as things are often better than you feared.

A few recommendations:

First, if at all possible, don't take a dependency on anything until it's in a form that you can evaluate for utility and quality. Taking an incremental approach can be helpful here - if you are coming up with your 18-month development schedule, your management will wonder why you don't list anything about using the work that group <x> is doing. If, on the other hand, you are doing your scheduling on a monthly (or other periodic) basis, it's reasonable to put off the work integrating the other groups work until it's ready to integrate (based on an agreement of "done" you have with the other group).

That helps the lateness problem, but may put you in a worse position on the quality/utility perspective. Ideally, the other team is already writing code that will use the component exactly the way you want to use it.  If they aren't, you may need to devote some resources towards specifying what it does, writing tests that the team can use, and monitoring the component's process in intermediate drops. In other words, you are "scouting" the component to determine when you can adopt it.

 

7/9/2008 6:25 PM




Jeff Atwood
 
 Spartan Programming--7/8/2008 3:00:00 PM

As I grow older and wisereven older as a programmer, I've found that my personal coding style has trended heavily toward minimalism.

I was pleased, then, to find many of the coding conventions I've settled on over the last 20 years codified in Spartan programming.

300-movie.jpg

No, not that sort of Spartan, although it is historically related. The particular meaning of spartan I'm referring to is this one:

(adj) ascetic, ascetical, austere, spartan (practicing great self-denial) "Be systematically ascetic...do...something for no other reason than that you would rather not do it" - William James; "a desert nomad's austere life"; "a spartan diet"; "a spartan existence"

I've tried to code smaller, even going so far as to write no code at all when I can get away with it. Spartan programming aligns perfectly with these goals. You strive for simultaneous minimization of your code in many dimensions:

  1. Horizontal complexity. The depth of nesting of control structures.
  2. Vertical complexity. The number of lines or length of code.
  3. Token count.
  4. Character count.
  5. Parameters. The number of parameters to a routine or a generic structure.
  6. Variables.
  7. Looping instructions. The number of iterative instructions and their nesting level.
  8. Conditionals. The number of if and multiple branch switch statements.

The discipline of spartan programming means frugal use of variables:

  1. Minimize number of variables. Inline variables which are used only once. Take advantage of foreach loops.
  2. Minimize visibility of variables and other identifiers. Define variables at the smallest possible scope.
  3. Minimize accessibility of variables. Prefer the greater encapsulation of private variables.
  4. Minimize variability of variables. Strive to make variables final in Java and const in C++. Use annotations or restrictions whenever possible.
  5. Minimize lifetime of variables. Prefer ephemeral variables to longer lived ones. Avoid persistent variables such as files.
  6. Minimize names of variables. Short-lived, tightly scoped variables can use concise, terse names.
  7. Minimize use of array variables. Replace them with collections provided by your standard libraries.

It also means frugal use of control structures, with early return whenever possible. This is probably best illustrated with an actual example, starting with raw code and refactoring it using the spartan programming techniques:

I don't agree with all the rules and guidelines presented here, but I was definitely nodding along with the majority of the page. Minimalism isn't always the right choice, but it's rarely the wrong choice. You could certainly do worse than to adopt the discipline of spartan programming on your next programming project.

(hat tip to Yuval Tobias for sending this link my way)

[advertisement] Peer Code Review. No meetings. No busy-work. Customizable workflows and reports. Try Jolt Award-winning Code Collaborator.

7/8/2008 7:58 PM



July 07 ,2008


Msdn
 
 Developer Webcasts This Week: WCF & WF--7/7/2008 8:28:00 PM

We have three MSDN developer  webcasts this week covering the .NET Framework:

 

MSDN Webcast: Transactional Windows Communication Foundation Services with Juval Lowy (Level 200)

Transactions are the key to building robust, high quality service-oriented applications. Windows Communication Foundation (WCF) provides a simple, declarative transaction support for service developers, enabling you to configure parameters such as enlistment and voting, all outside the scope of your service. In addition, WCF allows client applications to create transactions and to propagate transactions across service boundaries over a variety of transports. In this webcast, we explain how to configure transaction flow at the binding, contract, and service level, local versus distributed transactions, setting of service transactions, declarative voting, and the available configurations that best fit various application scenarios. Presenter: Juval Lowy, Principal and Software Architect, IDesign

7/7/2008 10:00 AM - 11:15 AM Pacific Time (US & Canada)| Duration: 75 Minutes

Add to Calendar

 

MSDN Webcast: Using Windows Workflow Foundation to Build Services with Jon Flanders (Level 300)

Windows Workflow Foundation (WF) is a programming model, set of tools, and runtime environment which allows you to write declarative and reactive programs for Windows operating systems. WF is part of the Microsoft .NET Runtime, and it first appeared in Microsoft .NET 3.0. Windows Communication Foundation (WCF) is also a programming model, set of tools, and a runtime that first appeared in .NET 3.0. WCF is a framework for building applications that can communicate with each other over varied network protocols. In .NET 3.5, these programming models came closer together to allow easy integration, including allowing WF instances to use WCF to communicate to remote endpoints and allowing WF instances to become the service implementation for WCF endpoints. This is accomplished by two new Activities: ReceiveActivity and SendActivity as well as a new hosting infrastructure for service endpoints. In this webcast, we look at both sides of this integration to give you an overview of how to build WF/WCF applications. Presenter: Jon Flanders, Consultant, Pluralsight

7/9/2008 10:00 AM - 11:00 AM Pacific Time | Duration: 60 Minutes

Add to Calendar

 

MSDN Webcast: WCF Extensibility Deep Dive with Jesus Rodriguez (Level 400)

Windows Communication Foundation (WCF) provides a rich messaging framework that extends beyond its capabilities for modeling and implementing services. One of the aspects where WCF really shines when compared with competitive Web services stacks is its rich extensibility model that allows developers to customize the default behavior of the framework. The better we understand the WCF extensibility model the better chance we have to make the right use of WCF in real-world applications. In this webcast, we dive deeply into the WCF extensibility model, detailing the different extensibility points of WCF subsystems such as Channels, Hosting, Security, Metadata, Encoding, and others. Specifically, we provide practical demonstrations of how custom channels, behaviors, operation invokers, authorization managers, and metadata extensions can be used to extend WCF effectively without affecting the consistency of the programming model. We also highlight a set of best practices developers should consider to address their specific scenarios properly when extending WCF. Presenter: Jesus Rodriguez, Chief Architect, Tellago, Inc.

7/11/2008 10:00 AM - 11:00 AM Pacific Time | Duration: 60 Minutes

Add to Calendar

 

Webcast Series Home Page

Webcast Advanced Search

.Net Framework on MSDN

 

Scott

7/8/2008 2:55 AM


Christopher Steen
 
 Link Listing - July 6, 2008--7/7/2008 10:05:44 AM
Sharepoint
WPF
Code Camps
Link Collections
Miscellaneous
LINQ
ASP.NET MVC
Community
Silverlight

Upcoming Events

 (via Community Megaphone)

Today

Tomorrow

Next Two Weeks

    6/9/2008 7:47 AM





    July 04 ,2008


    Miguel Jimenez
     
     improving user experience, designing from scratch--7/4/2008 1:57:00 AM

    I've been reading a lot about how to enhance user experience in daily tasks performed by users. And reading is almost 20 books on different topics ranging from sociology, psychology, usability and design. Most of you already know my point of view regarding user experience (UX) and usability, and that's the reason why I've thinking a bit on how people interact with the environment and, recently, urban architecture. This post starts a new category to host thoughts on what I've labeled "Analog Experiences" to represent user experience facts in the "real analog world" that we interact with through our senses :)

    Most of the last two weeks has been spend in Bilbao working in an Windows Presentation Foundation project for the health industry, trying to improve the way Basque Health Agency manages medical information and how doctors interact with patients. Bilbao city itself is amazing, it has completely re-invented itself from a dark-gray industrial suburb to an avant-garde, modern and design-focused city. Running into modernity for a city sometimes implies the creation of urban transportation networks, usually in the form of trams or underground metropolitans, and Bilbao presented their brand-new metro system almost ten years ago.

    In this modern metro network I've seen some of the most useful and interesting enhancements of user experiences for travelers. As an urban guy I travel quite often through multiple underground stations, both in Madrid or anywhere in my intensive traveling around the world. The most outrageous feeling of impotence arises when I'm unable to determine my way in the suburban by myself. Although most cities have "modern" transportation system I run into this feeling more often than I would like. So analyzing what I, as a metro user, need to qualify a traveling experience as positive I came out with the following list of acknowledgments:

    • Easy acquisition of my traveling title and validation into the metro network
    • Easy positioning of myself through the traveling experience
      • Where am I right now?
      • Where is the place I'm willing to go?
      • When should I get out of the train?
      • How much time do I need to stay here?

    Over the multiple trips I've taken in Bilbao I can actually say that it's the most satisfactory user experience I had in my life. Why? Because it fulfill all my requisites for a good experience.

    • The city provides an automatic vending machine to buy tickets, and although the design (and I mean graphic design) is quite old and fuzzy, the experience itself was good
    • The mapping system clearly states where do you need to go, but this is quite easy when you only have 2 underground lines instead of 20 lines like Madrid
    • The lighting system inside trains and stations is a bit dimmed so you don't have this hurting experience of snow-white fluorescent burning your eyes

    But the relevant improvements, over the rest of transportation systems I've seen, were experienced while, inside the train, I was trying to locate my destination, actual position and estimated arrival time. The Bilbao metro system has an interactive map of stations with embedded LEDs that locates your position you on the map, the upcoming station and the train's direction through an easy light code:

    Interactive Metro Panel

    • Previous stations are represented in red, with LEDs on
    • Next station is blinking in red
    • Future stations are represented with LEDs off
    • And direction is inferred with ease through the state of lights

    To me, this is what I really call Improve User Experience. Period. I don't care about better trains, better lights or more stations (although all those are really important) but a better way to find myself by my own and reach to my final destination, at least to me.

    We should start applying exactly the same principles to how we design and plan software, think on what users need and how they will need it to do it... and with this I don't mean to create better and more standard-nielsen-based-usable applications. I mean we need to observe users, observe their needs, their problems, their frustrations and try to find ways to solve them, maybe alternative ways. It's hard, I know, but I think it's funny to foresee and create this applications; designing software from scratch, and designing interfaces and architectures.

    Next week I promise some technical content about WPF and Silverlight and less thoughts about interactions... sure!!

    7/9/2008 8:08 AM



    July 01 ,2008


    Joel Spolsky
     
     Don't hide or disable menu items--7/1/2008 2:42:04 PM

    A long time ago, it became fashionable, even recommended, to disable menu items when they could not be used.

    Don't do this. Users see the disabled menu item that they want to click on, and are left entirely without a clue of what they are supposed to do to get the menu item to work.

    Instead, leave the menu item enabled. If there's some reason you can't complete the action, the menu item can display a message telling the user why.

    Not loving your job? Visit the Joel on Software Job Board: Great software jobs, great people.

    7/8/2008 3:53 AM


    Pleloup
     
     The .Net Coffee Break Show - 15th of July - Tim Heuer - Silverlight and Data--7/1/2008 1:20:00 AM
    Join our next webcast! 15th of July 2008 Developers.ie invites all our members to attend our regular webcast. We think that during your coffee break is the right time to attend a short talk on various subjects, starting with Silverlight this month. Our...(read more)
    7/1/2008 1:23 AM





    June 30 ,2008


    Fabrice Marguerie
     
     The greatest thing since google.com: goosh.org, the unofficial Google command line--6/30/2008 8:01:00 PM

    If you want to experience Google's search differently, head to http://goosh.org. You'll be able to search Google from a web command line. It's simple and fast.

    goosh.org

    Here is how to get started:

    1. type your search keywords and press ENTER
    2. hit ENTER again or type m for more results
    3. type a result's number or click on its link to navigate to it
    4. type h or man to learn more about what's possible
    7/9/2008 3:30 PM



    June 28 ,2008


    Steve Eichert
     
     It's time to give up on Twitter--6/28/2008 8:29:38 PM
    For the last week Twitter has been mostly unusable.  While it's been possible to "tweet" it hasn't been possible to view replies, and now you can't see "older" posts.  While twitter hasn't become a staple in my life yet, I can see with some recent changes in my life me relying on it, or something similar, for communicating with others.  Twitter has proven time and time again that it isn't up to the challenge of being a service that we can rely on for much of anything.  I've given some other services a try to see what might be able to take the place of twitter, and I'm starting to form an opinion on what I think may be our best path forward.

    I've developed a 6 step plan for removing twitter from our lives.

    Step 1: Sign up for friendfeed, and add all the online services you use to your account
    Step 2: Sign up for tumblr (or some other microblogging service) where you can post the things you normally post to twitter.  Another option would be to just use the "share something" feature of friendfeed for what you normally use twitter for.
    Step 3: Take advantage of all the other services friendfeed supports and use those services for what they're good at.  For links use delicious or magnolia, for photos use flickr or smugmug, in short use the services that you like the most and use friendfeed as the central hub where you can view everything you and your friends are doing online.   
    Step 4: Use friendfeed for viewing your "friends" activity stream, and allow it to become the central place that you communicate with your "friends".
    Step 5: If you've become reliant on desktop client for interacting with twitter, download twirl or AlertThingy and set it up with your friendfeed account.
    Step 6: Enjoy life without twitter

    Sound good?

    7/9/2008 8:23 AM



    June 27 ,2008


    Jon Galloway
     
     Speaking at the So Cal Code Camp on 6/29/08: Deep Dive Into Deep Zoom--6/27/2008 10:06:00 AM

    I'll be speaking at the SoCal Code Camp in San Diego on Jun 29, 2008. My session’s titled Deep Dive into Silverlight Deep Zoom. We'll look at the code that runs the Hard Rock Memorabilia site, then build a site on the fly that takes advantage of Deep Zoom, including all the new features in Silverlight 2 Beta 2.

    UPDATE: You can grab the slides from my talk here.

    7/9/2008 8:20 AM





    June 26 ,2008


    Keith Rull
     
     Ten Questions with Melvin Dave Vivas--6/26/2008 9:02:41 PM

    In part 3 of our series "Ten Questions - Filipino Developer Edition",  I was able to talk to Melvin Dave Vivas, founder of PinoyJUG, developer, technopreneur and part-time fashion photojounalist(Heheh! I bet he wants me to include this on his intro :P).

    Read more about this interview here.

    7/9/2008 7:38 AM



    June 25 ,2008


    Tristan Kington
     
     That Memory Leak Revisited--6/25/2008 8:59:22 AM

    While searching for memory leaking troubleshooting techniques that could be applied to 64-bit Windows (for the DHCP Server memory leak I found I had the other day), I stumbled across the answer to my problem in an internal tool (weird that I missed it from a web search the first time, but c'est la vie).

    A Windows Server 2008-based DHCP server that is configured in a workgroup environment may consume too much memory

    http://support.microsoft.com/default.aspx/kb/949530

     

    And that's my problem! One REG command (and one restart of the DHCPServer service) later, I'm waiting to see how it went, but it all looks promising, based on that article. Neat-o.

    7/7/2008 11:56 PM



    June 23 ,2008


    Eric Lippert
     
     Customer Service Is Not Rocket Science, Part Two--6/23/2008 6:20:00 PM

    I find it irritating, but not surprising, when I get absurdly bad customer service from a business whose business model is based on volume and high margins. But I find it quite surprising, and indeed, greatly amusing, to get absurdly bad customer service from a business whose business model is entirely based on quality of service.

    This was so amusing to me that I thought I would share it with you all. A little fun for the first work day of the summer.

    I have difficulty keeping up with my lawn and gardening. I decided to go to an internet based company which recommends and rates home service contractors. We'll call them "Referral Service". I used "Referral Service" to find a lawn guy in my area, who we will refer to as "Lawn Guy".

    After arranging an appointment time and a reasonable price, I got a phone call from "Referral Service". The guy on the phone was polite, enthusiastic, and asked me all kinds of questions about what other projects I might have going on around my house that they could help me with. I told the guy that yes, I have lots of projects -- I have a fence that needs rebuilding, I have some rooms that need painting, I have an unfinished renovation project in my basement. I told the guy that I would likely use their web site in the fall to arrange contractors for these various other projects.

    Fine. Seems like everyone is pretty competent so far. But as it happened, Lawn Guy didn't work out, for reasons which will rapidly become apparent.

    A few days later I got an email -- clearly a form letter -- from Referral Service, asking me to fill out a form to say how well Lawn Guy did. I thought about it for a minute and realized that my concern was sufficiently outside of the normal experience that I was not comfortable just filling out a number on a Likert Scale. I wanted to clearly express to Referral Service exactly what my problem was so that they could deal with it appropriately. Here are the emails, slightly reformatted to make them easier to read in this medium, and with names changed to protect the guilty.

    *****

    Good afternoon [Referral Service]

    [Lawn Guy] made rude and deprecating comments about Poles to my housemate on his first day on the job. That he did not know that she was of Polish descent is hardly an excuse. I've fired him.

    Eric Lippert

    *****

    Dear Eric,

    Thank you for your email. Ratings & Reviews are perhaps the most important service we offer to our members. This area of our web site includes valuable word-of-mouth feedback from [Referral Service] customers. For all requests you place with [Referral Service], you'll be asked to submit Ratings & Reviews for the service professionals you are presented. When you do, you not only help other people make their choice, but you contribute to the overall quality of service we offer.

    To submit a Rating and Review please visit our site [there then follows a list of the nine different things that you have to click on to submit a review]

    Please let us know if there is anything else we can do, and we hope you tell others about our service. We look forward to helping you with all of your future home improvement needs.
    Best Regards,

    Andrew Throatwobbler
    [Referral Service]

    *****

    Mr. Throatwobbler,

    You asked that I let you know if there is anything else we could do. What you could have done is respond to my concern with something other than a canned form letter -- a letter, which I note, asks me to do work for your benefit. My job is not to provide content for your website; I don't care a bit about your website. I care about my lawn. If you want my business you really ought to be concentrating on that.

    You said that you hoped I would tell others about your service. No, no, you don't. You ought to hope very much that I do not tell others. Responding to a report of a gross, offensive, personal insult with a form letter is the very depth of poor service.

    Eric

    *****

    Dear Eric,

    Thank you for your email and reply; we appreciate your taking the time to provide your feedback. Please know that we take these matters seriously and this is not the level of professionalism we have come to expect of our professionals. By providing your rating it additionally notates their account and should we ever notice a negative trend we do reserve the right to remove them from the service.

    Thank you for your time and for using [Referral Service].

    Regards,
    Nicole Otterbach

    *****

    Ms. Otterbach,

    I care not a bit about your policies for deciding who gets to be part of your service or not. I already told you that I don't care about that, and yet you go on about it.

    You seem to have completely forgotten that you are in the business of recommending someone to mow my lawn! A lawn which is now going unmowed because I had to fire the racist you sent me after he insulted my housemate to her face.

    The smart thing to do would have been to concentrate on the fact that you have failed utterly in what ought to be your core competency -- supplying me with a competent lawn care person. Instead, you've concentrated on sending me emails about how my doing work for free on your rating system benefits your business.

    Eric Lippert

    *****

    Eric,

    Thank you for your response. Both Ms. Otterbach and myself have expressed to you the improtance [sic] of submitting a rating on this service provider. If you submit a negative review about this service provider, then it will be followed up by our Ratings department and the necessary steps will take place. At this time, I can not locate your account in our network and am unable to see if you have this submitted. If not, please do so. Thank you.

    Andrew Throatwobbler

    *****

    Mr. Throatwobbler,

    Yes, you certainly have expressed that this is important to you, just as I have expressed that it is not important to me. Yet you continue to concentrate on it! An important principle of customer service, or, for that matter, life in general, is "when you find yourself in a hole, stop digging", yet you continue to dig. I find this interesting from a psychological point of view. (However, though interesting, psychological musings are certainly not getting my lawn mowed.)

    As for the "necessary steps" -- my filling out a form is not a precondition of the necessary steps; I think you and I have a different view on what is "necessary" in such a situation. When I was in the service industry I was taught that the necessary steps for dealing with an upset, angry or disappointed customer were these three:

    1) First, and most important, express regret that the problem occured, particularly with regard to the actions you took that precipitated the situation. As yet, no one in your organization has said that you in any way regret referring a boorish racist who insulted my housemate, a racist whom I had the unpleasant and upsetting task of firing. I would have thought that you would sincerely regret that your recommendation caused several people pain and distress, but apparently not.

    2) Second, take this as an opportunity put a good light on the organization by distancing yourself from the situation. Ms. Otterbach did that, by saying that this is not the level of professionalism you would expect.

    3) Third, take steps to make the customer's problem better. You've certainly not done that. You've concentrated solely on your issues -- your web site content, your rating system, your policies, your strange inability to find a customer in your own system. I really don't care whether you continue to refer Lawn Guy to others; that is not my problem. That's your problem. I've told you repeatedly that I don't care about that; I care about getting my lawn mowed. And yet you keep on telling me about your rating system.

    One out of three is not good, particularly since none of these steps are difficult.

    Studies have shown that customers who have a negative experience that is dealt with rapidly and respectfully have a higher opinion of an organization than customers who have never had any problems! Customers who are angry, upset or disappointed are actually a gold mine for you, because when you go the extra mile to solve their problems, they turn around and advertise your business to others for free.

    Of course, the opposite is also true. Customers who report a problem and get back form letters, no apology, and repeated requests to do work that is to your benefit, not theirs, also tell others.

    However, one good thing that has come out of this is that I now have an article for my blog.

    Cheers,
    Eric Lippert

    *****

    I haven't heard back from Mr. Throatwobbler yet. I'm in so much suspense, as I am sure are you all! Will he and Ms. Otterbach continue to attempt to tag team a former customer into submitting to their bureaucratic policy machinery? If they ever get back to me I'll post an update.

    7/8/2008 1:16 PM





    June 18 ,2008


    Eli Robillard
     
     Review of the SharePoint Scalability White Paper--6/18/2008 6:50:00 PM

    SharePoint Server 2007 Scalability and Performance whitepaper was recently released "to provide strategic information about designing a high-volume, high-availability enterprise solution that can easily grow." it was announced yesterday in the SharePoint Product Team blog.

     

    There is plenty of good content here, lots of good ideas, and many attractive diagrams. As for the tests, these are idyllic goals to shoot for if you want great performance – minimize (or eliminate) inserts and deletes, keep fewer than 200 files per folder (if you do the math, they appear to cap it at 130), don’t use more than 5 WFEs, and spread your databases over many physical volumes.  

     

    Note that the testers assign 2 (or 3 in the case of H:) business divisions, each with its own content database, per 1 TB physical volume (Fig. 12), which is more SAN management than most shops are aware they should provide. This allows ~500 GB per division. It’s interesting that while the content databases stay under 200 GB for a combined total of <400GB, the used disk space averages 600.375 GB (Fig. 19). 

    To restate the point: separate physical disks remain the best path to efficient I/O, and sets of local disks kick the tar out of any SAN that doesn’t take the separation into account.  Just because you move “the storage problem” to a network service doesn’t mean you should forget about intelligent design. The best practice to provide separate physical volumes for the OS, data, logs and temporary files remains.  

    On to the test methodology. Note that in these tests they loaded the data beforehand, and the “user load testing” consisted of modifying existing documents, not inserts or deletes. No files, sites or site collections were created or harmed in the course of this study. Search the document for “delete,” you won’t find it. Why not? Because for each content database, list items inserts are O(n), and site creation and and deletion are (politely) non-deterministic. It takes an incrementally longer period to insert an item as it did for previous items. When the icon is spinning during site creation, other requests may (or may not) be fulfilled until the operation is complete. Deleting a site may also have an effect on response time. Again, this performance factor affects requests being served from the same content database, requests served by other content dbs are not affected.

    Conclusion

    For constructing a document repository with relatively static content, or a Publishing Site for WCM, this is an excellent and thorough document. This whitepaper describes a "large-scale content storage scenario" rather than a "large scale collaboration scenario." That doesn't mean you can't build a scalable SharePoint collaboration environment, but this whitepaper doesn't claim to describe it. Keep that in mind when you look at the performance graphs. As to the architecture itself and the guidance provided in constructing the test farms, this whitepaper is worth a look. Thank-you to the team who put it together, there's some good stuff here, but for the future I'd really like to see testing go beyond browsing, search, and file updates. 

     

    6/18/2008 8:42 PM



    June 09 ,2008


    Roiy Zysman
     
     Hyper-v DOs and DON'Ts - Item 1 - Re-Sid your machine.--6/9/2008 8:24:00 PM

    We've started utilizing hyper-v for our product system testing. Beforehand the system test environment was composed mostly of around 16 physical machines playing different roles in different topologies. The machines applicative layer was mostly managed by loading up pre built specific role images. Things like different operating systems, different applicative clients (IE6/7/8 Office/2k3/2k7, etc) . Moreover, the  network topology was mostly managed by a VLan switch which was good in the flexibility point of view of moving machines between different networks without plugging out and plugging in different network cables. But once more complicated scenarios were introduced and more people got involved in the system testing effort , it was pretty obvious that the current test lab wouldn’t be able to scale up to the system testing requirements. So after a basic pros and cons analysis and discussion we have decided that we are going to introduce and rely on hyper-v as our virtualization engine but keep the old physical lab as a Plan-B if we would have to prove issues or sightings on a physical environment as well. Around one month down the road, we're very satisfied by the agility the virtual environments is providing us, changing network topologies on the fly , having a library of role specific images and a lot of other time saving advantages that I'll probably share in the future. Having said that , we've collected several good to know DOs and DON'Ts for working with a virtual environment in general and Hyper-V specific.


    Overscaling..



    So here is sharing the first DOs.
    It is very tempting to create basic OS templates , that can be stored in a library and be used as real virtual machines instances. For example, installing a basic winxp on a virtual machine, shutting it off and saving the virtual hard drive to be cloned and insatiate as new virtual machines from that specific winxp library image.

    But having multiple machines instantiated from the same installation image might result in a situation where you have different servers but with the same Server Sid (unique id). This might have an impact on all sorts of network aware application who use this unique id to for server identification. we actually saw these issues happening in reality with domain users name resolution.
    So to the rescue came sysinternal with their little handy tool with a very catchy name called newsid
    Basically , it changes all of the current machine's SID with either a random or user supplied SID. You can read more information in the above link.
    It also has a quite mode in , where no user interaction is required so it can be perfectly integrated into a "runonce" script that would be ran only once when the image is first instantiated as a live virtual machine.
    There are lots of ways to implement this solution , here is a very basic one:
    Write the following powershell script:

    #***********************************************
    if(!(test-path "c:/temp/new_sid.txt"))
    {
     echo "Running New Sid"
     touch c:/temp/new_sid.txt
     c:/temp/newsid.exe /a
    }
    #************************************************

    You also need to trigger it to be executed once the machine is up , one way to do this is to place a simple batch file in the all users startup folder (in server 2008, open up an administrator console and cd to c:\users\all users\start menu\programs\startup and drop the batch script here)
    This simple script just check for a file existence in c:/temp. If it doesn't exist , meaning this is the first time, it creates the file (so it won't run again next time) and runs the newsid application (download from sysinternals into c:/temp , see link above). a restart, unfortunately, is unavoidable. but once restarted it has a new server SID and the virtual machine is ready to start its new life.

    There are probably lots of other ways to do this or to improve this specific way , for example , adding a splash screen saying that the server is reconfiguring for the first time , etc.
     


    Sowing the Sids....

    So let's recap on this , when using a virtual machine VHD (hard drive file) as a template, do the following to make sure clones or actually virtual machine generated from this library VHD (hard drive file) do not collide with each other on their SID level.
    • Use a VM to setup your basic OS.
    • download the newsid.exe and drop it on a folder on the VM machine (let’s assume it is c:/temp)
    • Drop the powershell script in the same folder
    • Add a simple batch file that executes the powershell script on startup (something like powershell c:/temp/new_sid.ps1)
    • Shutdown the VM
    • Save the hard disk image file.
    • Test this solution by instantiating a VM from this hard drive image (and make sure that the newsid application runs once and only once)  
        
    **Update,  a work colleague  suggested the following trick , which makes it simpler, but might shorthanded when trying to enlarge the feature scope of this solution.
    Instead of using a vbs or a powershell script, just add the following reg key to resid the machine on first boot.
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "Create new SID" /d "c:/temp/newsid.exe /a" /f  - This will execute the new sid app for one time only on first reboot.


     

    7/9/2008 6:20 AM


    Clan Members:
    Andrew May
    Ayende Rahien
    Christian Nagel
    Christopher Steen
    Darren Neimke
    David Hayden
    Eli Robillard
    Eric Gunnerson
    Eric Lippert
    Fabrice Marguerie
    Greg Robinson
    Jason Haley
    Jeff Atwood
    Jeff Key
    Joel Spolsky
    Jon Galloway
    Josh Gough
    Josh Ledgard
    K. Scott Allen
    Keith Rull
    Mark Fussell
    Mark Wagner
    Miguel Jimenez
    Msdn
    Omar Shahine
    Pleloup
    Robert Hurlbut
    Roiy Zysman
    Roy Osherove
    Scott Gu
    Serge van den Oever
    shawnfa
    Steve Eichert
    Tristan Kington
    Wagner
    Wallace B. McClure

    Locations of visitors to this page Add Your Blog

    Add Your Blog