Spheres of Influence is a direct sequel to
Grand Central Arena, which introduces
the world background and is also a much better book. There is a detailed
recap of the previous volume (thank you!) and a summary of things that
happened between the volumes (that was odd), so it's easy to refresh your
memory, but there's no point in reading this book if you've not read the
first one.
In this series, Spoor is explicitly writing a throw-back space adventure
inspired by E.E. "Doc" Smith and similar SF from the 1920s to the 1950s.
Grand Central Arena was the discovery and exploration story, which
in my opinion is where that literary tradition is at its strongest.
Spheres of Influence veers into a different and less appealing part
of that tradition: the moment when the intrepid space explorer is
challenged by the ignorant Powers That Be at home, who don't understand
the importance of anything that's happening.
Captain Ariane Austin and her crew made a stunning debut into the Arena,
successfully navigated its politics (mostly via sheer audacity and luck),
and achieved a tentatively strong position for humanity. However,
humanity had never intended them to play that role. There isn't much
government in Spoor's (almost entirely unexplained) anarcho-libertarian
future, but there is enough for political maneuvering and the appointment
of a more official ambassador to the Arena who isn't Ariane. But the
Arena has its own rules that care nothing about human politics, which
gives Ariane substantial leverage to try to prevent Earth politicians from
making a mess of things.
This plot could be worse. Unlike his source material, Spoor is not
entirely invested in authoritarian politics, and the plot
resolution is a bit friendlier to government oversight than one might
expect. (It's disturbing, though, that this oversight seems to consist
mostly of the military, and it's not clear how those people are selected.)
But the tradition of investing vast powers in single people of great moral
character is one of the less defensible tropes of early American SF, and
Spoor chooses to embrace it to an unfortunate degree. Clearing out all the
bureaucratic second-guessing to let the honorable person who has stumbled
across vast power make all the decisions is a type of simplistic politics
with a long, bad history in US fiction. The author can make it look like
a good idea by yanking hard on the scales; Ariane makes all the right
decisions because she's the heroine and therefore of course she does. I
was unsettled, in this year of 2021, by the book's apparent message that
her major failing is her unwillingness to consolidate her power.
This isn't the only problem I had with this book. Before we get to the
political maneuvering, the plot takes a substantial digression into the
Hyperion Project.
The Hyperion Project showed up in the first book as part of the backstory
of one of the characters. I'll omit the details to avoid spoilers, but in
the story it functioned as an excuse to model a character directly on
E.E. "Doc" Smith characters. The details never seemed that interesting,
but as background it was easy to read past, and the character in question
was still moderately enjoyable.
Unfortunately, the author was more invested in this bit of background than
I was. Spheres of Influence introduces four more characters from
the same project, including Wu Kong, a cliched mash-up of numerous
different Monkey King stories who becomes a major viewpoint character.
(The decision to focus on a westernized, exoticized version of a Chinese
character didn't seem that wise to me.) One problem is that Spoor clearly
thinks Wu Kong is a more interesting character than I do, but my biggest
complaint is that introducing these new characters was both unnecessary
and pulled the story away from the pieces I was interested in. I want to
read more about the Arena and its politics, alien technology, and awesome
vistas, not about some significantly less interesting historical human
project devoted to bringing fictional characters to life.
And that's the third problem with this book: not enough happens.
Grand Central Arena had a good half-dozen significant plot
developments set among some great sense-of-wonder exploration and alien
first contact. There are only two major plot events in Spheres of
Influence, both are dragged out with unnecessary description and
posturing, and neither show us much that's exciting or new. The
exploration of the Arena grinds nearly to a halt, postponing the one
offered bit of deep exploration for the third book. There are some
satisfying twists and turns in the bits of plot we do get, but nothing
that justifies nearly 600 pages.
This is not a very good book, and huge step down from the first book of
the series. In its defense, it still offers the sort of optimistic (and,
to be honest, simplistic) adventure that I was looking for after reading a
book full of depressing politics. It's hard not to enjoy the protagonists
taking audacious risks, revealing hidden talents, and winning surprising
victories. But I wanted the version with more exploration, more new
sights, less authoritarian and militaristic politics, and less insertion
of fictional characters.
Also, yes, we know that one of the characters is an E.E. "Doc" Smith
character. Please give the cliched Smith dialogue tics a rest. All of
the "check to nine decimal places" phrases are hard enough to handle in
Smith's short and fast-moving books. They're agonizing in a slow-moving
book three times as long.
Not recommended, although I'm still invested enough in the setting that
I'll probably read the third book when I'm feeling in the mood for some
feel-good adventure. It appears to have the plot developments I was
hoping would be in this one.
Followed by Challenges of the Deeps.
Rating: 5 out of 10
No doubt it was someone's idea of a joke to release Silence of the Lambs on Valentine's Day, thirty years ago today. Although it references Valentines at one point and hints at a deeper relationship between Starling and Lecter, it was clearly too tempting to jeopardise so many date nights. After all, how many couples were going to enjoy their ribeyes medium-rare after watching this?
Given the muted success of Manhunter (1986), Silence of the Lambs was our first real introduction to Dr. Lecter. Indeed, many of the best scenes in this film are introductions: Starling's first encounter with Lecter is probably the best introduction in the whole of cinema, but our preceding introduction to the asylum's factotum carries a lot of cultural weight too, if only because the camera's measured pan around the environment before alighting on Barney has been emulated by so many first-person video games since.
We first see Buffalo Bill at the thirty-two minute mark. (Or, more tellingly, he sees us.) Delaying the viewer's introduction to the film's villain is the mark of a secure and confident screenplay, even if it was popularised by the budget-restricted Jaws (1975) which hides the eponymous shark for one hour and 21 minutes.
It is no mistake that the first thing we see of Starling do is, quite literally, pull herself up out of the unknown. With all of the focus on the Starling Lecter repartee, the viewer's first introduction to Starling is as underappreciated as she herself is to the FBI. Indeed, even before Starling tells Lecter her innermost dreams, we learn almost everything we need to about Starling in the first few minutes: we see her training on an obstacle course in the forest, the unused rope telling us that she is here entirely voluntarily. And we can surely guess why; the passing grade for a woman in the FBI is to top of the class, and Starling's not going to let an early February in Virginia get in the way of that.
We need to wait a full three minutes before we get our first line of dialogue, and in just eight words ("Crawford wants to see you in his office...") we get our confirmation about the FBI too. With no other information other than he can send a messenger out into the cold, we can intuit that Crawford tends to get what Crawford wants. It's just plain "Crawford" too; everyone knows his actual title, his power, "his" office.
The opening minutes also introduce us to the film's use of visual hierarchy. Our Hermes towers above Starling throughout the brief exchange (she must push herself even to stay within the camera's frame). Later, Starling always descends to meet her demons: to the asylum's basement to visit Lecter and down the stairs to meet Buffalo Bill. Conversely, she feels safe enough to reveal her innermost self to Lecter on the fifth floor of the courthouse. (Bong Joon-ho's Parasite (2019) uses elevation in an analogous way, although a little more subtly.)
The messenger turns to watch Starling run off to Crawford. Are his eyes involuntarily following the movement or he is impressed by Starling's gumption? Or, almost two decades after John Berger's male gaze, is he simply checking her out? The film, thankfully, leaves it to us.
Crawford is our next real introduction, and our glimpse into the film's sympathetic treatment of law enforcement. Note that the first thing that the head of the FBI's Behavioral Science Unit does is to lie to Starling about the reason to interview Lecter, despite it being coded as justified within the film's logic. We learn in the book that even Barney deceives Starling, recording her conversations with Lecter and selling her out to the press. (Buffalo Bill always lies to Starling, of course, but I think we can forgive him for that.) Crawford's quasi-compliment of "You grilled me pretty hard on the Bureau's civil rights record in the Hoover years..." then encourages the viewer to conclude that the FBI's has been a paragon of virtue since 1972... All this (as well as her stellar academic record, Crawford's wielding of Starling's fragile femininity at the funeral home and the cool reception she receives from a power-suited Senator Ruth Martin), Starling must be constantly asking herself what it must take for anyone to take her seriously. Indeed, it would be unsurprising if she takes unnecessary risks to make that happen.
The cold open of Hannibal (2001) makes for a worthy comparison. The audience remembers they loved the dialogue between Starling and Lecter, so it is clumsily mentioned. We remember Barney too, so he is shoehorned in as well. Lacking the confidence to introduce new signifiers to its universe, Red Dragon (2002) aside, the hollow, 'clip show' feel of Hannibal is a taste of the zero-calorie sequels to come in the next two decades.
The film is not perfect, and likely never was. Much has been written on the fairly transparent transphobia in Buffalo Bill's desire to wear a suit made out of women's skin, but the film then doubles down on its unflattering portrayal by trying to have it both ways. Starling tells the camera that "there's no correlation between transsexualism and violence," and Lecter (the film's psychoanalytic authority, remember) assures us that Buffalo Bill is "not a real transsexual" anyway. Yet despite those caveats, we are continually shown a TERFy cartoon of a man in a wig tucking his "precious" between his legs and an absurdly phallic gun. And, just we didn't quite get the message, a decent collection of Nazi memorabilia.
The film's director repeated the novel's contention that Buffalo Bill is not actually transgender, but someone so damaged that they are seeking some kind of transformation. This, for a brief moment, almost sounds true, and the film's deranged depiction of what it might be like to be transgender combined with its ambivalence feels distinctly disingenuous to me, especially given that on an audience and Oscar-adjusted basis Silence of the Lambs may very well be the most transphobic film to come out of Hollywood. Still, I remain torn on the death of the author, especially when I discover that Jonathan Demme went on to direct Philadelphia (1993), likely the most positive film about homophobia and HIV.
Nevertheless, as an adaption of Thomas Harris' original novel, the movie is almost flawless. The screenplay excises red herrings and tuns down the volume on some secondary characters. Crucially for the format, it amplifies Lecter's genius by not revealing that he knew everything all along and cuts Buffalo Bill's origin story for good measure too good horror, after all, does not achieve its effect on the screen, but in the mind of the viewer. The added benefit of removing material from the original means that the film has time to slowly ratchet up the tension, and can remain patient and respectful of the viewer's intelligence throughout: it is, you could almost say, "Ready when you are, Sgt. Pembury". Otherwise, the film does not deviate too far from the original, taking the most liberty when it interleaves two narratives for the famous 'two doorbells' feint.
Dr. Lecter's upright stance when we meet him reminds me of the third act of Alfred Hitchcock's Notorious (1946), another picture freighted with meaningful stairs. Stanley Kubrick's The Killing (1956) began the now-shopworn trope of concealing a weapon in a flower box.
Two other points of deviation from the novel might be worthy of mention. In the book, a great deal is made of Dr. Lecter's penchant for Bach's Goldberg Variations, inducing a cultural resonance with other cinematic villains who have a taste for high art. It is also stressed in the book that it is the Canadian pianist Glenn Gould's recording too, although this is likely an attempt by Harris to demonstrate his own refined sensibilities Lecter would surely have prefered a more historically-informed performance on the harpsichord. Yet it is glaringly obvious that it isn't Gould playing in the film at all; Gould's hypercanonical 1955 recording is faster and focused, whilst his 1981 release is much slower and contemplative. No doubt tedious issues around rights prevented the use of either recording, but I like to imagine that Gould himself nixed the idea.
The second change revolves around the film's most iconic quote. Deep underground, Dr. Lecter tries to spook Starling:
A census taker once tried to test me. I ate his liver with some fava beans and a nice Chianti.
The novel has this as "some fava beans and a big Amarone". No doubt the movie-going audience could not be trusted to know what an Amarone was, just as they were not to capable of recognising a philosopher. Nevertheless, substituting Chianti works better here as it cleverly foreshadows Tuscany (we discover that Lecter is living in Florence in the sequel), and it avoids the un-Lecterian tautology of 'big' Amarone's, I am reliably informed, are big-bodied wines. Like Buffalo Bill's victims.
Yet that's not all. "The audience", according to TV Tropes:
... believe Lecter is merely confessing to one of his crimes. What most people would not know is that a common treatment for Lecter's "brand of crazy" is to use drugs of a class known as MAOIs (monoamine oxidase inhibitors). There are several things one must not eat when taking MAOIs, as they can case fatally low blood pressure, and as a physician and psychiatrist himself, Dr. Lecter would be well aware of this. These things include liver, fava beans, and red wine. In short, Lecter was telling Clarice that he was off his medication.
I could write more, but as they say, I'm having an old friend for dinner. The starling may be a common bird, but The Silence of the Lambs is that extremely rara avis indeed the film that's better than the book. Ta ta...
A new release 0.2.3 of the RcppSMC package arrived on CRAN earlier today. Once again it progressed as a very quick pretest-publish within minutes of submission thanks CRAN!
RcppSMC provides Rcpp-based bindings to R for the Sequential Monte Carlo Template Classes (SMCTC) by Adam Johansen described in his JSS article. Sequential Monte Carlo is also referred to as Particle Filter in some contexts.
This release somewhat belatedly merges a branch Leah had been working on and which we all realized is ready . We now have a good snapshot to base new work on, as maybe with the Google Summer of Code 2021.
Changes in RcppSMC version 0.2.3 (2021-02-10)
Addition of a Github Action CI runner (Dirk)
Switching to inheritance for the moveset rather than pointers to functions (Leah in #45).
Review: The Future of Another Timeline, by Annalee Newitz
Publisher:
Tor
Copyright:
September 2019
ISBN:
0-7653-9212-7
Format:
Kindle
Pages:
350
Tess is a time traveler from 2022, a member of the semi-secret Daughters
of Harriet who are, under the cover of an academic research project,
attempting to modify the timeline to improve women's rights in the United
States. Beth is a teenager in suburban Irvine in Alta California, with an
abusive father, a tight-knit group of friends, and a love of feminist punk
rock. The story opens with both of them at a Grape Ape concert in 1992.
Beth is hanging out with her friends, and Tess is looking for signs of a
conspiracy to alter the timeline to further restrict the rights of women.
The Future of Another Timeline has a great science fiction premise.
There are time machines buried in geologically-stable bedrock that have
been there since before any current species evolved. The first was
discovered by humans thousands of years before the start of the story.
They can be controlled with vibrations in the rock and therefore don't
need any modern technology to operate. Humanity has therefore lived with
time travel for much of recorded history, albeit with a set of rules
strictly imposed by these mysterious machines: individuals can only travel
to their own time or earlier, and cannot carry any equipment with them.
The timeline at the start of the book is already not ours, and it shifts
further over the course of the plot.
Time travel has a potentially devastating effect on the foundations of
narrative, so most SF novels that let the genie of time travel out of the
bottle immediately start trying to stuff it back in again. Newitz does
not, which is a refreshing change. The past is not immutable, there is no
scientific or magical force that prevents history from changing, and
people do not manage to keep something with a history of thousands of
years either secret or well-controlled. It's not a free-for-all: There is
a Chronology Academy that sets some rules for time travelers, the Machines
themselves have rules that prevent time travel from being too casual, and
most countries have laws about what time travelers are allowed to do. But
it's also not horribly difficult to travel in time, not horribly uncommon
to come across someone from the future, and most of the rules are not
strictly enforced.
This does mean there are some things that one has to agree to not think
about. (To take the most obvious example, the lack of government and
military involvement in time travel is not believable, even given its
constraints. One has to accept this as a story premise.) But it removes
the claustrophobic rules-lawyering that's so common in time travel stories
and lets Newitz tell a more interesting political story about the
difficulty of achieving lasting social change.
Unfortunately, this is also one of those science fiction novels that is
much less interested in its premise and machinery than I was as a reader.
The Machines are fascinating objects: ancient, mysterious, and as we learn
more about them over the course of the story, rich with intriguing detail.
After reading this summary, you're probably curious where they came from,
what they can do, and how they work. So am I, after reading the book.
The Future of Another Timeline is completely uninterested in that
or any related question. About halfway through the book, a time traveler
from the future demonstrates interfaces in the time machines that no one
knew existed, the characters express some surprise, and then no one asks
any meaningful questions for the rest of the book. At another point, the
characters have the opportunity to see a Machine in something closer to
its original form before aspects of its interface have eroded away. They
learn just enough to solve their immediate plot problem and show no
further curiosity.
I found this immensely frustrating, in part due to the mixed signaling.
Normally if an author is going to use a science fiction idea as pure plot
device, they avoid spending much time on it, implicitly warning the reader
that this isn't where the story is going. Newitz instead provides the
little details and new revelations that normally signal that understanding
these objects will be a key to the plot, and then shrugs and walks away,
leaving every question unanswered.
Given how many people enjoyed Rendezvous
with Rama, this apparently doesn't bother other readers as much as it
bothers me. If you are like me, though, be warned.
But, fine, this is a character story built around a plot device rather
than a technology story. That's a wholly valid mode of science fiction,
and that part of the book has heft. It reminded me of the second-wave
feminist science fiction of authors like Russ
and Charnas, except updated to modern politics.
The villains are a projection forward of the modern on-line misogynists
(incels, specifically), but Newitz makes the unusual choice of not
focusing on their motives or interior lives. They simply exist as a
malevolent hostile force, much the way that women experience them today
on-line. They have to be defeated, the characters of the book set out to
defeat them, and this is done without melodrama, hand-wringing, or
psychoanalysis. It's refreshingly straightforward and unambiguous, and it
keeps the focus on the people trying to make the world a better place
rather than on the redemption arc of some screaming asshole.
The part I was less enamored of is that these are two of the least
introspective first-person protagonists that I've seen in a book.
Normally, first-person perspective is used to provide a rich internal
monologue about external events, but both Tess and Beth tell their stories
as mostly-dry sequences of facts. Sometimes this includes a bit of what
they're feeling, but neither character delves much into the why or how.
This improves somewhat towards the end of the book, but I found the first
two-thirds of the story oddly flat and had a hard time generating much
interest in or sympathy for the characters. There are good in-story
reasons for both Tess and Beth to heavily suppress their emotions, so I
will not argue this is unrealistic, but character stories work better for
me with more of an emotional hook.
Hand-in-hand with that is the problem that the ending didn't provide the
catharsis that I was hoping for. Beth goes through absolute hell over the
course of the book, and while that does reach a resolution that I know
intellectually is the best type of resolution that her story can hope for,
it felt wholly insufficient. Tess's story reaches a somewhat more
satisfying conclusion, but one that reverses an earlier moral imperative
in a way that I found overly sudden. And everything about this book is
highly contingent and temporary in a way that is true to its theme and
political statement but that left me feeling more weary than satisfied.
That type of ending is a valid authorial choice, and to some extent my
complaint is only that this wasn't the book for me at the time I read it.
But I have read other books with similarly conditional endings and
withdrawn characters that still carried me along with the force and power
of the writing (Daughters of the North
comes to mind). The Future of Another Timeline is not poorly
written, but neither do I think it achieves that level of skill. The
writing is a bit wooden, the flow of sentences is a touch cliched and
predictable, and the characters are a bit thin. It's serviceable writing
had there been something else (such as a setting-as-character exploration
of the origins and purpose of the Machines) to grab my attention and pull
me along. But if the weight of the story has to be born by the quality of
the writing, I don't think it was quite up to the task.
Overall, I think The Future of Another Timeline has a great premise
that it treats with frustrating indifference, a satisfyingly different
take on time travel with some obvious holes, some solid political ideas
reminiscent of an earlier age of feminist SF, a refreshing unwillingness
to center evil on its own terms, characters that took more than half the
book to develop much depth, and a suitable but frustrating ending. I can
see why other people liked it more than I did, but I can't recommend it.
Content warning: Rape, graphic violence, child abuse, gaslighting, graphic
medical procedure, suicide, extreme misogyny, and mutilation, and this is
spread throughout the book, not concentrated in one scene. I'm not very
squeamish about non-horror fiction and it was still rather a lot, so
please read with care.
Rating: 6 out of 10
I am excited to announce that I have joined Fujitsu Research Labs with beginning of February.
My job will comprise, besides other things, research and development in machine learning, open source strategies, development of and representation of Fujitsu in the scikit-learn consortium. We are doing a lot of topological data analysis, so if you are interested in these kinds of topics, don t hesitate to contact me.
I am still settling into a completely new world of big and Japanese company with lots of on-boarding seminars, applications, paper work, meetings, but I am looking forward to start the actual work as soon as possible.
As a long long time Linux user, I am a bit in trouble now, since everything in Fujitsu requires Windows it seems. I will try hard to improve this situation including my dream of having Fujitsu machines with pre-installed Debian on it
Yikes, my head is still spinning from what a crazy month January was. Only managed to squeeze in a few uploads. I ve also been working on an annual DPL summary that I got to about 80% in December and was barely able to touch it during January, might end up simplifying it just so that I can get it released. In the meantime there s a lot of interesting stuff happening, stay tuned :)
2021-01-08: Sponsor package python-strictyaml (1.1.1-1) for Debian unstable (Python team request).
2021-01-12: Sponsor package buildbot (2.10.0-1) for Debian unstable (Python team request).
2021-01-12: Sponsor package peewee (3.14.0+dfsg-2) for Debian unstable (Python team request).
2021-01-12: Sponsor package crashtest (0.3.1-1) for Debian unstable (Python team request).
2021-01-12: Sponsor package sqlobject (3.9.0+dfsg-1) for Debian unstable (Python team request).
2021-01-12: Upload package kpmcore (29.12.1-1) to Debian unstable.
2021-01-12: Upload package xabacus (8.3.2-1) to Debian unstable.
2021-01-13: Upload package partitionmanager (20.12.1-1) to Debian unstable.
2021-01-13: Review package clikit (Waiting on dependencies) (Python team request).
2021-01-26: Upload package gdisk (1.0.6-1) to Debian unstable.
Here s my (sixteenth) monthly update about the activities I ve done in the F/L/OSS world.
Debian
This was my 25th month of contributing to Debian.
I became a DM in late March 2019 and a DD on Christmas 19! \o/
This month was bat-shit crazy. Why? We ll come to it later, probably 15th of this month?
Anyway, besides being crazy, hectic, adventerous, and the first of 2021, this month I was super-insanely busy. With what? Hm, more about this later this month! ^_^
However, I still did some Debian stuff here and there. Here are the following things I worked on:
Debian (E)LTS
Debian Long Term Support (LTS) is a project to extend the lifetime of all Debian stable releases to (at least) 5 years. Debian LTS is not handled by the Debian security team, but by a separate group of volunteers and companies interested in making it a success.
And Debian Extended LTS (ELTS) is its sister project, extending support to the Jessie release (+2 years after LTS support).
This was my sixteenth month as a Debian LTS and seventh month as a Debian ELTS paid contributor.
I was assigned 26.00 hours for LTS and 36.75 hours for ELTS and worked on the following things:
(however, I worked extra for 9 hours for LTS and 9 hours for ELTS this month, which I intend to balance from the next month!)
LTS CVE Fixes and Announcements:
Issued DLA 2518-1, fixing CVE-2020-35492, for cairo.
For Debian 9 Stretch, these problems have been fixed in version 1.14.8-1+deb9u1.
Prepared DSA 4831-1, fixing CVE-2020-26298, for ruby-redcarpet.
For Debian 10 Buster, these problems have been fixed in version 3.4.0-4+deb10u1. The announcement was released by the Security Team.
This January, on 23rd and 24th, we had Mini DebConf India 2021 online.
I had a talk as well, titled, Why Point Releases are important and how you can help
prepare them?".
It was a fun and a very short talk, where I just list out the reasons and ways to help in
the preparation of point releases . I did some experimentation with this talk, figuring
out what works for the audience and what doesn t and where can I improve for the next time
I talk about this topic! \o/
You can listen to the talk here
and let me know if you have any feedback!
Anyway, the conference lasted for 2 days and I also did some volunteering (talk director,
talk miester) in Hindi and English, both! It was all so fun and new. Anyway, here s the picture we took:
In another exciting news, I got my first CVE assigned!!! \o/
No, it is not something that I found, it was discovered by Tavis Ormandy. I just assigned
this a CVE ID, CVE-2021-3181.
This is my first, so I am very excited about this! ^_^
Besides, there s something more that is in the pipelines. Can t talk about it now, shh. But
hopefully very sooooooon!
Other $things! \o/
This month was tiresome, with most of the time being spent on the Debian stuff, I did
very little work outside it, really. The issues and patches that I sent are:
Issue #700 for redcarpet, asking for a reproducer for CVE-2020-26298 and some additional patch related queries.
Issue #7 for in-parallel, asking them to not use relative paths for tests.
Issue #8 for in-parallel, reporting a test failure for the library.
Issue #2 for rake-ant, asking them to bump their dependencies to a newer version.
PR #3 for rake-ant, bumping the dependencies to a newer version, fixing the above issue, heh.
Issue #4 for rake-ant, requesting to drop git from their gemspec.
PR #5 for rake-ant, dropping git from gemspec, fixing the above issue, heh.
Issue #95 for WavPack, asking for a review of past security vulnerabilites wrt v4.70.0.
Reviewed PR #128 for ruby-openid, addressing the past regression with CVE fix merge.
Reviewed PR #63 for cocoapods-acknowledgements, updating redcarpet to v3.5.1, as a safety measure due to recently discovered vulnerability.
Issue #1331 for bottle, asking for relevant commits for CVE-2020-28473 and clarifying other things.
Issue #5 for em-redis, reporting test failures on IPv6-only build machines.
Issue #939 for eventmachine, reporting test failures for em-redis on IPv6-only build machines.
approved deletion of
thinkfan (daemon without a UI)
rejected deletion of
knavalbattle (non-English screenshots are kept unless there is a replacement),
vrms (nonsensical),
apache2 (not a bug reporting site),
acm/pev/auto-multiple-choice (screenshots are versioned, old ones are retained),
konsole (screenshots serves Ubuntu users too, screenshots are versioned),
hashcat/onboard/jack-keyboard/budgie-keyboard-autoswitch-applet/pcmanx-gtk2/akregator (spam)
FOSSjobs: reviewed posts
Administration
Debian ports:
fix header on incoming.ports.d.o/buildd
Debian wiki:
unblock IP addresses,
approve accounts
Respond to queries from Debian users and contributors on the mailing lists and IRC
Invite organisations to post on FOSSjobs
Sponsors
The samba work, apt-listchanges work, pytest-rerunfailures upload, python-testfixtures/python-scrapy bugs and python-scrapy related backports were sponsored by my employer.
All other work was done on a volunteer basis.
Here is my monthly update covering what I have been doing in the free software world during January 2021 (previous month):
As part of my duties of being on the board of directors of the Open Source Initiative, I attended its monthly meeting and participated in various licensing and other related discussions occurring on the internet. Unfortunately, I could not attend the parallel meeting for Software in the Public Interest this month.
After a rather turbulent 2020, I was very grateful to have been chosen in OpenUK's 2021 honours as one of the 100 top influencers in the UK's open technology community, which recognises contributions to open source software, open data and open hardware. Congratulations to all of the other open source heroes and heroines who were also listed am looking forward to an exciting year together.
Reproducible Builds
One of the original promises of open source software is that distributed peer review and transparency of process results in enhanced end-user security. However, whilst anyone may inspect the source code of free and open source software for malicious flaws, almost all software today is distributed as pre-compiled binaries. This allows nefarious third-parties to compromise systems by injecting malicious code into ostensibly secure software during the various compilation and distribution processes.
The motivation behind the Reproducible Builds effort is to ensure no flaws have been introduced during this compilation process by promising identical results are always generated from a given source, thus allowing multiple third-parties to come to a consensus on whether a build was compromised.
This month, I:
Categorised a huge number of packages and issues in the Reproducible Builds "notes" repository.
Drafted, published and publicised our monthly report and attended a number of IRC meetings.
Submitted the following patches to fix reproducibility-related toolchain issues within Debian:
I also submitted a number of patches to fix specific reproducibility issues including apertium-anaphora & davs2, as well as a number of issues found during reproducibility testing. For example, I discovered that node-tap-parser's manual pages contained errors instead of documentation (#980293).
disorderfs is our FUSE-based filesystem that deliberately introduces non-determinism into system calls to reliably flush out reproducibility issues. This month, I updated our benchmarking tools to call use a tool that will call stat(2) repeatedly. [...]
strip-nondeterminism is our tool to remove specific non-deterministic results from a completed build. This month, I ensured that the tool did not process unwritable files and printing a warning in this case (#980356) as well as a number of codebase improvements such as reflowing logic to make future changes easier. [...]
I also made the following changes to diffoscope, our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues, releasing version 164, version 165 and version 166 as well as triaging and merging many contributions from others:
New features:
Save sys.argv in our top-level temporary directory, in case it helps debug why temporary directories might not get cleaned up. [...]
Collapse the --acl and --xattr arguments into --extended-filesystem-attributes to cover all of these extended attributes, defaulting the new option to false (ie. to not check these expensive external calls). [...][...]
Clarify in a comment that __del__ is not always called in Python, so temporary directories are not necessarily removed the moment they go out of scope. [...]
Print the free space in our temporary directory when we create it, not from within diffoscope.main. [...]
Tidy the diffoscope.comparators.utils.fuzzy module. [...]
Add a note regarding the special ordering of test_all_tools_are_listed within that module. [...]
6.0.9-3 (to unstable) Allow /etc/redis to be rewritten and also removed upon purge. (#981000)
6.0.9-4 (to unstable) Send systemd readiness notification when we are ready to accept connections in order to fix replicaof support. Thanks to Guillem Jover for the report and patch. (#981226)
6.2~rc2-1 (to experimental) New upstream release.
6.2~rc2-2 (to experimental) Allow /etc/redis to be rewritten and also removed upon purge. (#981000)
Frontdesk duties, responding to user/developer questions, reviewing others' packages, participating in mailing list discussions, attending a monthly meeting, etc.
Issued DLA 2515-1 for csync2. The cluster synchronization tool did not correctly check for the return value from GnuTLS security routines; it neglected to repeatedly call this function as required by the design of the API.
Issued DLA 2516-1 for gssproxy to fix a privilege separation issue that arose from failing to unlock a shared resource.
Issued DLA 2517-1 and ELA 342-1 for the Dovecot to fix two issues. The first was an issue where an attacker could cause the IMAP server to discover filesystem directory structures and even access other users' emails using a specially crafted command (CVE-2020-24386). The second was an issue where a malicious sender could crash Dovecot by sending messages with more than 10,000 (!) attachments (CVE-2020-25275).
It was discovered that there was an in issue in the command-line tool for the Pacemaker High Availability stack. Local attackers were able to execute commands via shell code injection to the crm history command-line tool, potentially allowing escalation of privileges. DLA 2533-1 was issued to address this.
You can find out more about the project via the following video:
Android Rebuilds provides freely-licensed builds of Android development tools from a Mountain View-based company.
Proprietary binaries are rebuilt from source, build recipes are reverse-engineered.
SDK 11 (API 30) is mostly available, as unattended Docker build scripts, build documentation as well as convenience binaries.
Only the x86 system image currently fails to build.
Some children are born with magic, which grows as they mature. Magic
attracts maleficaria: extremely deadly magical beasts that want to feast
on that magic. Having innate magical ability is therefore a recipe for
endless attacks from monsters and a death at a young age. This was true
even for the enclaves, which are the rich, gated communities of the
magical world.
Hence, the Scholomance. This is a boarding school for magic users placed
in the Void and protected against maleficaria as completely as possible
while still letting the students graduate and leave after their senior
year. Students are sent there via a teleportation spell with a weight
allowance, taught magic by automated systems and magical artifacts, and
left on their own to make alliances and survive. Or not survive;
protected as well as possible still means that there are maleficaria
everywhere, sneaking past the wards of the graduation hall and looking for
snacks. The school sends cleansing fire through the halls at certain
times; the rest of the time, the students either learn enough magic to
defeat maleficaria themselves, form alliances with those who can, or die
to feed the magic of the school.
Enter Galadriel, or El as she prefers. She's not an enclave kid; she's
the grumpy, misfit daughter of a hippie mother whose open-hearted devotion
to healing and giving away her abilities make her the opposite of the
jealously guarded power structures of the enclaves. El has no resources
other than what she can muster on her own. She also has her mother's
ethics, which means that although she has an innate talent for malia,
drawing magic from the death of other living things, she forces herself to
build her mana through rigorously ethical means. Like push-ups. Or,
worse, crochet.
At the start of the book, El is in her third year of four, and
significantly more of her classmates are alive than normally would be.
That's because of her classmate, Orion Lake, who has made a full-time
hobby of saving everyone from maleficaria. His unique magical ability
frees him from the constraints of mana or malia that everyone else is
subject to, and he uses that to be a hero, surrounded by adoring fans.
And El is thoroughly sick of it.
This book is so good in so many different ways that I don't know where to
start.
Obviously, A Deadly Education is a twist on the boarding school
novel, both the traditional and the magical kind. This is not a genre in
which I'm that well-read, but even with my lack of familiarity, I noticed
so many things Novik does to improve the genre tropes, starting with not
making the heroic character with the special powers the protagonist. And
getting rid of all the adults, which leaves way more space for rich social
dynamics between the kids (complex and interesting ones that are entangled
with the social dynamics outside of the school, not some simplistic
Lord of the Flies take). Going alone anywhere in the school is
dangerous, as is sitting at the bad tables in the cafeteria, so social
cliques become a matter of literal life and death. And the students
aren't just trying to survive; the ones who aren't part of enclaves are
jockeying for invitations or trying to build the power to help their
family and allies form their own.
El is the first-person narrator of the story and she's wonderful. She's
grumpy, cynical, and sarcastic, which is often good for first-person
narrators, but she also has a core of ethics from her mother, and from her
own decisions, that gives her so much depth. She is the type of person
who knows exactly how much an ethical choice will cost her and how
objectively stupid it is, and then will make it anyway out of sheer
stubbornness and refuse to take credit for it. I will happily read books
about characters like El until the end of time.
Her mother never appears in this book, and yet she's such a strong
presence because El's relationship with her matters, to both El and to the
book. El could not be more unlike her mother in both personality and in
magical focus, and she's exasperated by the sheer impracticality of some
of her mother's ideals. And yet there's a core of love and understanding
beneath that, a level at which El completely understands her mother's
goals, and El relies on it even when she doesn't realize she's doing so.
I don't think I've ever read a portrayal of a mother-daughter relationship
this good where one of the parties isn't even present.
And I haven't even gotten to the world-building, and the level to which
Novik chases down and explores all the implications of this ridiculous
murder machine of a school.
I will offer this caveat: If you poke at the justification for creating
this school in the way it was built, it's going to teeter a lot. That
society thought this school was the best solution to its child mortality
problem is just something you have to roll with. But once you accept
that, the implications are handled so very well. The school is an inhuman
character in its own right, with exasperating rules that the students
learn and warn each other about. It tries to distract you with rare
spellbooks or artifact materials because it's trying to kill you. The
language tapes whisper horrific stories of your death. The back wall of
your room is a window to the Void, from which you can demand spellbooks.
You'll even get them in languages that you understand, for a generous
definition of understand that may have involved glancing at one page of
text, so be careful not to do that! The school replaces all of the adult
teachers in the typical boarding school novel and is so much more
interesting than any of them because it adds the science fiction thrill of
setting as character.
The world-building does mean a lot of infodumping, so be prepared for
that. El likes to explain things, tell stories, and over-analyze her
life, and reading this book is a bit like reading the journal of a teenage
girl. For me, El's voice is so strong, authentic, stubborn, and
sarcastically funny that I scarcely noticed the digressions into
background material.
And the relationships! Some of the turns will be predictable, since of
course El's stubborn ethics will be (eventually) rewarded by the story,
but the dynamic that develops between El and Orion is something special.
It takes a lot to make me have sympathy with the chosen one boy hero, but
Novik pulls it off without ever losing sight of the dynamics of class and
privilege that are also in play. And the friendships El develops almost
accidentally by being stubbornly herself are just wonderful, and the way
she navigates them made me respect her even more.
The one negative thing I will say about this book is that I don't think
Novik quite nailed the climax. Some of this is probably because this is
the first book of a series and Novik wanted to hold some social
developments in reserve, but I thought El got a bit sidelined and ended up
along for the ride in an action-movie sequence. Still, it's a minor
quibble, and it's clear from the very end of the book that El is going to
get more attention and end up in a different social position in the next
book.
This was a wholly engrossing and enjoyable story with a satisfying climax
and only the barb of a cliffhanger in the very last line. It's the best
SFF novel published in 2020 that I've read so far (yes, even better than
Network Effect). Highly recommended,
and I hope it gets award recognition this year.
Followed by The Last Graduate (not yet published at the time of
this review).
Rating: 9 out of 10
prrd facilitates the parallel running [of] reverse dependency [checks] when preparing R packages. It is used extensively for Rcpp, RcppArmadillo, RcppEigen, BH, and possibly others.
The key idea of prrd is simple, and described in some more detail on its webpage and its GitHub repo. Reverse dependency checks are an important part of package development that is easily done in a (serial) loop. But these checks are also generally embarassingly parallel as there is no or little interdependency between them (besides maybe shared build depedencies). See the (dated) screenshot (running six parallel workers, arranged in split byobu session).
This release brings several smaller tweaks and improvements to the summary report that had accumulated in my use since the last realease last April. We also updated the CI runners as one does these days.
The release is summarised in the NEWS entry:
Changes in prrd version 0.0.4 (2021-01-23)
Report summary mode is now compact, more robust and reports extended CRAN summaries. (Dirk via several changes)
Like each month, have a look at the work funded by Freexian s Debian LTS offering.
Debian project funding
In December, we put aside 2100 EUR to fund Debian projects. The first project proposal (a tracker.debian.org improvement for the security team) was received and quickly approved by the paid contributors, then we opened a request for bids and the bid winner was announced today (it was easy, we had only one candidate). Hopefully this first project will be completed until our next report.
We re looking forward to receive more projects from various Debian teams! Learn more about the rationale behind this initiative in this article.
Debian LTS contributors
In December, 12 contributors have been paid to work on Debian LTS, their reports are available:
Abhijith PA did 7.0h (out of 14h assigned), thus carrying over 7h to January.
Ben Hutchings did 16.5h (out of 16h assigned and 9h from November), thus carrying over 8.5h to January.
Evolution of the situation
December was a quiet month as we didn t have a team meeting nor any other unusual activity and we released 43 DLAs.
The security tracker currently lists 30 packages with a known CVE and the dla-needed.txt file has 25 packages needing an update.
This month we are pleased to welcome Deveryware as new sponsor!
Thanks to our sponsors
Sponsors that joined recently are in bold.
I require moderately powerful boxes for my work. Moderately powerful boxes
generate a non-negligible amount of heat, and therefore require appropriate
cooling. Most cooling solutions involve a certain degree of noise, which I
dislike.
Water-cooling is supposed to be the most effective solution for noise
reduction, but it always felt like too much of a hassle to try to me.
Considering the various solutions I've tried in the past years, two observations
I've made really stick out:
Noctua's reputation for CPU cooling is well-earned.
A "silent" (meaning sound-proofed) case, isn't. At least, not anymore.
I've tried numerous coolers in the past, some of monstrous proportions (always
thinking that more mass must be better, and reputable brands are equally good),
but I was never really satisfied; hence, I was doubtful that trying yet another
cooler would make a difference. I'm glad I tried the
Noctua NH-D15 anyway. With some
tweaking to the fan profile in the BIOS, it's totally inaudible at normal to
medium workloads, and just a very gentle hum at full load subtle enough to
disappear in the background.
For the past decade, I've also regularly purchased sound-proofed cases, but
this habit appears anachronistic now. Years ago, sound-proofed cases helped
contain the noise of a few HDDs. However, all of my boxes now contain NVMe
drives (which, to me, are the biggest improvement to computing since CPUs
going multi-core).
On the other hand, some of my boxes now contain powerful GPUs used for GPGPU
computing, and with the recent higher-end Nvidia and AMD cards all pulling
in over 300W, there is a lot of heat to manage. The best way to quickly dump
heat is with good airflow. Sound-proofing works against that. Its insulation
restricts airflow, which ultimately causes even more noise, as the GPU's fans
need to spin at very high RPMs. This is, of course, totally obvious in
hindsight.
I removed the front cover from a new GPU box, and the noise went down from
almost-hair-dryer to acceptable-whoosh levels. I'm wondering whether a
completely open box might not be even more effective.
RISC-V is the latest RISC architecture that s become popular. It is the 5th RISC architecture from the University of California Berkeley. It seems to be a competitor to ARM due to not having license fees or restrictions on alterations to the architecture (something you have to pay extra for when using ARM). RISC-V seems the most popular architecture to implement in FPGA.
When I first tried to run RISC-V under QEMU it didn t work, which was probably due to running Debian/Unstable on my QEMU/KVM system and there being QEMU bugs in Unstable at the time. I have just tried it again and got it working.
The Debian Wiki page about RISC-V is pretty good [1]. The instructions there got it going for me. One thing I wasted some time on before reading that page was trying to get a netinst CD image, which is what I usually do for setting up a VM. Apparently there isn t RISC-V hardware that boots from a CD/DVD so there isn t a Debian netinst CD image. But debootstrap can install directly from the Debian web server (something I ve never wanted to do in the past) and that gave me a successful installation.
Here are the commands I used to setup the base image:
I first tried running RISC-V Qemu on Buster, but even ls didn t work properly and the installation failed.
chroot /mnt/tmp bin/bash
# ls -ld .
/usr/bin/ls: cannot access '.': Function not implemented
When I ran it on Unstable ls works but strace doesn t work in a chroot, this gave enough functionality to complete the installation.
chroot /mnt/tmp bin/bash
# strace ls -l
/usr/bin/strace: test_ptrace_get_syscall_info: PTRACE_TRACEME: Function not implemented
/usr/bin/strace: ptrace(PTRACE_TRACEME, ...): Function not implemented
/usr/bin/strace: PTRACE_SETOPTIONS: Function not implemented
/usr/bin/strace: detach: waitpid(1602629): No child processes
/usr/bin/strace: Process 1602629 detached
When running the VM the operation was noticably slower than the emulation of PPC64 and S/390x which both ran at an apparently normal speed. When running on a server with equivalent speed CPU a ssh login was obviously slower due to the CPU time taken for encryption, a ssh connection from a system on the same LAN took 6 seconds to connect. I presume that because RISC-V is a newer architecture there hasn t been as much effort made on optimising the Qemu emulation and that a future version of Qemu will be faster. But I don t think that Debian/Bullseye will give good Qemu performance for RISC-V, probably more changes are needed than can happen before the freeze. Maybe a version of Qemu with better RISC-V performance can be uploaded to backports some time after Bullseye is released.
Here s the Qemu command I use to run RISC-V emulation:
Currently the program /usr/sbin/sefcontext_compile from the selinux-utils package needs execmem access on RISC-V while it doesn t on any other architecture I have tested. I don t know why and support for debugging such things seems to be in early stages of development, for example the execstack program doesn t work on RISC-V now.
RISC-V emulation in Unstable seems adequate for people who are serious about RISC-V development. But if you want to just try a different architecture then PPC64 and S/390 will work better.
Background
I usually don t mind ads, as not as they not very intrusive. I get that the current media model is basically ad-funded, and that unless I want to pay $1/month or so to 50 web sites, I have to accept ads, so I don t run an ad-blocker.
Sure, sometimes are annoying (hey YT, mid-roll ads are borderline), but I ve also seen many good ads, as in interesting or funny even. Well, I don t think I ever bought anything as direct result from ads, so I don t know how useful ads are for the companies, but hey, what do I care.
Except there a few ad networks that run what I would say are basically revolting ads. Things I don t want to ever accidentally see while eating, or things that are really make you go WTF? Maybe you know them, maybe you don t, but I guess there are people who don t know how to clean their ears, or people for whom a fast 7 day weight loss routine actually works.
Thankfully, most of the time I don t browse sites which use this networks, but randomly they do leak to even sites I do browse. If I m not very stressed already, I can ignore them, otherwise they really, really annoy me.
Case in point, I was on Slashdot, and because I was logged on and recently had mod points, the right side column had a check-box disable ads . That sidebar had some relatively meaningful ads, like a VPN subscription (not that I would use it, but it is a tech thing), or even a book about Kali Linux, etc. etc. So I click the disable ads , and the right column goes away. I scroll down happily, only to be met, at the bottom, by the best way to clean your ear , the most 50 useless planes ever built (which had a drawing of something that was for sure never ever built outside of in movies), you won t believe how this child actor looks today , etc.
Solving the problem
The above really, really pissed me off, so I went to search how to block ad network . To my surprise, the fix was not that simple, for standard users at least.
Method 1: hosts file
The hosts file is reasonable as it is relatively cross-platform (Linux and Windows and Mac, I think), but how the heck do you edit hosts on your phone?
And furthermore, it has some significant downsides.
First, /etc/hosts lists individual hosts, so for an entire ad network, the example I had had two screens of host names. This is really unmaintainable, since rotating host names, or having a gazillion of them is trivial.
Second, it cannot return negative answers. I.e. you have to give each of those hosts a valid IPv4/IPv6, and have something either reply with 404 or another 4xx response, or not listen on port 80/443. Too annoying.
And finally, it s a client-side solution, so one would have to replicate it across all clients in a home, and keep it in sync.
Method 2: ad-blockers
I dislike ad-blockers on principle, since they need wide permissions on all pages, but it is a recommended solution. However, to my surprise, one finds threads saying ad-blocker foo has whitelisted ad network bar, at which point you re WTF? Why do I use an ad-blocker if they get paid by the lowest of the ad networks to show the ads?
And again, it s a client-side solution, and one would have to deploy it across N clients, and keep them in sync, etc.
Method 3: HTTP proxy blocking
To my surprise, I didn t find this mentioned in a quick internet search. Well, HTTP proxies have long gone the way of the dodo due to HTTPs everywhere , and while one can still use them even with HTTPS, it s not that convenient:
you need to tunnel all traffic through them, which might result in bottlenecks (especially for media playing/maybe video-conference/etc.).
or even worse, there might be protocol issues/incompatibilities due to 100% tunneling.
running a proxy opens up some potential security issues on the internal network, so you need to harden the proxy as well, and maintain it.
you need to configure all clients to know about the proxy (via DHCP or manually), which might or might not work well, since it s client-dependent.
you can only block at CONNECT level (host name), and you have to build up regexes for the host name.
On the good side, the actual blocking configuration is centralised, and the only distributed configuration is pointing the clients through the proxy.
While I used to run a proxy back in HTTP times, the gains were significant back them (media elements caching, downloads caching, all with a slow pipe, etc.), but today is not worth it, so I ve stopped and won t bring a proxy back just for this.
Method 4: DNS resolver filtering
After thinking through all the options, I thought - hey, a caching/recursive DNS resolver is what most people with a local network run, right? How difficult is to block at resolver level?
and oh my, it is so trivial, for some resolvers at least. And yes, I didn t know about this a week ago
Response Policy Zones
Now, of course, there is a standard for this, called Response Policy Zone, and which is supported across multiple resolvers. There are many tutorials on how to use RPZs to configure things, some of them quite detailed - e.g. this one, or a simple/more straightforward one here.
The upstream BIND documentation also explains things quite well here, so you can go that route as well. It looks a bit hairy for me thought, but it works, and since it is a standard, it can be more easily deployed.
There are many discussions on the internet about how to configure RPZs, how to not even resolve the names (if you re going to return something explicitly/statically), etc. so there are docs, but again it seems a bit overdone.
Resolver hooks
There s another way too, if your resolver allows scripting. For example, the PowerDNS resolver allow Lua scripting, and has a relatively simple API at least, to me it looks way, way simpler than the RPZ equivalent.
After 20 minutes of reading the docs, I ended up with this, IMO trivial, solution (in a file named e.g. rules.lua):
and that s it. Well, enable it/load the file in the configuration, but nothing else. Syntax is pretty straightforward, matching by suffix here, and if you need more complex stuff, you can of course do it; it s just Lua and a simple API.
I don t see any immediate equivalent in Bind, so there s that, but if you can use PowerDNS, then the above solution seems simple for simple cases, and could be extended if needed (not sure in which cases).
The only other thing one needs to do is to serve the local/custom resolver to all clients, whether desktop or mobile, and that s it. DNS server is bread-and-butter in DHCP, so better support than proxy, and once the host name has been (mis)resolved, nothing is involved anymore in the communication path. True, your name server might get higher CPU usage, but for home network, this should not be a problem.
Can this filtering method (either RPZ or hooks) be worked around by ad networks? Sure, like anything. But changing the base domain is not fun. DNSSEC might break it (note Bind RPZ can be configure to ignore DNSSEC), but I m more worried about DNS-over-HTTPS, which I thought initially it s done for the user, but now I m not so sure anymore. Not being in control even of your own DNS resolver seems evil , but what do I know.
Combined authoritative + recursive solution
This solution was provided by Guillem Jover, who uses unbound, which is a combined authoritative name server and recursive resolver in one, and dnsmasq (which is even more things, I think):
For my LANs I use unbound, and then block this kind of thing in /etc/unbound/unbound.conf.d/block.conf, with stuff like:
server:
local-zone: adsite.example.com refuse
But then for things that are mobile, and might get out of the LAN, such as laptops, I also block with dnsmasq in /etc/dnsmasq.d/block.conf, with stuff like:
address=/adsite.example.com/
I still use ublock-origin to block stuff at the browser level, though, for yet an extra layer of noise suppression. :)
Thanks for the info!
Happy browsing!
10 lines of Lua, and now for sure I m going to get even fatter without the this natural method will melt your belly fat in 7 days information. Or I will just throw away banana peels without knowing what I could do with hem.
After a few days, I asked myself but ads are not so bad, why did I and then realised that yes, ads are not so bad anymore. And Slashdot actually loads faster
So, happy browsing!
I just wrote a Perl script to look at the Australian Bureau of Meteorology pages to find the current temperature in an area and then adjust BOINC settings accordingly. The Perl script (in this post after the break, which shouldn t be in the RSS feed) takes the URL of a Bureau of Meteorology observation point as ARGV[0] and parses that to find the current (within the last hour) temperature. Then successive command line arguments are of the form 24:100 and 30:50 which indicate that at below 24C 100% of CPU cores should be used and below 30C 50% of CPU cores should be used. In warm weather having a couple of workstations in a room running BOINC (or any other CPU intensive task) will increase the temperature and also make excessive noise from cooling fans.
To change the number of CPU cores used the script changes /etc/boinc-client/global_prefs_override.xml and then tells BOINC to reload that config file. This code is a little ugly (it doesn t properly parse XML, it just replaces a line of text) and could fail on a valid configuration file that wasn t produced by the current BOINC code.
The parsing of the BoM page is a little ugly too, it relies on the HTML code in the BoM page they could make a page that looks identical which breaks the parsing or even a page that contains the same data that looks different. It would be nice if the BoM published some APIs for getting the weather. One thing that would be good is TXT records in the DNS. DNS supports caching with specified lifetime and is designed for high throughput in aggregate. If you had a million IOT devices polling the current temperature and forecasts every minute via DNS the people running the servers wouldn t even notice the load, while a million devices polling a web based API would be a significant load. As an aside I recommend playing nice and only running such a script every 30 minutes, the BoM page seems to be updated on the half hour so I have my cron jobs running at 5 and 35 minutes past the hour.
If this code works for you then that s great. If it merely acts as an inspiration for developing your own code then that s great too! BOINC users outside Australia could replace the code for getting meteorological data (or even interface to a digital thermometer). Australians who use other CPU intensive batch jobs could take the BoM parsing code and replace the BOINC related code. If you write scripts inspired by this please blog about it and comment here with a link to your blog post.
#!/usr/bin/perl
use strict;
use Sys::Syslog;
# St Kilda Harbour RMYS
# http://www.bom.gov.au/products/IDV60901/IDV60901.95864.shtml
my $URL = $ARGV[0];
open(IN, "wget -o /dev/null -O - $URL ") or die "Can't get $URL";
while(<IN>)
if($_ =~ /tr class=.rowleftcolumn/)
last;
sub get_data
if(not $_[0] =~ /headers=.t1-$_[1]/)
return undef;
$_[0] =~ s/^.*headers=.t1-$_[1]..//;
$_[0] =~ s/<.td.*$//;
return $_[0];
my @datetime;
my $cur_temp -100;
while(<IN>)
chomp;
if($_ =~ /^<.tr>$/)
last;
my $res;
if($res = get_data($_, "datetime"))
@datetime = split(/\//, $res)
elsif($res = get_data($_, "tmp"))
$cur_temp = $res;
close(IN);
if($#datetime != 1 or $cur_temp == -100)
die "Can't parse BOM data";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
if($mday - $datetime[0] > 1 or ($datetime[0] > $mday and $mday != 1))
die "Date wrong\n";
my $mins;
my @timearr = split(/:/, $datetime[1]);
$mins = $timearr[0] * 60 + $timearr [1];
if($timearr[1] =~ /pm/)
$mins += 720;
if($mday != $datetime[0])
$mins += 1440;
if($mins + 60 < $hour * 60 + $min)
die "page outdated\n";
my %temp_hash;
foreach ( @ARGV[1..$#ARGV] )
my @tmparr = split(/:/, $_);
$temp_hash $tmparr[0] = $tmparr[1];
my @temp_list = sort(keys(%temp_hash));
my $percent = 0;
my $i;
for($i = $#temp_list; $i >= 0 and $temp_list[$i] > $cur_temp; $i--)
$percent = $temp_hash $temp_list[$i]
my $prefs = "/etc/boinc-client/global_prefs_override.xml";
open(IN, "<$prefs") or die "Can't read $prefs";
my @prefs_contents;
while(<IN>)
push(@prefs_contents, $_);
close(IN);
openlog("boincmgr-cron", "", "daemon");
my @cpus_pct = grep(/max_ncpus_pct/, @prefs_contents);
my $cpus_line = $cpus_pct[0];
$cpus_line =~ s/..max_ncpus_pct.$//;
$cpus_line =~ s/^.*max_ncpus_pct.//;
if($cpus_line == $percent)
syslog("info", "Temp $cur_temp" . "C, already set to $percent");
exit 0;
open(OUT, ">$prefs.new") or die "Can't read $prefs.new";
for($i = 0; $i <= $#prefs_contents; $i++)
if($prefs_contents[$i] =~ /max_ncpus_pct/)
print OUT " <max_ncpus_pct>$percent.000000</max_ncpus_pct>\n";
else
print OUT $prefs_contents[$i];
close(OUT);
rename "$prefs.new", "$prefs" or die "can't rename";
system("boinccmd --read_global_prefs_override");
syslog("info", "Temp $cur_temp" . "C, set percentage to $percent");