Telemetry data for Windows 8

The Building Windows 8 blog has plenty of interesting posts on how Windows 8 will look and behave. Many of them also detail why particular design choices were made.

I have noticed an interesting trend in those explanations. They usually explain how user behaviour changed from the beginnings of Windows until Windows 7 and use that as the basis for upcoming changes in Windows 8. E.g. it has been noted that the taskbar has become the primary program launcher in Windows 7 as opposed to the Start Menu in earlier times – the Start Menu instead was only used for rarely-used programs.

The problem I see there is that (depending on who you ask) between 25 and 45 % of Windows users are still on Windows XP. If many major design changes in Windows 8 are done in response to how user behaviour has changed with Windows 7 they probably provide upgrading Windows 7 users with a natural progression. But many people skip one or two Windows versions (Windows XP usage dropped only slightly with Vista but dramatically with Windows 7) and Windows XP is close to its end of life. So it is natural to assume that many XP users will switch to Windows 8 once it hits the market. But while some changes may be gradual when going from XP to 7 to 8 they might be much more abrupt when going directly from XP to 8, skipping Windows 7 which introduced users to some concepts that are expanded and built upon in Windows 8.

I wonder whether they take that into account when designing the new OS.

Sorting images

On some occasions I tend to make way too many photos of the same subject. Sorting through dozens of nearly identical photos is often hard and seeing that wall of images in Lightroom usually doesn't help in determining which is the best one. Some people have similar problems, as the following question from the Photo Stack Exchange: How do you select the 10 best images from a set of 300?

Since some people in the question comments repeatedly told me it was rather trivial1, I actually did it: An application that sorts the images in the current directory by leaving the actual head-to-head comparison to the user.

Written in C# for .NET 2. Works on Mono (tested on Linux so far), too. Requires dcraw on the PATH (compiled executable for Windows or OS X can be downloaded here).

Currently the user interaction is very rudimentary. This is probably subject to change. Also the code is an evil mess as usual with such a hack-job.

The application has to be started in a directory that contains the images to sort. It then proceeds to load all images it can find and handle (JPEG, GIF, PNG, BMP are supported natively, all other formats are either supported by dcraw or skipped if not). Keep the number of images reasonable, as every image is preloaded in memory to speed up display – I tried starting it on a folder with around 600 images and terminated it at around 2 GiB memory usage.

After that you get a two-pane view with an image on the left and on the right. Click on the one that you consider the best of the two. You will then get two new images. Continue until done. You can close the program if you want, it will resume where you left off.

Comparison view

After all necessary comparisons have been done2 the result can be seen:

Result view

It has the sorted list of images on the left with the highest-ranked at the top and the lowest-ranked at the bottom.

Todo list:

  • Allow selecting the images to sort.
  • Solve the issue that portrait pictures are always displayed in landscape orientation (at least for raw images. dcraw allows rotation but cannot do so automatically and I don't see an easy way of finding that out externally).
  • Reduce memory usage for large numbers of images.
  • Shuffle the images beforehand so bursts of nearly identical images are less likely to be compared directly against each other.
  • Change synchronization between the sorting thread and the UI to no longer rely on Thread.Sleep and polling but to use proper synchronization methods.
  • Add a 1:1 preview (or at least a larger one). Currently this cannot be used to judge things on the pixel level.

Source code can be found in my SVN repository and is released under the MIT license. I welcome patches ;-)

Images in above screenshots are my own.


1 Of course it wasn't as trivial as others would want to make me believe. After a long struggle with Libraw, I simply went the dcraw route. Not pretty, but works with minimal amount of code.

2 This is in the order of n log2 n where n is the number of pictures compared – so, for 20 pictures you can expect something around 20 × 4.3 ≈ 85 comparisons – I know, it's not a small number. For the 300 images you mentioned you'd get around 2400. The actual number that has to be performed manually is (a) different (since complexities omit the linear factor) and (b) as far as I observed so far, smaller. To avoid inconsistencies the user will never be prompted twice on the same two images (either order) and never prompted with the same image on both sides.

Bug reporting

I stumbled over a (for me) quite serious bug in an application I use. Nothing security-related (I have no clue of that), but it impacts the usefulness of the program for certain cases. After looking around how to report bugs I find that there is no bug tracker; they use a forum to track that. Ok, their choice, I don't have to manage that. But registering does not automatically enable me to post anything and I am still waiting for approval (since 2010–11–10 12:10).

I think for developers of products it should be in their best interest to make bug reporting easy. After all, if a user is nice enough to report something that does not work they should be thankful and not put them on a waiting line that might take days to clear. At least for me my incentive of investing time into writing a good bug report goes down if I have to wait longer than necessary before actually being able to report anything.

Batch badge

Yay. Now that Stack Overflow has bronze badges for tags I got a whole bunch of them (they are awarded for 100 upvotes in a specific tag). But by that I rose into a quite exclusive circle: The only person with a batch-file badge:

Batch-file badge on Stack Overflow

Specializing in obscure languages pays off after all. Then I'm one of only two persons with a batch badge:

