It’s About the Business, You – The “Wow” Factor (Part 1)

You’ll note that while I had the opportunity, I resisted the temptation to borrow from the Clinton-for-President first-term slogan, adding the word “stupid”. I don’t consider readers (especially of this stuff) stupid.

I don’t consider technical people stupid. Sometimes we can be too focused, though. I don’t consider business or product people stupid, either. Sometimes we can be too set in the status quo of business operations.

One of my favorite things to say in life and work: “we all have our gifts”. Combining our gifts leads to successes. Hence, no one is “stupid”; we can all make a contribution.

The use of the trailing “stupid” in the original quote was uttered as an insult and later became the motivation for the staff running the Clinton campaign. I used it because it was an attention-grabber, and in a way, lets me crystallize your attention on the real content of this article series.

I say this a lot too: software development is not the solution to a business problem. Yes, software can contribute to business solutions; including task automation, security, integration across boundaries and the like. However, software, platforms and developers don’t solve business problems by themselves. It is the careful design and orchestration of business assets, applications, processes and users that solve business problems.

I’m also fond of saying that it is of critical importance that those involved in the software development process demonstrate business value (i.e., ROI) to our business owners; these are the folks who buy us these wonderful tools and toys that stock the playgrounds in which we work every day. Do developers get this? I think they do most of the time, but definitely not all the time.

Let me ask this question: Is it easier to get a developer or a business owner to say “wow”?

The answer: Developers, by a long shot. It’s not that we’re all that easily impressed, or simple, or anything the least bit negative. It’s also not that business owners are difficult to impress: there are just different factors that activate our “wow reflex”. Most developers get this, I think.

So, what is the “wow” factor? A developer can prototype a developer “wow” somewhere between minutes or hours. Some “wow” candidates are available for download in seconds. It takes a village (okay, now I’m teasing), that is, a team of developers a number of days to prototype a business owner “wow”.

Two things to note:

  • The business owner “wow” at the prototype stage may be more like “hmm”.
  • To get this “hmm” will likely include multiple projects, integration with back-end systems, a fair amount of research and a small amount of pain.

The real business owner “wow” comes when a system is fully designed, built and integrated with other business systems. This can take weeks, months or years from concept to completion, and requires the ongoing support from the business owners for the project.

Next: Questions developers and business owners need to ask themselves in improving communication and uncovering the “wow” factor.

It’s About the Business, You – The “Wow” Factor (Part 2)

This post continues my previous discussion regarding the “wow” factor and business cases.

Developers
Ask yourselves: what have you done to make a business owner say “wow” today? Meeting a milestone, overcoming a bottleneck or reporting a success are great places to start as delivering on current commitments is vital. But meeting commitments will get you an “attaboy” (and a continuing income stream) at best.

Demonstrating how data acquired from a legacy Line of Business (LOB) silo can be consumed by a desktop application and made accessible to the business audience should get you a “hmm”. “Hmm” from an enlightened business owner could lead to the opportunity for a big “wow” down the road. Some notes:

  • Sell the idea as it really should be: an ongoing effort toward enterprise systems integration.
  • Select tools with momentum: tools and platforms with community, history and ongoing support.
  • Plan incremental success milestones that add business value: it’s important to show tangible progress.
  • Plan to minimize impact on the users of the applications: it’s best to work with the back-end plumbing before you introduce change to the desktop.
  • Show your work! Expose prototype components that let business owners see data they’d not seen before. Please note: I said data, not more application layers or widgets.
  • Continue searching for the “hmm” factor, but be mindful of adding any scope until you can show successes.

Business Owners
Ask yourselves: have you opened your mind to think outside conventional wisdom in solving a ticklish business issue? Have you cultivated an environment in which those with technology knowledge can present you with potential solutions or opportunities?

There are reasons that either (or both) answers could be “no”. One possibility: you’re already fully integrated, and in this case, kudos. Another: you feel you lack the budget for another project. Still another is you may not see a value in integrating back-end data. If the latter two are your reasons, take a careful look at your environment and your data.

A well-planned and well-executed integration will not cost you money; it will make you money. Yes, you’ll have cash outlay, of course, but there is ROI potential in improving both the top and bottom lines.

Your data is valuable, and not just because your applications run on it. Your data has value outside regular business operations. You can mine your own data to:

  • Identify business and customer trends.
  • Recognize waste and redundancies.
  • Uncover process improvement opportunities.
  • Reduce business risk.

Further, access to your data has value to others within your organization. If users could see relevant data in fewer interfaces (eliminating “screen hopping”), you have the opportunity to increase productivity and reduce errors through automation and integration.

Next: Integration – The Brainstorming Process.

RSS and Information Snacking

The web has taken note of RSS in a big way.

