DXO Optics Pro - looking forward to v7

I usually use several applications to edit images. I always start with Canon's Digital Photo Professional (DPP) and then use Noise Ninja, EnfuseGUI and GIMP, when I need to do selective noise reduction, tone mapping and additional editing and scaling. When I learned that DxO Labs, which maintains an awesome database of camera sensor test results, offers DXO Optics Pro v6.1.1 that does it all in one package, I decided to check it out.

Putting a compact camera to a good use

Compact cameras are commonly considered as something that is only good for holiday family pictures and party shots. While there are many technical reasons why Single Lens Reflex (SLR) cameras produce better images, quality compacts pack enough technology to capture great photographs and the attention of your audience.

std::wstringstream vs. swprintf

A few days ago a developer asked me if we intend to replace all archaic printf-style calls within the project with modern, object-oriented string stream equivalents. I heard this sentiment many times over the years, often substantiated by the fact that buffered stream operations are faster than frequent parsing of the format string. Let's test this theory and format a simple string in a loop using both methods.

Can Lumix DMC-G1 stop time at 1/125th of a second?

I was browsing the Lumix website and noticed that the shutter speed reported for an image of a hummingbird in flight was 1/125th of a second. Hummingbirds flap their wings at approximately 50 flaps per second, so I would expect the wings to show some motion blur at this shutter speed, which could be anywhere from 10% to 70% of the wing path. However, there was absolutely no motion blur in the picture.

Moving blogs to ASP.Net

This site was originally written in ASP JavaScript, which worked great, but lacked a couple of things, like being able to upload files without having to parse multipart HTTP requests. So, I decided to move the site to ASP.Net to take advantage of the new functionality offered by the .Net framework, while keeping the implementation written in JavaScript.

Panasonic DMC-ZS1 - please stop helping!

I started to see hot pixels in my good old Coolpix E5900, so I decided to buy a new camera. After much research, my choice fell on Panasonic DMC-ZS1, which was highly recommended by DPreview in their group review of compact super zoom cameras:


At first, the camera felt great - the 12x optical zoom range was awesome, which is about 6x magnification, compared to the 3x optical zoom of E5900. My excitement started to evaporate quite quickly though once I learned that the camera lacks basic control over image quality.

Printing from a 32-bit IIS process on 64-bit Windows

Last week I came across a very strange problem with Windows printing - an attempt to create a printer device context through CreateDC within a 32-bit IIS worker process would fail and return NULL, but GetLastError would indicate that there was no error and there was nothing in the system or application event log to help me identify the problem.

Naturally, my first thought was that the IIS anonymous user is missing some access rights and I spent some time double-checking various permissions and privileges, but found nothing that would be relevant in this case. Suspecting that the problem lies elsewhere, I added the anonymous user to the Administrators group, which actually made things worse. Now not only CreateDC would still return NULL, but it would actually take about a minute for this call to fail!

Variable argument lists on x64

People have been reporting x64 builds of Stone Steps Webalizer crashing on Linux for about a year and even though I could see from the stack trace that the problem related to the variable argument list passed into vsnprintf, I couldn't figure out what exactly was going on because I don't have 64-bit hardware to reproduce this problem in a debugger.

The call stack always ended up in strlen called for a bad string with an invalid address, usually 0x3:

Break, break, dammit!

A couple of days ago a developer asked me why their Visual Studio 2005 debugger no longer breaks when a C++ exception is thrown, even though C++ exceptions were not suppressed in the exception configuration and the debugger was attached to an IIS worker process to debug native code.

Thinking that something might be wrong with how C++ exceptions were handled, I stuck a statement dereferencing a NULL pointer into the code:

*(char*) 0 = 0;
STL matchmaking gone bad

Some STL containers, such as std::map, are designed to use std::pair to maintain keys and values. A special convenience function, std::make_pair, is often used to create pairs without having to specify template argument types. Typical code that makes use of an STL map looks like this:

std::map<std::string, std::string> m;		// map<key,value>
m.insert(std::make_pair("1", "one"));
m.insert(std::make_pair("2", "two"));
printf("%s", m.find("1")->second.c_str());	// prints "one"
How much worse can tech support get? Apparently, a lot...

I remember the times when ISP support personnel knew the mechanics of mail transfer. It seems, however, that these times are gone forever - every time I call Bell Sympatico Support, I have to spend more and more time explaining what went wrong and most of the time end up working around problems on my end.

About a couple of weeks ago I started having problems with mail messages sent in non-Latin encodings - all non-Latin characters would be replaced with question marks. At first, I suspected Outlook Express, which hasn't been updated for a while and now is discontinued by Microsoft, but trying different mail clients indicated that the problem was with the Bell's POP3 server.

A look back and plans for 2009

I made nine releases of Stone Steps Webalizer in 2008. The most notable feature added in 2008 was XML/XSL reporting, which gives website administrators full control over generated HTML. About six thousand people downloaded various number of copies in 2008.

One of the challenges of 2008 was lack of funding - not a single donation was contributed to help the project in 2008. Hardware, some commercial software and co-location are not cheap and I hope to see more support in 2009.

Time to think about new features. Here is what I have in mind, ordered by priority. If you think something is missing, leave a comment or start a discussion thread in the forums.