Another short status update of what happened on my side last
month. The larger blocks are the Phosh
0.44 release and landing the
initial Cell Broadcast support in phosh. The rest is all just small
bits of bug, fallout/regression fixing here and there.
phosh
<return> (MR)Recommends: isn't enough for existing installations.--export-dir regression (MR)--toggle (MRvibrate() API to allow e.g.games more haptic control (MR).
This could also be used in browser to implement the vibration API in e.g. Firefox.uscan --download-vesion (MR
Another musical retrospective. If you enjoy this, I also did a 2022 and a
2023 one.
Albums
In 2024, I added 88 new albums to my collection that's a lot!
This year again, I bought the vast majority of my music on Bandcamp. To be
honest, I'm quite distraught by what's become of that website. Although it
stays a wonderful place to buy underground music, Songtradr, the new owner of
the platform, has been shown to be viciously anti-union.
Money continues to ruin the world, I guess.
Concerts
I continued to go to a lot of concerts in 2024 (25!). Over the past 3 years, I
have been going to more and more concerts, and I think I've reached my "peak".
A mean of a concert every two weeks is quite a lot :)
If you also like music and concerts, but find yourself not going to as many as
you would like, the real secret is not to be afraid to go to concerts alone.
Going with friends is always fun, but if I restricted myself to only going to
concerts in a group, I'd barely see a few each year.
Another good advice is to bring a book or something else1 to pass the
time between sets. It can often take 30-45 minutes between sets for the artists
to get their instruments ready, which can get quite boring if you just stand
there and wait.
Anyway, here are the concerts I went to in 2024:
| Series: | Uncertain Sanctuary #2 |
| Publisher: | Jenny Schwartz |
| Copyright: | October 2020 |
| Printing: | September 2024 |
| ASIN: | B0DBX6GP8Z |
| Format: | Kindle |
| Pages: | 196 |
| Publisher: | Crown Currency |
| Copyright: | 2023 |
| Printing: | 2024 |
| ISBN: | 0-593-44382-9 |
| Format: | Kindle |
| Pages: | 373 |
Rong explained that in a true Ponzi scheme, the organizer would have to handle the "fraud money." Instead, he gave the sneakers away and then only took a small cut of each trade. "The users are trading between each other. They are not going through me, right?" Rong said. Essentially, he was arguing that by downloading the Stepn app and walking to earn tokens, crypto bros were Ponzi'ing themselves.Faux is openly contemptuous of this response, but it is technically correct. Stepn is not a Ponzi scheme; it's a speculative bubble. There are no guaranteed returns being paid out of later investments and no promise that your principal is safe. People are buying in at price that you may consider irrational, but Stepn never promised you would get your money back, let alone make a profit, and therefore it doesn't have the exponential progression of a Ponzi scheme. One can argue that this is a distinction without a moral difference, and personally I would agree, but it matters immensely if one is trying to analyze the future of cryptocurrencies. Schemes as transparently unstable as Stepn (which gives you coins for exercise and then tries to claim those coins have value through some vigorous hand-waving) are nearly as certain as Ponzi schemes to eventually collapse. But it's also possible to create a stable business around allowing large numbers of people to regularly lose money to small numbers of sophisticated players who are collecting all of the winnings. It's called a poker room at a casino, and no one thinks poker rooms are Ponzi schemes or are doomed to collapse, even though nearly everyone who plays poker will lose money. This is the part of the story that I think Faux largely missed, and which Michael Lewis highlights in Going Infinite. FTX was a legitimate business that made money (a lot of money) off of trading fees, in much the same way that a casino makes money off of poker rooms. Lots of people want to bet on cryptocurrencies, similar to how lots of people want to play poker. Some of those people will win; most of those people will lose. The casino doesn't care. Its profit comes from taking a little bit of each pot, regardless of who wins. Bankman-Fried also speculated with customer funds, and therefore FTX collapsed, but there is no inherent reason why the core exchange business cannot be stable if people continue to want to speculate in cryptocurrencies. Perhaps people will get tired of this method of gambling, but poker has been going strong for 200 years. It's also important to note that although trading fees are the most obvious way to be a profitable cryptocurrency casino, they're not the only way. Wall Street firms specialize in finding creative ways to take a cut of every financial transaction, and many of those methods are more sophisticated than fees. They are so good at this that buying and selling stock through trading apps like Robinhood is free. The money to run the brokerage platform comes from companies that are delighted to pay for the opportunity to handle stock trades by day traders with a phone app. This is not, as some conspiracy theories would have you believe, due to some sort of fraudulent price manipulation. It is because the average person with a Robinhood phone app is sufficiently unsophisticated that companies that have invested in complex financial modeling will make a steady profit taking the other side of their trades, mostly because of the spread (the difference between offered buy and sell prices). Faux is so caught up in looking for Ponzi schemes and fraud that I think he misses this aspect of cryptocurrency's transformation. Wall Street trading firms aren't piling into cryptocurrency because they want to do securities fraud. They're entering this market because there seems to be persistent demand for this form of gambling, cryptocurrency markets reward complex financial engineering, and running a legal casino is a profitable business model. Michael Lewis appears as a character in this book, and Faux portrays him quite negatively. The root of this animosity appears to stem from a cryptocurrency conference in the Bahamas that Faux attended. Lewis interviewed Bankman-Fried on stage, and, from Faux's account, his questions were fawning and he praised cryptocurrencies in ways that Faux is certain he knew were untrue. From that point on, Faux treats Lewis as an apologist for the cryptocurrency industry and for Sam Bankman-Fried specifically. I think this is a legitimate criticism of Lewis's methods of getting close to the people he wants to write about, but I think Faux also makes the common mistake of assuming Lewis is a muckraking reporter like himself. This has never been what Lewis is interested in. He writes about people he finds interesting and that he thinks a reader will also find interesting. One can legitimately accuse him of being credulous, but that's partly because he's not even trying to do the same thing Faux is doing. He's not trying to judge; he's trying to understand. This shows when it comes to the parts of this book about Sam Bankman-Fried. Faux's default assumption is that everyone involved in cryptocurrency is knowingly doing fraud, and a lot of his research is looking for evidence to support the conclusion he had already reached. I don't think there's anything inherently wrong with that approach: Faux is largely, although not entirely, correct, and this type of hostile journalism is incredibly valuable for society at large. Upton Sinclair didn't start writing The Jungle with an open mind about the meat-packing industry. But where Faux and Lewis disagree on Bankman-Fried's motivations and intentions, I think Lewis has the much stronger argument. Faux's position is that Bankman-Fried always intended to steal people's money through fraud, perhaps to fund his effective altruism donations, and his protestations that he made mistakes and misplaced funds are obvious lies. This is an appealing narrative if one is looking for a simple villain, but Faux's evidence in support of this is weak. He mostly argues through stereotype: Bankman-Fried was a physics major and a Jane Street trader and therefore could not possibly be the type of person to misplace large amounts of money or miscalculate risk. If he wants to understand how that could be possible, he could read Going Infinite? I find it completely credible that someone with what appears to be uncontrolled, severe ADHD could be adept at trading and calculating probabilities and yet also misplace millions of dollars of assets because he wasn't thinking about them and therefore they stopped existing. Lewis made a lot of people angry by being somewhat sympathetic to someone few people wanted to be sympathetic towards, but Faux (and many others) are also misrepresenting his position. Lewis agrees that Bankman-Fried intentionally intermingled customer funds with his hedge fund and agrees that he lied about doing this. His only contention is that Bankman-Fried didn't do this to steal the money; instead, he invested customer money in risky bets that he thought would pay off. In support of this, Lewis made a prediction that was widely scoffed at, namely that much less of FTX's money was missing than was claimed, and that likely most or all of it would be found. And, well, Lewis was basically correct? The FTX bankruptcy is now expected to recover considerably more than the amount of money owed to creditors. Faux argues that this is only because the bankruptcy clawed back assets and cryptocurrencies have gone up considerably since the FTX bankruptcy, and therefore that the lost money was just replaced by unexpected windfall profits on other investments, but I don't think this point is as strong as he thinks it is. Bankman-Fried lost money on some of what he did with customer funds, made money on other things, and if he'd been able to freeze withdrawals for the year that the bankruptcy froze them, it does appear most of the money would have been recoverable. This does not make what he did legal or morally right, but no one is arguing that, only that he didn't intentionally steal money for his own personal gain or for effective altruism donations. And on that point, I don't think Faux is giving Lewis's argument enough credit. I have a lot of complaints about this book because I know way too much about this topic than anyone should probably know. I think Faux missed the plot in a couple of places, and I wish someone would write a book about where cryptocurrency markets are currently going. (Matt Levine's Money Stuff newsletter is quite good, but it's about all sorts of things other than cryptocurrency and isn't designed to tell a coherent story.) But if you know less about cryptocurrency and just want to hear the details of the run-up to the 2022 bubble, this is a great book for that. Faux is writing for people who are already skeptical and is not going to convince people who are cryptocurrency true believers, but that's fine. The details are largely correct (and extensively footnoted) and will satisfy most people's curiosity. Lewis's Going Infinite is a better book, though. It's not the same type of book at all, and it will not give you the broader overview of the cryptocurrency world. But if you're curious about what was going through the head of someone at the center of all of this chaos, I think Lewis's analysis is much stronger than Faux's. I'm happy I read both books. Rating: 8 out of 10
| Series: | Arcana Imperii #1.5 |
| Publisher: | Gollancz |
| Copyright: | 2023 |
| ISBN: | 1-3996-1537-8 |
| Format: | Kindle |
| Pages: | 173 |
I have been working all year on a solar upgrade aimed at December. Now here
it is, midwinter, and my electric car is charging on a cloudy day from my
offgrid solar fence.
I lived happily enough with 1 kilowatt of solar that I
installed in 2017.
Meanwhile, solar panel prices came down massively, incentives increased
and everything came together: This was the year.
In the spring I started clearing forest trees that were leaning over the house,
making both a firebreak and a solar field.
In June I picked up a pallet of panels in a box truck.
![]() |
![]() |
![]() |
make image and get a new qcow2 image with the latest build of a given Debian release (sid by default, with others available by specifying DIST).
DATESTAMP=$(shell date +"%Y-%m-%d")
FLAVOR?=generic
ARCH?=$(shell dpkg --print-architecture)
DIST?=sid
RELEASE=$(DIST)
URL_PATH=https://cloud.debian.org/images/cloud/$(DIST)/daily/latest/
ifeq ($(DIST),trixie)
RELEASE=13
endif
ifeq ($(DIST),bookworm)
RELEASE=12
endif
ifeq ($(DIST),bullseye)
RELEASE=11
endif
debian-$(DIST)-$(FLAVOR)-$(ARCH)-daily.tar.xz:
curl --fail --connect-timeout 20 -LO \
$(URL_PATH)/debian-$(RELEASE)-$(FLAVOR)-$(ARCH)-daily.tar.xz
$(DIST)-$(FLAVOR)-$(DATESTAMP).qcow2: debian-$(RELEASE)-$(FLAVOR)-$(ARCH)-daily.tar.xz
tar xvf debian-$(RELEASE)-$(FLAVOR)-$(ARCH)-daily.tar.xz
qemu-img convert -O qcow2 disk.raw $@
rm -f disk.raw
qemu-img resize $@ 20g
qemu-img snapshot -c untouched $@
image: $(DIST)-$(FLAVOR)-$(DATESTAMP).qcow2
.PHONY: image
IMDS_FILES=$(shell find seedconfig -path '*/.git/*' \
-prune -o -type f -name '*.in.json' -print) \
seedconfig/openstack/latest/user_data
seed.iso: $(IMDS_FILES)
genisoimage -V config-2 -o $@ -J -R -m '*~' -m '.git' seedconfig
With the image in place, the VM can be created with
qemu-system-x86_64 -machine q35,accel=kvm
-cpu host -m 4g -drive file=$ img ,index=0,if=virtio,media=disk
-drive file=seed.iso,media=cdrom,format=raw,index=2,if=virtio
-nic user -nographic
This invokes qemu with the root volume and ISO image attached as disks, uses an emulated q35 machine with the host s CPU and KVM acceleration, the userspace network stack, and a serial console. The first time the VM boots, cloud-init will apply the configuration from the cloud-config available in the ISO9660 filesystem.