The standard is has been around since early 2001.  While there may be some confusion as to the meaning of the acronym (Rich Site Summary, Rich Document Format (RDF) Summary Stream, Really Simple Stream, and more), RSS syndicates and shares content.  I’m going with Really Simple Syndication.

RSS allows a user to select sites and topics that feature information that matters to them.  Rather than surfing through a number of sites and refreshing multiple times, the user uses an aggregator to subscribe to sites of interest.  The RSS aggregator pulls down the information at user-defined intervals.  The user goes to one application to “snack” on the news of their personal interest.

This Information Snacking increases both our personal productivity (less time spent chasing information) and the sheer volume of information we can consume.

There are a number of aggregators already on the market and the standard is a core technology in Microsoft Windows.

Original Post: June 25, 2005

Changing the name of a MSSQL Server

Renaming a system ‘beneath’ a SQL server causes a variety of problems; SQL goes into an identity crisis, MSDTC develops amnesia and chaos reigns. As a general rule, I don’t like to rename servers upon which SQL is installed, but sometimes, there’s no choice. Note: you must have an SA-level account or be in the System Administrators group on the SQL Server to perform this operation.

Here are the steps to restore order; again, use at your own risk, no warranty, etc., etc.:

Allow modifications to system catalogs:

  • In SQL Enterprise Manager, Right-click the SQL Server and select Properties.
  • Click the "Server Settings" tab
  • In the "Server Behavior" panel, check "Allow modifications to be made directly to the system catalogs".
  • Click OK.

Update fields in “sysservers“:

  • Navigate to Master, Tables and open table "sysservers".
  • Set the values of field “srvname“ and field “datasource“ to the new server name (you’ll note they contain the old server name).
  • Note: Do not modify "srvnetname"; it modifies itself based on an update to the row.
  • Cycle the SQL Server and SQL Agent services.

Once the services have been cycled, confirm the change has occurred in Query Analyzer:

SELECT @@SERVERNAME

Restore Order (aka, revoke updates to system catalogs):

  • In SQL Enterprise Manager, Right-click the SQL Server and select Properties.
  • Click the "Server Settings" tab
  • In the "Server Behavior" panel, uncheck "Allow modifications to be made directly to the system catalogs".
  • Click OK.

Reboot the server and monitor the event log. You will likely see this error:

COM+, Error 4440:

The CRM log file was originally created on a computer with a different name. It has been updated with the name of the current computer. If this warning appears when the computer name has been changed then no further action is required. (original server name).

This error is benign IF the current name of the system is in the “Computer“ field AND the original name of the built system is in the above message. If these are not both correct (as described), retrace the SQL Server steps and ensure you updated both files in table “sysservers“.

Note: If you registered your SQL and AS servers in the Enterprise Manager and Analysis Manager as the original server name (as opposed to ‘localhost’), you will need to re-register the new server name.

BizTalk Server 2004 Performance Counters

I designed a project with multiple data providers and business information flows. Suspicious minds were working overtime so, I wanted to make certain we could positively identify any potential bottlenecks in processing. This involved a variety of logs, scripts to activate/deactivate tracking and more.

Most interesting was the many performance counters available, all ripe for the monitoring, depending on the need. I used a few of these and pulled others from documentation. Select those that are most relevant to your needs:

Receive Host Counters:
BizTalk:Messaging(BizTalkServerApplication)\Documents received
BizTalk:Messaging(BizTalkServerApplication)\Documents received/Sec
BizTalk:Messaging(BizTalkServerApplication)\Documents suspended
BizTalk:Messaging(BizTalkServerApplication)\Documents suspended/Sec

BizTalk Send Host Counters:
BizTalk:Messaging(BizTalkServerApplication)\Documents processed
BizTalk:Messaging(BizTalkServerApplication)\Documents processed/Sec
BizTalk:Messaging(BizTalkServerApplication)\Documents suspended
BizTalk:Messaging(BizTalkServerApplication)\Documents suspended/Sec

BizTalk Orchestration Host Counters:
XLANG/s Orchestrations (Select BT instance) Orchestrations created
XLANG/s Orchestrations (Select BT instance) Orchestrations created/sec
XLANG/s Orchestrations (Select BT instance) Orchestrations completed
XLANG/s Orchestrations (Select BT instance) Orchestrations completed/sec
XLANG/s Orchestrations (Select BT instance) Orchestrations dehydrated
XLANG/s Orchestrations (Select BT instance) Orchestrations dehydrated/sec
XLANG/s Orchestrations (Select BT instance) Orchestrations discarded
XLANG/s Orchestrations (Select BT instance) Orchestrations discarded/sec
XLANG/s Orchestrations (Select BT instance) Orchestrations rehydrated
XLANG/s Orchestrations (Select BT instance) Orchestrations rehydrated/sec
XLANG/s Orchestrations (Select BT instance) Orchestrations suspended
XLANG/s Orchestrations (Select BT instance) Orchestrations suspended/sec
XLANG/s Orchestrations (Select BT instance) Persistence Points
XLANG/s Orchestrations (Select BT instance) Persistence Points/sec
XLANG/s Orchestrations (Select BT instance) Resident in Memory
XLANG/s Orchestrations (Select BT instance) Transactional scopes aborted
XLANG/s Orchestrations (Select BT instance) Transactional scopes aborted/sec

