Russ Allbery: Review: A Shadow in Summer
| Series: | Long Price Quartet #1 |
| Publisher: | Tor |
| Copyright: | March 2006 |
| ISBN: | 0-7653-1340-5 |
| Format: | Hardcover |
| Pages: | 331 |
| Series: | Long Price Quartet #1 |
| Publisher: | Tor |
| Copyright: | March 2006 |
| ISBN: | 0-7653-1340-5 |
| Format: | Hardcover |
| Pages: | 331 |
This needs to be clear: systemd is under attack by a trolling campaign orchestrated by fascist elements. Nobody is forced to like or use systemd, but anybody who wants to pick a side should know the facts.
Recently, the free software Nazi bar crowd styling themselves as "concerned citizens" has tried to start a moral panic by saying that systemd is implementing age verification checks or that somehow it will require providing personally identifiable information.
This is a lie: the facts are simply that the systemd users database has gained an optional "date of birth" field, which the desktop environments may use or not as they deem appropriate. Of course there is no "identity verification" or requirements to provide any data, which in any case would not be shared beyond authorized local applications.
While the multiple recent bills proposing that general purpose operating systems implement age verification mechanisms are often concerning, both from a social and technical point of view, this is not the topic being discussed here. They are often suboptimal, but for a long time I have been opposing attempts to implement parental control at the network level and argued that it should be managed locally, by parents on their own machines: I cannot see why I should outright reject an attempt to implement the infrastructure to do that.
If we want to keep age-appropriate controls out of the hands of centralized authorities, the alternative is giving families the means to manage it themselves: this is what this field enables. Whether desktop environments use it for parental controls, for birthday reminders, or for nothing at all, is their users' decision.
By the way, the original UNIX users database has allowed storing PII in the GECOS field since it was invented in the '70s. Similar fields are also specified by many popular LDAP schemes: adding such an optional field is consistent with the UNIX tradition.
And while we are at it, let's also refute the other smear campaign started by the same people: the systemd project is not accepting "AI slop". What happened is that a documentation file for the benefit of coding agents was added to the repository. To be clear: agents still cannot submit merge requests. The file itself remarks that all contributions must be reviewed in detail by humans, and this is basically the same policy used by the Linux kernel.
Note: I have not published blog posts about my academic papers over the past few years. To ensure that my blog contains a more comprehensive record of my published papers and to surface them for folks who missed them, I will periodically (re) publish blog posts about some older published projects. This post draws material from a previously published post by Kaylea Champion on the Community Data Science Blog.
Taboo subjects such as sexuality and mental health are as important to discuss as they are difficult to raise in conversation. Although many people turn to online resources for information on taboo subjects, censorship and low-quality information are common in search results. In two papers I recently published at CSCW both led by Kaylea Champion we presented a series of analyses showing how taboo shapes the process of collaborative knowledge building on English Wikipedia.
The first study is a quantitative analysis showing that articles on taboo subjects are much more popular and are the subject of more vandalism than articles on non-taboo topics. In surprising news, we also found that they were edited more often and were of higher quality!
The first challenge we faced in conducting this work was identifying taboo articles. Kaylea had a brilliant idea for a new computational approach to doing so without relying on our individual intuitions about what qualifies as taboo (something we understood would be highly specific to our own culture, class, etc). Her approach was to make use of an insight from linguistics: people develop euphemisms as ways to talk about taboos (i.e., think about all the euphemisms we ve devised for death, or sex, or menstruation, or mental health).
We used this insight to build a new machine-learning classifier based on English Wiktionary definitions. If a sense of a word was tagged as euphemistic, we treated the words in the definition as indicators of taboo. The end result was a series of words and phrases that most powerfully differentiate taboo from non-taboo. We then did a simple match between those words and phrases and the titles of Wikipedia articles. The topics were taboo enough that we were a little uncomfortable discussing them in our meetings! We built a comparison sample of articles whose titles are words that, like our taboo articles, appear in Wiktionary definitions. In the first paper, we used this new dataset to test a series of hypotheses about how taboo shapes collaborative production in Wikipedia. Our initial hypotheses were based on the idea that taboo information is often in high demand but that Wikipedians might be reluctant to associate their names (or usernames) with taboo topics. The result, we argued, would be articles that were in high demand but of low quality. We found that taboo articles are thriving on Wikipedia! In summary, we found that in comparison to non-taboo articles:
Image of the estimated qualiy of articles of the four articles in the second mixed-methods paper. Extreme dips reflect periods of frequent vandalism.The full citation for the papers are: (1) Champion, Kaylea, and Benjamin Mako Hill. 2023. Taboo and Collaborative Knowledge Production: Evidence from Wikipedia. Proceedings of the ACM on Human-Computer Interaction 7 (CSCW2): 299:1-299:25. https://doi.org/10.1145/3610090. (2) Champion, Kaylea, and Benjamin Mako Hill. 2024. Life Histories of Taboo Knowledge Artifacts. Proceedings of the ACM: Human-Computer Interaction 8 (CSCW2): 505:1-505:32. https://doi.org/10.1145/3687044.
We have also released replication materials for the paper, including all the data and code used to conduct the analyses.
This blog post and the paper it describes are collaborative work by Kaylea Champion and Benjamin Mako Hill.
| Series: | Class 5 #5 |
| Publisher: | Eclipse |
| Copyright: | 2022 |
| ISBN: | 0-6454658-2-8 |
| Format: | Kindle |
| Pages: | 349 |
= into a calculator.
Typing = 660km / (2/3)c * 2 -> ms gives me 6.60457 ms1 without
leaving my terminal, thanks to the Zsh line editor.
= as an alias to a calculator command. I
prefer Numbat, a scientific calculator that supports unit conversions.
Qalculate is a close second.2 If neither is available, we fall back to
Zsh s built-in zcalc module.
As the alias built-in uses = as a separator for name and value, we need to
alter the aliases associative array:
if (( $+commands[numbat] )); then aliases[=]='numbat -e' elif (( $+commands[qalc] )); then aliases[=]='qalc' else autoload -Uz zcalc aliases[=]='zcalc -f -e' fi
= 847/11 becomes numbat -e 847/11.
= 5 * 3 fails: Zsh expands the *
character as a glob pattern before passing it to the calculator. The same issue
applies to other characters that Zsh treats specially, such as > or . You
must quote the expression:
$ = '5 * 3' 15
line-finish widget before submitting a command. We hook a
function that detects the = prefix and quotes the expression:
_vbe_calc_quote() case $BUFFER in "="*) typeset -g _vbe_calc_expr=$BUFFER # not used yet BUFFER="= $ (q-)$ $ BUFFER#= # " ;; esac add-zle-hook-widget line-finish _vbe_calc_quote
= 5 * 3 and press , _vbe_calc_quote strips the =
prefix, quotes the remainder with the (q-) parameter expansion flag,
and rewrites the buffer to = '5 * 3' before Zsh submits the command. As a
bonus, you can save a few keystrokes with =5*3!
You can now compute math expressions and convert units directly from your shell.
Zsh automatically quotes your expressions:
$ = '1 + 2' 3 $ = 'pi/3 + pi > cos' -0.5 $ = '17 USD -> EUR' 14.7122 $ = '180*500mg -> g' 90 g $ = '5 gigabytes / (2 minutes + 17 seconds) -> megabits/s' 291.971 Mbit/s $ = 'now() -> tz("Asia/Tokyo")' 2026-03-22 22:00:03 JST (UTC +09), Asia/Tokyo $ = '1 / (40 rods / hogshead) -> L / 100km' 118548 0.01 l/km

