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!

New Year's Sunrise, 2020


Taken at the Guana Tolomato Matanzas National Estuarine Research Reserve, just north of St. Augustine, Florida.

2019 saw a lot of turmoil and upheaval. Here's to 2020 being a calmer year!

Is it supposed to look like that?

It's been a while since I've posted anything about the Tick Farm. The simple explanation is that very little work has been accomplished over the past two years, due to a lack of time and money.

I hope that will change just after the new year, when I finish getting my now-tenant-free Melbourne house fixed up and put on the market, freeing up a pile of capital and greatly improving my cash flow. My agent tells me it should sell pretty quickly.

In the mean time, last weekend I popped up there for the first time in three months, and encountered this:


The service line was completely tangled up in the downed tree, but thankfully the damage was isolated to the formerly-attached-to-the-pole conduit, which needed to be completely replaced.

The local power cooperative came out to kill the power so I could effect repairs, and two days, $30 worth of supplies, a great deal of cursing (punctuated by a severe bout of no-running-water assplosions) later, the county inspector signed off, SVEC hooked me back up, and the Tick Farm was returned to its half-completed, neglected glory.

The Melbourne house was intended to be on the market a month ago, but thanks to the time of year, it's been impossible to schedule painters, which is just as well as I've needed the time to effect a pile of necessary repairs. With luck, I'll complete all but one of them this weekend. The three hour drive each way is getting quite old though...

Hedging one's bets


There is a scene in The Mummy where Beni, confronted with the titular Mummy, cycles through prayers of multiple religions in an attempt to find the one that will work.

This sight, next to a porcelain throne at work, reminded me of that scene.

(Or maybe this post should be called Teach the Controversy?)

Toilet Paper Orientation - Wikipedia