What I did over the past week V

Here's the highlights of what I did over the past seven days.


  • New set of batteries in the camper, due to the old ones suffering internal damage
  • Replaced front CV axles on the RTV, changed front-end fluids, air filters, and the engine oil (again)
  • Yet more yard work -- most of the leaves in the front are now up
  • Unpacked a couple of the remaining boxes from last summer's move


  • Major xDuoo X3 clocking changes -- Dynamic CPU reclocking, audio PLL downclocked, and USB & SD ratios fixed. Higher peformance, better battery life, and more stable to boot!
  • Triaged a few more old bug tickets and patches
  • Fixed plugin path bugs affecting the Rocker, X3ii, and X20
  • Enabled variable sample rate playback on the Rocker, X3, X3ii, and X20 (was previously fixed at 44.1KHz)
  • Upgraded mikmod plugin to upstream code and improved its configurability


  • Finished reverse-engineering the S2245 library, fixed many bugs in the driver, and it all works!
  • Initial work on the S6145-5A/CS2-c "hashtag" printer
  • Got my FC7000 cutter/plotter un-buried and on the network

Sinfonia S3 / CHC-S2245 working!


It's only been a week since I got my hands on this thing, but I'm pleased to announce it's now fully usable under Linux. This includes a reverse-engineered version of the S2245's image processing library, which thankfully turned out to be far simpler than I'd first feared. Or maybe I'm just getting that much better at figuring all this stuff out?

I haven't come up with a sane way to do validate the RE library's output, as Sinfonia's official image processing library appears to only be available for Windows. That said, the ICC-corrected output looks pretty good, so there's nothing grossly wrong.

To take advantage of this support, you'll need to grab Gutenprint out of git (or a snapshot/release dated after 2020-08-05) along with selphy_print (of similar vintage) to pick up the library.

Meanwhile, the Kodak 6900 and HiTi M610 stand a pretty good chance of working too, but that will need to be indepedently confirmed.

What I did over the past week IV

One whole month, wow.

Here's the highlights of what I did over the past seven days:

  • Changed the RTV's transmission's filters and hydraulic fluid, the fuel filter, and a particularly nasty coolant flush
  • Replaced the winch wiring that got ripped out by a branch. Two years ago
  • More yard work (so...many...leaves...)
  • Mounted a second bird feeder onto the existing pole, and further escalated the anti-anti-anti-squirrel countermeasures
  • Ongoing garage cleanup and organiation
  • Discovered one of the camper's batteries popped its vent caps
  • Months-overdue OS upgrade on ShaftNet


  • Housecleaning on the forums
  • Further refinements to the revamped translation backend
  • Merged a couple of decade-old patches for early iPod models


  • Added Mitsubishi CP-M15 to Gutenprint (functionally equivalent to CP-M1 family)
  • Significant progress with the Sinfonia S3 / CHC-S2245, including recreating the new image processing library
  • Refactoring the CHC-S6145 backend to accomodate the S3 changes

What I did over the past week III

Three, three weeks in a row! Ha Ha Ha! [cue lightning and thunder]

Here's the highlights of what I did over the past seven days:

  • Bought a trailer to haul my Kubota RTV900 back and forth
  • Replaced the kitchen's above-cabinet flourescent fixtures with LED tubes
  • Wired in an electric brake controller to the truck
  • Retrieved the RTV, big[ger] generator, and my kayak from the Tick Farm
  • Changed the sludgy oil in the RTV and ordered parts for a complete filter & fluid change
  • Ran the generators and changed their oil
  • Some yard work with the Kubota
  • Lacerated my knee doing said yard work and limped my bloody self to an urgent care center to get stitches.


  • Removed support for the Archos DAPs and stuff only used by them (sh architecture, character cell screens, hardware codec support, butonbars), >
  • Fixed a memory corruption bug in the voicefile loader
  • Refactored and combined the Hibyplayer bootloaders
  • Triaged and closed more tickets
  • A few more GCC 4.9.4 fixes (All known issues resolved!)
  • Fixed more voice generation bugs
  • Major improvements to the translation & language tooling
  • Fixed a bug preventing volume settings from being saved


  • Some minor end-user support and started validating the CP-M15E

