Friday, 10 September 2010

Find Assembly Versions

For .NET assemblies (typically.exe or .dll files), the Assembly version is the version number used by .NET to identify the assembly. This is separate from the File version and Product version, which are part of the Win32 Version resource and can (optionally) exist in any .exe or .dll module, whether it’s a .NET assembly or not.

The File and Product versions of a module and other information from its Version resource, such as a Copyright message, can be displayed in columns in Windows Explorer. However, there doesn’t seem to be a way to display the Assembly version. This tool, FindAssemblyVersion.exe can tell you the Assembly version (and some other information) for one or more assembly files.

You can download it here, including a document explaining all the options.

The main features are:
  • Get any combination of Assembly version, Product version and/or File version for specified files.
  • Get information about other assemblies which the specified assemblies depend on.
  • Get information for specified files and/or all .dll and .exe files in directories.
  • Get output in a text list or tab-delimited format, for viewing in spreadsheets etc.
  • Use the output to compare versions of modules between two installations.

Friday, 13 August 2010

AppDomain Viewer

AppDomainViewer enables you to have a quick sneak peek into the list of AppDomains that exist in an application. It presents the list of applications with AppDomains in a tree structure, and you can view the AppDomains by expanding the application node.

You can further expand the AppDomain node to view the modules/assemblies loaded into that AppDomain.

This tool is based on a Microsoft code-sample provided with the book, Customizing the Microsoft .NET Framework Common Language Runtime. The original sample would only show 32-bit processes on a 32-bit OS, and only 64-bit processes on a 64-bit OS. This updated version would show both 32-bit and 64-bit processes running on a 64-bit OS.

You can download it here.

Tuesday, 27 July 2010

Windowshifter

Windows 7 has the ability to move windows around the desktop via the Windows key and cursors. However the way it does this is not to all tastes.

This app modifies it and brings the functionality to Windows XP as well. Now you can specify the number of rows & columns to span across each screen and move the window to the corners as well as by row & column.

Using the Windows key and the numpad gives the most control(cursor keys are still also supported)
'8' and '2' move the Window up and down a row.
'4' and '6' move the Window between columns
'1', '3', '7' and '9' keys move the Window into a corner.
'5' switches between centered, full screen and spanning all available displays.
'0' Minimizes the window

As long as this app is running (it will minimize to the task bar) the active window can be manipulated.

Download here

Notes:
portions of the code were adapted from work by http://jeffklawiter.com under Creative Commons Attribution licensing (http://creativecommons.org/licenses/by/3.0/us/)

Friday, 9 April 2010

Deltaview Style Removal Tool

There are occasions when some Deltaview styles (Deltaview Insertion, Deltaview Comment etc) and/or Deltaview bookmarks are left in a document. This software tool takes a Word document file and removes all the Deltaview styles and all the Deltaview bookmarks. It will also work as a command line tool with an entire directory.

Notice that it can also be used on a redline document.

The executable (in a zip file) can be downloaded here

The program consists of one dialog. Drag, browse to, or type in the path of the file you want cleaned. Note that a DMS is not supported.

The output file edit box will fill in with the name of the file, plus "_DV_Removed" added to its name. This can be changed to another name/path.
There is a check box for viewing the document after cleaning, and a check box for turning any redline text into track changes. These are self explanatory.

Also, the program can be used on a command line which can deal with whole directories at once! The format of the command line is as such:

RemoveDeltaViewStyles /path "C:\StylesBeGone\DirectoryOfStuff" /appendtext "DV_Removed" /v /s

Where:

path - the directory of files to be cleaned,

appendtext - the text to add onto the file name, eg redline.doc with "DV_Removed" becomes redline_DV_Removed.doc

/v - silent mode (no dialogs or warnings at all)

/s - suppress all errors

File names which already exist will have (N) added, eg redline_DV_Removed(1).doc

This program is compatible with DeltaView and Workshare Compare.

Friday, 12 March 2010

Go, grab it !

Ever wanted to grab some text from a word document on a machine without MS Office installed? Yes, right, you don’t want to consume a copy of your MS Office license for that small piece of text that you want. Or you may just want to copy text from an MS Office document, and strip all the styles applied to it or anything else that involves just the text thinigie …

If you are looking to do any of the above, TextGrabber is your buddy. It can grab text from MS Word (doc/docx), MS Excel (xls/xlsx) and MS Powerpoint (ppt/pptx) documents.

It’s very simple to use. You provide the path to the document you want to grab text from, and we do the magic. You can browse, or can type in the path and click on “Get Text” button. It will refresh the contents. In case you browse for the file, you don’t need to click on “Get Text” button. It will do it for you.

And that’s precisely it.

Note: You may need to install Microsoft Filter Pack on your machine, if it’s not already installed, for application to work properly.

Wednesday, 10 March 2010

What dependency was that?

Are you a .NET developer?

What do you do when you get a FileNotFoundException when loading a managed assembly? The error message is mostly unhelpful: "Could not load file or assembly 'x' or one of its dependencies. The system cannot find the file specified." Great if the problem file or assembly is 'x' but if the problem is a dependency, which one is it?

I know what to do if the problem is in native code. Fire up Dependency Walker (depends.exe) and load up the problem dll. Makes debugging dependency issues in native code a doddle.

The Microsoft tool fuslogvw.exe is one option but finding the right log line can be difficult and (the thing I really hate) the UI isn't resizable.

What I really want is a nice tree view of all the static dependencies. If that's what you want then take a look at Workshare.Labs.DotNetDepends. It shows a nice tree view of all the dependencies. Dependencies are coloured to tell you the load status. Green for dependencies that load normally, pastel green for dependencies loaded via publisher policy files, red for a dependency for failed to load and pastel red for a dependency that has a dependency that failed to load.

Workshare.Labs.DotNetDepends.exe requires .NET 2 and compiled as Any CPU. On x64 systems it will load assemblies as a x64 and may not be able to load mixed mode x86 dlls. An update for that is in the future.

And the interesting fact for the day is that System loads System.Xml loads System loads ...

Friday, 12 February 2010

What's Changed?

Document collaboration is all about dealing with change. If you keep the document safely on your 'C:\' drive then you have the luxury of dealing with changes in a fairly structured manner - you can send the document to others, get their input and choose whether or not to include their changes. You're in control...

Store the same document on a network share and the story changes. Any time that you don't have the document open, someone else might be making changes to it. Often this sort of unstructured approach is the best route to collaboration, but it can leave you feeling that you've lost control of the process - each time you open the document new sections have appeared, paragraphs are re-written or gone and you don't have a handle on it.

Workshare Compare, of course, provides world-class document comparison functionality, but even the finest comparison tool can't help if you don't know what to compare against what, or if the last version of the document you remember doesn't even exist any more...

The WorkshareLabs "What's Changed?" addin for Word 2007 can help! Every time that you work on a document from a network share, it saves a local copy when you close the document. The next time you open the same document, it can check if the network copy is newer than the saved copy and offers to launch a comparison if it is. With one simple click, you can discover all the changes made to the document since you last worked on it.

You can install the addin from here. It also provides a couple of other pieces of handy functionality for you. It does require, however, that you have Workshare Compare already installed to provide the document comparison functionality.

As usual for a Workshare Labs item, the software is provided to you for free and with absolutely no warranty of any kind whatsover. If it breaks, you get to keep both halves... If it does misbehave, you can uninstall it from 'Add/Remove Programs' in the usual way.

Users of this labs product should be aware that it stores copies of documents within your 'Local Settings' folder - this may consume disk space or lead to poor performance if you access a network share over a slow link. If you have to comply with any sort of document destruction policy, then this addin is probably not for you!

Friday, 15 January 2010

Try the Workshare Redline Viewer for Silverlight

Overview

The Silverlight Redline Reader is an experimental release using the Workshare Compare Service. It is designed to run anywhere (PC, MAC, Linux) and only requires the Silverlight 3 runtime installed on the client. This makes the capability completely portable and provides a high degree of performance as the rendering is done on the server and streamed over a network connection.

Technology Demonstration

Using Silverlight you are able to deliver a modern desktop application experience through a web-browser.

This demonstration utilizes WCF (Windows Communication Foundation) to transmit and stream data over the internet. This provides better reliability and security compared to traditional ASMX web services.

This demonstration leverages the 64 bit beta version of the Workshare Compare Service.

Limitations

Large file support hasn’t yet been configured on the server , which means that any documents that take longer than 1 minute to upload will timeout and fail to display.

Please try it here, feedback to wslabs@workshare.com

http://redline.workshare.com/redlinebrowser.web_deploy/redlinebrowsertestpage.html

Tuesday, 8 December 2009

Silverlight Redline Reader for Compare Service

The Silverlight Redline Reader for Compare Service is designed as a run anywhere (PC, MAC, Linux) low friction tool to display the Redline outputs from the Workshare Compare Service. This make the capability completely portable and high performance as the rendering is done on the server and rendered over a network connection.



Tuesday, 13 October 2009

Workshare Compare Service - SDK & Code Sample

Overview
This SDK for Compare Server enables developers to embrace and extend the functionality of the Workshare Compare Server.  The SDK contains a fully working sample application written in C#.

Category - SDK

Detail



Tuesday, 6 October 2009

Quick Brown Foxes

I've been here at Workshare for nearly 10 years now, and I don't think one of them has gone by without a support call being regarding 'quick brown foxes' being raised to development. Goodness knows how many times this particular gem has been caught by our support team and dealt with without anyone in development hearing about it...

Apparently this pangram goes back to at least 1888 when it was used in a book on shorthand, but the reason that Workshare is plagued by it all comes down to Microsoft... You see, if you type '=rand()' at the beginning of a blank word document and press return you get a few paragraphs appear with this phrase repeated over and over (Word 2007 and newer, you need to use '=rand.old()' instead). Why is this a plague? Well, now and then someone is evaluating or testing out or comparison software and doesn't have any documents to hand, and sometimes they create a test document using '=rand()'. Then they change 'brown' to 'red' or something and compare the documents.

And it doesn't do what they expect!

This is probably what is expected

And this is typical of what is produced


Ok, you say to yourself - if it comes up year after year, why not fix the problem? Because doing so would make the product worse - allow me to explain...

While I can't reveal too many confidential details of the document comparison algorithm, I can say that one of the main priorities of the algorithm is to match up as much text as possible as soon as possible, starting with large chunks (paragraphs, setences) and working down to smaller chunks (words, numbers, etc). This is a good thing for two reasons - once text has been matched up it can be largely ignored for the remainder of the comparison process, reducing the amount of work required and hence speeding things up. Also, matching a large block of text is something you can typically have confidence in - if a one hundred word paragraph is found to be the same between the original and modified documents, it's a good bet that the two really correspond. If you spot the word 'and' in both there is a great deal of uncertainty about whether the correct 'and's have been paired up.

So, how does this apply in the 'Quick Brown Fox' scenario? Well, typically in this case we'd have many copies of the same paragraph (lets say 10) in the original document and one more in the modified document. The comparison starts off looking for matching paragraphs and spots that there are matches and starts pairing them up. All of the unchanged paragraphs are candidates for this pairing procedure, but not the one modified copy. Since the matched paragraphs are duplicated, *and* there are no other non-duplicated paragraphs around to help guide the pairing process, the way in which the items are paired is somewhat arbitrary. In fact in this case the first matching duplicate in the original is paired with the first matching duplicate in the modified. This decision inevitably leads to the first (edited) paragraph of the original being shown as deleted and another copy of the paragraph being shown as inserted in the modified.

Now, a further experiment will reveal that the problem doesn't show itself in realistic documents (i.e. ones where the same text is not repeated over and over). This means that we can't justify the negative performance impact of 'fixing' the quick brown fox scenario given that there is essentially no real world benefit to making the change.

Of course, we're always ready to raise the quality bar if a similar comparison issue is found in a set of real-world documents.

Scrambling a Confidential Document

The Problem
Even when you invest in the best document comparison tools available, there can be times when you need to contact technical support for assistance with a problem comparison. When this happens, it's vital that you can provide the problem documents to technical support to allow the issue to be reproduced and investigated. The problem comes when those documents are confidential...

Of course, highly respected software companies who produce to quality document comparison tools (who, us?!) will guard the confidentiality of your documents and enter into NDA arrangements as appropriate. Just sometimes, however, the document is so confidential that this isn't enough. What to do then?

The Tool
Well, if you've already got a top class document comparison tool installed (Workshare Compare 5.21 or later), all you need is this little utility : The Workshare Document Content Hider

