Blog

Brain dump, April 2022

Recovered data for a client from a Sony AIT3 tape (model SDX3-100C, 30GB). This was done using a Sony SDX 700C SCSI drive, under Linux using the usual mt and dd commands, although I had to specify a 64KB block size (dd -bs 64k) to read it correctly. The annoying thing was the format of the backup, which took a little time to reverse-engineer, but probably came from an old version of Retrofit, from a Mac workstation. This is now integrated into my swiss-army-knife backup decoding repository.


Another client needed to convert an obscure video codec into a modern format. The codec turned out to be Media 100, which is still in existence (?) but is completely unsupported in modern video players, including ffmpeg and mplayer. Fortunately the Media 100 software itself is still downloadable and can be installed on older versions of macOS. Once installed it’s possible to create a blank project and import the video clips into it, and then export them as a more common format. It also looks like QuickTime version 7 (still available for download and installable on older macOSes) can play Media 100 videos.


I received a couple of Iomega Ditto tape drives from a generous donor (a “2GB” drive and an “Easy 800” drive). Unfortunately both of these drives were suffering from the “melting rubber wheel” issue, which is when the rubber roller which drives the tape turns to sticky goo. When using this type of drive for the first time, make sure to inspect the rubber wheel and verify that it’s nice and firm. If touching the wheel makes an indentation, or if the rubber comes off on your finger, replace it and do not try reading any tapes with it!

The solution that worked for me to resolve this issue was PlastiDip, which I learned about from this webpage and this video. First make sure to remove any of the old rubber, and then perform successive “dips” of the capstan, which will accumulate more and more layers of rubber, until it matches the desired thickness.

When the drives were fixed, I was able to use them successfully to read some Ditto 2GB tapes, as well as some older QIC-80 tapes, using the Ditto Tools software (which looks like just a rebranded Colorado Backup) running in Windows 98, on an old ThinkPad laptop, communicating with the tape drive over the parallel port.


Finally moved away from using Dropbox entirely, and switched to using Syncthing. The breaking point was when Dropbox started to litter my removable USB drives with configuration files, because apparently that’s the only way for Dropbox to know that I don’t want my removable drives backed up.

Of course the drawback is that Syncthing doesn’t back up to the cloud; it only syncs across one or more devices that I own, which are currently online. For now, though, this will probably work just fine, since I usually have at least two devices powered on at any given time, including my desktop workstation, my laptop, and my phone.

A retro laptop like no other

A while ago a came across an old Compaq LTE 286 laptop. When they were first released around 1989, these PCs were somewhat groundbreaking because they were the first to be compact enough to resemble the “notebook” form factor that we take for granted today. Unfortunately this particular unit was pretty much beyond repair, and my attempts to restore it to a functional state were fruitless.

However, I realized that I could do the next best thing: remove the guts of the laptop and replace it with a Raspberry Pi! Who needs a “modern” Raspberry Pi-powered computer, when we can put one in a 30-year-old case? That’s right, if we look inside, that’s no ordinary Compaq LTE:

Let’s walk through all the components we see in the above image:

  1. The original display of the Compaq LTE was 9 inches in size diagonally, and had an unusual aspect ratio of 2:1. The closest modern replacement I could find is a 9-inch TFT display, ordered from AliExpress for $30, which has an aspect ratio of 16:9. This means I had to cut away some of the plastic to accommodate the extra vertical real estate of the new screen, but I don’t think this impacts the aesthetic too much.
  2. My main goal was to use the original keyboard from the old laptop with the new Raspberry Pi internals. But the original keyboard simply has a proprietary FPC ribbon cable (flexible printed circuit) that goes directly to the old motherboard. How can we possibly use this with a modern setup? Never fear: there’s a clever solution devised by Frank Adams that uses a microcontroller with a bunch of GPIO pins to translate any arbitrary ribbon-cable keyboard into a USB keyboard! The bundle of wires that you see here is an adapter I fashioned that breaks out the ribbon cable into wires that can be soldered onto the microcontroller.
  3. This is a Teensy LC microcontroller ($12) that takes the raw keyboard switch inputs and translates them into a USB keyboard device, usable by any modern computer. The microcontroller simply listens for high/low state changes on a predetermined matrix of GPIO inputs that corresponds to character codes on the original Compaq LTE keyboard. Not my finest soldering job, but it works perfectly well.
  4. HDMI driver board that came with the TFT display. This is using a 50-pin extension cable that is long enough to go all the way up to the display itself. The driver board is not thin enough to fit in the plastic enclosure of the display. The board is drawing power from the 5V pin on the Raspberry Pi.
  5. Panel-mount USB extension cable for powering the Raspberry Pi. It’s mounted in the location where the old serial port used to be.
  6. The Raspberry Pi (model 3B) itself, secured to the bottom of the plastic case using Velcro™. The microSD card is actually accessible (using tweezers!) through the floppy drive cover of the original case.

I also just added one other thing: a panel-mounted USB and audio port combo, which pass right through to the Raspberry Pi:

The whole thing works amazingly well as a retro gaming laptop! My happy place is playing old DOS games using the venerable DOSBox emulator, but the state of retro emulation for Raspberry Pi is much broader than that, and this beauty can handle all of it.

Notice the faint red glow of the power LED shining through the floppy drive cover.

