Microsoft Application Architecture Guide

I’m putting this here for future reference.

Posted by luisabreu | with no comments
Filed under:

Vint Cerf: 'Google doesn't know who you are'

Interwebs founding father and Google evangelist Vint Cerf has insisted that when you search Google, the company doesn't know who you are.

Thursday morning, at a mini-conference in San Francisco, the always entertaining Cerf sat down with Wall Street Journal columnist Walt Mossberg and other tech luminaries to discuss "open" mobile networks. But at one point, the conversation turned to the epic amounts of user data pouring onto Google servers across the globe.

As Mossberg started to complain about Google using Gmail and other sign-in services to tie more and more search data to real live people, Cerf quickly interrupted. "We still don't know who you are," said the Google figurehead.

Mossberg begged to differ, pointing out that as netizens sign-in to their Google accounts in order to use other services, the company also ties those accounts to search data. "When I search Google, you can see - right up at the top of page - that I'm logged in. You can see my Gmail address," he told Cerf. "You know who I am."

But Cerf insisted that even in those situations, Google doesn't know you. "You are somehow conflating things that I think need to be disaggregated," Cerf told Mossberg. "A Gmail identifier doesn't tell us anything. It's just an identifier. We have no other thing to tie that to. It's just an identifier [You said that already. -Ed]. And by the way, you picked it. We didn't."

As ridiculous as that may sound, it's a common Google argument. When a federal court recently asked Google to divulge the identity of an innocent Gmail user - if the account was still active - the company told us that wasn't possible.

http://www.theregister.co.uk/2009/11/07/cerf_on_google_data_collection/

Posted by donna | with no comments

Migration Step Thirteen: You installed in migration mode!

And we finished the install and the "migrate to Windows SBS" is ready to go.

Under the hood the FSMO roles have been added to this box and the SBS 2003 is no longer the king of the domain.

[Meanwhile I have to take a break to wash my car so I'll be back later tonight to continue blogging this test migration]

We have 21 days from this point to have the two SBS boxes work together.  After 21 days you have to demote/remove the SBS 2003 box.

Posted by bradley | with no comments
Filed under:

Parsing XHTML documents with .NET 4.0 and XmlPreloadedResolver

When I looked at "What's new in System.Xml in .NET 4.0/Visual Studio 2010" with the beta 1 release I presented an example that shows how parsing an XHTML document referencing one of the W3C XHTML 1.0 DTDs can be sped up by using the new XmlReaderSettings.DtdProcessing set to DtdProcessing.Ignore. The drawback I mentioned is that any referenced entity in the document would then throw an exception.

What I overlooked at the time of the beta 1 release but I have found now in the recent beta 2 release is the new class XmlPreloadedResolver in System.Xml.Resolvers. It allows you to avoid any network access to the W3C's server for the XHTML DTDs but nevertheless parse any XHTML document having entity references as it uses copies of those DTDs stored in an assembly deployed with the .NET framework.

If I use that class with an adaption of the older example the code looks as follows:

            Stopwatch watch = new Stopwatch();
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;


string xhtml = @"<!DOCTYPE html
PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN""
""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
<html xml:lang=""en"">
<head>
<title>Example</title>
</head>
<body>
<p>Price is: 100 &euro;</p>
</body>
</html>"
;
watch.Start();
using (XmlReader reader = XmlReader.Create(new StringReader(xhtml), settings))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Text)
{
Console.WriteLine(reader.Value);
}
}
}
watch.Stop(); ;
Console.WriteLine("First parse: elapsed time: {0}", watch.Elapsed);

watch.Reset();

settings.XmlResolver = new XmlPreloadedResolver(XmlKnownDtds.Xhtml10);

watch.Start();
using (XmlReader reader = XmlReader.Create(new StringReader(xhtml), settings))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Text)
{
Console.WriteLine(reader.Value);
}
}
}
watch.Stop(); ;
Console.WriteLine("Second parse: elapsed time: {0}", watch.Elapsed);

Running that code here with Visual Studio 2010 Beta 2 in a virtual machine outputs numbers clearly showing the speed gained by parsing with the XmlPreloadedResolver:

First parse: elapsed time: 00:00:04.6378648
Second parse: elapsed time: 00:00:00.0441933

 

Posted by Martin Honnen | with no comments

Migration Step Twelve: Turn off WSUS on the source server

Saying 'no to patches' reminded me that if you have an SBS 2003 R2 with WSUS on the box and ESPECIALLY if you have a Win2k8 server in the network, go into the source server box and disable the WSUS service there.

