Time Zone Time Lapse

The video below shows twenty-four hours from noon UTC to noon UTC on June 7, 2010 using webcams from the Catfood WebCamSaver database. It proves that I really will do anything to avoid finishing off the new Catfood web site.

More...

Tags: ,

Categories: catfood | Random

Reviews and links for June 2010

Tell-All by Chuck Palahniuk

Tell-All by Chuck Palahniuk

2/5

A barely reheated Glamorama (celebrities and brands in bold face) about star-fucking in the form of a movie script. Enough Palahniukisms to make it worth finishing (for me), but only because it was mercifully short.

 

More...

WPF commands with nested focus scope

Here's a frustrating WPF scenario — you use the ApplicationCommands class to add Cut, Copy and Paste commands to toolbar and then put a TextBox on another toolbar. Click in the TextBox and the commands remain disabled. WTF, WPF?

The problem is with focus scopes. Your window is a focus scope and so are any menus or toolbars. This has the desirable property of allowing commands to target the control you were in immediately before invoking the command. You want paste to target the text box you're editing, not the menu item or button you clicked to request the paste.

So far so good. The problem is that the commanding system isn't smart enough to target the control with keyboard focus if it's in a nested focus scope. Remember that the window itself is a focus scope so our TextBox in a ToolBar (also a focus scope) is nested and immune to commands from our menu or toolbar.

Here's a simple window that demonstrates the problem:

More...

Tags: , , ,

Categories: .NET | C++

Converting Blogger ATOM export to BlogML

I'm slowly converting a number of blogs from Blogger to BlogEngine.NET. The least fun part is dealing with the Blogger export file. For this blog I used a Powershell script but had problems with comments not exporting correctly and it was quite painful to fix everything up. Blogger allows you to export a copy of your blog using ATOM, however BlogEngine.NET (and other tools) speak BlogML.

I've just released a command line tool that takes the ATOM format Blogger export and converts it to BlogML. You can download Blogger2BlogML from Codeplex. The tool uses .NET 4.0 (client profile) so you'll need to install this if you don't already have it. If you give Blogger2BlogML a try let me know how you get on. 

Tags: , , , ,

Categories: .NET | Blogger2BlogML | C#

ESRI Shapefile Library Update

I've just released a small update for my ESRI Shapefile Reader project on Codeplex. The only change is a patch from SolutionMania that fixes a problem when the shapefile name is also a reserved name in the metadata database. The patch escapes the name preventing an exception from being thrown.

Catfood.Shapefile.dll is a .NET 2.0 forward only parser for reading an ESRI Shapefile. Download 1.20 from Codeplex.

Tags: , ,

Categories: .NET | C# | shapefile

Reviews and links for May 2010

Founders at Work: Stories of Startups' Early Days by Jessica Livingston

Founders at Work: Stories of Startups' Early Days by Jessica Livingston

4/5

Over 30 interviews with tech company founders ranging from Ray Ozzie and Mitch Kapor to James Hong of "Hot or Not". The interview with Philip Greenspun of ArsDigital is very raw and very amusing. Joel Spolsky's advice is "So quit your day job. Have one other founder, at least. I'd sat that's the minimum bar to getting anywhere." - well, that plus have a hit blog read by developers and then sell tools for developers. Diverse, inconclusive but fascinating.

 

More...

Do useful things with the volume shadow copy service (VSS)

The Volume Shadow Copy Service (VSS) takes a snapshot of an NTFS drive at a point in time. The clever thing about VSS is that it doesn't copy anything — it starts with the assumption that nothing has changed and then keeps track of every change to the snapshot so only changes need to be stored.

From Windows Vista on it's possible to mount a shadow copy as a drive letter or share. ShadowTask is a command line tool that creates a VSS copy, mounts it as a drive and then runs a program or batch file. For example:

ShadowTask C V dostuff.bat

Creates a copy of C:, mounts it as V: and then runs dostuff.bat.

Let's say you want to copy a locked file — maybe some outlook personal folders. Dostuff.bat could contain:

copy V:\Users\You\AppData\Local\Microsoft\Outlook.pst C:\Users\You\Desktop\OutlookBackup.pst

Bingo, you have a copy of your PST without shutting down Outlook.

Download: ShadowTask.zip (50.86 kb)

The ZIP contains both 32 and 64 bit versions of the tool. You must use the version that matches your platform. ShadowTask supports Windows Vista and 7. XP doesn't support mounting a shadow copy so ShadowCopy will fail if you try to use it on XP. ShadowCopy must run as admin (elevated).

Tags:

Categories: catfood | C++

Scanning multiple pages into a PDF file

PdfScan is a simple tool for scanning pages into a PDF file. You can scan single pages from a flatbed scanner or several pages from a document feeder. The page size applies to both the scan and the page(s) added to the PDF.

I wrote PdfScan because I know I'm going to be scanning a lot of documents over the next couple of weeks. Previously I used a tool called ScanToPDF from O Imaging but their licensing pissed me off so much that I'd rather waste time reinventing the wheel than pay them for another copy.

PdfScan - Scan pages to a PDF

Download PdfScan-0.10.zip (260.77 kb).

This is a beta — it works with my scanner and my documents. There's no installer, so extract the ZIP file and run the EXE to use it. PdfScan requires the .NET 4.0 Framework. If you get an error when you run PdfScan.exe try installing .NET 4 and then run it again.

If enough people use this I'll make it a bit more friendly, add an installer and release it through Catfood. If you like it leave a comment below. If it doesn't work for you leave a comment or email me and I'll try to help.

PdfScan uses PDFsharp from empira Software. Thanks chaps!

Tags: , , ,

Categories: catfood

Scanning from the ADF using WIA in C#

I've been going nuts trying to scan from the document feeder on my Canon imageClass MF4150. Everything worked as expected from the flatbed, no dice trying to persuade the ADF to kick in. I found some sample code but it was oriented towards devices that can detect when a document is available in the feeder. Evidently my Canon doesn't expose this and so needs to be told the source to use.

The way to do this is to set the WIA_DPS_DOCUMENT_HANDLING_SELECT property to FEEDER. You then read WIA_DPS_DOCUMENT_HANDLING_STATUS to check that it's in the right mode and initiate the scan. This did not work for toffee.

After much experimentation I discovered a solution. I had been setting device properties and then setting item properties before requesting the scan. Switching the order - item then device - made everything work.

Here's the function to scan one page:

More...

Tags: , ,

Categories: .NET | C#

Use WPF Dispatcher to invoke event handler only when needed

After floundering a bit with the WPF Dispatcher I've come up with a simple way to make sure an event handler executes on the UI thread without paying the overhead of always invoking a delegate.

void someEvent_Handler(object sender, SomeEventEventArgs e)
{
    if (this.Dispatcher.CheckAccess())
    {
        // do work on UI thread
    }
    else
    {
        // or BeginInvoke()
        this.Dispatcher.Invoke(new Action<object, SomeEventEventArgs>(someEvent_Handler), 
            sender, e);
    }
}

This has the benefit (for me at least) of being very easy to remember. Hook up the event handler and then if there's a chance it could be called from a different thread wrap it using the pattern above. It's easier to read than an anonymous delegate and much faster than defining a specific delegate for the event in question.

I haven't tested the various methods to see which is the fastest yet… will get round to this at some point.

Tags: ,

Categories: .NET | C#

 

CC | About | Search | Home | Validate