Archives / 2006 / January
  • Plumbers @ Work podcast, Right Planet, Wrong Universe now online

    Whew. We finally got our second episode of Plumbers @ Work, Right Planet, Wrong Universe now online. Took awhile but it’s now available on the Community Radio at MSDN Canada site. You can listen to it directly through this link. Also the RSS feeds on the MSDN Community Radio site seem to be fixed now so feel free to subscribe here (I checked and it works great in iTunes). We’re just updating our Plumbers @ Work main site now to post it there as well.

    Here’s the rundown of our second show:

    • Introduction
    • The Plumbers are In - Bil, James, and John Report; Dan is MIA
    • Living the 2005 Canadian Launch Tour
    • The Performance "Gardener" Has Left the Building
    • CTP Hell is Over
    • WPF, WCF, and WF! Oh My!
    • "Office 12"
    • MSDN and TDD
    • Google Analytics
    • Marketing BizTalk Server 2006
    • ASP.NET Web Administration Tool
    • James Gets Excited about Virtual Server 2005 R2
    • Half-Time
    • WinFX, Part Deux: Visual Designers
    • Clemens Vasters' "Soccer Anywhere" Project
    • Microsoft Application Verifier (Bounds Checker on the Cheap)
    • PromptSQL: Intellisense for T-SQL
    • Visual Studio 2005 Add-Ins
    • SharePoint Adventures with the DSL Toolkit
    • Taming the "Wild" Corporate Developer with VSTS
    • SQL Server 2005 Service Manager and The Case of the Missing System Tray Icon
    • Xbox 360, Where Art Thou?

    We’re working on putting together a schedule so we can be more consistent with the episodes. There was a big gap between our first one and this one, mainly due to the holidays but we’re looking to do regular shows every few weeks or so and will have those online for your listening pleasure. With time we’ll get better at the podcasting as well as our schedule of posting the show!

    Well, that’s the plan anyways.

  • TNX: TechNet Exchange in Calgary tommorow

    Sometimes I really wonder how I get the neurons firing in the morning. I completely forgot about this event here in Calgary tommorow (thanks to Monty and Lindy for the reminder! I owe you guys a coffee, beer, small furry animals, whatever). And here it's all about collaboration (including, yeah, SharePoint).

    Tommorow I'll be at the Microsoft TechNet Canada Event, TNX Exchange. This is a pretty cool tour focusing on communications and collaboration with Rick Claus presenting 5 sessions on Active Directory, Exchange 2003, Live Communications Server 2005, Internet Acceleration Server 2004, Office Communicator 2005, and of course SharePoint Portal Server 2003.

    Not sure if registration is still available at this late date but check out the website here (Calgary registration can be found here). Again, sorry for the late notice here as I was napping. Feel free to send me rude feedback and hate email.

  • Careful with your output

    Creating SharePoint Web Parts and Controls can be tedious at best. Lots of compile, click, refresh, going on. Two tips I wanted to pass along to budding developers today.

    Commented out controls still evaluate
    Let's say you're writing a new Control and embedding it on an .aspx page like so:

    <%@ Register Tagprefix="ABC" Namespace="..." >
    <ABC:MyControl runat="server" />

    Let's say we want to turn this control off so naturally you might do this:

    <%@ Register Tagprefix="ABC" Namespace="..." >
    <!-- <ABC:MyControl runat="server" /> -->

    In fact, the control is still executed by ASP.NET (or the SharePoint ISAPI filter, I'm not sure which) and whatever output that control creates will go onto the page. Grant you, it's still wrapped in comments but if your control is throwing an exception, you might be scratching your head wondering why it's doing this. So to be safe, just comment out or rename your Render method your code (Note: if you don't inherit from SPControl you might not get any output, but then why are you not inheriting from SPControl?).

    Web Parts that output nothing still output something
    Another quirk is the base classes in SharePoint. All Web Parts are inherited from WebPart so even if your RenderWebPart or CreateChildControls method does nothing you'll still end up with output something like this on the page where a Web Part lives:

    <table TOPLEVEL border="0" cellpadding="0" cellspacing="0" width="100%">
    <td valign="top">
    <div WebPartID="00000000-0000-0000-0000-000000000000" HasPers="false" id="WebPartWPQ1" width="100%" class="ms-WPBody" allowDelete="false" style=""></div>

    So just watch that your WebParts will still render even if you're code doesn't output anything.

  • Rehash Tuesday

    It’s Tuesday and rather than bring you original content like any good-minded blogger would, I’m here to rehash a bunch of other news that everyone else has already told you 3 times over (and rip through my inbox fulfilling everyone’s shout out requests). God I feel dirty.

    Joel does Calgary
    Joel Semeniuk, Microsoft Regional Director and Visual Studio Team System guru, will be in Calgary giving a talk on Wednesday, January 25, 2006 from 5 to 8pm about Visual Studio Team System. This will be a great opportunity to hear about what Team System promises to bring to our world. If you're a current MSDN Universal subscriber, you'll be getting a free upgrade to VSTS Developer. So might as well learn what you'll be getting.

    Registration is available on the Calgary .NET User Group web site: (Please register ASAP)

    First UK SharePoint User Group Meeting
    The SharePoint User Group UK would like to invite you to the first user group meeting hosted by Microsoft at Thames Valley Park in Reading. Held on the evening of Monday 13th February, talks will be given by Steve Smith and Brett Lonsdale of Combined Knowledge on the topics of SharePoint Farm Design Best Practices, and Developing WebParts using User Controls. Attendance is free, with Microsoft supplying refreshments and nibbles at half time. Please check the forum for the full agenda, and post a reply there to register your intent on attending.

    Be like the Fox
    Bob Fox has been an avid reader of my blog (or so he says) and he’s been a great help in the SharePoint community. His web site and blog has a lot of great SharePoint info so you might want to add him to your blog roll. Hey, and its just cool when your name is Bob Fox. The marketing for that just writes itself.

    Web Site

    Blog Site

    Now re-entering… CTP Hell
    Microsquishy has put out (yeah, like you wouldn’t want that to happen) the Community Technology Preview releases of Microsoft Expression Graphic Designer (Acrylic) and Microsoft Expression Interactive Designer (Sparkle). There’s also a couple of other designers coming shortly and sometime after the release of the public beta of Office 12/SharePoint V3/etc. they’ll probably be more.

    Is it just me or has Microsoft gone goofy with all this naming. First they come up with some pretty cool code names (Avalon, Acrylic, Sparkle, Indigo, etc.) but then turn them into 10 syllable phrases that are sure to take up more than a few lines on DVD packaging. What brain child dreamed this design up? Can you imagine the marketing boardroom pitch on this?

    Marketing Guy #2: Okay, we’ll come out with all these products with cool names like Avalon and Indigo

    Stuffy Executive Type: Yes, sounds good. Make me money, make me money.

    Marketing Guy #3: And we’ll release early builds so we can convince all the droogs out there to log our bugs for us and save us having to hire teenage Haitian workers for 6 cents a day.

    Stuffy Executive Type: Go on!

    Marketing Guy #1: And just when things are ready to go out the door, we’ll turn those crafty code names into extremely long winded phrases that will confuse buyers and make presenters mispronounce them in public. It’ll also mean you’ll need two slides in a powerpoint deck just to show the name of the product.

    P.S. Bought a copy of BlogJet as it’s really working out well. Hopefully it’ll stop the spam I keep getting from Dmitry about new features and cool things you can do with it. Ahh, the price of freedom.

    P.P.S. Will be releasing a raft of software shortly (I’ll leave it up to your imagination to define “raft”) and will be using cool codenames as it’s all the rage now. Watch for SharePoint Builder, the “Twinkie” build soon (and feel free to suggest some codenames as I’m the last person to come up with an original idea).

  • Scrumming with WSS

    I generally try to use Scrum with most of my projects. Even if they’re my small, one-man pet projects I still follow Scrum principles (except I don’t have daily standups with myself, that would just be silly). So I try to keep a product backlog, create sprints for myself and work things into the sprint backlog. Grant you, for the one-man projects and things I do for fun I’m always the customer and the customer is always right. It’s a good process and I try to evangelise it as often as I can when working with clients to help them along the process of not doing too much up-front design and spending gobs of time creating reams of documents nobody is going to look at and will be out of date by the time the first line of code is written.

    Anyways, with Visual Studio Team System there are a few options coming out. VSTS comes with the Microsoft built-in MS for Agile framework which isn’t bad (it’s not great from an Agile perspective as there are just too many things going on and you need a work item to scratch your ass) as well there are some other things in the works that are more aligned with what Agile, and in particular Scrum are about.

    However there’s the cost. Not only the hefty price tag that comes with VSTS and it’s various flavours but the cost of ramping up your people to work in the new IDE, the cost of training your testers to work completely in the new environment, and well the cost of just everything. It adds up and for the smaller shops it’s just not a good fit. Expecially if you do Agile and need/want/desire something lightweight. A spreadsheet might do but why not use WSS? Some people were asking me if the recently released Team Room (renamed to Team Worksite for whatever reason) would be a good fit for this. It might but I thought we could do better.

    I have a template in the final staging that might work for you. It’s based on Scrum and follows the principles of Scrum (Product Backlog, Sprint, Sprint Backlog Items, etc.) and takes much from Ken Schwaber’s excellent book, Agile Project Management with Scrum (ISBN: 073561993x) which is a great resource.

    Scrum for WSS Template

    The template needs some work and I’m just debating how to distribute it now. The problem is that there are some lookups across lists which can’t be setup in a site definition but then having it as a STP file would be easy to upload and use. I’ll probably create both so you can twiddle with it, but each will have advantages and disadvantages (for example, in the site definition I can change the names of the headings on views without changing the display names of the fields themselves but I can’t do that in an STP file).

    Anyways, take a look (click on the image above for the full-meal deal) and let me know what you think. Who knows. Maybe we can evolve the template to include custom web parts so you can have a VSTS replacement for the cheap bastards out there.

    Note: The Iteration Progress chart is just a static image, there’s no live charts in the system (yet). 

  • Fun with the _layouts directory

    Ever wonder what the heck all those .aspx pages in your _layouts directory are? Of course they’re for running your Portal but there are a lot of files and some are rather interesting (and rather odd). So here’s something to do when you’re bored one afternoon. Download this CEWP (Content Editor Web Part) file here and import it to a Web Part Page on your portal. It’s just a simple listing of all the pages with links to them which will open up in a new window. Don’t worry, just launching these files doesn’t do anything destructive (but I can’t be held responsible for you if you click OK or otherwise continue using the page).

    Most pages are things you’re used to and have seen (and probably used a lot) before. Some are subsets of pages that you’ve seen (for example, htmledit.aspx is the Rich Text editor you see when you create a Basic Page). Most pages require parameters in order to work (in some cases they’ll tell you what that parameter is) so you’ll have to check out what’s useful and what isn’t. In some cases you can reuse the page as they’ll post back to the calling page information it contains. For example, you can invoke CategoryPickerPopup.aspx and get a popup window that lets you select an area in the portal which you can then use in your own page or Web Part. Re-use that infrastructure! Work the machine!

    There are also some neat things here too. The mngsubwebs.aspx page for example will show you the page you normally see for managing subwebs in a WSS site (for navigating to or even deleting). In the Portal, this lists all the areas that exist which can come in handy sometimes.

    Anyways, have fun and play around. Let me know if you find this useful or discover any coolness.

    P.S. it seems is going up and down like a yo-yo tonight.Wonder if they’re having problems or <gasp> upgrading to Community Server? So I apologize for any weird behavior.

  • Play before you download

    Last week I did an in-depth view of the new Team Room template that Microsoft put out. Jason posted an entry that there was a new one today called the Team Work Site which I promptly downloaded. As I was setting it up on my Application Template Playground, I noticed it was surprising similar to the Team Room template. In fact, its the same. Seems they’ve rebranded it the Team Work Site, but otherwise it’s exactly the same as the Team Room template. Very odd and I have no clue what the brain spark for the renaming would be (right hand, meet left hand syndrome?)

    Anywho, I’ve updated the playground page (a place you can try out the templates online without having to install them yourself) and included the 3 new ones. Check out The Team Room, Document Library, and Discussion Database site templates (yes, the last two are site templates, not list templates just in case you installed it and couldn’t find it).

    As before, there’s a guest account that anyone can use (please don't abuse it or I’ll have to come to your house and stain your carpets) to contribute to any of the sites. From any of the sites you can sign-in with the following information:

    User name:\spguest (sometimes just spguest works too)
    Password: SharePoint1

    This will give you contributor access to any of the sites so you can add/edit any content on them. Also to note, there’s a small little “feature” on the home page (in the bottom right) of each of these three sites called Related Sites. I guess the idea is that all three site templates (or four or whatever, I’m so confused now) are meant to work together so I’ve hooked them up to each other and you can bounce back and forth between them if you’re so inclined (without having to flip back up to the main site then drill down again). Note that I haven’t gone in and fixed any of the InfoPath templates as it’s just too much work but if you’re having problems using the templates on your own site, just fire me off an email and I’ll see if I can help.

    Another post with BlogJet. Gotta love it for my Gonzo blogging style, but I keep launching my browser and going to the site to post. It’s only after I get the text box loaded up I think, “Oh yeah, I should use BlogJet” and then do. I’ll get used to it.

  • Project Catchupalooza 2006

    So here it is, 2006, and I'm already behind. Well, to be fair I'm behind from projects I started last year but hey, that was a year ago so what's the delay? Anyways, here's a rundown (with some links to the original blogs that started them) of projects I have on the go SharePoint wise. Yeah, not much of an eye-popping information-packed blog but sometimes, just occasionally, people need a break from me.

    SharePoint Builder
    SharePoint Builder is my visual Xml editor for site definitions. It’s got a large beta group that is anxiously awaiting a release. I just have to sit down and get it out to everyone. One of the first projects to be added to my SharePointForge site to call its home.

    SharePoint Wrappers
    This set of .NET wrappers provides easy to use objects to access SharePoint information remotely (via Web Services). Uploaded to CVS so anyone can grab them anonymously, I have some updates to do but there hasn’t been any projects using it or needing the updates so it’s been on the back burner. Still, I think it’s a good resource as many people want to do something with SharePoint but can’t use the Object Model (because it’s for a remote web site or desktop app) and don’t want to fiddle with SharePoint Web Services. Will get to update this but probably not until sometime in February.

    SharePoint Template Project
    Another SourceForge-soon-to-be-moving-to-SharePointForge site. This is really two things. First, a framework to distribute templates for SharePoint and a way to get them out to the end user. There are a few templates that people have asked for but couldn’t produce that I’m making for them and others that people have offered me to include in this project. Not sure how this is going to shake out, but there’s some interest. Another project that will come sometime in February as some of the others on this page take precendence (I am only a one-man show you know).

    SharePoint Admin Host
    This is a small project that I built which allows you to write Plugins for SharePoint to basically do anything against a site or set of sites. A call for plugin authors went out and SDKs are being sent out. Another project to be hosted on SharePointForge and makes use of my SharePoint Wrappers to enable you to build desktop SharePoint applications.

    My one-stop shopping spot for SharePoint development projects. Basically a home for the homeless. Up and running but not all the hidden wires are revealed so the shop isn’t open for business yet, just the storefront is dressed for people to come by and say “I should come back here again later”. In the works and should be public in the next week or two. 

    DotNetNuke Skins
    I have a set of DotNetNuke skins that basically let you skin your own DNN site to look like any of the OOTB SharePoint themes. I’ll probably put these up on my personal site but still some work to do there as I figure out permission issues. Also have an Office 12/SharePoint V3 skin but I can’t release that until after the public betas (coming soon).

    Might be a couple of other projects (I have so many things kicking around) and I juggle working on them them between custom web parts, sites, templates, tools, HOWTOs, etc. (some say I have ADD) in my spare time. No, I don’t sleep. Why sleep when you can have this much fun!

    BTW, I’m blogging this post with a tool called BlogJet. It’s a desktop doofer that Scott “The Toolman” Hanselman (and a raft of others) push and let’s me do blog entries on my desktop, then upload it to the site. What I really like is that it’s an offline tool. So many times I’m blogging on the site and have to keep saving it and coming back to update it. Yeah, I could use another tool to do it offline but then there’s issues with formatting, image linking, blah, blah, blah. BlogJet is cool because it gives me my full screen to work with and now has Flickr support so I can just upload my screenshots to Flickr and link them visually into my blog.

    Very nice so another tool I’m purchasing and adding to my offline setup directory. I keep a setup folder on an external Iomega 250GB drive that I can easily hook into a new machine after getting the OS up and running. It contains all the setup programs that I use so I update it from time to time with newer versions and burn a DVD on occasion just for backups. Makes for setting up a new drive very nice. I still have to sit down and do something geeky like create an installer that will automatically give me a menu of choices so I don’t have to run each setup.exe individually but with the list of things to do above, Life 1.0 and Work 7.2 going on, who has time?

    So much time and so little to do. Wait a minute. Strike that; reverse it (thanks Todd!)

  • Anyone up for internet panhandling

    Will swap Messenger 8.0 invite for a Google Analytics one. Email me.

    Yeah, it's come to this. Panhandling on the net.

    So, any takers?

    UPDATE: I thought it was to me but I guess not. I’m looking for a GA invite, not a Messenger one. I’ve got tons of those. As someone pointed out, it might be that Google actually sends the invites out, not users. Sorry about that folks.

  • SharePoint Team Room Template: Under the Hood

    Recently there were three new Windows SharePoint Services templates added to the mix (much like the 30 or so that MS published awhile back and I have hosted on my development site for you to mess around with). Thanks to Bart Bultinick's blog for the link to these.

    As an Agile guy, we have a concept called an Agile Modeling Room (or War Room or Team Room, goes by many names). Basically a dedicated space for the project team to get together and work. No interuptions. No having to move your stuff around. Lots of whiteboards. Lots of creativity. Lots of discussion. You know, collaboration. Oh wait. SharePoint. Collaboration. This is going somewhere.

    So if SharePoint is about communication and collaboration, why not build a Team Room using it. Not like anyone hasn't thought about this before but now there's a template you can use and not have to spend a few hours conifiguring lists and all that jazz. Go ahead and download it here. It's an installer which just unzips the .STP file and a README.TXT file to wherever you want. Then you need to upload the .STP file to a top level WSS site template gallery or add it via the STSADM program with the addtemplate command. Finally, create a new site using the template. I've created an online demo of the Team Room site here with the other MS templates I've got online for demo purposes so feel free to look around and even use the Guest account to add and edit content (but please don't mess with it too much).

    When you install the Team Room template and create a new site, you're in for a bit of feast. Rather than the usual one or two custom lists that some of the other templates offer, the Team Room template creates 18 lists (mostly used for lookups and views), a document library and discussion board. It's no replacement for an Agile War Room, but it certainly is useful and some work has gone into it by the guys who make all these templates. So here's a breakdown of what you get and ways you can use this new tool.

    Main Lists
    There are only a few main lists that drive the system but a few nice modifications make these a little more usable than your OOTB list.

    Team Announcements
    This is just your stock announcements list and lives on the home page. Use it to let the team know of changes to the site. As a rule, I generally tell people to subscribe to something like this and anytime there are major changes, post a message. Saves on having to create alerts to every list.

    Standard discussion board on the home page. They've added the modified field to the view so you can see when the message was posted (and sort by this). However the big addition here is the form of metadata and views. They've added the following views to this list: By Category, By Event, By Subteam, By Author, Chronological, Created By Me, Condensed View, Assigned To Me, and Keyword Filter. Most of these are filtered/sorted/grouped around the extra metadata they added to the list which includes the following fields:

    • Primary Category - Lookup (into Category list)
    • Category Keywords - Single line of text
    • Associated Event - Lookup (into Event Profile list)
    • Associated Subteam - Lookup (into Subteam Profile list)
    • Review Deadline - Date and Time 
    • Reviewer - Lookup (into User Information)
    • Review Subteam - Lookup (into Subteam Profile list)
    • Review Status - Choice 
    • Inactive Date - Date and Time 
    • Keep Active - Yes/No 

    The Keyword Filter view is interesting. It contains a form web part on top of the list so enter a keyword (like "winter") and see the matching items.

    Action Items
    Another stock list when it started (the Tasks list) but modified with the following views: By Category, By Event, By Subteam, By Author, Chronological, By Priority, Open By Due Date, Open By Assignment, Created By Me, Calendar (first time I've seen someone do this), Condensed, Milestones, Assigned To Me, and Keyword Filter. Follows the same approach as the discussion with the views grouping/filtering/etc. around the metadata.

    A modified Events list with the following views added: By Date, By Category, By Event, Chronological, By Subteam, By Organizer, Created By Me, Condensed, Workspaces, Attended By Me, and Keyword Filter.

    Reference Documents
    Another modified list (this time a Document Library) with the set of columns and views we're getting tired of reading about (aka same as above).

    Something that I don't see enough of in SharePoint customization/configuration/development (which I can do an entire blog on that subject and what each of those mean) is the use of views. The Team Room template makes heavy use of this, not only creating a lot of views on lists but also creating lists of the views.

    Each document library or list that has the views (as listed above) also has a list called something like "<ListName> Views". These are just stock Links lists with the URL to each view as it's value. So on the home page, next to each list is the corresponding "Views" list that lets you do a one-click connect to the view directly, rather than having to get the user to go into the list and then pick a view. Such a small thing but a nice touch.

    As I mentioned, there are a lot of lookups on the site which are hooked into many of the lists. The site uses the following lookup lists:

    • Action Item Categories
    • Discussion Categories
    • Event Profile
    • Meeting Categories
    • Reference Document Categories

    This is a good thing as it makes everything dynamic. Two benefits to this (and something to follow if you're doing similar things in your setups). First, it means easy maintenance. Just add an item to a list and voila, it's available as content somewhere else. Second, you can partition the maintenance of the lookups. Give some lackey the ability to alter content on the lookup lists, but your regular users just have access to the lists using the lookups. It means you won't fall into a trap where someone is modifying a list and "accidently" deletes something. Well, okay, it'll happen but this approach can minimize the goof-ups. 

    At least the values are in a single list and these values (say Discussion Categories) are used as lookups in various lists as well as values for filtering and grouping. Again, the nice thing with this setup is that you can just change one list and the other values will change across the entire site. An Action Item category needs modification because the domain changed? No problem, just change it in the Action Item Categories list. Need a new category for documents? No problem. Just add it.

    Subteam Profiles
    I wanted to single this list out as it's really something you rarely see. Jim Duncan has put together the notion of creating a list with related items before (using a Project with Task items). The Subteam Profiles list does the same thing and lets you select a Subteam and display the members relating to that team. Great when you're dealing with a large project that's broken down by group or department and you just want to see a subset of names. You can check it out in action here.

    Like I said, this isn't rocket science. I mean, a few hours just creating lists and lookups and Bob's your uncle. It's just nice there's someone out there to create these and offer them for those of you who don't have the time or inclination to put one together for yourself. As always, you can modify this to your hearts content so if you do enhance this or add to it, please let everyone know!

    The main thing I will tell you from all this blather is to download the templates, install them, and learn. Really. There's a lot here, even if it doesn't look like much. It's not complicated but there are some neat things they've done (for example using the form web part to filter by keywords on the discussion board). Simple things you can with a minimal of effort which can give you some bang for you buck. You can download the Team Room template from here.

    If you find this information useful let me know in the comments. Later I'll step through the other two templates, the Document Library and Discussion Board. These again are site templates (not list templates) and have a few "extras" that make them useful. Enjoy!

  • The SharePointopolis, SharePointForge, and even more MSN invites (for a price)

    Dustin Miller posted an interesting blog today talking about the splintered SharePoint communities we already have out there and what seems to be an angst to centralizing of content and pooling of resources. He makes good points and talks about an offer he made for people to leverage SharePoint University and SharePoint Blogs. I agree with him on a few points, but it's the concept of "One SharePoint" that doesn't sit with me.

    I'm all for a metropolis, but I don't think there can be just one. I absolutely think that entities like SharePointU and MSD2D are benefitial but they're islands unto themselves. They have a specific audience and specific format.

    What does a SharePoint community look like? What does any community look like. I think it's formed by the people for the people type thing and evolves to what the people need. In the case of SPU, it's primarily forums with some news and training and whatnot added on. It serves that communities needs. For SharePointForge, it's going to be a place where developers can share and learn and users can gobble and download. To each his own.

    Can there be a single metropolis (or SharePointopolis, yet another domain to register) that is all things to all people. I doubt it. I think there can be a mega-opolis that is made up of many cities, towns, and communities centered around SharePoint much like societies and communities grow in the real world. Each is going to have it's own audience, resources, format, etc. and each will serve a specific need.

    Much like when you build your own "SharePoint" world in an organization, you generally have the engineers wanting to have complete control and precise logging of everything presented in a well organized manner. The developers would want to be able to hack the crap out of it and the information workers would want something that is just like what they have today so they don't need any training, but get all the benefits. You *can* deliver this with a single technology like SharePoint, but it's the culture of the community and the ability to re-use common elements across multiple groups that will make it bind and work together.

    For a SharePoint community, the trick might be to getting the island owners all together and talk about how they can communicate and connect together rather than trying to get them to live on the same island.

    As for SPF, it's there but I haven't fully lifted the hood for you guys yet. There's lots of wires, chains, and hidden lizards behind the scenes that has yet to be revealed which will make everything just go. I just wanted to get the site setup, the project announced, and have something to reference later. So go ahead and yell at me if you want about no content, it's your dime.

    Also, I have 5 new MSN 8.0 invites and since that's what people really want, send me an email with a picture of your favorite Disney character. First 5 get it. Yes, I'm serious. Asking for it or sending me porn won't do it. I need to see Tigger, Mickey and the rest before I'll give up the holy coveted MSN Messager 8.0 whatever thingies that I have for you.

  • A new Day, a new Community

    Some time ago and for quite awhile I've been disappointed with the likes of Microsoft's Web Component Directory and even GotDotNet. Finding good tools or even trying to download them was difficult. There also wasn't much of a community aspect to it. Lots of little silo operations going on and no cross-polination of information, knowledge, code, and solutions. Hopefully that's about to change.

    SharePointForge is my labour of love to compliment the type of workspaces out there already with a place firmly focused on the community. A place where you can come to and get value as a user and a contributor, quickly, easily, and without jumping through a lot of hoops.

    The site is up and over the next while we'll be getting things going on a full scale basis (including user registration that will get setup in the next day or so). Immediate plans over the next few weeks as the minions get things moved in include:

    • My Site - A place for you to track your own bookmarked sites and projects and generally feel like part of the community
    • Project Help and Hosting - A place to put your stuff if you're a developer and want to show it off. Also a place to look for help from other budding SharePoint developers. 
    • Collaboration and Community Projects - A lot of new initiatives that will encompass the entire community both from a contribution perspective and a benefit one.

    So sit back, relax, and join in the fun. I hope you'll enjoy the ride.

  • SharePoint Forums Part Deux and no more MSN invites!

    Just a quickie as I head off to slumberland tonight. First off, thanks for the fabulous feedback on the SharePoint Forums Web Part. Yes, it's going to be free. Yes, I'm insane. Yes, I prefer boxers (well, actually those boxers that are kind of briefs are cool too). Anyways, a few things came out of it that I'll do (not sure when but I'll squeeze it in):

    • Localization for non-English users. Thanks to Michael Greth as I always forget there are other people in the SharePoint universe. I should make it a practice to just always include this in projects, but it always slips my mind. Anyways, the forums will have localization for as many languages you can throw a stick at (and you guys will have to provide the stick unless you want the Swedish Chef language add-on)
    • Automatic importer for existing discussion forums. This was mentioned by a couple of people (Heather I think kicked it off) so I'll provide a facility in the Admin screen to suck in an existing list and create all the posts in the new list for it. It'll be up to you to delete the old list and come up with the categories (as there are no categories with the existing forum).

    Might be a couple of other nibblets that I can't remember off the top of my head but if you have any additional ideas, requests, etc. just fire them off my way and I'll put them on the list (and there's something coming up REAL soon that will enable you to do this yourself, hint, hint, nudge, nudge, wink, wink).

    Finally, there are no more MSN/Messenger 8 invites left. The internet fairies (that would be you guys) gobbled up all 12 of them I had. Thanks for everyone who nagged me!

    P.S. if anyone has a fairly lengthy discussion forum that they don't mind sending me (as a template with content) please do as I could use it for testing the import facility. Thanks!


  • Tired of SharePoint Discussions?

    SharePoint rocks. Okay, I said it. I got it out of my system. It's got a lot going for it but can also be the biggest PITA known to mankind.

    How many of us are sick and tired of the old "Discussion" boards that come with the OOTB SharePoint? I mean, threaded and flat views are so 1990s and you really can't carry on a good conversation without seeing what else was said and maybe oh, I don't know, quoting a post when you reply. I mean seriously. Internet Forums have been around for years and there are tons of great products out there like phpBB and ASP.NET Forums.

    So let's get with the program shall we?

    Another of my "pet" projects that I talked to some people at the last MVP Summit was a new Forum replace for SharePoint. Something that would be worthy of what we, in internet land, refer to as forums and not the red-headed step-child that some SharePoint engineer dreamed up. Something that would be useful. Something like this:

    Some of the features are typical of Forum type applications you see out there including:

    • Threaded messages
    • Reply with Quoting Features
    • Unlimited forums can be organized into as many categories as you like
    • Private forums for specific groups
    • Password protected forums
    • Web based administration (add/edit/delete everything inside the Web Part)
    • Member list (with stats on # of posts, etc.)
    • Locked topics
    • Sticky topics (can be used for announcements)
    • Active topics list
    • Print and email topics
    • Supports smileys/emoticons
    • RSS feeds (and/or Alerts) for forums and topics

    Additional features as this is a SharePoint Web Part:

    • Leverages SharePoint fully by using Lists to store information (instant installer, just drop it on a page)
    • Uses the built-in SharePoint roles of Reader, Contributor, and Administrator (but you can define your own)
    • Uses all built-in SharePoint graphics
    • Conforms to whatever theme/CSS changes you've made to your WSS Site/Portal to fit in
    • No membership or login required, just visiting the page that the Forum lives on will add the user to the system
    • Security trimming so users without access to a forum/category won't see it

    This is a single web part that you can drop onto any WSS site or Portal Area (yes, it works with both, and there was much rejoicing) either on a default page or your own Web Part Page. The posts are all contained in a few lists and they're built (and hidden) dynamically when you add the Web Part. As this Web Part lets you define as many forums and categories as you want, you really don't need multiple instances of it in your site (but I could be convinced to update it if you make a strong enough case for it).

    The mechanics are all done, now it's just fixing up the posts (tracking when someone adds a new post) and the stats and wrap it up for you guys to get your little grubby hands on. Okay, sorry for getting your salivating and all that with no download yet. I just couldn't keep quiet but I'll be working throughout this week to complete this (along with my other projects like SharePoint Builder) to get it out to you.

  • Boxers or Briefs?

    Like Greg Hughes posted on his blog, I have a few Windows Live Messenger (MSN 8.0) invitations available. Please send me an email to make your request, and be sure to indicate which email address you want me to send the invitation to. It would be nice if you would also tell me who you are, a little about yourself and if you prefer boxers or briefs.

  • Have your InfoPath Forms and eat them too

    Yeah, a weird title but a rather annoying quirk. InfoPath is an uber-cool tool (and there should be more posts about it!) as it let's you build fairly complex forms and make up for the lack of sophistication that SharePoint lists have for data entry, but still store the data in a Form Library (which then allows you to create views, get subscriptions, etc.). Of course, with any silver bullet/holy grail/insert name here, there are some drawbacks.

    Here's one that just irks me to no end. When you design a form you can easily tell it to submit the form to a Form Library by just specifying the location of the library and what fields you want to populate the default view. Easy sleazy. It even puts a Submit button on the toolbar for you so your users just have to click it. However the biggest issue with this is that while you can configure it to close the form, you can't tell it exit out of the application. Trust me, I've been all over Google today and tried everyone's ideas and nothing works.

    You can however create your own Submit button (as a button on the form itself) and write the following code attached to the OnClick event of the button:

    function CTRL2_5::OnClick(eventObj)

    This works fine. It submits the form (via whatever way you have the submission setup, SharePoint library, email, etc.) and then closes InfoPath (the application). Great.

    Wait a minute. This isn't right. First off, why must I put a Submit button on my form and write an event handler for it in order to close InfoPath. InfoPath gives me a simple way of putting a Submit button on the toolbar (and menu) for this. If I put "Submit" on my form and my users want to print it out, they're going to get a bit ugly button when it prints. That's ugly. There is an event on the submit process, but it's basically an event to make you do all the work the normal XDocument.Submit() does. The problem is that you can't have InfoPath do a Submit to say a SharePoint Form Library from your own OnClick event unless you write all of that code in JavaScript. You need both the Toolbar Submit button to exist in order to call the XDocument.Submit() without having to specify all the nitty gritty details (the ones you can enter if you used the built in Submit dialog) in hard-coded JavaScript (or VB Script but it doesn't make it any better). Blech.

    In other words I'm caught between a rock and a hard place if I want to a) use the built-in submit mechanism and b) exit InfoPath completely.

    Why is this so difficult. Really? I challenge anyone out there to show me an elegant solution that does this. Sure, the code above works if I click on the forms Submit button (i.e. InfoPath quits) but if the user clicks on the toolbars Submit button (which has to be there, otherwise I have to write a gob of JavaScript in my OnClick) it just closes the form (or whatever option I choose, like leave the form open). I don't see a way to have my cake and eat it too.

    Odd that it was designed this way. Why not add the option on the Submit to 1) Close the Form 2) Open a Blank Form 3) Leave the Form Open or hey, what about a new option like 4) Close the Application. Seems everyone wants to do this and you can, but you just have to use your own button and tell your users to ignore the Submit button on the menu or toolbar.

  • Getting jiggy with RPCs

    Recently there were a few articles flying around discussing the Windows SharePoint Services RPC methods and things you can do with them. I thought I would do up some short demos using nothing but XML, XSLT and the built-in SharePoint Web Parts. You can do this as well and create your own pseudo-Web Parts with no coding! Neat huh?

    First off, the RPC methods have two things going for them. They're very powerful and very difficult to sometimes get to do what you want them to do. The great thing however is that for most of them, they return either an ADO.NET RecordSet (which we'll see how to get information out of) or just regular XML responses that you can easily use to put into a Web Part.

    The Basics
    Using the Url protocol, you can call these from a simple PageViewer Web Part or put the results into the Xml Web Part. The Url needs to be formatted a certain way:


    It's really not that hard. The Method name is whatever method you want to call (not all methods are available via the Url protocol). The following methods are:

    • dialogview - Opens a view of the document libraries within a site, of a specific document library, or of a folder within a document library that is used in a dialog box for opening or saving files; or opens the property form that is used when saving a file.
    • Display - Runs a database query against the list specified by a GUID and returns XML or HTML.
    • ExportList - Exports in CAML format the schema of the list specified by a GUID.
    • GetProjSchema - Requests the XML Schema for a Web site.
    • GetUsageBlob - Returns information about the usage of a Web site.
    • HitCounter - Generates a hit on a page containing a hit counter.
    • RenderView - Requests the contents of a view for the list specified by a GUID.

    We're only going to look at a couple here, but feel free to experiment on your own.

    For this sample, I've setup a document library called "Samples" on my site and we'll use the Display RPC Method to get the data from it:{40A74BD8-9263-4041-8894-F25A4D59D608}&XMLDATA=TRUE

    The List parameter needs a GUID for the list. You can get this when you select your list and click on Modify Settings and Columns. The GUID is displayed in the Address to the page in your browser. Just copy and paste it for your own list. Click on that link in your browser and you'll see something like this:

    - <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    - <s:Schema id="RowsetSchema">
    - <s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30">
    - <s:AttributeType name="ows_DocIcon" rs:name="Type" rs:number="1">
      <s:datatype dt:type="string" dt:maxLength="512" />
    - <s:AttributeType name="ows_LinkFilename" rs:name="Name" rs:number="2">
      <s:datatype dt:type="string" dt:maxLength="512" />
    - <s:AttributeType name="ows_Last_x0020_Modified" rs:name="Modified" rs:number="3">
      <s:datatype dt:type="datetime" dt:lookup="true" dt:maxLength="16" />
    - <s:AttributeType name="ows_Editor" rs:name="Modified By" rs:number="4">
      <s:datatype dt:type="string" dt:lookup="true" dt:maxLength="512" />
    - <s:AttributeType name="ows_LinkCheckedOutTitle" rs:name="Checked Out To" rs:number="5">
      <s:datatype dt:type="string" dt:maxLength="512" />
    - <rs:data>
      <z:row ows_DocIcon="doc" ows_LinkFilename="01_HighConceptPrimer.doc" ows_Last_x0020_Modified="1;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="01_HighConceptTemplate.doc" ows_Last_x0020_Modified="2;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="02_PrelimGameDesignPrimer.doc" ows_Last_x0020_Modified="3;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="02_PrelimGameDesignTemplate.doc" ows_Last_x0020_Modified="4;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="03_RoadMap.doc" ows_Last_x0020_Modified="5;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="04_RequirementsPrimer.doc" ows_Last_x0020_Modified="6;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="05_FinalGameDesignPrimer.doc" ows_Last_x0020_Modified="7;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="05_FinalGameDesignTemplate.doc" ows_Last_x0020_Modified="8;#2006-01-03 19:03:13" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="06_TechDesignPrimer.doc" ows_Last_x0020_Modified="9;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="07_PublisherMilestonesDeliverables.doc" ows_Last_x0020_Modified="10;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="09_BugReporting.doc" ows_Last_x0020_Modified="11;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="09_GameTestingMethodology.doc" ows_Last_x0020_Modified="12;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="09_GameTestingPrimer.doc" ows_Last_x0020_Modified="13;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />
      <z:row ows_DocIcon="doc" ows_LinkFilename="09_TestDesignGuideline.doc" ows_Last_x0020_Modified="14;#2006-01-03 19:03:14" ows_Editor="1;#Bil Simser" />

    This is the Xml that came back from our list and is basically an ADO.NET RecordSet. Nice. Now we want to do something with it. 

    Drop an Xml Web Part onto a page and enter the Url for your own list into the Xml Link field. Now we want to format this so we can use a simple Xsl file to format the output. In this case, I'm going to put the results into a table. Here's the Xsl file you can enter into the Xsl Editor:

    <xsl:stylesheet version="1.0" xmlns:xsl="" xmlns:z="#RowsetSchema" xmlns:rs="urn:schemas-microsoft-com:rowset">
    <xsl:output method="xml" />

    <xsl:template match="/">
    <table border="1">
            <xsl:apply-templates select="/xml/rs:data"/>

    <xsl:template match="z:row">
    <td><xsl:value-of select="@ows_DocIcon"/></td>
    <td><xsl:value-of select="@ows_LinkFilename"/></td>
    <td><xsl:value-of select="@ows_Last_x0020_Modified"/></td>
    <td><xsl:value-of select="@ows_Editor"/></td>


    It's really simple and just selects all the items in the list and displays them in a table. You can see the final output here on this page. That's just a simple example but lets you really grab information from SharePoint without having to resort to building Web Parts. With some transformation you can change the way the information is displayed (for example formatting the dates). You can accomplish the same using the DataView Web Part if you want to use FrontPage, but this method works just as well (although it does require an understanding of Xml/Xsl so be ready to learn something new).

    Online ONET.XML
    This method is one of my favs as it basically lets you see everything about your site, online. The RPC Method, GetProjSchema, will return you something very similiar to what you would see if you opened up an ONET.XML file for a site. Site Name, Navigation Bars, Document Templates, Modules, etc. It's not exactly the same, but is coming straight from the source and with it you can do some pretty cool stuff.

    First, go ahead and invoke it on my demo site. Here's the Url:

    This brings back the output which is just Xml. It starts with the Project tag, then continues on with NavBars, ListTemplates, DocumentTemplates, BaseTypes, Configurations, and finally Modules. Yup, just like ONET.XML.

    What can we do with this information? Well, let's say we want to show a list of all the available Templates on the site with a description (very much the same as what you get when you look at the Create Page). Create a new Xml Web Part, hook it up to call the GetProjSchema method on your site (or mine, I don't much care) and enter this into the Xsl Editor:

    <xsl:stylesheet version="1.0" xmlns:xsl="" xmlns:z="#RowsetSchema" xmlns:rs="urn:schemas-microsoft-com:rowset">
    <xsl:output method="xml" />

    <xsl:template match="//Project">

    <table border="1">
    <td><strong>Template Name</strong></td>
    <xsl:for-each select="/Project/ListTemplates/ListTemplate">
    <td><xsl:value-of select="@DisplayName"/></td>
    <td><xsl:value-of select="@Description"/></td>



    Great. You now have a table that lists all the templates in your site with a description. Here's what the sample output looks like. You can extend this to do things like building your own Create page (filtering things out you don't want). You're really only limited by your imagination (and some XSLT skills). Just remember that you can only manipulate the information that you get from the queries, but if you're skilled at XSLT you can do things like combine requests and pull in various pieces of the system together to do your bidding (even have one Xml Web Part feed another).

    So check out the MSDN documentation on the RPC methods and have fun! 

  • Folders bad, metadata good!

    Or is it meta-data? META-data? MetaData? Nevermind.

    Dustin Miller put together a nice summary of his experiences during his training sessions about organizing information and advocating the use of meta-data (meta data? ARGH!) over folders. I totally 100% agree with him and hope others follow this advice. Here are a few other reasons why you should just say no to folders.

    • There is a path limitation in SharePoint (or maybe IIS) of 260 characters in total. As you start creating the folder structure from hell, you'll find this gets wiped out very quickly and you end up staring at yet another cryptic SharePoint error message (basically "Something bad has happened") with no indication of the what the problem is. Better yet, documents just vanish into the ether and you have no idea that they're really still there, tucked away and taking up precious space in your SQL Server but you're unable to access them.
    • Ever need something and try to go look for it. If you know where to find it, it kind of defeats the purpose of creating a complex organization system if you already know where it is. If you don't, search might turn it up but the vast majority of carbon-based units out there can't figure out how to search for something so that's a bit of a waste. Folders only allow you to look for things the way someone who put the stuff there. If I had a brain fart and filed the asset records for 1997 under Financials -> 1997 -> Assets would you think to look there or in Assets -> By Year -> 1997. Again, you need to know the organization structure to navigate it. Using folders for organization just compounds this as we end up with deeply nested folders upon folders and nobody can find anything (even the people that put it there).
    • Folders are one-dimensional. Think of a Yellow Pages. I can open it up and look for a pizza place by looking in Pizza, Restauraunts, or maybe even Dining. I don't need to know the section that I want to look in, I can find it in various ways. Everyone is wired differently and will look for things the way they were brought up. What if I was the owner of a parts company and decided to start organizing my inventory using SharePoint. Would I put my "X89 Widget" under "Aircraft -> DC9 -> Parts" or in "Parts -> By Aircraft -> Large". I can only organize things one way with folders and if I need to slice information up differently, I either end up with links all over the place (which will easily break and become out of date) or multiple copies of the same thing because the Finance department looks for things by Asset Number and the Parts guys look for it by Part Number. Metadata is the way to please everyone. 

    I understand the desire for folders. After all, growing up in the DOS and Windows world it's all about folders. You create subfolders to organize information. You're used to it. You covet it. You rub the lotion on its skin and it place the lotion in the basket. Hmmm. Anyways, yes it's natural to feel this is the way to organize and since we've been doing it all our virtual lives, why change? I think the key thing is thinking about how you organize your information and Metadata is critical to the SharePoint concept. With metadata you can effectively create customized search arguments that permit you to organize information dynamically, and to even use search criteria from one document library to retrieve information from another.

    Put another way, you can forego the traditional hierarchical folders in organizing your document libraries. Instead, you can create metadata lookups that can not only be used as organizational keys for documents in one library, but can be used as search arguments to locate documents in other libraries. In this way, you can create searchable document pools with effectively dynamic organization, not only searchable but re-organizable without any physical manipulation of the documents themselves.

    Using metadata gives you the property search (with SharePoint Portal Server). During the indexing process, the IFILTERs, which extract the text out of the documents, put property information into special property buckets that are kept separate in the index so they can be searched separately. This allows you to set properties in your Office documents such as department, project number, author, keywords, etc., and then have the ability to search on those fields individually.

    You can use the search engine in SharePoint to search for documents where the department is engineering and the project is 123. Where a full text document search for engineering and 123 may find hundreds of entries because the words engineering and the number sequence 123 appears in many documents, a search via properties may yield the 10 or so documents that are truly relevant to your search.

    Properties are what most people believe they are creating when they create a new field in a document library. That's not actually true. The meta data fields in a document library don't have anything to do with properties directly. During the edit process, however, Office performs a little slight of hand. It takes the information you enter in the meta data fields for the document library and makes corresponding custom properties in the document. The net effect is that, although you've only created fields in a document library, your documents now have custom properties.

    These custom properties are picked up by the indexing process (more specifically, the IFILTER for Office documents) and they are placed into the search index. You can then use those properties by making them available via the advanced search page in SharePoint. This also means that non-Office documents don't share the same relationship between fields in the document library and the properties of the document itself. So if you're trying to develop a searching mechanism for documents like TIF documents or PDFs, you'll find that setting up a meta data field for those document libraries won't allow you to search for those documents directly via their properties. You'll still be able to organize the information.

    Bottom line, get your head out of the sand and stop trying to mimic what is "traditional" as it's not going to give you the best bang for your buck. Use SharePoint and leverage what's there as it will doing the heavy lifting for you, you just have to tell it to get started.

    Harnessing Properties in SharePoint Search

  • Welcome to 2006, the first day of the rest of your, err... nevermind

    Okay, here we are kids. It's 2006 and life is grand ain't it? So what would the first post of the year be for me, why it's the sessions I'm holding at this years SharePoint tracks as part of the DevConnections conference April 2-5, 2006 at the Hyatt Regency Grand Cypress, Orlando, Florida (whew, that's a mouthful).

    As I tripped over Bob Mixon's blog I see that the final PDF brochure thingamajig is avaiable (why am I always the last to know?). You can check out all the good stuff you could see (for a few thousand dollars) right here, but since this blog is all about me, here's my happy-go-lucky SharePoint sessions for you to look forward to:

    In this session, we’ll talk about some of the real problems developers face when trying to test Web Parts in the real world with real applications. We’ll explore some techniques for making Web Part development a little more testable (using NUnit), build a Web Part using a Test Driven Development (TDD) approach, and have an open discussion about when and where we might want and might not want to implement unit tests in real world applications.

    Customizing a portal or Web site is always the first order of business when someone implements SharePoint. Companies always want their sites to look and feel right to their customers. Employees want to feel at home with their portal so it looks like the rest of the organization. Custom applications need to look like
    they’re part of the big picture. You’ll start from the humble beginnings of customization from simple logo changes up to complete overhauls of the look and feel of SharePoint. This includes both portal and theme customization and some tricks and tips you can use to get big results for very little effort. By the end of the session, you’ll be able to take that drab and dreary SharePoint look and make it your own.

    What good is data if you can’t report against it? The reporting capabilities of SharePoint are basic, but in this session we use some custom and third-party solutions to dive into the contents of your lists and document libraries in order to get good value out of what you put into them. We’ll build some reports on the fly using existing tools then rip open the covers in the object model to turn your SharePoint list into a well-tuned data reporting machine.

    Not only do you get to listen to me blather on about SharePoint for many hours, but you also get:

    • A free one-year subscription to MSDN magazine
    • A one-year subscription to SSWUG.ORG (with something to do with SQL, like that's important or something)
    • A six-month subscription to SQL Server magazine (only six months?)
    • Three fun-filled happy meals, err, lunches
    • Live organ transplants (as we seem to have missed out at PDC with these)
    • Three continental breakfasts
    • One low-fat carb-free reception (well, I can't guarantee the low-fat or carb-free part)
    • One Theme Party (come as your favorite 6-0 Hive!)
    • Conference T-Shirt and Bag (to wear to the Theme Party of course)
    • Software (non-specific but I'll be it's not porn)
    • Proceedings Book and Resource CD

    Should be a blast so hope to see you there! Remember to book early at for some cool deals and tell them Bil sent you (well, don't actually as it may hinder my ability to be there and I've already got my spiderman jammies all packed for the trip).