If you don't, during the install it may try to install patches on the server.

From the www.sbsmigrationtips.com site:

O. Disable WSUS on Source domain prior to migration

If you have a deadline set for a Windows 2008 update in WSUS that is past-due, your SBS 2008 setup can fail when the update is automatically installed and the SBS 2008 server is rebooted.  Deadlines are not automatically set in SBS 2003 but can be set by the Admin through the native WSUS console.  We recommend disabling WSUS for the duration of the migration.

Posted by bradley | with no comments
Filed under:

Migration Step Eleven: Figuring out what you screwed up when the install gets stuck

Because I checked the box in the answer file to allow me to review each screen, I got stuck with an error that it could not find the source server and to check if the source server name was wrong.

Huh?  I know that's the right name.  I checked all of my reference materials including the David Overton SBS 2008 migration book that says:

I know that name is correct, what gives?

So then I do the Shift-F10 trick.  I go to the SBS 2008 box that has a blue background and just that white box and the error screen there and there's no button to get under the operating system and to look at the log files... or is there?

Click to get your mouse on that server screen.  Hit shift-f10 at the same time and you'll get a command prompt window pop up.

Now type in explorer and hit enter.  What do you see?

A nice mouse clickable computer window that you can drill down into and find the setup log file.

C:\Program Files\Windows Small Business Server\Logs and then the setup.log file

The log file you are looking for is http://blogs.technet.com/sbs/archive/2008/10/01/key-small-business-server-2008-log-files.aspx the setup log file

And in there it says it can't ping the source server.

Huh? 

And when I go back to the command window and ping the server name, indeed, I can ping by IP, I can ping by servername.domain.lan.  I can't ping by servername only.

What the?  My IP addresses are right, I can ping in other ways, is the firewall messing me up?

And this is where signing up for that SBS 2008 newsgroup will help  https://connect.microsoft.com/sbs08/content/content.aspx?ContentID=8333  Because you need someone to bounce your "Dang, I'm stuck and I don't know what else to check" off of someone else's brain who has more brain cells than you do (especially during certain times of the install process).

Wayne Small had the necessary excess brain cells. He suggested that I check the subnet and then the netbios settings on the source server network card.

And bingo!  In the changing of the network card down to one nic from two I stupidly didn't realize that I may have flipped nics and got it on the one that had netbios disabled.  I reenabled netbios and it worked.

Once I reticked that box, the new server could ping the source server by name. 

Last but not least, I do not check the option to have the newly built server get updates DURING the install.  You are introducing change when you shouldn't be introducing patch change.

Say no.

Posted by bradley | with no comments
Filed under:

Conferencia presencial en MUG de Argentina (Exchange 2010)

Hola a todos el dia Martes 10/11 estare acompañanado a Mauro Tartaglia uno de nuestros miembros de GLUE en una conferencia Presencial de Exchange 2010.

Los esperamos!!.

SEMINARIO GRATUITO "Overview de Exchange 2010".
Tuesday, November 10, 2009
Lugar: Auditorio MUG - Rivadavia 1479 1º Piso - Oficina A. Ciudad de Buenos Aires.

Enterate de las novedades y funcionalidades que Exchange 2010 trae para hacer tu trabajo más simple.
Orador: Mauro Tartaglia.

Fecha y Horario: Martes 10 de Noviembre de 18.30 a 21.30 hs.

· Alta disponibilidad

· Administración

· Storage.

· Mail Tips.

· OWA 2010.

· Unified Messaging.


Conferencia gratuita. Registración previa obligatoria

VACANTES LIMITADAS.

REGÍSTRESE AL EVENTO.

(*) Evento gratuito, por favor ignore la pregunta sobre forma de pago.

Registro en http://www.mug.org.ar/Eventos/3364.aspx

 

Carlos Dinapoli

Posted by Carlos | with no comments

Book review: the design and evolution of C++

I’ve just finished re-reading (I’ve read if for the first time around 2000) this fantastic book which was written by Bjarne Stroustrup, who is the responsible for the design of C++. I haven’t used C++ professionally for over 6 years now! However, I’ve always been fascinated for its power and complexity and I do intend to start using it again really soon (btw, my first professional gig as a dev consisted in writing C++ code and that’s probably why I’ve got some affection for the language).