And of course it also works as a general-purpose Linux PC, with WiFi, Bluetooth, and everything else you’d expect:

Someday, if I’m feeling particularly masochistic, I’ll see if I can let this be my daily driver for a while! But for now, just a few more minutes of Commander Keen: Goodbye Galaxy!

Brain dump, January 2022

There’s a HAM radio enthusiast living in Belarus (and previously Russia) who designed a telegraph keyer and named it after my grandfather, Lev Naumovich Pekler (Лев Наумович Пеклер), after meeting him briefly at the polar research base (Остров Голомянный) where he was stationed. Unfortunately this model is no longer in production, and has been superseded by newer designs, available from his website.


Our cat Bissel was featured as part of the “best cat breeds for apartment living” in The Spruce Pets.


Played around with the Lichee Pi Zero and the Lichee Nano boards, which are nifty and powerful little things. Here are links for getting started with the Zero, as well as SD card images for booting it. And here the documentation for the Nano, and how to get embedded Linux working on it. I simply developed a few random scripts that drew patterns on the framebuffer (i.e. a TFT screen attached to it). Quick tip: to disable the blinking cursor when drawing to the framebuffer:

echo 0 > /sys/class/graphics/fbcon/cursor_blink

Software update round-up

It’s high time to give some love to a few of my older and less-maintained software projects, and bring them up to date with a few much-needed and requested features!

DiskImager

DiskImager is a tool that I’ve used “internally” for a few years now to read and write raw disk images. I’ve simply never found the time to polish it up and make it production-ready, until now. This is a small standalone tool that will dump the contents of any drive connected to your PC to a file on another (larger) drive. It can also write a disk image file to a physical disk. Furthermore, when selecting a disk image to write to a physical disk, you can choose from several types of image formats (besides raw images) including VDI, VMDK, VHD, and E01.

FileSystemAnalyzer

The FileSystemAnalyzer tool has gotten a huge number of bug fixes, as well as these enhancements:

  • Improved compatibility with FAT, exFAT, NTFS, ext4, and UDF filesystems in various states of corruption.
  • Improved previews and metadata for more file types.
  • The main file tree view now has columns with file size and date, similar to Windows Explorer. These columns are clickable to sort the file list by ascending or descending order of the column type.
  • Directories can now be saved from the file tree view (recursively), in addition to individual files.

Outlook PST viewer

The PST viewer tool has been updated to be more compatible with a wider range of PST files from different versions of Outlook, and to be more forgiving of corrupted PST files. There is also a new option to save individual messages as .MSG files.

In praise of Windows Forms

Many of my personal projects such as DiskDigger, DiskImager, and so on are written using Windows Forms, on top of the Microsoft .NET framework. This is because these projects of mine were originally created many years ago during the heyday of Windows Forms, and I made somewhat of a gamble that WinForms would be a sustainable choice in the long term.

Fast forward to today, and it seems like mentioning Windows Forms in polite company evokes a chuckle or two. WinForms is now considered by many to be a quaint relic of a bygone era, which has been largely superseded by new and superior frameworks.

That being said, my old personal projects are still used by a good number of people, and even though I’ve added plenty of new features over the years, I haven’t changed a thing about the fact that they still use WinForms. And even when I need to create a new GUI app for some random purpose today, I find myself reaching for a blank WinForms project.

So why do I still use WinForms in my personal projects, and why have I not abandoned it in favor of something newer like UWP, or something more cross-platform like Qt?

Because it bloody works. You might have noticed that support for Windows Forms in the most recent versions of .NET is as robust as ever, and in no danger of being dropped. This is because WinForms is an extremely solid foundation for building GUI apps. All of the components are intuitive, make sense, and feel native to the platform, because they are. If you don’t need any of the fanciness provided by XAML such as animating components at every opportunity, rotating buttons by 12 degrees, or making your app run on Xbox One, then WinForms is for you!

Because it’s an absolute pleasure to use. Creating a new Windows Forms project in Visual Studio takes four clicks at the most, and you’re up and running. Designing your app’s window is as simple as dragging and dropping components from a toolbox and adjusting their properties to your liking. Creating an event handler for a component is as simple as double-clicking it. There’s virtually no boilerplate code to worry about — just focus on the code that responds to a button click, ListView selection, etc.

Because it’s compatible and lean. Compatible in the sense of running across various versions of Windows, that is. If you target the right version of the .NET framework, your WinForms app will run perfectly well on Windows XP as well as the latest build of Windows 11. As for leanness, a “hello world” graphical app is on the order of a few kilobytes, and even a hugely complex app would be hard-pressed to exceed a few megabytes of bytecode.

Compatibility (or lack thereof) with other operating systems is, of course, the major unfortunate drawback. This is where my original gamble from years ago didn’t pay off as much.  Since .NET was touted as a “cross-platform” framework, I thought naively that components like WinForms would eventually be ported over to Linux and macOS in an official way by Microsoft. This never happened, and the only real “porting” was done by the excellent Mono project, whose port of WinForms is great but not perfect, and really only works in Linux and not macOS.

Nevertheless, despite the blemish of the lack of actual cross-platform support, WinForms remains a truly solid choice for desktop GUI development on Windows. Don’t be surprised if we keep seeing WinForms used by hobbyists and enterprises well into the future, and don’t hesitate to give WinForms a second look yourself. It might not be the shiniest new thing, but it has persisted this long for a reason.