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

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 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.

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..

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.

Windows 8 Developer Preview on the Latitude XT

The Windows 8 Developer Preview made available for download by Microsoft on September 13 installs quite straightforwardly onto the Latitude XT, but does not include a driver for the XT’s integrated GPU; likewise, a driver is also not (yet?) available via Windows Update. As such, the display is noticeably slow to update and runs at a lower-than-native resolution.

As of writing, a working solution appears to be to install a “legacy” Windows Vista driver, available for download from AMD. (The linked page refers to the 32-Bit edition of Windows Vista, but the package appears to contain both 32-Bit and 64-Bit drivers; I got this to work using the 32-Bit driver on a 32-Bit installation of the Windows 8 Developer Preview.)

When loaded, the installer may not detect the integrated graphics card and so refuses to install the driver. In which case, the thing to do is start ‘Windows Explorer’, right-click ‘Computer’ and choose ‘Properties’ from the menu which appears.

In the window which opens, choose ‘Device Manager’ (on the left) and then navigate to the Display adapter, which may appear as “Microsoft Basic Display Adapter”. Right-click on the adapter and choose ‘Update Driver Software’ from the menu which appears.

In the window which opens, choose ‘Browse my computer for driver software’ and on the next page ‘Browse..’ to the folder into which the package downloaded from AMD extracted the driver. On my XT, this was C:\ATI\Support\10-02_legacy_vista32-64_dd_ccc\Packages\Drivers\Display. With the folder selected, and the ‘Include subfolders’ box ticked, click ‘Next’ and the driver should install.

With this DirectX 9 driver installed, the display updates smoothly, at native resolution, and scores reasonably well under the Windows Experience Index:

Windows 8 on Latitude XT

glDrawRangeElements and Vertex Buffer Objects

It’s not clear from the official documentation, but when drawing elements from a vertex buffer (VBO) via a bound index buffer, the sixth and final parameter to glDrawRangeElements - indices - acts as an offset into the index buffer to the index of the first element to be rendered.

Moreover, the offset is given in bytes and not numbers of elements. So if the values in the index buffer are stored as, say, unsigned short integers – GL_UNSIGNED_SHORT – then the offset to the fifth element would be:
4 * sizeof( GLushort )

Switching from Windows Live Mail to OS X Mail

Moving a couple of thousand messages, across a handful of accounts/mailboxes, from Windows Live Mail to ‘Mail’ (Mail.app) on OS X proved an unexpected journey through several other programs, more or less as follows:

  1. On Windows, import Windows Live Mail messages (stored in .eml files, in 1 message per file) into ThunderBird using the ImportExportTools extension.

    You can find the location (otherwise known as the path) of the folder in which Windows Live Mail stores messages by going to ‘Tools’ > ‘Options’, select the ‘Advanced’ tab and then click the ‘Maintenance…’ button. In the window which opens, click the ‘Store Folder…’ button. A further window will open which will state: ‘Your personal message store is located in the following folder:’ followed by the path to the folder.

    You can copy and paste this path into a Windows Explorer window to see the contents of the folder. Each account (or mailbox, if you prefer) will have its own sub-folder, whose name will begin with the name of the corresponding account. Each such mailbox will be further organised into sub-folders, one each for Inbox, Sent Items, etc.

    Inside Thunderbird, create new folders, one each for the Inbox and Sent Items of each account under Windows Live Mail. Right click on each folder and then choose: ‘Import/Export’ > ‘Import all eml files from a directory’ > ‘just from the directory’ and then browse to the corresponding directory discovered above.

  2. Open your ThunderBird profile folder and copy the ‘Local Folders’ folder (look in the ‘Mail’ sub-folder) to OS X.

    Download and install Eudora Mailbox Cleaner* and drop the folders from ThunderBird onto the icon. This will create a corresponding folder hierarchy under ~/Library/Mail/Mailboxes.

    At this point, my expectation was that Mail.app would pick up the imported messages, but refused to do so even when told to ‘Rebuild’ the mailboxes (which it did detect, but displayed as empty). Further steps were required.

  3. Download, install and run emlx to mbox Convertor. Drag the message files – the .emlx files created in the previous step – from the imported folders under ~/Library/Mail/Mailboxes onto the main window and click the “Save mbox…” button. I created one .mbox file per folder of messages.

  4. Import each .mbox file into Mail.app, usings its in-built import function: ‘File’ > ‘Import Mailboxes…’ > ‘Files in mbox format’. Each .mbox file should be imported into its own folder in Mail.app.