Operating System Counters on the BizTalk Hosts:
LogicalDisk Current Disk Queue Length
LogicalDisk % Idle Time
LogicalDisk Disk Transfers/sec
Process (Select BT instance) Private Bytes
Process (Select BT instance) Virtual Bytes
Processor (Select BT instance) % Processor Time
System Context Switches/Sec
System Processor Queue Length

Post-SP1 Performance Counters:
Active receive locations
Active receive threads
Active send messages
Active send threads
Documents resubmitted
Pending receive batches
Request/Response timeouts
Throttled receive batches

Please comment as to the counters you used and their relevance in your project.

Services Orientation – The Architecture Formerly Known As SOA – Introduction

This is the first in a series of articles about enabling an enterprise to the Services Orientation model.

Summary
We’ve all heard it: Services Oriented Architecture is it; it is “The One”. It is the architecture that will save our skins. It will slice, dice, chop, grate, drop and julienne (that very thin cut; typically for garnish, if you were wondering).

So, you might ask: "What is SOA"? I’d like to answer that, but first, I’d like to tell you what I think SOA is not.

From a technical perspective (and in my opinion), SOA is misnamed. If you think it through, there really isn’t any such thing as a services-oriented architecture per se. Applications are still applications, network protocols are still network protocols, data is, well, you get the drift.

Applications and their interactions represent a logical architecture and data flow. Other pieces of the puzzle represent physical architecture, providing the necessary infrastructure on which applications and data services can live. The design of the data flows and mapping of the logical to the physical is where the potential for services originates.

So, if SOA is the wrong name, what is the right name? While we’re at it, what is a service?

First things first: let’s discuss the name. SOA has become quite a maligned term of late. I place the true intent of “SOA” firmly in the methodology court. That is, defining a “services-oriented methodology” that describes how we would make a data request using a standardized pattern to form the request, and receiving the response data in a standardized pattern for consumption. As there can be many services in an enterprise, this methodology typically demands the use of a services bus, which is a logical transport layer between services and consumers.

The use of the services and bus methodologies creates the opportunity to expose the data from applications of all shapes and sizes (and ages: let’s not leave legacy applications out in the cold; they can play in this realm too), as services.

An application written to conform to a services interface and methodology can be described as being “exposed as a service”. Through this exposure, data contained within the application can be requested and exposed to the enterprise. These services can interact with each other, consuming each others’ output to produce rich enterprise-wide data results.

I’ve covered the methodology; but what is a service? Compare a data service to a service business. A service business accepts requests from customers for particular tasks the business provides; this might run the gamut from legal to janitorial, fast food to buying books online. In all these cases, each business offers discrete services to potential customers. Service businesses must advertise their offerings to make customers aware of the availability.

In this analogy, a data service is the company. Consumers are obvious at the first level (requesting data), but I’ll address primary, secondary and composite consumers in more detail later. The analogy will break down in a few places which include redundancy, consistency, differentiation and advertising.

Let’s isolate the fast food vendor for the moment. In the real world, you have many companies, all competing with each other for customer attention. Multiple fast food vendors offer the same types of services: the preparation of meat, cheese, dough and vegetables, but with differing levels of quality, presentation (burger or taco), availability (scheduled hours or 24-hour drive through), delivery (or pick-up), and so on. Marketing makes the effort to differentiate fast food vendors from each other in the real world, and customers decide how to satisfy their palate for that meal.

Going deeper:

  • Raw materials (meat, cheese, dough and vegetables) are delivered and stored until they’re used.
  • Consumers request specific presentations (burger or taco, depending on the vendor; some may offer both).
  • Consumers pay for their request.
  • Employees prepare the raw materials in accordance with published recipes and guidelines.
  • Employees serve consumers the end product.
  • Consumers consume, and go on their merry way.

So, now we have happy consumers, paying for their food and eating their fill. While most data services won’t require payment, they will require authentication and/or authorization. Payment is essentially a method of authorization: you pay for it, it’s yours.

