I have worked a bit on the fonts I use recently. From the main font I
use every day in my text editor and terminals to this very website, I
did a major and (hopefully) thoughtful overhaul of my typography, in
the hope of making things easier to use and, to be honest, just
prettier.
Editor and Terminal: Fira mono
This all started when I found out about the JetbrainsMono font. I found the idea of ligatures
fascinating: the result is truly beautiful. So I do what I often do
(sometimes to the despair of some fellow Debian members) and filed a
RFP to document my research.
As it turns out, Jetbrains Mono is not free enough to be packaged in
Debian, because it requires proprietary tools to build. I nevertheless
figured I could try another font so I looked at other monospace
alternatives. I found the following packages in debian:
Because Fira code had ligatures, i ended up giving it a shot. I really
like the originality of the font. See, for example, how the @ sign
looks when compared to my previous font, Liberation Mono:
Liberation Mono
Fira Mono
Interestingly, a colleague (thanks ahf!) pointed me to the Practical
Typography post "Ligatures in programming fonts: hell no", which
makes the very convincing argument that ligatures are downright
dangerous to programming environment. In my experiences with the
fonts, it was also not always giving the result I would expect. I also
remembered that the Emacs Haskell mode would have this tendency of
inserting crazy syntactic sugar like this in source code without being
asked, which I found extremely frustrating.
Besides, Emacs doesn't support ligatures, unless you count such
horrendous hacks which hack at the display time. That's because
Emacs' display layer is not based on a modern rendering library like
Pango but some scary legacy code that very few people
understand. On top of the complexity of the codebase, there is also
resistance in including a modern font.
So I ended up using Fira mono everywhere I use fixed-width fonts, even
though it's not packaged in Debian. That involves the following
configuration in my .Xresources (no, I haven't switched to Wayland):
! font settings
Emacs*font: Fira mono
rofi*font: Fira mono 12
! Symbola is to get emojis to display correctly, apt install fonts-symbola
!URxvt*font: xft:Monospace,xft:Symbola
URxvt*font: xft:Fira mono,xft:Symbola
I also dropped this script in ~/.local/share/fonts/download.sh, for
lack of a better way, to download all the fonts I'm interested in:
Update: I forgot to mention one motivation behind this was to work
around a change in the freetype interpreter, discussed in bug
866685 and my upgrades
documentation.
Website: Charter
That "hell no" article got me interested in the Practical
Typography web book, which I read over the weekend. It was an eye
opener and I realized I had already some of those concepts
implanted; in fact it's probably after reading the Typography in ten
minutes guide that I ended up trying Fira sans a few years
ago. I have removed that font since then,
however, after realising it was taking up an order of magnitude more
bandwidth space than the actual page content.
I really loved the book, so much that I actually bought it. I
liked the concept of it, the look, and the fact that it's a living
document. There's a lot of typography work I would need to do on this
site to catchup with the recommendations from Matthew
Butterick. Switching fonts is only one part of this, but it's
something I was excited to work on. So I sat down and reviewed the
free fonts Butterick recommends and tried out a few. I ended up
settling on Charter, a relatively old (in terms of computing)
font designed by Matthew Carter (of Verdana fame) in 1987.
Charter really looks great and is surprisingly small. While a single
version of Fira varies between 96KiB (Fira Sans Condensed) and 308KiB
(Fira Sans Medium Italic), Charter is only 28KiB! While it's still
about as large as most of my articles, I found it was a better
compromise and decided to make the jump. This site is now in Serif,
which is a huge change for me.
The change was done with the following CSS:
h1, h2, h3, h4, h5, body
/*
* Charter: Butterick's favorite, freely available, found on https://practicaltypography.com/free-fonts.html
* Palatino: Mac OS
* Palatino Linotype: Windows
* Noto serif: Android, packaged in Debian
* Liberation serif: Linux fallback
* Serif: fallback
*/
font-family: Charter, Palatino, "Palatino Linotype", "Noto serif", "Liberation serif", serif;
/* Charter is available from https://practicaltypography.com/charter.html under the liberal Bitstream license */
I have also decided to outline headings by making them slanted, using
the beautiful italic version of Charter:
h1, h2, h3, h4, h5
font-style: italic;
I also made the point size larger, if the display is large enough:
/* enlarge body point size for charter for larger displays */
@media (min-device-width: 750px)
body
font-size: 20px;
line-height: 1.3; /* default in FF is ~1.48 */
Modern display (including fonts) have a much higher resolution and the
point size on my website was really getting too small to be
readable. This, in turn, required a change to the max-width:
#content
/* about 2.5 alphabets with charter */
max-width: 35em;
I have kept the footers and "UI" elements in sans-serif though, and
kept those aligned on operating system defaults or "system fonts":
/* some hacking at typefaces to get some fresh zest in here
* fallbacks from:
* https://en.wikipedia.org/wiki/List_of_typefaces_included_with_Microsoft_Windows
* https://en.wikipedia.org/wiki/List_of_typefaces_included_with_macOS
*/
.navbar, .footer
/*
* Avenir: Mac, quite different but should still be pretty
* Gill sans: Mac, Windows, somewhat similar to Avenir (indulge me)
* Noto sans: Android, packaged in Debian
* Open sans: Texlive extras AKA Linux, packaged in Debian
* Fira sans: Mozilla's Firefox OS
* Liberation sans: Linux fallback
* Helvetica: general fallback
* Sans-serif: fallback
*/
font-family: Avenir, "Gill sans", "Noto sans", "Open sans", "Fira sans", "Liberation sans", Helvetica, sans-serif;
/* Fira is available from https://github.com/mozilla/Fira/ under the SIL Open Font License */
/* alternatively, just use system fonts for "controls" instead:
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
gitlab uses: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", Ubuntu, Cantarell, "Helvetica Neue", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"
*/
I've only done some preliminary testing of how this will look
like. Although I tested on a few devices (my phone, e-book tablet, an
iPad, and of course my laptop), I fully expect things to break on
your device. Do let me know if things look better or worse. For
future comparison, my site is well indexed in the Internet
Wayback Machine and can be used to look at the site before the
change. For example, compare the previous article here with its
earlier style.
The changes to the theme are of course available in my custom ikiwiki
bootstrap theme (see in particular commits 0bca0fb7 and
d1901fb8), as usual.
Enjoy, and let me know what you think!
PS: I considered just setting the Charter font in CSS and not adding
it as a @font-face. I'm still considering that option and might do
so if the performance cost is too big. The Fira mono font is
actually set like this for the preformatted sections of the site, but
because it's more common (and it's too big) I haven't added it as a
font-face. You might want to download the font locally to benefit from
the full experience as well.
PPS: As it turns out, an earlier version of this post featured exactly
that: a non-webfont version of Charter, which works fine if you have a
good Charter font available. But it looks absolutely terrible if, like
many Linux users, you have the nasty bitmap font shipped with
xfonts-100dpi and xfonts-75dpi. So I fixed the webfont and
it's unlikely this site will be able to load reasonably well in Linux
until those packages are removed or bitmap font rendering is disabled.
Your friends and colleagues are talking about something called Bayes s
Theorem or Bayes s Rule, or something called Bayesian reasoning. They
sound really enthusiastic about it, too, so you google and find a web page
about Bayes s Theorem and... It s this equation. That s all. Just one
equation. The page you found gives a definition of it, but it doesn t say
what it is, or why it s useful, or why your friends would be interested in
it. It looks like this random statistics thing. Why does a mathematical
concept generate this strange enthusiasm in its students? What is the
so-called Bayesian Revolution now sweeping through the sciences, which
claims to subsume even the experimental method itself as a special case?
What is the secret that the adherents of Bayes know? What is the light
that they have seen? Soon you will know. Soon you will be one of us.
While there are a few existing online explanations of Bayes s Theorem, my
experience with trying to introduce people to Bayesian reasoning is that
the existing online explanations are too abstract. Bayesian reasoning is
very counterintuitive. People do not employ Bayesian reasoning
intuitively, find it very difficult to learn Bayesian reasoning when
tutored, and rapidly forget Bayesian methods once the tutoring is over.
This holds equally true for novice students and highly trained
professionals in a field. Bayesian reasoning is apparently one of those
things which, like quantum mechanics or the Wason Selection Test, is
inherently difficult for humans to grasp with our built-in mental
faculties. Or so they claim. Here you will find an attempt to offer an
intuitive explanation of Bayesian reasoning an excruciatingly gentle
introduction that invokes all the human ways of grasping numbers, from
natural frequencies to spatial visualization. The intent is to convey, not
abstract rules for manipulating numbers, but what the numbers mean, and
why the rules are what they are (and cannot possibly be anything else).
When you are finished reading this, you will see Bayesian problems in your
dreams.
Last night, a series of forged emails was sent to a number of places around the Debian, Ubuntu and Free Software communities. The meat of the mail was a fake message from me to debian-private with the subject "DebConf19 Diversity Girls." I didn't write such a message. I view this message as the latest installment in a campaign of attacks on Debian that attempt to undermine the project and take up the time of our members. I was expecting something like this: yesterday, I banned Daniel Pocock from the project.There's been a pattern of related events over the past year and a half:
Confrontational messages from Daniel that do not stop even when moderators of the discussion forum ask him to stop.
Anonymous messages that expand on the points Daniel has been making accusing people and organizations of misconduct
Without claiming authorship of these anonymous messages, Daniel quickly expands on the messages in his blogs and goes forward assuming these anonymous claims are true
Use of mechanisms described on Daniel's websites to bypass moderation of community forums and other mechanisms designed to reach people who are not interested in the communication on the part of Daniel and the anonymous messages
And now, forged emails
This campaign involves a lot of activities hurtful to members of our community. The "DebConf19 Diversity Girls" message was no exception. It alleges misconduct on the part of members of our community. Through the #metoo movement we've seen countless examples of victims standing up, demanding to be acknowledged and demanding that abusers are held accountable. That's not what is happening here. This message combines half-truths with a shocking presentation to damage Debian. It does not work to improve Debian. It is not championing the cause of someone trying to get redress for wrongs done to them. I reject this approach and the intent behind this forged message and the broader campaign that it fits into. However, I also feel it is important to reassure everyone that Debian is committed to creating a safe and welcoming community. We take concerns about misconduct seriously. We particularly encourage anyone who has concerns about their safety in the debian community or concerns about how they are treated to talk to us. I am available as the project leader. Our community team is available. We will work to understand and resolve your concern. While I think the presentation was hurtful and inappropriate, I also do acknowledge that personal conflict of interest is something that we all should be aware of. When we are taking on roles that have power within the project, we can create situations where we need to be extra careful to respect people's boundaries. There are cases where a personal conflict of interest may prevent us from being in certain personal relationships while also acting in a role within the project that could affect those relationships. I think we are already generally aware of these issues. Even so, as we continue to build a community that does a better job respecting its members and their boundaries, it benefits us to continue to refine our approach to important issues like conflict of interest. Sometimes that will involve awareness. Sometimes that will involve crafting more clear policies around the issues. It does not involve vague accusations spammed to the entire Free Software community. If I were actually writing a message on these topics, it would look a lot more like the paragraph above than the message forged in my name.
Everywhere I worked in the past, the only feedback that was asked of
employees was during a yearly evaluation meeting. These meetings always felt to me
like talking to Santa Claus and his Knecht Ruprecht. I was asked: Were you a good
employee last year? If yes, we might give you a raise. If no, admit all
your mistakes now, even if we already know everything, ho ho ho. And don't you talk about your feelings, or your
well-being, or say anything about the organization's (invisible)
hierarchies, otherwise we will put you on the "naughty list", and that's it with candy. The
yearly evaluation set aside, there was no other place to give feedback (except by escalating a matter by involving the Labour Court, if you happen to work in France, or going on strike, also mostly part of French culture).
Feedback allows to reflect on work processes, to situate oneself, and to get closure.
How surprised was I when, some years ago, I received an email from a
collaborator asking me: kindly for just few paragraphs (doesn t have to be
anything long) to hear from you about the process, your work, challenges
you had, or anything else you want to mention there.. Wow!
This simple email allowed me to reflect about:
What did I like about the project? What part of the work was fun, challenging, and creative?
What went well or was complicated? How did our meetings work out? Were they
productive? Was it easy for me to frame the work I have to do? Were expectations clearly defined? How were remarks
and proposals for improvement presented to me? Did people test my work
thoroughly and gave me useful feedback on mistakes or misunderstandings? Did I
have to do lots of unexpected work? Were file formats, texts or other input not
well formatted or unclear, or arrived late? Did I allocate enough time to the project? Was I late with delivering anything? Could I have done better?
What is my overall conclusion for this project? Between what
went well and what did not: were the issues, the workload, the
assignments manageable? Am I willing to work with this person again? If
yes, what needs to change? If no, why?
What am I grateful for? What can I thank my colleagues/collaborators for? Did they have great
communication skills, ideas, were they on time, did they voice issues early
enough? How did it feel to work with them?
How do we get to a feedback culture?
How do we get from German Christmas folklore, protestant work
ethics, and the deeply rooted principles of disciplining and punishing to a feedback culture on eye level? It sounds
a bit like going from the dark ages to a really cool science fiction utopia
with universal peace, telepathy, and magic between all sentient beings on all
inhabited planets in the cosmos at least that's how I imagined it as a child, just like some of my heroes did: the cosmonaut girl who saves Earth, the boy who talks to space flowers that give him the capacity to fly, and the little onion who fights for justice (the Italian author was so popular on our side of the iron curtain that a soviet astronomer named a minor planet after him. His wife meanwhile immortalized Karl Marx.) and some romantic part of me hangs on to these ideas.
Feedback is not always easy to hear and to give.
I-Statements
Giving and receiving feedback is hard in a culture where people learnt that
when they made a mistake they won't get candy. Or that they have to constantly please
other people because they are not worthy by themselves. This can lead to people
putting mistakes on one another. Every sentence that starts with You are
has the potential of creating a lot of hurt, and anger. Have you heard of I-Statements? They have very powerfully changed my
world view, as they shift from accusation to ownership of feelings. So
instead of telling someone Your writing style is impossible! You really need to change the way you write.,
with an I-Statement one could say I have a hard time understanding that
part of the text. I-Statements make cooperation possible.
Listening actively
Feedback is not about being right or wrong, it's first of all about being
able to see how another person has experienced a situation. Active listening is a tool that helps with understanding. It might seem easy, but needs quite
some practice and a safe space. One part of active listening is to restate what you hear the
other person say (by mirroring, or paraphrasing), to make sure you understood,
and make sure they know you understood what they were trying to say. You can
practise this: in a circle of three people, have one person tell how they
experienced a (possibly conflictual) situation, have one person do the active
listening, and the third person observing in order to give feedback to the
active listener about how they did. Then switch roles, for example
clockwise, until everyone has had every role.
Encouraging continuous feedback
A working feedback culture does not take place
only once a year. It needs to be a continuous process and therefore implemented
in meetings, teams, eventually on the level of a project. Making clear: Who can I talk to if
I experience an issue? is not different than telling developers and users where and how they can report a bug, or request a feature. A safe space to express feedback is key.
Encouraging multiple feedback channels
Some people might feel less empowered or more vulnerable over a channel than
others. Make sure to have different channels for receiving feedback such as
email, a point on each meeting agenda, a one-to-one meeting, or a poll.
Giving and receiving feedback on eye level
In a workplace that does not have a working feedback culture, feedback is
easily perceived as policing. If your feedback process consists of asking
people to upload a form to a cloud server every 3 months, and you notice that
some people don't do it, you could ask yourself if there is an issue with how
your colleagues perceive giving feedback in your organization. Do you meet
your colleagues on eye level when it comes to feedback? Do you take feedback
seriously and act on it? How do you deal with unpleasant feedback? How do
you react when colleagues don't meet your expectations? Can people participate
in the feedback process within their paid work time? Did everybody understand
what the feedback process is about?
Don't jump to conclusions
Humans are problem solving animals. When someone comes to us with a problem,
the first thing we want to do is to solve it, to help them. But sometimes this
is uncalled for, it can be disempowering, or prevent people from acquiring competences themselves, and it can even break people's boundaries. So
instead of asking What can I do for you?, try asking What do you
need right now? People will often reply something that you did not
expect at all.
Acting on feedback
Make sure you have a process to collect feedback (possibly anonymized) and
to regularly evaluate if the organization needs to implement changes to thrive.
Conclusion
I stumbled upon Hans-Christian Dany's critique of feedback again recently, therefore I need to make it clear: I'm not interested in improving capitalist work culture by using cybernetic principles of self-regulation through feedback. Instead, I am interested in improving cooperation between people who work either individually or in organizations on eye level. In this framework, I see feedback processes as profoundly anti-capitalist methods to improve cooperation while working towards common good.
Implementing these ideas should be doable: there are organizations who provide feedback training for example. This document, initially aiming at people in cooperatives, gives many insights on communication skills and
feedback, the agile and UX worlds do feedback "retrospectives". and otherwise I'll have to go and write science fiction stories for
children myself.
After upgrading to MythTV
30 and MariaDB 10.3.18 on
Debian buster, I noticed the
following errors in my logs:
Jan 14 02:00:05 hostname mysqld[846]: 2020-01-14 2:00:05 62 [Warning] InnoDB: Cannot add field rating in table mythconverg . internetcontentarticles because after adding it, the row size is 8617 which is greater than maximum allowed size (8126) for a record on index leaf page.
Jan 14 02:00:05 hostname mysqld[846]: 2020-01-14 2:00:05 62 [Warning] InnoDB: Cannot add field playcommand in table mythconverg . videometadata because after adding it, the row size is 8243 which is greater than maximum allowed size (8126) for a record on index leaf page.
The root cause is that the database is using an InnoDB row
format
that cannot handle the new table sizes.
To fix it, I put the following in alter_tables.sql:
ALTER TABLE archiveitems ROW_FORMAT=DYNAMIC;
ALTER TABLE bdbookmark ROW_FORMAT=DYNAMIC;
ALTER TABLE callsignnetworkmap ROW_FORMAT=DYNAMIC;
ALTER TABLE capturecard ROW_FORMAT=DYNAMIC;
ALTER TABLE cardinput ROW_FORMAT=DYNAMIC;
ALTER TABLE channel ROW_FORMAT=DYNAMIC;
ALTER TABLE channelgroup ROW_FORMAT=DYNAMIC;
ALTER TABLE channelgroupnames ROW_FORMAT=DYNAMIC;
ALTER TABLE channelscan ROW_FORMAT=DYNAMIC;
ALTER TABLE channelscan_channel ROW_FORMAT=DYNAMIC;
ALTER TABLE channelscan_dtv_multiplex ROW_FORMAT=DYNAMIC;
ALTER TABLE codecparams ROW_FORMAT=DYNAMIC;
ALTER TABLE credits ROW_FORMAT=DYNAMIC;
ALTER TABLE customexample ROW_FORMAT=DYNAMIC;
ALTER TABLE diseqc_config ROW_FORMAT=DYNAMIC;
ALTER TABLE diseqc_tree ROW_FORMAT=DYNAMIC;
ALTER TABLE displayprofilegroups ROW_FORMAT=DYNAMIC;
ALTER TABLE displayprofiles ROW_FORMAT=DYNAMIC;
ALTER TABLE dtv_multiplex ROW_FORMAT=DYNAMIC;
ALTER TABLE dtv_privatetypes ROW_FORMAT=DYNAMIC;
ALTER TABLE dvdbookmark ROW_FORMAT=DYNAMIC;
ALTER TABLE dvdinput ROW_FORMAT=DYNAMIC;
ALTER TABLE dvdtranscode ROW_FORMAT=DYNAMIC;
ALTER TABLE eit_cache ROW_FORMAT=DYNAMIC;
ALTER TABLE filemarkup ROW_FORMAT=DYNAMIC;
ALTER TABLE gallery_directories ROW_FORMAT=DYNAMIC;
ALTER TABLE gallery_files ROW_FORMAT=DYNAMIC;
ALTER TABLE gallerymetadata ROW_FORMAT=DYNAMIC;
ALTER TABLE housekeeping ROW_FORMAT=DYNAMIC;
ALTER TABLE inputgroup ROW_FORMAT=DYNAMIC;
ALTER TABLE internetcontent ROW_FORMAT=DYNAMIC;
ALTER TABLE internetcontentarticles ROW_FORMAT=DYNAMIC;
ALTER TABLE inuseprograms ROW_FORMAT=DYNAMIC;
ALTER TABLE iptv_channel ROW_FORMAT=DYNAMIC;
ALTER TABLE jobqueue ROW_FORMAT=DYNAMIC;
ALTER TABLE jumppoints ROW_FORMAT=DYNAMIC;
ALTER TABLE keybindings ROW_FORMAT=DYNAMIC;
ALTER TABLE keyword ROW_FORMAT=DYNAMIC;
ALTER TABLE livestream ROW_FORMAT=DYNAMIC;
ALTER TABLE logging ROW_FORMAT=DYNAMIC;
ALTER TABLE music_albumart ROW_FORMAT=DYNAMIC;
ALTER TABLE music_albums ROW_FORMAT=DYNAMIC;
ALTER TABLE music_artists ROW_FORMAT=DYNAMIC;
ALTER TABLE music_directories ROW_FORMAT=DYNAMIC;
ALTER TABLE music_genres ROW_FORMAT=DYNAMIC;
ALTER TABLE music_playlists ROW_FORMAT=DYNAMIC;
ALTER TABLE music_radios ROW_FORMAT=DYNAMIC;
ALTER TABLE music_smartplaylist_categories ROW_FORMAT=DYNAMIC;
ALTER TABLE music_smartplaylist_items ROW_FORMAT=DYNAMIC;
ALTER TABLE music_smartplaylists ROW_FORMAT=DYNAMIC;
ALTER TABLE music_songs ROW_FORMAT=DYNAMIC;
ALTER TABLE music_stats ROW_FORMAT=DYNAMIC;
ALTER TABLE music_streams ROW_FORMAT=DYNAMIC;
ALTER TABLE mythlog ROW_FORMAT=DYNAMIC;
ALTER TABLE mythweb_sessions ROW_FORMAT=DYNAMIC;
ALTER TABLE networkiconmap ROW_FORMAT=DYNAMIC;
ALTER TABLE oldfind ROW_FORMAT=DYNAMIC;
ALTER TABLE oldprogram ROW_FORMAT=DYNAMIC;
ALTER TABLE oldrecorded ROW_FORMAT=DYNAMIC;
ALTER TABLE people ROW_FORMAT=DYNAMIC;
ALTER TABLE phonecallhistory ROW_FORMAT=DYNAMIC;
ALTER TABLE phonedirectory ROW_FORMAT=DYNAMIC;
ALTER TABLE pidcache ROW_FORMAT=DYNAMIC;
ALTER TABLE playgroup ROW_FORMAT=DYNAMIC;
ALTER TABLE powerpriority ROW_FORMAT=DYNAMIC;
ALTER TABLE profilegroups ROW_FORMAT=DYNAMIC;
ALTER TABLE program ROW_FORMAT=DYNAMIC;
ALTER TABLE programgenres ROW_FORMAT=DYNAMIC;
ALTER TABLE programrating ROW_FORMAT=DYNAMIC;
ALTER TABLE recgrouppassword ROW_FORMAT=DYNAMIC;
ALTER TABLE recgroups ROW_FORMAT=DYNAMIC;
ALTER TABLE record ROW_FORMAT=DYNAMIC;
ALTER TABLE record_tmp ROW_FORMAT=DYNAMIC;
ALTER TABLE recorded ROW_FORMAT=DYNAMIC;
ALTER TABLE recordedartwork ROW_FORMAT=DYNAMIC;
ALTER TABLE recordedcredits ROW_FORMAT=DYNAMIC;
ALTER TABLE recordedfile ROW_FORMAT=DYNAMIC;
ALTER TABLE recordedmarkup ROW_FORMAT=DYNAMIC;
ALTER TABLE recordedprogram ROW_FORMAT=DYNAMIC;
ALTER TABLE recordedrating ROW_FORMAT=DYNAMIC;
ALTER TABLE recordedseek ROW_FORMAT=DYNAMIC;
ALTER TABLE recordfilter ROW_FORMAT=DYNAMIC;
ALTER TABLE recordingprofiles ROW_FORMAT=DYNAMIC;
ALTER TABLE recordmatch ROW_FORMAT=DYNAMIC;
ALTER TABLE scannerfile ROW_FORMAT=DYNAMIC;
ALTER TABLE scannerpath ROW_FORMAT=DYNAMIC;
ALTER TABLE schemalock ROW_FORMAT=DYNAMIC;
ALTER TABLE settings ROW_FORMAT=DYNAMIC;
ALTER TABLE storagegroup ROW_FORMAT=DYNAMIC;
ALTER TABLE tvchain ROW_FORMAT=DYNAMIC;
ALTER TABLE tvosdmenu ROW_FORMAT=DYNAMIC;
ALTER TABLE upnpmedia ROW_FORMAT=DYNAMIC;
ALTER TABLE user_permissions ROW_FORMAT=DYNAMIC;
ALTER TABLE user_sessions ROW_FORMAT=DYNAMIC;
ALTER TABLE users ROW_FORMAT=DYNAMIC;
ALTER TABLE videocast ROW_FORMAT=DYNAMIC;
ALTER TABLE videocategory ROW_FORMAT=DYNAMIC;
ALTER TABLE videocollection ROW_FORMAT=DYNAMIC;
ALTER TABLE videocountry ROW_FORMAT=DYNAMIC;
ALTER TABLE videogenre ROW_FORMAT=DYNAMIC;
ALTER TABLE videometadata ROW_FORMAT=DYNAMIC;
ALTER TABLE videometadatacast ROW_FORMAT=DYNAMIC;
ALTER TABLE videometadatacountry ROW_FORMAT=DYNAMIC;
ALTER TABLE videometadatagenre ROW_FORMAT=DYNAMIC;
ALTER TABLE videopart ROW_FORMAT=DYNAMIC;
ALTER TABLE videopathinfo ROW_FORMAT=DYNAMIC;
ALTER TABLE videosource ROW_FORMAT=DYNAMIC;
ALTER TABLE videotypes ROW_FORMAT=DYNAMIC;
ALTER TABLE weatherdatalayout ROW_FORMAT=DYNAMIC;
ALTER TABLE weatherscreens ROW_FORMAT=DYNAMIC;
ALTER TABLE weathersourcesettings ROW_FORMAT=DYNAMIC;
and then ran it like this:
mysql -umythtv -pPassword1 mythconverg < alter_tables.sql
Welcome to the February 2020 report from the Reproducible Builds project.
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 provide the ability to demonstrate these binaries originated from a particular, trusted, source release: if identical results are generated from a given source in all circumstances, reproducible builds provides the means for multiple third-parties to reach a consensus on whether a build was compromised via distributed checksum validation or some other scheme.
In this month s report, we cover:
Media coverage & upstream news A new paper on reproducible containers, Ruby updates, etc.
Distribution work More work in Debian, openSUSE & friends.
Software development Updates and improvements to our tooling.
Getting in touch How to contribute, more venues for discussion.
If you are interested in contributing to the project, please visit our Contribute page on our website.
All computation that occurs inside a DetTrace container is a pure function of the initial filesystem state of the container. Reproducible containers can be used for a variety of purposes, including replication for fault-tolerance, reproducible software builds and reproducible data analytics. We use DetTrace to achieve, in an automatic fashion, reproducibility for 12,130 Debian package builds, containing over 800 million lines of code, as well as bioinformatics and machine learning workflows.
Debian
Chris Lamb created a merge request for the core debian-installer package to allow all arguments and options from sources.list files (such as [check-valid-until=no] , etc.) in order that we can test the reproducibility of the installer images on the Reproducible Builds own testing infrastructure. (#13)
Thorsten Glaser followed-up to a bug filed against the dpkg-source component that was originally filed in late 2015 that claims that the build tool does not respect permissions when unpacking tarballs if the umask is set to 0002.
Matthew Garrett posted to the debian-devel mailing list on the topic of Producing verifiable initramfs images as part of a wider conversation on being able to trust the entire software stack on our computers.
59 reviews of Debian packages were added, 30 were updated and 42 were removed this month adding to our knowledge about identified issues. Many issue types were noticed and categorised by Chris Lamb, including:
diffoscopediffoscope is our in-depth and content-aware diff-like utility that can locate and diagnose reproducibility issues. It is run countless times a day on our testing infrastructure and is essential for identifying fixes and causes of nondeterministic behaviour.
Chris Lamb made the following changes this month, including uploading version 137 to Debian:
The sng image utility appears to return with an exit code of 1 if there are even minor errors in the file. (#950806)
Also extract classes2.dex, classes3.dex from .apk files extracted by apktool. (#88)
No need to use str.format if we are just returning the string. []
Add generalised support for ignoring returncodes [] and move special-casing of returncodes in zip to use Command.VALID_RETURNCODES. []
Other tools
disorderfs is our FUSE-based filesystem that deliberately introduces non-determinism into directory system calls in order to flush out reproducibility issues. This month, Vagrant Cascadian updated the Vcs-Git to specify the debian packaging branch. []
reprotest is our end-user tool to build same source code twice in widely differing environments and then checks the binaries produced by each build for any differences. This month, versions 0.7.13 and 0.7.14 were uploaded to Debian unstable by Holger Levsen after Vagrant Cascadian added support for GNU Guix [].
Project documentation & website
There was more work performed on our documentation and website this month. Bernhard M. Wiedemann added a Java Gradle Build Tool snippet to the SOURCE_DATE_EPOCH documentation [] and normalised various terms to unreproducible [].
Chris Lamb added a Meson.build example [] and improved the documentation for the CMake [] to the SOURCE_DATE_EPOCH documentation, replaced anyone can with anyone may as, well, not everyone has the resources, skills, time or funding to actually do what it refers to [] and improved the pre-processing for our report generation [][][][] etc.
In addition, Holger Levsen updated our news page to improve the list of reports [], added an explicit mention of the weekly news time span [] and reverted sorting of news entries to have latest on top [] and Mattia Rizzolo added Codethink as a non-fiscal sponsor [] and lastly Tianon Gravi added a Docker Images link underneath the Debian project on our Projects page [].
Upstream patches
The Reproducible Builds project detects, dissects and attempts to fix as many currently-unreproducible packages as possible. We endeavour to send all of our patches upstream where appropriate. This month, we wrote a large number of such patches, including:
Bernhard M. Wiedemann (for the openSUSE distribution):
Testing framework
We operate a fully-featured and comprehensive Jenkins-based testing framework that powers tests.reproducible-builds.org. This month, the following changes were made by Holger Levsen:
In addition, Mattia Rizzolo added an Apache web server redirect for buildinfos.debian.net [] and reverted the reshuffling of arm64 architecture builders []. The usual build node maintenance was performed by Holger Levsen, Mattia Rizzolo [][] and Vagrant Cascadian.
Getting in touch
If you are interested in contributing to the Reproducible Builds project, please visit our Contribute page on our website. However, you can get in touch with us via:
This month s report was written by Bernhard M. Wiedemann, Chris Lamb and Holger Levsen. It was subsequently reviewed by a bunch of Reproducible Builds folks on IRC and the mailing list.
Did you know that the cloud team generates daily images for buster, bullseye, and sid? They re available for download from cdimage.debian.org and are published to Amazon EC2 and Microsoft Azure. This is done both to exercise our image generation infrastructure, and also to facilitate testing of the actual images and distribution in general. I ve often found it convenient to have easy access to a clean, up-to-date, disposable virtual machine, and you might too.
Please note that these images are intended for testing purposes, and older ones may be removed at any time in order to free up various resources. You should not hardcode references to specific images in any tools or configuration.
If you re downloading an image for local use, you ll probably want one of the nocloud images. They have an empty root password (the security ramifications of this should be obvious, so please be careful!), and don t rely on any cloud service for configuration. You can use the qcow2 images with QEMU on any Linux system, or retrieve the raw images for use with another VMM.
If you want to use the images on Amazon EC2, you can identify the latest nightly build using the AWS CLI as follows:
When buster was first released back in early July of last year, the cloud team was in the process of setting up some new accounts with AWS to be used for AMI publication. For various reasons, the accounts we used for pre-buster releases were considered unsuitable for use long term, and the buster release was considered to be a good logical point to make the switch. Unfortunately, issues within the bureaucracy of both SPI/Debian and AWS delayed the complete switch to the new accounts. We have been publishing buster AMIs using a new account since September of 2019, but we have not been able to list them with the AWS Marketplace. This has reduced the visibility and discoverability of the AMIs and lead to numerous questions on the mailing lists and other forums.
I m happy to announce today that the issues blocking Marketplace publication have finally been resolved, and buster is officially available in the AWS Marketplace. Please use it, please leave us ratings and reviews in the Marketplace, and most importantly, please feel welcome to contribute to the Debian cloud team.
As always, if you d rather get the latest details from the Debian wiki, they re available, or you can query the AWS API directly, e.g. using the awscli command as follows:
Today, after many months of development, a new release of
Nikita
Noark 5 core project was finally
announced
on the project mailing list. The Nikita free software solution is
an implementation of the Norwegian archive standard Noark 5 used by
government offices in Norway. These were the changes in version 0.5
since version 0.4, see the email link above for links to a demo
site:
Updated to Noark 5 versjon 5.0 API specification.
Changed formatting of _links from [] to to match IETF draft
on JSON HAL.
Merged Registrering og Basisregistrering in version 4 to
combined Registrering.
DokumentObjekt is now subtype of ArkivEnhet.
Introducing new entity Arkivnotat.
Changed all relation keys to use /v5/ instead of /v4/.
Corrected to use new official relation keys when possible.
Renamed Sakspart to Part and connect it to Mappe, Registrering
and Dokumentbeskrivelse instead of only Saksmappe.
Moved Korrespondansepart connection from Journalpost to
Registrering.
Moved Part and Korrespondansepart from package sakarkiv to
arkivstruktur.
Renamed presedensstatus to presedensStatus.
Use new JSON content-type "application/vnd.noark5+json".
Updated prepopulated format list to use PRONOM codes.
Implemented endpoint for system information.
Implemented national identifiers for both file and record.
Implemented comments.
implemented sign off.
implemented conversion.
Improved/implemented OData search and paging support for more entities.
No longer exposes attribute Dokumentobjekt.referanseDokumentfil,
one should use the relation in _links instead.
Corrected relation keys under
https://rel.arkivverket.no/noark5/v5/api/administrasjon/, replacing
'administrasjon' with 'admin'.
Fixed several security and stability issues discovered by Coverity.
Corrected handling ETag errors, now return code 409.
Improved handling of Kryssreferanse.
Changed internal database model to use UUID/SystemID as primary keys
in tables.
Changed internal database table names to use package prefix.
Changed time zone handling for date and datetime attributes, to be
more according to the new definition in the API specification.
Change revoke-token to only drop token on POST requests, not GET.
Updated to newer Spring version.
Changed primary key and URL component for metadata code lists to
use the 'kode' value instead of a SystemID.
Corrected implementation of Part and Sakspart.
Changed instance lists with subtypes (like .../registrering/ and
.../mappe/) to include the attributes and _links entries for the
subtype in the supertype lists.
Adjusted _links relations to make it possible to figure out the
entity of an instance using the self->href->relation key lookup
method.
Fixed several end points to make sure GET, PUT, POST and DELETE
match each other.
Updated DELETE endpoints to work with UUID based entity
identifiers.
Restructured code to use more common URL related constants in entry
point values and replace @RequestMapping with method specific
annotations.
Added first unit test code.
Updated web GUI to work with the updated API.
Changed integer fields, enforce them as numeric.
Rewrote and simplify metadata handling to use common service and
controller code instead of duplicating for each type.
Implemented the remaining metadata types.
Changed Country list source from Wikipedia to Debian iso-codes and
updated the list of Countries.
I've been managing my UNIX $HOME repository with version control
for almost two decades now (first under CVS, then with git). Once in a
while, I find a little hack to make this work better.
Today, it's dconf/gsettings, or more specifically,
Workrave that I want to put in git. I noticed my laptop was
extremely annoying compared with my office workstation and realized
I never figured out how to write Workrave's configuration to git. The
reason is that its configuration is stored in dconf, a binary database
format, but, blissfully, I had forgotten about this and tried to
figure out where the heck its config was.
I was about to give up when I re-remembered this, when I figured I
would just do a quick search ("dconf commit to git") and that brought
me to Josh Triplett's Debconf 14 talk about this exact topic. The
slides are... a little terse, but I could figure out the gist of
it. The key is to change the DCONF_PROFILE environment to point to a
new config file (say in your .bashrc):
export DCONF_PROFILE=$HOME/.config/dconf/profile
That file (~/.config/dconf/profile) should be created with the
following content:
user-db:user
service-db:keyfile/user
The first line is the default: store everything in this huge
binary file.
The second is the magic: it stores configuration in a precious
text file, in .config/dconf/user.txt specifically.
Then the last step was to migrate config between the two. For that I
need a third config file, a DCONF_PROFILE that has only the text
database so settings are forcibly written there, say
~/.config/dconf/profile-edit:
service-db:keyfile/user
And then I can migrate my workrave configuration with:
gsettings list-recursively org.workrave while read schema key val ; do DCONF_PROFILE=~/.config/dconf/profile-edit gsettings set "$schema" "$key" "$val" ; done
Of course, a bunch of those settings are garbage and do not differ
from the default. Unfortuantely, there doesn't seem to be a way to
tell gsettings to only list non-default settings, so I had to do
things by hand from there, by comparing my generated config with:
That's a nice setup: "YOLO" settings end up in the binary database
that I don't care about tracking in git, and a precious few snowflakes
get tracked in a text file. Triplett also made a command to change
settings in the text file, but I don't think I need to bother with
that. It's more critical to copy settings between the two, in my
experience, as I rarely have this moment: "oh I know exactly the key
setting I want to change and i'll write it down". What actually
happens is that I'm making a change in a GUI and later realize it
should be synchronized over.
(It looks like Triplett does have a tool to do those diffs and
transitions, but unfortunately git://joshtriplett.org/git/home
doesn't respond at this time so I can't find that source code.)
(Update: that git repository can be downloaded with:
git clone https://joshtriplett.org/git/home
It looks like dconfc is designed to copy settings between the two
databases. So my above loop would be more easily written as:
Certainly simplifies things. dconfd is also nice although it relies
on the above dconfe script which makes it (IMHO) needlessly hard to
deploy.)
Now if only Firefox bookmarks were reasonable again...
L approche de programmation dynamique est souvent associ e au remplissage d un tableau deux dimensions et l' criture explicite de ce proc d sous forme it rative. Dans un langage fonctionnel comme Haskell, on b n ficie de quelques avantages d expressivit de haut niveau et de lisibilit qu on ne retrouve pas autrement.
Dans cet article, je commence par explorer deux exemples triviaux de programmation dynamique. Ensuite, je passe sur un probl me tout aussi accessible, mais dont l ach vement optimal demandera l utilisation d une structure Data.
Sealioning (also spelled sea-lioning and sea lioning) is a type of trolling or harassment which consists of pursuing people with persistent requests for evidence or repeated questions, while maintaining a pretense of civility and sincerity.[1][2][3][4] It may take the form of "incessant, bad-faith invitations to engage in debate".[5]
Tone policing (also tone trolling, tone argument, and tone fallacy) is an ad hominem (personal attack) and antidebate tactic based on criticizing a person for expressing emotion. Tone policing detracts from the validity of a statement by attacking the tone in which it was presented rather than the message itself.
"A brawler who tattoos a message onto his knuckles does not throw every
punch with the weight of First Amendment protection behind him," the
brief stated. "Conduct like this does not constitute speech, nor should
it. A deliberate attempt to cause physical injury to someone does not
come close to the expression which the First Amendment is designed to
protect."
It s no secret that times are changing. It used to be that men were men,
jokes were jokes, and all facts came from one white guy in a suit who you trusted
because he looked like your dad. Now I know I could get in a lot of trouble for
just saying this, but I don t care because someone has to tell the truth: These
days, you can t say anything racist at all without being called a racist.
So, I wrote my BIFF Response but Marvin wrote me another angry email.
Actually, he wrote 6 more this week, so what s up with that? Why didn t
he stop after my first email?
The BIFF Response Method will teach you how to respond to angry emails, texts, or social media posts while maintaining your dignity and personal power.
Map of conflict
I've been practising Non-Violent Communication (NVC) for several years. It helps me to better understand my feelings and needs. The concepts of NVC can also help to look at conflicts. I would like to introduce a way to look at conflict using the basic concepts of NVC:
Humans have needs. (I would add that this applies to other sentient beings, too).
It's okay to have needs.
When needs are satisfied, we experience pleasant feelings (joy, love, happiness, etc.).
When needs are unsatisfied, we experience unpleasant feelings (sadness, anger, grief, etc.)
To satisfy our needs, we employ strategies. (Example. Need = well-being. Possible strategies = sauna, sleeping, walk in nature, etc.)
When conflict occurs between two parties, it's not the needs that conflict, but the strategies that are employed to satisfy the needs.
An example.
May has issues doing all the work they're supposed to do and seeks to talk
to their manager about it. The manager repeatedly refuses to receive them, as
the manager is very busy. May had the hope to be able to sort their issues out
with the manager but now they feel frustrated, and helpless, on top of feeling
stressed out. Week after week, May tries to get in touch with the manager, as
they don't know how to solve their issue alone. But as their demands become
more pressing, the manager starts to feel annoyed, tense, and insecure, and
keeps ignoring May's requests.
May's needs: communication, cooperation, being understood, being seen, autonomy.
Manager's needs: efficacy, independence, respect, autonomy.
Both their needs are legit. Some of them even overlap.
The conflict occurs at the level of their strategies: the manager makes the
conscious decision to deny May's discussion requests, effectively denying them
to voice their concerns and worries, which makes May feel helpless, frustrated,
and angry. When May chooses to make their demands more explicit, the manager
starts to feel more and more insecure.
Working on our strategies
There are always different strategies to satisfy our needs. Out of habit, we
sometimes fail to see them, and keep using the ever same strategies. How could
May deal with the situation differently?
May could request a meeting through written communication, and possibly
set a deadline date by which May will drop certain tasks from their
impossible todo list.
May could escalate the conflict to the manager's superior.
May could talk to one or more colleagues and ask them for advice.
May could talk to the works council.
May could try to challenge their beliefs: apparently May thinks that
they cannot make a decision without first talking to their manager.
This is very hard, but if May succeeds in noticing this belief, they
can ask themselves: Is this true? Why do I believe this? Can't I make this
important decision myself? Should I just do it? And eventually inform the
manager by email?
When we are aware of the need strategies dynamics, we can work on strategies without
compromising our needs. When we are not, we are running in circles, effectively
worsening the situation.
The manager could also employ different strategies as they start noticing
that they are feeling tense and insecure. Which ones could that be? There are
also inappropriate strategies, and if not aware, the manager could well end up
employing one of those:
Continue to ignore May's request
Telling May off
Suppress their unpleasant feelings to get on with work
Sharing unpleasant feelings with other colleagues, but not discussing the situation with May
What would be appropriate strategies for the manager?
Transforming organizations
Working on strategies is a good first step. But generally the emotional work
effectively lies on the shoulders of the individual with lower rank in the
organization who lacks control and corresponding privileges
to deal with the conflict.
I believe that when conflict occurs in the workplace, it is important to
draw further conclusions that would benefit the organization as a whole. In the
above example, such conclusions could be:
Make regular 1-to-1 discussions between manager and managed compulsory
Set up regular feedback processes within the organization
Assess the lack of autonomy experienced by May
Assess existing decision making processes and why they fail
Make it clear who is accountable to whom
Establish an organization wide mechanism that allows employees to seek advice, for example by talking to a colleague, within their paid work time
Institute a works council
Create a better climate for cooperation
These are just some ideas for a fictitious conflict, but you get the idea.
Conflicts effectively are chances for the organization, or the involved parties, to grow in maturity.
More about working with conflict and conflict mapping tools in this great publication.
rejected
amd64-microcode (not a screenshot),
surgescript (unrelated UI not in Debian),
ardesia (unrelated web browser screenshot),
debian-el (unrelated desktop screenshot)
rejected deletion of
netanim/fonts-monapo/holdingnuts (spam reason),
ekiga (English screenshots are kept)
Administration
Debian wiki:
deploy changes,
unblock IP addresses,
approve new accounts,
auto-approve email domains
Here's what happened in the Reproducible
Builds effort between Sunday November 5 and
Saturday November 11 2017:
Upcoming events
On November 17th Chris Lamb will present at Open Compliance
Summit,
Yokohama, Japan on how reproducible builds ensures the long-term sustainability
of technology infrastructure.
We plan to hold an assembly at
34C3
- hope to see you there!
LEDE CI tests
Thanks to the work of lynxis, Mattia and h01ger, we're now testing all LEDE
packages in our setup. This is our first result for the ar71xx
target: "502
(100.0%) out of 502 built images and 4932 (94.8%) out of 5200 built packages
were reproducible in our test setup." - see below for details how this was
achieved.
Bootstrapping and Diverse Double Compilation
As a follow-up of a discussion on bootstrapping compilers we had on the Berlin
summit, Bernhard
and Ximin worked on a Proof of Concept for Diverse Double Compilation of tinycc
(aka tcc).
Ximin Luo did a successful diverse-double compilation of
tinycc git HEAD using gcc-7.2.0,
clang-4.0.1, icc-18.0.0 and pgcc-17.10-0 (pgcc needs to triple-compile it).
More variations are planned for the future, with the eventual aim to reproduce
the same binaries cross-distro, and extend it to test GCC itself.
Packages reviewed and fixed, and bugs filed
Patches filed upstream:
i4l-base (merged) -
Uninitialized memory written to output.
Reviews of unreproducible packages
73 package reviews have been added, 88 have been updated and 40 have been removed in this week,
adding to our knowledge about identified issues.
4 issue types have been updated:
reproducible archlinux: don't use hidden files for the package lists
reproducible fedora: don't use hidden files for the package lists
udd-query: move from public-udd-mirror.xvm.mit.edu to udd-mirror.debian.net
udd-query: remove the temporary file with a trap in case this script is called with the wrong argument, and in case of failures, etc, the temporary file would be left around otherwise
reproducible debian: schroot-create: drop the reproducible gpg keyring into /etc/apt/trusted.gpg.d/ instead of using apt-key add
reproducible debian: setup_pbuilder: drop the reproducible gpg keyring into /etc/apt/trusted.gpg.d/ instead of using apt-key add
reprodocible debian: setup_pbuilder: stop installing gnupg2 in our chroot, not needed anymore now
Mattia also merged and deployed some commits from others this week.
Alexander 'lynxis' Couzens
reproducible_lede: use correct place/variable to save results: Results on remote nodes are expected to be under $TMPDIR, which defined by openwrt_build. RESULTSDIR is undefined on the remote node
reproducible_lede: enable building all packages again, after it was disabled to improve the debug speed.
reproducible_lede: correct given path for node_cleanup_tmpdirs & node_save_logs-
reproducible_lede: enable CONFIG_BUILDBOT to reduce inodes while building.
kpcyrd:
reproducible-archlinux: try porting abs to asp
reproducible-archlinux: explicitly sync packages
reproducible-archlinux: use sudo for pacman
Hans-Christoph Steiner:
reproducible fdroid: point jenkins to canonical URL
reproducible_fdroid: separate testsuite into its own job
reproducible fdroid: sync upstream script names with jenkins.debian.net, make things self-documenting by reusing the same names everywhere.
reproducible_fdroid_test: make script executable
Chris Lamb:
Move some IRC announcements to #debian-reproducible-changes.
Holger Levsen:
reproducible LEDE: try to deal gracefully with problems and report
as usual, Holger merged many of the above commits and deployed them.
Misc.
This week's edition was written by Ximin Luo, Bernhard M. Wiedemann, Chris Lamb
and Holger Levsen & reviewed by a bunch of Reproducible Builds folks on IRC &
the mailing lists.
I attended the MiniDebconf in Toulouse, which was hosted in the larger
Capitole du Libre, a free software event with talks, presentation of
associations, and a keysigning party. I didn't expect the event to be
that big, and I was very impressed by its organization. Cheers to all
the volunteers, it has been an amazing week-end!
Here's a sum-up of the talks I attended.
Du logiciel libre la monnaie libre
Speaker: lo s
The first talk I attended was, translated to English, "from free
software to free money".
lo s compared the 4 freedoms of free software with money, and what
properties money needs to exhibit in order to be considered free. He
then introduced 1, a project of free (as in free speech!) money,
started in the region around Toulouse. Contrary to some distributed
ledgers such as Bitcoin, 1 isn't based on an hash-based
proof-of-work, but rather around a web of trust of people certifying
each other, hence limiting the energy consumption required by the
network to function.
YunoHost
Speaker: Jimmy Monin
I then attended a presentation of YunoHost. Being an happy user
myself, it was very nice to discover the future expected features, and
also meet two of the developers. YunoHost is a Debian-based project,
aimed at providing all the tools necessary to self-host applications,
including email, website, calendar, development tools, and dozens of
other packages.
Premiers pas dans l'univers de Debian
Speaker: Nicolas Dandrimont
For the first talk of the MiniDebConf, Nicolas Dandrimont introduced
Debian, its philosophy, and how it works with regards to upstreams and
downstreams. He gave many details on the teams, the infrastructure,
and the internals of Debian.
Trusting your computer and system
Speaker: Jonas Smedegaard
Jonas introduced some security concepts, and how they are abused and
often meaningless (to quote his own words, "secure is bullshit"). He
described a few projects which lean towards a more secure and open
hardware, for both phones and laptops.
Automatiser la gestion de configuration de Debian avec Ansible
Speaker: J r my Lecour
J r my, from Evolix, introduced Ansible, and how they use it to manage
hundreds of Debian servers. Ansible is a very powerful tool, and a
huge ecosystem, in many ways similar to Puppet or Chef, except it is
agent-less, using only ssh connections to communicate with remote
machines. Very nice to compare their use of Ansible with mine, since
that's the software I use at work for deploying experiments.
Making Debian for everybody
Speaker: Samuel Thibault
Samuel gave a talk about accessibility, and the general availability
of the tools in today's operating systems, including Debian. The
lesson to take home is that we often don't do enough in this domain,
particularly when considering some issues people might have that we
don't always think about. Accessibility on computers (and elsewhere)
should be the default, and never require complex setups.
Retour d'exp rience : mise jour de milliers de terminaux Debian
Speaker: Cyril Brulebois
Cyril described a problem he was hired for, an update of thousands of
Debian servers from wheezy to jessie, which he discovered afterwards
was worse than initially thought, since the machines were running the
out-of-date squeeze. Since they were not always administered with the
best sysadmin practices, they were all exhibiting different
configurations and different packages lists, which raised many issues
and gave him interesting challenges. They were solved using Ansible,
which also had the effect of standardizing their system administration
practices.
Retour d'exp rience : utilisation de Debian chez Evolix
Speaker: Gr gory Colpart
Gr gory described Evolix, a company which manages servers for their
clients, and how they were inspired by Debian, for both their internal
tools and their practices. It is very interesting to see that some of
the Debian values can be easily exported for a more open and
collaborative business.
Lightning talks
To close the conference, two lightning talks were presented,
describing the switch from Windows XP to Debian in an ecologic
association near Toulouse; and how snapshot.debian.org can be used
with bisections to find the source of some regressions.
Conclusion
A big thank you to all the organizers and the associations who
contributed to make this event a success. Cheers!
Like each month, here comes a report about the work of paid contributors to Debian LTS.
Individual reports
In October, about 197 work hours have been dispatched among 13 paid contributors. Their reports are available:
Antoine Beaupr did 21h (out of 16h allocated + 8.75h remaining, thus keeping 3.75h for November).
Ben Hutchings did 20 hours (out of 15h allocated + 9 extra hours, thus keeping 4 extra hours for November).
Lucas Kanashiro did 2 hours (out of 5h allocated, thus keeping 3 hours for November).
Markus Koschany did 19 hours (out of 20.75h allocated, thus keeping 1.75 extra hours for November).
Ola Lundqvist did 7.5h (out of 7h allocated + 0.5 extra hours).
Rapha l Hertzog did 13.5 hours (out of 12h allocated + 1.5 extra hours).
Roberto C. Sanchez did 11 hours (out of 20.75 hours allocated + 14.75 hours remaining, thus keeping 24.50 extra hours for November, he will give back remaining hours at the end of the month).
Evolution of the situation
The number of sponsored hours increased slightly to 183 hours per month. With the increasing number of security issues to deal with, and with the number of open issues not really going down, I decided to bump the funding target to what amounts to 1.5 full-time position.
The security tracker currently lists 50 packages with a known CVE and the dla-needed.txt file 36 (we re a bit behind in CVE triaging apparently).
Thanks to our sponsors
New sponsors are in bold.
I ve been using Kitten
Block for
years, since I don t really need the blood pressure spike caused by
accidentally following links to certain UK newspapers. Unfortunately it
hasn t been ported to Firefox 57. I tried emailing the author a couple of
months ago, but my email bounced.
However, if your primary goal is just to block the websites in question
rather than seeing kitten pictures as such (let s face it, the internet is
not short of alternative sources of kitten pictures), then it s easy to do
with uBlock
Origin.
After installing the extension if necessary, go to Tools Add-ons
Extensions uBlock Origin Preferences My filters, and add
www.dailymail.co.uk and www.express.co.uk, each on its own line. (Of
course you can easily add more if you like.) Voil : instant tranquility.
Incidentally, this also works fine on Android. The fact that it was easy to
install a good ad blocker without having to mess about with a rooted device
or strange proxy settings was the main reason I switched to Firefox on my phone.
Tom Mackee's family has fallen apart. The impetus was the death of his
uncle Joe in the London tube terrorist bombings, but that was only the
start. He destroyed his chances with the only woman he really loved. His
father's drinking got out of control, his mother left with his younger
sister to live in a different city, and he refused to go with them and
abandon his father. But then, six months later, his father abandoned him
anyway. As this novel opens, Tom collapses while performing a music set,
high on drugs and no sleep, and wakes up to discover his roommates have
been fired from their jobs for stealing, and in turn have thrown him out
of their apartment. He's at rock bottom.
The one place he can turn for a place to stay is his aunt Georgie, the
second (although less frequent) viewpoint character of this book. She was
the one who took the trip to the UK to try to find out what happened and
retrieve her brother's body, and the one who had to return to Australia
with nothing. Her life isn't in much better shape than Tom's. She's kept
her job, but she's pregnant by her ex-boyfriend but barely talking to him,
since he now has a son by another woman he met during their separation.
And she's not even remotely over her grief.
The whole Finch/Mackee family is, in short, a disaster. But they have a
few family relationships left that haven't broken, some underlying basic
decency, and some patient and determined friends.
I should warn up-front, despite having read this book without knowing
this, that this is a sequel to Saving Francesca, set five years
later and focusing on secondary characters from the original novel. I've
subsequently read that book as well, though, and I don't think reading it
first is necessary. This is one of the rare books where being a sequel
made it a better stand-alone novel. I never felt a gap of missing story,
just a rich and deep background of friendships and previous relationships
that felt realistic. People are embedded in networks of relationships
even when they feel the most alone, and I really enjoyed seeing that
surface in this book. All those patterns from Tom's past didn't feel like
information I was missing. They felt like glimpses of what you'd see if
you looked into any other person's life.
The plot summary above might make The Piper's Son sound like a
depressing drama fest, but Marchetta made an excellent writing decision:
the worst of this has already happened before the start of the book, and
the rest is in the first chapter. This is not at all a book about
horrible things happening to people. It's a book about healing. An
authentic, prickly, angry healing that doesn't forget and doesn't turn
into simple happily-ever-after stories, but does involve a lot of
recognition that one has been an ass, and that it's possible to be less of
an ass in the future, and maybe some things can be fixed.
A plot summary might fool you into thinking that this is a book about a
boy and his father, or about dealing with a drunk you still love. It's
not. The bright current under this whole story is not father-son bonding.
It's female friendships. Marchetta pulls off a beautiful double-story,
writing a book that's about Tom, and Georgie, and the layered guilt and
tragedy of the Finch/Mackee family, but whose emotional heart is their
friends. Francesca, Justine, absent Siobhan. Georgie's friend Lucia.
Ned, the cook, and his interactions with Tom's friends. And Tara Finke,
also mostly absent, but perfectly written into the story in letters and
phone calls.
Marchetta never calls unnecessary attention to this, keeping the camera on
Tom and Georgie, but the process of reading this book is a dawning
realization of just how much work friendship is doing under the surface,
how much back-channel conversation is happening off the page, and how much
careful and thoughtful and determined work went into providing Tom a
floor, a place to get his feet under him, and enough of a shove for him to
pull himself together. Pulling that off requires a deft and subtle
authorial touch, and I'm in awe at how well it worked.
This is a beautifully written novel. Marchetta never belabors an
emotional point, sticking with a clear and spare description of actions
and thoughts, with just the right sentences scattered here and there to
expose the character's emotions. Tom's family is awful at communication,
which is much of the reason why they start the book in the situation
they're in, but Marchetta somehow manages to write that in a way that
didn't just frustrate me or make me want to start banging their heads
together. She somehow conveys the extent to which they're trying,
even when they're failing, and adds just the right descriptions so that
the reader can follow the wordless messages they send each other even when
they can't manage to talk directly. I usually find it very hard to
connect with people who can only communicate by doing things rather than
saying them. It's a high compliment to the author that I felt I
understood Tom and his family as well as I did.
One bit of warning: while this is not a story of a grand reunion with an
alcoholic father where all is forgiven because family, thank heavens,
there is an occasional wiggle in that direction. There is also a steady
background assumption that one should always try to repair family
relationships, and a few tangential notes about the Finches and Mackees
that made me think there was a bit more abuse here than anyone involved
wants to admit. I don't think the book is trying to make apologies for
this, and instead is trying to walk the fine line of talking about
realistically messed up families, but I also don't have a strong personal
reaction to that type of story. If you have an aversion to "we should all
get along because faaaaamily" stories, you may want to skip this book, or
at least go in pre-warned.
That aside, the biggest challenge I had in reading this book was not
breaking into tears. The emotional arc is just about perfect. Tom and
Georgie never stay stuck in the same emotional cycle for too long,
Marchetta does a wonderful job showing irritating characters from a
slightly different angle and having them become much less irritating, and
the interactions between Tom, Tara, and Francesca are just perfect. I
don't remember reading another book that so beautifully captures that
sensation of knowing that you've been a total ass, knowing that you need
to stop, but realizing just how much work you're going to have to do, and
how hard that work will be, once you own up to how much you fucked up.
That point where you keep being an ass for a few moments longer, because
stopping is going to hurt so much, but end up stopping anyway because you
can't stand yourself any more. And stopping and making amends is hard and
hurts badly, and yet somehow isn't quite as bad as you thought it was
going to be.
This is really great stuff.
One final complaint, though: what is it with mainstream fiction and
the total lack of denouement? I don't read very much mainstream fiction,
but this is the second really good mainstream book I've read (after
The Death of Bees) that hits its climax
and then unceremoniously dumps the reader on the ground and disappears.
Come back here! I wasn't done with these people! I don't need a long
happily-ever-after story, but give me at least a handful of pages to be
happy with the characters after crying with them for hours! ARGH.
But, that aside, the reader does get that climax, and it's note-perfect to
the rest of the book. Everyone is still themselves, no one gets suddenly
transformed, and yet everything is... better. It's the kind of book you
can trust.
Highly, highly recommended.
Rating: 9 out of 10
I'm taking the month of November off work, so that I can exclusively take care of our child. Despite it being a difficult time, with him teething, it has been a great half-month so far.
During the course of the month I've found my interest in a lot of technological things waning, so I've killed my account(s) on a few platforms, and scaled back others - if I could exclusively do child-care for the next 20 years I'd be very happy, but sadly I don't think that is terribly realistic.
My interest in things hasn't entirely vanished though, to the extent that I found the time to replace my use of etcd with consul yesterday, and I'm trying to work out how to simplify my hosting setup. Right now I have a bunch of servers doing two kinds of web-hosting:
Although I did recode my blogspam-detector in golang, and that's performing very well.
Hosting static-sites is trivial, whether with a virtual machine, via Amazons' S3-service, or some other static-host such as netlify.
Hosting for "dynamic stuff" is harder. These days a trend for "serverless" deployments allows you to react to events and be dynamic, but not everything can be a short-lived piece of ruby/javascript/lambda. It feels like I could setup a generic platform for launching containers, or otherwise modernising FastCGI, etc, but I'm not sure what the point would be. (I'd still be the person maintaining it, and it'd still be a hassle. I've zero interest in selling things to people, as that only means more support.)
In short I have a bunch of servers, they mostly tick over unattended, but I'm not really sure I want to keep them running for the next 10+ years. Over time our child will deserve, demand, and require more attention which means time for personal stuff is only going to diminish.
Simplify things now wouldn't be a bad thing to do, before it is too late.