_vbe_calc_history() return $ +_vbe_calc_expr add-zsh-hook zshaddhistory _vbe_calc_history _vbe_calc_preexec() (( $ +_vbe_calc_expr )) && print -s $_vbe_calc_expr unset _vbe_calc_expr return 0 add-zsh-hook preexec _vbe_calc_preexec
zshaddhistory hook returns 1 if we are evaluating an expression, telling
Zsh not to record the command. The preexec hook then adds the original,
unquoted command with print -s.
noglob precommand modifier. If you stick with to instead of ->
for unit conversion, it covers 90% of use cases. For a related Zsh line editor
trick, see how I use auto-expanding aliases to fix common typos.
I saw Ladytron perform in Digital, Newcastle last night. The
last time I saw them was, I think, at the same venue, 18 years ago. Time flies!
Back in the day (perhaps their heyday, perhaps not!) Ladytron ploughed a
particular sonic furrow and did it very well. Going into the gig I had set my
expectations that, should they play just these hits, I'd have a good time.
The gig exceeded my expectations. The setlist very much did not lean into
their best-known period: the more recent few albums were very well represented
and to me this felt very confident. The lead singer, Helen Marnie, demonstrated
some excellent range, particularly on some of the new songs. Daniel Hunt did a
lot of backing vocals and they were really complementary to Helen's: underscoring
but not overpowering. I enjoyed nerding out watching Mira Ayoro's excellent
wrangling of her Korg MS-20. One highlight was an encore performance of
Light & Magic, which was arguably the "alternate version" as available on the
expanded versions of that album or the Remixed and Rare companion.
I thought I'd try to put together a 5-track playlist for a friend who attended
the gig but isn't super familiar with them. As usual this is hard. I'm going
to avoid the obvious hits, try to represent their whole career and try to
ensure the current trio each get a vocal turn in the selection.
They actually released their latest album, Paradises, yesterday as well. One
track from it is in the list below.
I'm Not Scared by Ladytron
Kingdom Undersea by Ladytron
Blue Jeans by Ladytron
He took her to a movie by Ladytron
Transparent Days by Ladytron
(If you can't see anything, the bandcamp embeds have been stripped out by
whatever you are viewing this with)
When you re looking at source code it can be helpful to have some evidence
indicating who wrote it. Author tags give a surface level indication, but
it turns out you can just
lie
and if someone isn t paying attention when merging stuff there s certainly a
risk that a commit could be merged with an author field that doesn t
represent reality. Account compromise can make this even worse - a PR being
opened by a compromised user is going to be hard to distinguish from the
authentic user. In a world where supply chain security is an increasing
concern, it s easy to understand why people would want more evidence that
code was actually written by the person it s attributed to.
git has support for cryptographically signing
commits and tags. Because git is about choice even if Linux isn t, you can
do this signing with OpenPGP keys, X.509 certificates, or SSH keys. You re
probably going to be unsurprised about my feelings around OpenPGP and the
web of trust, and X.509 certificates are an absolute nightmare. That leaves
SSH keys, but bare cryptographic keys aren t terribly helpful in isolation -
you need some way to make a determination about which keys you trust. If
you re using someting like GitHub you can extract that
information from the set of keys associated with a user account1, but
that means that a compromised GitHub account is now also a way to alter the
set of trusted keys and also when was the last time you audited your keys
and how certain are you that every trusted key there is still 100% under
your control? Surely there s a better way.
|
|
gpg namespace even if you re not using OpenPGP. Yes, this makes
me sad. But you re also going to need something else. Either
user.signingkey needs to be set to the path of your certificate, or you
need to set gpg.ssh.defaultKeyCommand to a command that will talk to an
SSH agent and find the certificate for you (this can be helpful if it s
stored on a smartcard or something rather than on disk). Thankfully for you,
I ve written one. It will
talk to an SSH agent (either whatever s pointed at by the SSH_AUTH_SOCK
environment variable or with the -agent argument), find a certificate
signed with the key provided with the -ca argument, and then pass that
back to git. Now you can simply pass -S to git commit and various other
commands, and you ll have a signature.
ssh-keygen2, which validates signatures against a file in a format
that looks somewhat like authorized-keys. This lets you add something like:
|
|
CA_PUB_KEY or (optionally) an OpenPGP key provided in
ALLOWED_PGP_KEYS. Why OpenPGP? Because even if you sign all of your own
commits with an SSH certificate, anyone using the API or web interface will
end up with their commits signed by an OpenPGP key, and if you want to have
those commits validate you ll need to handle that.
In any case, this should be easy enough to integrate into whatever CI
pipeline you have. This is currently very much a proof of concept and I
wouldn t recommend deploying it anywhere, but I am interested in merging
support for additional policy around things like expiry dates or group
membership.
https://github.com/<username>.keys? Now you do
keygen command does things
other than generate keys
A map of Vietnam with points of places we went to labeled. CARTO MAPTILER OPENSTREETMAP
A picture of the park we roamed around in Ho Chi Minh City. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
This is the restaurant Badri s friend took us to. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
One of the dishes we had in the restaurant. This one was especially tasty. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
One of the dishes we had in the restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
These noodles are called Pho and are very popular in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Interior of our train coach. Trains in Vietnam don t have side berths, unlike India. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A picture of the berths from our coach. It had three tiers, similar to a 3 AC coach in Indian trains. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
The train had a cabin to put the bags in. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Nha Trang train station. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
I got a complimentary cup of green tea along with coffee in Nha Trang. In this trip, Badri and I found out that this is customary at local places in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Eggs being cooked on a pan for my order. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
The beach we went to in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
This one was shot in the city center. In this trip, Badri and I found out that this is customary at local places in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Inside a Highlands Coffee cafe in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A coffee I got from Highlands Coffee in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
The restaurant we went to in Nha Trang. The word Chay in the name means it was a vegan restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Soupy noodles we got at that restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Dry noodles we got at that restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
This was the place we had our coffee in Tra Kieu. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Photo of Badri with taxi driver. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A picture of Tra Kieu area near the train station we got down at. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Our breakfast in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A photo of the hostel we stayed in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Typical yellow house with gabled roof in Hoi An old town. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Egg coffee I had in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Bahn Bao in Hue. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Hot Pot. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Added soup to the noodles. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Steamed rolls made of rice flour. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Menu from a restaurant in Ho Chi Minh City with detailed description of the food. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Our berths in the train. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Egg coffee in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Hanoi train street is a tourist attraction in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A picture of pho we had in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Bahn it is served packed in banana leaves. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Bahn it. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
WWW::Mechanize::Chrome library and its test suite. ThisResource was not cached errors duringsaveResources, we implemented a fully asynchronous fallback_saveResourceTree. By chaining_cached_document with DOM.getOuterHTMLfile:// access.File name too long errors,MAX_PATH limit is 260filenameFromUrl was hardened. The filenamedefault_executable_names was expanded to includeheadless_shell and search paths were updated to include/usr/lib64/chromium-browser/.DOM.documentUpdated events could invalidatenodeIds immediately after navigation, causing XPath queriessleep(0.25s) was added after page loads to ensure the DOMualarm was a blocker for Windows, wheret::helper::set_watchdog functionalarm() (seconds) on Windowsualarm (microseconds) on Unix-like systems, enablinglib/ and to always runmake clean and perl Makefile.PL to ensureMETA.json and META.yml reflect the newad2 Windows Server 2025 instance was restored andad2 Windows_future API.xpath, field,get, etc.) into thin wrappers around new non-blocking..._future counterparts. This moved timeout management tot/lib/t/helper.pm, was created tosafe_get,safe_xpath) were implemented there, usingFuture->wait_any to race asynchronous operations against# Example test helper implementation
sub safe_xpath
my ($mech, $query, %options) = @_;
my $timeout = delete $options timeout 5;
my $call_f = $mech->xpath_future($query, %options);
my $timeout_f = $mech->sleep_future($timeout)->then(sub Future->fail("Timeout") );
return Future->wait_any($call_f, $timeout_f)->get;
t/50-tick.t)WWW::Mechanize::Chrome::Node was storing[key, val, key, val]), which wast::helper that listens on an ephemeral port; the backgroundget_set_value_future non-blocking required first making its_field_by_name, asynchronous. This culminatedform_name,form_id, etc.) to use the new asynchronous_future lookups, which was a key step in mitigating the_process_eval_result helper to centralize the parsing ofRuntime.evaluate. This ensures consistenteval_in_page) and asynchronous (eval_future)$self and the $response object, creating aScalar::Util::weaken on both $self and any->then block that is stored on an object.
wantarray): AwantarrayFuture->then blocks. This causedxpath to return incorrect results (e.g., awantarray in the synchronous_future method, and# Synchronous Wrapper
sub xpath($self, $query, %options)
$options wantarray = wantarray; # 1. Capture
return $self->xpath_future($query, %options)->get; # 2. Pass
# Asynchronous Implementation
sub xpath_future($self, $query, %options)
my $wantarray = delete $options wantarray ; # 3. Retrieve
# ... async logic ...
return $doc->then(sub
if ($wantarray) # 4. Respect
return Future->done(@results);
else
return Future->done($results[0]);
);
decoded_content()__body_future. This was implemented by storing the$response-> __body_future ). To make this more robust,about:blankXMLSerializer to get the live DOM content.
Future->then. Callbacks were updated to use optionalsub($result = undef) ... ) to gracefullysetDocumentContent is parsed differently than contentdocument.evaluate) against the live DOM, bypassing the_future variants.t/lib/t/helper.pm), not in the core library.wantarrayFuture chain to ensure correctwarn, note, diag) should be$self->log('debug', ...)MutationObserver Saga (March 19)
With most of the library refactored to be asynchronous, one stubbornt/65-is_visible.t, continued to fail with timeouts.wait_until_visible polling logic with a moreMutationObserver.
repeat sleep loop with an event-drivenMutationObserver in JavaScript that would notify PerlcallFunctionOn_future.setTimeout, which expected milliseconds.MutationObserver sPromise would never resolve, even after thecheckVisibility JavaScript logic inside the observerconsole.log tracing, failed to resolve theChrome.pm module.MutationObserver approachMutationObserver, a strategic decision was made to revertMutationObserver implementation, when integrated viacallFunctionOn_future with awaitPromise,MutationObserver code fromWWW::Mechanize::Chrome.pm and restore the originalrepeat sleep polling mechanism. A stable,t/lib/t/helper.pmsafe_wait_until_* wrappers werewait_any andsleep_future) that raced against the underlying pollingt/78-memleak.t persisted, but only on the Windowsad2 environment. This required a different approach thanon_dialog event listener was not being broken on Windows,on_dialog(undef) in DESTROY) were notIO::Async event loop implementation on Windows, and theTest::Memory::Cycle module. The cycle report was identicalon_dialog(undef) call fromclose() to DESTROY().deleteing the listener and callbackDESTROY.$self->remove_listener and$self->target->unlisten in a mistaken attempt to findt/78-memleak.t was wrapped in a conditionalTODO block that only executes on Windowsif ($^O =~ /MSWin32/i)), formally acknowledging the bugprove --nocount --jobs 3 -I local/ -bl xt t directly. This-It/lib include path, whicht::helper module.Can't locate t/helper.pm in @INC.Makefile.PL revealed a custom MY::test block-It/lib flag into themake test command. This confirmed thatmake test is the correct, canonical way to run the test.github/workflows/linux.yml file was modified to replaceprove call with make test in theRun Tests step. This ensures the CI environment runs theWWW::Mechanize::Chrome test suite is now stable and
Version 0.0.28 of RcppSpdlog arrived
on CRAN today, has been
uploaded to Debian and built for r2u. The (nice) documentation site
has been refreshed too. RcppSpdlog
bundles spdlog, a
wonderful header-only C++ logging library with all the bells and
whistles you would want that was written by Gabi Melman, and also includes fmt by Victor Zverovich. You can learn
more at the nice package
documention site.
This release contains a rebuild RcppExports.cpp to aid
Rcpp in the transition towards
Rcpp::stop() and away from Rf_error() in its
user packages. No othe
The NEWS entry for this release follows.
Courtesy of my CRANberries, there is also a diffstat report detailing changes. More detailed information is on the RcppSpdlog page, or the package documention site.Changes in RcppSpdlog version 0.0.28 (2026-03-19)
- Regenerate
RcppExports.cppto switch to(Rf_error)aiding in Rcpp transition toRcpp::stop()
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.
315. This version includes the following changes:
[ Jelle van der Waa ]
* Adjust PGP file detection regex.
Linux kernel security modules provide a good additional layer of security around individual programs by restricting what they are allowed to do, and at best block and detect zero-day security vulnerabilities as soon as anyone tries to exploit them, long before they are widely known and reported. However, the challenge is how to create these security profiles without accidentally also blocking legitimate actions. For MariaDB in Debian and Ubuntu, a new AppArmor profile was recently created by leveraging the extensive test suite with 7000+ tests, giving good confidence that AppArmor is unlikely to yield false positive alerts with it.
AppArmor is a Mandatory Access Control (MAC) system, meaning that each process controlled by AppArmor has a sort of an allowlist called profile that defines all capabilities and file paths a program can access. If a program tries to do something not covered by the rules in its AppArmor profile, the action will be denied on the Linux kernel level and a warning logged in the system journal. This additional security layer is valuable because even if a malicious user found a security vulnerability some day in the future, the AppArmor profile severely restricts the ability to exploit it and gain access to the operating system.
AppArmor was originally developed by Novell for use in SUSE Linux, but nowadays the main driver is Canonical and AppArmor is extensively used in Ubuntu and Debian, and many of their derivatives (e.g. Linux Mint, Pop!_OS, Zorin OS) and in Arch. AppArmor s benefit compared to the main alternative SELinux (used mainly in the RedHat/Fedora ecosystem) is that AppArmor is easier to manage. AppArmor continues to be actively developed, with new major version 5.0 expected to arrive soon.
I also have some personal history contributing some notification handler scripts in Python and I also created the website that AppArmor.net still runs.
/var/log/audit/audit.log or run journalctl -ke --grep=apparmor.
A typical denial entry for MariaDB will look like this (split across multiple lines for legibility):
msg=audit(1700000000.123:456): apparmor="DENIED" operation="open"
profile="/usr/sbin/mariadbd" name="/custom/data/path/test.ibd" pid=1234
comm="mariadbd" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0open, mknod, file_mmap, file_perm)./usr/sbin/mariadbd profile).mariadbd).r for read, w for write)./etc/apparmor.d/ or drop a local customization file in at /etc/apparmor.d/local/. If the denied action looks malicious, the sysadmin should start a security investigation and if needed report a suspected zero-day vulnerability to the upstream software vendor (e.g. Ubuntu customers to Canonical, or MariaDB customers to MariaDB).
complain mode and iterated on the allowlist by running the full mariadb-test-run with all MariaDB plugins and features enabled until we had a comprehensive yet clean list of rules.
To be extra diligent, we also reworked the autopkgtest for MariaDB in Debian and Ubuntu CI systems to run with the AppArmor profile enabled and to print all AppArmor notices at the end of the run, making it easy to detect now and in the future if the MariaDB test suite triggers any AppArmor denials. If any test fails, the release would not get promoted further, protecting users from regressions.
While developing and triggering manual test runs we used the maximal achievable test suite with 7177 tests. The test is however so extensive it takes over two hours to run, and it also has some brittle tests, so the standard test run in Debian and Ubuntu autopkgtest is limited just to MariaDB s main suite with about 1000 tests. Having some tests fail while testing the AppArmor profile was not a problem, because we didn t need all the tests to pass we merely needed them to run as many code paths as possible to see if they run any system calls not accounted for in the AppArmor profile.
Note that extending the profile was not just mechanical copying of log messages to the profile. For example, even though a couple of tests involve running the dash shell, we decided to not allow it, as it opens too much of a path for a potential exploit to access the operating system.
The result of this effort is a modernized, robust profile that is now production-ready. Those interested in the exact technical details can read the Debian Bug#1130272 and the Merge Request discussions at salsa.debian.org, which hosts the Debian packaging source code.
complain mode, so AppArmor only logs would-be-denials without blocking anything. The AppArmor profile was switched to enforce mode only in the very latest MariaDB revision 1:11.8.6-4 in Debian, and a NEWS item issued to help increase user awareness of this change. It is also slated for the upcoming Ubuntu 26.04 Resolute Raccoon release next month, providing out-of-the-box hardening for the wider ecosystem.
While automated testing is extensive, it cannot simulate everything. Most notably various complicated replication topologies and all Galera setups are likely not covered. Thus, I am calling on the community to deploy this profile and monitor for any audit denials in the kernel logs. If you encounter unexpected behavior or legitimate denials, please submit a bug report via the Debian Bug Tracking System.
To ensure you are running the latest MariaDB version, run apt install --update --yes mariadb-server. To view the latest profile rules, run cat /etc/apparmor.d/mariadbd and to see if it is enforced review the output of aa-status. To quickly check if there were any AppArmor denials, simply run journalctl -k grep -i apparmor grep -i mariadb.
And yet another maintenance release of the tidyCpp
package arrived on CRAN this morning, just days after previous release
which itself came a mere week and a half after its predecessor. It has
been built for r2u as
well. The package offers a clean C++ layer (as well as one small C++
helper class) on top of the C API for R which aims to make use of this
robust (if awkward) C API a little easier and more consistent. See the
vignette for motivating
examples.
This release restores the small CSS file used by the vignette which
we, in a last-second decision, omitted from the previous release. Oddly,
it only failed under the oldrel i.e. the R from now nearly two years
ago. But it was still an unenforced error, and this upload corrects
it.
Changes are summarized in the NEWS entry that follows.
Thanks to my CRANberries, there is also a diffstat report for this release. For questions, suggestions, or issues please use the issue tracker at the GitHub repo.Changes in tidyCpp version 0.0.11 (2026-03-17)
- Keep a CSS file in the package to allow vignette build on r-oldrel too
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can now sponsor me at GitHub.
Between July and November 2025, the Debian pt_BR translation team received
five students for an online mentoring program. The initiative was carried
out in partnership with the Federal University of ABC through the
extension project "Immersion in Free Software", coordinated by
professors Suzana Santos and Miguel Vieira.
During the mentorship the mentees acted on several of the team's translation
efforts and joined presentations about the Debian Project and its
community given by the mentors. We thank the dedication and contributions of
Ana Parra, Bruno Freitas, Henrique Barbosa, Raul Banzatto and Vitoria Cordeiro.
And we also thank the members of the team who have reviewed the work of the
mentees, specially the ones who were designated as official mentors, namely
Allythy Rennan, Daniel Lenharo, Thiago Pezzo, and Victor Marinho.
Results:
mediawiki/*. That request is still open as of writing, as those have
to run for at least a week, but looks very likely to pass at this
point.
Overall, the event was very well-organized: the venue was great, except
that the number of stairs was described in a rather misleading way,
food was great, and the atmosphere was amazing. The pressure that you
must Just Get Things Done to justify your attendance that the main
hackathon seems to have recently gained was clearly missing here which
was great. Also, I will clearly need to bring more Finnish chocolate
next time.
The timing of Friday and Saturday works great for us with other things
(like university for me) during the week, as it takes full advantage of
the weekend but still only eats workdays from a single calendar week.
My main gripe with the logistics was the focus on a single sketchy
non-free messaging platform for all event-related communications with
the IRC bridge used on the main hackathon channel notably missing.
Armadillo is a powerful
and expressive C++ template library for linear algebra and scientific
computing. It aims towards a good balance between speed and ease of use,
has a syntax deliberately close to Matlab, and is useful for algorithm
development directly in C++, or quick conversion of research code into
production environments. RcppArmadillo
integrates this library with the R environment and language and is
widely used by (currently) 1235 other packages on CRAN, downloaded 44.9 million
times (per the partial logs from the cloud mirrors of CRAN), and the CSDA paper (preprint
/ vignette) by Conrad and myself has been cited 672 times according
to Google Scholar.
This versions updates to the 15.2.4 upstream Armadillo release from
yesterday. The package has already been updated for Debian, and for r2u. This release, which
we as usual checked against the reverse-dependencies, brings minor
changes over the RcppArmadillo release 15.2.3 made in December (and
described here)
by addressing some corner-case ASAN/UBSAN reports (which Conrad, true to his style
of course labels as false positive just how he initially
responded that he would never add a fix based on such a false report;
as always it is best to just watch what does as he is rather good at it,
and, written comments notwithstanding, quite responsive) as well as
speed-ups for empty sparse matrices. I made one more follow-up
refinement on the OpenMP setup which should now just work on all
suitable platforms.
The detailed changes since the last release follow.
Courtesy of my CRANberries, there is a diffstat report relative to previous release. More detailed information is on the RcppArmadillo page. Questions, comments etc should go to the rcpp-devel mailing list off the Rcpp R-Forge page.Changes in RcppArmadillo version 15.2.4-1 (2026-03-17)
- Upgraded to Armadillo release 15.2.4 (Medium Roast Deluxe)
- Workarounds for bugs in GCC and Clang sanitisers (ASAN false positives)
- Faster handling of blank sparse matrices
- Refined OpenMP setup (Dirk in #500)
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can sponsor me at GitHub.
Another minor maintenance release version 0.1.4 of package RcppClassicExamples
arrived earlier today on CRAN,
and has been built for r2u. This package
illustrates usage of the old and otherwise deprecated initial Rcpp API
which no new projects should use as the normal and current Rcpp API is so much better.
This release, the first in two and half years, mostly aids Rcpp in moving from
Rf_error() to Rcpp::stop() for better
behaviour under error conditions or excections. A few other things were
updated in the interim such as standard upgrade to continuous
integration, use of Authors@R, and switch to static linking and an
improved build to support multiple macOS architectures.
No new code or features. Full details below. And as a reminder, don t
use the old RcppClassic use Rcpp
instead.
Thanks to CRANberries, you can also look at a diff to the previous release.Changes in version 0.1.4 (2026-03-16)
- Continuous integration has been updated several times
- DESCRIPTION now uses Authors@R
- Static linking is enforced, RcppClassic (>= 0.9.14) required
- Calls to
Rf_error()have been replaced withRcpp::stop()- Updated versioned dependencies
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. If you like this or other open-source work I do, you can now sponsor me at GitHub.
Oh dear! I've been suffering print reliability issues on my Prusa
Mini+ for quite a while, roughly since they introduced Input Shaping
(although that might not be the culprit). Whilst trying different
things to resolve it, I managed to sheer off the brass nozzle within
the heatblock. I now have half the nozzle stuck in the ratchet spanner,
and half in the heatblock.
What to do next?
I can try and get the nozzle out of the heatblock, by screwing something
into it or using an extraction
screw. I've been warned this could be messy and dangerous.
Less risky might be to change out the whole heatblock. They don't seem
to be expensive.
Back in FOSDEM I asked the Prusa folks what cool projects
I could do with the Mini+ they looked a little blank (I think the Mini+
is now a somewhat forgotten product) but they did say somebody had managed
to port over the "Nextruder" from the more recent Prusa XL/MK4. I could
take a look at that.
Another thing I've always wanted to explore (although I had intended it to
be temporary/reversible) was converting it into a plotter, for plotter
art.
Somehow this is my first 3d printing blog post in over a year. The
printables.com feed I linked to is still going,
I'm happy to report (as is the one I wrote but didn't publish, slightly
more surprisingly)
| Series: | Lady Astronaut #4 |
| Publisher: | Tor |
| Copyright: | 2025 |
| ISBN: | 1-250-23703-3 |
| Format: | Kindle |
| Pages: | 390 |
Next.