Commit Mono
This time I seem to be settling on either Commit Mono or Space
Mono. For now I'm using Commit Mono because it's a little more
compressed than Fira and does have a italic version. I don't like how
Space Mono's parenthesis (()) is "squarish", it feels visually
ambiguous with the square brackets ([]), a big no-no for my primary
use case (code).
So here I am using a new font, again. It required changing a bunch of
configuration files in my home directory (which is in a private
repository, sorry) and Emacs configuration (thankfully that's
public!).
One gotcha is I realized I didn't actually have a global font
configuration in Emacs, as some Faces define their own font
family, which overrides the frame defaults.
This is what it looks like, before:
Fira Mono
After:
Commit Mono
(Notice how those screenshots are not sharp? I'm surprised too. The
originals look sharp on my display, I suspect this is something to
do with the Wayland transition. I've tried with both grim and
flameshot, for what its worth.)
They are pretty similar! Commit Mono feels a bit more vertically
compressed maybe too much so, actually -- the line height feels too
low. But it's heavily customizable so that's something that's
relatively easy to fix, if it's really a problem. Its weight is also a
little heavier and wider than Fira which I find a little distracting
right now, but maybe I'll get used to it.
All characters seem properly distinguishable, although, if I'd really
want to nitpick I'd say the and are too different, with the
latter (REGISTERED SIGN) being way too small, basically unreadable
here. Since I see this sign approximately never, it probably doesn't
matter at all.
I like how the ampersand (&) is more traditional, although I'll miss
the exotic one Fira produced... I like how the back quotes (,
GRAVE ACCENT) drop down low, nicely aligned with the apostrophe. As
I mentioned before, I like how the bar on the "f" aligns with the
other top of letters, something in Fira mono that really annoys me now
that I've noticed it (it's not aligned!).
A UTF-8 test file
Here's the test sheet I've made up to test various characters. I could
have sworn I had a good one like this lying around somewhere but
couldn't find it so here it is, I guess.
US keyboard coverage:
abcdefghijklmnopqrstuvwxyz 1234567890-=[]\;',./
ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+ :"<>?
latin1 coverage:
EURO SIGN, TRADE MARK SIGN:
ambiguity test:
e coC0ODQ iI71lL!
b6G&0B83 []() /\.
zs$S52Z% '"
all characters in a sentence, uppercase:
the quick fox jumps over the lazy dog
THE QUICK FOX JUMPS OVER THE LAZY DOG
same, in french:
Portez ce vieux whisky au juge blond qui fume.
d s no l, o un z phyr ha me v t de gla ons w rmiens, je d ne
d exquis r tis de b uf au kir, l a d ge m r, &c tera.
D S NO L, O UN Z PHYR HA ME V T DE GLA ONS W RMIENS, JE D NE
D EXQUIS R TIS DE B UF AU KIR, L A D GE M R, &C TERA.
Ligatures test:
-<< -< -<- <-- <--- <<- <- -> ->> --> ---> ->- >- >>-
=<< =< =<= <== <=== <<= <= => =>> ==> ===> =>= >= >>=
<-> <--> <---> <----> <=> <==> <===> <====> :: ::: __
<~~ </ </> /> ~~> == != /= ~= <> === !== !=== =/= =!=
<: := *= *+ <* <*> *> < < > > <. <.> .> +* =* =: :>
(* *) /* */ [ ] ++ +++ \/ /\ - - <!-- <!---
Box drawing alignment tests:
Dashes alignment test:
HYPHEN-MINUS, MINUS SIGN, EN, EM DASH, HORIZONTAL BAR, LOW LINE
--------------------------------------------------
__________________________________________________
Update: here is another such sample sheet, it's pretty good and
has support for more languages while being still relatively small.
So there you have it, got completely nerd swiped by typography
again. Now I can go back to writing a too-long proposal again.
Sources and inspiration for the above:
the unicode(1) command, to lookup individual characters to
disambiguate, for example, - (U+002D HYPHEN-MINUS, the minus
sign next to zero on US keyboards) and (U+2212 MINUS SIGN, a
math symbol)
searchable list of characters and their names - roughly
equivalent to the unicode(1) command, but in one page, amazingly
the /usr/share/unicode database doesn't have any one file like
this
UTF-8 encoded plain text file - nice examples of edge cases,
curly quotes example and box drawing alignment test which,
incidentally, showed me I needed specific faces customisation in
Emacs to get the Markdown code areas to display properly, also the
idea of comparing various dashes
Other fonts
In my previous blog post about fonts, I
had a list of alternative fonts, but it seems people are not digging
through this, so I figured I would redo the list here to preempt "but
have you tried Jetbrains mono" kind of comments.
My requirements are:
no ligatures: yes, in the previous post, I wanted ligatures but
I have changed my mind. after testing this, I find them distracting,
confusing, and they often break the monospace nature of the display
monospace: this is to display code
italics: often used when writing Markdown, where I do make use of
italics... Emacs falls back to underlining text when lacking italics
which is hard to read
free-ish, ultimately should be packaged in Debian
Here is the list of alternatives I have considered in the past and why
I'm not using them:
agave: recommended by tarzeau, not sure I like the lowercase
a, a bit too exotic, packaged as fonts-agave
Cascadia code: optional ligatures, multilingual, not liking the
alignment, ambiguous parenthesis (look too much like square
brackets), new default for Windows Terminal and Visual Studio,
packaged as fonts-cascadia-code
Fira Code: ligatures, was using Fira Mono from which it is derived,
lacking italics except for forks, interestingly, Fira Code succeeds
the alignment test but Fira Mono fails to show the X signs properly!
packaged as fonts-firacode
Hack: no ligatures, very similar to Fira, italics, good
alternative, fails the X test in box alignment, packaged as
fonts-hack
IBM Plex: irritating website, replaces Helvetica as the IBM
corporate font, no ligatures by default, italics, proportional alternatives,
serifs and sans, multiple languages, partial failure in box alignment test (X signs),
fancy curly braces contrast perhaps too much with the rest of the
font, packaged in Debian as fonts-ibm-plex
Inconsolata: no ligatures, maybe italics? more compressed than
others, feels a little out of balance because of that, packaged in
Debian as fonts-inconsolata
Intel One Mono: nice legibility, no ligatures, alignment issues
in box drawing, not packaged in Debian
Iosevka: optional ligatures, italics, multilingual, good
legibility, has a proportional option, serifs and sans, line height
issue in box drawing, fails dash test, not in Debian
Monoid: optional ligatures, feels much "thinner" than
Jetbrains, not liking alignment or spacing on that one, ambiguous
2Z, problems rendering box drawing, packaged as fonts-monoid
Mononoki: no ligatures, looks good, good alternative, suggested
by the Debian fonts team as part of fonts-recommended, problems
rendering box drawing, em dash bigger than en dash, packaged as
fonts-mononoki
spleen: bitmap font, old school, spacing issue in box drawing
test, packaged as fonts-spleen
sudo: personal project, no ligatures, zero originally not
dotted, relied on metrics for legibility, spacing issue in box
drawing, not in Debian
So, if I get tired of Commit Mono, I might probably try, in order:
Hack
Jetbrains Mono
IBM Plex Mono
Iosevka, Monoki and Intel One Mono are also good options, but have
alignment problems. Iosevka is particularly disappointing as the EM
DASH metrics are just completely wrong (much too wide).
This was tested using the Programming fonts site which has all
the above fonts, which cannot be said of Font Squirrel or Google
Fonts, amazingly. Other such tools:
I ve just got a new Kogan 5120*2160 40 curved monitor. It cost $599 including shipping etc which is much cheaper than the Dell monitor with similar specs selling for about $2500. For monitors with better than 4K resolution (by which I don t mean 5K*1440) this is the cheapest option. The nearest competitors are the 27 monitors that do 5120*2880 from Apple and some companies copying Apple s specs. While 5120*2880 is a significantly better resolution than what I got it s probably not going to help me at 27 size.
I ve had a Dell 32 4K monitor since the 1st of July 2022 [1]. It is a really good monitor and I had no complaints at all about it. It was clearer than the Samsung 27 4K monitor I used before it and I m not sure how much of that is due to better display technology (the Samsung was from 2017) and how much was due to larger size. But larger size was definitely a significant factor.
I briefly owned a Phillips 43 4K monitor [2] and determined that a 43 flat screen was definitely too big. At the time I thought that about 35 would have been ideal but after a couple of years using a flat 32 screen I think that 32 is about the upper limit for a flat screen. This is the first curved monitor I ve used but I m already thinking that maybe 40 is too big for a 21:9 aspect ratio even with a curved screen. Maybe if it was 4:4 or even 16:9 that would be ok. Otherwise the ideal for a curved screen for me would be something between about 36 and 38 . Also 43 is awkward to move around my desk. But this is still quite close to ideal.
The first system I tested this on was a work laptop, a Dell Latitude 7400 2in1. On the Dell dock that did 4K resolution and on a HDMI cable it did 1440p which was a disappointment as that laptop has talked to many 4K monitors at native resolution on the HDMI port with the same cable. This isn t an impossible problem, as I work in the IT department I can just go through all the laptops in the store room until I find one that supports it. But the 2in1 is a very nice laptop, so I might even just keep using it in 4K resolution when WFH. The laptop in question is deemed an executive laptop so I have to wait another 2 years for the executives to get new laptops before I can get a newer 2in1.
On my regular desktop I had the problem of the display going off for a few seconds every minute or so and also occasionally giving a white flicker. That was using 5120*2160 with a DisplayPort switch as described in the blog post about the Dell 32 monitor. When I ran it in 4K resolution with the DisplayPort switch from my desktop it was fine. I then used the DisplayPort cable that came with the monitor directly connecting the video card to the display and it was fine at 5120*2160 with 75Hz.
The monitor has the joystick thing that seems to have become some sort of standard for controlling modern monitors. It s annoying that pressing it in powers it off. I think there should be a separate button for that. Also the UI in general made me wonder if one of the vendors of expensive monitors had paid whoever designed it to make the UI suck.
The monitor had a single dead pixel in the center of the screen about 1/4 the way down from the top when I started writing this post. Now it s gone away which is a concern as I don t know which pixels might have problems next or if the number of stuck pixels will increase. Also it would be good if there was a dark mode for the WordPress editor. I use dark mode wherever possible so I didn t notice the dead pixel for several hours until I started writing this blog post.
I watched a movie on Netflix and it took the entire screen area, I don t know if they are storing movies in 64:27 ratio or if the clipped the top and bottom, it was probably clipped but still looked OK. The monitor has different screen modes which make it look different, I can t see much benefit to the different modes. The standard mode is what I usually use and it s brighter and the movie mode seems OK for the one movie I ve watched so far.
In other news BenQ has just announced a 3840*2560 28 monitor specifically designed for programming [3]. This is the first time I ve heard of a monitor with 3:2 ratio with modern resolution, we still aren t at the 4:3 type ratio that we were used to when 640*480 was high resolution but it s a definite step in the right direction. It s also the only time I recall ever seeing a monitor advertised as being designed for programming. In the 80s there were home computers advertised as being computers for kids to program, but at that time it was either TV sets for monitors or monitors sold with computers. It was only after the IBM PC compatible market took off that having a choice of different monitors for one computer was a thing. In recent years monitors advertised as being for office use (meaning bright and expensive) have become common as are monitors designed for gamer use (meaning high refresh rate). But BenQ seems to be the first to advertise a monitor for the purpose of programming. They have a desktop partition feature (which could be software or hardware the article doesn t make it clear) to give some of the benefits of a tiled window manager to people who use OSs that don t support such things. The BenQ monitor is a bit small for my taste, I don t know if my vision is good enough to take advantage of 3840*2560 in a 28 monitor nowadays. I think at least 32 would be better. Google seems to be really into buying good monitors for their programmers, if every Google programmer got one of those BenQ monitors then that would be enough sales to make it worth-while for them.
I had hoped that we would have 6K monitors become affordable this year and 8K become less expensive than most cars. Maybe that won t happen and we will instead have a wider range of products like the ultra wide monitor I just bought and the BenQ programmer s monitor. If so I don t think that will be a bad result.
Now the question is whether I can use this monitor for 2 years before finding something else that makes me want to upgrade. I can afford to spend the equivalent of a bit under $1/day on monitor upgrades.
I have not been able to walk since February 18, 2023.
When people ask me how I'm doing, this is the first thing that comes to mind.
"Well, you know, the usual, but also I still can't walk," I think to myself.
If I dream at night, I often see myself walking or running. In conversation, if
I talk about going somewhere, I'll imagine walking there. Even though it's been
over a year, I remember walking to the bus, riding to see my friends, going out
for brunch, cooking community dinners.
But these days, I can't manage going anywhere except by car, and I can't do the
driving, and I can't dis/assemble and load my chair. When I'm resting in bed
and follow a guided meditation, I might be asked to imagine walking up a
staircase, step by step. Sometimes, I do. Other times, I imagine taking a
little elevator in my chair, or wheeling up ramps.
I feel like there is little I can say that can express the extent of what
this illness has taken from me, but it's worth trying. To an able-bodied
person, seeing me in a power wheelchair is usually "enough." One of my
acquaintances cried when they last saw me in person. But frankly, I love my
wheelchair. I am not "wheelchair-bound" I am bed-bound, and the
wheelchair gets me out of bed. My chair hasn't taken anything from me.
***
In October of 2022, I was diagnosed with myalgic encephalomyelitis.
Scientists and doctors don't really know what myalgic encephalomyelitis (ME)
is. Diseases like it have been described for over 200 years.1
It primarily affects women between the ages of 10-39, and the primary symptom
is "post-exertional malaise" or PEM: debilitating, disproportionate fatigue
following activity, often delayed by 24-72 hours and not relieved by sleep.
That fatigue has earned the illness the misleading name of "Chronic Fatigue
Syndrome" or CFS, as though we're all just very tired all the time. But tired
people respond to exercise positively. People with ME/CFS do not.2
Given the dearth of research and complete lack of on-label treatments, you may
think this illness is at least rare, but it is actually quite common: in the
United States, an estimated 836k-2.5m people3 have ME/CFS. It is
frequently misdiagnosed, and it is estimated that as many as 90% of cases are
missed,4 due to mild or moderate symptoms that mimic other
diseases. Furthermore, over half of Long COVID cases likely meet the
diagnostic criteria for ME,5 so these numbers have increased
greatly in recent years. That is, ME is at least as common as rheumatoid
arthritis,6 another delightful illness I have. But while any
doctor knows what rheumatoid arthritis is, not enough7 have heard
of "myalgic encephalomylitis."
Despite a high frequency and disease burden, post-viral associated conditions
(PASCs) such as ME have been neglected for medical funding for
decades.8 Indeed, many people, including medical care workers,
find it hard to believe that after the acute phase of illness, severe symptoms
can persist. PASCs such as ME and Long COVID defy the typical narrative around
common illnesses. I was always told that if I got sick, I should expect to rest
for a bit, maybe take some medications, and a week or two later, I'd get
better, right? But I never got better.
These are complex, multi-system diseases that do not neatly fit into the
Western medical system's specializations. I have seen nearly every specialty
because ME/CFS affects nearly every system of the body: cardiology, nephrology,
pulmonology, neurology, opthalmology, and, many, many more. You'd think they'd
hand out frequent flyer cards, or a medical passport with fun stamps, but nope.
Just hundreds of pages of medical records. And when I don't fit neatly into one
particular specialist's box, then I'm sent back to my primary care doctor to
regroup while we try to troubleshoot my latest concerning symptoms. "Sorry,
can't help you. Not my department."
With little available medical expertise, a lot of my disease management has
been self-directed in partnership with primary care. I've read hundreds of
articles, papers, publications, CME material normally reserved for doctors.
It's truly out of necessity, and I'm certain I would be much worse off if I
lacked the skills and connections to do this; there are so few ME/CFS experts
in the US that there isn't one in my state or any adjacent state.9
So I've done a lot of my own work, much of it while barely being able to read.
(A text-to-speech service is a real lifesaver.) To facilitate managing my
illness, I've built a mental model of how my particular flavour of ME/CFS works
based on the available research I've been able to read and how I respond to
treatments. Here is my best attempt to explain it:
After a severe (non-COVID) infection, an ongoing interaction between my
immune system and my metabolism have stopped my body from being able to do
aerobic respiration.10
I don't know why or how, but my mitochondria don't work properly
anymore.11
This means that if I use too much energy, my body isn't able to make enough
energy to catch up, and I have severe symptoms over the next few days as my
body tries to manage the consequences.
Those symptoms aren't limited to fatigue: I've developed flu-like symptoms
and even fevers, limbs so heavy they felt paralyzed, tachycardia in response
to even the slightest activity.
The best way I have learned to manage this is to prevent myself from doing
activities where I will exceed that aerobic threshold by wearing a heartrate
monitor,12 but the amount of activity that permits in my current
state of health is laughably restrictive. Most days I'm unable to spend more
than one to two hours out of bed.
Over time, this has meant worsening from a persistent feeling of tiredness all
the time and difficulty commuting into an office or sitting at a desk, to being
unable to sit at a desk for an entire workday even while working from home and
avoiding physically intense chores or exercise without really understanding
why, to being unable to leave my apartment for days at a time, and finally,
being unable to stand for more than a minute or two or walk.
But it's not merely that I can't walk. Many folks in wheelchairs are able to
live excellent lives with adaptive technology. The problem is that I am so
fatigued, any activity can destroy my remaining quality of life. In my worst
moments, I've been unable to read, move my arms or legs, or speak aloud. Every
single one of my limbs burned, as though I had caught fire. Food sat in my
stomach for hours, undigested, while my stomach seemingly lacked the energy to
do its job. I currently rely on family and friends for full-time caretaking,
plus a paid home health aide, as I am unable to prep meals, shower, or leave
the house independently. This assistance has helped me slowly improve from my
poorest levels of function.
While I am doing better than I was at my worst, I've had to give up essentially
all of my hobbies with physical components. These include singing, cooking,
baking, taking care of my houseplants, cross-stitching, painting, and so on.
Doing any of these result in post-exertional malaise so I've had to stop; this
reduction of activity to prevent worsening the illness is referred to as
"pacing." I've also had to cut back essentially all of my volunteering and
work in open source; I am only cleared by my doctor to work 15h/wk (from bed)
as of writing.
***
CW: severe illness, death, and suicide (skip this section)
The difficulty of living with a chronic illness is that there's no light at the
end of the tunnel. Some diseases have a clear treatment path: you take the
medications, you complete the procedures, you hit all the milestones, and then
you're done, perhaps with some long-term maintenance work. But with ME, there
isn't really an end in sight. The median duration of illness reported in one
1997 study was over 6 years, with some patients reporting 20 years of
symptoms.13 While a small number of patients spontaneously recover, and many
improve, the vast majority of patients are unable to regain their baseline
function.14
My greatest fear since losing the ability to walk is getting worse still.
Because, while I already require assistance with nearly every activity of daily
living, there is still room for decline. The prognosis for extremely ill
patients is dismal, and many require feeding tubes and daily nursing care. This
may lead to life-threatening malnutrition;15 a number of these extremely
severe patients have died, either due to medical neglect or suicide.16
Extremely severe patients cannot tolerate light, sound, touch, or cognitive
exertion,17 and often spend most of their time lying flat in a darkened room
with ear muffs or an eye mask.18
This is all to say, my prognosis is not great.
But while I recognize that the odds aren't exactly in my favour, I am also damn
stubborn. (A friend once cheerfully described me as "stubbornly optimistic!") I
only get one shot at life, and I do not want to spend the entirety of it barely
able to perceive what's going on around me. So while my prognosis is uncertain,
there's lots of evidence that I can improve somewhat,19 and there's also lots of
evidence that I can live 20+ years with this disease. It's a bitter pill to
swallow, but it also means I might have the gift of time something that
not all my friends with severe complex illnesses have had.
I feel like I owe it to myself to do the best I can to improve;
to try to help others in a similar situation; and to enjoy the time that I
have. I already feel like my life has been moving in slow motion for the past 4
years there's no need to add more suffering. Finding joy, as much as I
can, every day, is essential to keep up my strength for this marathon. Even if
it takes 20 years to find a cure, I am convinced that the standard of care is
going to improve. All the research and advocacy that's been happening over the
past decade is plenty to feel hopeful about.20 Hope is a
discipline,21 and I try to remind myself of this on the hardest
days.
***
I'm not entirely sure why I decided to write this. Certainly, today is
International ME/CFS Awareness Day, and I'm hoping this post will
raise awareness in spaces that aren't often thinking about chronic illnesses.
But I think there is also a part of me that wants to share, reach out in some
way to the people I've lost contact with while I've been treading water,
managing the day to day of my illness. I experience this profound sense of
loss, especially when I think back to the life I had before. Everyone hits
limitations in what they can do and accomplish, but there is so little I can do
with the time and energy that I have. And yet, I understand even this precious
little could still be less. So I pace myself.
Perhaps I can inspire you to take action on behalf of those of us too fatigued
to do the advocacy we need and deserve. Should you donate to a charity or
advocacy organization supporting ME/CFS research? In the US, there are many
excellent organizations, such as ME Action, the Open Medicine
Foundation, SolveME, the Bateman Horne Center, and the
Workwell Foundation. I am also happy to match any donations
through the end of May 2024 if you send me your receipts. But charitable giving
only goes so far, and I think this problem deserves the backing of more
powerful organizations.
Proportionate government funding and support is desperately needed. It's
critical for us to push governments22 to provide the funding
required for research that will make an impact on patients' lives now. Many
organizers are running campaigns around the world, advocating for this
investment. There is a natural partnership between ME advocacy and Long COVID
advocacy, for example, and we have an opportunity to make a great difference to
many people by pushing for research and resources inclusive of all PASCs. Some
examples I'm aware of include:
[US] A Long COVID "moonshot" effort, drafted in April 2024 by
Senator Sanders. Contact your representatives and encourage them to
support it. Ask them to ensure the effort includes support for ME/CFS and
other related conditions and PASCS.
[Canada] National ME/FM Action recommended participation in public budget
consultation processes and made a submission. Though the 2024
consultation is closed, you can still contact your MP to improve
awareness and advocate for budgetary support. It may also be worth contacting
your MLA to advocate for better PASC care in provincial clinics.
[Other] MEAction also regularly hosts government advocacy campaigns in the
US, UK, and Scotland.
But outside of collective organizing, there are a lot of sick individuals out
there that need help, too. Please, don't forget about us. We need you to visit
us, care for us, be our confidantes, show up as friends. There are a lot of
people who are very sick out here and need your care.
I'm one of them.
I ve been using E Ink-based ereaders for quite a number of years now. I ve had my Kobo Libra 2 for a few years, and was looking forward to the Kobo Libra Colour the first color E Ink display in a mainstream ereader line.
I found the display to be a mixed bag; contrast seemed a lot worse on B&W images, and the device backlight (it s not technically a back light) seemed to cause a particular contrast reduction in dark mode. I went searching for information on this. I found a lot of videos on Kobo Libra 2 vs Libra Colour and so forth, but they were all pretty much useless. These were the mistakes they made:
Being videos. Photos would show the differences in better detail.
Shooting videos with cameras with automatic light levels. Since the thing we re trying to evaluate here is how much darker the Kobo Libra Colour screen is than the Kobo Libra screen, having a camera that automatically adjusts for brighter or darker images defeats the purpose. Cell phone cameras (still and video) all do this by default and I saw evidence of it in all the videos.
Placing the two devices side-by-side instead of in identical locations for subsequent shots. This led to different shadows on each device (because OF COURSE the people shooting videos had to have their phone and head between the light source and the device), again preventing a good comparison.
So I dug out my Canon DSLR, tripod, and set up shots. Every shot here is set at ISO 100. Every shot in the same setting has the same exposure settings, which I document. The one thing I forgot to shut off was automatic white balance; you can notice it is active if you look closely at the backgrounds, but WB isn t really relevant to this comparison anyhow.
Because there has also been a lot of concern about how well fine B&W details will show up on the Kobo Libra Colour screen, I shot all photos using a PDF test image from the open source hplip package (testpage.ps.gz converted to PDF). This also rules out font differences between the devices. I ensured a full screen refresh before each shot.
This is all because color E Ink is effectively a filter called Kaleido over the B&W layer. This causes dimming and some other visual effects.
You can click on any image here to see a full-resolution view. The full-size images are the exact JPEG coming from the camera, with only two modifications: 1) metadata has been redacted for privacy reasons, and 2) some images were losslessly rotated after the shoot.
OK, onwards!
Outdoors, bright sun, shot from directly overhead
Bright sun is ideal lighting for an E Ink display. They need no lighting at all in this scenario, and in fact, if you turn on their internal display light, it will probably not be very noticeable. Of course, this is in contrast to phone LCD screens, for which bright sunlight is the worst.
Scene: Morning sunlight reaching the ereaders at an angle. The angle was sufficient so that no shadows were cast by the camera or tripod.
Device light: Off on both
Exposure: 1/160, f16, ISO 100
You can see how much darker the Libra Colour is here. Though in these bright conditions, it is still plenty bright. There may actually be situations in which the Libra 2 is too bright in direct sunlight, requiring a person to squint or whatnot.
Looking at the radial lines, it is a bit difficult to tell because the difference in brightness, but I don t see a hugely obvious reduction in quality in the Libra 2. Later I have a shot where I try to match brightness, and we ll check it out again there.
Outdoors, shade, shot from directly overhead
For the next shot, I set the ereaders in shade, but still well-lit with the diffuse sunlight from all around.
The first two have both device lights off. For the third, I set the device light on the Kobo Colour to 100%, full cool shade, to try to see how close I could get it to the Libra 2 brightness. (Sorry it looks like I forgot to close the toolbar on the Colour for this set, but it doesn t modify the important bits of the underlying image.)
Device light: Initially off on both
Exposure: 1/60, f6.4, ISO 100
Here you can see the light on the Libra Colour was nearly able to match the brightness on the Libra 2.
Indoors, room lit with overhead and window light, device light off
We continue to move into dimmer light with this next shot.
Device light: Off on both
Exposure: 1/4, f5, ISO 100
Indoors, room lit with overhead and window light, device light on
Now we have the first head-to-head with the device light on. I set the Libra 2 to my favorite warmth setting, found a brightness that looked good, and then tried my best to match those settings on the Libra Colour. My camera s light meter aided in matching brightness.
Device light: On (Libra 2 at 40%, Libra Colour at 59%)
Exposure: 1/8, f5, ISO 100
(Apparently I am terrible at remembering to dismiss menus, sigh.)
Indoors, dark room, dark mode, at an angle
The Kobo Libra Colour surprised me with its dark mode. When viewed at an oblique angle, the screen gets pretty washed out. I maintained the same brightness settings here as I did above. It is much more noticeable when the brightness is set down to my preferred nighttime level (4%), or with a more significant angle.
Since you can t see my tags, the order of the photos here will be: Libra 2 (standard orientation), Colour (standard orientation), Colour (turned around.
Device light: On (as above)
Exposure: 1/4, f5.6, ISO 100
Notice how I said I maintained the same brightness settings as before, and yet the Libra Colour looks brighter than the Libra 2 here, whereas it looked the same in the prior non-dark mode photos. Here s why. I set the exposure of each set of shots based on camera metering. As we have seen from the light-off photos, the brightness of a white pixel is a lot less on a Libra Colour than on the Libra 2. However, it is likely that the brightness of a black pixel is about that same. Therefore, contrast on the Libra Colour is lower than on the Libra 2. The traditional shot is majority white pixels, so to make the Libra Colour brightness match that of the Libra 2, I had to crank up the brightness on the Libra Colour to compensate for the darker white background. With me so far?
Now with the inverted image, you can see what that does. It doesn t just raise the brightness of the white pixels, but it also raises the brightness of the black pixels. This is expected because we didn t raise contrast, only brightness.
Also, in the last image, you can see it is brighter to the right. Again, other conditions that are more difficult to photograph make that much more pronounced. Viewing the Libra Colour from one side (but not the other), in dark mode, with the light on, produces noticeably worse contrast on one side.
Conclusions
This isn t a slam dunk. Let s walk through this:
I don t think there is any noticeable loss of detail on the Libra Colour. The radial lines appeared as well defined on it as on the Libra 2. Oddly, with the backlight, some striations were apparent in the gray gradient test, but I wouldn t be using an E Ink device for clear photographic reproduction anyhow.
If you read mostly black and white: If you had been using a Kobo Libra Colour and were handed a Libra 2, you would go, Wow! What an upgrade! The screen is so much brighter! There s little reason to get a Libra Colour. The Libra 2 might be hard to find these days, but the new Clara BW (with a 6 instead of the 7 screen on the Libra series) might be just the thing for you. The Libra 2 is at home in any lighting, from direct sun to pitch black, and has all the usual E Ink benefits (eg, battery life measured in weeks) and drawbacks (slower refresh rate) that we re all used to.
If you are interested in photographic color reproduction mostly indoors: Consider a small tablet. The Libra Colour s 4096 colors are going to appear washed out compared to what you re used to on a LCD screen.
If you are interested in color content indoors and out: The Libra Colour might be a good fit. It could work well for things where superb color rendition isn t essential for instance, news stories (the Pocket integration or Calibre s news feature could be nice there), comics, etc.
In a moderately-lit indoor room, it looks like the Libra Colour s light can lead it to results that approach Libra 2 quality. So if most of your reading is in those conditions, perhaps the Libra Colour is right for you.
As a final aside, I wrote in this article about the Kobo devices. I switched from Kindles to Kobos a couple of years ago due to the greater openness of the Kobo devices (you can add things like Nickel Menu and KOReader to them, and they have built-in support for more useful formats), their featureset, and their cost. The top-of-the-line Kindle devices will have a screen very similar if not identical to the Libra 2, so you can very easily consider this to be a comparison between the Oasis and the Libra Colour as well.
Me: Hi everyone, my name s Matt, and I m a mediocre programmer. Everyone: Hi, Matt. Facilitator: Are you an alcoholic, Matt? Me: No, not since I stopped reading Twitter. Facilitator: Then I think you re in the wrong room.
Yep, that s my little secret I m a mediocre programmer.
The definition of the word hacker I most closely align with is someone who makes furniture with an axe .
I write simple, straightforward code because trying to understand complexity makes my head hurt.
Which is why I ve always avoided the more academic languages, like OCaml, Haskell, Clojure, and so on.
I know they re good languages people far smarter than me are building amazing things with them but the time I hear the word endofunctor , I ve lost all focus (and most of my will to live).
My preferred languages are the ones that come with less intellectual overhead, like C, PHP, Python, and Ruby.
So it s interesting that I ve embraced Rust with significant vigour.
It s by far the most complicated language that I feel at least vaguely comfortable with using in anger .
Part of that is that I ve managed to assemble a set of principles that allow me to almost completely avoid arguing with Rust s dreaded borrow checker, lifetimes, and all the rest of the dark, scary corners of the language.
It s also, I think, that Rust helps me to write better software, and I can feel it helping me (almost) all of the time.
In the spirit of helping my fellow mediocre programmers to embrace Rust, I present the principles I ve assembled so far.
Neither a Borrower Nor a Lender Be
If you know anything about Rust, you probably know about the dreaded borrow checker .
It s the thing that makes sure you don t have two pieces of code trying to modify the same data at the same time, or using a value when it s no longer valid.
While Rust s borrowing semantics allow excellent performance without compromising safety, for us mediocre programmers it gets very complicated, very quickly.
So, the moment the compiler wants to start talking about explicit lifetimes , I shut it up by just using owned values instead.
It s not that I never borrow anything; I have some situations that I know are borrow-safe for the mediocre programmer (I ll cover those later).
But any time I m not sure how things will pan out, I ll go straight for an owned value.
For example, if I need to store some text in a struct or enum, it s going straight into a String.
I m not going to start thinking about lifetimes and &'a str; I ll leave that for smarter people.
Similarly, if I need a list of things, it s a Vec<T> every time no &'b [T] in my structs, thank you very much.
Attack of the Clones
Following on from the above, I ve come to not be afraid of .clone().
I scatter them around my code like seeds in a field.
Life s too short to spend time trying to figure out who s borrowing what from whom, if I can just give everyone their own thing.
There are warnings in the Rust book (and everywhere else) about how a clone can be expensive .
While it s true that, yes, making clones of data structures consumes CPU cycles and memory, it very rarely matters.
CPU cycles are (usually) plentiful and RAM (usually) relatively cheap.
Mediocre programmer mental effort is expensive, and not to be spent on premature optimisation.
Also, if you re coming from most any other modern language, Rust is already giving you so much more performance that you re probably ending up ahead of the game, even if you .clone() everything in sight.
If, by some miracle, something I write gets so popular that the expense of all those spurious clones becomes a problem, it might make sense to pay someone much smarter than I to figure out how to make the program a zero-copy masterpiece of efficient code.
Until then clone early and clone often, I say!
Derive Macros are Powerful Magicks
If you start .clone()ing everywhere, pretty quickly you ll be hit with this error:
error[E0599]: no method named clone found for struct Foo in the current scope
This is because not everything can be cloned, and so if you want your thing to be cloned, you need to implement the method yourself.
Well sort of.
One of the things that I find absolutely outstanding about Rust is the derive macro .
These allow you to put a little marker on a struct or enum, and the compiler will write a bunch of code for you!
Clone is one of the available so-called derivable traits , so you add #[derive(Clone)] to your structs, and poof! you can .clone() to your heart s content.
But there are other things that are commonly useful, and so I ve got a set of traits that basically all of my data structures derive:
Every time I write a struct or enum definition, that line #[derive(Clone, Debug, Default)] goes at the top.
The Debug trait allows you to print a debug representation of the data structure, either with the dbg!() macro, or via the :? format in the format!() macro (and anywhere else that takes a format string).
Being able to say what exactly is that? comes in handy so often, not having a Debug implementation is like programming with one arm tied behind your Aeron.
Meanwhile, the Default trait lets you create an empty instance of your data structure, with all of the fields set to their own default values.
This only works if all the fields themselves implement Default, but a lot of standard types do, so it s rare that you ll define a structure that can t have an auto-derived Default.
Enums are easily handled too, you just mark one variant as the default:
Borrowing is OK, Sometimes
While I previously said that I like and usually use owned values, there are a few situations where I know I can borrow without angering the borrow checker gods, and so I m comfortable doing it.
The first is when I need to pass a value into a function that only needs to take a little look at the value to decide what to do.
For example, if I want to know whether any values in a Vec<u32> are even, I could pass in a Vec, like this:
fn main()
let numbers = vec![0u32, 1, 2, 3, 4, 5];
if has_evens(numbers)
println!("EVENS!");
fn has_evens(numbers: Vec<u32>) -> bool
numbers.iter().any( n n % 2 == 0)
Howver, this gets ugly if I m going to use numbers later, like this:
fn main()
let numbers = vec![0u32, 1, 2, 3, 4, 5];
if has_evens(numbers)
println!("EVENS!");
// Compiler complains about "value borrowed here after move"
println!("Sum: ", numbers.iter().sum::<u32>());
fn has_evens(numbers: Vec<u32>) -> bool
numbers.iter().any( n n % 2 == 0)
Helpfully, the compiler will suggest I use my old standby, .clone(), to fix this problem.
But I know that the borrow checker won t have a problem with lending that Vec<u32> into has_evens() as a borrowed slice, &[u32], like this:
fn main()
let numbers = vec![0u32, 1, 2, 3, 4, 5];
if has_evens(&numbers)
println!("EVENS!");
fn has_evens(numbers: &[u32]) -> bool
numbers.iter().any( n n % 2 == 0)
The general rule I ve got is that if I can take advantage of lifetime elision (a fancy term meaning the compiler can figure it out ), I m probably OK.
In less fancy terms, as long as the compiler doesn t tell me to put 'a anywhere, I m in the green.
On the other hand, the moment the compiler starts using the words explicit lifetime , I nope the heck out of there and start cloning everything in sight.
Another example of using lifetime elision is when I m returning the value of a field from a struct or enum.
In that case, I can usually get away with returning a borrowed value, knowing that the caller will probably just be taking a peek at that value, and throwing it away before the struct itself goes out of scope.
For example:
Returning a reference from a function is practically always a mortal sin for mediocre programmers, but returning one from a struct method is often OK.
In the rare case that the caller does want the reference I return to live for longer, they can always turn it into an owned value themselves, by calling .to_owned().
Avoid the String Tangle
Rust has a couple of different types for representing strings String and &str being the ones you see most often.
There are good reasons for this, however it complicates method signatures when you just want to take some sort of bunch of text , and don t care so much about the messy details.
For example, let s say we have a function that wants to see if the length of the string is even.
Using the logic that since we re just taking a peek at the value passed in, our function might take a string reference, &str, like this:
That seems to work fine, until someone wants to check a formatted string:
fn main()
// The compiler complains about "expected &str , found String "
if is_even_length(format!("my string is ", std::env::args().next().unwrap()))
println!("Even length string");
Since format! returns an owned string, String, rather than a string reference, &str, we ve got a problem.
Of course, it s straightforward to turn the String from format!() into a &str (just prefix it with an &).
But as mediocre programmers, we can t be expected to remember which sort of string all our functions take and add & wherever it s needed, and having to fix everything when the compiler complains is tedious.
The converse can also happen: a method that wants an owned String, and we ve got a &str (say, because we re passing in a string literal, like "Hello, world!").
In this case, we need to use one of the plethora of available turn this into a String mechanisms (.to_string(), .to_owned(), String::from(), and probably a few others I ve forgotten), on the value before we pass it in, which gets ugly real fast.
For these reasons, I never take a Stringor an &str as an argument.
Instead, I use the Power of Traits to let callers pass in anything that is, or can be turned into, a string.
Let us have some examples.
First off, if I would normally use &str as the type, I instead use impl AsRef<str>:
Note that I had to throw in an extra as_ref() call in there, but now I can call this with either a String or a &str and get an answer.
Now, if I want to be given a String (presumably because I plan on taking ownership of the value, say because I m creating a new instance of a struct with it), I use impl Into<String> as my type:
We have to call .into() on our desc argument, which makes the struct building a bit uglier, but I d argue that s a small price to pay for being able to call both Foo::new(1, "this is a thing") and Foo::new(2, format!("This is a thing named name ")) without caring what sort of string is involved.
Always Have an Error Enum
Rust s error handing mechanism (Results everywhere), along with the quality-of-life sugar surrounding it (like the short-circuit operator, ?), is a delightfully ergonomic approach to error handling.
To make life easy for mediocre programmers, I recommend starting every project with an Error enum, that derives thiserror::Error, and using that in every method and function that returns a Result.
How you structure your Error type from there is less cut-and-dried, but typically I ll create a separate enum variant for each type of error I want to have a different description.
With thiserror, it s easy to then attach those descriptions:
I also implement functions to create each error variant, because that allows me to do the Into<String> trick, and can sometimes come in handy when creating errors from other places with .map_err() (more on that later).
For example, the impl for the above Error would probably be:
Banish map_err (well, mostly)
The newer mediocre programmer, who is just dipping their toe in the water of Rust, might write file handling code that looks like this:
fn read_u32_from_file(name: impl AsRef<str>) -> Result<u32, Error>
let mut f = File::open(name.as_ref())
.map_err( e Error::FileOpenError(name.as_ref().to_string(), e))?;
let mut buf = vec![0u8; 30];
f.read(&mut buf)
.map_err( e Error::ReadError(e))?;
String::from_utf8(buf)
.map_err( e Error::EncodingError(e))?
.parse::<u32>()
.map_err( e Error::ParseError(e))
This works great (or it probably does, I haven t actually tested it), but there are a lot of .map_err() calls in there.
They take up over half the function, in fact.
With the power of the From trait and the magic of the ? operator, we can make this a lot tidier.
First off, assume we ve written boilerplate error creation functions (or used thiserror_ext::Construct to do it for us)).
That allows us to simplify the file handling portion of the function a bit:
fn read_u32_from_file(name: impl AsRef<str>) -> Result<u32, Error>
let mut f = File::open(name.as_ref())
// We've dropped the .to_string() out of here...
.map_err( e Error::file_open_error(name.as_ref(), e))?;
let mut buf = vec![0u8; 30];
f.read(&mut buf)
// ... and the explicit parameter passing out of here
.map_err(Error::read_error)?;
// ...
If that latter .map_err() call looks weird, without the e and such, it s passing a function-as-closure, which just saves on a few characters typing.
Just because we re mediocre, doesn t mean we re not also lazy.
Next, if we implement the From trait for the other two errors, we can make the string-handling lines significantly cleaner.
First, the trait impl:
impl From<std::string::FromUtf8Error> for Error
fn from(e: std::string::FromUtf8Error) -> Self
Self::EncodingError(e)
impl From<std::num::ParseIntError> for Error
fn from(e: std::num::ParseIntError) -> Self
Self::ParseError(e)
(Again, this is boilerplate that can be autogenerated, this time by adding a #[from] tag to the variants you want a From impl on, and thiserror will take care of it for you)
In any event, no matter how you get the From impls, once you have them, the string-handling code becomes practically error-handling-free:
Ok(
String::from_utf8(buf)?
.parse::<u32>()?
)
The ? operator will automatically convert the error from the types returned from each method into the return error type, using From.
The only tiny downside to this is that the ? at the end strips the Result, and so we ve got to wrap the returned value in Ok() to turn it back into a Result for returning.
But I think that s a small price to pay for the removal of those .map_err() calls.
In many cases, my coding process involves just putting a ? after every call that returns a Result, and adding a new Error variant whenever the compiler complains about not being able to convert some new error type.
It s practically zero effort outstanding outcome for the mediocre programmer.
Just Because You re Mediocre, Doesn t Mean You Can t Get Better
To finish off, I d like to point out that mediocrity doesn t imply shoddy work, nor does it mean that you shouldn t keep learning and improving your craft.
One book that I ve recently found extremely helpful is Effective Rust, by David Drysdale.
The author has very kindly put it up to read online, but buying a (paper or ebook) copy would no doubt be appreciated.
The thing about this book, for me, is that it is very readable, even by us mediocre programmers.
The sections are written in a way that really clicked with me.
Some aspects of Rust that I d had trouble understanding for a long time such as lifetimes and the borrow checker, and particularly lifetime elision actually made sense after I d read the appropriate sections.
Finally, a Quick Beg
I m currently subsisting on the kindness of strangers, so if you found something useful (or entertaining) in this post, why not buy me a refreshing beverage?
It helps to know that people like what I m doing, and helps keep me from having to sell my soul to a private equity firm.
Droidian Support for Note 9
Droidian only supported the version of this phone with the Exynos chipset. The GSM Arena specs page for the Note 9 shows that it s the SM-N960F part number [1]. In Australia all Note 9 phones should have the Exynos but it doesn t hurt to ask for the part number before buying.
The status of the Note9 in Droidian went from fully supported to totally unsupported in the time I was working on this blog post. Such a rapid change is disappointing, it would be good if they at least kept the old data online. It would also be good if they didn t require a hash character in the URL for each phone which breaks the archive.org mirroring.
Installing Droidian
Firstly Power+VolumeDown will reboot in some situations where Power button on its own won t. The Note 9 hardware keys are:
Power Right side
Volume up/down long button top of the left side
Bixby key for Samsung assistant that s below the volume on the left
The Droidian install document for the Galaxy Note 9 9 now deleted is a bit confusing and unclear. Here is the install process that worked for me.
The doc says to start by installing Android 10 (Q) stock firmware , but apparently a version of Android 10 that s already on the phone will do for that.
Download the rescue.img file and the Droidian s image files from the Droidian page and extract the Droidian s image zip.
Connect your phone to your workstation by USB, preferably USB 3 because it will take a few minutes to transfer the image at USB 2 speed. Install the Debian package adb on the workstation.
To Unlock the bootloader you can apparently use a PC and the Samsung software but the unlock option in the Android settings gives the same result without proprietary software, here s how to do it:
Connect the phone to Wifi. Then in settings go to Software update , then click on Download and install . Refuse to install if it offers you a new version (the unlock menu item will never appear unless you do this, so you can t unlock without Internet access).
In settings go to About phone , then Software information , then tap on Build number repeatedly until Developer mode is enabled.
In settings go to the new menu Developer options then turn on the OEM unlocking option, this does a factory reset of the phone.
To flash the recovery.img you apparently use Odin on Windows. I used the heimdall-flash package on Debian. On your Linux workstation run the commands:
Then press VOLUME-UP+BIXBY+POWER as soon as it reboots to get into the recovery image. If you don t do it soon enough it will do a default Android boot which will wipe the recovery.img you installed and also do a factory reset which will disable Developer mode and you will need to go back to step 4.
If the above step works correctly you will have a RECOVERY menu where the main menu has options Reboot system now , Apply update , Factory reset , and Advanced in a large font. If you failed to install recovery.img then you would get a similar menu but with a tiny font which is the Samsung recovery image which won t work so reboot and try again.
When at the main recovery menu select Advanced and then Enter fastboot . Note that this doesn t run a different program or do anything obviously different, just gives a menu that s OK we want it at this menu.
Run ./flash_all.sh on your workstation.
Then it should boot Droidian! This may take a bit of time.
First Tests
Battery
The battery and its charge and discharge rates are very important to me, it s what made the PinePhonePro and Librem5 unusable as daily driver phones.
After running for about 100 minutes of which about 40 minutes were playing with various settings the phone was at 89% battery. The output of upower -d isn t very accurate as it reported power use ranging from 0W to 25W! But this does suggest that the phone might last for 400 minutes of real use that s not CPU intensive, such as reading email, document editing, and web browsing. I don t think that 6.5 hours of doing such things non-stop without access to a power supply or portable battery is something I m ever going to do. Samsung when advertising the phone claimed 17 hours of video playback which I don t think I m ever going to get or want.
After running for 11 hours it was at 58% battery. Then after just over 21 hours of running it had 13% battery. Generally I don t trust the upower output much but the fact that it ran for over 21 hours shows that its battery life is much better than the PinePhonePro and the Librem5. During that 21 hours I ve had a ssh session open with the client set to send ssh keep-alive messages every minute. So it had to remain active. There is an option to suspend on Droidian but they recommend you don t use it. There is no need for the caffeine mode that you have on Mobian. For comparison my previous tests suggested that when doing nothing a PinePhonePro might last for 30 hours on battery while the Liberem5 might only list 10 hours [2]. This test with Droidian was done with the phone within my reach for much of that time and subject to my desire to fiddle with new technology so it wasn t just sleeping all the time.
When charging from the USB port on my PC it went from 13% to 27% charge in half an hour and then after just over an hour it claimed to be at 33%. It ended up taking just over 7 hours to fully charge from empty that s not great but not too bad for a PC USB port. This is the same USB port that my Librem5 couldn t charge from. Also the discharge:charge ratio of 21:7 is better than I could get from the PinePhonePro with Caffeine mode enabled.
rndis0
The rndis0 interface used for IP over USB doesn t work. Droidian bug #36 [3].
Other Hardware
The phone I bought for testing is the model with 6G of RAM and 128G of storage, has a minor screen crack and significant screen burn-in. It s a good test system for $109. The screen burn-in is very obvious when running the default Android setup but when running the default Droidian GNOME setup set to the Dark theme (which is a significant power saving with an AMOLED screen) I can t see it at all. Buying a cheap phone with screen burn-in is something I recommend.
The stylus doesn t work, this isn t listed on the Droidian web page. I m not sure if I tested the stylus when the phone was running Android, I think I did.
D State Processes
I get a kernel panic early in the startup for unknown reasons and some D state kernel threads which may or may not be related to that. Droidian bug #37 [4].
Second Phone
The Phone
I ordered a second Note9 on ebay, it had been advertised at $240 for a month and the seller accepted my offer of $200. With postage that s $215 for a Note9 in decent condition with 8G of RAM and 512G of storage. But Droidian dropped support for the Note9 before I got to install it. At the moment I m not sure what I ll do with this, maybe I ll keep it on Android.
I also bought four phone cases for $16. I got spares because of the high price of postage relative to the case cost and the fact that they may be difficult to get in a few years.
The Tests
For the next phone my plan was to do more tests on Android before upgrading it to Debian. Here are the ones I can think of now, please suggest any others I should do.
Log output of ps auxf equivalent.
Make notes on what they are doing with SE Linux.
Test the stylus.
Test USB networking to my workstation and my laptop.
Make a copy of the dmesg output. Also look for D state processes and other signs of problems.
Droidian and Security
When I tell technical people about Droidian a common reaction is great you can get a cheap powerful phone and have better security than Android . This is wrong in several ways. Firstly Android has quite decent security. Android runs most things in containers and uses SE Linux. Droidian has the Debian approach for most software (IE it all runs under the same UID without any special protections) and the developers have no plans to use SE Linux. I ve previously blogged about options for Sandboxing for Debian phone use, my blog post is NOT a solution to the problem but an analysis of the different potential ways of going about solving it [5].
The next issue is that Droidian has no way to update the kernel and the installation instructions often advise downgrading Android (running a less secure kernel) before the installation. The Android Generic Kernel Image project [6] addresses this by allowing a separation between drivers supplied by the hardware vendor and the kernel image supplied by Google. This also permits running the hardware vendor s drivers with a GKI kernel released by Google after the hardware vendor dropped security support. But this only applies to Android 11 and later, so Android 10 devices (like the Note 9 image for Droidian) miss out on this.
Nation is a stand-alone young adult fantasy novel. It was
published in the gap between Discworld novels Making Money and Unseen
Academicals.
Nation starts with a plague. The Russian influenza has ravaged
Britain, including the royal family. The next in line to the throne is
off on a remote island and must be retrieved and crowned as soon as
possible, or an obscure provision in Magna Carta will cause no end of
trouble. The Cutty Wren is sent on this mission, carrying the
Gentlemen of Last Resort.
Then comes the tsunami.
In the midst of fire raining from the sky and a wave like no one has ever
seen, Captain Roberts tied himself to the wheel of the Sweet Judy
and steered it as best he could, straight into an island. The sole
survivor of the shipwreck: one Ermintrude Fanshaw, daughter of the
governor of some British island possessions. Oh, and a parrot.
Mau was on the Boys' Island when the tsunami came, going through his rite
of passage into manhood. He was to return to the Nation the next morning
and receive his tattoos and his adult soul. He survived in a canoe. No
one else in the Nation did.
Terry Pratchett considered Nation to be his best book. It is not
his best book, at least in my opinion; it's firmly below the top tier of
Discworld novels, let alone Night Watch.
It is, however, an interesting and enjoyable book that tackles gods and
religion with a sledgehammer rather than a knife.
It's also very, very dark and utterly depressing at the start, despite a
few glimmers of Pratchett's humor. Mau is the main protagonist at first,
and the book opens with everyone he cares about dying. This is the place
where I thought Pratchett diverged the most from his Discworld style: in
Discworld, I think most of that would have been off-screen, but here we
follow Mau through the realization, the devastation, the disassociation,
the burials at sea, the thoughts of suicide, and the complete upheaval of
everything he thought he was or was about to become. I found the start of
this book difficult to get through. The immediate transition into
potentially tragic misunderstandings between Mau and Daphne (as Ermintrude
names herself once there is no one to tell her not to) didn't help.
As I got farther into the book, though, I warmed to it. The best parts
early on are Daphne's baffled but scientific attempts to understand Mau's
culture and her place in it. More survivors arrive, and they start to
assemble a community, anchored in large part by Mau's stubborn
determination to do what's right even though he's lost all of his
moorings. That community eventually re-establishes contact with the rest
of the world and the opening plot about the British monarchy, but not
before Daphne has been changed profoundly by being part of it.
I think Pratchett worked hard at keeping Mau's culture at the center of
the story. It's notable that the community that reforms over the course
of the book essentially follows the patterns of Mau's lost Nation and
incorporates Daphne into it, rather than (as is so often the case) the
other way around. The plot itself is fiercely anti-colonial in a way that
mostly worked. Still, though, it's a quasi-Pacific-island culture written
by a white British man, and I had some qualms.
Pratchett quite rightfully makes it clear in the afterward that this is an
alternate world and Mau's culture is not a real Pacific island culture.
However, that also means that its starkly gender-essentialist nature was a
free choice, rather than one based on some specific culture, and I found
that choice somewhat off-putting. The religious rituals are all gendered,
the dwelling places are gendered, and one's entire life course in Mau's
world seems based on binary classification as a man or a woman. Based on
Pratchett's other books, I assume this was more an unfortunate default
than a deliberate choice, but it's still a choice he could have avoided.
The end of this book wrestles directly with the relative worth of Mau's
culture versus that of the British. I liked most of this, but the twists
that Pratchett adds to avoid the colonialist results we saw in our world
stumble partly into the trap of making Mau's culture valuable by British
standards. (I'm being a bit vague here to avoid spoilers.) I think it is
very hard to base this book on a different set of priorities and still
bring the largely UK, US, and western European audience along, so I don't
blame Pratchett for failing to do it, but I'm a bit sad that the world
still revolved around a British axis.
This felt quite similar to Discworld to me in its overall sensibilities,
but with the roles of moral philosophy and humor reversed. Discworld
novels usually start with some larger-than-life characters and an absurd
plot, and then the moral philosophy sneaks up behind you when you're not
looking and hits you over the head. Nation starts with the moral
philosophy: Mau wrestles with his gods and the problem of evil in a way
that reminded me of Job, except with a far different pantheon and rather
less tolerance for divine excuses on the part of the protagonist. It's
the humor, instead, that sneaks up on you and makes you laugh when the
plot is a bit too much. But the mix arrives at much the same place: the
absurd hand-in-hand with the profound, and all seen from an angle that
makes it a bit easier to understand.
I'm not sure I would recommend Nation as a good place to start with
Pratchett. I felt like I benefited from having read a lot of Discworld
to build up my willingness to trust where Pratchett was going. But it has
the quality of writing of late Discworld without the (arguable) need to
read 25 books to understand all of the backstory. Regardless,
recommended, and you'll never hear Twinkle Twinkle Little Star in
quite the same way again.
Rating: 8 out of 10
I recently became a maintainer of/committer to IkiWiki,
the software that powers my site. I also took over maintenance of the Debian
package. Last week I cut a new upstream point release, 3.20200202.4, and a
corresponding Debian package upload, consisting only of a handful of
low-hanging-fruit patches from other people, largely to exercise both
processes.
I've been discussing IkiWiki's maintenance situation with some other users for
a couple of years now. I've also weighed up the pros and cons of moving to a
different static-site-generator (a term that describes what IkiWiki is, but was
actually coined more recently). It turns out IkiWiki is exceptionally flexible and
powerful: I estimate the cost of moving to something modern(er) and fashionable
such as Jekyll, Hugo or Hakyll as unreasonably high, in part because they are
surprisingly rigid and inflexible in some key places.
Like most mature software, IkiWiki has a bug backlog. Over the past couple of
weeks, as a sort-of "palate cleanser" around work pieces, I've tried to triage
one IkiWiki bug per day: either upstream or in
the Debian Bug
Tracker.
This is a really lightweight task: it can be as simple as "find a bug reported in
Debian, copy it upstream, tag it upstream, mark it forwarded; perhaps taking
5-10 minutes.
Often I'll stumble across something that has already been fixed but not recorded
as such as I go.
Despite this minimal level of work, I'm quite satisfied with the cumulative
progress. It's notable to me how much my perspective has shifted by becoming a
maintainer: I'm considering everything through a different lens to that of being
just one user.
Eventually I will put some time aside to scratch some of my own itches (html5 by
default; support dark mode; duckduckgo plugin; use the details tag...) but for
now this minimal exercise is of broader use.
In light of the recent cancellation of the queer.af domain registration by the Taliban, the fragile and difficult nature of country-code top-level domains (ccTLDs) has once again been comprehensively demonstrated.
Since many people may not be aware of the risks, I thought I d give a solid explainer of the whole situation, and explain why you should, in general, not have anything to do with domains which are registered under ccTLDs.
Top-level What-Now?
A top-level domain (TLD) is the last part of a domain name (the collection of words, separated by periods, after the https:// in your web browser s location bar).
It s the com in example.com, or the af in queer.af.
There are two kinds of TLDs: country-code TLDs (ccTLDs) and generic TLDs (gTLDs).
Despite all being TLDs, they re very different beasts under the hood.
What s the Difference?
Generic TLDs are what most organisations and individuals register their domains under: old-school technobabble like com , net , or org , historical oddities like gov , and the new-fangled world of words like tech , social , and bank .
These gTLDs are all regulated under a set of rules created and administered by ICANN (the Internet Corporation for Assigned Names and Numbers ), which try to ensure that things aren t a complete wild-west, limiting things like price hikes (well, sometimes, anyway), and providing means for disputes over names1.
Country-code TLDs, in contrast, are all two letters long2, and are given out to countries to do with as they please.
While ICANN kinda-sorta has something to do with ccTLDs (in the sense that it makes them exist on the Internet), it has no authority to control how a ccTLD is managed.
If a country decides to raise prices by 100x, or cancel all registrations that were made on the 12th of the month, there s nothing anyone can do about it.
If that sounds bad, that s because it is.
Also, it s not a theoretical problem the Taliban deciding to asssert its bigotry over the little corner of the Internet namespace it has taken control of is far from the first time that ccTLDs have caused grief.
Shifting Sands
The queer.af cancellation is interesting because, at the time the domain was reportedly registered, 2018, Afghanistan had what one might describe as, at least, a different political climate.
Since then, of course, things have changed, and the new bosses have decided to get a bit more active.
Those running queer.af seem to have seen the writing on the wall, and were planning on moving to another, less fraught, domain, but hadn t completed that move when the Taliban came knocking.
The Curious Case of Brexit
When the United Kingdom decided to leave the European Union, it fell foul of the EU s rules for the registration of domains under the eu ccTLD3.
To register (and maintain) a domain name ending in .eu, you have to be a resident of the EU.
When the UK ceased to be part of the EU, residents of the UK were no longer EU residents.
Cue much unhappiness, wailing, and gnashing of teeth when this was pointed out to Britons.
Some decided to give up their domains, and move to other parts of the Internet, while others managed to hold onto them by various legal sleight-of-hand (like having an EU company maintain the registration on their behalf).
In any event, all very unpleasant for everyone involved.
Geopolitics on the Internet?!?
After Russia invaded Ukraine in February 2022, the Ukranian Vice Prime Minister asked ICANN to suspend ccTLDs associated with Russia.
While ICANN said that it wasn t going to do that, because it wouldn t do anything useful, some domain registrars (the companies you pay to register domain names) ceased to deal in Russian ccTLDs, and some websites restricted links to domains with Russian ccTLDs.
Whether or not you agree with the sort of activism implied by these actions, the fact remains that even the actions of a government that aren t directly related to the Internet can have grave consequences for your domain name if it s registered under a ccTLD.
I don t think any gTLD operator will be invading a neighbouring country any time soon.
Money, Money, Money, Must Be Funny
When you register a domain name, you pay a registration fee to a registrar, who does administrative gubbins and causes you to be able to control the domain name in the DNS.
However, you don t own that domain name4 you re only renting it.
When the registration period comes to an end, you have to renew the domain name, or you ll cease to be able to control it.
Given that a domain name is typically your brand or identity online, the chances are you d prefer to keep it over time, because moving to a new domain name is a massive pain, having to tell all your customers or users that now you re somewhere else, plus having to accept the risk of someone registering the domain name you used to have and capturing your traffic it s all a gigantic hassle.
For gTLDs, ICANN has various rules around price increases and bait-and-switch pricing that tries to keep a lid on the worst excesses of registries.
While there are any number of reasonable criticisms of the rules, and the Internet community has to stay on their toes to keep ICANN from totally succumbing to regulatory capture, at least in the gTLD space there s some degree of control over price gouging.
On the other hand, ccTLDs have no effective controls over their pricing.
For example, in 2008 the Seychelles increased the price of .sc domain names from US$25 to US$75. No reason, no warning, just pay up .
Who Is Even Getting That Money?
A closely related concern about ccTLDs is that some of the cool ones are assigned to countries that are not great.
The poster child for this is almost certainly Libya, which has the ccTLD ly .
While Libya was being run by a terrorist-supporting extremist, companies thought it was a great idea to have domain names that ended in .ly.
These domain registrations weren t (and aren t) cheap, and it s hard to imagine that at least some of that money wasn t going to benefit the Gaddafi regime.
Similarly, the British Indian Ocean Territory, which has the io ccTLD, was created in a colonialist piece of chicanery that expelled thousands of native Chagossians from Diego Garcia.
Money from the registration of .io domains doesn t go to the (former) residents of the Chagos islands, instead it gets paid to the UK government.
Again, I m not trying to suggest that all gTLD operators are wonderful people, but it s not particularly likely that the direct beneficiaries of the operation of a gTLD stole an island chain and evicted the residents.
Are ccTLDs Ever Useful?
The answer to that question is an unqualified maybe .
I certainly don t think it s a good idea to register a domain under a ccTLD for vanity purposes: because it makes a word, is the same as a file extension you like, or because it looks cool.
Those ccTLDs that clearly represent and are associated with a particular country are more likely to be OK, because there is less impetus for the registry to try a naked cash grab.
Unfortunately, ccTLD registries have a disconcerting habit of changing their minds on whether they serve their geographic locality, such as when auDA decided to declare an open season in the .au namespace some years ago.
Essentially, while a ccTLD may have geographic connotations now, there s not a lot of guarantee that they won t fall victim to scope creep in the future.
Finally, it might be somewhat safer to register under a ccTLD if you live in the location involved.
At least then you might have a better idea of whether your domain is likely to get pulled out from underneath you.
Unfortunately, as the .eu example shows, living somewhere today is no guarantee you ll still be living there tomorrow, even if you don t move house.
In short, I d suggest sticking to gTLDs.
They re at least lower risk than ccTLDs.
+1, Helpful
If you ve found this post informative, why not buy me a refreshing beverage?
My typing fingers (both of them) thank you in advance for your generosity.
Footnotes
don t make the mistake of thinking that I approve of ICANN or how it operates; it s an omnishambles of poor governance and incomprehensible decision-making.
corresponding roughly, though not precisely (because everything has to be complicated, because humans are complicated), to the entries in the ISO standard for Codes for the representation of names of countries and their subdivisions , ISO 3166.
yes, the EU is not a country; it s part of the roughly, though not precisely caveat mentioned previously.
despite what domain registrars try very hard to imply, without falling foul of deceptive advertising regulations.
Posted on January 2, 2024
Tags: madeof:atoms
One of the knitting projects I m working on is a big bottom-up
triangular shawl in less-than-fingering weight yarn (NM 1/15): it feels
like a cloud should by all rights feel, and I have good expectations out
of it, but it s taking forever and a day.
And then one day last spring I started thinking in the general direction
of top-down shawls, and decided I couldn t wait until I had finished the
first one to see if I could design one.
For my first attempt I used an odd ball of 50% wool 50% plastic I had in
my stash and worked it on 12 mm tree trunks, and I quickly made
something between a scarf and a shawl that got some use during the
summer thunderstorms when temperatures got a bit lower, but not really
cold. I was happy with the shape, not with the exact position of the
increases, but I had ideas for improvements, so I just had to try
another time.
Digging through the stash I found four balls of Drops Alpaca in two
shades of grey: I had bought it with the intent to test its durability
in somewhat more demanding situations (such as gloves or even socks),
but then the LYS1 no longer carries it, so I might as well use it for
something a bit more one-off (and when I received the yarn it felt so
soft that doing something for the upper body looked like a better idea
anyway).
I decided to start working in garter stitch with the darker colour, then
some garter stitch in the lighter shade and to finish with yo / k2t
lace, to make the shawl sort of fade out.
The first half was worked relatively slowly through the summer, and then
when I reached the colour change I suddenly picked up working on it and
it was finished in a couple of weeks.
looks denser in a nice way, but the the lace border is scrunched up.
Then I had doubts on whether I wanted to block it, since I liked the
soft feel, but I decided to try it anyway: it didn t lose the feel, and
the look is definitely better, even if it was my first attempt at
blocking a shawl and I wasn t that good at it.
I m glad that I did it, however, as it s still soft and warm, but now
also looks nicer.
The pattern is of course online as #FreeSoftWear on my fiber craft
patterns website.
at least local to somebody: I can t get to a proper yarn
shop by foot, so I ve bought this yarn online from one that I could
in theory reach on a day trip, but it has not happened yet.
In 2023, I finished and reviewed 53 books, continuing a trend of
year-over-year increases and of reading the most books since 2012 (the
last year I averaged five books a month). Reviewing continued to be
uneven, with a significant slump in the summer and smaller slumps in
February and November, and a big clump of reviews finished in October in
addition to my normal year-end reading and reviewing vacation.
The unevenness this year was mostly due to finishing books and not writing
reviews immediately. Reviews are much harder to write when the finished
books are piling up, so one goal for 2024 is to not let that happen again.
I enter the new year with one book finished and not yet reviewed, after
reading a book about every day and a half during my December vacation.
I read two all-time favorite books this year. The first was Emily Tesh's
debut novel Some
Desperate Glory, which is one of the best space opera novels I have ever
read. I cannot improve on Shelley Parker-Chan's blurb for this book:
"Fierce and heartbreakingly humane, this book is for everyone who loved
Ender's Game, but Ender's Game didn't love them back." This
is not hard science fiction but it is fantastic character fiction. It was
exactly what I needed in the middle of a year in which I was fighting a
"burn everything down" mood.
The second was Night
Watch by Terry Pratchett, the 29th Discworld and 6th Watch novel.
Throughout my Discworld read-through, Pratchett felt like he was on the
cusp of a truly stand-out novel, one where all the pieces fit and the book
becomes something more than the sum of its parts. This was that book.
It's a book about ethics and revolutions and governance, but also about
how your perception of yourself changes as you get older. It does all of
the normal Pratchett things, just... better. While I would love to point
new Discworld readers at it, I think you do have to read at least the
Watch novels that came before it for it to carry its proper emotional
heft.
This was overall a solid year for fiction reading. I read another 15
novels I rated 8 out of 10, and 12 that I rated 7 out of 10. The largest
contributor to that was my Discworld read-through, which was reliably
entertaining throughout the year. The run of Discworld books between
The Fifth Elephant
(read late last year) and Wintersmith (my last of this year) was the best run of Discworld
novels so far. One additional book I'll call out as particularly worth
reading is Thud!,
the Watch novel after Night Watch and another excellent entry.
I read two stand-out non-fiction books this year. The first was Oliver
Darkshire's delightful memoir about life as a rare book seller,
Once Upon a Tome.
One of the things I will miss about Twitter is the regularity with which I
stumbled across fascinating people and then got to read their books. I'm
off Twitter permanently now because the platform is designed to make me
incoherently angry and I need less of that in my life, but it was very
good at finding delightfully quirky books like this one.
My other favorite non-fiction book of the year was Michael Lewis's
Going Infinite, a
profile of Sam Bankman-Fried. I'm still bemused at the negative reviews
that this got from people who were upset that Lewis didn't turn the story
into a black-and-white morality play. Bankman-Fried's actions were
clearly criminal; that's not in dispute. Human motivations can be complex
in ways that are irrelevant to the law, and I thought this attempt to
understand that complexity by a top-notch storyteller was worthy of
attention.
Also worth a mention is Tony Judt's
Postwar, the first
book I reviewed in 2023. A sprawling history of post-World-War-II Europe
will never have the sheer readability of shorter, punchier books, but this
was the most informative book that I read in 2023.
2024 should see the conclusion of my Discworld read-through, after which I
may return to re-reading Mercedes Lackey or David Eddings, both of which I
paused to make time for Terry Pratchett. I also have another re-read
similar to my Chronicles of
Narnia reviews that I've been thinking about for a while. Perhaps I will
start that next year; perhaps it will wait for 2025.
Apart from that, my intention as always is to read steadily, write reviews
as close to when I finished the book as possible, and make reading time
for my huge existing backlog despite the constant allure of new releases.
Here's to a new year full of more new-to-me books and occasional old
favorites.
The full analysis includes some
additional personal reading statistics, probably only of interest to me.
Posted on December 30, 2023
Tags: madeof:atoms
By the influencers on the famous proprietary video platform1.
When I m crafting with no powertools I tend to watch videos, and this
autumn I ve seen a few in a row that were making red wool dresses, at
least one or two medieval kirtles. I don t remember which channels they
were, and I ve decided not to go back and look for them, at least for a
time.
Anyway, my brain suddenly decided that I needed a red wool dress, fitted
enough to give some bust support. I had already made a dress that
satisfied the latter requirement
and I still had more than half of the red wool faille I ve used for the
Garibaldi blouse (still not blogged, but I will get to it), and this
time I wanted it to be ready for this winter.
While the pattern I was going to use is Victorian, it was designed for
underwear, and this was designed to be outerwear, so from the very start
I decided not to bother too much with any kind of historical details or
techniques.
I knew that I didn t have enough fabric to add a flounce to the hem, as
in the cotton dress, but then I remembered that some time ago I fell for
a piece of fringed trim in black, white and red. I did a quick check
that the red wasn t clashing (it wasn t) and I knew I had a plan for the
hem decoration.
Then I spent a week finishing other projects, and the more I thought
about this dress, the more I was tempted to have spiral lacing at the
front rather than buttons, as a nod to the kirtle inspiration.
It may end up be a bit of a hassle, but if it is too much I can always
add a hidden zipper on a side seam, and only have to undo a bit of the
lacing around the neckhole to wear the dress.
Finally, I could start working on the dress: I cut all of the main
pieces, and since the seam lines were quite curved I marked them with
tailor s tacks, which I don t exactly enjoy doing or removing, but are
the only method that was guaranteed to survive while manipulating this
fabric (and not leave traces afterwards).
While cutting the front pieces I accidentally cut the high neck line
instead of the one I had used on the cotton dress: I decided to go for
it also on the back pieces and decide later whether I wanted to lower
it.
Since this is a modern dress, with no historical accuracy at all, and I
have access to a serger, I decided to use some dark blue cotton voile
I ve had in my stash for quite some time, cut into bias strip, to bind
the raw edges before sewing. This works significantly better than bought
bias tape, which is a bit too stiff for this.
For the front opening, I ve decided to reinforce the areas where the
lacing holes will be with cotton: I ve used some other navy blue cotton,
also from the stash, and added two lines of cording to stiffen the front
edge.
So I ve cut the front in two pieces rather than on the fold, sewn the
reinforcements to the sewing allowances in such a way that the corded
edge was aligned with the center front and then sewn the bottom of the
front seam from just before the end of the reinforcements to the hem.
The allowances are then folded back, and then they are kept in place
by the worked lacing holes. The cotton was pinked, while for the wool I
used the selvedge of the fabric and there was no need for any finishing.
Behind the opening I ve added a modesty placket: I ve cut a strip of red
wool, a strip of cotton, folded the edge of the strip of cotton to the
center, added cording to the long sides, pressed the allowances of the
wool towards the wrong side, and then handstitched the cotton to the
wool, wrong sides facing. This was finally handstitched to one side of
the sewing allowance of the center front.
I ve also decided to add real pockets, rather than just slits, and for
some reason I decided to add them by hand after I had sewn the dress, so
I ve left opening in the side back seams, where the slits were in the
cotton dress. I ve also already worn the dress, but haven t added the
pockets yet, as I m still debating about their shape. This will be fixed
in the near future.
Another thing that will have to be fixed is the trim situation: I like
the fringe at the bottom, and I had enough to also make a belt, but this
makes the top of the dress a bit empty. I can t use the same fringe
tape, as it is too wide, but it would be nice to have something smaller
that matches the patterned part. And I think I can make something
suitable with tablet weaving, but I m not sure on which materials to
use, so it will have to be on hold for a while, until I decide on the
supplies and have the time for making it.
Another improvement I d like to add are detached sleeves, both matching
(I should still have just enough fabric) and contrasting, but first I
want to learn more about real kirtle construction, and maybe start
making sleeves that would be suitable also for a real kirtle.
Meanwhile, I ve worn it on Christmas (over my 1700s menswear shirt with
big sleeves) and may wear it again tomorrow (if I bother to dress up to
spend New Year s Eve at home :D )
Read all parts of the series
Part 1
// Part 2
// Part 3
// Part 4
I ve been wanting to write this post for over a year, but lacked energy
and time. Before 2023 is coming to an end, I want to close this series
and share some more insights with you and hopefully provide you with a
smile here and there.
For this round of interviews, four more kids around the ages of 8 to 13
were interviewed, 3 of them have a US background these 3
interviews were done by a friend who recorded these interviews for me,
thank you!
As opposed to the previous interviews, these four kids have parents who
have a more technical professional background. And this seems to make a
difference: even though none of these kids actually knew much better how
the internet really works than the other kids that I interviewed,
specifically in terms of physical infrastructures, they were much more
confident in using the internet, they were able to more correctly name
things they see on the internet, and they had partly radical ideas about
what they would like to learn or what they would want to change about
the internet!
Looking at these results, I think it s safe to say that social
reproduction is at work and that we need to improve education for kids
who do not profit from this type of social and cultural wealth at home.
But let s dive into the details.
The boy and the aliens
(I ll be mostly transribing the interview, which was short, and which I
find difficult to sum up because some of the questions are written
in a way to encourage the kids to tell a story, and this particular kid
had a thing going on with aliens.)
He s a 13 year old boy living in the US. He has his own computer, which
technically belongs to his school but can be used by him freely and he
can also take it home.
He s the first kid saying he s reading the news on the internet; he does
not actually use social media, besides sometimes watching TikTok.
When asked: Imagine that aliens land and come to you and say: We ve
heard about this internet thing you all talk about, what is it? What do
you tell them? he replied:
Well, I mean they re aliens, so I don t know if I wanna tell them
much.
(Parents laughing in the background.)
Let s assume they re friendly aliens.
Well, I would say you can look anything up and play different games.
And there are alien games. But mostly the enemies are aliens which you
might be a little offended by. And you can get work done, if you
needed to spy on humans. There s cameras, you can film yourself, yeah.
And you can text people and call people who are far away
And what would be in a drawing that would explain the internet?
And here s what he explains about his drawing:
First, I would draw what I see when you open a new tab, Google.
On the right side of the drawing we see something like Twitch.
I don t wanna offend the aliens, but you can film yourself playing a
game, so here is the alien and he s playing a game.
And then you can ask questions like: How did aliens come to the Earth? And
the answer will be here (below). And there ll be different websites
that you can click on.
And you can also look up Who won the alien contest? And that would
be Usmushgagu, and that guy won the alien contest.
Do you think the information about alien intergalactic football is
already on the internet?
Yeah! That s how fast the internet is.
On the bottom of the drawing we see an iPhone and an instant messaging software.
There s also a device called an iPhone and with it you can text your
friends. So here s the alien asking: How was ur day? and the friend
might answer IDK [I don t know].
Imagine that a wise and friendly dragon could teach you one thing about
the internet that you ve always wanted to know. What would you ask the
dragon to teach you about?
Is there a way you don t have to pay for any channels or subscriptions
and you can get through any firewall?
Imagine you could make the internet better for everyone. What would you do first?
Well you wouldn t have to pay for it [paywalls].
Can you describe what happens between your device and a website when you
visit a website?
Well, it takes 0.025 seconds. [ ] It s connecting.
Wow, that s indeed fast! We were not able to obtain more details about
what is that fast thing that s happening exactly
The software engineer s kid
This kid identifies as neither boy nor girl, is 10 years old and lives
in Germany. Their father works as a software engineer, or in the words
of the child:
My dad knows everything.
The kid has a laptop and a mobile phone, both with parental
control they don t think that the controlling is fair.
This kid uses the internet foremostly for listening to music and
watching prank channels on Youtube but also to work with Purple Mash (a
teaching platform for the computing curriculum used at their school),
finding 3d printing models (that they ask their father to print with
them because they did not manage to use the printer by themselves yet).
Interestingly, and very differently from the non-tech-parent kids, this
kid insists on using Firefox and Signal - the latter is not only used by
their dad to tell them to come downstairs for dinner, but also to call
their grandmother. This kid also shops online, with the help of the
father who does the actual shopping for them using money that the kid
earned by reading books.
If you would need to explain to an alien who has landed on Earth what
the internet is, what would you tell them?
The internet is something where you search, for example, you can look
for music. You can also watch videos from around the world, and you
can program stuff.
Like most of the kids interviewed, this kid uses the internet mostly for
media consumption, but with the difference that they also engage with
technology by way of programming using Purple Mash.
In their drawing we see a Youtube prank channel on a screen, an external
trackpad on the right (likely it s not a touch screen), and headphones.
Notice how there is no keyboard, or maybe it s folded away.
If you could ask a nice and friendly dragon anything you d like to
learn about the internet, what would it be?
How do I shutdown my dad s computer forever?
And what is it that he would do to improve the internet for
everyone?
Contrary to the kid living in the US, they think that
It takes too much time to load stuff!
I wonder if this kid experiences the internet as being slow because they use
the mobile network or because their connection somehow gets throttled as a
way to control media consumption, or if the German internet
infrastructure is just so much worse in certain regions
If you could improve the internet for everyone, what would you do
first?
I d make a new Firefox app that loads the internet much faster.
The software engineer s daughter
This girl is only 8 years old, she hates unicorns, and her dad is also a
software engineer. She uses a smartphone, controlled by her parents. My
impression of the interview is that at this age, kids slightly mix up
the internet with the devices that they use to access the internet.
In her drawing, we see again Google - it s clearly everywhere - and also
the interfaces for calling and texting someone.
To explain what the internet is, besides the fact that one
can use it for calling and listening to music, she says:
[The internet] is something that you can [use to] see someone who is
far away, so that you don t need to take time to get to them.
Now, that s a great explanation, the internet providing the possibility
for communication over a distance :)
If she could ask a friendly dragon something she always wanted to know,
she d ask how to make her phone come alive:
that it can talk to you, that it can see you, that it can smile and
has eyes. It s like a new family member, you can talk to it.
Sounds a bit like Siri, Alexa, or Furby, doesn t it?
If you could improve the internet for everyone, what would you do
first?
She d have the phone be able to decide over her free time, her phone
time. That would make the world better, not for the kids, but certainly
for the parents.
The antifascist kid
This German boy s dad has a background in electrotechnical engineering.
He s 10 years old and he told me he s using the internet a lot for
searching things for example about his passion: the firefighters. For
him, the internet is:
An invisible world. A virtual world. But there s also the darknet.
He told me he always watches that German show on public TV for kids that
explains stuff: Checker Tobi. (In 2014, Checker Tobi actually produced an episode about the
internet, which I d criticize for having only male characters,
except for one female character: a secretary Google, a nice and
friendly woman guiding the way through the huge library that s the
internet )
This kid was the only one interviewed who managed to actually explain
something about the internet, or rather about the hypertextual structure
of the web. When I asked him to draw the internet, he made a drawing of
a pin board. He explained:
Many items are attached to the pin board, and on the top left corner
there s a computer, for example with Youtube and one can navigate like
that between all the items, and start again from the beginning when
done.
When I asked if he knew what actually happens between the device and a
website he visits, he put forth the hypothesis of the existence of some
kind of
Waves, internet waves - all this stuff somehow needs to be transmitted.
What he d like to learn:
How to get into the darknet? How do you become a Whitehat? I ve heard
these words on the internet, the internet makes me clever.
And what would he change on the internet if he could?
I want that right wing extreme stuff is not accessible anymore, or
at least, that it rains turds ( Kackw rste ) whenever people watch
such stuff. Or that people are always told: This video is scum.
I suspect that his father has been talking with him about these things,
and maybe these are also subjects he heard about when listening to punk
music (he told me he does), or browsing Youtube.
Future projects
To me this has been pretty insightful. I might share some more internet
drawings by adults in the future, which I think are also really
interesting, as they show very different things depending on the age of
the person.
I ve been using the information gathered to work on a children s
book which I hope to be able to share with you next year.
A Study in Scarlet is the short mystery novel (probably a novella,
although I didn't count words) that introduced the world to Sherlock
Holmes.
I'm going to invoke the 100-year-rule and discuss the plot of this book
rather freely on the grounds that even someone who (like me prior to a few
days ago) has not yet read it is probably not that invested in avoiding
all spoilers. If you do want to remain entirely unspoiled, exercise
caution before reading on.
I had somehow managed to avoid ever reading anything by Arthur Conan
Doyle, not even a short story. I therefore couldn't be sure that some of
the assertions I was making in my review of A Study in Honor were correct. Since A Study in Scarlet
would be quick to read, I decided on a whim to do a bit of research and
grab a free copy of the first Holmes novel. Holmes is such a part of
English-speaking culture that I thought I had a pretty good idea of what
to expect.
This was largely true, but cultural osmosis had somehow not prepared me
for the surprise Mormons.
A Study in Scarlet establishes the basic parameters of a Holmes
story: Dr. James Watson as narrator, the apartment he shares with Holmes
at 221B Baker Street, the Baker Street Irregulars, Holmes's competition
with police detectives, and his penchant for making leaps of logical
deduction from subtle clues. The story opens with Watson meeting Holmes,
agreeing to split the rent of a flat, and being baffled by the apparent
randomness of Holmes's fields of study before Holmes reveals he's a
consulting detective. The first case is a murder: a man is found dead in
an abandoned house, without a mark on him although there are blood
splatters on the walls and the word "RACHE" written in blood.
Since my only prior exposure to Holmes was from cultural references and a
few TV adaptations, there were a few things that surprised me. One is
that Holmes is voluble and animated rather than aloof. Doyle is clearly
going for passionate eccentric rather than calculating mastermind.
Another is that he is intentionally and unabashedly ignorant on any topic
not related to solving mysteries.
My surprise reached a climax, however, when I found incidentally that
he was ignorant of the Copernican Theory and of the composition of the
Solar System. That any civilized human being in this nineteenth
century should not be aware that the earth travelled round the sun
appeared to be to me such an extraordinary fact that I could hardly
realize it.
"You appear to be astonished," he said, smiling at my expression of
surprise. "Now that I do know it I shall do my best to forget it."
"To forget it!"
"You see," he explained, "I consider that a man's brain originally is
like a little empty attic, and you have to stock it with such
furniture as you chose. A fool takes in all the lumber of every sort
that he comes across, so that the knowledge which might be useful to
him gets crowded out, or at best is jumbled up with a lot of other
things so that he has a difficulty in laying his hands upon it. Now
the skilful workman is very careful indeed as to what he takes into
his brain-attic. He will have nothing but the tools which may help
him in doing his work, but of these he has a large assortment, and all
in the most perfect order. It is a mistake to think that that little
room has elastic walls and can distend to any extent. Depend upon it
there comes a time when for every addition of knowledge you forget
something that you knew before. It is of the highest importance,
therefore, not to have useless facts elbowing out the useful ones."
This is directly contrary to my expectation that the best way to make
leaps of deduction is to know something about a huge range of topics so
that one can draw unexpected connections, particularly given the
puzzle-box construction and odd details so beloved in classic mysteries.
I'm now curious if Doyle stuck with this conception, and if there were any
later mysteries that involved astronomy.
Speaking of classic mysteries, A Study in Scarlet isn't quite one,
although one can see the shape of the genre to come. Doyle does not "play
fair" by the rules that have not yet been invented. Holmes at most points
knows considerably more than the reader, including bits of evidence that
are not described until Holmes describes them and research that Holmes
does off-camera and only reveals when he wants to be dramatic. This is
not the sort of story where the reader is encouraged to try to figure out
the mystery before the detective.
Rather, what Doyle seems to be aiming for, and what Watson attempts
(unsuccessfully) as the reader surrogate, is slightly different: once
Holmes makes one of his grand assertions, the reader is encouraged to
guess what Holmes might have done to arrive at that conclusion. Doyle
seems to want the reader to guess technique rather than outcome, while
providing only vague clues in general descriptions of Holmes's behavior at
a crime scene.
The structure of this story is quite odd. The first part is roughly what
you would expect: first-person narration from Watson, supposedly taken
from his journals but not at all in the style of a journal and explicitly
written for an audience. Part one concludes with Holmes capturing and
dramatically announcing the name of the killer, who the reader has never
heard of before. Part two then opens with... a western?
In the central portion of the great North American Continent there
lies an arid and repulsive desert, which for many a long year served
as a barrier against the advance of civilization. From the Sierra
Nevada to Nebraska, and from the Yellowstone River in the north to the
Colorado upon the south, is a region of desolation and silence. Nor
is Nature always in one mood throughout the grim district. It
comprises snow-capped and lofty mountains, and dark and gloomy
valleys. There are swift-flowing rivers which dash through jagged
ca ons; and there are enormous plains, which in winter are white with
snow, and in summer are grey with the saline alkali dust. They all
preserve, however, the common characteristics of barrenness,
inhospitality, and misery.
First, I have issues with the geography. That region contains some of the
most beautiful areas on earth, and while a lot of that region is arid,
describing it primarily as a repulsive desert is a bit much. Doyle's
boundaries and distances are also confusing: the Yellowstone is a
northeast-flowing river with its source in Wyoming, so the area between it
and the Colorado does not extend to the Sierra Nevadas (or even to Utah),
and it's not entirely clear to me that he realizes Nevada exists.
This is probably what it's like for people who live anywhere else in the
world when US authors write about their country.
But second, there's no Holmes, no Watson, and not even the pretense of a
transition from the detective novel that we were just reading. Doyle just
launches into a random western with an omniscient narrator. It features a
lean, grizzled man and an adorable child that he adopts and raises into a
beautiful free spirit, who then falls in love with a wild gold-rush
adventurer. This was written about 15 years before the first critically
recognized western novel, so I can't blame Doyle for all the cliches here,
but to a modern reader all of these characters are straight from central
casting.
Well, except for the villains, who are the Mormons. By that, I don't mean
that the villains are Mormon. I mean Brigham Young is the on-page
villain, plotting against the hero to force his adopted daughter into a
Mormon harem (to use the word that Doyle uses repeatedly) and ruling Salt
Lake City with an iron hand, border guards with passwords (?!), and secret
police. This part of the book was wild. I was laughing out-loud
at the sheer malevolent absurdity of the thirty-day countdown to marriage,
which I doubt was the intended effect.
We do eventually learn that this is the backstory of the murder, but we
don't return to Watson and Holmes for multiple chapters. Which leads me
to the other thing that surprised me: Doyle lays out this backstory, but
then never has his characters comment directly on the morality of it, only
the spectacle. Holmes cares only for the intellectual challenge (and for
who gets credit), and Doyle sets things up so that the reader need not
concern themselves with aftermath, punishment, or anything of that sort.
I probably shouldn't have been surprised this does fit with the Holmes
stereotype but I'm used to modern fiction where there is usually at
least some effort to pass judgment on the events of the story. Doyle
draws very clear villains, but is utterly silent on whether the murder is
justified.
Given its status in the history of literature, I'm not sorry to have read
this book, but I didn't particularly enjoy it. It is very much of its
time: everyone's moral character is linked directly to their physical
appearance, and Doyle uses the occasional racial stereotype without a
second thought. Prevailing writing styles have changed, so the prose
feels long-winded and breathless. The rivalry between Holmes and the
police detectives is tedious and annoying. I also find it hard to read
novels from before the general absorption of techniques of emotional
realism and interiority into all genres. The characters in A Study
in Scarlet felt more like cartoon characters than fully-realized human
beings.
I have no strong opinion about the objective merits of this book in the
context of its time other than to note that the sudden inserted western
felt very weird. My understanding is that this is not considered one of
the better Holmes stories, and Holmes gets some deeper characterization
later on. Maybe I'll try another of Doyle's works someday, but for now my
curiosity has been sated.
Followed by The Sign of the Four.
Rating: 4 out of 10
Wintersmith is the 35th Discworld novel and the 3rd Tiffany Aching
novel. You could probably start here, since understanding the backstory
isn't vital for following the plot, but I'm not sure why you would.
Tiffany is now training with Miss Treason, a 113-year-old witch who is
quite different in her approach from Miss Level, Tiffany's mentor in
A Hat Full of Sky. Miss Level was the
unassuming and constantly helpful glue that held the neighborhood
together. Miss Treason is the judge; her neighbors are scared of her and
proud of being scared of her, since that means they have a proper witch
who can see into their heads and sort out their problems. On the surface,
they're quite different; part of the story of this book is Tiffany
learning to see the similarities.
First, though, Miss Treason rushes Tiffany to a strange midnight Morris
Dance, without any explanation. The Morris Dance usually celebrates the
coming of spring and is at the center of a village party, so Tiffany is
quite confused by seeing it danced on a dark and windy night in late
autumn. But there is a hole in the dance where the Fool normally is, and
Tiffany can't keep herself from joining it.
This proves to be a mistake. That space was left for someone very
different from Tiffany, and now she's entangled herself in deep magic that
she doesn't understand.
This is another Pratchett novel where the main storyline didn't do much
for me. All the trouble stems from Miss Treason being maddeningly opaque,
and while she did warn Tiffany, she did so in that way that guarantees a
protagonist of a middle-grade novel will ignore. The Wintersmith is a
boring, one-note quasi-villain, and the plot mainly revolves around
elemental powers being dumber than a sack of hammers.
The one thing I will say about the main plot is that the magic Tiffany
danced into is entangled with courtship and romance, Tiffany turns
thirteen over the course of this book, and yet this is not weird and
uncomfortable reading the way it would be in the hands of many other
authors. Pratchett has a keen eye for the age range that he's targeting.
The first awareness that there is such a thing as romance that might be
relevant to oneself pairs nicely with the Wintersmith's utter confusion at
how Tiffany's intrusion unbalanced his dance. This is a very specific age
and experience that I think a lot of authors would shy away from,
particularly with a female protagonist, and I thought Pratchett handled it
adroitly. I personally found the Wintersmith's awkward courting tedious
and annoying, but that's more about me than about the book.
As with A Hat Full of Sky, though, everything other than the main
plot was great. It is becoming obvious how much Tiffany and Granny
Weatherwax have in common, and that Granny Weatherwax recognizes this and
is training Tiffany herself. This is high-quality coming-of-age material,
not in the traditional fantasy sense of chosen ones and map explorations,
but in the sense of slowly-developing empathy and understanding of people
who think differently than you do. Tiffany, like Granny Weatherwax, has
very little patience with nonsense, and her irritation with stupidity is
one of her best characteristics. But she's learning how to blunt it long
enough to pay attention, and to understand how people she doesn't like can
still be the right people for specific situations.
I particularly loved how Granny carries on with a feud at the same time
that Tiffany is learning to let go of one. It's not a contradiction or
hypocrisy; it's a sign that Tiffany is entitled to her judgments and
feelings, but has to learn how to keep them in their place and not let
them take over.
One of the great things about the Tiffany Aching books is that the
villages are also characters. We don't see that much of the individual
people, but one of the things Tiffany is learning is how to see the
interpersonal dynamics and patterns of village life. Somehow the feelings
of irritation and exasperation fade once you understand people's motives
and see more sides to their character.
There is a lot more Nanny Ogg in this book than there has been in the last
few, and that reminded me of how much I love her character. She has a
completely different approach than Granny Weatherwax, but it's just as
effective in different ways. She's also the perfect witch to have around
when you've stumbled into a stylized love story that you don't want to be
a part of, and yet find oddly fascinating.
It says something about the skill of Pratchett's characterization that I
could enjoy a book this much while having no interest in the main plot.
The Witches have always been great characters, but somehow they're even
better when seen through Tiffany's perspective. Good stuff; if you liked
any of the other Tiffany Aching books, you will like this as well.
Followed by Making Money in publication order. The next Tiffany
Aching novel is I Shall Wear Midnight.
Rating: 8 out of 10
Some nostalgic memories
I was not in the original AppStream meeting, since in 2011 I was extremely busy with finals preparations and ball organization in high school, but I still vividly remember sitting at school in the students lounge during a break and trying to catch the really choppy live stream from the meeting on my borrowed laptop (a futile exercise, I watched parts of the blurry recording later).
I was extremely passionate about getting software deployment to work better on Linux and to improve the overall user experience, and spent many hours on the PackageKit IRC channel discussing things with many amazing people like Richard Hughes, Daniel Nicoletti, Sebastian Heinlein and others.
At the time I was writing a software deployment tool called Listaller this was before Linux containers were a thing, and building it was very tough due to technical and personal limitations (I had just learned C!). Then in university, when I intended to recreate this tool, but for real and better this time as a new project called Limba, I needed a way to provide metadata for it, and AppStream fit right in! Meanwhile, Richard Hughes was tackling the UI side of things while creating GNOME Software and needed a solution as well. So I implemented a prototype and together we pretty much reshaped the early specification from the original meeting into what would become modern AppStream.
Back then I saw AppStream as a necessary side-project for my actual project, and didn t even consider me as the maintainer of it for quite a while (I hadn t been at the meeting afterall). All those years ago I had no idea that ultimately I was developing AppStream not for Limba, but for a new thing that would show up later, with an even more modern design called Flatpak. I also had no idea how incredibly complex AppStream would become and how many features it would have and how much more maintenance work it would be and also not how ubiquitous it would become.
The modern Linux desktop uses AppStream everywhere now, it is supported by all major distributions, used by Flatpak for metadata, used for firmware metadata via Richard s fwupd/LVFS, runs on every Steam Deck, can be found in cars and possibly many places I do not know yet.
What is new in 1.0?
API breaks
The most important thing that s new with the 1.0 release is a bunch of incompatible changes. For the shared libraries, all deprecated API elements have been removed and a bunch of other changes have been made to improve the overall API and especially make it more binding-friendly. That doesn t mean that the API is completely new and nothing looks like before though, when possible the previous API design was kept and some changes that would have been too disruptive have not been made. Regardless of that, you will have to port your AppStream-using applications. For some larger ones I already submitted patches to build with both AppStream versions, the 0.16.x stable series as well as 1.0+.
For the XML specification, some older compatibility for XML that had no or very few users has been removed as well. This affects for example release elements that reference downloadable data without an artifact block, which has not been supported for a while. For all of these, I checked to remove only things that had close to no users and that were a significant maintenance burden. So as a rule of thumb: If your XML validated with no warnings with the 0.16.x branch of AppStream, it will still be 100% valid with the 1.0 release.
Another notable change is that the generated output of AppStream 1.0 will always be 1.0 compliant, you can not make it generate data for versions below that (this greatly reduced the maintenance cost of the project).
Developer element
For a long time, you could set the developer name using the top-level developer_name tag. With AppStream 1.0, this is changed a bit. There is now a developer tag with a name child (that can be translated unless the translate="no" attribute is set on it). This allows future extensibility, and also allows to set a machine-readable id attribute in the developer element. This permits software centers to group software by developer easier, without having to use heuristics. If we decide to extend the developer information per-app in future, this is also now possible. Do not worry though the developer_name tag is also still read, so there is no high pressure to update. The old 0.16.x stable series also has this feature backported, so it can be available everywhere. Check out the developer tag specification for more details.
Scale factor for screenshots
Screenshot images can now have a scale attribute, to indicate an (integer) scaling factor to apply. This feature was a breaking change and therefore we could not have it for the longest time, but it is now available. Please wait a bit for AppStream 1.0 to become deployed more widespread though, as using it with older AppStream versions may lead to issues in some cases. Check out the screenshots tag specification for more details.
Screenshot environments
It is now possible to indicate the environment a screenshot was recorded in (GNOME, GNOME Dark, KDE Plasma, Windows, etc.) via an environment attribute on the respective screenshot tag. This was also a breaking change, so use it carefully for now! If projects want to, they can use this feature to supply dedicated screenshots depending on the environment the application page is displayed in. Check out the screenshots tag specification for more details.
References tag
This is a feature more important for the scientific community and scientific applications. Using the references tag, you can associate the AppStream component with a DOI (Digital object identifier) or provide a link to a CFF file to provide citation information. It also allows to link to other scientific registries. Check out the references tag specification for more details.
Release tags
Releases can have tags now, just like components. This is generally not a feature that I expect to be used much, but in certain instances it can become useful with a cooperating software center, for example to tag certain releases as long-term supported versions.
Multi-platform support
Thanks to the interest and work of many volunteers, AppStream (mostly) runs on FreeBSD now, a NetBSD port exists, support for macOS was written and a Windows port is on its way! Thank you to everyone working on this
Better compatibility checks
For a long time I thought that the AppStream library should just be a thin layer above the XML and that software centers should just implement a lot of the actual logic. This has not been the case for a while, but there was still a lot of complex AppStream features that were hard for software centers to implement and where it makes sense to have one implementation that projects can just use.
The validation of component relations is one such thing. This was implemented in 0.16.x as well, but 1.0 vastly improves upon the compatibility checks, so you can now just run as_component_check_relations and retrieve a detailed list of whether the current component will run well on the system. Besides better API for software developers, the appstreamcli utility also has much improved support for relation checks, and I wrote about these changes in a previous post. Check it out!
With these changes, I hope this feature will be used much more, and beyond just drivers and firmware.
So much more!
The changelog for the 1.0 release is huge, and there are many papercuts resolved and changes made that I did not talk about here, like us using gi-docgen (instead of gtkdoc) now for nice API documentation, or the many improvements that went into better binding support, or better search, or just plain bugfixes.
Outlook
I expect the transition to 1.0 to take a bit of time. AppStream has not broken its API for many, many years (since 2016), so a bunch of places need to be touched even if the changes themselves are minor in many cases. In hindsight, I should have also released 1.0 much sooner and it should not have become such a mega-release, but that was mainly due to time constraints.
So, what s in it for the future? Contrary to what I thought, AppStream does not really seem to be done and fetature complete at a point, there is always something to improve, and people come up with new usecases all the time. So, expect more of the same in future: Bugfixes, validator improvements, documentation improvements, better tools and the occasional new feature.
Onwards to 1.0.1!
I just had to setup a Brother MFC-J4440DW for a relative. They were replacing an old HP laser printer that mysteriously stopped printing as dark as it should, I don t know whether the HP printer had worn out or if the HP firmware decided to hobble it to make them buy a new printer. In either case HP is well known for shady behaviour with their printer firmware and should be avoided.
The new Brother printer has problems when using wifi and auto DNS. I don t know how much of that was due to the printer itself and how much was due to the wifi AP provided by Foxtel. Anyway it works better with Ethernet and a fixed address (the wifi AP didn t allow me to set a fixed address). I think the main thing was configuring CUPS to connect via the IP address and not use Avahi etc.
One problem I had with printing was that programs like Chrome and LibreOffice would hang for about a minute before printing, that turned out to be due to /etc/cups/lpoptions having the old printer (which had been removed) listed as the default. It would be nice if the web configuration for cups would change that when I set the default printer.
CUPS doesn t seem to support USB printing. If it is possible to get this printer to print via USB then I welcome a comment describing how to do it.
Scanning only seems to work on Ethernet not on USB, the command for scanning that I ended up with was scanimage -d escl:http://10.0.0.3:80 . Again I welcome comments from anyone who has had success in scanning via USB. There are probably some Linux users who would find it really inconvenient to setup a network interface specifically for printing. It s easy for me as I have a pile of spare ethernet cards and a box of cables but some people would have to buy this. Also it s disappointing that Brother didn t include an Ethernet cable or a USB cable in the box. But if that makes it cheaper I can deal with that. The resolution for scanning is only 832*1163 and it s black and white, I think that generally scanning in printers is a bad idea, taking a photo with a phone is a better way of scanning documents.
Generally this printer works well and is cheap at only $299, a price for disposable hardware by today s standards.
There are Debian packages from Brother for the printer. The scanner package looks like it just configures scanimage, and I m not sure whether the stock version of CUPS in Debian will do it without the Brother package. One thing I found interesting is that the package mfcj4440dwpdrv has the following shell code in the postinst to label for SE Linux:
if [ "$(which semanage 2> /dev/null)" != '' ];then
semanage fcontext -a -t cupsd_rw_etc_t '/opt/brother/Printers/mfcj4440dw/inf(/.*)?'
semanage fcontext -a -t bin_t '/opt/brother/Printers/mfcj4440dw/lpd(/.*)?'
semanage fcontext -a -t bin_t '/opt/brother/Printers/mfcj4440dw/cupswrapper(/.*)?'
if [ "$(which restorecon 2> /dev/null)" != '' ];then
restorecon -R /opt/brother/Printers/mfcj4440dw
fi
fi
This is the first time I ve seen a Debian package from a hardware vendor with SE Linux specific code. I can t just add those rules to the Debian policy as that would make the semanage commands fail to add an identical context spec will break the postinst.
In the latest policy I m uploading to Debian/Unstable (version 2.20231010-1) there are the following 3 lines to deal with this, the first was already there for some time and the other 2 I just added:
A Hat Full of Sky is the 32nd Discworld novel and the second
Tiffany Aching young adult novel. You should not start here, but you
could start with The Wee Free Men. As
with that book, some parts of the story carry more weight if you are
already familiar with Granny Weatherwax.
Tiffany is a witch, but she needs to be trained. This is normally done by
apprenticeship, and in Tiffany's case it seemed wise to give her exposure
to more types of witching. Thus, Tiffany, complete with new boots and a
going-away present from the still-somewhat-annoying Roland, is off on an
apprenticeship to the sensible Miss Level. (The new boots feel wrong and
get swapped out for her concealed old boots at the first opportunity.)
Unbeknownst to Tiffany, her precocious experiments with leaving her body
as a convenient substitute for a mirror have attracted something very bad,
something none of the witches are expecting. The Nac Mac Feegle know a
hiver as soon as they feel it, but they have a new kelda now, and she's
not sure she wants them racing off after their old kelda.
Terry Pratchett is very good at a lot of things, but I don't think
villains are one of his strengths. He manages an occasional memorable one
(the Auditors, for example, at least before the whole chocolate thing),
but I find most of them a bit boring. The hiver is one of the boring
ones. It serves mostly as a concretized metaphor about the temptations of
magical power, but those temptations felt so unlike the tendencies of
Tiffany's personality that I didn't think the metaphor worked in the
story.
The interesting heart of this book to me is the conflict between Tiffany's
impatience with nonsense and Miss Level's arguably excessive willingness
to help everyone regardless of how demanding they get. There's something
deeper in here about female socialization and how that interacts with
Pratchett's conception of witches that got me thinking, although I don't
think Pratchett landed the point with full force.
Miss Level is clearly a good witch to her village and seems comfortable
with how she lives her life, so perhaps they're not taking advantage of
her, but she thoroughly slots herself into the helper role. If Tiffany
attempted the same role, people would be taking advantage of her,
because the role doesn't fit her. And yet, there's a lesson here she
needs to learn about seeing other people as people, even if it wouldn't be
healthy for her to move all the way to Miss Level's mindset. Tiffany is a
precocious kid who is used to being underestimated, and who has reacted by
becoming independent and somewhat judgmental. She's also had a taste of
real magical power, which creates a risk of her getting too far into her
own head. Miss Level is a fount of empathy and understanding for the
normal people around her, which Tiffany resists and needed to learn.
I think Granny Weatherwax is too much like Tiffany to teach her that. She
also has no patience for fools, but she's older and wiser and knows
Tiffany needs a push in that direction. Miss Level isn't a destination,
but more of a counterbalance.
That emotional journey, a conclusion that again focuses on the role of
witches in questions of life and death, and Tiffany's fascinatingly spiky
mutual respect with Granny Weatherwax were the best parts of this book for
me. The middle section with the hiver was rather tedious and forgettable,
and the Nac Mac Feegle were entertaining but not more than that. It felt
like the story went in a few different directions and only some of them
worked, in part because the villain intended to tie those pieces together
was more of a force of nature than a piece of Tiffany's emotional puzzle.
If the hiver had resonated with the darker parts of Tiffany's natural
personality, the plot would have worked better. Pratchett was gesturing
in that direction, but he never convinced me it was consistent with what
we'd already seen of her.
Like a lot of the Discworld novels, the good moments in A Hat Full
of Sky are astonishing, but the plot is somewhat forgettable. It's still
solidly entertaining, though, and if you enjoyed The Wee Free Men,
I think this is slightly better.
Followed by Going Postal in publication order. The next Tiffany
Aching novel is Wintersmith.
Rating: 8 out of 10