Batch badge on Stack Overflow

And PowerShell doesn't look too bad either:

PowerShell badge on Stack Overflow

That's me among a bunch of PowerShell MVPs :-)

Good bye, cmd

It's been a few years by now I am writing batch files every now and then, some for trivial tasks, some for things other people would just declare me insane for doing it with batch files. Anyway, cmd has become boring by now. I now want to concentrate on another target for writing batch files, one that's still very much alive, at least on 32-bit systems: command.com.

In a way, cmd was too powerful. It's more fun the more limited you are so I'll gradually rewrite all batch files on this site to run in command.com instead. That also allows them to run on all non-NT versions of Windows as well as DOS. I consider that to be quite an improvement over the limited platform availability of cmd.

Online communities

I am part of some online „communities“ but then again, I'm not—somehow. It's funny as I regularly contribute to some of them, namely Wikimedia Commons, Wikipedia, Rosetta Code and Stack Overflow (and its relatives). Now currently there are elections for new moderators on Stack Overflow and I (as most users) was asked to vote:

Stack Overflow moderator election information bar

But I honestly can't vote there.

The problem is that Stack Overflow is largely content-based. Whatever there may be in community is mostly driven by content and not by the users. Which means that I could judge the candidates by the content they contribute which is easy enough but doesn't tell me anything about their qualifications as a moderator. Equally unsuitable are the moderator nominations, mostly done by the candidates themselves and their user profiles; they simply aren't an accurate picture of how well they would do their job.

Stack Overflow goes great lengths in pushing the actual users into the background, emphasizing the questions and answers. There is a little incentive to continue contributing, namely reputation and badges; I'm playing that game too. But overall it doesn't really matter for Stack Overflow to keep specific persons there—as long as the contributions are still there and of high quality, no one can complain. But ultimately you don't really know about those people. You know about their technical knowledge and how they write or how willing they are to provide outstanding answers. But about how well they would perform as moderators? Nothing. While sometimes discussions arise in the comments on a question or answer they are mostly very short-lived, just as the questions/answers themselves (most questions, even those with stellar answers vanish after at most a few hours and no-one reads them anymore). What's more: comments are de-emphasized on purpose: smaller font size, gray text, hidden by default (except for the top-rated comments). As a discussion medium, where I could actually see how people approach problems, how they deal with it and ultimately solve it, this is a complete fail; again, on purpose.

Stack Overflow isn't alone in this regard; I just picked it out since it's the one example I'm most familiar with at the moment. The problem is similar for me at Wikipedia where the means of communication are comparably arcane and inefficient. Mostly you're communicating with a large blob of vaguely human form which could be anyone. And most of the time you don't talk to the same persons regularly. To me it is surprising that (at least for the German Wikipedia) many people participating in discussions, polls, &c. seem to know each other and are actually talking there. Maybe I'm the ugly kid who stands besides all this or maybe I just didn't see a suitable way of getting to know the people behind the content.

Ultimately, there are probably persons who could judge how well someone is suited as a moderator: Those that have access to logs that detail what moderator-like activities a person has done. For Stack Overflow this would include things like close-votes on questions, flagging questions and answers for moderator attention—that's the technical side. Then there's the human side which necessarily includes discussions (such as what makes a question programming-related). But discussions are, as noted, very much de-emphasized in contrast to questions and answers (which tell me only about technical problems someone faced and was able to solve).

For the normal user there is simply no easy way of looking at the things that would matter in this regard and help in a decision. As for the candidates: I've never had anything to do with the vast majority of them, except for two.

Well, back to my original point, I find it a little weird that such sites ask their members about positions that need certain qualifications, who—by definition and purpose of the site—don't know each other well enough to make an informed decision on that. I see it as a kind of pseudo-democracy where the site owners/adminis­trators give the „community“ something to decide. But in the end I doubt the final decision will be made with regard to the actual qualifications of the elected person. The votes itself are probably rather random for most people participating in the election or maybe guided by prior advertising on behalf of the candidates. I don't remember the original nominations of the candidates anymore but what I read of them didn't strike me as convincing. Heck, not knowing those people I couldn't even decide whether their application/no­mination was meant seriously or is just full of senseless talk.