What I did over the past week II

Two weeks in a row! Go me!

Here's the highlights of what I did over the past seven days:

  • Fixed the mower starter pull cord. What a PITA that was to re-assemble..
  • Mowed the back yard for the first time since buying the house. Including several well-established patches of poison ivy.
  • Discovered that all three tire pressure gauges I own were wrong; two dangerously so.
  • Put up a new bird feeder and attempted to better squirrel-proof the pole. Fingers crossed.
  • Replaced the last of the incandescent light bulbs in the house (save for one candelabra that will be replaced)
  • Made some progress better organizing the garage (cleaned off a bench and freed up half a shelf!)


  • Old Buildgraph pages now work again (after fixing up some truly heinous SQL)
  • Various voice-related improvements to build environment and rbutil.
  • Memory size reports on the build page are now more accurate.
  • Slightly bumped increased MIPS IRQ stack size.
  • imx233 RTC issue hopefully fixed.
  • xDuoo X3 now has HID keypad support.
  • rbutil now has full support for the xDuoo X3, X3ii, X20, and AGPTek Rocker.
  • rbutil now supports mimic and espeak-ng TTS engines.
  • Triaged and closed out more flyspray and gerrit tickets.


  • Had to return three printers to their sponsor, leaving me with only 24 plugged in. The horror.

What I did over the past week (or so)

It's been said that busy folks don't keep journals. But whether or not that's true, I much prefer doing stuff to writing about doing stuff.

So I'm going to try something different. Here's the highlights of what I did over the past seven days:

  • Made an eight-hour round trip to retrieve four more boxes of discontinuned flooring, finally having enough to make the bedrooms match the rest of the house
  • Disassembled the dishwasher for the third time in as many weeks
  • Got the lawn mower running again, which entailed disassembling and cleaning the carburetor, using a cordless drill to start it owing to a chewed-through pull string. Oh, and zip ties
  • Mowed 0.4 acres of weeds and underbrush (another 0.3 to go!)
  • Tidied up the rat's nest of wires behind my desk and put most of them in conduits to keep the kitten from ruining anything else
  • OS upgrades on an embarassing number of computers
  • Discovered I have been directly exposed to someone with COVID-19. Joy.


  • Upgraded Gerrit from 2.13.x to 2.14.x and cleaned up the fallout
  • Various quality-of-life improvements and wart removals on the www site
  • Identified a fix for the longstanding problems with iFlash CF/SD adapters popular with older iPods
  • Triaged and closed several numerous tickets and patches
  • Fixed a longstanding FAT32 bug exacerbated by another recent commit
  • Fixed a large pile of TTS-related bugs, especially relating to non-English languages, and added multi-language voice generation to the daily builds

Hopefully I can sustain this type of update. Gotta keep busy, after all..

The end of an era...(really)

After three nail-biting months and in the midst of a global pandemic, my old house in Melbourne is now officially Somebody Else's Problem(tm).

...I wish its new owners all the best.

Assuming the country doesn't collapse into a road-warrior-esque distopian hellscape by this summer, the majority of the proceeds will go towards completely paying off what I still owe on the Tick Farm.

DNP QW410 & Citizen CZ-01


This is landing more than a month later than I wanted (thanks, COVID-19) but I'm happy to finally announce that Gutenprint now has full support for the DNP QW410 and Citizen CZ-01 photo printers.

These are pretty sweet little cubes, well suited for event photography and other situations where portability is more important than raw speed.

You'll need to grab gutenprint out of git, or a snapshot (or release) dated after 2020-05-01.

Mitsubishi CP-M1 and other developments

Since my last update, a lot has landed in the wonderful world of dye sublimation printing, but I have this annoying habit of preferring to write more code than talk about it as I go along. C'est la vie...

