INauseous()

MSDN Library – Low Bandwidth Mode… May 28

If you’re needing access to MSDN library from a 3g tethered, or low bandwidth at a location, MSDN Library is now published in a mode that lowers the payload…

http://msdn.microsoft.com/en-us/library/default(loband).aspx

Much more detail on Scott Hanselman’s blog on the HOW…

http://www.hanselman.com/blog/LowBandwidthViewAndOtherHiddenAndFutureFeaturesOfMSDN.aspx

This version of the enterprise library cannot be installed side by side with version 4.0 on x64 May 22

When upgrading to Enterprise Library 4.1 on an x64 machine, even though you’ve run the 4.0 uninstaller, and even removed the registry key, you’ll still end up with an installer complaining that you can’t do side-by-side install.  The issue is the key is actually under the Wow node for x86 compatability – just remove this key…
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Enterprise Library v4

Building a Mini URL Service – Part 2 – The Algorithm May 05

Part 1 – Part 2

The first order of business is what URL shortening approach should be used to take some very long URL, which in IE7 is limited to 2,083 characters (KB208427) and provide a nice compact link.

The first part of the link (protocol + server + port) is generally controlled by what domain name you can get – for me, my little demo is http://MyMiniUrl.net. The rest of the URL – the path is something in your control.

Doing a search I came across a few approaches but settled on a Base 62 approach that uses a sequence generation maintained in the persistence tier. The idea is to generate a unique sequential number, then convert that numeric to a Base 62 representation. For the sequence generation, I just relied on the DB layer (MySql or MS SQL) to generate this from an identity column.

Once that identity value is generated, it gets run through a Base 62 conversion to a string representation. That string along with the identity (from the DB), the full Long URL, and a cryptographic hash of the Long URL is stored in the DB. The basic DB table schema is as follows (for MySQL):

Column

Type

Description

urlId

Bigint(20)

Identity column

miniUrl

Char(12)

Shortened “path” of the URL

fullUrlHash

Char(32)

Crypto hash of Full URL using MD5

fullUrl

Varchar(4096)

Full URL provided

The indices are as follows:

  • Primary – index on urlID
  • fullUrlHash – Unique index
  • miniUrl – I left this as “not unique” given my persistence pattern starts off with this value as null.

So, when the URL service is asked to create a short URL, it first checks to see if the URL was already generated. To do that the UrlService uses the basic pattern:

  1. Checks the URL pattern to a matching regular expression (in the config file)
  2. Generates a MD5 hash of the full URL
  3. Checks to see if the hash already exists doing a SQL lookup on the hashed value of the full URL
    1. If exists, just return the existing shortened URL
    2. If doesn’t exist
      1. Insert new Long URL, Hash of URL
      2. Get new identity key
      3. Convert new identity key to Base 62
      4. Return short URL using Base 62 representation

Now, for the Base 62 algorithm, I looked around at a few approaches, and Chris had a good post on various approaches as well – Friendly Unique Id generation.

Starting with his code, I also found another approach located here, then finalized on the following:

        static int baseNum = 62;

        private static readonly String baseDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

        public static string Base62ToString(long fromValue)

        {

            string toValue = fromValue == 0 ? "0" : "";

            int mod = 0;

 

            while (fromValue != 0)

            {

                mod = (int)(fromValue % baseNum); //should be safe

                toValue = baseDigits.Substring(mod, 1) + toValue;

                fromValue = fromValue / baseNum;

            }

 

            return toValue;

        }

The basic approach is to loop through the source value, grab the remainder, convert that remainder to Base 62 and append it to a string return value, until there’s nothing left.

So, in terms of “string” vs. StringBuilder performance, I also tried using StringBuilder in place of string concatenation, but performance, in a loop of a billion iterations was far better (about 60%) just with simple string concatenation. Now, I’m not too concerned with garbage collection at this point, I just wanted something quick and efficient – and in the end correct.

Building a Mini URL Service – Part 1 May 04

