Joachim Breitner: Do surprises get larger?
| Publisher: | Ballantine Books |
| Copyright: | 2009 |
| ISBN: | 0-553-59217-3 |
| Format: | Mass market |
| Pages: | 438 |
hugo to generate the site and rsync everything to the web server. A final git sync closes the publication part.
After a day or two, I come back to read the blog on the website. This entails another round finding and fixing trivial mistakes. After this, it s set for good.
Nowadays, in addition to being on my blog, everything is syndicated on Planet FSCI and Planet Debian, which has given it more visibility. As someone who s into infrastructure and Internet as a lot, I do pay attention to logs on my server, but as a disconnected exercise to if the blog is being read or not. More hits on the blog doesn t translate to any gratification for me, at least for writers point of view. Occasionally, people do mention my blog, which does flatter me. Four years and nearly a hundred posts later, I still wonder how I kept on writing for this long.
Chaque dition de Debian b n ficie d'un nouveau th me brillant visible sur
l' cran d'amor age, l' cran de connexion et, de la fa on la plus vidente,
sur le fond d' cran. Debian pr voit de publier Trixie, sa prochaine version,
durant l'ann e venir. Et, comme toujours, nous avons besoin de vous pour
cr er son th me ! Vous avez l'occasion de concevoir un th me qui inspirera
des milliers de personnes quand ils travaillent sur leur machine Debian.
Pour disposer des d tails les plus r cents, veuillez vous r f rer la page du
wiki.
Nous voudrions profiter de cette occasion pour remercier Juliette
Taka Belin pour avoir cr le
th me Emerald pour Bookworm.
La date limite pour les propositions est le 19 septembre 2024.
Le th me est habituellement choisi en se basant sur ce qui para t le plus :
Shortly before coming back from Argentina, I got news of a very interesting set
of little machines, the MilkV Duo. The specs looked really
interesting and fun to play with, particularly those of the bigger model,
Milk-V DUO S Some of the highlights:
esptool, the Espressif SoC serial bootloader utility, tends to dislike cheap Flash chips attached to the various incarnations of the ESP32 chip family. And it seems to dislike them even more when running esptool on Linux than on other OSs.
The common error mode is seeing it break at the 2MB barrier when trying to dump (esptool read_flash) a 4MB flash configuration.
esptool.py v4.7.0 Serial port /dev/ttyUSB0 Connecting.... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz [..] Detected flash size: 4MB [..] 2097152 (50 %) A fatal error occurred: Failed to read flash block (result was 01090000: CRC or checksum was invalid)typically at the 2MB barrier. I found the solution in a rather unrelated esptool Github issue: Create an
esptool.cfg file in the project directory (from where you will run esptool):
timeout = 30 is the setting that fixed reading flash memory via esptool read_flash for me.
When your esptool.cfg is read, esptool will tell you so in its second line of output:
esptool.py v4.7.0 Loaded custom configuration from /home/dl/[..]/Embedded_dev/ESP-32_Wemos/esptool.cfg Found 1 serial ports Serial port /dev/ttyUSB0 Connecting...... [..]
Thank you Radim Karnis and wibbit from the Github issue linked above.
As most Free Software doesn t have commercial backing and require heavy downloads, the concept of software download mirrors helps take the traffic load off of the primary server, leading to geographical redundancy, higher availability and faster download in general.So whenever someone wants to download a particular (mirrored) software and click download, upstream redirects the download to one of the mirror server which is geographical (or in other parameters) nearby to the user, leading to faster downloads and load sharing amongst all mirrors. Since the time I got into Linux and servers, I always wanted to help the community somehow, and mirroring seemed to be the most obvious thing. India seems to be a country which has traditionally seen less number of public download mirrors. IITB, TiFR, and some of the public institutions used to host them for popular Linux and Free Softwares, but they seem to be diminishing these days. In the last months of 2021, I started using Termux and saw that it had only a few mirrors (back then). I tried getting a high capacity, high bandwidth node in budget but it was hard in India in 2021-22. So after much deliberation, I decided to go where it s available and chose a German hosting provider with the thought of adding India node when conditions are favorable (thankfully that happened, and India node is live too now.). Termux required only 29 GB of storage, so went ahead and started mirroring it. I raised this issue in Termux s GitHub repository in January 2022. This blog post chronicles the start of the mirror. Termux has high request counts from a mirror point of view. Each Termux client, usually checks every mirror in selected group for availability before randomly selecting one for download (only other case is when client has explicitly selected a single mirror using
termux-repo-change). The mirror started getting thousands of requests daily due to this but only a small percentage would actually get my mirror in selection, so download traffic was lower. Similar thing happened with OSMC too (which I started mirroring later).
With this start, I started exploring various project that would be benefit from additional mirrors. Public information from Academic Computer Club in Ume s mirror and Freedif s mirror stats helped to figure out storage and bandwidth requirements for potential projects. Fun fact, Academic Computer Club in Ume (which is one of the prominent Debian, Ubuntu etc.) mirror, now has 200 Gbits/s uplink to the internet through SUNET.
Later, I migrated to a different provider for better speeds and added LibreSpeed test on the mirror server. Those were fun times. Between OSMC, Termux and LibreSpeed, I was getting almost 1.2 millions hits/day on the server at its peak, crossing for the first time a TB/day traffic number.
Next came Blender, which took the longest time to set up of around 9 10 months. Blender had a push-trigger requirement for rsync from upstream that took quite some back and forth. It now contributes the most amount of traffic on the mirror. On release days, mirror does more than 3 TB/day and normal days, it hovers around 2 TB/day. Gimp project is the latest addition.
At one time, the mirror traffic touched 4.97 TB/day traffic number. That s when I decided on dropping LibreSpeed server to solely focus on mirroring for now, keeping the bandwidth allotment for serving downloads only.
The mirror projects selection grew organically. I used to reach out many projects discussing the need of for additional mirrors. Some projects outright denied mirroring request as Germany already has a good academic mirrors boosting 20-25 Gbits/s speeds from FTP era, which seems fair. Finding the niche was essential to only add softwares, which would truly benefit from additional capacity. There were months when nothing much would happen with the mirror, rsync would continue to update the mirror while nginx would keep on serving the traffic. Nowadays, the mirror pushes around 70 TB/month. I occasionally check logs, vnstat, add new security stuff here and there and pay the bills. It now saturates the Gigabit link sometimes and goes beyond that, peaking around 1.42 Gbits/s (the hosting provider seems to be upping their game). The plan is to upgrade the link to better speeds.
In hindsight, the statistics look amazing, hundreds of TBs of traffic served from the mirror, month after month. That does show that there s still an appetite for public mirrors in time of commercially donated CDNs and GitHub. The world could have done with one less mirror, but it saved some time, lessened the burden for others, while providing redundancy and traffic localization with one additional mirror. And it s fun for someone like me who s into infrastructure that powers the Internet. Now, I ll try focusing and expanding the India mirror, which in itself started pushing almost half a TB/day. Long live Free Software and public download mirrors.
It s been a while since I played with something new been stuck in a bit of a
rut with radios recently - working on refining and debugging stuff I mostly
understand for the time being. The other day, I was out getting some food and I
idly wondered how the restaurant pager system worked. Idle curiosity gave way
to the realization that I, in fact, likely had the means and ability to answer
this question, so I bought the first set of the most popular looking restaurant
pagers I could find on eBay, figuring it d be a fun multi-week adventure.
433.92MHz
since it was in the middle of the band, and immediately got deja-vu. Not only
was the signal at 433.92MHz, but throwing the packet into inspectrum gave
me the identical plot of the OOK encoding scheme.
Not just similar identical. The only major difference was the baud rate and
bit structure of the packets, and the only minor difference was the existence
of what I think is a wakeup preamble packet (of all zeros), rather than a
preamble symbol that lasted longer than usual PHY symbol (which makes this
pager system a bit easier to work with than my tree, IMHO).
Getting down to work, I took some measurements to determine what the symbol
duration was over the course of a few packets, I was able to determine the
symbol rate was somewhere around 858 microseconds (0.000858 seconds per
symbol), which is a weird number, but maybe I m slightly off or there s some
larger math I m missing that makes this number satisfyingly round (internal
low cost crystal clock or something? I assume this is some hardware constrait
with the pager?)
Anyway, good enough. Moving along, let s try our hand at a demod let s just
assume it s all the same as the chrismas tree post and demod ones and zeros
the same way here. That gives us 26 bits:
00001101110000001010001000
Now, I know we need at least 10 bits for the base station ID, some number
of bits for the pager ID, and some bits for the command. This was a capture
of me hitting call from a base station ID of 55 to a pager with the ID of
10, so let s blindly look for 10 bit chunks with the numbers we re looking for:
0000110111 0000001010 001000
Jeez. First try. 10 bits for the base station ID (55 in binary is
0000110111), 10 bits for the pager ID (10 in binary is 0000001010), which
leaves us with 6 bits for a command (and maybe something else too?) which is
8 here. Great, cool, let s work off that being the case and revisit it if
we hit bugs.
Besides our data packet, there s also a preamble packet that I ll add in,
in case it s used for signal detection or wakeup or something which is
fairly easy to do since it s the same packet structure as the above, just
all zeros. Very kind of them to leave it with the same number of bits and
encoding scheme it s nice that it can live outside the PHY.
Once I got here, I wrote a quick and dirty modulator, and was able to ring up
pagers! Unmitigated success and good news only downside was that it took me
a single night, and not the multi-week adventure I was looking for. Well, let s
finish the job and document what we ve found for the sake of completeness.
call or F2 operation, the argument is the Pager s ID code,
but for other commands it s a value or an enum, depending. Here s a table
of my by-hand demodulation of all the packet types the base station
produces:
| Type | Cmd Id | Description |
| Call | 8 | Call the pager identified by the id in argument |
| Off | 60 | Request any pagers on the charger power off when power is removed, argument is all zero |
| F2 | 40 | Program a pager to the specified Pager ID (in argument) and base station |
| F3 | 44 | Set the reminder duration in seconds specified in argument |
| F4 | 48 | Set the pager's beep mode to the one in argument (0 is disabled, 1 is slow, 2 is medium, 3 is fast) |
| F5 | 52 | Set the pager's vibration mode to the one in argument (0 is disabled, 1 is enabled) |
Whenever a large corporation disgorges the personal information of millions of people onto the Internet, there is a standard playbook that is followed.
Security is our top priority .
Passwords were hashed .
No credit card numbers were disclosed .
record scratch
Let s talk about that last one a bit.
The potentially impacted data consists of information such as names, addresses, email addresses, phone numbers, and Tile device identification numbers.But don t worry though; even though your home address is now public information
It does not include more sensitive information, such as credit card numbersAaaaaand here is where I get salty.
#
# Debian / libvirt
#
# By default, qemu guests network interfaces are created with the
# trustGuestRxFilters attribute set to no. This setting blocks
# neighbor solicitation and other ipv6 multicast traffic. To enable
# neighbor solicitations, modify your interface definition in your
# guest definition XML.
# For example if you have a guest named bird0 with an interface
# definition that looks like this:
$ sudo virsh dumpxml bird0 grep -A7 "type='direct'"
<interface type='direct' trustGuestRxFilters='no'>
<mac address='52:54:00:AA:BB:CC'/>
<source dev='ens2f0np0' mode='bridge'/>
<target dev='macvtap3'/>
<model type='virtio'/>
<alias name='net4'/>
<address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
</interface>
# Then use 'virsh edit bird0' change the attribute in the <interface>
# element to have the value 'yes' instead:
<interface type='direct' trustGuestRxFilters='yes'>
<mac address='52:54:00:AA:BB:CC'/>
<source dev='ens2f0np0' mode='bridge'/>
<target dev='macvtap3'/>
<model type='virtio'/>
<alias name='net4'/>
<address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
</interface>
# If the trustGuestRxFilters attribute is missing, it defaults to no,
# so be sure that the attribute exists and that the attribute has a
# value of 'yes'
A while back, I wrote about using the SSH agent protocol to satisfy WebAuthn requests. The main problem with this approach is that it required starting the SSH agent with a special argument and also involved being a little too friendly with the implementation - things worked because I could provide an arbitrary public key and the implementation never validated that, but it would be legitimate for it to start doing so and then break everything. And it also only worked for keys stored on tokens that ssh supports - there was no way to extend this to other keystores on the client (such as the Secure Enclave on Macs, or TPM-backed keys on PCs). I wanted a better solution.
Like each month, have a look at the work funded by Freexian s Debian LTS offering.
Welcome to the May 2024 report from the Reproducible Builds project! In these reports, we try to outline what we have been up to over the past month and highlight news items in software supply-chain security more broadly. As ever, if you are interested in contributing to the project, please visit our Contribute page on our website.
Table of contents:
Joe Sweeney and William Woodruff on the Trail of Bits blog wrote an extensive post about build provenance for Homebrew, the third-party package manager for MacOS. Their post details how each bottle (i.e. each release):
[ ] built by Homebrew will come with a cryptographically verifiable statement binding the bottle s content to the specific workflow and other build-time metadata that produced it. [ ] In effect, this injects greater transparency into the Homebrew build process, and diminishes the threat posed by a compromised or malicious insider by making it impossible to trick ordinary users into installing non-CI-built bottles.The post also briefly touches on future work, including work on source provenance:
Homebrew s formulae already hash-pin their source artifacts, but we can go a step further and additionally assert that source artifacts are produced by the repository (or other signing identity) that s latent in their URL or otherwise embedded into the formula specification.
In Debian this month, Johannes Schauer Marin Rodrigues (aka josch) noticed that the Debian binary package bash version 5.2.15-2+b3 was uploaded to the archive twice. Once to bookworm and once to sid but with differing content. This is problem for reproducible builds in Debian due its assumption that the package name, version and architecture triplet is unique. However, josch highlighted that
This example withIn response to this, Holger Levsen performed an analysis of allbashis especially problematic sincebashisEssential:yes, so there will now be a large portion of.buildinfofiles where it is not possible to figure out with which of the two differing bash packages the sources were compiled.
.buildinfo files and found that this needs almost 1,500 binNMUs to fix the fallout from this bug.
Elsewhere in Debian, Vagrant Cascadian posted about a Non-Maintainer Upload (NMU) sprint to take place during early June, and it was announced that there is now a #debian-snapshot IRC channel on OFTC to discuss the creation of a new source code archiving service to, perhaps, replace snapshot.debian.org. Lastly, 11 reviews of Debian packages were added, 15 were updated and 48 were removed this month adding to our extensive knowledge about identified issues. A number of issue types have been updated by Chris Lamb as well. [ ][ ]
Elsewhere in the world of distributions, deep within a larger announcement from Colin Percival about the release of version 14.1-BETA2, it was mentioned that the FreeBSD kernels are now built reproducibly.
In Fedora, however, the change proposal mentioned in our report for April 2024 was approved, so, per the ReproduciblePackageBuilds wiki page, the add-determinism tool is now running in new builds for Fedora 41 ( rawhide ). The add-determinism tool is a Rust program which, as its name suggests, adds determinism to files that are given as input by attempting to standardize metadata contained in binary or source files to ensure consistency and clamping to $SOURCE_DATE_EPOCH in all instances . This is essentially the Fedora version of Debian s strip-nondeterminism. However, strip-nondeterminism is written in Perl, and Fedora did not want to pull Perl in the buildroot for every package. The add-determinism tool eliminates many causes of non-determinism and work is ongoing to continue the scope of packages it can operate on.
[Whilst] the dates and location are not fixed yet, however if you don help us with finding a suitable location soon, it is very likely that we ll meet again in Hamburg in the 2nd half of September 2024 [ ].Lastly, Frederic-Emmanuel Picca wrote to the list asking for help understanding the non-reproducible status of the Debian
silx package and received replies from both Vagrant Cascadian and Chris Lamb.
1.14.0-1 was uploaded to Debian unstable by Chris Lamb chiefly to incorporate a change from Alex Muntada to avoid a dependency on Sub::Override to perform monkey-patching and break circular dependencies related to debhelper [ ]. Elsewhere in our tooling, Jelle van der Waa modified reprotest because the pipes module will be removed in Python version 3.13 [ ].
SOURCE_DATE_EPOCH environment variable. This is because:
The [curl] release tools document also contains another key component: the exact time stamp at which the release was done using integer second resolution. In order to generate a correct tarball clone, you need to also generate the new version using the old version s timestamp. Because the modification date of all files in the produced tarball will be set to this timestamp.
Furthermore, Fay Stegerman filed a bug against the Signal messenger app for Android to report that their reproducible builds cannot, in fact, be reproduced. However, Fay is quick to note that she has:
found zero evidence of any kind of compromise. Some differences are yet unexplained but everything I found seems to be benign. I am disappointed that Reproducible Builds have been broken for months but I have zero reason to doubt Signal s security in any way.
Lastly, it was observed that there was a concise and diagrammatic overview of supply chain threats on the SLSA website.
Firstly, Mathieu Acher, Beno t Combemale, Georges Aaron Randrianaina and Jean-Marc J z quel of University of Rennes on Embracing Deep Variability For Reproducibility & Replicability. The authors describe their approach as follows:
In this short [vision] paper we delve into the application of software engineering techniques, specifically variability management, to systematically identify and explicit points of variability that may give rise to reproducibility issues (e.g., language, libraries, compiler, virtual machine, OS, environment variables, etc.). The primary objectives are: i) gaining insights into the variability layers and their possible interactions, ii) capturing and documenting configurations for the sake of reproducibility, and iii) exploring diverse configurations to replicate, and hence validate and ensure the robustness of results. By adopting these methodologies, we aim to address the complexities associated with reproducibility and replicability in modern software systems and environments, facilitating a more comprehensive and nuanced perspective on these critical aspects.(A PDF of this article is available.)
Secondly, Ludovic Court s, Timothy Sample, Simon Tournier and Stefano Zacchiroli have collaborated to publish a paper on Source Code Archiving to the Rescue of Reproducible Deployment. Their paper was motivated because:
The ability to verify research results and to experiment with methodologies are core tenets of science. As research results are increasingly the outcome of computational processes, software plays a central role. GNU Guix is a software deployment tool that supports reproducible software deployment, making it a foundation for computational research workflows. To achieve reproducibility, we must first ensure the source code of software packages Guix deploys remains available.(A PDF of this article is also available.)
diffoscope is our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues. This month, Chris Lamb made a number of changes such as uploading versions 266, 267, 268 and 269 to Debian, making the following changes:
xz --list to supplement output when comparing .xz archives; essential when metadata differs. (#1069329)xz --verbose --verbose (ie. double) output. (#1069329)xz --list output. [ ]xz --list --verbose output if the xz has no other differences. [ ]xz --list after the container differences, as it simplifies a lot. [ ]apktool from Build-Depends; we can still test APK functionality via autopkgtests. (#1071410)xz tests as they fail under (at least) version 5.2.8. (#374)7zip 24.05. [ ][ ]xz --list. [ ][ ]7zip version test for older 7z versions that include the string [64] [ ][ ] and Vagrant Cascadian relaxed the versioned dependency to allow version 5.4.1 for the xz tests [ ] and proposed updates to guix for versions 267, 268 and pushed version 269 to Guix. Furthermore, Eli Schwartz updated the diffoscope.org website in order to explain how to install diffoscope on Gentoo [ ].
There were a number of improvements made to our website this month, including Chris Lamb making the print CSS stylesheet nicer [ ]. Fay Stegerman made a number of updates to the page about the SOURCE_DATE_EPOCH environment variable [ ][ ][ ] and Holger Levsen added some of their presentations to the Resources page. Furthermore, IOhannes zm lnig stipulated support for SOURCE_DATE_EPOCH in clang version 16.0.0+ [ ], Jan Zerebecki expanded the Formal definition page and fixed a number of typos on the Buy-in page [ ] and Simon Josefsson fixed the link to Trisquel GNU/Linux on the Projects page [ ].
The Reproducible Builds project operates a comprehensive testing framework running primarily at tests.reproducible-builds.org in order to check packages and other artifacts for reproducibility. In May, a number of changes were made by Holger Levsen:
osuosl4. [ ]i386 architecture a bit more often. [ ]cleanup_nodes.sh to the new way of running our build services. [ ]i386 architecture. [ ]infom07 and infom08 nodes have been reinstalled as real i386 systems. [ ]#debian-reproducible-changes IRC channel. [ ]cbxi4a-armhf node as down. [ ][ ]hdmi2usb-mode-switch package only on Debian bookworm and earlier [ ] and only install the haskell-platform package on Debian bullseye [ ].ntpdate utility as we need it later. [ ]i386 architecture nodes at Infomaniak. [ ]live_setup_schroot to the list of so-called zombie jobs. [ ]infom07 and infom08 nodes [ ] and Vagrant Cascadian marked the cbxi4a node as online [ ].
#reproducible-builds on irc.oftc.net.
rb-general@lists.reproducible-builds.org
Contributing to Debian
is part of Freexian s mission. This article
covers the latest achievements of Freexian and their collaborators. All of this
is made possible by organizations subscribing to our
Long Term Support contracts and
consulting services.
/usr-move transition is being carried out by multiple
contributors and many performed around a hundred of the requested uploads. Of
these, Helmut contributed five patches and two uploads. As a result, there are
less than 350 packages left to be converted, and all of the non-trivial cases
have patches. We started with three times that number. Thanks to everyone
involved for supporting this effort.
For people interested in background information of this transition,
Helmut gave a presentation at MiniDebConf Berlin
2024
(slides).
unshare mode of sbuild has existed for quite a while, it is
now getting significant use in Debian, and new problems are popping up.
Helmut looked into an apparmor-related
failure and provided a diagnosis.
While relevant code would detect the chroot nature of a schroot
backend and skip apparmor tests, the unshare environment would be
just good enough to run and fail the test. As sbuild exposes fewer
special kernel filesystems, the tests will be skipped again.
Another problem popped up when gobject-introspection added a
dependency on the host architecture Python interpreter in a cross build
environment. sbuild would prefer installing (and failing) a host
architecture Python to installing the qemu alternative. Attempts to
fix this would result in systemd killing
sbuild. ischroot as used by
libc6.postinst would not classify the unshare environment as a
chroot. Therefore libc6.postinst would run telinit which would kill
the build process. This is a complex interaction problem that shall
eventually be solved by providing triggers from libc6 to be
implemented by affected init systems.
deb.debian.org, making the jobs that build images for
buster/armel to fail. While the removal of buster/armel from the
repositories is a natural change, it put some light on the flaws in
the Salsa CI design regarding the support of the different Debian
releases. Currently, the images are defined like these (from
.images-debian.yml):
.all-supported-releases: &all-supported-releases
- stretch
- stretch-backports
- buster
- bullseye
- bullseye-backports
- bookworm
- bookworm-backports
- trixie
- sid
- experimental
images-prod-arm:
stage: build
extends: .build_template
tags:
- $SALSA_CI_ARM_RUNNER_TAG
parallel:
matrix:
# Base image, all releases, all arches
- IMAGE_NAME: base
ARCH:
- arm32v5
- arm32v7
- arm64v8
RELEASE: *all-supported-releases
images-prod-arm:
stage: build
extends: .build_template
tags:
- $SALSA_CI_ARM_RUNNER_TAG
parallel:
matrix:
# Base image, fully supported releases, all arches
- IMAGE_NAME: base
ARCH:
- arm32v5
- arm32v7
- arm64v8
RELEASE:
- stretch
- buster
- bullseye
- bullseye-backports
- bookworm
- bookworm-backports
- trixie
- sid
- experimental
# buster only supports armhf and arm64
- IMAGE_NAME: base
ARCH:
- arm32v7
- arm64v8
RELEASE: buster
# releases that have partial support. E.g.: buster is transitioning to
# Debian LTS, and buster armel is no longer found in deb.debian.org
.old-releases: &old-releases
- stretch
- buster
.currently-supported-releases: ¤tly-supported-releases
- bullseye
- bullseye-backports
- bookworm
- bookworm-backports
- trixie
- sid
- experimental
.all-supported-releases: &all-supported-releases
- *old-releases
- *currently-supported-releases
parallel:matrix context. At least not in an elegant fashion.
This is the kind of issue that recently arose and that Santiago is
currently working to solve, in the simplest possible way.
Astute readers would notice that stretch is listed in the fully
supported releases. And there is no problem with stretch, because it is
built from archive.debian.org. Otto actually has tried to
fix
the broken image build job doing the same, but it is still incorrect,
because the security repository is not (yet) available in archive.debian.org.
Additionally, Santiago has also worked on other merge requests, such as:
cups-bjnp to improve packaging.
My Debian contributions this month were all
sponsored by Freexian.
The bulk of my Debian time this month went towards trying to haul more
Python packages up to current versions, but I got a few other bits and
pieces done as well.
user_readenv=1
option from openssh s PAM
configuration, and did some work on release
notes
to document this change for affected users.Architecture: linux-any (and in the latter case also to fix a build
failure due to 64-bit time), and worked
with the buildd team to remove several of the other remaining entries
from
Packages-arch-specific.| Series: | Discworld #38 |
| Publisher: | Harper |
| Copyright: | 2010 |
| Printing: | 2011 |
| ISBN: | 0-06-143306-3 |
| Format: | Trade paperback |
| Pages: | 355 |
"I'm a witch. It's what we do. When it's nobody else's business, it's my business."One of the things that I adore about this series is how well Pratchett shows the different ways in which one can be a witch. Granny Weatherwax out-thinks everyone and nudges (or shoves) people in the right direction, but her natural tendency is to be icy and a bit frightening. Nanny Ogg is that person you can't help but talk to, who may seem happy-go-lucky and hedonistic but who can effortlessly change the mood of a room. And Tiffany is stubborn duty and blunt practicality, which fits the daughter of shepherds. In previous books, we've watched Tiffany as a student, learning the practicalities of being a witch. This is the book where she realizes how much she knows and how much easier the world is to navigate when she's in her own territory. There is a wonderful scene, late in this book, where Pratchett shows Nanny Ogg at her best, doing the kinds of things that only Nanny Ogg can do. Both Tiffany and the reader are in awe.
I should have learned this, she thought. I wanted to learn fire, and pain, but I should have learned people.And it's true that Nanny Ogg can do things that Tiffany can't. But what makes this book so great is that it shows how Tiffany's personality and her training come together with her knowledge of the Chalk. She may not know people, in general, but she knows her neighbors and how they think. She doesn't manage them the way that Nanny Ogg would; she's better at solving different kinds of problems, in different ways. But they're the right ways, and the right problems, for her home. This is another Discworld novel with a forgettable villain that's more of a malevolent force of nature than a character in its own right. It's also another Discworld novel where Pratchett externalizes a human tendency into a malevolent force that can possess people. I have mixed feelings about this narrative approach. That externalization of evil into (in essence) demons has been repeatedly used to squirm out of responsibility and excuse atrocities, and it neatly avoids having to wrestle with the hard questions of prejudice and injustice and why apparently good people do awful things. I think some of those weaknesses persist even in Pratchett's hands, but I think what he was attempting with that approach in this book is to show how almost no one is immune to nastier ideas that spread through society. Rather than using the externalization of evil as an excuse, he's using it as a warning. With enough exposure to those ideas, they start sounding tempting and partly credible even to people who would never have embraced them earlier. Pratchett also does a good job capturing the way prejudice can start from thoughtless actions that have more to do with the specific circumstances of someone's life than any coherent strategy. Still, the one major complaint I have about this book is that the externalization of evil is an inaccurate portrayal of the world, and this catches up with Pratchett at the ending. Postulating an external malevolent force reduces evil to something that can be puzzled out and decisively defeated, thus resolving the problem. Sadly, this is not how humans actually work. I'll forgive that structural flaw, though, because the rest of this book is so good. It's rare that a plot twist in a Discworld novel surprises me twisty plots are not Pratchett's strength but this one did. I will not spoil the surprise, but one of the characters is not quite who they seem to be, and Tiffany's reactions once she figures that out are one of my favorite parts of this book. Pratchett is making a point about assumptions, observation, and the importance of being willing to change one's mind about someone when you know more, and I thought it was very well done. But, most of all, I enjoyed reading about Tiffany being calm, competent, determined, and capable. There's also a bit of an unexpected romance plot that's one of my favorite types: the person who notices that you're doing a lot of work and quietly steps in and starts helping while paying attention to what's needed and not taking over. And it's full of the sort of pithy moral wisdom that makes Discworld such a delight to read.
"There have been times, lately, when I dearly wished that I could change the past. Well, I can't, but I can change the present, so that when it becomes the past it will turn out to be a past worth having."This was just what I wanted. Highly recommended. Followed by Snuff in publication order. The next (and last, sadly) Tiffany Aching book is The Shepherd's Crown. Rating: 9 out of 10
Visit any GitHub project page, and the first thing you see is something that looks like this:
Code , that s fairly innocuous, and it s what we came here for.
The Issues and Pull Requests tabs, with their count of open issues, might give us some sense of how active the project is, or perhaps how maintained .
Useful information for the casual visitor, undoubtedly.
However, there s another user community that visits this page on the regular, and these same tabs mean something very different to them.
I m talking about the maintainers (or, more commonly, maintainer, singular).
When they see those tabs, all they see is work.
The Code tab is irrelevant to them they already have the code, and know it possibly better than they know their significant other(s) (if any).
Issues and Pull Requests are just things that have to be done.
I know for myself, at least, that it is demoralising to look at a repository page and see nothing but work.
I d be surprised if it didn t contribute in some small way to maintainers just noping the fudge out.
My conception of this is that it would, essentially, be a kind of yearbook , that people who used and liked the software could scribble their thoughts on.
With some fairly straightforward affordances elsewhere to encourage its use, it could be a powerful way to show maintainers that they are, in fact, valued and appreciated.
There are a number of software packages I ve used recently, that I d really like to say a general thanks, this is awesome! to.
However, I m not about to make the Issues tab look even scarier by creating an issue to say thanks, and digging up an email address is often surprisingly difficult, and wouldn t be a public show of my gratitude, which I believe is a valuable part of the interaction.
()) 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
Commit Mono
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!).
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:
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)unicode(1) command, but in one page, amazingly
the /usr/share/unicode database doesn't have any one file like
thisa, a bit too exotic, packaged as fonts-agave2Z, problems rendering box drawing, packaged as fonts-monoidEM
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:
In the end, we kept on saying, no DebConf at this scale would come back to India for the next 10 or 20 years. It s too much trouble to be frank. It was probably the peak that we might not reach again. I would be happy to be proven wrong though :)
Next.