Authentication is the means to obtain and confirm the identity of the requestor; in the fast food case, it is public and anonymous. Anyone who wants to eat at the vendor and is willing to pay for the food and service can do so. Exceptions include those for whom “No Shirt, No Shoes No Service” or “We reserve the right to refuse service”, apply.

Like a vendor, a data service provides product (result sets or data streams) from raw materials (inputs) and a preparation effort (system processes). The data service authenticates the requestor (some services will be public, others will not) and authorizes the requestor to receive the appropriate level of data.

Follows some of the differences between the fast food vendor and data service:

  • Result set / data stream quality and presentation is always consistent and bound by contract to the consumers.
  • The availability is constant; essentially whenever the system is activated. In a 24/7 system, the service needs to be available all the time.
  • The delivery methodology is always the same: a response to a request from an outside consumer.
  • The service must advertise, but not because of competition. In a good design, a particular data service represents the sole source for the service it provides to the enterprise. But note: the data service advertisement is more like the counter menu at the fast food vendor than a billboard that drives traffic into the store.

Data service advertising bears further discussion. Looking at the counter menu, you see items and prices. The implication is “pay us the printed price for the item”, and we all understand it. If you were to do a menu item nutritional review, you could dig very deeply into what you’re getting for your money, including the number of ounces of meat, cheese, dough and vegetables. If the lookup to the nutritional information represents a return set of data, you could surmise that the inputs are:

  • Item name
  • Cash price

The outputs are:

  • 3 ounces ground beef
  • 1 ounce cheese
  • 2 ounce bun (or tortilla)
  • ½ ounce lettuce
  • 1 ounce tomato
  • 1 serving Thousand Island dressing
  • And so on.

There is no obvious need to extend the counter menu to this level of detail; in fact, we’d all find it annoying. We all agree that the burger (or taco) is a food item, and that it contains the detailed list; even though we don’t need it at our level of consumption.

However, a request to a data service (using a weather metaphor) might include:

  • City code (Seattle)
  • State code (WA)
  • Temperature (could be wind speed and direction, precipitation, etc.)

The result might include (I used comma-separated for the second return example; in a web services world, the two returns would be formatted in XML):

  • String=“The temperature in Seattle, Washington is 60 degrees F, at 12:34pm, June 15, 2004.”
  • Fields=”Seattle,Washington,60,F,12:34:00,20040615”

You’ll note the service returns two data: a formatted string and a series of fields. This gives the consumer some options as to which return to accept and use in their application. The point of this example is to illustrate the negotiation that must go on to adopt a services orientation and methodology; the service must advertise it’s need for three data inputs (city, state and weather data point, in this case, the temperature) and it will return two outputs: a formatted string and a series of fields.

In a web services world, such advertisement can be accomplished in a Web Services Definition Language (WSDL) document, typically available by doing a request of the service root on a web server.

A Note on Web Services
I’ve not delved into web services in this article thus far, and I’ll not start now. There are misnomers about the role web services plays in a services orientation, but the short story is this: web services enable services-oriented methodologies. They are not service-oriented components by themselves. I will address these issues in another article.

Summary
This article explains what SOA isn’t, addressing services orientation as a methodology and design practice than architecture. The fast food metaphor is presented as a model that all can understand as to the interactions that go on behind the scenes in the real world and how similarities exist when discussing data services. The weather service example shows a simple input / output / consume scenario that I’ll expand on later.

ProMail and MSDTC

This is a post stub; I’m capturing links at the moment and will flesh this out as I go.

For starters, I’m in a mixed-OS environment; Windows 2000 and Windows 2003 Servers. DTC through the Win2kSP1 Windows Firewall is fairly simple; allow MSDTC.EXE, and off you go.

However, when attempting to access a MSSQL Server on a Windows 2000 box, you must configure MSDTC to use dynamic ports, as the firewall option isn’t available. More on this later.

How to Troubleshoot MS DTC Firewall Issues: http://support.microsoft.com/default.aspx?scid=kb;EN-US;306843

Configuring Microsoft Distributed Transaction Coordinator (DTC) to Work Through a Firewall: http://support.microsoft.com/kb/250367/EN-US/

MSDTC Error 4437

After installing a component that uses MSDTC, I saw the error 4437 in Event Log, reporting "The account that the MS DTC service is running under is invalid". The description went on to advise that you could solve the problem by modifying the MS DTC service account in Component Services Explorer (CSE). However, when I opened CSE, I saw the My Computer icon with a red, downward-facing arrow. When in this state, right-clicking only a "COM Security" tabbed dialog, which won’t allow you to change the identity of the service account.