New models added, and confirmed working:

  • Citizen CX-02W
  • Mitsubishi CP-M1
  • Sony UP-DR80MD
  • Stryker SDP1000

Models that have seen notable enhancements:

  • HiTi P520L / P525L
  • Mitsubishi CP-D70/D80/K60 family
  • Mitsubishi CP-D90DW
  • Mitsubishi CP-D9800DW / CP-D9810DW
  • DNP DS820

Other noteworthy bugfixes or enhancements:

  • More robust error handling
  • Use larger of CUPS or job-specified number of copies
  • Ability to restrict printer enumeration to a specific model
  • Build system improvements
  • Print combining (see below)
  • Standardized status query, in text or JSON format (see below)
  • Preliminary support for running backend under Windows

Further notes:

  • The Mitsubshi CP-M1 family, like most other recent Mitsubishi models, requires lib70x and data tables bundled with selphy_print. It is feature complete but detailed quality tests have not been performed, and sharpening has not been tested at all.
  • The Mitsubishi CP9800 family should now be usable, with all features implemented except for image sharpening, but remains completely untested. It also requires lib70x and its data tables.

Print combining:

When a printer is loaded with a larger media size (eg 6x8") but the user wants to print a smaller size (eg 4x6"), traditionally this has resulted in the unused portion of the dye ribbon being wasted. Some models are able to rewind the media so that the unused portion can be reused. Other models can automatically combine two prints into a larger panel, print them as one, then cut the panel in half at the end. The rest can do neither.

For models that allow sufficient control over their cutter, the backend can now automatically combine multiple prints to speed up printing and reduce ribbon waste. Here is the list of models that can utilize this backend feature, at least for some print size/media combinations:

  • All DNP models
  • Shinko/Sinfonia CS2/S6145 and Ciaat Brava 21
  • Mitsubishi D70/D707/D80, Kodak 305, and Fujifilm ASK300

This feature is enabled for multi-page and/or multi-copy print jobs, but due to limitations with the CUPS printjob model, it cannot combine prints between print jobs.

Status queries

Most models supported by the backend support some sort of media and status reporting. When available, this information is reported to CUPS via its standard marker attribute messages, but that is only updated when prints are made, and is also very limited in what information that can be returned.

While each backend family driver has already supported dumping pretty much everything a given printer reports, I had never defined a standard subset of information or a model-independent way to extract it. That has now finally changed. Here's an example of the output:

$ BACKEND=dnp-ds820 BACKEND_STATS_ONLY=2 ./dyesub_backend
        "backend": "DNP DS-series / Citizen C-series",
        "version": "0.105 / 0.132",
        "timestamp": "2020-03-17 21:19:58",
        "manufacturer": "Dai Nippon Printing",
        "model": "DS820A",
        "serial": "12345678",
        "firmware": "DS820A 01.05",
        "decks": {
                "Roll": {
                        "status": "Idle",
                        "mediatype": "8x10 SD",
                        "medialevel": "OK",
                        "medialevelnow": 95,
                        "medialevelmax": 110,
                        "counters": {
                                "lifetime": 162

At this point, more models than not support this generic query method:

  • All DNP / Citizen models
  • All Hiti models
  • Kodak 605 and 7000 series
  • Kodak 6800 series
  • Mitsubishi CP-D70/D707/D80/K60, Kodak 305, and Fujifilm ASK-300
  • All Shinko/Sinfonia models
  • Mitsubishi CP-D90 and CP-M1 family (partial)

Anyway. I'll try to be more diligent in posting new developments.

Comments, feedback, and material support welcome!

The end of an era...(almost)

Fifteen and a half years after I bought my house in Melbourne, and six and a half years after I rented it out, it's finally on the market.

1401 Holland St, Melbourne, FL 32935

Getting this place ready for sale has taken part of nearly every weekend since about Halloween, and is the main reason why I haven't had the time (or money) to get up to much of anything else for even longer. Hopefully someone out there is looking for a nice turnkey home in Melbourne with no pesky HOA!