One of the reasons I enjoy this kind of book is because I’m always curious to understand why option A was preferred over B for a specific feature. And Bjarne does an excellent work on that area with this book. He goes all the way back to the roots of C++ (I’m too young to remember it being called C with classes) and explains all the rationale that is behind all the major decisions taken during C++ design and evolution. If you’re looking for a book that teaches you how to program with C++, then this isn’t really for you. However, if you’re puzzled about some C++ feature or if you think that something shouldn’t really work the way it does, then this book is for you (I’m positive that you’ll see that your idea wouldn’t really work in some specific scenario which gets used by 0.05% of the guys that use C++ :) ).

My score: 9/10.

Posted by luisabreu | with no comments
Filed under:

Windows Update Error 80072EE2 - Hyper-V Guest issues....

Over this weekend I have had to quickly build a Virtual SBS2008 server for one of my clients.   I came across an interesting issue which took me a while to figure out, so I am plonking it up here on the blog so that others that may come across the problem will find it quicker.

A quick description of the setup.

Dell Poweredge Server, Onboard Broadcom Netxtreme II network card, Addon gigabit NIC from SMC networks (Realtek chipset).   Windows 2008 R2 is on the HyperV Host.  SBS2008 is installed as the only Guest on the HyperV setup.   This is all behind a Sonicwall NSA240 on a dedicated LAN network.

The SBS2008 Virtual machine would not update from Windows Update and the log file (c:\windows\windowsupdate.log) was showing a lot of errors with the code 80072EE2.   When you search for this on the internet it makes mention of reinstalling the various DLL’s involved with Windows Update, and also ensuring that your network settings are not blocking connections to the Windows Update servers.   None of these suggestions helped me.

So, I decided to do some packet captures on the network whilst Windows Update was running.   It turned out that every time Windows Update ran on the SBS Virtual Machine, it could no longer ping the default gateway (yet the host machine could).   This pointed me back to the network cards….

What I found odd about this is that I had already installed the latest drivers for the Broadcom and the Realtek chipsets.  I had also disabled the various offloading options on the physical network cards to see if that would help, but no change.

However, after a coffee, I realised that I was missing one step…    the step that fixed this problem was:


I disabled the Offload options on the Microsoft Virtual Network card on the SBS Host, and as soon as I did that, Windows update started to work.

Offload

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hopefully this may help some one save a few hours

 

The DataContext component: creating entities

Before we can move on and take a look at the AdoNetDataContext component, we need to talk about one more topic: creating entities and how it might be integrated with DataContext component. The DataContext exposes a createEntity method which can be used for  creating new objects of a specific type. Internally, that method will always delegate the creation of a new entity to the function to which the createEntityMethod property points to.

As you’re probably wondering, this is something you’ll only need to configure if you need to use the DataContext features associated with identity (and even in that case, setting the createEntityMethod is optional if you’ve set the getNewIdentityMethod property).

The createEntityMethod property should reference a function which receives two parameters (a DataContext reference and a string with the “type” of the object that should be created) and initializes the metadata necessary for tracking that object. If you recall the previous posts, you’ll surely remember that we’ve added an internal __meta property to all the objects stored by the DataContext instance.

We could improve our DataContext used at the time by setting the createEntityMethod to a function which initializes the metadata associated to that object. Here’s how I’d augment the entityManager we’ve been using with a new method used for creating new entities:

createNewEntity: function (dataContext, entitySet) {
    var obj = {};
    entityManager.getNewIdentity(dataContext, obj, entitySet);
    return obj;
}