So, I needed to have the COM identity in synch with the service accounts, but since I couldn’t reset the COM identity using the interface, I reset the service account, granting permissions to the proper roles and removing / reinstalling DTC:

  • Open the Services window.
  • Navigate to Distributed Transaction Coordinator.
  • Modify the "Log on As" account to an account to a domain account that is a local administrator on the server.
  • Ensure the DCOM Server Process Launcher and the COM+ services are running under the Local System account.
  • Close the services window.
  • Open the CSE, right click the My Computer icon and click Properties.
  • In the "Access Permissions" panel, click the "Edit Default" button.
  • Ensure "SYSTEM", "INTERACTIVE" and the local "Administrators" are allowed Local and Remote access.
  • In the "Launch Permissions" panel, click the "Edit Default" button.
    Ensure "SYSTEM", "INTERACTIVE" and the local "Administrators" are allowed Local and Remote launch and Local and Remote Activation (check all four ‘allow’ boxes).
  • Click OK to get to the main window and close the CSE.
  • Stop the DTC service in a command window by typing "net stop DTC" and press enter.
  • Remove the DTC service in a command window by typing "msdtc -uninstall".
  • Confirm the DTC service is uninstalled in the Services window. If it isn’t, repeat the previous step. If that still fails, remove the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC key from the registry and repeat the previous step again.
  • Reboot the server.

When the server comes back up, reinstall the Network DTC service from Control Panel, Add/Remove Windows components, Application Server. Once installed, open a CMD prompt and type ‘msdtc -install’ to install the service. This should solve the problem.

In one of three instances, DTC still showed as installed even though there was no reference in the services window and logged Event ID 4427. In this case, uncheck the DTC box so setup removes other registry entries and reinstall. You will need to reboot the server if this is the case.

If you still get the Event ID 4427 "Failed to initialize the needed name objects" followed by a bunch of cpp references with a command line reference of: "C:\WINDOWS\system32\sysocmgr.exe" /y /i:C:\WINDOWS\system32\sysoc.inf (note: executing this command runs Windows Component setup, bypassing the Add/Remove icon in Control Panel) you will note MSDTC appears to be uninstalled and the registry reference removed, but reinstalling from Add/Remove programs fails. This seems to be related to the version of MSDTC left behind from removing and reinstalling. I tried to solve this by reinstalling MSSQL SP3a, but no dice.

In the end for this server, I removed and re-added the Application Server Role (removes COM+ and IIS as well as MSDTC) on the system and re-applied Win2kSP1. Oddly enough, I still had to open a CMD prompt and type ‘msdtc -install’ to get the service properly installed, but the rest of the components were there and DTC functioned properly.

I did some other DTC research in “Enabling MSDTC and BizTalk Server 2004”.

HACK: "packs" Directory under \system32\drivers\etc

First, let me say: no warranties, etc. This is just a list of what I did to resolve the issues.

I found a ‘packs’ directory in C:\windows\system32\drivers\etc; my laptop had been hacked by an application that loads an FTP server. Normally, I’d follow this directory path to access the HOSTS files (which I was doing when I discovered this little bugger). I found this before any files were uploaded, so I cannot speak to content, but I suspect it to be a warez distibution site.

You might also find errors and references to "FireDaemon.exe". This supposed to be a friendly program, allowing EXEs to run as services, but its footprint is evidence of the hack. If your system has been hacked, you’ll see references to it on the \packs path in your registry.

Removal:
There are a variety of other files in the \packs path, start by deleting all you can, including the subdirectories. Some files cannot be removed as they’re in use. The leftovers include:

  • cygwin1.dll (legitimate POSIX Emulation DLL, but being used in a bad way).
  • dll32.exe (rundll32.exe is the real version; this looks familiar, but is a shell).
  • ldcd.dll (unknown).
  • svchost.exe (references "FTP Serv-U Daemon"; I suspect it has been renamed. McAfee tells us this popular FTP software has been exploited: http://vil.mcafeesecurity.com/vil/content/v_99901.htm).
  • cygregex.to_be_deleted (this gets created as you’re removing files, so something else is working).
  • ccdx.dll (unknown).
  • ig.dll (trojan downloader file).

To remove these pests:

  • Delete all registry entries referencing the path.
  • Open Windows Task Manager.
  • Kill process dll32.exe in task manager.
  • Navigate to C:\WINDOWS\Prefetch and remove references to DLL32.EXE-{numbers}.pf
  • With dll32.exe killed, you can now delete all but the false svchost.exe.
  • Return to Windows Task Manager and sort processes alphabetically.
  • Click on the first svchost.exe process that is running as ‘local service’ and click ‘end process’.
  • Try to delete the bogus svchost.exe file. Repeat the above step and this step until you can delete the file.

It’s not over yet. This hack also put a number of package delivery/deployment files in C:\WINDOWS\system32\drivers\etc. Delete them:

  • osql.exe (legitimate command line SQL tool).
  • unrar.exe (legitimate rar format file unpacker).
  • xp.rar (the package delivered by the hack).
  • xp.txt (command file to pull down the components).

Then:

  • Reboot to safe mode.
  • Confirm the directory hasn’t been recreated.
  • Search the registry for the \packs file path to ensure it hasn’t been recreated.
  • Check the registry: HKLM\Software\Windows\CurrentVersion\Run for any anamolies.
  • Reboot to normal mode.
  • Re-apply Windows XP Service Pack 2 (this should replace any legitimate file versions).

No warranty; use these steps at your own risk. Please add comments to the veracity of this solution, or additional steps you had to go through to remove the hack.

WISPTIS.EXE: Identifying, Explaining, Removing

WISPTIS stands for "Windows Ink Services Platform Tablet Input Subsystem". This references an outdated MS-internal name from the team that developed it. This definition from (defunct) TabletPCDeveloper.com:

Wisptis.exe (\Windows\System32) This executable runs as a system service that provides pen-data collection for other components of the SDK.

WISPTIS.EXE is spawned as a service to communicate directly with an input device. On a tablet, it interacts with the digitizer; on a laptop / desktop it interacts with the mouse.

The .EXE ends up on your system when you install Journal Viewer (via Windows Update) and Microsoft Office 2003. I’ve seen it spawned when running Adobe Acrobat Reader, both as an add-in to Internet Explorer and natively when opening a .PDF. Hence, it can get spawned a lot. It also has the bad taste to not go away when AR or the IE session is closed.

The program doesn’t cause any damage, but it doesn’t do any good on a non-tablet PC, either. I’ve observed it grabbing 13-20MB of system RAM, but only a few cycles (might be higher in drawing programs). Removing it requires:

  • Stopping the service if it’s running (ensure AR is closed and stop the process in Task Mangler).
  • Modifying the registry (.REG file contents below)
  • Deleting the executable (C:\Windows\System32\WISPTIS.EXE).

As it can come back through various patches, you may have to remove it again.

The registry keys to remove are below (in WinReg .REG format). I’ve tested this on multiple WinXPSP2 systems. It’s a good idea to set a system restore point or to back up these keys to a .REG file before removing them. Once you’re comfortable you’ve not done any system damage, copy and paste the commands below to a .REG file. Note the "-" sign in front of the HKEY is syntax to remove the specified key:

==SNIP==
Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\AppID\{7F429620-16D1-471E-A81A-114992148034}]
[-HKEY_CLASSES_ROOT\AppID\wisptis.EXE]
[-HKEY_CLASSES_ROOT\CLSID\{04A1E553-FE36-4FDE-865E-344194E69424}]
[-HKEY_CLASSES_ROOT\CLSID\{13DE4A42-8D21-4C8E-BF9C-8F69CB068FCA}]
[-HKEY_CLASSES_ROOT\CLSID\{242025BB-8546-48B6-B9B0-F4406C54ACFC}]
[-HKEY_CLASSES_ROOT\CLSID\{3336B8BF-45AF-429F-85CB-8C435FBF21E4}]
[-HKEY_CLASSES_ROOT\CLSID\{3EE60F5C-9BAD-4CD8-8E21-AD2D001D06EB}]
[-HKEY_CLASSES_ROOT\CLSID\{43B07326-AAE0-4B62-A83D-5FD768B7353C}]
[-HKEY_CLASSES_ROOT\AppID\{7F429620-16D1-471E-A81A-114992148034}]
[-HKEY_CLASSES_ROOT\AppID\wisptis.EXE]
[-HKEY_CLASSES_ROOT\CLSID\{04A1E553-FE36-4FDE-865E-344194E69424}]
[-HKEY_CLASSES_ROOT\CLSID\{13DE4A42-8D21-4C8E-BF9C-8F69CB068FCA}]
[-HKEY_CLASSES_ROOT\CLSID\{242025BB-8546-48B6-B9B0-F4406C54ACFC}]
[-HKEY_CLASSES_ROOT\CLSID\{3336B8BF-45AF-429F-85CB-8C435FBF21E4}]
[-HKEY_CLASSES_ROOT\CLSID\{3EE60F5C-9BAD-4CD8-8E21-AD2D001D06EB}]
[-HKEY_CLASSES_ROOT\CLSID\{43B07326-AAE0-4B62-A83D-5FD768B7353C}]
[-HKEY_CLASSES_ROOT\CLSID\{43FB1553-AD74-4EE8-88E4-3E6DAAC915DB}]
[-HKEY_CLASSES_ROOT\CLSID\{524B13ED-2E57-40B8-B801-5FA35122EB5C}]
[-HKEY_CLASSES_ROOT\CLSID\{632A2D3D-86AF-411A-8654-7511B51B3D5F}]
[-HKEY_CLASSES_ROOT\CLSID\{65D00646-CDE3-4A88-9163-6769F0F1A97D}]
[-HKEY_CLASSES_ROOT\CLSID\{6E4FCB12-510A-4D40-9304-1DA10AE9147C}]
[-HKEY_CLASSES_ROOT\CLSID\{786CDB70-1628-44A0-853C-5D340A499137}]
[-HKEY_CLASSES_ROOT\CLSID\{836FA1B6-1190-4005-B434-7ED921BE2026}]
[-HKEY_CLASSES_ROOT\CLSID\{8770D941-A63A-4671-A375-2855A18EBA73}]
[-HKEY_CLASSES_ROOT\CLSID\{8854F6A0-4683-4AE7-9191-752FE64612C3}]
[-HKEY_CLASSES_ROOT\CLSID\{937C1A34-151D-4610-9CA6-A8CC9BDB5D83}]
[-HKEY_CLASSES_ROOT\CLSID\{9C1CC6E4-D7EB-4EEB-9091-15A7C8791ED9}]
[-HKEY_CLASSES_ROOT\CLSID\{9DE85094-F71F-44F1-8471-15A2FA76FCF3}]
[-HKEY_CLASSES_ROOT\CLSID\{9FD4E808-F6E6-4E65-98D3-AA39054C1255}]
[-HKEY_CLASSES_ROOT\CLSID\{A5558507-9B96-46BA-94ED-982E684A9A6B}]
[-HKEY_CLASSES_ROOT\CLSID\{A5B020FD-E04B-4E67-B65A-E7DEED25B2CF}]
[-HKEY_CLASSES_ROOT\CLSID\{AAC46A37-9229-4FC0-8CCE-4497569BF4D1}]
[-HKEY_CLASSES_ROOT\CLSID\{C52FF1FD-EB6C-42CF-9140-83DEFECA7E29}]
[-HKEY_CLASSES_ROOT\CLSID\{D8BF32A2-05A5-44C3-B3AA-5E80AC7D2576}]
[-HKEY_CLASSES_ROOT\CLSID\{DE815B00-9460-4F6E-9471-892ED2275EA5}]
[-HKEY_CLASSES_ROOT\CLSID\{E3D5D93C-1663-4A78-A1A7-22375DFEBAEE}]
[-HKEY_CLASSES_ROOT\CLSID\{E5CA59F5-57C4-4DD8-9BD6-1DEEEDD27AF4}]
[-HKEY_CLASSES_ROOT\CLSID\{E9A6AB1B-0C9C-44AC-966E-560C2771D1E8}]
[-HKEY_CLASSES_ROOT\CLSID\{EFB4A0CB-A01F-451C-B6B7-56F02F77D76F}]
[-HKEY_CLASSES_ROOT\CLSID\{F0291081-E87C-4E07-97DA-A0A03761E586}]
[-HKEY_CLASSES_ROOT\CLSID\{43FB1553-AD74-4EE8-88E4-3E6DAAC915DB}]
[-HKEY_CLASSES_ROOT\CLSID\{524B13ED-2E57-40B8-B801-5FA35122EB5C}]
[-HKEY_CLASSES_ROOT\CLSID\{632A2D3D-86AF-411A-8654-7511B51B3D5F}]
[-HKEY_CLASSES_ROOT\CLSID\{65D00646-CDE3-4A88-9163-6769F0F1A97D}]
[-HKEY_CLASSES_ROOT\CLSID\{6E4FCB12-510A-4D40-9304-1DA10AE9147C}]
[-HKEY_CLASSES_ROOT\CLSID\{786CDB70-1628-44A0-853C-5D340A499137}]
[-HKEY_CLASSES_ROOT\CLSID\{836FA1B6-1190-4005-B434-7ED921BE2026}]
[-HKEY_CLASSES_ROOT\CLSID\{8770D941-A63A-4671-A375-2855A18EBA73}]
[-HKEY_CLASSES_ROOT\CLSID\{8854F6A0-4683-4AE7-9191-752FE64612C3}]
[-HKEY_CLASSES_ROOT\CLSID\{937C1A34-151D-4610-9CA6-A8CC9BDB5D83}]
[-HKEY_CLASSES_ROOT\CLSID\{9C1CC6E4-D7EB-4EEB-9091-15A7C8791ED9}]
[-HKEY_CLASSES_ROOT\CLSID\{9DE85094-F71F-44F1-8471-15A2FA76FCF3}]
[-HKEY_CLASSES_ROOT\CLSID\{9FD4E808-F6E6-4E65-98D3-AA39054C1255}]
[-HKEY_CLASSES_ROOT\CLSID\{A5558507-9B96-46BA-94ED-982E684A9A6B}]
[-HKEY_CLASSES_ROOT\CLSID\{A5B020FD-E04B-4E67-B65A-E7DEED25B2CF}]
[-HKEY_CLASSES_ROOT\CLSID\{AAC46A37-9229-4FC0-8CCE-4497569BF4D1}]
[-HKEY_CLASSES_ROOT\CLSID\{C52FF1FD-EB6C-42CF-9140-83DEFECA7E29}]
[-HKEY_CLASSES_ROOT\CLSID\{D8BF32A2-05A5-44C3-B3AA-5E80AC7D2576}]
[-HKEY_CLASSES_ROOT\CLSID\{DE815B00-9460-4F6E-9471-892ED2275EA5}]
[-HKEY_CLASSES_ROOT\CLSID\{E3D5D93C-1663-4A78-A1A7-22375DFEBAEE}]
[-HKEY_CLASSES_ROOT\CLSID\{E5CA59F5-57C4-4DD8-9BD6-1DEEEDD27AF4}]
[-HKEY_CLASSES_ROOT\CLSID\{E9A6AB1B-0C9C-44AC-966E-560C2771D1E8}]
[-HKEY_CLASSES_ROOT\CLSID\{EFB4A0CB-A01F-451C-B6B7-56F02F77D76F}]
[-HKEY_CLASSES_ROOT\CLSID\{F0291081-E87C-4E07-97DA-A0A03761E586}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\1125549C421D34E4DBF1036F62580BE1]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\652A08B235C6DFF4C8CD41B52DE68CA4]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\9B4B5940D4625D64C85532B8CDE3BF4D]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\D656DA4A9E277A34D90D5E6FFA34E827]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7040110900063D11C8EF10054038389C\Features\WISPFiles]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7040110900063D11C8EF10054038389C\Features\WISPHidden]
[-HKEY_CLASSES_ROOT\TpcCom]
[-HKEY_CLASSES_ROOT\TpcCom.ClassicW]
[-HKEY_CLASSES_ROOT\TpcCom.ClassicW.1]
[-HKEY_CLASSES_ROOT\TpcCom.DrawAttrs]
[-HKEY_CLASSES_ROOT\TpcCom.DrawAttrs.1]
[-HKEY_CLASSES_ROOT\TpcCom.DrawAttrsXP]
[-HKEY_CLASSES_ROOT\TpcCom.DrawAttrsXP.1]
[-HKEY_CLASSES_ROOT\TpcCom.GenericRecognizer]
[-HKEY_CLASSES_ROOT\TpcCom.GenericRecognizer.1]
[-HKEY_CLASSES_ROOT\TpcCom.InkObject]
[-HKEY_CLASSES_ROOT\TpcCom.InkObject.1]
[-HKEY_CLASSES_ROOT\TpcCom.InkObjectXP]
[-HKEY_CLASSES_ROOT\TpcCom.InkObjectXP.1]
[-HKEY_CLASSES_ROOT\TpcCom.InkSettings.1]
[-HKEY_CLASSES_ROOT\TpcCom.Lattice.1]
[-HKEY_CLASSES_ROOT\TpcCom.RecoManager]
[-HKEY_CLASSES_ROOT\TpcCom.RecoManager.1]
[-HKEY_CLASSES_ROOT\TpcCom.TabletManager]
[-HKEY_CLASSES_ROOT\TpcCom.TabletManager.1]
[-HKEY_CLASSES_ROOT\TpcCom.UserDictionary]
[-HKEY_CLASSES_ROOT\TpcCom.UserDictionary.1]
[-HKEY_CLASSES_ROOT\TypeLib\{194508A0-B8D1-473E-A9B6-851AAF726A6D}]
[-HKEY_CLASSES_ROOT\TypeLib\{56D04F5D-964F-4DBF-8D23-B97989E53418}]
[-HKEY_CLASSES_ROOT\TypeLib\{773F1B9A-35B9-4E95-83A0-A210F2DE3B37}]
[-HKEY_CLASSES_ROOT\TypeLib\{7D868ACD-1A5D-4A47-A247-F39741353012}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\1125549C421D34E4DBF1036F62580BE1]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\652A08B235C6DFF4C8CD41B52DE68CA4]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\9B4B5940D4625D64C85532B8CDE3BF4D]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\D656DA4A9E277A34D90D5E6FFA34E827]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7040110900063D11C8EF10054038389C\Features\WISPFiles]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7040110900063D11C8EF10054038389C\Features\WISPHidden]

==SNIP==

As always, no warranties, expressed or implied: use at your own risk.