Russ Allbery: Review: Paladin's Strength
| Series: | The Saint of Steel #2 |
| Publisher: | Red Wombat Studio |
| Copyright: | 2021 |
| ASIN: | B08WWKXXVY |
| Format: | Kindle |
| Pages: | 474 |
| Series: | The Saint of Steel #2 |
| Publisher: | Red Wombat Studio |
| Copyright: | 2021 |
| ASIN: | B08WWKXXVY |
| Format: | Kindle |
| Pages: | 474 |
A new release 1.1.39-3 of x13binary, of the X-13ARIMA-SEATS program by the US Census Bureau (with upstream release 1.1.39) is now on CRAN.
The x13binary package takes the pain out of installing X-13ARIMA-SEATS by making it a fully resolved CRAN dependency. For example, when installing the excellent seasonal package by Christoph, then X-13ARIMA-SEATS will get pulled in via the x13binary package and things just work. Just depend on x13binary and on all major OSs supported by R you should have an X-13ARIMA-SEATS binary installed which will be called seamlessly by the higher-level packages such as seasonal or gunsales. With this the full power of the what is likely the world s most sophisticated deseasonalization and forecasting package is now at your fingertips and the R prompt, just like any other of the 17350+ CRAN packages. You can read more about this (and the seasonal package) in the Journal of Statistical Software paper by Christoph and myself.
This release was needed because the recent M1mac build was reporting leftover detritus in the temporary directory, which we addressed with an explicit removal at end. We also addressed another CRAN Policy change since the last release, namely a conversion of the configure script from bash to sh.
Now, sadly, that second aspect blew up on Solaris, and the detritus issue appears to be persist. By now Christoph and a colleague have installed R(-devel) on such an M1 machine, but still cannot reproduce. We will reach out to CRAN to learn more. A follow-up release 1.1.39-4 is likely.
The good news is that the standard macOS binary works on M1 as do other binaries thanks to the translation layer. We do however lack a genuine binary for Solaris so if any of the esteemed readers of this post happens to have access to R on Solaris along with a basic Fortran compiler, we would love to hear from you. Building X-13ARIMA-SEATS from source on Solaris should be straightforward, it is on the other OSs.
Courtesy of my CRANberries, there is also a diffstat report for this release showing changes to the previous release.
If you like this or other open-source work I do, you can sponsor me at GitHub.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
TLDR: Freexian s success means that we have resources to invest into Debian projects. Plainly offering money has not worked so far, so I am looking to hire a project manager whose work would be to help spend that money in useful ways. At the same time, Freexian needs to adapt to cope with the growth: with new employees, with new infrastructure and a new offering. I want to give an idea of where we are headed, to try to inspire persons that share our values and our desire to improve Debian. Read on if you are interested.
Note: The original text has been split into 4 blog posts that will be published over a few days.
Introduction
Freexian is an IT service company specialized in Debian. We provide technical support by email on Debian, we create and maintain Debian packages requested by our customers, we also help organizations run an entire Debian derivative (Kali Linux being the most notable one).
On top of this, it runs the commercial part of the Debian LTS service : Freexian invoices many sponsors that need long term support, and uses the money to pay Debian contributors (about 12 currently) to make sure that Debian releases are supported for 5 years instead of 3. With the Extended LTS service, we push that further to 7 years, however only for a smaller subset of packages and in a repository that is hosted outside of debian.org.
Freexian s purpose
When I created Freexian, it was out of a desire to be paid to work on Debian, and to be able to contribute during work time to the project that was so important to me. That goal has been met a long time ago.
But ultimately what I strive to achieve for Debian is not entirely aligned with the work that Freexian s customers are requesting. That s why, in the long term projects of Freexian, I always kept find a business model that can fund the Debian projects that I would like to do , as well as if that model works for me, build something so that other can benefit from it too . The first occasion to experiment something appeared when Debian discussed Long Term Support and when I stepped up to setup a commercial offer to pay Debian contributors.
Step 1: Paying Debian contributors for LTS work
When we started the Debian LTS service, I voluntarily opted to use an hourly rate that was rather high so that any Debian developer regardless of their geographical location, could participate and not earn (much) less than what they would have from working on other tasks. This choice did imply paying a very high rate for some countries, but I didn t see that as a problem, quite the contrary: if a Debian developer can earn enough money to cover their cost of living with 15h of Debian LTS, and then spend the rest of their month contributing on Debian, all the better! I m not sure if anyone made this choice, but that was a dream of my younger self
From a personal standpoint, the launch of Debian LTS has meant less free time, more administrative work, new duties to coordinate a team of paid contributors, more communication with many Debian-using companies, and many new opportunities too! This ultimately resulted in the launch of Extended LTS and PHP LTS, both of which have been rather successful so far.
Step 2: Funding Debian projects
With the growth of the Debian LTS service, and given that we have reached the required funding level, we decided to put a small share of the revenues aside and use that to fund useful Debian projects, typically in areas that were affected by our Debian LTS work. This effort was fully formalized in the project-funding git repository. We announced this process in November 2020, and we have kept mentioning it in our monthly LTS reports ever since, but so far only a single project has benefited from this.
This is really the dream offer that I wish had existed when I was younger and was still struggling to get enough customers: hence I don t really understand this lack of interest. You can find some discussions over the reasons why this offer has not (yet) found its target audience in this debian-vote thread.
I was hoping that spending money would be easy, but I now realize I was wrong! I m positive that I could find dozens of useful projects to fund, but I just don t have the time for this extra effort on top of my regular Freexian duties. I still really want to put this money to good use, which is why I m looking into some solutions.
This article is to be continued in another upcoming post, stay tuned!
I wrote this blog post with Kaylea Champion and a version of this post was originally posted on the Community Data Science Collective blog. Critical software we all rely on can silently crumble away beneath us. Unfortunately, we often don t find out software infrastructure is in poor condition until it is too late. Over the last year or so, I have been supporting Kaylea Champion on a project my group announced earlier to measure software underproduction a term we use to describe software that is low in quality but high in importance. Underproduction reflects an important type of risk in widely used free/libre open source software (FLOSS) because participants often choose their own projects and tasks. Because FLOSS contributors work as volunteers and choose what they work on, important projects aren t always the ones to which FLOSS developers devote the most attention. Even when developers want to work on important projects, relative neglect among important projects is often difficult for FLOSS contributors to see. Given all this, what can we do to detect problems in FLOSS infrastructure before major failures occur? Kaylea Champion and I recently published a paper laying out our new method for measuring underproduction at the IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER) 2021 that we believe provides one important answer to this question.
Conceptual diagram showing how our conception of underproduction relates to quality and importance of software.
These 30 packages have the highest level of underproduction in Debian according to our analysis.For more details, check out the full paper which is available as a freely accessible preprint.
This project was supported by the Ford/Sloan Digital Infrastructure Initiative. Wm Salt Hale of the Community Data Science Collective and Debian Developers Paul Wise and Don Armstrong provided valuable assistance in accessing and interpreting Debian bug data. Ren Just generously provided insight and feedback on the manuscript.
Paper Citation: Kaylea Champion and Benjamin Mako Hill. 2021. Underproduction: An Approach for Measuring Risk in Open Source Software. In Proceedings of the IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER 2021). IEEE.
Contact Kaylea Champion (kaylea@uw.edu) with any questions or if you are interested in following up.
| Publisher: | O'Reilly |
| Copyright: | May 2020 |
| ISBN: | 1-4919-5202-4 |
| Format: | Trade paperback |
| Pages: | 665 |
[1] + 2 (the string '12'), despite this being one of the
most confusing parts of the language. The sections on JavaScript's
prototype-based object type system and its three concurrency models
(callbacks, promises, and async/await) were equally good. I came away
feeling like I not only understood promises and callback chains but had a
feel for how the same code would look when written in the different
systems.
The drawback in this approach is that if you instead want a language
reference that only tells you the parts of the language that you should
use and leaves out the legacy weirdness and obscure corners for later (or
never), this may not be the book for you. Flanagan labels the obsolete
constructs, but he's meticulous about explaining the entire language,
including such things as new Boolean or var variables that
no one should use. This is what I wanted; I prefer to have a thorough
grounding in language primitives so that it doesn't surprise me. But it
can be a lot to juggle and prune in your head.
JavaScript is a language used in some very different domains. The
approach Flanagan takes to that is to spend as long as possible on the
core language that's usable both in the browser and on the server (while
marking the pieces, such as the module system, that are markedly different
between Node and browsers). He then puts two monster chapters at the back
of the book that cover JavaScript in web browsers and JavaScript as
implemented by Node. Both are more of overviews than orientations, since
a comprehensive manual for either is probably as long again as this book,
but they were more than adequate for my purposes. (I bogged down a bit in
the web browser chapter, in part because I didn't have an immediate use
for most of the material.) Flanagan wisely defers to
MDN as the reference manual
for the JavaScript APIs available in web browsers.
I thought Flanagan also hit the right balance of explanation to examples,
and did a good job controlling the length of the examples. Most of the
code excerpts are short and to the point. The longer ones have a high
level of explanatory power per line, since Flanagan uses them to pull
together multiple concepts and show how they interact. I was particularly
impressed with the example that closes the chapter on web browsers, which
uses <canvas>, ImageData, generators, promises, web workers,
and other areas of the language Flanagan previously explained to implement
a Mandelbrot set explorer in eleven pages of code. I think that's the
longest example in the book, and it's well worth it.
This sort of introduction will always have limitations. Flanagan provides
a brief orientation to the ecosystem surrounding JavaScript in the last
chapter, but most JavaScript programmers will be working with packaging
tools and frameworks that could themselves be the topic of another book
and that he doesn't have room to cover. JavaScript, even more than most
languages, is commonly used via a heavy layer of supporting libraries and
abstractions, so you will probably not be able to tackle a practical
JavaScript project using solely the material in this book. But if you're
the sort of programmer who wants to start with a solid syntactical and
conceptual understanding of the language core before starting on more
applied topics, I've rarely seen it done better than this book.
If you want a quick-start guide that will get you writing code quickly and
is opinionated about what parts of the language you should learn, this may
not be the book for you. But if you're comfortable with comprehensive
detail in your language guides, this was exactly what I was looking for.
Recommended.
Rating: 9 out of 10
About three months after the last update, we can announce a new version 0.0.5 of RcppSpdlog. It contains releases 1.8.3, 1.8.4 and 1.8.5 of spdlog which were made in quick succession mid-week (while we were waiting on an update of CRAN s own machinery) and was processed yesterday and overnight.
RcppSpdlog bundles spdlog, a wonderful header-only C++ logging library with all the bells and whistles you would want that was written by Gabi Melman, and also includes fmt by Victor Zverovich.
The NEWS entry for this release follows.
Courtesy of my CRANberries, there is also a diffstat report. More detailed information is on the RcppSpdlog page. If you like this or other open-source work I do, you can sponsor me at GitHub.Changes in RcppSpdlog version 0.0.5 (2020-12-11)
- Upgraded to upstream release spdlog 1.8.5 (and 1.8.4 and 1.8.3)
- Small enhancements to DESCRIPTION files
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
Too much has been written, a war of support letters is going on, Debian is heading head first like Lemmings into the same war. And then, there is this by the first female President of the American Civil Liberties Union (ACLU):
Civil Rights Activist Nadine Strossen s Response To #CancelStallman:
I find it so odd that the strong zeal for revenge and punishment if someone says anything that is perceived to be sexist or racist or discriminatory comes from liberals and progressives. There are so many violations [in cases like Stallman s] of such fundamental principles to which progressives and liberals cling in general as to what is justice, what is fairness, what is due process.Unfortunately, I don t think the Anti-Harassment Team of Debian and others of the usual group of warriors will ever read less understand what is written there. So sad.
One is proportionality: that the punishment should be proportional to the offense. Another one is restorative justice: that rather than retribution and punishment, we should seek to have the person constructively come to understand, repent, and make amends for an infraction. Liberals generally believe society to be too punitive, too harsh, not forgiving enough. They are certainly against the death penalty and other harsh punishments even for the most violent, the mass murderers. Progressives are right now advocating for the release of criminals, even murderers. To then have exactly the opposite attitude towards something that certainly is not committing physical violence against somebody, I don t understand the double standard!
Another cardinal principle is we shouldn t have any guilt by association. [To hold culpable] these board members who were affiliated with him and ostensibly didn t do enough to punish him for things that he said which by the way were completely separate from the Free Software Foundation is multiplying the problems of unwarranted punishment. It extends the punishment where the argument for responsibility and culpability becomes thinner and thinner to the vanishing point. That is also going to have an enormous adverse impact on the freedom of association, which is an important right protected in the U.S. by the First Amendment.
The Supreme Court has upheld freedom of association in cases involving organizations that were at the time highly controversial. It started with NAACP (National Association for the Advancement of Colored People) during the civil rights movement in the 1950s and 60s, but we have a case that s going to the Supreme Court right now regarding Black Lives Matter. The Supreme Court says even if one member of the group does commit a crime in both of those cases physical violence and assault that is not a justification for punishing other members of the group unless they specifically intended to participate in the particular punishable conduct.
Now, let s assume for the sake of argument, Stallman had an attitude that was objectively described as discriminatory on the basis on race and gender (and by the way I have seen nothing to indicate that), that he s an unrepentant misogynist, who really believes women are inferior. We are not going to correct those ideas, to enlighten him towards rejecting them and deciding to treat women as equals through a punitive approach! The only approach that could possibly work is an educational one! Engaging in speech, dialogue, discussion and leading him to re-examine his own ideas.
Even if I strongly disagree with a position or an idea, an expression of an idea, advocacy of an idea, and even if the vast majority of the public disagrees with the idea and finds it offensive, that is not a justification for suppressing the idea. And it s not a justification for taking away the equal rights of the person who espouses that idea including the right to continue holding a tenured position or other prominent position for which that person is qualified.
But a number of the ideas for which Richard Stallman has been attacked and punished are ideas that I as a feminist advocate of human rights find completely correct and positive from the perspective of women s equality and dignity! So for example, when he talks about the misuse and over use and flawed use of the term sexual assault, I completely agree with that critique! People are indiscriminantly using that term or synonyms to describe everything from the most appaulling violent abuse of helpless vulnerable victims (such as a rape of a minor) to any conduct or expression in the realm of gender or sexuality that they find unpleasant or disagreeable.
So we see the term sexual assault and sexual harrassment used for example, when a guy asks a woman out on a date and she doesn t find that an appealing invitation. Maybe he used poor judgement in asking her out, maybe he didn t, but in any case that is NOT sexual assault or harassment. To call it that is to really demean the huge horror and violence and predation that does exist when you are talking about violent sexual assault. People use the term sexual assault/ sexual harassment to refer to any comment about gender or sexuality issues that they disagree with or a joke that might not be in the best taste, again is that to be commended? No! But to condemn it and equate it with a violent sexual assault again is really denying and demeaning the actual suffering that people who are victims of sexual assault endure. It trivializes the serious infractions that are committed by people like Jeffrey Epstein and Harvey Weinstein. So that is one point that he made that I think is very important that I strongly agree with.
Secondly and relatedly, [Richard Stallman] never said that he endorse child pornography, which by definition the United States Supreme Court has defined it multiple times is the sexual exploitation of an actual minor. Coerced, forced, sexual activity by that minor, with that minor that happens to be filmed or photographed. That is the definition of child pornography. He never defends that! What the point he makes, a very important one, which the U.S. Supreme Court has also made, is mainly that we overuse and distort the term child pornography to refer to any depiction of any minor in any context that is even vaguely sexual.
So some people have not only denounced as child pornography but prosecuted and jailed loving devoted parents who committed the crime of taking a nude or semi-nude picture of their own child in a bathtub or their own child in a bathing suit. Again it is the hysteria that has totally refused to draw an absolutely critical distinction between actual violence and abuse, which is criminal and should be criminal, to any potentially sexual depiction of a minor. And I say potentially because I think if you look at a picture a parent has taken of a child in a bathtub and you see that as sexual, then I d say there s something in your perspective that might be questioned or challenged! But don t foist that upon the parent who is lovingly documenting their beloved child s life and activities without seeing anything sexual in that image.
This is a decision that involves line drawing. We tend to have this hysteria where once we hear terms like pedophilia of course you are going to condemn anything that could possibly have that label. Of course you would. But societies around the world throughout history various cultures and various religions and moral positions have disagreed about at what age do you respect the autonomy and individuality and freedom of choice of a young person around sexuality. And the U.S. Supreme Court held that in a case involving minors right to choose to have an abortion.
By the way, [contraception and abortion] is a realm of sexuality where liberals and progressives and feminists have been saying, Yes! If you re old enough to have sex. You should have the right to contraception and access to it. You should have the right to have an abortion. You shouldn t have to consult with your parents and have their permission or a judge s permission because you re sufficiently mature. And the Supreme Court sided in accord of that position. The U.S. Supreme Court said constitutional rights do not magically mature and spring into being only when someone happens to attain the state defined age of majority.
In other words the constitution doesn t prevent anyone from exercising rights, including Rights and sexual freedoms, freedom of choice and autonomy at a certain age! And so you can t have it both ways. You can t say well we re strongly in favor of minors having the right to decide what to do with their own bodies, to have an abortion what is in some people s minds murder but we re not going to trust them to decide to have sex with somewhat older than they are.
And I say somewhat older than they are because that s something where the law has also been subject to change. On all issues of when you obtain the age of majority, states differ on that widely and they choose different ages for different activities. When you re old enough to drive, to have sex with someone around your age, to have sex with someone much older than you. There is no magic objective answer to these questions. I think people need to take seriously the importance of sexual freedom and autonomy and that certainly includes women, feminists. They have to take seriously the question of respecting a young person s autonomy in that area.
There have been famous cases of 18 year olds who have gone to prison because they had consensual sex with their girlfriends who were a couple of years younger. A lot of people would not consider that pedophilia and yet under some strict laws and some absolute definitions it is. Romeo and Juliet laws make an exception to pedophilia laws when there is only a relatively small age difference. But what is relatively small? So to me, especially when he says he is re-examining his position, Stallman is just thinking through the very serious debate of how to be protective and respectful of young people. He is not being disrespectful, much less wishing harm upon young people, which seems to be what his detractors think he s doing.
Have you heard of Vagrant ? It is a command line tool to get ready to use, disposable Virtual Machines (VM) from an online catalog. Vagrant works on Linux, FreeBSD, Windows and Mac and you only need three commands to get a shell prompt in a VM (see the Debian wiki).
A long time, no blog entries. What's prompted a new missive?
Two things:
in order to regain the confidence of the broader free software community, the FSF should make fundamental and lasting changes to its governance....
[There is] no reason to believe that the most recent FSF board statement signals any meaningful commitment to positive change.And the FSFE statement:
The goal of the software freedom movement is to empower all people to control technology and thereby create a better society for everyone. Free Software is meant to serve everyone regardless of their age, ability or disability, gender identity, sex, ethnicity, nationality, religion or sexual orientation. This requires an inclusive and diverse environment that welcomes all contributors equally.The FSF has not demonstrated the behaviour I expect from a free software institution and I cannot respect an institution which proclaims a mantra of freedom and openness that is not reflected in the governance of that institution. The preliminary statement by the FSF board is abhorrent. The FSF must now take up the offers from those institutions within the community who retain the respect of that community. I'm only one voice, but I would implore the FSF to make substantive, positive and permanent change to the governance, practices and future of the FSF or face irrelevance.
I was shocked to learn today that Richard Stallman has been reinstated as a
member of the board of the Free Software Foundation. I think this is plain
inappropriate, but I cannot see how anyone who doesn t think that could fail
to see the reinstatement as counterproductive. As Bradley M. Kuhn put
it,
The question is whether an organization should have a designated leader who is on a sustained, public campaign advocating about an unrelated issue that many consider controversial. It really doesn t matter what your view about the controversial issue is; a leader who refuses to stop talking loudly about unrelated issues eventually creates an untenable distraction from the radical activism you re actively trying to advance. The message of universal software freedom is a radical cause; it s basically impossible for one individual to effectively push forward two unrelated controversial agendas at once. In short, the radical message of software freedom became overshadowed by RMS radical views about sexual morality.There is an open letter calling for the removal of the entire Board of the Free Software Foundation in response. I haven t signed the letter because the Free Software Foundation Board s vote to reinstate Stallman was not unanimous, so the call to remove all of them does not make sense to me. I agree with the open letter s call to remove Stallman from other positions of leadership. I hope that this whole situation can be resolved quickly.
Back in 2019, The Cure released a double-video-album featuring two live shows
from 2018, their 40th anniversary concert at Hyde Park (which I
attended) and
their experimental "Curaetion" show from the Meltdown festival a few weeks
earier.
Rumours that there would be a release had been circulating since the gig
itself, where video director Tim Pope was spotted filming the gig (sporting
a tee shirt reading "Yes I'm Filming. No I don't know when you'll see it.").
Earlier in 2019 the "Anniversary" half had a limited run in cinemas, but
the home video release was not officially revealed until much later, and the
inclusion of Curaetion an unexpected bonus.
'deluxe' releases
The release is available in several configurations. The "standard" issue is
a two-DVD (or Blu Ray) set in a hard-book case, with some liner notes in the
middle. A "deluxe" issue is a roughly twice-as-large boxed set containing
the two video discs and two CD-audio discs of the shows.
When it comes to deluxe editions, I would historically have been the perfect
"mark", but I've had some bad experiences with other releases (this is a story
for another blog post), so for this release I pre-ordered the standard BR
edition. Right up until release, I wondered whether I should have made the
other choice. Eventually, pictures of other people's Deluxe Editions started
to circulate, and I was re-assured that I made the right call. The larger box
is just something harder to store, the larger booklet is an exact reproduction
of the smaller, standard edition liner notes, which are not really notable.
The shows
I think the shows are great. The Hyde Park show is a fairly standard "best of"
setlist, and my enjoyment of it might be coloured by having been at the show
and having fond memories of it. But it's a great performance and very well
captured, so I think there's something for people who like the Cure but weren't
there to enjoy too.
I wasn't at the Meltdown show. The setlist for that one is much more esoteric,
and it's lovely to have renditions of songs that are rarely performed live
(And: across the two sets you get If Only Tonight We Could Sleep twice).
Getting the audio
I knew in advance that I would likely listen to the shows more often than watch
them, so the CDs in the Deluxe set would have been useful for that, but I was
fairly sure the audio mix would be the same as on the video discs, so I could
just extract that. I was half-right: the BR set (at least) has 5.1 surround and
separate lossless stereo mixes, but they have been mastered quite differently
to the CD audio, which appears to be brick-wall mastered, to such an extent
that the audio distorts quite noticeably in a few places. The BR audio does not
seem to suffer from the same problems.
Getting the audio off the discs was interesting. On Linux, the tool of choice
for decoding encrypted Blu Rays is libaacs, which requires a list of Blu Ray
keys which you must source separately. With my BR drive I was not able to
decode the discs using the keys I could find online. However, the separate tool
MakeMKV was able to decode them. I don't know exactly how but I speculate
that MakeMKV contains some leaked hardware player keys that are not in more
general circulation.
Once I had decoded copies of the two videos, the trusty tool ffmpeg is able
to easily extract the PCM stereo audio track. Unfortunately it cannot, in one
go, split the audio track at the chapter boundary points. This is easy to
script around: one ffmpeg invocation to get the chapter offsets, then some
scripting to turn that into seek and duration command-line arguments for
further ffmpeg invocations. For space reasons, I opted to transcode to FLAC
at the same time as extracting each track. I hit an interesting (although not
fatal) problem: the time taken to extract each track got progressively slower,
almost as if ffmpeg was transcoding the entire audio track up to the point
specified as the offset to start extracting from.
If I wanted to answer categorically whether the BR audio was preferable, I
would need to perform a double-blind listening test, using a tool such as
squishyball. I certainly can't
be bothered: the BR audio is fine for me.
I've talked about my doorbell before, but started looking at it again this week because sometimes it simply doesn't send notifications to my Home Assistant setup - the push notifications appear on my phone, but the doorbell simply doesn't trigger the HTTP callback it's meant to[1]. This is obviously suboptimal, but it's also tricky to debug a device when you have no access to it.
Armadillo is a powerful and expressive C++ template library for linear algebra aiming towards a good balance between speed and ease of use with a syntax deliberately close to a Matlab. RcppArmadillo integrates this library with the R environment and language and is widely used by (currently) 841 other packages on CRAN.
This release brings us a second update within the Armadillo 10.2 series, one month after the initial release. Upstream work has commenced at a 10.3 series with first pre-releases which we are currently testing. If possible, CRAN release will continue to be at least one month apart (such as this time) but we continue to make interim releases available on the Rcpp drat repo repo.
The full set of changes follows.
Courtesy of my CRANberries, there is a diffstat report relative to previous release. More detailed information is on the RcppArmadillo page. Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page. If you like this or other open-source work I do, you can sponsor me at GitHub.Changes in RcppArmadillo version 0.10.2.2.0 (2021-03-09)
- Upgraded to Armadillo release 10.2.2 (Cicada Swarm)
- faster handling of subcubes
- added
tgamma()- added
.brief_print()for abridged printing of matrices & cubes- expanded forms of
trimatu()andtrimatl()with diagonal specification to handle sparse matrices- expanded
eigs_sym()andeigs_gen()with optional shift-invert mode- Removed
debian/directory from repository as packaging is on salsa.debian.org.- Relaxed tolerance on two
cubetests on Windows to accomodate new 'gcc10-UCRT' builder.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
In the Cloud Services team at the Wikimedia Foundation we use Openstack Neutron to build our
virtual network, and in particular, we rely on the neutron-l3-agent for implementing all the L3
connectivity, topology and policing. This includes basic packet firewalling and NAT.
As of this writing, we are using Openstack version Train. We run the neutron-l3-agent on
standard linux hardware servers with 10G NICs, and in general it works really well. Our setup is
rather simple: we have a couple of servers for redundancy (note: upstream recommends having 3) and
each server runs an instance of neutron-l3-agent. We don t use DVR, so all ingress/egress network
traffic (or north-south traffic) flows using these servers. Today we use a flat network topology in
our cloud. This means that all of our virtual machines share the same router gateway. Therefore, we
only have one software-defined router.
Neutron does a very smart thing: each software-defined router is implemented on a linux network
namespace (netns). Each router living on its own netns, the namespace contains all IP addresses,
routes, interfaces, netfilter firewalling rules, NAT configuration, etc.
Additionally, we configure the agents and software-defined routers to be deployed on an high
availability fashion. Neutron implements this by running an instance of keepalived (VRRP) inside
each router netns. The gateway IP is therefore a virtual address that can move between the two
instances of the neutron-l3-agent.
In our setup we rely very heavily on IPv4 NAT, we use it for the egress traffic (SNAT) and also for
Openstack floating IPs (SNAT/DNAT). Neutron uses Netfilter rules for configuring the whole NAT
setup. There is, however, no apparent mechanism in the neutron-l3-agent to ensure continuity of
NATed TCP connections when a failover happens. If all NATed TCP connections are flowing using
neutron-l3-agent node A, and a failover happens, node B wont be able to pick up the opened TCP
streams and therefore all connections will need to be re-established. This happens because the
conntrack information that Netfilter uses to perform NAT is not present in node B when the failover
happens. NAT is, in general, a stateful thing and should be treated that way. It seems some
folks upstream are aware of this, and there are even some blueprints to introduce
conntrackd alongside keepalived. The actual implementation didn t happen so far,
apparently.
I wonder, are we the only cloud deployment suffering this issue? Our users have been experiencing
annoying connection cuts every time we failover the neutron-l3-agent for whatever reason: an
upgrade, server reboot, etc. After numerous incidents I opened a ticket in our phabricator
instance and started working on it. I ve been trying to improve this situation by following a
couple of strategies:
conntrackd by hand inside the software-defined router netns.
This deserves its own blog post and won t comment more on this today.net.netfilter.nf_conntrack_tcp_be_liberal=1. But it turns out this sysctl key is not
inherited from the main netns when the software-defined netns is created (i.e, is per-netns). I
needed a mechanism to detect netns events (creation) and then inject the sysctl setting. Neutron
apparently doesn t have any facility to hook/call commands at netns creation time.
This felt like a very fun coding challenge, so I did it!
I learned that netns have a /var/run/netns/<netns> entry, so I thought it would be easy to listen
to file system events and react to them. I wanted to use some python, so I decided to go with the
pyinotify library.
I ended up creating a simple netns-events.py daemon/script. By using regexes it allows
matching on netns names and running arbitrary commands on certain situations:
daemon_startup_actions)inotify_actions), such as IN_CREATE.---
# $NETNS env var is provided by the runner daemon
- netns_regex: ^qrouter-.*
daemon_startup_actions:
- ip netns exec $NETNS sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1
- ip netns exec $NETNS sysctl net.netfilter.nf_conntrack_tcp_loose=1
inotify_actions:
- IN_CREATE:
- ip netns exec $NETNS sysctl net.netfilter.nf_conntrack_tcp_be_liberal=1
- ip netns exec $NETNS sysctl net.netfilter.nf_conntrack_tcp_loose=1
neutron-l3-agent systemd service.
Apparently the nf_conntrack_tcp_be_liberal sysctl key is only read either at module load
time or netns creation time, so it is really important the netns-events.py daemon runs before
neutron-l3-agent starts doing its thing.
Anyway, this won t probably solve all of our problems. I m still on a massive rabbit hole with
conntrackd, that I ll leave for another day. Other than this small script to set the sysctl keys
I have more questions than answers. Again, I wonder what others do, or if there is something
fundamentally wrong with our cloud network architecture.
I ll keep researching how to deploy neutron-l3-agent in a more realiable fashion. If you have
more hints, are in the same situation, or have any other insight, please let me know!
debuginfod is a new-ish project whose purpose is to serve
ELF/DWARF/source-code information over HTTP. It is developed under the
elfutils umbrella. You can find more information about it here:
https://sourceware.org/elfutils/Debuginfod.html
In a nutshell, by using a debuginfod service you will not need to
install debuginfo (a.k.a. dbgsym) files anymore; the symbols will be
served to GDB (or any other debuginfo consumer that supports debuginfod)
over the network. Ultimately, this makes the debugging experience much
smoother (I myself never remember the full URL of our debuginfo
repository when I need it).
debuginfod directly, but I witnessed discussions
about "having way to serve debug symbols over the internet" multiple
times during my tenure at the company. So this is not a new idea, and
it's not even the first implementation, but it's the first time that
some engineers actually got their hands dirty enough to have something
concrete to show.
The idea to set up a debuginfod server for Debian started to brew
after 2019's GNU Tools
Cauldron, but as usual several
things happened in $LIFE (including a global pandemic and leaving Red
Hat and starting a completely different job at Canonical) which had
the effect of shuffling my TODO list "a little".
Benefits for Debian
Debian unfortunately is lagging behind when it comes to offer its
users a good debugging experience. Before the advent of our
debuginfod server, if you wanted to debug a package in Debian you
would need to:
debian-debug apt repository to your
/etc/apt/sources.list.
dbgsym package that contains the debug symbols for
the package you are debugging. Note that the version of the
dbgsym package needs to be exactly the same as the version of
the package you want to debug.
dbgsym packages for all of them. Arguably, this step is optional
but recommended if you would like to perform a more in-depth
debugging.
apt source or some
equivalent command.
sources.list, dbgsym packages and
version mismatches.
The package source
It is important to mention an existing (but perhaps not well-known)
limitation of our debugging experience in Debian: the need to manually
download the source packages and adjust GDB to properly find them
(see step 4 above). debuginfod is able to serve source code as
well, but our Debian instance is not doing that at the moment.
Debian does not provide a patched source tree that is ready to be
consumed by GDB or debuginfod (for a good example of a distribution
that does this, see Fedora's debugsource packages). Let me show you
an example of debugging GDB itself (using debuginfod) on Debian:
$ HOME=/tmp DEBUGINFOD_URLS=https://debuginfod.debian.net gdb -q gdb
Reading symbols from gdb...
Downloading separate debug info for /tmp/gdb...
Reading symbols from /tmp/.cache/debuginfod_client/02046bac4352940d19d9164bab73b2f5cefc8c73/debuginfo...
(gdb) start
Temporary breakpoint 1 at 0xd18e0: file /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c, line 28.
Starting program: /usr/bin/gdb
Downloading separate debug info for /lib/x86_64-linux-gnu/libreadline.so.8...
Downloading separate debug info for /lib/x86_64-linux-gnu/libz.so.1...
Downloading separate debug info for /lib/x86_64-linux-gnu/libncursesw.so.6...
Downloading separate debug info for /lib/x86_64-linux-gnu/libtinfo.so.6...
Downloading separate debug info for /tmp/.cache/debuginfod_client/d6920dbdd057f44edaf4c1fbce191b5854dfd9e6/debuginfo...
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Downloading separate debug info for /lib/x86_64-linux-gnu/libexpat.so.1...
Downloading separate debug info for /lib/x86_64-linux-gnu/liblzma.so.5...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libbabeltrace.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libbabeltrace-ctf.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libipt.so.2...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libmpfr.so.6...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libsource-highlight.so.4...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libxxhash.so.0...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libdebuginfod.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libstdc++.so.6...
Downloading separate debug info for /lib/x86_64-linux-gnu/libgcc_s.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0...
Downloading separate debug info for /tmp/.cache/debuginfod_client/dbfea245d26065975b4084f4e9cd2d83c65973ee/debuginfo...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libdw.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libelf.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libuuid.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libgmp.so.10...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.74.0...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4...
Downloading separate debug info for /lib/x86_64-linux-gnu/libbz2.so.1.0...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libicui18n.so.67...
Downloading separate debug info for /tmp/.cache/debuginfod_client/acaa831dbbc8aa70bb2131134e0c83206a0701f9/debuginfo...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libicuuc.so.67...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libnghttp2.so.14...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libidn2.so.0...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/librtmp.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libssh2.so.1...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libpsl.so.5...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libnettle.so.8...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libgnutls.so.30...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1...
Downloading separate debug info for /tmp/.cache/debuginfod_client/39739740c2f8a033de95c1c0b1eb8be445610b31/debuginfo...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libunistring.so.2...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libhogweed.so.6...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libgcrypt.so.20...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libp11-kit.so.0...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libtasn1.so.6...
Downloading separate debug info for /lib/x86_64-linux-gnu/libcom_err.so.2...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libsasl2.so.2...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1...
Downloading separate debug info for /lib/x86_64-linux-gnu/libgpg-error.so.0...
Downloading separate debug info for /usr/lib/x86_64-linux-gnu/libffi.so.7...
Downloading separate debug info for /lib/x86_64-linux-gnu/libkeyutils.so.1...
Temporary breakpoint 1, main (argc=1, argv=0x7fffffffebf8) at /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c:28
28 /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c: Directory not empty.
(gdb) list
23 in /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c
(gdb)
Downloading separate debug info for... lines? Nice!)
As you can see, when we try to list the contents of the file we're
in, nothing shows up. This happens because GDB doesn't know where the
file is. So you have to tell it. In this case, it's relatively easy:
you see that the GDB package's build directory is
/build/gdb-Nav6Es/gdb-10.1/. When you apt source gdb, you will
end up with a directory called $PWD/gdb-10.1/ containing the full
source of the package. Notice that the last directory's name in both
paths is the same, so in this case we can use GDB's set
substitute-path command do the job for us (in this example $PWD is
/tmp/):
$ HOME=/tmp DEBUGINFOD_URLS=https://debuginfod.debian.net gdb -q gdb
Reading symbols from gdb...
Reading symbols from /tmp/.cache/debuginfod_client/02046bac4352940d19d9164bab73b2f5cefc8c73/debuginfo...
(gdb) set substitute-path /build/gdb-Nav6Es/ /tmp/
(gdb) start
Temporary breakpoint 1 at 0xd18e0: file /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c, line 28.
Starting program: /usr/bin/gdb
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Temporary breakpoint 1, main (argc=1, argv=0x7fffffffebf8) at /build/gdb-Nav6Es/gdb-10.1/gdb/gdb.c:28
warning: Source file is more recent than executable.
28 memset (&args, 0, sizeof args);
(gdb) list
23 int
24 main (int argc, char **argv)
25
26 struct captured_main_args args;
27
28 memset (&args, 0, sizeof args);
29 args.argc = argc;
30 args.argv = argv;
31 args.interpreter_p = INTERP_CONSOLE;
32 return gdb_main (&args);
(gdb)
elfutils Merge
Request
whose purpose is to implement a debconf question to ask the user
whether she wants to use our service by default.
If you would like to start using the service right now, all you have
to do is set the following environment variable in your shell:
DEBUGINFOD_URLS="https://debuginfod.debian.net"
debuginfod service
here. Try to keep an eye on the
page as it's being constantly updated.
If you'd like to get in touch with me, my email is my domain at debian
dot org.
I sincerely believe that this service is a step in the right
direction, and hope that it can be useful to you :-).
Release 0.3.4 of the RPushbullet package arrived on CRAN today. RPushbullet interfaces the neat Pushbullet service for inter-device messaging, communication, and more. It lets you easily send (programmatic) alerts like the one to the left to your browser, phone, tablet, or all at once.
This release contains a contributed PR to better reflect an error code, and adds a mkdocs-material-based documentation site (just like a few other packages of mine). See below for more details.
Courtesy of my CRANberries, there is also a diffstat report for this release. More details about the package are at the RPushbullet webpage and the RPushbullet GitHub repo. If you like this or other open-source work I do, you can now sponsor me at GitHub.Changes in version 0.3.4 (2021-03-01)
- Return code checking using error code content if it exists (Thomas Shafer in #64).
- Enabled GitHub Actions with encrypted JSON file for API access.
- Added a package documentation website.
This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.
ruby-rspec-stubbed-env for C dric Boutillier, heh :PBesides, there s something more that is in the pipelines. Can t talk about it now, shh. But hopefully very sooooooon!And now I can talk about it! So here it is..

:wq for today.
| Series: | Memory War #1 |
| Publisher: | Tor |
| Copyright: | 2020 |
| ISBN: | 1-250-21546-3 |
| Format: | Kindle |
| Pages: | 350 |
Next.