As you can see, we’re simply relying in the getNewIdentity method because it is responsible for setting the __meta object used for that purpose. Referencing entityManager instead of this might seem little strange at first, but that’s needed because the DataContext won’t call the reference through the entityManager instance (it will simply call the function through the reference it got to it during initialization:

var ctx = Sys.create.dataContext(
  {
      serviceUri: "PeopleService.svc",
      getIdentityMethod: entityManager.getEntityId,
      getNewIdentityMethod: entityManager.getNewIdentity,
      isDeferredPropertyMethod: entityManager.isDeferredProperty,
      getDeferredPropertyFetchOperationMethod: 
entityManager.getDeferredProperty, createEntityMethod: entityManager.createNewEntity } );

And that’s it. There’s really not much to say about the createEntity method. Stay tuned for more on MS AJAX.

Posted by luisabreu | with no comments
Filed under: ,

McAfee - New Corporate and Home Support Forums

Star In 1997, our company adopted McAfee as an AV standard for all PCs and servers.  Even durng these early years for the Internet, they were one of the 1st AV Vendors to use public forums to leverage support costs.  I've been a member of these forums for over a dozen years, primarily sharing security news and safe practices.  In November 2009, McAfee implemented a state-of-the-art community forum environment, which includes home and corporate product support forums, security awareness forums, and other resources. 

Person NOW LIVE! McAfee Online Support Community
http://www.avertlabs.com/research/blog/index.php/2009/11/04/now-live-mcafee-online-support-community/

QUOTE: The McAfee Online Support Community gives you a way to interact with other McAfee business users to ask questions and share best practices. Additionally, you’ll be able to talk with McAfee professionals about McAfee products, security awareness issues, and emerging trends — plus give us feedback on product and service enhancements.

Person McAfee - Home Page for New Community Forums
http://community.mcafee.com/

Posted by Harry Waldron | with no comments

Multiple test files

Back here http://msmvps.com/blogs/richardsiddaway/archive/2009/11/05/creating-temporary-files.aspx or http://richardsiddaway.spaces.live.com/blog/cns!43CFA46A74CF3E96!2595.entry I showed how to create temporary test files.

We can simply create multiple test files like this

1..10 | foreach {new-tempfile -path c:\test\test1 -size $(Get-Random -Maximum 1mb -Minimum 1kb)}

A one line PowerShell script that generates 10 files in the given folder with random names and sizes.

Technorati Tags: ,,
Posted by RichardSiddaway | with no comments

Migration step Ten: Answer file

 Create a migration answer file. Follow the steps on pages 19 through 23 in the Microsoft migration document. 

Collect the information for the migration answer file.

 Run the Answer File Tool. When you create a migration answer file, leave the Certificate authority name blank. For more information, see this blog post (http://sbs.seandaniel.com/2008/08/gotcha-using-sbs-2008-answer-file.html  ).

I never choose to install updates during the install process.  I can guarantee you that Microsoft does not test installs each time a new Patch Tuesday comes out.  And so far there's been no need to insert an update into the install routine early on.  You can patch AFTER the box is stood up.

Windows Live One Care is now defunct so I uncheck that.  Forefront is a 120 day trial.  So for me I'm not installing either one.

Then the part that is VERY VERY important

Leaving the cert name blank.

If you put in your domain name, you won't be able to choose your domain name when you run the domain wizard.  Leaving it blank means that the server will do what it needs to do.

c  Copy the answer file to removable media such as a USB memory card.

c  On the destination server, change the BIOS settings so the server will not boot from the type of removable media used to store the migration answer file.

In my case I'll be saving this answer file to a virtual floppy disk.

In the HyperV settings, choose and setup up a virtual floppy disk.

Then in the settings of the machine, browse to this location.

Then unattach it so it can be attached to the new SBS 2008 we will be building

 And now we're all set to start building the SBS 2008 box

So we start the boot process

And keep in mind that at this point you have to use tab and space bars in the HyperV if you are rdping into the box like I am

I don't put in a keycode at this point.  First off this is a trial run, and I prefer to enter the code in later anyway.  Just uncheck the "auto activate" box and tab over to the next and hit enter

Yes, I really don't want to put in a product key right now.

We only get a custom option

It starts to copy

It will then reboot

It will reboot again

And you'll start to see the normal blue screen boot up

 

Yes, I really do have a backup.  Several of them.

Now Check the date/time and make sure they are correct to you and your time zone.  The Time zone is VERY IMPORTANT as if they are majorly off the two systems can't domain join.

Then check your IP addresses, your gateway (where your router is)

On the next screen where it wants to confirm the business name details again... remember LEAVE THE CERTIFICATE AUTHORITY BLANK

The next screen will confirm your source server name .... and I'll showcase what I stupidly did wrong and what diagnostic things I did to help figure out what I did wrong in the next blog post.

 

 

Posted by bradley | with no comments
Filed under:

Migration Step Nine: Check the health of Exchange

c  Optimize Exchange Server and mailboxes. Follow the instructions on pages 16 through 17 in the Microsoft migration document.

c  Empty the Deleted Items folder.

c  Archive older mail

It can take a long time to migrate large Exchange Server mailboxes. It will take less time if you reduce the size of the mailboxes before the migration. To help reduce the size of the mailboxes, ask each of the users to do the following:

·      Empty the Deleted Items folder

·      Archive older mail

For additional information about optimizing Exchange Server, see the Exchange Best Practices Analyzer at the Microsoft Web site (http://go.microsoft.com/fwlink/?LinkID=101795).

To empty the Deleted Items folder

1.   In the Microsoft Office Outlook® messaging client, click Tools in the toolbar, and then click Empty "Deleted Items" Folder.

2.   Click Yes on the warning dialog box.

To archive older mail

1.   In Outlook, click File in the toolbar, and then click Archive.

2.   In the Archive dialog box, click the down arrow in the Archive items older than text box.

Note

You must tell the users what date to select in the calendar that appears.

3.   If you want to make sure that all the older mail is included, select the Include items with "do not AutoArchive" checked check box.

4.   Click Archive all folders according to the AutoArchive settings at the top of the dialog box.

5.   Click OK.

In Windows XP, the older mail is moved to the archive.pst file in C:\Documents and Settings\<user name>\Local Settings\Application Data\Microsoft\Outlook folder.

In the Windows Vista® operating system, the older mail is moved to the archive.pst file in C:\Users\<user name>\AppData\Local\Microsoft\Outlook folder.

Well since this is my test run, I will suck this up and not do this step, but in the real migration about a week before the real migration, I'm going to remind folks of the tasks they should have been doing all along...that is keeping their mailboxes clean.

Now Amy Babinchak and Philip Elder recommend to defrag the exchange databases:

The following can be done to test the health of the Exchange databases at the command prompt and with the stores dismounted (remember to backup):

So here's what I'm going to do:

  1. In Exchange System Manager, right-click the information store that you want to defragment, and then click Dismount Store.

Now that the databases are stopped you can make a copy of these files (just in case)

In my case I have these on another drive, you may see these on your C: drive.

 

  1. At the command prompt, change to the Exchsrvr\Bin folder, and then type the eseutil /d command, a database switch, and any options that you want to use.

 This will take some time.

And then it will indicate it's done.



And don't forgot at the end to go remount the store

Posted by bradley | with no comments
Filed under:

Migration Step Eight: Raising the functional level of AD

c  Raise the functional level of the Active Directory domain and forest. Follow the instructions on pages 12 through 14 in the Microsoft migration document.

To be fair this probably should have been done sooner in the steps, but it's still in the prelim phase and before we've started the install of SBS 2008 so we're still during the time phase appropriate to this.

Download details: Windows SBS 2003 to 2008 Migration Guide:
http://www.microsoft.com/downloads/details.aspx?FamilyID=52b7ea63-78af-4a96-811e-284f5c1de13b&DisplayLang=en

On page 12-14 of that document is the instructions to change the functional level.

To raise the functional level of the domain

1.   On the Source Server, click Start, point to Administrative Tools, and then click Active Directory Domains and Trust.

2.   In the console pane, right-click the domain for which you want to raise the functional level, and then click Raise Domain Functional Level.

Note

The current domain functional level is displayed in Current domain functional level, in the Raise Domain Functional Level dialog box.

3.   In Select an available domain functional level, click Windows Server 2003, click Raise, and then click OK in the warning dialog box.

Now we do the forest....

To raise the functional level of the forest

1.   On the Source Server, click Start, point to Administrative Tools, and then click Active Directory Domains and Trust.

2.   In the console pane, right-click Active Directory Domains and Trusts, and then click Raise Forest Functional Level.

Note

The current forest functional level is displayed in Current forest functional level, in the Raise Forest Functional Level dialog box.

3.   In Select an available forest functional level, click Windows Server 2003, click Raise, and then click OK in the warning dialog box.



Posted by bradley | with no comments

Just a reminder of all of the key migration resources

Just a reminder of all of the key migration resources that I'll be referring to and using during these blog posts/dry run of migation that I'm doing.

That first url -- www.sbsmigrationtips.com is actually a key SBS blog post entry that I got lazy enough to get a url redirect so I could find that blog post. 

Then there is Philip's blog post -- MPECS Inc. Blog: SBS 2003 to SBS 2008 Migration Guide – v1.4.0:
http://blog.mpecsinc.ca/2009/06/sbs-2003-to-sbs-2008-migration-guide.html

Then the key official documents you need:

Download details: SBS 2008 Migration Checklist:
http://www.microsoft.com/downloads/details.aspx?familyid=F67148DA-CBA8-4222-8AE5-136A6597A340&displaylang=en

Download details: Windows SBS 2008 Migration Help:
http://www.microsoft.com/downloads/details.aspx?familyid=95E4863E-BB59-4A66-9FEE-9874E8903888&displaylang=en

Download details: Windows SBS 2003 to 2008 Migration Guide:
http://www.microsoft.com/downloads/details.aspx?FamilyID=52b7ea63-78af-4a96-811e-284f5c1de13b&DisplayLang=en

MPECS Inc. Blog: SBS 2003 to SBS 2008 Migration Guide – v1.4.0:
http://blog.mpecsinc.ca/2009/06/sbs-2003-to-sbs-2008-migration-guide.html

Posted by bradley | with no comments
Filed under:

Migration Step Seven: Checking Exchange is ready to go

We're back on our Migration blog post series (hint all of the Migration blog posts are tagged with "Migration" for easy reference).
And now we're going to check and make sure our Exchange is ready to go:

I.  In the source domain, check for the existence of an account named Postmaster.

SBS setup tries to create a Distribution List with the SAM account name of Postmaster. If it already exists, you will receive the following errors at the end of setup.

Setup errors due to an existing Postmaster account:

  • The e-mail distribution groups cannot be created.
  • Incoming and outgoing e-mail for Windows SharePoint Services are not configured.
  • Incoming and outgoing e-mail for Windows SharePoint Services are not configured.

To fix this, you will need to restore the source server, rename the Postmaster account and start the migration all over again.  Alternatively you can complete the steps listed in http://technet.microsoft.com/en-us/library/cc626214(WS.10).aspx and http://technet.microsoft.com/en-us/library/cc626120(WS.10).aspx.

Now while I have postmaster@domain.com addresses underneath the Administrator account, these are not what this tip is talking about.  They are looking for a specific Postmaster user account, not the Postmaster email account. 

J.  Check Exchange 2003 policies:

  • Existing Mailbox Management policies
  • Duplicate SMTP addresses in recipient policies
  • Invalid SMTP addresses in recipient policies

If any of these are present during the migration to SBS 2008, the setup will finish with the following errors:

Setup errors due to mailbox management policies or duplicate/invalid SMTP addresses in recipient policies:

  • The Exchange E-mail address policy cannot be configured.
  • Incoming and outgoing e-mail for Windows SharePoint Services are not configured.
  • Incoming and outgoing e-mail for Windows SharePoint Services are not configured.

How to check for Mailbox Management policies:

If you have Exchange 2003 or Exchange 2000 recipient policies that are ONLY Mailbox Manager policies and do not define e-mail addresses (they do not have an E-mail Addresses (Policy) tab), perform the following steps to delete the policies:

  1. In Exchange System Manager, expand Recipients, and then select Recipient Policies.
  2. To verify that a policy is only a Mailbox Manager policy, right-click the policy, and then select Properties. The Properties page must not have an E-Mail Addresses (Policy) tab.
  3. To delete the policy, right-click the policy, and then select Delete. Click OK and then click Yes.

If you have Exchange 2003 or Exchange 2000 policies that are BOTH E-mail Addresses and Mailbox Manager policies (they have both the Mailbox Manager Settings (Policy) tab and the E-mail Addresses (Policy) tab), perform the following steps to remove the mailbox manager portion of the policy:

  1. In Exchange System Manager, expand Recipients, and then select Recipient Policies.
  2. Right-click the policy, and then select Change property pages.
  3. Clear the Mailbox Manager Settings check box, and then click OK.

How to check for duplicate/invalid SMTP addresses in recipient policies:

  1. In Exchange System Manager, expand Recipients, and then select Recipient Policies.
  2. Right-click the policy, and then select E-Mail Addresses (Policy) tab.
  3. Inspect the SMTP Addresses for any that are unchecked. If you find any, place a check in the box or remove that address.
  4. Inspect the SMTP Addresses for any that have an IP address. For instance, @192.168.1.1. If you find any, remove those addresses that contain an IP address.
  5. Click OK.

c  Remove Mailbox Management policies. Exchange 2000 and Exchange 2003 used Mailbox Management policies for some types of e-mail. If these policies exist on the server running SBS 2003, setup will generate errors that will prevent you from completing the migration. Exchange BPA 2.8 checks for this condition. Remove Mailbox Management policies from the server running SBS 2003. For more information on how to do this, see the Keys to Success blog post.

Remove duplicate or incorrect SMTP addresses. Exchange 2000 and Exchange 2003 may have duplicate or incorrect SMTP addresses in recipient policies. If these addresses exist on the server running SBS 2003, setup will generate errors that will prevent you from completing the migration. The SBS 2003 BPA with the latest updates checks for this condition. Remove the duplicate or incorrect SMTP addresses from Exchange. For more information on how to do this, see the Keys to Success blog post.

I already ran the SBS bpa and didn't get any warnings, but I'm also going to run the Exchange BPA just to make sure:

Download details: Exchange Best Practices Analyzer:
http://www.microsoft.com/downloads/details.aspx?familyid=DBAB201F-4BEE-4943-AC22-E2DDBD258DF3&displaylang=en

And I'm going to run the "are you ready for Exchange 2007" test

And it reminds me that I've yet to flip the AD to the right levels... but it doesn't find any mailbox policies that I need to worry about.

Posted by bradley | with no comments
Filed under:

Migration Step Six: Removing ISA

When I moved the SBS 2003 over to the (unsupported) HyperV platform, one of the things I had to do was to uninstall ISA 2004 and take the virtualized box back down to one nic.

Just a reminder of the steps I took -- this is from the SBS 2008 migration checklist:

c  Uninstall ISA Server 2004. If ISA Server 2004 is installed on the server running SBS 2003, you must uninstall it before you can begin the migration.

c  Uninstall the ISA Server 2004 desktop client. To uninstall the ISA Server 2004 desktop client, follow the instructions in this blog post (http://msmvps.com/blogs/kwsupport/archive/2008/09/07/uninstalling-isa-2004.aspx).

c  Export your third-party SSL certificates. If you have any third-party SSL certificates installed on the server running ISA Server 2004, you should export the certificate for reinstallation on SBS 2003.

c  Uninstall ISA Server 2004. Uninstall ISA Server 2004 from Control Panel using Add or Remove Programs.

Import your third-party SSL certificates. Once you have uninstalled ISA Server 2004 you will need to import your third-party SSL certificates onto the server running SBS 2003. To import your certificates, follow the instructions starting with the section “Installing the SSL Certificate into IIS” in this blog post (http://blogs.technet.com/sbs/archive/2007/08/21/how-to-install-a-public-3rd-party-ssl-certificate-on-iis-on-sbs-2003.aspx).

I also relied on Chad Gross's "killing off ISA" blog post here:

Killing off ISA - Aimless Ramblings from a Blithering Lunatic . . . - MSMVPS.COM:
http://msmvps.com/blogs/cgross/archive/2009/10/11/killing-off-isa.aspx

One setting I noticed that needed to be updated (especially if you removed the ISA a week or two before you did the rest of the migration was/is to remove the proxy ISA server settings from inside WSUS server proxy settings.   If you leave that proxy server information behind inside of WSUS, your WSUS server won't sync up to get patch information.

Posted by bradley | with no comments
Filed under:

Pixel Shaders and Silverlight, WPF

Recently, Silverlight 3 gained the ability to use custom pixel shaders as was already available in WPF. What exactly are custom pixel shaders?

A shader is a set of software instructions executed on your computer's Graphics Processing Unit (GPU) that performs complex per-pixel effects suh as applying a lighting value, bump mapping (a technique used to make a surface look more realistic by modeling interaction of a bumpy surface texture), shadows, highlights, translucency, and so on.

Pixel shaders are not a part of Silverlight or WPF, but are a technology used with DirectX. You define pixel shaders using a programming language called HLSL (High Level Shader Language), and this definition is stored in a text file with a .fx extension. You can create shaders using NVidia's Shader Composer Tool (http://developer.nvidia.com/object/fx_composer_home.html)  or other similar tools.

Here is an example of a Negative effect:

sampler2D implicitInput : register(s0);

float4 PS(float2 uv : TEXCOORD) : COLOR
{
    float4 color = tex2D(implicitInput, uv);
  
    float4 result; 
 
    result.r=1-color.r;
    result.g=1-color.g;
    result.b=1-color.b;
    result.a=color.a;
 
  
return result;
}

Note: You can add a text file to your project, give it a .fx extension and then past the above code into it. However, before this code can be compiled properly, you need to change its format to US ASCII. To do this:

- Select the .fx file in the Solution Explorer
- From the Visual Studio File menu, select Advanced Save Options...
- In the Encoding drop down, select US-ASCII

Setting up the Development Environment

Before you can use a pixel shader definition, you must compile the pixel shader .fx source code file into byte code stored in a .ps file. To do this, you need to install the DirectX SDK on  your computer (http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en).

The DirectX SDK has a shader compiler called fxc.exe. By default, it's stored in the following folder on your computer (the month changes as new versions are released):

C:\Program Files\Microsoft DirectX SDK (November 2008)\Utilities\bin\x86\fxc.exe

You need to set up Visual Studio so it knows how to use the fxc.exe tool. To do this:

- In the Visual Studio Tools menu, select External Tools which launches the External Tools dialog.
- Click the Add button, and enter the following information:

        - Title: Microsoft &Shade Compiler (fxc.exe)
        - Command:  C:\Program Files\Microsoft DirectX SDK (November 2008)\Utilities\bin\x86\fxc.exe
        - Arguments: /DWPF /Od /T ps_2_0 /E $(ItemFileName)PS /Fo$(ProjectDir)$(ItemFileName).ps $(ItemPath)
        - InstallDirectory:  $TargetDir

- Select the Use Output Window checkbox, then click OK to add the new external tool entry

Now to run the compiler against a .fx file, select the .fx file in the Solution Explorer, then go to the Tools menu and select Microsoft Shader Compiler (fcx.exe). In the Visual Studio Output Window, you should see a "compilation succeeded" message, and the compiler should produce a .ps file with the same stem name as the .fx file. You should include this new file in your project, then set its Build Action property to Resource.

In order to use the new compiled shader effect, you need to create a ShaderEffect class. that loads the pixel shader. First, in your WPF or Silverlight project, you create a subclass of the .NET Framework's ShaderEffect class.  Here's an example:

 

 

public class SwirlEffect :

ShaderEffect

{

 

 

private static PixelShader _pixelShader = new PixelShader()

{

UriSource =

 

new Uri("MyVideoProject;component/Swirl.ps",

 

 

UriKind.Relative)

};

 

 

public SwirlEffect()

{

PixelShader = _pixelShader;

UpdateShaderValue(InputProperty);

UpdateShaderValue(FactorProperty);

}

 

 

public static readonly DependencyProperty InputProperty =

 

 

ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(SwirlEffect), 0);

 

 

public Brush Input

{

 

 

get { return (Brush)GetValue(InputProperty); }

 

 

set { SetValue(InputProperty, value); }

}

 

 

public static readonly DependencyProperty FactorProperty =

 

 

DependencyProperty.Register("Factor",

 

 

typeof(double), typeof(SwirlEffect),

 

 

new PropertyMetadata(0.0, PixelShaderConstantCallback(0)));

 

 

public double Factor

{

 

 

get { return (double)GetValue(FactorProperty); }

 

 

set { SetValue(FactorProperty, value); }

}

 

 

 

Best Regards,
Kevin McNeish
INETA Speaker
Chief Architect, MM .NET Application Framework
www.oakleafsd.com

Posted by KevinMcNeish | with no comments

Why .NET apps keep crashing on your Tablet PC

I’ve been struggling with this issue for some time.

I have a small, simple .NET application I wrote in Visual C# a few months ago – I’ve tentatively titled it “iFetch”, because it fetches radio shows from the BBC iPlayer.

It really is very little more than a simple data grid view that displays the details of the shows and allows users to select them for downloading and later listening.

Despite that, I’ve had some terrible trouble with it. Sometimes it’ll work perfectly, other times it’ll just suddenly crash, and apparently without warning and for different reasons – sometimes when I click on a row, other times when I select to sort on a column heading.

The crash seems to be intermittent, but doesn’t reproduce on other computers; even computers of the same configuration.

For those who want technical details, here we go – the crash is a System.StackOverflowException error, and appears to be due to an unchecked infinite recursion in System.Windows.Forms.dll!System.Windows.Forms.DataGridViewRow.DataGridViewRowAccessibleObject.Bounds.get().

The clue here is that this is a “DataGridViewRowAccessibleObject” – not a mere DataGridViewRow. These “AccessibleObject” versions of common .NET components only come into existence and spread their effect when an “accessibility application” is active on the system. Apparently, in addition to text-to-speech readers, braille devices, etc, a Tablet – whether external like mine, or internal like those in a Tablet PC – classifies as an accessibility application.

That’s why this bug was intermittent for me – sometimes I had my external graphics tablet plugged in, other times I didn’t. To make matters worse, it seems to only trigger when one or more rows in the DataGrid are hidden.

If you get this error, first try checking to see if Microsoft have fixed the flaw – check for .NET service packs – and then, if there is no direct fix for the flaw, try either unplugging your tablet, if you can, or temporarily stop the Tablet PC Input Service, while running the program.

So far, I have received no feedback from Microsoft about when this will be fixed.

More Posts Next page »