Web Excursions 2021-08-01

Lunar’s author on how to adjust brightness on external monitors on M1 Macs; whether is the name Wuxi has anything to do with tin; Inter’s author on the making of the open-sourced font.


The journey to controlling external monitors on M1 Macs

  • [Background]

    • Lunar is an app that can adjust the real brightness, contrast and volume of monitors by sending DDC commands through the Mac GPU.

    • Lunar used DDC and I²C, which worked well on Intel Macs.

    • M1 Macs came with a different kernel, very similar to the iOS one.

      • The previous APIs weren’t working anymore on the M1 GPU, the IOFramebuffer was now an IOMobileFramebuffer and the IOI2C* functions weren’t doing anything.

  • Workarounds

    • With Gamma Tables

      • Inspired by QuickShade,

        • simulates a lower brightness by darkening the image using a fullscreen click-through black window that changes its opacity based on the brightness slider.

        • But The LED backlight of the monitor and the brightness value in its OSD stay the same.

      • macOS has a very simple way to control the Gamma parameters

      • the gamma changes become visible only on the next redraw of the screen

        • Lunar blinks a yellow dot when a gamma transition happens, to force screen redraw

    • With Network control (nee the “why do I have to do this” method)

      • Connect the Pi to a separate HDMI port of your monitor

      • and Lunar relaying the DDC commands through a custom server running on the Pi.

  • Pricing

    • [The author quitted his day job as a remote contractor to work full-time on Lunar.]

    • [The author decided to use Paddle as the payment processor] for its native macOS SDK and reseller status (deals with taxes on the dev's behalf)

    • [The author adopted] the system that Sketch has: a one-time payment for an unlimited license, that also includes 1 year of free updates.

  • Technical Questions

    • How is an app able to change the hardware brightness of a monitor?

      • All monitors have a microprocessor inside

        • that has the purpose of receiving video data over multiple types of connections,

        • and creating images from that data through the incredibly tiny crystals of the panel.

      • That same microprocessor dims or brightens a panel of LEDs behind that panel of crystals

        • based on the Brightness value

        • that you can change in the monitor settings using its physical buttons.

      • Because the devices that connect to the monitor need to know stuff about its capabilities (e.g. resolution, color profile etc),

        • there needs to be a language known by both the computer and the monitor so that they can communicate.

        • That language is called a communication protocol.

        • The protocol implemented inside the processors of most monitors is called Display Data Channel or DDC for short.

      • To allow for different monitor properties to be read or changed from the host device, VESA created the Monitor Control Command Set (or MCCS for short) which works over DDC.

        • MCCS is what allows Lunar and other apps to change the monitor brightness, contrast, volume, input etc.

  • what is I²C?

    • I²C is a Wire protocol, which basically specifies how to translate electrical pulses sent over two wires into bits of information.

    • DDC specifies which sequences of bits are valid, while I²C specifies how a device like the monitor microprocessor can get those bits through wires inside the HDMI, DisplayPort, USB-C etc. cables.

  • Why does macOS block me from changing volume on the monitor, while Windows allows that?

    • macOS doesn’t block volume, it simply doesn’t implement any way for you to change the volume of a monitor.

    • Windows actually only changes the software volume,

      • so if your monitor real volume is at 50%, windows can only lower that in software so you’ll hear anything between 0% and 50%.

      • If you check the monitor OSD, you’ll see that the volume value of the monitor always stays at 50%.

    • Now macOS could probably do that as well, so that at least we’d have a way to lower the volume. But it doesn’t.

    • So if you want to change the real volume of the monitor on Mac, Lunar can do that.


Prefixes "yǒu" ("to have") and "wú" ("to not have") in Old Sinitic

  • [There're] Old stories that Wuxi once had tin deposits and was called Yǒuxī 有錫 ("has tin"), but later changed its name to Wúxī 無錫 ("has no tin") when the deposits were worked out

    • I believe they are far-fetched, apocryphal, and based on folk etymologies.

  • Many modern Chinese scholars favor the view that the word is derived from

    • the "old Yue language"

    • or, supposedly, the old Kra–Dai languages,

    • rather than reflecting the presence of tin in the area.

  • The role of substrate languages in the formation of Sinitic and its constituent languages and topolects is woefully understudied.


The story behind Inter with Rasmus Andersson (The Changelog #449) |> Changelog

  • A lot of the glyphs were back-filled by Roboto

    • So the product is still dual license; there’s a license in the source code there for Roboto.

    • if you open the font in a font editor and you look at the very end of the font order you can find some really fringe glyphs that is going to look out of style

  • Font programming [involves heavy uses of components as other programming]

    • creating an umlaut, or a character that has some small variations is just a pointer to [a basic character], and a list of transformations to apply.

  • The experience with Inter - and some of the other hobby fonts that I have done on the side - have been in the delight and low expectations of just making it

    • The type of work is a thousand tiny things, rather than five huge things

    • it’s almost like comparing video games

    • I’ll just open that up, work on it a little bit, close it down… Open it up again, work a little bit

  • I would really recommend anyone who feels even remotely curious about fonts to just make a font by yourself.

    • 20 years ago or even 10 years ago it was quite an effort to make a font, and today you can do it – if you have two hours on a Sunday and you know nothing about font-making, you can make a font in that time

  • One sort of downside - or one opportunity rather - is that all of the three industrial-strength font programs are from Macintosh. [Glyphs, RoboFonts, Fontlab?]

    • So if you are on Linux or Windows, it’s gonna be a little tougher.

      • There are two of them out there

        • RingBender [still under development]

        • FontForge [FOSS]

          • But if you ever use Java widgets or QT/multi-platform programs, it feels a little bit like that

  • A typeface is a family of things. A particular character must be part of the whole.

    • Similar to iconography and moviemaking

    • with a typeface you wanna think about almost what the style and the rules are for the system.

    • And the look of the characters is almost an effect or a fallout of that side of principles and rules.

  • Software is ephemeral

    • So I think the majority of things we create on a computer is actually not the code we write or the programs that we run, but kind of the story that it either tells or creates, or helps people tell or create, and not the code itself.

    • Fonts are unique in that external conditions or the environmental conditions affects typography very little, compared to other things that are digital.

      • a font you made in the ‘60s or something, like Helvetica, and you look at that today, although it’s gone through a couple of minor tweaks, it still works just fine.

  • [Status of supports for font features on the web]

    • Variable fonts

      • Chrome used to have two different rendering paths for variable fonts and constant fonts; you might actually see different pixels being rendered with the exact same settings. That is disappearing.

    • OpenType Features

      • if you look in Safari and you compare that to Chrome and you do things like spaces

  • naming is really hard; I kind of accepted this.

    • I try to name my things, especially my open source things, with like the dumbest, simplest names possible.

    • Also, to avoid any sort of legal issues…

      • And that is a good segue to what happened with Inter [referring to the dispute that caused the name-changing from InterFace to Inter]

    • Names in the typeface industry names is a big deal. There’s a flat namespace, and there are registries of names of typefaces