This set of posts is about a "Mini URL" service that I created initially to help provide a means to automate shortening of URL's for sending in emails to users in SharePoint. If you've used SharePoint and at times you need to send a link to a List or Document item one way is to "right-click" the item (whether it's a folder, list item, or document) then if it's IE choose "Copy Shortcut". You can then just past that into an email and send over to your recipient.

Recently, I also noticed that even the White House Tweets (http://twitter.com/whitehouse ) are using another well known URL shortening service. A quick look around and you'll see that there are quite a few out there now.

So, I stripped what I built into very basic ASP.NET Web Site and created a service that is now hosted at GoDaddy at http://MyMiniUrl.net. This intended as a pure demo project and the full SharePoint integration won't initially be made available until I work out some minor issues – mostly related to "packaging". But for now, I wanted to just document some of the initial steps, challenges, and work-around that I encountered building this along with some of the decisions (trade-offs) I made along the way.

The initial technical goals of the service are as follows:

  1. Provide a very basic redirection service for short URL – i.e. http://myminiurl.net/B
  2. Hosted on IIS7
  3. Hosted on GoDaddy with their form of "Application/Domain" mapping – you'll see a minor challenge here later related to how Request.ApplicationPath, the tilde (“~”) don’t work as expected…
  4. Provide Persistence tier independence through Provider model <system.data/DbProviderFactories>
    1. MS SQL
    2. MySQL
    3. Future (SQL Lite)
  5. Pluggable HttpModule for incorporating into existing web sites

The SharePoint integration aspect, not yet provided here, is implemented as an ECB (Edit Control Block) menu option that allows immediate automated generation (or lookup if the URL has been shortened already) then presentation of a quick Application page that allows the user to specify an email or pick from People Picker to send out.

MyMiniUrlEcb

Again, I've not published that part of this yet until I address a few issues.

 

del.icio.us Tags: ,

Making a Win7 Bootable USB device. May 04

I have an old Toshiba that has no optical drive.  To install Win7, I needed a bootable USB stick.  Here are the basic steps

0. Download Win7 http://www.microsoft.com/windows/windows-7/

1. Get a USB stick – need a 4 gig one here – the ISO is about 2.5 GIG

2. Format the USB as NTFS (use quick – no need for sector check) – it MUST be NTFS

3. Run DISKPART from an elevated command prompt

4. Make the new USB volume “ACTIVE”

5. Extract the Win7 ISO somewhere (not the USB) – you can use ImgBurn, IsoBuster, WinRar or some tool that can extract direct from an ISO – or mount with Daemon tools or similar, then copy the files from there.  We need to extract first as we’ll need to run a quick program off of the Win7 ISO

6. On the recent Win7 extract, change to the BOOT subdirectory

7. Run BOOTSECT /NT60 <targetDrive:>

       where , <targetDrive> is the drive the USB stick is mounted as….

8. Copy all the files from step 5 above to the ROOT of the USB stick (with subdirectories of course)

Now, you may be able to skip step 5 copying files across and running BOOTSECT directly – I hadn’t but doesn’t necessarily mean it won’t work.

 

 

del.icio.us Tags: ,,

Thanks Jukka – MOSS 2007 SP2 Upgrade Failure – Solution! Apr 30

During an upgrade, the psconfig command fails with

Failed to upgrade SharePoint Products and Technologies.

An exception of type Microsoft.SharePoint.Upgrade.SPUpgradeException was thrown.

Quick live search and I find on Jukka’s blog the answer:

http://blogs.msdn.com/jukka/archive/2009/04/30/error-during-sharepoint-sp2-install.aspx

Specifically, a feature was not installed, and quickly installing using the stsadm command Jukku provides, it then works…

Couple of Visio Links Apr 04

Visio is my primary diagramming tool.  I wanted to point out a couple of recent links I came accross that help in diagramming various things.

The first are stencils that are used on MSDN and TechNet diagrams – these are a set of stencils that can be used in Visio just by adding the stencil to the list for your diagram.  Located here:

Visio stencils for IT Pro posters

http://www.microsoft.com/downloads/details.aspx?familyid=08105458-1D92-44AD-B7E0-744AA853A7BF&displaylang=en

The other is Visio Toolbox.

This site is a hosted by Microsoft that provides basic background but there is a new add-in along with some others.  The new add it just release

There are Add-ins, Templates, and Tools

Visio Toolbox

Some of the Add-ins

WBS Modeler

New Rack Server Virtualization Add-In for Visio 2007 Pro

System Center Add-In

Disk Space Monitoring Add-In

Software Upgrade Assessment Add-In

Folder Access Rights Map

Microsoft Exchange Server 2007 Visio Add-in

PowerShell for Visio

There’s also a tool that will build a stencil for you if you just upload some images.. That’s here:

http://visiotoolbox.com/en-us/Iconset.aspx?resourceid=1

Kerberos Configuration Troubleshooting Feb 26

I wanted to post about one of the best tools I’ve found for getting Kerberos properly configured and in the process getting some great HOWTO information on Kerberos, how it works, etc.

When working with SharePoint, and the plan is to have your site run under Kerberos, I recommend using this tool before actually provisioning the Web App.  You can do it later, but you’d have to “stop” the WSS provisioned Web App before using this tool.  Why?  Because the IIS site you use for testing must use the DNS name of the Web App – that ultimately is the key to Kerberos – getting all the SPN (servicePrincipalName) set for the right AD Principals.

Basically, before actually creating or extending your web app in SharePoint, which would provision the Web App in IIS, you setup an standard IIS ASP.NET Virtual Host in IIS using the same DNS name as the eventual SharePoint Web App, set the App Pool to the Principal that going to be the App Pool for the Web App, then, put the DeleConfig files in the IIS site and hit the default page; gives fantastic diagnostic information on if Kerberos is setup correctly.  I'd suggest this as a first step... 

http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/delegconfig-delegation-configuration-reporting-tool.aspx

http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1434

Technorati Tags:

SourceSafe in the Cloud – a second life for VSS Feb 16

This post in no way endorses the use of Visual Source Safe, Mesh, or general supportability of this approach.  This is entirely at your own risk….

Visual Source Safe (VSS) has been around for some time.  There have been a few 3rd parties, then Microsoft, that implemented some nice server side capabilities such as Source Off Site (SOS), VSSConnect, and now in VSS internet based access. 

The issue with the server approach is that all of these requires some process to be running and hosting some part of VSS all the time.

What happened if you just used Mesh and shared the VSS DB folder (it’s just a folder) in Mesh and shared that way?

Well, I can say that for the past several weeks, I’ve been successfully working on a couple of different machines, doing check-in/out and it’s looking like no major issues so far.  Now, to be clear, this is just 1 user in a non-concurrent mode access the Mesh folder (when it’s local) from different machines.  Mesh gladly in the background syncs all the changes up to the “cloud” and when I’m online with the other machine those changes, and all status, etc. come down nicely…  I’ve even run analyze several times to just be sure..

image

Try spending some time in the cloud… Feb 13

Cloud services that is.  Windows Azure, .NET Services, Live Services….

If you looking for the spoon fed variety of information, a bunch of HOWTO vides have been released – see below.

These are small little “nuggets” – like those MSDN Nuggets out of Microsoft UK.

image

Get Started Developing on Windows Azure?

If you’re a developer and you’re new to Windows Azure, start here! You’ll see what you need to download and install, and how to create a simple “Hello World” Windows Azure application.

Deploy a Windows Azure Application

You’ll see what it takes to move your application into the cloud – you’ll see how to request and register a token, how to upload your Windows Azure application and how to move it between staging and production in the cloud.

Store Blobs in Windows Azure Storage?

Learn how to leverage Windows Azure storage to store data as blobs. You’ll learn about blob storage, containers and the API that makes it easy to manage everything from managed code.

Leverage Queues in Windows Azure?

Learn how to use queues to facilitate communication between Web and Worker roles in Windows Azure.

Debugging Tips for Windows Azure Applications

The Windows Azure SDK includes a development fabric that provides a "cloud on your desktop." In this screencast, learn how to debug your Windows Azure applications in this environment.

Get Started with .NET Services?

.NET Services are a set of highly scalable building blocks for programming in the cloud. In this brief screencast, you'll learn about the registration process, the SDK and the built-in samples - everything you need to know in order to get started.

Harness the Microsoft .NET Service Bus?

The .NET Service Bus makes it easy to access your Web services no matter where they are. In this brief screencast, you'll see how to take a basic Windows Communication Foundation (WCF) service and expose it to the Internet with the .NET Service Bus.

Get Started with the Live Framework?

If you are looking to get started developing with the Live Framework, this is the place to start! In this screencast you'll learn how to get a Live Services token and what you need to download in order to start writing Live Framework applications.

Use the Microsoft Live Framework Resource Browser?

The Live Framework Resource Model is a simple, straightforward information model based on entities, collections and relationships. In this brief screencast you'll learn how to navigate the relationships between entities by using the Live Framework Resource Browser, which is a tool that ships with the Live Framework SDK.

Startup Delayer – Smoother Starts… Feb 06

I have to give a nod to Startup Delayer from r2 Studios

This tool takes over the “timely” launching of all those startup programs that just seem to bog down a fresh boot.  Just not having all these programs competing for resources makes the process nicer.

A few programs that I use that had issues at startup with System Tray icons just not appearing but the programs were running are no longer an issue.

image

Setting Navigation properties on a SharePoint (WSS) Site… Jan 24

Recently, I was going through setting up some sample navigation approaches for SharePoint.  The first step was in creating a bunch of Child Sites and some basic hierarchical structure. For that I used a great tool from IDevFactory called SWAT just to create some empty Team Sites. 

The one issue with that tool is it doesn’t allow setting a few options globally.

What I wanted was to have under the Navigation options to have the “Show Subsites” enabled.  In addition to a few other navigation settings.  Just as shown below:

image

 

To do that you need to access the AllProperties collection on the SPWeb object and add or update any existing entries.  What I came up with is the following:


   37 private static void SetNavigation(SPWeb childWeb)
   38 {
   39     if (childWeb.IsRootWeb == false)
   40     {
   41         SPNavigation spNav = childWeb.Navigation;
   42         childWeb.Navigation.UseShared = true;
   43         childWeb.Description = childWeb.Name + " description...";
   44 
   45         SetAllPropr(childWeb, "__IncludeSubSitesInNavigation", "True");
   46         SetAllPropr(childWeb, "__InheritCurrentNavigation", "False");
   47         SetAllPropr(childWeb, "__IncludePagesInNavigation", "False");
   48         SetAllPropr(childWeb, "__NavigationShowSiblings", "False");
   49         SetAllPropr(childWeb, "__NavigationOrderingMethod", "2");
   50     }
   51 }
   52 
   53 static void SetAllPropr(SPWeb web, string key, object value)
   54 {
   55 
   56     if (web.AllProperties.Contains(key))
   57         web.AllProperties.Remove(key);
   58 
   59     web.AllProperties.Add(key, value);
   60 }

 

The full standalone console project is located here

What’s my WSS/MOSS patch level? Jan 16

For a good list on what your current farm patch level is at check out the following post:

http://www.mindsharpblogs.com/penny/articles/481.aspx

Just navigate to Central Administration –> Servers in Farm and look at the version reported.