I think such sites should either make actual communication (read: social behavior of people) part of their purpose (not that I see this necessarily as a good thing—I'm part of no social network for a reason) or stop trying to pretend they have a community. In fact, they haven't, in my opinion; they have content, they have people that contribute it; but they have no community.

Random Word Tip: The Format Painter doesn't have to vanish after one use

I needed the format painter pretty often in the last few days. It's quite a handy tool sometimes, though with one caveat: The mode created by selecting the format painter ends after one use. So usually you can only paint the formatting onto a single destination before having to re-enable the tool. That's not very nice when having multiple places to apply the formatting.

However, you can simply double-click the button in the Ribbon which leaves the mode activated until Esc is pressed. Found this by accident but it is handy.

And, noticing now, it's even mentioned in the documentation. But who reads that? :-)

WPK PowerShell network checker

Currently at the 26C3 and the network is pretty flaky here. At least on the first day. Out of necessity a friend implemented a simple network connectivity checker as a Windows Sidebar gadget. I started playing around a bit with WPK and decided to do the same in PowerShell with a nice WPK interface.

After a long learning process and much trial and error the following came out:

Import-Module WPK

New-Window -AllowsTransparency -WindowStyle None -Background Transparent -SizeToContent WidthAndHeight -Topmost -BitmapEffect { New-DropShadowBit­mapEffect -Opacity .5 } {
    New-StackPanel -Orientation Horizontal {
        New-Border -Width 40 -Margin ‚5,5,0,10‘ -Child {
            New-StackPanel {
                New-TextBlock ‚4‘ -FontSize 24 -Foreground White -HorizontalAlig­nment Center
                New-TextBlock -On_Loaded { Set-Variable tb4 $this } -Foreground ‚#80ffffff‘ -HorizontalAlig­nment Center
            } -On_Loaded { Set-Variable c4 $this }
        } -CornerRadius ‚20,0,0,0‘ -BorderThickness ‚2,2,0,2‘ -BorderBrush Black -On_Loaded { Set-Variable -Name v4 -Value $this }
        New-Border -Width 40 -Margin ‚0,5,10,10‘ -Child {
            New-StackPanel {
                New-TextBlock ‚6‘ -FontSize 24 -Foreground White -HorizontalAlig­nment Center
                New-TextBlock -On_Loaded { Set-Variable tb6 $this } -Foreground ‚#80ffffff‘ -HorizontalAlig­nment Center
            } -On_Loaded { Set-Variable c6 $this }
        } -CornerRadius ‚0,20,0,0‘ -BorderThickness ‚0,2,2,2‘ -BorderBrush Black -On_Loaded { Set-Variable -Name v6 -Value $this }
    }
} -On_Loaded {
    $block = {
        $net4 = 1
        try { $x = @(Test-Connection google.com -Count 1) } catch { $net4 = 0 }
        if ($x.Count -eq 0) { $net4 = 0 }
       
        $net6 = 1
        try { $x = @(Test-Connection ipv6.google.com -Count 1) } catch { $net6 = 0 }
        if ($x.Count -eq 0) { $net6 = 0 }
       
        switch ($net4) {
            1 {
                $v4.Background = ‚Green‘
                $tb4.Text = $x[0].Response­Time
                $tb4 | Move-Control -fadeIn -duration ([TimeSpan]::From­MilliSeconds(500))
            }
            0 { $v4.Background = ‚Red‘
                $tb4 | Move-Control -fadeOut -duration ([TimeSpan]::From­MilliSeconds(500))
            }
            2 { $v4.Background = ‚Gold‘ }
        }
        switch ($net6) {
            1 { $v6.Background = ‚Green‘
                $tb6.Text = $x[0].Response­Time
                $tb6 | Move-Control -fadeIn -duration ([TimeSpan]::From­MilliSeconds(500))
            }
            0 { $v6.Background = ‚Red‘
                $tb6 | Move-Control -fadeOut -duration ([TimeSpan]::From­MilliSeconds(500))
            }
            2 { $v6.Background = ‚Gold‘ }
        }
    }
    Register-PowerShellCommand -ScriptBlock $block -Run -In ‚0:0:1‘
} -On_MouseRightBut­tonUp {
    $Window.Close()
} -On_MouseLeftBut­tonDown {
    $window.DragMo­ve()
} -AsJob

To use it you have to install the PowerShellPack which includes WPK, the WPF PowerShell Toolkit.

The window looks as follows:

Network Checker

The two halves „4“ and „6“ correspond to IPv4 and IPv6 connectivity, respectively. The program tries pinging google.com and ipv6.google.com. If a half turns red this means that the ping failed. Below the IP version number is the last response time.

Programs, as seen by users

I recently came across the following image:

Programs, as seen by users

And I thought it greatly sums up the usual problem. Both users and developers think at vastly different levels of abstraction. To the developer the UI is „just another shell“ around the core and most erratic behavior of the UI can easily be explained by the inner workings of another component in the program. To the user, however, the UI is the program. And she just doesn't bother with understanding anything else. For all intents and purposes it's really magic.

Now, above image is a bit small, unfortunately and I didn't find an original creator or a higher-resolution version, so I created a vector version of the image which is attached to this post. Actually, I made two vector versions, one white on black and one black on white, the latter of which should use up substantially less toner when printed:

Programs, as seen by users – white on black Programs, as seen by users – black on white

The font used on the high-res PDFs versions is the free (and pretty) Fontin font.

I attached the Expression Design files as well, if someone wants the „source“ files. The Design and PDF files are released into the public domain by me.

What NetHack monster am I?

Cute:
.......
...h...
/......
If I were a NetHack monster, I would be a dwarf. I enjoy using expensive, high-quality equipment, and I'm not afraid to work hard to get it.
(If I weren't a dwarf, I'd be a tengu.)
But I think that doesn't quite fit.
Syndicate content