libksba after installing the libgpg-error dependency from Guix using the pre-built substitutes.
test-amd64-latest-wget-configure-make-libksba:
image: registry.gitlab.com/debdistutils/guix/container:latest
before_script:
- lndir /gnu/store/*profile/etc/ /etc
- rm -f /etc/group
- groupadd --system guixbuild
- for i in $(seq -w 1 10); do useradd -g guixbuild -G guixbuild -d /var/empty -s $(command -v nologin) -c "Guix build user $i" --system guixbuilder$i; done
- export HOME=/
- export LANG=C.UTF-8
- guix-daemon --disable-chroot --build-users-group=guixbuild &
- guix archive --authorize < /share/guix/ci.guix.gnu.org.pub
- guix archive --authorize < /share/guix/bordeaux.guix.gnu.org.pub
- guix describe
- guix package -i libgpg-error
- GUIX_PROFILE="//.guix-profile"
- . "$GUIX_PROFILE/etc/profile"
script:
- wget https://www.gnupg.org/ftp/gcrypt/libksba/libksba-1.6.7.tar.bz2
- tar xfa libksba-1.6.7.tar.bz2
- cd libksba-1.6.7
- ./configure
- make V=1
- make check VERBOSE=t V=1
You can put that in a .gitlab-ci.yml and push it to GitLab and you will end up with a nice pipeline job output.
As you may imagine, there are several things that are sub-optimal in the before_script above that ought to be taken care of by the Guix container image, and I hope to be able to remove as much of the ugliness as possible. However that doesn t change that these images are useful now, and I wanted to announce this work to allow others to start testing them and possibly offer help. I have started to make use of these images in some projects, see for example the libntlm commit for that.
You are welcome to join me in the Guix container images for GitLab CI/CD project! Issues and merge requests are welcome happy hacking folks!
Boost is a very large and
comprehensive set of (peer-reviewed) libraries for the C++ programming
language, containing well over one hundred individual libraries. The BH package provides a
sizeable subset of header-only libraries for (easier, no linking
required) use by R. It is fairly
widely used: the (partial) CRAN mirror logs (aggregated from the cloud
mirrors) show over 38.5 million package downloads.
Version 1.87.0 of Boost was released last week following the regular
Boost release schedule of April, August and December releases. As
before, we packaged it almost immediately and started testing following
our annual update cycle which strives to balance being close enough to
upstream and not stressing CRAN and the user base too much. The reverse
depends check revealed six packages requiring changes or adjustments. We
opened issue
#103 to coordinate the issue (just as we did in previous years). Our
sincere thanks to Matt
Fidler who fixed two packages pretty much immediately.
As I had not heard back from the other maintainers since filing the
issue, I uploaded the package to CRAN suggesting that the coming
winter break may be a good opportunity for the four other packages to
catch up. CRAN concurred, and
1.87.0-1 is now available there.
There are no other changes apart from cosmetics in the
DESCRIPTION file. For once, we did not add any new Boost libraries. The short NEWS entry
follows.
Via my CRANberries, there is aChanges in version 1.87.0-1 (2024-12-17)
- Upgrade to Boost 1.87.0, patched as usual to comment-out diagnostic suppression messages per the request of CRAN
- Switched to Authors@R
diffstat report relative to the previous
release. Comments and suggestions about BH are welcome via the issue
tracker at the GitHub
repo.
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.
This post is a review for Computing Reviews for The science of detecting LLM-generated text , a article published in Communications of the ACMWhile artificial intelligence (AI) applications for natural language processing (NLP) are no longer something new or unexpected, nobody can deny the revolution and hype that started, in late 2022, with the announcement of the first public version of ChatGPT. By then, synthetic translation was well established and regularly used, many chatbots had started attending users requests on different websites, voice recognition personal assistants such as Alexa and Siri had been widely deployed, and complaints of news sites filling their space with AI-generated articles were already commonplace. However, the ease of prompting ChatGPT or other large language models (LLMs) and getting extensive answers its text generation quality is so high that it is often hard to discern whether a given text was written by an LLM or by a human has sparked significant concern in many different fields. This article was written to present and compare the current approaches to detecting human- or LLM-authorship in texts. The article presents several different ways LLM-generated text can be detected. The first, and main, taxonomy followed by the authors is whether the detection can be done aided by the LLM s own functions ( white-box detection ) or only by evaluating the generated text via a public application programming interface (API) ( black-box detection ). For black-box detection, the authors suggest training a classifier to discern the origin of a given text. Although this works at first, this task is doomed from its onset to be highly vulnerable to new LLMs generating text that will not follow the same patterns, and thus will probably evade recognition. The authors report that human evaluators find human-authored text to be more emotional and less objective, and use grammar to indicate the tone of the sentiment that should be used when reading the text a trait that has not been picked up by LLMs yet. Human-authored text also tends to have higher sentence-level coherence, with less term repetition in a given paragraph. The frequency distribution for more and less common words is much more homogeneous in LLM-generated texts than in human-written ones. White-box detection includes strategies whereby the LLMs will cooperate in identifying themselves in ways that are not obvious to the casual reader. This can include watermarking, be it rule based or neural based; in this case, both processes become a case of steganography, as the involvement of a LLM is explicitly hidden and spread through the full generated text, aiming at having a low detectability and high recoverability even when parts of the text are edited. The article closes by listing the authors concerns about all of the above-mentioned technologies. Detecting an LLM, be it with or without the collaboration of the LLM s designers, is more of an art than a science, and methods deemed as robust today will not last forever. We also cannot assume that LLMs will continue to be dominated by the same core players; LLM technology has been deeply studied, and good LLM engines are available as free/open-source software, so users needing to do so can readily modify their behavior. This article presents itself as merely a survey of methods available today, while also acknowledging the rapid progress in the field. It is timely and interesting, and easy to follow for the informed reader coming from a different subfield.
Welcome to post 45 in the $R^4 series!
We introduced r-ci
here in post
#32 here nearly four years ago. It has found pretty widespread use
and adoption, and we received a few kind words then (in the
linked issue) and also more
recently (in a follow-up comment) from which we merrily quote:
[ ] almost 3 years later on and I have had zero problems with this CI setup. For people who want reliable R software, resources like these are invaluable.And while we followed up with post #41 about r2u for simple continuous integration, we may not have posted when we based r-ci on r2u (for the obvious Linux usage case). So let s make time now for a (comparitively smaller) update, and an update usage examples. We made two changes in the last few days. One is a (obvious in hindsight) simplification. Given that the
bootstrap step
was always executed, and needed no parameters, we pulled it into a new
aggregated setup simply called r-ci that includes it so
that it can be omitted as a step in the yaml file. Second, we recently
needed Fortran on macOS too, and realized it was not installed by
default so we just added that too.
With that a real and used example is now as simple as the
screenshot to the left (and hence one paragraph shorter). The trained
eye will no doubt observe that there is nothing specific to a
given repo. And that is basically the key feature: we can simply copy
this file around and get fast and easy and
reliable CI by taking advantage of the underlying robustness of
r2u solving all
dependency automagically and reliably. The option to enable macOS is
also solid and compelling as the GitHub runners are fast (but more
expensive in how the count against the limit of minutes so again a
tradeoff to make), as is the option to run coverage if one so desires.
Some of my repos do too.
Take a look at the r-ci website which has
more examples for the other supported CI servics it can used with, and
feel free to ask questions as issue in the repo.
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. Please report excessive re-aggregation in third-party for-profit settings.
make is being called
with -k, it just cannot happen.
DEB_BUILD_OPTIONS=nolang=ada,go,c,c++,fortran,objc,obj-c++,m2,rust
the build still fails, and it fails faster than before. Several minutes, not
hours. This is progress, and time to file a bug. The report contains massive
spoilers, so no link. :-)
make ? We start tracing signals sent with bpftrace by writing the
following script, signals.bt:
tracepoint:signal:signal_generate
printf("%s PID %d (%s) sent signal %d to PID %d\n", comm, pid, args->sig, args->pid);
sudo bpftrace signals.bt.
process.exe terminating stuff.
process.exe (PID: 2868133) sent signal 15 to PID 711826
tracepoint:signal:signal_generate
printf("PID %d (%s) sent signal %d to %d\n", pid, comm, args->sig, args->pid);
tracepoint:signal:signal_deliver
printf("PID %d (%s) received signal %d\n", pid, comm, args->sig);
dumb-init, whereas the new one
features
a
little init in perl. We patch the current version of sbuild by making it use
dumb-init instead, and trace two builds: one with the perl init, one with
dumb-init.
dumb-init.
PID 3590011 (process.exe) sent signal 2 to 3590014 PID 3590014 (sleep) received signal 9 PID 3590011 (process.exe) sent signal 15 to 3590063 PID 3590063 (std.process tem) received signal 9 PID 3590011 (process.exe) sent signal 9 to 3590065 PID 3590065 (std.process tem) received signal 9
PID 3589274 (process.exe) sent signal 2 to 3589291 PID 3589291 (sleep) received signal 9 PID 3589274 (process.exe) sent signal 15 to 3589338 PID 3589338 (std.process tem) received signal 9 PID 3589274 (process.exe) sent signal 9 to 3589340 PID 3589340 (std.process tem) received signal 9 PID 3589274 (process.exe) sent signal 15 to 3589341 PID 3589274 (process.exe) sent signal 15 to 3589323 PID 3589274 (process.exe) sent signal 15 to 3589320 PID 3589274 (process.exe) sent signal 15 to 3589274 PID 3589274 (process.exe) received signal 9 PID 3589341 (sleep) received signal 9 PID 3589273 (sbuild-usernsex) sent signal 9 to 3589320 PID 3589273 (sbuild-usernsex) sent signal 9 to 3589323
process.exe is worth
additional inspection. The
source
code of process.d shows something interesting:
1221 @system unittest 1222 [...] 1247 auto pid = spawnProcess(["sleep", "10000"], [...] 1260 // kill the spawned process with SIGINT 1261 // and send its return code 1262 spawn((shared Pid pid) 1263 auto p = cast() pid; 1264 kill(p, SIGINT);
sleep and the SIGINT (signal 2) right in the unit tests
of process.d, just like we have observed in the bpftrace output.
process.exe in isolation, separatedly from the
build? Indeed we can. Let s take the executable from a failed build, and try
running it under /usr/libexec/sbuild-usernsexec.
unshare --map-auto --setuid 0 --setgid 0 mkdir /tmp/rootfs cd /tmp/rootfs cat /home/ema/.cache/sbuild/unstable-arm64.tar unshare --map-auto --setuid 0 --setgid 0 tar xf - unshare --map-auto --setuid 0 --setgid 0 mkdir /tmp/rootfs/whatever unshare --map-auto --setuid 0 --setgid 0 cp process.exe /tmp/rootfs/
process.exe on its own using the perl init, and trace signals at will:
/usr/libexec/sbuild-usernsexec --pivotroot --nonet u:0:100000:65536 g:0:100000:65536 /tmp/rootfs ema /whatever -- /process.exe
dumb-init in milliseconds instead of minutes.
process.exe send more SIGTERMs when using the perl init is now the
big question. We have a simple reproducer, so this is where using strace
becomes possible.
sudo strace --user ema --follow-forks -o sbuild-dumb-init.strace ./sbuild-usernsexec-dumb-init --pivotroot --nonet u:0:100000:65536 g:0:100000:65536 /tmp/dumbroot ema /whatever -- /process.exe
kill.
process.exe does under dumb-init:
3593883 kill(-2, SIGTERM) = -1 ESRCH (No such process)
perl-init instead:
3593777 kill(-2, SIGTERM <unfinished ...>
perl-init!
kill(2) man page:
If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.
tracepoint:signal:signal_generate, shows when signals are actually being
sent, and not the syscall being called. To confirm, one can trace
tracepoint:syscalls:sys_enter_kill and see the negative PIDs, for example:
PID 312719 (bash) sent signal 2 to -312728
dumb-init?
process.exe sends a SIGTERM to every process in the process
group with ID 2. To find out what this process group may be, we spawn a shell
with dumb-init and observe under /proc PIDs 1, 16, and 17. With perl-init
we have 1, 2, and 17. When running dumb-init, there are a few forks before
launching the program, explaining the difference. Looking at /proc/2/cmdline
we see that it s bash, ie. the program we are running under perl-init. When
building a package, that is dpkg-buildpackage itself.
-2 come from in the test?
2363 // Special values for _processID. 2364 enum invalid = -1, terminated = -2;
2694 do s = tryWait(pid); while (!s.terminated); [...] 2697 assertThrown!ProcessException(kill(pid));
pid to terminated you ask?
tryWait:
2568 auto tryWait(Pid pid) @safe 2569 2570 import std.typecons : Tuple; 2571 assert(pid !is null, "Called tryWait on a null Pid."); 2572 auto code = pid.performWait(false);
performWait:
2306 _processID = terminated;
Welcome to the 44th post in the $R^4 series.
A few weeks ago, and following an informal call for talks by James Lamb, I had an opportunity
to talk about r2u to
the Chicago ML and MLops meetup groups. You can find
the slides
here.
Over the last 2 1/2 years, r2u has become a
widely-deployed mechanism in a number of settings, including (but not
limited to) software testing via continuous integration, deployment on
cloud servers besides of course to more standard use on local laptops or
workstation. 30
million downloads illustrate this. My thesis for the talk was that
this extends equally to ML(ops) where no surprises, no hickups
automated deployments are key for large-scale model training, evaluation
and of course production deployments.
In this context, I introduce r2u while giving credit
both to what came before it, the existing alternatives (or competitors
for mindshare if one prefers that phrasing), and of course what lies
underneath it.
The central takeaway, I argue, is that r2u can and does take
advantage of a unique situation in that we can join the package
manager task for the underlying (operating) system and and the
application domain, here R and
its unique CRAN repository
network. Other approaches can, and of course do, provide binaries, but
by doing this outside the realm of the system package manager
can only arrive at a lesser integration (and I show a common error
arising in that case). So where r2u is feasible, it
dominates the alternatives (while the alternatives may well provide
deployment on more platforms which, even when less integrated, may be of
greater importance for some). As always, it all depends.
But the talk, and its slides,
motivate and illustrate why we keep calling r2u by its slogan of
r2u: Fast. Easy. Reliable. Pick All Three.
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. Please report excessive re-aggregation in third-party for-profit settings.
The distinction between hardware and software has historically been relatively easy to understand - hardware is the physical object that software runs on. This is made more complicated by the existence of programmable logic like FPGAs, but by and large things tend to fall into fairly neat categories if we're drawing that distinction.Firmware is software that provides low-level control of computing device hardware, and basically anything that's generally described as firmware certainly fits into the "software" side of the above hardware/software binary. From a software freedom perspective, this seems like something where the obvious answer to "Should this be free" is "yes", but it's worth thinking about why the answer is yes - the goal of free software isn't freedom for freedom's sake, but because the freedoms embodied in the Free Software Definition (and by proxy the DFSG) are grounded in real world practicalities.
within which software installation is not intended after the user obtains the product, then the software does not need to be free. (b) effectively means that the firmware has to be in ROM, since any runtime interface that allows the firmware to be loaded or updated is intended to allow software installation after the user obtains the product.
A new release 0.2.13 of RcppCCTZ is
now on CRAN.
RcppCCTZ
uses Rcpp to bring CCTZ to R. CCTZ is a C++ library for
translating between absolute and civil times using the rules of a time
zone. In fact, it is two libraries. One for dealing with
civil time: human-readable dates and times, and one for
converting between between absolute and civil times via time zones. And
while CCTZ is made by
Google(rs), it is not an official Google product. The RcppCCTZ
page has a few usage examples and details. This package was the first CRAN package to use CCTZ; by now several others
packages (four the last time we counted) include its sources too. Not
ideal, but beyond our control.
This version include most routine package maintenance as well as one
small contributed code improvement. The changes since the last CRAN release are summarised
below.
Courtesy of my CRANberries, there is a diffstat report relative to to the previous version. More details are at the RcppCCTZ page; code, issue tickets etc at the GitHub repository. If you like this or other open-source work I do, you can sponsor me at GitHub.Changes in version 0.2.13 (2024-12-11)
- No longer set compilation standard as recent R version set a sufficiently high minimum
- Qualify a call to
cctz::format(Michael Quinn in #44)- Routine updates to continuous integration and badges
- Switch to Authors@R in DESCRIPTION
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
drupal7 package,
and by April 2013 I became its primary maintainer. I kept the drupal7 package
up to date in Debian until 2018; the supported build methods for Drupal 8 are
not compatible with Debian (mainly, bundling third-party libraries and updating
them without coordination with the rest of the ecosystem), so towards the end of
2016, I announced I would not package Drupal 8 for
Debian.
By March 2016, we migrated our main page to Drupal
7. By
then, we already had several other sites for our academics projects, but my
narrative follows our main Web site. I did manage to migrate several Drupal 6
(D6) sites to Drupal 7 (D7); it was quite involved process, never transparent to
the user, and we did have the backlash of long downtimes (or partial downtimes,
with sites half-available only) with many of our users. For our main site, we
took the opportunity to do a complete redesign and deployed a fully new site.
You might note that March 2016 is after the release of D8 (November 2015). I
don t recall many of the specifics for this decision, but if I m not mistaken,
building the new site was a several months long process not only for the
technical work of setting it up, but for the legwork of getting all of the
needed information from the different areas that need to be represented in the
Institute. Not only that: Drupal sites often include tens of contributed themes
and modules; the technological shift the project underwent between its 7 and 8
releases was too deep, and modules took a long time (if at all many themes and
modules were outright dumped) to become available for the new release.
Naturally, the Drupal Foundation wanted to evolve and deprecate the old
codebase. But the pain to migrate from D7 to D8 is too big, and many sites have
remained under version 7 Eight years after D8 s release, almost 40% of Drupal
installs are for version 7,
and a similar proportion runs a currently-supported release (10 or 11). And
while the Drupal Foundation made a great job at providing very-long-term support
for D7, I understand the burden is becoming too much, so close to a year ago
(and after pushing several times the D7, they finally announced support will
finish this upcoming January 5.
This graph is disgregated into minor versions, and I don t want to come up with
yet another graph for it but it supports (most of) the narrative I presented
above although I do miss the recent drop builtwith reported in D7 s
numbers!
D2B Migrate
module, I found it is quite easy
to migrate a live site from Drupal 7 to Backdrop.
mysqldump output, and it got me close to 3GB of data. And given the
D2B_migrate is meant to work via a Web interface (my playbook works around it
by using a client I wrote with Perl s
WWW::Mechanize), I repeatedly
stumbled with PHP s maximum POST size, maximum upload size, maximum memory
size
I asked for help in Backdrop s Zulip chat
site,
and my attention was taken off fixing PHP to something more obvious: Why is the
database so large? So I took a quick look at the database (or rather: my first
look was at the database server s filesystem usage). MariaDB stores each table
as a separate file on disk, so I looked for the nine largest tables:
# ls -lhS head
total 3.8G
-rw-rw---- 1 mysql mysql 2.4G Dec 10 12:09 accesslog.ibd
-rw-rw---- 1 mysql mysql 224M Dec 2 16:43 search_index.ibd
-rw-rw---- 1 mysql mysql 220M Dec 10 12:09 watchdog.ibd
-rw-rw---- 1 mysql mysql 148M Dec 6 14:45 cache_field.ibd
-rw-rw---- 1 mysql mysql 92M Dec 9 05:08 aggregator_item.ibd
-rw-rw---- 1 mysql mysql 80M Dec 10 12:15 cache_path.ibd
-rw-rw---- 1 mysql mysql 72M Dec 2 16:39 search_dataset.ibd
-rw-rw---- 1 mysql mysql 68M Dec 2 13:16 field_revision_field_idea_principal_articulo.ibd
-rw-rw---- 1 mysql mysql 60M Dec 9 13:19 cache_menu.ibd
D2B_migrate works with a mysqldump output, and
given that mysqldump locks each table before starting to modify it and unlocks
it after its job is done, I can just do the following:
$ perl -e '$output = 1; while (<>) $output=0 if /^LOCK TABLES (accesslog search_index watchdog cache_field cache_path) /; $output=1 if /^UNLOCK TABLES/; print if $output ' < /tmp/d7_backup.sql > /tmp/d7_backup.eviscerated.sql; ls -hl /tmp/d7_backup.sql /tmp/d7_backup.eviscerated.sql
-rw-rw-r-- 1 gwolf gwolf 216M Dec 10 12:22 /tmp/d7_backup.eviscerated.sql
-rw------- 1 gwolf gwolf 2.1G Dec 6 18:14 /tmp/d7_backup.sql
D2B_migrate is happy to take it. And I m a big step closer to finishing my
reliance on (this bit of) legacy code for my highly-visible sites
A new version of our pinp package
arrived on CRAN today, and is
the first release in four years. The pinp package
allows for snazzier one or two column Markdown-based pdf vignettes, and
is now used by a few packages. A screenshot of the package vignette can
be seen below. Additional screenshots are at the pinp page.
This release contains no new features or new user-facing changes but
reflects the standard package and repository maintenance over the
four-year window since the last release: updating of actions, updating
of URLs and addressing small packaging changes spotted by
ever-more-vigilant R checking code.
The NEWS entry for this release follows.
Courtesy of my CRANberries, there is a diffstat report relative to previous release. More detailed information is on the ping page. For questions or comments use the issue tracker off the GitHub repo. If you like this or other open-source work I do, you can sponsor me at GitHub.Changes in pinp version 0.0.11 (2024-12-08)
- Standard package maintenance for continuous integration, URL updates, and packaging conventions
- Correct two minor nags in the Rd file
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
Next.