There are very probably other methods, involving fewer steps, which can achieve the same end, but I found that when I took skipped any of the above, Mail.app behaved erratically: at one point, it only imported one message from each folder under each account/mailbox; at another, it appeared to import all messages, but some of them displayed as blank in the reading pane; and so on.

Your mileage may vary.

*Eudora Mailbox Cleaner requires Rosetta, which you may be prompted to install if you haven’t before.

Audio on the Dell Inspiron 1545 under Windows XP

Recently, while installing Windows XP on a (new) Dell™ Inspiron™ 1545, I noticed that the most recently posted driver (as of writing: R264250) for the system’s integrated audio refuses to install. More precisely, the installer refuses to run with this “error”:

This is not the correct audio driver for this system (xp). The installer will now exit.

I was able to get the drivers to install by pointing XP’s “Add New Hardware Wizard” at the underlying driver files, but subsequently each individual sound played by the computer was preceded and succeeded by a loud popping sound which did not appear to be governed by the system’s volume setting.

The solution was to uninstall that version of the driver package, and install a previous version instead (R215959), as suggested here.

Re: Slowly, then all at once.

A second KingSpec 128GB 1.8″ 40-pin ZIF Solid State Disk only survived four weeks’ very occasional use before it, too, expired. On one otherwise unremarkable evening, I placed the XT on a sideboard and shut the lid, putting it to sleep.

A short while later, on hearing the fan running at full speed, I opened the lid only to be greeting by an unfriendly MS DOS-style error message. “System Error”, “Error reading from disk” or somesuch. Whatever it was, the computer refused to boot at the next time of asking. I was, later, able to use Windows 7′s System Recovery Options to recover some files from the stricken SSD.

Much to their credit, the drive’s vendor agreed to RMA it (again) and replace it with a RunCore Pro IV 1.8″ 5mm PATA Zif Solid State Drive SSD. Three weeks later, and it’s.. well, still working.

Slowly, then all at once.

The blurb for the KingSpec 128GB 1.8″ 40-pin ZIF Solid State Disk (MLC) claims a “write endurance” of 10 gigabytes per day for 80 years, and an “unlimited” “read endurance.” After very nearly 10 months’ reading and writing considerably less than that, mine went wallop.

It happened much as per Hemingway‘s description of how people go bankrupt: the first sign of trouble was Windows Explorer hanging while copying (reading, not writing) a file. This failed with a Device I/O error, then chkdsk reported “10 bad clusters”, and then the host PC refused to boot at the next time of asking.

Happily, the drive’s vendor agreed to RMA the drive and exchanged it for what looks like a later revision of the same model. Once installed, Windows 7 reported the following:

Windows Experience Index rating for a Dell Latitude XT and a KingSpec SSD

Which is to say, not quite the same but also not very different.


UPDATE: This second KingSpec SSD lasted just four weeks before it, too, expired.

“Windows is unable to install to the selected location. Error: 0×80300024″

Encountered this while trying to install Windows – Windows 7 – onto a newly-acquired second drive. Looking on-line, it’s not clear whether Windows simply needs to install onto the first hard drive (Disk 0, or SATA 0) or just needs to be able to add a ‘System Reserved’ partition to Disk 0, or both. Or something else altogether.

In any case, I had files on Disk 0 which needed preserving so for me the solution was simply to swap the SATA cables connecting the drives to the motherboard. Thus, Disk 1 became Disk 0 (and vice-versa) and Windows installed without either further comment, or – apparently – creating a ‘System Reserved’ partition on either disk.

Next Page »


My Photos on Flickr

Kawagoe

Powell and Hyde

Golden Gate Bridge

Tokyo Metropolis Sightseeing Ship

En Route to Tokyo Tower

Sensō-ji

Tokyo Big Sight

Snow @ The Falcon

Verrès

Ikebukuro

More Photos

Follow

Get every new post delivered to your Inbox.