The utility works on a copy of your document saved in either DOC or RTF format, so your first step should be to use Word to save a copy in one of these formats somewhere convenient. Then run the tool (it shouldn't need any installation). Use the top 'Browse' button to select your problem document, check that you're happy with the output filename chosen (note that the output is *always* RTF format) and press the 'Hide Content' button. Rinse and repeat for the other document.

What does it do?
The tool opens the document, then mangles all the text and numbers in the document before saving the new version. The text mangling procedure involves replacing all consonants with the letter 'c' and all vowels with the letter 'v'. Even and odd digits are replaced with '1' and '0' respectively. Other characters (punctuation, etc.) remain unchanged. It's obviously going to be almost impossible to recover the original content of the document once this scrambling has taken place - for example the words 'art', 'and', 'ant' and many others are all transformed into 'vcc'.

What Limitations does it have?
Under some circumstances, the comparison problem being investigated may be related to a problem reading the content of the original source files. Since the same code path is used by the tool to read the document as in the comparison, in these cases the tool would not be able to process the document either. Such problems can arise from corrupted documents or pre- Word 97 .doc files. If the tool fails to work, try loading the document into Word and saving it as a different format, then trying again.

Graphics and other non-text items within the document are unchanged - if these contain sensitive information then they would need to be removed manually.

Japanese, Chinese and other Ideographic language documents may not be scrambled properly - it's always worth checking the scrambled version of the document before sending it to us.

You should be aware that it may be possible to deduce the identity of some longer dictionary words from the scrambled document - for instance if there is only one dictionary word that is converted to vccvccvcvvc, then that pattern in the scrambled document could be identified as the matching dictionary word ('information' in this example). However, numbers and proper nouns (company names, individual names, place names, etc) are almost impossible to recover. The level at which the content is hidden is a compromise, since it's important to ensure that a particular word is always converted in the same way regardless of its location in a document. Traditional strong encryption wouldn't obey this rule, which would mean that the resulting documents would not be at all useful in reproducing the comparison problem.

One last piece of advice - once you've processed your documents, try comparing the processed version to make sure that the bug you're about to report can still be reproduced!


The WorkshareLabs Outlook AutoFiler

Last time I talked about the need for a bit of help keeping your mail folders in order and the importance of keeping you - the user - in the loop in the filing decision making process. This time around you can get your hands on the WorkshareLabs Outlook AutoFiling Addin.

If you're impatient, here's the download link. You'll need Outlook 2007 mind you.

If you have a bit more time, here are some of the technical details.

The installer is quite small, but it may need to download some pre-requisite installs depending on what is already installed on your system. In particular, the .NET Framework can be a large download and take a while to install. You'll need administrative access to your machine to perform the installation. On Vista and Windows 7 you may be prompted for consent to allow the install to proceed.

You'll need to close Outlook while you install the Addin. When you first run Outlook after installing you should get an extra window appear which will show the progress of the initial indexing of your mailbox. This indexing can take quite some time (depending on the size of your mailbox), but it only happens once. You *can* continue to use Outlook while the indexing is in progress (and even close it down and re-open it). However, if possible just let the indexing finish while you grab a coffee, or lunch, or whatever.

You may also notice that a new area has appeared at the bottom of the preview pane and of any messages you open. It should look something like this :



You can use the left hand row of buttons to move the current message to the folder shown on each of the buttons - each time you select a different message the buttons will be updated to show the most likely filing destinations for the message based on messages you have already files. Note that until indexing is complete, these buttons may be blank or show suggestions that are less than optimal.

The Addin will continue to learn your filing preferences after initial indexing - every time you move a message to a new folder it will update the index accordingly and that will be reflected in future suggestions.

Next time, a bit more detail on how it all works and some FAQs.

Friday, 2 October 2009

Filer or Piler?

E-mail. Love it or loathe it, most probably you can't live without it. For most information workers these days, the email system is an invaluable personal archive of documents, links and other information. However, management of that personal archive has gradually become more time consuming as our dependence on e-mail has grown.

The first challenge of managing your e-mail is sifting out the worthwile messages from the mountain of dross that typically hides them. Appropriate spam filtering is obviously a critical first line of defence, but even with spam taken out of the equation, the tide of pointless repies, CCs to everyone and FYIs can be nearly overwhelming. For now, we're going to assume that you've already got a handle on this problem and we're going to concentrate on the next issue - what to do with the e-mails that you actually want to keep.

Anecdotally, e-mail users can be divided into 'Filers' and 'Pilers'.

Filers tend to have their past e-mail divided into a neat hierarchy of folders and subfolders. A 'filer' will typically only have a small number of items remaining in their inbox - possibly using the inbox as a 'to deal with' holding area.

Pilers can be identified just as easily - they're the ones with 5000, 10000, 20000 messages in their inbox. The rationale behind piling is easy to identify - filing can be hard work - firstly setting up the folders, then keeping on top of the flood of incoming mail. The addition of (almost) instant search to more recent versions of Outlook has mitigated some of the problems of the piling solution, but keeping very large numbers of items in your inbox can still strain both mind and machine.

Here at Workshare Labs, we asked ourselves why couldn't there be something that helped you maintain the filing of your email system - after all, if web search engines can usually point you to the page you want in a fraction of a second, why can't software on your desktop work out which folder to file your email in? The answer is, of course, that it can, providing you're careful of one thing - keeping the user in the loop...

Are you feeling lucky? Apparently not. Only about 1% of Google searchers say they are and click on the other button on the Google search page to take them straight to the first hit. 99% of searchers prefer to see the list of the first 10 hits. Why? Because any automated search or categorization software can make some truly appaling blunders on occasion. You look at the top 10 Google results because you know that somewhere in that list there's likely to be something of use to you, even if the number 1 hit is irrelevant.

Automatically filing your email has the same problem - when it works well it works very very well and when it goes wrong it is horrid! Our approach is to work out the 4 most likely places that each message might fit in your filing structure and let you decide which one to use (or to use none of them). This takes out a lot of the 'are you feeling lucky?' nature of the software and results in a much more usable solution. Showing only 4 suggestions rather than 10 or more is a simple compromise - having more would increase the chance of showing a useful suggestion, but also would eat up more screen space, which is already at a premium in Outlook.

Next time, we'll talk in a bit more detail about how our solution works, and let you get your hands on it to try it out for yourselves.