Waveson WindowShade

Waveson WindowShadeOver at Waveson, I’ve put up the first version of Waveson WindowShade.

Waveson WindowShade is a utility for Windows which draws an unobtrusive, translucent shade over the desktop and windows other than the one with which the user is interacting, helping him or her focus on the video they’re watching, the document they’re editing, etc.

Z- or depth-related artefacts in GLSL shaders on iPhone 6/6 Plus

Multiplying Matrices with AVX. For Fun*

(Cross-posted from GitHub)

Having previously tinkered only very briefly, in assembly, I was keen to try my hand at more.

I do best with a practical, defined problem to solve; having used more or less the same unrolled-loop implementation of a 4×4 matrix multiplication I wrote in university, it seemed a good candidate for a 21st Century update, using Advanced Vector Extensions (AVX) which first shipped with Sandy Bridge processors in 2011. Non-trivial, but tractable.

*Performance was never a motivation of this side project – the problem is too small – but there wouldn’t be much point if the output were slower. And it isn’t: on my (Ivy Bridge) Macbook Pro, it executes in half as many cycles as my previous unrolled-loop implementation and in slightly more than two-thirds as many cycles on a Haswell Ultrabook.

But not faster than XMMatrixMultiply.

Using Intel’s Secure Key (RDRAND) in MS Visual C++ 2010

UPDATE (29/05/2016): added a function to use RDRAND to generate a random value within a specified range, and refactored the logic into a static library and wrapped it with a dynamic library for use with P/Invoke.

Among the features added to Intel’s 3rd-Generation Core i* processors is a Digital Random Number Generator (DRNG) backed by an on-die hardware entropy source. This new hardware feature is made available to software via the also-new RDRAND instruction.

If you’re still using the compiler which shipped with Visual C++ 2010, it seems the only way to leverage the DRNG is either via a third-party library (the one available from Intel’s website is, as of writing, broken) or by dipping into assembly programming. Of these the latter comes with a couple of catches: the mnenomic/intrinsic for the instruction is not available for older assemblers/compilers, and the assembly is slightly different for 32- and 64-bit environments.

The sample project illustrates testing whether the host processor supports the RDRAND instruction as well as invoking it (via assembly). When built for 32-bit CPUs, the assembly is inlined; when built for 64-bit CPUs, the assembly is linked in via an exernal module (the 64-bit compiler in Visual Studio 2010 does not support inline assembly).

For the most part, the project simply follows the Software Implementation Guide from Intel. Additionally, it demonstrates invoking the instruction via its opcode, and linking a module implemented in assembly into a VC++ project.

Installing Windows 7 under Boot Camp 4.0 (OS X Lion)

This is odd. But true.

This week, I upgraded the hard disk that shipped in a mid-2010 13″ MacBook Pro (MacBookPro7,1) to a larger capacity disk which necessitated clean installs of OS X and Windows. But the Windows 7 installer (quietly) hung at the last step in the installation process. “Completing installation…”, indeed.

Looking on-line, I came across posts from several other other people who were having the same problem, but just the one, improbable-looking, solution.

Improbable as it may have appeared, after following each step, exactly as described, Windows 7 Professional (32-bit edition) installed without complaint..

All Hail the Mighty PNGCRUSH

Among other things, I develop games for Flashbang Science. Earlier this week, I posted an update to our first game, Tubes.


Tubes is Flash-based (written using the Flex SDK), but from very early on we wanted it to appear to integrate seamlessly with the web page in which it is embedded. This was fairly straightforwardly accomplished via CSS positioning and cutting the graphics to match.

But there was a problem under Safari for Windows, as well as both Safari and Google Chrome for OS X: the browser appeared to render the PNG (Portable Network Graphics) images on the page with less contrast than Flash rendered its graphics (which were cut from the same source, using the same tools, etc.), subtly but unmistakeably breaking the illusion of seamlessness.

After much searching, the solution was to use pngcrush to remove the gamma information, embedded ICC profile, and other ancillary colour information from the PNG images which surrounded the game on the page, as follows:

pngcrush -rem cHRM -rem gAMA -rem iCCP -rem sRGB input.png output.png

The above may seem self-evident to designers and others who spend a lot of time working with images on the Web, but this is the post for which I was looking when I searched for safari webkit flash colour difference.

The Bouncy Castle Provider

Recently I was using a Java applet which generated a digital certificate for storage on the local file system, but which was failing, silently, at the last step.

Switching the browser’s security settings down to the lowest (i.e. least secure) level and, subsequently, starting the browser as an Administrator made no difference.

Bringing up the Java Console, I found a stack trace of exceptions with the following root:
java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider

This indicated that the applet depended on one or more third-party libraries which had not been deployed with the applet. The solution, here, was to download the current implementation of the Bouncy Castle Cryptography library.

I copied the four .jar files (you don’t need to download the ‘Test Classes’) into the Optional Package directory of my Java installation.

(On Windows, Java is typically installed into the Java folder/directory under Program Files, or, if you are using 32-bit Java on 64-bit Windows, in the Java folder/directory under ‘Program Files (x86)’.)

After restarting the browser again, the applet functioned as desired.

%d bloggers like this: