<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">while (alive) { writeCode(); }</title><subtitle type="html" /><id>http://blogs.msdn.com/brporter/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/brporter/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2008-06-06T14:45:00Z</updated><entry><title>Small But Wonderful</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/11/01/small-but-wonderful.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/11/01/small-but-wonderful.aspx</id><published>2009-11-01T14:35:00Z</published><updated>2009-11-01T14:35:00Z</updated><content type="html">&lt;P&gt;ASP.NET 4.0 includes a new member on the HttpResponse class - &lt;A href="http://msdn.microsoft.com/en-us/library/system.web.httpresponse.redirectpermanent(VS.100).aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.web.httpresponse.redirectpermanent(VS.100).aspx"&gt;&lt;EM&gt;RedirectPermanent&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;. &lt;/EM&gt;Baked in support for issuing HTTP 301's? Yay!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915860" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Development" scheme="http://blogs.msdn.com/brporter/archive/tags/Development/default.aspx" /><category term="Computers" scheme="http://blogs.msdn.com/brporter/archive/tags/Computers/default.aspx" /></entry><entry><title>Funtastic: disk2vhd</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/10/29/funtastic-disk2vhd.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/10/29/funtastic-disk2vhd.aspx</id><published>2009-10-30T01:08:00Z</published><updated>2009-10-30T01:08:00Z</updated><content type="html">&lt;P&gt;Have you ever gotten your system to a state that you absolutely love - all your apps and utilities loaded, Visual Studio instaled, etc. - and find that you need to load Potentially Deadly Beta Software v0.8? Have you ever cringed at the thought that loading such software runs the risk of screwing up hours of work getting your machine configured &lt;EM&gt;just right&lt;/EM&gt;?&lt;/P&gt;
&lt;P&gt;Enter &lt;A href="http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx" mce_href="http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx"&gt;disk2vhd&lt;/A&gt;. Those crazy SysInternals guys, they are wicked smart. This free (!) utility can convert the drive that you are currently booted in to into a VHD. Once there, you can do all kinds of fun stuff. Load it up in Hyper-V. Configure &lt;A href="http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx" mce_href="http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx"&gt;Windows 7/2008 R2 VHD boot&lt;/A&gt; with it. All sorts of stuff. Load Deadly Beta Software on it.&lt;/P&gt;
&lt;P&gt;Just generally go crazy.&lt;/P&gt;
&lt;P&gt;&lt;A title=disk2vhd href="http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx" mce_href="http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx"&gt;http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915053" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Computers" scheme="http://blogs.msdn.com/brporter/archive/tags/Computers/default.aspx" /></entry><entry><title>SharePoint 2010 and Kernel Mode Authentication</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/10/29/sharepoint-2010-and-kernel-mode-authentication.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/10/29/sharepoint-2010-and-kernel-mode-authentication.aspx</id><published>2009-10-29T23:43:00Z</published><updated>2009-10-29T23:43:00Z</updated><content type="html">&lt;P&gt;When IIS 7.0 shipped with Windows Server 2008, one of the many new features included this new doodad called Kernel Mode Authentication. Enabled by default, KMA moved authentication operations performed by IIS out of user mode and into the kernel. This had tremendous performance benefits! Additionally, when KMA was enabled, IIS no longer used the application pool identity for Kerberos ticket decryption - instead, it would use the machine account. This greatly simplified single server installations, as you wouldn't need an SPN configured to perform Kerberos authentication to your web application if your web application used the same name as the machine. &lt;/P&gt;
&lt;P&gt;Unfortunately, relying on the machine account for ticket decryption is entirely incompatible with web farms of any kind - SharePoint 2007 included. It's obvious why - SharePoint web applications running in a farm configuration do not use the machine name for their web application, they'll typically use a central DNS entry and host headers on each of the Web Front Ends. As a result, the ticket request from the browser client to Active Directory would pass an SPN that wouldn't have a match of any sort, causing a Kerberos ticket failure on the client. As a result, SharePoint 2007 environment deployed on Windows 2008 had to configure their web applications to use the application pool identity for ticket decryption if Kernel Mode Authentication was to remain enabled.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Due to a variety of factors, SharePoint 2010 will provision web applications with Kernel Mode Authentication &lt;EM&gt;disabled&lt;/EM&gt; by default. This will give you the IIS 6.0 behavior of leveraging application pool identities for ticket decryption, and will generally simplify web application management. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915023" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="SharePoint" scheme="http://blogs.msdn.com/brporter/archive/tags/SharePoint/default.aspx" /><category term="Computers" scheme="http://blogs.msdn.com/brporter/archive/tags/Computers/default.aspx" /><category term="Stupid SharePoint Trivia" scheme="http://blogs.msdn.com/brporter/archive/tags/Stupid+SharePoint+Trivia/default.aspx" /></entry><entry><title>Trivia: Shared Service Providers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/10/16/stupid-sharepoint-trivia-shared-service-providers.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/10/16/stupid-sharepoint-trivia-shared-service-providers.aspx</id><published>2009-10-17T02:24:00Z</published><updated>2009-10-17T02:24:00Z</updated><content type="html">&lt;P&gt;Every SSP that is created in a farm is represented to the world by a virtual directory configured beneath the Office Server Web Services web application that's configured on every node within a SharePoint farm.&lt;/P&gt;
&lt;P&gt;The &lt;EM&gt;Office Server Web Services&lt;/EM&gt; web application is associated to the&amp;nbsp;&lt;EM&gt;OfficeServerApplicationPool&lt;/EM&gt;.&amp;nbsp;If you popped&amp;nbsp;open IIS Manager, you'd probably note that the OfficeServerApplicationPool executes under the NETWORK SERVICE account. Each SSP in the farm will be represented by a virtual directory configured beneath this web application; the virtual directory is named with the name of the SSP, so if your farm runs an SSP named &lt;EM&gt;SharedServices1&lt;/EM&gt;, looking underneath the &lt;EM&gt;Office Server Web Services &lt;/EM&gt;web application would reveal a virtual directory named &lt;EM&gt;SharedServices1&lt;/EM&gt;, associated to an application pool with the same name. &lt;EM&gt;That &lt;/EM&gt;application pool runs under the identity of the SSP service account it executes for.&lt;/P&gt;
&lt;P&gt;The &lt;EM&gt;Office Server Web Services&lt;/EM&gt; web application is bound to port 56737 and 56738. Sound familiar? You configured a half dozen custom-format SPNs (two for each member of your farm) on your SSP service account when you &lt;A href="http://technet.microsoft.com/en-us/library/cc263449.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc263449.aspx"&gt;configured your farm for Kerberos authentication&lt;/A&gt;. &lt;EM&gt;Right&lt;/EM&gt;?&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9908460" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Stupid SharePoint Trivia" scheme="http://blogs.msdn.com/brporter/archive/tags/Stupid+SharePoint+Trivia/default.aspx" /></entry><entry><title>The Beta Zone</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/07/21/the-beta-zone.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/07/21/the-beta-zone.aspx</id><published>2009-07-22T03:57:00Z</published><updated>2009-07-22T03:57:00Z</updated><content type="html">&lt;P&gt;I like things that break. I like new things. In the world of software, new things, &lt;EM&gt;also known as beta things&lt;/EM&gt;, tend to break quite often, which made me and my Windows Home Server backups a little &lt;EM&gt;too&lt;/EM&gt; familiar with each other.&lt;/P&gt;
&lt;P&gt;Enter Windows 7 and &lt;EM&gt;Boot from VHD&lt;/EM&gt;. &lt;/P&gt;
&lt;P&gt;Now granted, I could've always dual booted, but a dual-boot system is sort of a big commitment. That disk space is gone, and there just isn't an easy way to get it back. With boot from VHD, if I need it, I dump it on my hard drive, if not, I can shuffle it off to larger stores without losing all my setup time. I can get it to a state I like, then copy that off for safe keeping, like after I've loaded Visual Studio 2010 Beta 1 on it, but before I've done something hideous to the OS. &lt;/P&gt;
&lt;P&gt;Scott Hanselman has a post with a pretty decent guide that covers the basics of boot from VHD. Read all about it &lt;A href="http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx" mce_href="http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Also, for the record, I never use any fancy Windows 7/Windows 2008 R2 install media tricks to install an OS on a VHD. &lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=60a07e71-0acb-453a-8035-d30ead27ef72" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=60a07e71-0acb-453a-8035-d30ead27ef72"&gt;Download the Windows AIK and be introduced to the joys of ImageX&lt;/A&gt;. With ImageX, you can select the Windows install image (from the source media &lt;EM&gt;install.wim&lt;/EM&gt;), and lay the bits down on the VHD without having to run through the full installer. First boot, it's very similar to a sysprep experience.&lt;/P&gt;
&lt;P&gt;Windows 7 FTW!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9844139" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Computers" scheme="http://blogs.msdn.com/brporter/archive/tags/Computers/default.aspx" /><category term="Windows 7" scheme="http://blogs.msdn.com/brporter/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Why User Testing Is So Important</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/05/09/why-user-testing-is-so-important.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/05/09/why-user-testing-is-so-important.aspx</id><published>2009-05-09T19:06:00Z</published><updated>2009-05-09T19:06:00Z</updated><content type="html">&lt;P&gt;I recently placed an order with a company for something my wife and I had been discussing quite a bit. We were quite excited to finally order this particular item. I was duly impressed when, about an hour after I placed my order, I actually received an automated phone call from the company informing me that the order had been placed and asking me to confirm my details associated with the order, to prevent the possibility of someone signing me up for this particular service without my knowledge. A nice touch in the age of identity theft.&lt;/P&gt;
&lt;P&gt;A week went by, and I had rearranged my entire weekend to be able to accept delivery on Saturday. I waited. And waited. And no one ever showed up. Frustrated, I went downstairs to the home office to pull out the order confirmation email that I had recieved earlier in the week, so I could dig out the customer service phone number and the order number.&lt;/P&gt;
&lt;P&gt;The email, with a subject line of &lt;EM&gt;"Order Confirmation for Order #1234567"&lt;/EM&gt;, surprised me a bit. The top contained the standard order confirmation stuff - a restatement of the items I had ordered, the subtotal, tax, expected delivery date, etc. At the bottom of the email, however, I was surprised to find the following paragraph:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;"We're sorry, but due to an error while processing your credit card, your order cannot be fulfilled at this time. If you do not contact us within 10 days, we will cancel this order."&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;This sentence was actually crammed between a sentence thanking me for my order, and a block of legalese.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;I was flabergasted.&lt;/P&gt;
&lt;P&gt;After a brief chat with their customer service folks, it turns out that I must have mistyped my credit card number. This raises three issues, for me:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;People have been doing realtime processing and validation of credit cards for twenty years or more. It's a commodity skill. Why didn't the user interface catch that mistake? Even&amp;nbsp;something as&amp;nbsp;simple as a&amp;nbsp;mod-10 check would have found this particular error.&lt;/LI&gt;
&lt;LI&gt;Why would the email not be titled something such as &lt;EM&gt;"Order Not Processed - Please Contact Us"&lt;/EM&gt; or something similar? Why make the customer dig through the response to determine their order status, when the initial subject indicates that all is well?&lt;/LI&gt;
&lt;LI&gt;Given the companies obvious infrastructure for placing order-driven outbound calls (such as the one I received verifying that it was actually me that placed the order) why didn't they leverage that same system to inform me of my mistake?&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The issue here is that they obviously never user tested their confirmation emails through all the possible use case scenarios. Granted, I should have read the email end to end, but it also should have been &lt;EM&gt;much&lt;/EM&gt; more obvious that there was something that was going to prevent the succesfuly completion of my order. It shouldn't be this difficult to give someone money.&lt;/P&gt;
&lt;P&gt;So, the lesson here is to user test as much as you possibly can - especially those elements that require the user to perform some action. And &lt;EM&gt;especially&lt;/EM&gt; when it might interfere with your ability to accept money from someone.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9599348" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Life" scheme="http://blogs.msdn.com/brporter/archive/tags/Life/default.aspx" /><category term="Testing" scheme="http://blogs.msdn.com/brporter/archive/tags/Testing/default.aspx" /></entry><entry><title>My Favorite Interview Question</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/05/09/my-favorite-interview-question.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/05/09/my-favorite-interview-question.aspx</id><published>2009-05-09T09:22:00Z</published><updated>2009-05-09T09:22:00Z</updated><content type="html">&lt;P&gt;I've given plenty of interviews in my day. Almost all of them have been for highly technical positions; typically software development. Of all the interview questions I've ever asked, this one is my absolute favorite:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;EM&gt;"Write a function that can take the derivative of a single variable polynomial of any order. Perform this operation using the&amp;nbsp;smallest number of operations possible."&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Now, normally the people freak - and that's okay. They hear "derivative" and start flailing around, their brain short circuiting from the stress of the interview situation, until they aren't entirely certain if a derivative is a mathematical construct or the pet name of a certain species of spotted owl. I would typically continue on to give them an example of a taking a derivative, just to refresh their memory. I also tell them that the function can take whatever input they feel is neccessary. I then give them 15 minutes to work on this.&lt;/P&gt;
&lt;P&gt;No one has ever come close to answering the question right. Well, one guy did, and I hired him. Of the rest of the people that I hired, they all got close - but here's the trick. The question wasn't about finding the right answer. The question was about finding out how your brain worked by a) stressing you and b) requiring you to think logically under that stress.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Anyone care to take a stab at it? Brownie points for the first person to get it right. :)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9598742" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Life" scheme="http://blogs.msdn.com/brporter/archive/tags/Life/default.aspx" /><category term="Computers" scheme="http://blogs.msdn.com/brporter/archive/tags/Computers/default.aspx" /></entry><entry><title>You Never Know What You Don't</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/05/07/you-never-know-what-you-don-t.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/05/07/you-never-know-what-you-don-t.aspx</id><published>2009-05-08T04:00:00Z</published><updated>2009-05-08T04:00:00Z</updated><content type="html">&lt;P&gt;I was once asked by a colleage at a previous employer what skills would be required to implement and maintain a piece of software we sold. After thinking about this a bit, I wrote back with three points:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Software Development Experience&lt;/LI&gt;
&lt;LI&gt;Motivation&lt;/LI&gt;
&lt;LI&gt;Interest&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The answer I received in reply isn't fit to print.&lt;/P&gt;
&lt;P&gt;A well planned project includes a list of tasks that need to be accomplished in a given order, and sets expectations as to the timeframe those tasks should require. It's an artform or sorts. Some tasks come in quicker than the estimate, some longer, but the goal of project management is to&amp;nbsp;&lt;EM&gt;manage the margins&lt;/EM&gt;. Basically, to keep tabs on where everything is and where everything is trending so that you can adjust your long term plans before you get so deep into it you'll never ship.&lt;/P&gt;
&lt;P&gt;In this particular case, this software package required both infrastructure/operational elements and development elements. Infrastruture and operations were pretty much the same as most apps - database servers, network connectivity, load balancers, etc. The development elements were also pretty much the same for any customization effort - knowledge of the API would of course be helpful, but isn't strictly required. You'll pick things up as you prepare for the project, and the timeline assumes someone is new to the product.&lt;/P&gt;
&lt;P&gt;The answer this person wanted was that we needed people with experience deploying, customizing, and supporting the product. The challenge was, the client in question had never deployed, customized, or supported the product. The only way the client was going to get those skills was by doing, with someone who &lt;EM&gt;had&lt;/EM&gt; done it before walking behind everyone, prodding them along and keeping them inside the margins. &lt;/P&gt;
&lt;P&gt;That's just&amp;nbsp;how products are adopted. Sometimes you get an opportunity to send a bunch of people to a training class, and if you can swing it, that's great - a definite help. But training classes and the real world seldom intersect in a way that improves delivery - if anything, they serve to highlight to the person the fundamentals of the product they are deploying or customizing. You know know what you don't know, and know what questions to ask. This is also the goal of project preperation, where you plan out activities in detail and send people off with manuals and documentation in the bags. In many instances, training represents a different sort of documentation delivery.&lt;/P&gt;
&lt;P&gt;And for the record, I'm not knocking formal training. Consider this - in college, you bought this big expensive text book. If you were dilligent, you could have read the text book end to end, taken the exam, and passed. You could have taught yourself. Or, you could take your textbook and attend class, where your teacher explains the things in the text book to you, and shares his or her own personal experiences. Now product training and documentation may not have the wide gap in knowledge adoption that say, a calculus class and a calculus text book might have, but the same thing goes.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9595491" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Life" scheme="http://blogs.msdn.com/brporter/archive/tags/Life/default.aspx" /><category term="Computers" scheme="http://blogs.msdn.com/brporter/archive/tags/Computers/default.aspx" /></entry><entry><title>Self-Policing of Content</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2009/01/27/self-policing-of-content.aspx" /><id>http://blogs.msdn.com/brporter/archive/2009/01/27/self-policing-of-content.aspx</id><published>2009-01-28T06:03:00Z</published><updated>2009-01-28T06:03:00Z</updated><content type="html">&lt;P&gt;One of the most common questions I hear from Human Resources folks surounds content management of My Sites and Team Sites. Specifically, managing &lt;EM&gt;innapropriate&lt;/EM&gt; content. There are lots of things in SharePoint that can help restrict people from doing things - security, workflow, blocked file types, and more - but it becomes a bit unclear when it comes time to restrict people from placing innapropriate content in the environment. Take images for example. It would be foolhardy to make, say JPEGs a blocked file type, but filling up your content databases with pictures of peoples weddings is something you really don't want to see happen. What to do?&lt;/P&gt;
&lt;P&gt;My favorite technique for combating these types of issues is to implement a global feedback link. These links serve as a listening system for innapropriate content - implemented as a &lt;A href="http://msdn.microsoft.com/en-us/library/ms463169.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms463169.aspx"&gt;delegate control&lt;/A&gt;, they can be activated at the web application level, and statically linked to a document library where additional details regarding the policy violation can be collected. It's a great way of &lt;EM&gt;using&lt;/EM&gt; SharePoint to &lt;EM&gt;manage&lt;/EM&gt; SharePoint, is pretty simple to implement, and leverages the collective power of your audience to self manage policy violations.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9379677" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Governance" scheme="http://blogs.msdn.com/brporter/archive/tags/Governance/default.aspx" /><category term="SharePoint" scheme="http://blogs.msdn.com/brporter/archive/tags/SharePoint/default.aspx" /></entry><entry><title>I hang my head, and I feel shame.</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2008/12/19/i-hang-my-head-and-i-feel-shame.aspx" /><id>http://blogs.msdn.com/brporter/archive/2008/12/19/i-hang-my-head-and-i-feel-shame.aspx</id><published>2008-12-20T07:32:00Z</published><updated>2008-12-20T07:32:00Z</updated><content type="html">&lt;P&gt;Wow. My last post was &lt;EM&gt;when&lt;/EM&gt;? Scott Hanselman posts 18 times per day, &lt;EM&gt;while in Africa&lt;/EM&gt;, and I haven't posted since &lt;EM&gt;August&lt;/EM&gt;?&lt;/P&gt;
&lt;P&gt;I hang my head, and I feel shame.&lt;/P&gt;
&lt;P&gt;Well, in my own defense, I have spent a great deal of time over the last four months looking at the inside of airports. Ever been to Denver International? It's gorgeous. Kansas City International? Exceptionally functional. Not pretty, but it works, and it works well.&lt;/P&gt;
&lt;P&gt;Continuing my, series, here are a few more myths about SharePoint I'd like to burn down.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;#3 You shouldn't have a content database larger than 50GB&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;People have misinterpreted &lt;EM&gt;a lot&lt;/EM&gt; of guidance on this topic over the years. Implying that SharePoint shouldn't have a database larger than &lt;EM&gt;X&lt;/EM&gt; size implies that there is some pre-determined upper bound to the size of a SQL Server database, which just isn't so. A SharePoint content database can scale to whatever size your SQL Server infrastructure can support, which means that if you've got some crazy 64 processor SQL Server with 512GB of RAM, you can have yourself a big ole' honkin' content database.&lt;/P&gt;
&lt;P&gt;Now, before everyone starts building out huge SQL Server infrastructures, let's take a close look at that SLA you agreed to. You know, the one that says you'll be able to restore the system within four hours of an outage? Now, go talk to your storage management people. What do they say about how they are backing up your databases? Mirror SAN? Same building? Going to tape?&lt;/P&gt;
&lt;P&gt;The deal with content database size is all about the rapidity with which you can recover the database. Personally, I'm nothing but happy if I can keep the database to 50GB or less. Normally, this is very achievable with a sufficiently developed site taxonomy - but more on that later.&lt;/P&gt;
&lt;P&gt;More to come - and this time, you won't have to wait &lt;EM&gt;four months&lt;/EM&gt;. I hope. :)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9243444" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="Governance" scheme="http://blogs.msdn.com/brporter/archive/tags/Governance/default.aspx" /><category term="SharePoint" scheme="http://blogs.msdn.com/brporter/archive/tags/SharePoint/default.aspx" /></entry><entry><title>Dispelling SharePoint Myths</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2008/08/01/dispelling-sharepoint-myths.aspx" /><id>http://blogs.msdn.com/brporter/archive/2008/08/01/dispelling-sharepoint-myths.aspx</id><published>2008-08-01T17:45:00Z</published><updated>2008-08-01T17:45:00Z</updated><content type="html">&lt;P&gt;I've heard numerous myths about SharePoint. Some were scary. Others, funny. Regardless, for your reading pleasure, I'm going to spend the next few posts talking about some of my favorites, with an aim to dispell them.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;#1 SharePoint Is More Than An ASP.NET Application&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;SharePoint is a wonderful product. But - and this is important - SharePoint is an ASP.NET application. Repeat after me. SharePoint is an ASP.NET application. Keep repeating that until you believe it.&lt;/P&gt;
&lt;P&gt;I can't tell you how many times I'm asked if there is some "secret sauce" involved in turning an IIS web application into a SharePoint web application. There isn't. Let me break it down for you.&lt;/P&gt;
&lt;P&gt;In SharePoint 2003, when SharePoint extended an IIS web application, it registered a custom ISAPI filter to intercept page request handling. This, in turn, would be handed to the ASP.NET page processing pipeline for further manipulation before finally returning the requested page or error to the client. The ISAPI extension was a bit of magic, but didn't do anything that a normal ISAPI extension couldn't do. There wasn't anything special about it, other than the fact that it was written for you. That was it.&lt;/P&gt;
&lt;P&gt;The ISAPI extension did pose some problems, though. The ISAPI extension had to be the first ISAPI extension in the list of ISAPI extensions executed for a given web application. Getting that ISAPI extension out of order could cause problems if other, "downstream" ISAPI extensions processed things funny. As a result, for SharePoint 2007 the ISAPI extension was removed and a wildcard application map was added that mapped all requests to IIS for a SharePoint extended web application to the ASP.NET page processing pipeline.&lt;/P&gt;
&lt;P&gt;Normally, only files that end in a specific extension are mapped to the aspnet_isapi DLL (and thus the ASP.NET page processing pipeline). Things like .aspx, .config files, etc. For a SharePoint extended virtual server, a wildcard mapping is added that maps &lt;EM&gt;everything&lt;/EM&gt; to the ASP.NET engine. In the web.config file for a SharePoint site, two HTTP handlers are added to the ASP.NET engine that enable SharePoint to process the request like a SharePoint request. These two HTTP modules are the SPRequest module and PublishingHttpModule.&lt;/P&gt;
&lt;P&gt;Take a look at the web.config file for a SharePoint site. In the HttpModules section, you'll see two entries that look like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="SPRequest" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="PublishingHttpModule" type="Microsoft.SharePoint.Publishing.PublishingHttpModule, Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /&amp;gt;&lt;/P&gt;
&lt;P&gt;These two modules obviate the need for the ISAPI extension. This is what enables SharePoint to serve content that isn't stored on the filesystem, like documents, images, pages, etc. These modules intercept the ASP.NET page request and retrieve that data from the SharePoint content database(s) associated with the web application, instead of letting IIS do the heavy lifting by grabbing it from the filesystem.&lt;/P&gt;
&lt;P&gt;So, when SharePoint "extends" an IIS web application, what it's really doing is adding a wildcard mapping to the &lt;STRONG&gt;standard ASP.NET processing DLL&lt;/STRONG&gt;. All requests get handed to aspnet_isapi.dll, the same DLL that ships with ASP.NET proper and the same DLL that gets a request for one of your normal ASPX pages. SharePoint then drops a web.config file in the IIS web sites directory that adds a few HTTP modules to process the request further, retrieving things from the database, and serving SharePoint content. That's it. That's all there is. Tada. You're done.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;#2 You Can't (Or It's Hard To) Host Non-SharePoint Sites Beneath A SharePoint Web Application&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;See item #1. SharePoint is an ASP.NET application. The same rules apply to all ASP.NET applications. Many people encounter challenges trying to put their own, non-SharePoint ASP.NET application in a virtual directory beneath a SharePoint site. It's broken, you get funny errors, and the like. What's causing this?&lt;/P&gt;
&lt;P&gt;Normally, it's just a byproduct of the way web.config files work. Web.config files inherit from each other. So, if you have a SharePoint web application, you create a virtual directory beneath that web application, drop your web.config and such for your custom ASP.NET application in there, what's happening is your web.config file for your custom app is inheriting all the settings specified in the parent web application. Since your app probably doesn't know about many of the SharePoint DLL's, you get a bunch of funny errors because your ASP.NET application is trying to load SharePoint's HTTP modules, configuration sections, and more. The answer? Judicious use of &amp;lt;clear/&amp;gt; statements. &lt;/P&gt;
&lt;P&gt;In ASP.NET, all web.config files inherit from &lt;EM&gt;something&lt;/EM&gt; (save the top config file, machine.config). So, when you create a new web application and put your site there, it works, because it's inheriting from the systems machine.config, and you are used to that. Even if you didn't know that that is what it was doing, your app behaves as you'd expect it to because it's grabbing config values that you expect it to have. Ever wonder why you can just type &amp;lt;system.web&amp;gt; in your config file, and ASP.NET knows what to do with that? Believe it or not, there isn't any special processing that the ASP.NET engine does to "know" about a &amp;lt;system.web&amp;gt; config section in a web.config file. The configuration handler for a &amp;lt;system.web&amp;gt; section is defined in the machine.config file on the system. This is the same syntax and approach that you would use to declare your own custom configuration section, and the same syntax and approach that SharePoint uses to defines its custom sections (i.e. the SafeControl section). For more information on custom configuration sections, see my MSDN article "&lt;A class="" title="Configure This: Parameterize Your Apps Using XML Configuration In The .NET Framework 2.0" href="http://msdn.microsoft.com/en-us/magazine/cc163591.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/cc163591.aspx"&gt;Configure This: Parameterize Your Apps Using XML Configuration In The .NET Framework 2.0&lt;/A&gt;".&lt;/P&gt;
&lt;P&gt;Back to your ASP.NET application that you want to live beneath a SharePoint site. Your app is inheriting a bunch of settings that doesn't make sense for it - things like SafeControl sections, authentication and authrorization sections, site map providers, connection strings, and more. The answer? Take a look at the parent SharePoint web.config, and use &amp;lt;clear/&amp;gt; and &amp;lt;remove/&amp;gt; statements in your web.config to get rid of the settings that you don't need or want. Tada.&lt;/P&gt;
&lt;P&gt;A note of caution: if you &amp;lt;clear/&amp;gt;, for example,&amp;nbsp;the connection strings section, know that you are not only clearing the connections strings that SharePoint defined, but you are also clearing the connection strings that the machine.config file defined. The connection strings section has inherited settings all the way to the top, and when you clear it, you clear &lt;EM&gt;all inherited configuration values&lt;/EM&gt;. This might not matter to you, but it's something to watch.&lt;/P&gt;
&lt;P&gt;That's it for now. I'll post more later, as I've got myself a ton of these!&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8800319" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="SharePoint" scheme="http://blogs.msdn.com/brporter/archive/tags/SharePoint/default.aspx" /></entry><entry><title>ICallbackEventHandler</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/brporter/archive/2008/06/06/icallbackeventhandler.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="2726554" href="http://blogs.msdn.com/brporter/attachment/8578896.ashx" /><id>http://blogs.msdn.com/brporter/archive/2008/06/06/icallbackeventhandler.aspx</id><published>2008-06-06T22:45:00Z</published><updated>2008-06-06T22:45:00Z</updated><content type="html">How to use ICallbackEventHandler to write AJAX controls without AJAX.NET. Walkthough of a People Picker look-a-like control....(&lt;a href="http://blogs.msdn.com/brporter/archive/2008/06/06/icallbackeventhandler.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8578896" width="1" height="1"&gt;</content><author><name>Bryan Porter</name><uri>http://blogs.msdn.com/members/Bryan+Porter.aspx</uri></author><category term="SharePoint" scheme="http://blogs.msdn.com/brporter/archive/tags/SharePoint/default.aspx" /><category term="Development" scheme="http://blogs.msdn.com/brporter/archive/tags/Development/default.aspx" /><category term="AJAX" scheme="http://blogs.msdn.com/brporter/archive/tags/AJAX/default.aspx" /></entry></feed>