Planet Grep

Planet'ing Belgian FLOSS people

Planet Grep is maintained by Wouter Verhelst. All times are in UTC.

September 24, 2020

I published the following diary on isc.sans.edu: “Party in Ibiza with PowerShell“:

Today, I would like to talk about PowerShell ISE or “Integration Scripting Environment”. This tool is installed by default on all Windows computers (besides the classic PowerShell interpreter). From a malware analysis point of view, ISE offers a key feature: an interactive debugger! It provides all the classic features that you can expect from a debugger: breakpoints, step in, step over, step out, … all of these features are available while you keep control of the environment to interact with the script through the help of other PowerShell commands. When you’re facing a strongly obfuscated scripts, you could speed up the analysis with the help of carefully placed breakpoints… [Read more]

The post [SANS ISC] Party in Ibiza with PowerShell appeared first on /dev/random.

September 23, 2020

I published the following diary on isc.sans.edu: “Malicious Word Document with Dynamic Content“:

Here is another malicious Word document that I spotted while hunting. “Another one?” may ask some of our readers. Indeed but malicious documents remain a very common infection vector and you learn a lot when you analyze them. I was recently asked to talk about Powershell (de)obfuscation techniques. When you’re dealing with an incident in a corporate environment, you don’t have time to investigate in deep. The incident must be resolved as soon as possible because the business must go on and a classic sandbox analysis is performed to get the feedback: It’s malicious or not… [Read more]

The post [SANS ISC] Malicious Word Document with Dynamic Content appeared first on /dev/random.

September 22, 2020

Quelques liens en vrac que vous pouvez lire sans vous connecter aux réseaux sociaux.

RSS, mailing-list et réseaux sociaux

J’ai posté un article expliquant comment les réseaux sociaux nous faisaient croire que nous avions une audience alors que c’était l’inverse. Un paradigme que j’avais déjà dénoncé lorsque j’avais découvert des messages envoyés sur mon compte Facebook plusieurs années auparavant. J’ai déjà également dénoncé le faux impact publicitaire sur les réseaux sociaux. Il s’avère que les publicités sont très souvent des arnaques. Notamment cette histoire d’un spécialiste de l’e-commerce qui a vu son compte dépenser 4000$ en publicités facebook pour du matériel vietnamien.

Le professeur de droit Eric Posner attire d’ailleurs l’attention sur la dangerosité de se créer un profil Twitter pour se créer une réputation, arguant que la seule réputation qu’on se fait est celle de faire des petites phrases courtes.

Il s’avère que, à l’exception des gens qui vivent des réseaux sociaux, je reçois un nombre incalculable de réactions qui me confortent dans cette idée que Facebook éloigne au lieu de rapprocher, qui avouent avoir perdu contact avec mon blog suite aux réseaux sociaux, n’avoir découvert que très tard la campagne Ulule Printeurs (jusque demain !), notamment grâce à Sebsauvage. Je constate également un retour en grâce du RSS et des mailing-listes, notamment les mailing-listes payantes via Substack.

Dimitri Regnier a fait une courte comparaison des solutions de mailing-list :

D’ailleurs, je vous invite à vous inscrire à la mienne ou à me suivre via RSS. je m’engage à ce que les contenus soient identiques.

Des bienfaits de la lecture

J’en ai déjà parlé mais la lecture, la vraie dans un livre, est une vraie gymnastique du cerveau. Pour entretenir son cerveau, il faut lire tous les jours. Le top du top ? Lire de la fiction ! En lisant de la fiction, vous activez toutes les aires de votre cerveau. Votre cerveau vit littéralement l’histoire, crée des souvenirs, des expériences, des apprentissages, des nouvelles connexions. Bref, lisez plus de fiction ! (Ça tombe bien, y’a justement un très bon roman de science-fiction à commander, je ne vous l’ai pas déjà dit ?)

Je rêve toujours de créer un réseau de lecture décentralisé, directement accessible depuis une liseuse e-ink. Les idées fusent dans le domaine comme cette proposition de GoodReads décentralisé :

Politique et Covid

J’aime beaucoup François De Smet. Un philosophe entré en politique, ça hausse un peu le niveau, ça fait plaisir à lire. Il signe ici un court, mais percutant éditorial sur le port des signes religieux.

D’ailleurs, on se plaint beaucoup de nos politiques et même s’ils ne font que le quart du tiers de ce qu’ils promettent, il faut souligner la chance de vivre dans une Europe où la présidente tient un discours sur l’importance de l’écologie, de l’accueil de l’autre, du respect de la différence et du soutien à la science. D’accord, ce ne sont que des mots mais, dans d’autres parties du monde (suivez mon regard), même les mots sont effroyables.

Cela fait plusieurs semaines que j’annonce que si l’épidémie de grippe traditionnelle est virulente cet hiver, on saura que toutes nos mesures, nos masques, nos distanciations, nos gels sont de la poudre aux yeux. Sauf que la saison de la grippe, c’est maintenant dans l’hémisphère sud. Et que la grippe saisonnière est… 200x moins importante que d’habitude. Du jamais vu.

En supersimplifiant, cela signifie que toutes les mesures que l’on prend et qui nous embêtent sont efficaces. Vous avez 200x moins de chance d’attraper le covid avec les mesures actuelles que sans. 200x moins de chances d’être hospitalisé Le masque m’ennuie beaucoup mais les mesures fonctionnent ! Après, il faudra se poser les questions de l’impact psychologique…

Absurdité académique

J’ai beaucoup glosé sur l’absurdité administrative des universités. J’ai écrit un essai sur le sujet, mais rien ne vaut The Utopia of Rules, du très regretté David Graeber (je ne fais pas à l’idée qu’il soit mort…)

Il s’avère que je ne suis pas le seul. Voici le témoignage d’un excellent cryptographe qui a préféré monter sa boîte pour travailler aux sujets qui l’intéressaient car les comités chargés de lui accorder une bourse ne savaient pas de quoi il parlait. Comme il le dit lui-même, si on lui avait donné une bourse de 5 ans pour faire de la recherche et montrer au bout de 5 ans son travail, il aurait signé à deux mains. Mais plutôt que faire des rapports et devoir justifier le temps passé, il a préféré trouver une autre voie. Ce qui en dit long sur « l’élite intellectuelle » qui reste dans nos universités. Ce ne sont pas les meilleurs cerveaux, ce sont les meilleurs bureaucrates…

Écologie

Le plastique est majoritairement non-recyclable. La frénésie du recyclage du plastique serait une action du lobby pétrolier avec deux objectifs : premièrement nous faire croire que le plastique est écolo et, deuxièmement, rejeter la faute de la pollution plastique sur les particuliers qui « ne recyclent pas ». Ce qu’on vit avec le plastique est similaire à ce qu’on a vécu avec la cigarette il y’a 50 ans.

Un article incroyablement intéressant sur la culture des forêts en taillis (« coppicing ») et sur la relation entre l’homme et son environnement. Avec cette équation magnifique de simplicité : jusqu’au 19ème siècle, tout bois de chauffage était cultivé dans les 15km de son utilisation. Au-dessus de cette distance, l’énergie nécessaire au transport est supérieure à l’énergie fournie par le bois. Le pétrole a rompu les équilibres.

Paranormal

Carrie Poppy a un jour habité dans une maison hantée : sensation étrange, bruits bizarres. Elle s’est renseignée et, aujourd’hui, elle enquête sur les phénomènes paranormaux. Elle aimerait nous dire que, dans 9 cas sur 10, la science triomphe et qu’une explication simple et rationnelle est trouvée. Ce n’est pas le cas. C’est dans 10 cas sur 10. Mais l’explication rationelle de sa maison hantée est encore plus terrifiante qu’un fantôme !

Tour de France

Je viens de finir « Socrate à vélo », écrit par Guillaume Martin, brillant 11ème du dernier tour de France. Lecture amusante pour qui aime la philosophie et le vélo. Avec mon fils de 3 ans, on a pris l’habitude de regarder ensemble les derniers kilomètres de chaque étape. Il adore Guillaume Martin car, comme papa, « il écrit des livres et fait du vélo ». Il tente de le trouver dans le peloton sur l’écran. Il m’a demandé plusieurs fois pourquoi je n’étais pas dans la course. J’ai beau lui expliquer que ce sont les meilleurs du monde, il ne comprend pas que je n’en fasse pas partie (c’est flatteur !). Mais, durant la dernière semaine, son préféré, c’était Pogacar. « Ça c’est le livre de Guillaume Martin et moi je suis… Pogacaaaar ! ». Personnellement, je soutenais Roglic. À 3 ans, il a déjà de meilleurs pronostics que moi…

Écriture

Il vous reste 33h pour commander, si ce n’est pas encore fait, votre exemplaire de Printeurs. C’est incroyablement important pour moi parce qu’on est aux portes des 450 exemplaires, ce qui signifierait un contrat automatique pour un tome 2, tome 2 que vous pourriez choisir de recevoir durant son écriture, un épisode par semaine. Vos réactions pourraient même influencer l’histoire ! Du coup, je suis en train de réfléchir à l’histoire. Et j’ai même proposé au « chef de l’Internet » d’y jouer son propre rôle.

Bref, chaque exemplaire compte ! (et si votre escarcelle s’y refuse, contactez-moi pour un roman suspendu)

Photo by Patrick Tomasso on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

September 18, 2020

The PinePhone, powered by Linux

A few days ago my PinePhone arrived. It came with postmarketOS, which is based on Alpine Linux. By default it has a fairly limited set of apps. And if you look in the application manager, there are not many apps available to install either. With apk, Alpine's package manager, you can install a lot of other software. I installed Firefox this way, it seems to work, but you often need to zoom out to 50% to get the whole website on the screen.

But what I find most impressive is how this low-cost Linux phone has garnered extensive support from all major mobile Linux distributions. Who would have thought a few years ago that 'distro hopping' on a phone would be a thing?

Trying out some Linux distributions on the PinePhone

The easiest way to explore a lot of the supported distributions is the PinePhone multi-distro demo image, which is a 5 GB image with 13 distributions and a neat bootloader, p-boot.

The bootloader p-boot, here with 13 Linux distributions for the PinePhone

So installed the multi-distro demo image on a spare microSD card with USBImager, resized the partition to the microSD card's full size and then I have been trying all 13 distributions for the last few days. These are my notes for the 2020-09-14 version of the image, not in any way systematic or complete: 1

Arch Linux

Boots into a command line. I don't even see a virtual keyboard appearing to log in. This is not what I expect from a phone, but it's very understandable coming from the Arch Linux philosophy :-)

LuneOS

Has a bit more apps installed by default: maps, email, a PDF viewer, ... The maps app uses Google Maps data, but it doesn't work. I can't find general settings. It seems somewhat limited and basic things such as rebooting or shutting down don't work. LuneOS is based on webOS.

Maemo Leste

Boots into landscape mode, and I can't find how to change it to portrait mode. It has Vim and Htop installed by default, but they crash. There's no browser installed by default. It has an app manager, but it doesn't have a lot of apps available to install. The settings are fairly limited. The virtual keyboard is barely usable. Maemo Leste is the successor of Nokia's Maemo and it's currently an ARM64 port of Devuan (Debian without systemd).

Mobian

Has a good set of default apps. It has both Web and Firefox installed as web browsers. There's a To Do app, Processor usage, Telegram (the Desktop version), Maps (using OpenStreetMap), Geary for email. There's also an Authenticator app, but it doesn't show anything. There's no terminal installed by default. 2 Software shows a lot of apps, and you get access to a lot of GNOME settings, including accounts, for instance to set up your email account (Geary uses the accounts you have set up here). It definitely feels Linux-like, but at the same time feels like a real mobile operating system. It's essentially just Debian for ARM64 with the Phosh user interface developed by Purism for the Librem 5, and it works surprisingly well.

KDE Neon

Looks nice, there are but not many apps installed. I'm more familiar with the GNOME world, so I feel a bit lost here. There's Spacebar (to chat), Koko (music), Okular (document viewer), Konsole. Contrary to all other distributions I tried, there's a screenshot app in the drawer. But how does it work? I don't think I will get used to the Plasma Mobile interface. So while it looks like a perfectly usable system, it's not for me.

postmarketOS with fbkeyboard

Boots into a command line. The virtual keyboard needed to log in is quite usable, but this is not what I expect from a phone.

postmarketOS with GNOME

I hear a high-pitched sound when the PinePhone boots into the graphical environment. The virtual keyboard has awkwardly small buttons. There's a terminal installed. But the apps are not easy to access: if you open the application drawer, the icons suddenly fly off the screen, so the only way to start the apps is by typing an app's name in the search box. There are a lot of GNOME settings. However, the system doesn't seem to be adapted to a mobile screen: windows are shown only partially, even the GNOME initial setup window. All in all, this is not very usable in this state.

postmarketOS with Phosh

Also gives the high-pitched sound, but less long. There are not many apps preinstalled. There are also not many apps to install from Software. There are a lot of GNOME settings. Not all windows are adapted to the mobile screen size.

postmarketOS with Plasma Mobile

I hear a high-pitched sound when the PinePhone boots into the graphical environment. A limited set of preinstalled apps. The system doesn't seem to be very responsive. I couldn't even enter my Wi-Fi settings because the interface hangs when I want to open the settings window. Unusable in this state.

postmarketOS with sxmo

A nice lightweight alternative using suckless programs. Sxmo (Simple X Mobile) is actually a collection of simple programs and scripts to create a fully functional mobile user interface adhering to the Unix philosophy. It's a bit too minimalistic for me, but it works nicely to my surprise, controlling the user interface largely through the PinePhone's volume and power buttons and swipe gestures.

PureOS

Has a limited set of apps. It seems to be better adapted to the mobile screen size than some of the other distributions. The default web browser is GNOME Web. There's no Firefox to install from the Software app. There seems to be an Iceweasel in the app, but it hasn't been updated since the version equivalent to Firefox 55! The available GNOME settings are rather limited.

Sailfish OS

Looks very nice. It has a very user-friendly user onboarding experience. There's a fairly limited set of installed apps. The user interface is closed source, so this is no option for me.

Ubuntu Touch

Looks very nice, it also a nice user onboarding experience. The default web browser is Morph. It also has a media player, weather app, music, terminal, navigation (uNav, but it didn't work for me, as it keeps "waiting for GPS"). It seems to be a bit slower to boot and less responsive than some of the other distributions. I also experienced some weird behaviour with the window placement.

Powered by Linux

Mobian is a surprisingly useful Debian distribution on the PinePhone.

The PinePhone supports even more Linux distributions: Fedora, Manjaro, Nemo Mobile (an open source build of Sailfish OS), NixOS, openSUSE and AVMultiPhone (basically postmarketOS with MATE). These are not (yet) available from the multi-distro demo image, and I haven't tried them yet.

As you see in my notes above, there are still a lot of issues if you want to use the PinePhone on a daily basis. 3 Most of them will probably be solved eventually: things seem to move very fast in this domain. Also, the fact that these are all just Linux distributions is extremely helpful. If you encounter a problem, you can have a look at dmesg, run systemctl list-units --state=failed and so on and you have the same powerful toolbox at your disposal as on the Linux desktop.

All in all, Mobian impressed me most, with PureOS as my second choice. So after distro hopping for the last few days, I'm going to do a clean install with Mobian and explore it further. The feeling of having freedom and control on my phone in a familiar environment is amazing. Powered by Linux!

1

I haven't tested phone calls or SMS messages, as I haven't put my SIM card yet in the PinePhone.

2

Apparently there is. It's called King's Cross. For some reason I never bothered to click on that weirdly looking icon.

3

For instance, on none of the distributions I tested I was able to get the camera working, but this is probably due to the kernel used in the multi-distro demo image, as it seems to work in the "official" Mobian image that I installed later. I also couldn't take a screenshot on any system, even with scrot. Later I learned that on Phosh based distributions you can take screenshots with the command-line tool grim.

La promesse que les réseaux sociaux ont fait aux créateurs de contenus n’a pas été tenue.

Pour les créateurs comme moi, la promesse des réseaux sociaux semble claire. Nous permettre de créer une communauté facilement joignable tout en donnant à nos créations l’opportunité d’atteindre de nouvelles personnes.

En échange, nous, créateurs, faisons de la publicité permanente pour lesdits réseaux sociaux, nous les animons, nous créons du contenu souvent exclusif voire même nous acceptons de payer pour diffuser nos créations. Sans oublier que nous vendons notre temps, notre vie privée ainsi que celle des membres de notre communauté.

Un pacte pour le moins faustien. Mais est-il rempli ?

Avec plus de 2.600 abonnés à ma page Facebook, près de 6.500 sur Twitter, 2.500 sur Mastodon, 1.500 sur Linkedin, 1.100 sur Medium et 1.100 amis Facebook, on pourrait dire que « ma communauté » est de 15.000 comptes. En admettant que certains me suivent sur plusieurs réseaux, 10.000 semble plus réaliste. Un joli chiffre.

Vraiment ?

De ces 10.000 comptes, il faut retirer les bots qui suivent automatiquement ce qui passe à leur portée, les comptes temporaires, les comptes qui ne sont plus utilisés, les comptes commerciaux qui ne vous suivent qu’en espérant un « follow back », les comptes des personnes décédées.

Ajoutons que les personnes qui vous suivent, mais qui suivent également 2000 ou 3000 autres personnes n’ont statistiquement aucune chance de voir vos messages.

Enfin, parmi les véritables comptes actifs qui ne suivent pas beaucoup de personnes, encore faut-il que l’algorithme du réseau social décide d’afficher votre message ou avoir la chance de poster dans les minutes qui précèdent le moment où vos abonnés vont consulter leur flux.

Au final, un message posté sur les réseaux sociaux est « affiché » (même pas lu) une ou deux centaines de fois. Pour une grosse dizaine de visites sur mon billet de blog (d’après les statistiques des réseaux sociaux eux-mêmes).

Les réseaux sociaux me font croire que j’ai une communauté de plus de 10.000 membres. C’est un mensonge. Les réseaux sociaux me font croire que je peux atteindre ma communauté. C’est un second mensonge.

Peut-être faut-il payer ? Pour l’expérience, j’ai décidé de dépenser 50€ en publicités chez Facebook et 50€ en publicités chez Twitter. L’objectif ? Promouvoir mon roman Printeurs. Dans les deux cas, j’ai obtenu, d’après les statistiques des réseaux sociaux eux-mêmes, beaucoup de visites et de clics. En regardant de plus près, je constate que tous les retweets obtenus sont issus de faux comptes Twitter. Que les clics n’ont eu aucun effet. Aucun livre n’a été vendu suite à ces promotions.

Tentant de prévenir à tout prix ma « communauté » que je publiais un roman, que c’était important pour moi et que c’était le moment de me soutenir pour ceux qui en avaient l’envie et les moyens, je me suis retrouvé à spammer sans relâche les réseaux sociaux. Certains, à raison, se sont sentis harcelés. D’autres, qui me suivent sans lire chacun de mes billets de blog, m’ont demandé de quoi je parlais. Ils n’avaient vu aucun des précédents messages, ils ne savaient pas ce qu’était ce « Printeurs » qui apparaissait pour la première fois dans leur flux. Certains ne sont toujours pas au courant aujourd’hui ! (alors que les préventes s’achèvent ce mercredi !)

Pour toucher ma « communauté », les réseaux sociaux font pire que mal. Ils me font croire qu’il y’a une communication là où elle se réduit à quelques interactions entre les mêmes personnes.

Mais, au moins, on pourrait espérer que les réseaux sociaux me permettent de toucher de nouvelles personnes.

Cela arrive, parfois. Cela s’appelle un « buzz ». C’est imprévisible, aléatoire. Cela m’est arrivé plus d’une fois, souvent pour des billets qui, selon moi, ne le méritaient pas. C’est de plus en plus difficile, car tout le monde cherche à faire le buzz. L’objectif n’est plus d’informer ou de partager, juste de faire le buzz. Ce n’est pas mon métier.

Mais ai-je touché l’utilisateur qui a choisi de ne pas avoir de compte de réseau social pour raison philosophique ? Celle qui a supprimé ses comptes pour raisons professionnelles ou suite à un harcèlement. Celui qui a un compte, mais qui n’en a jamais vu l’intérêt, qui ne l’utilise pas vraiment. Celle qui s’y intéresse, mais qui n’a pas acquis le réflexe, qui l’oublie pendant plusieurs mois, qui n’a pas le temps.

Ces personnes existent. Elles sont nombreuses. Peut-être plus nombreuses que la population des addicts aux réseaux sociaux. J’en croise tous les jours. Une longue conversation téléphonique avec un lecteur de mon blog qui n’a jamais eu de compte m’a ouvert les yeux.

Toutes ces personnes ne peuvent être atteintes par les réseaux sociaux. Pire : en optimisant ma communication pour les réseaux sociaux, je les exclus.

Là encore, pour un créateur, les réseaux sociaux sont un mensonge.

J’ai rempli ma part du contrat. J’ai produit du contenu pour les réseaux sociaux. J’ai fait leur promotion partout, jusque sur mon blog et dans mes conférences en demandant à être suivi. J’ai même payé pour être diffusé. J’ai, indirectement, vendu la vie privée de mes lecteurs.

Qu’ai-je obtenu en échange ? Une impression d’importance, une impression d’audience, impression qui se dissipe vite lorsqu’il s’agit de vendre un vrai livre.

Les réseaux sociaux sont un mensonge pour les créateurs, pour les utilisateurs, pour tous ceux qui pensent communiquer. Ils m’avaient déjà rendu injoignables.

C’est la raison pour laquelle je pense me concentrer sur l’écriture de livres et sur mon blog. Si vous voulez me soutenir, achetez mes livres, abonnez-vous à ma mailing-liste ci-dessous (ou par RSS), parlez de mes écrits à vos amis, mais ne me suivez plus sur les réseaux sociaux ! Ils sont un mensonge.

Certains pensent que j’y perdrais grandement en visibilité. Je prends le risque. Je ne supporte pas le mensonge.

Photo by Siora Photography on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

Yesterday I wrote about why software funded with tax dollars should be Open Source. Based on the feedback in email and social media, lots of people seem to agree.

Today, I want to highlight how this could be a game changer for Open Source sustainability.

Using Drupal as an example, let's do some quick math. Imagine if:

  • 1,000 government agencies around the world (federal, state, or local) spend an average of $300,000 a year on their Drupal sites.
  • 5% of that investment results in Open Source contributions.

Even if these numbers are conservative, it would lead to $15 million in annual contributions to Drupal: 1,000 x $300,000 x 0.05 = $15,000,000. That could be 150 full-time contributors each year.

In other words, requiring public code in government could be Open Source's best funding mechanism.

I published the following diary on isc.sans.edu: “A Mix of Python & VBA in a Malicious Word Document“:

A few days ago, Didier wrote an interesting diary about embedded objects into an Office document. I had a discussion about an interesting OLE file that I found. Because it used the same technique, I let Didier publish his diary first. Now, let’s have a look at the document.

It’s an OLE file that contains an embedded object… [Read more]

The post [SANS ISC] A Mix of Python & VBA in a Malicious Word Document appeared first on /dev/random.

September 17, 2020

I published the following diary on isc.sans.edu: “Suspicious Endpoint Containment with OSSEC“:

When a host is compromised/infected on your network, an important step in the Incident Handling process is the “containment” to prevent further infections.  To place the device into a restricted environment is definitively better than powering off the system and, probably, lose some pieces of evidence.

Endpoint protection solutions are the “in” thing for a while. Instead of using standard AV tools, those solutions implement more control and try to block attackers directly. One of the features they implement is a containment solution to prevent a compromised host to communicate over the network, except with the endpoint management console. An endpoint solution can be expensive if you have a lot of hosts to protect and… it’s (again) a new agent to deploy on them… [Read more]

The post [SANS ISC] Suspicious Endpoint Containment with OSSEC appeared first on /dev/random.

Should software funded with tax dollars be Open Source? I believe so. Maybe there are exceptions, but the default should be "developed with public money, make it public code".

Some governments have increasingly embraced Open Source software. For example, Italy created a new law to enforce the evaluation and use of Open Source in government. And, the Australian government has been promoting the idea of public code for several years.

Why do you think many governments have not adopted the idea of "public money, public code"?

September 16, 2020

Alors que je descendais du bus au milieu d’une petite bourgade irlandaise, je me fis la réflexion que le lieu était particulièrement étrange pour la tenue de ce qui se voulait une conférence internationale sur la démocratie.

Le voyage avait été long, je n’étais pas payé, mais j’avais accepté de donner une keynote pro bono pour une raison très simple : je partageais l’affiche avec David Graeber, dont j’avais dévoré les livres.

Depuis des années, je m’insurgeais contre l’absurdité politique de la « création d’emplois ». En 2012, j’intitulai ce phénomène « le creusage et rebouchage de trous ». J’ai même donné une conférence TEDx sur le sujet. Malgré le succès relatif de mes idées, j’avais l’impression de prêcher dans le désert. Jusqu’à ce que David Graeber popularise les « Bullshit Jobs » dans un article de 2013.

Là où j’avais une intuition, Graeber apportait une érudition et une vision anthropologique professionnelle. Après l’article sur les Bullshit Jobs, je me penchai sur sa bibliographie. Je dévorai le pourtant épais « Dette, 5000 ans d’histoire », un livre qui, bien que fort critiqué, me semblait plus profond que le célèbre « Sapiens » de Harari tout en apportant une approche originale de l’histoire de l’humanité. Mais c’est avec « Utopia of Rules » que Graeber touche au génie. En remettant en question avec justesse et un cynisme mordant nos certitudes les plus ancrées sur notre société. Une lecture que je recommande entre toutes.

L’homme était brillant, intéressant. Je partageais beaucoup de centres d’intérêt avec lui. Je me réjouissais de le rencontrer, car je désirais lui expliquer mes théories sur une démocratie décentralisée gouvernée à travers la blockchain. Partageant avec lui un idéal anarchiste, j’étais très curieux d’entendre son analyse politique et sociologique de mes idées essentiellement inspirées par la technologie décentralisée.

Nos discussions s’étaient, jusqu’à présent, essentiellement tenues via Twitter, en public ou par message privé. J’avais tenté de le contacter par mail plusieurs fois, mais, sur Twitter, il m’avoua que le chiffre en rouge sur l’icône en forme d’enveloppe comportait cinq chiffres, qu’il répondait uniquement aux mails qui arrivaient quand il ouvrait sa messagerie. Comme il se plaignait que beaucoup de ses articles étaient refusés par les magazines grand public, je le poussai plusieurs fois, sans succès, à ouvrir un blog personnel.

Repensant à nos échanges tout en explorant le sentier côtier qui jouxtait mon hôtel, j’envoyai plusieurs messages pour savoir s’il devait arriver le soir même ou le lendemain et s’il acceptait mon invitation à dîner.

Sa réponse, au bout de plusieurs messages de ma part, fut une question un brin irritée : « What is that thing you are talking about ? »

Une boule dans la gorge, je lui expliquai qu’il s’agissait d’une conférence internationale sur la démocratie, conférence pour laquelle nous devions tous deux donner une keynote. Nos photos respectives étaient même sur l’affiche !

Après plusieurs minutes de silence, David m’expliqua qu’il était à Londres, légèrement grippé. Mais que de toute façon, les organisateurs ne payant rien, pas même son voyage, il ne se sentait nullement engagé. Qu’il ne viendrait pas.

La déception était pour moi à son comble. Et je n’étais qu’au bout de mes mauvaises surprises (en tout et pour tout, le public de la conférence se limitera à une vingtaine de personnes). Heureusement, ce fut pour moi l’occasion de revoir mon ami Costa Vayenas (auteur de Democracy in the Digital Age, que je recommande également). Je m’offris également deux bons bains en mer d’Irlande. La mer froide soigne les pensées les plus noires.

Au comble de la déception, mon premier réflexe fut d’appeler ma femme. J’étais venu en Irlande pour rencontrer David Graeber, je me retrouvais dans un bled au milieu de nulle part alors qu’il était à Londres. Elle me consola en me disant que j’aurais bien d’autres occasions de le rencontrer. Que nos chemins finiraient par se croiser.

Elle avait, une fois n’est pas coutume, tort. Le 3 septembre 2020, je tombai sur un tweet de Vinay Gupta annonçant la mort de David Graeber. Plusieurs fois, j’avais annoncé que mon rêve intellectuel était d’être assis à une table entre David et Vinay. La vision du futur de ces deux intelligences me semblait tellement complémentaire. En lisant le tweet, je fus immédiatement convaincu qu’il s’agissait d’une mort métaphorique. Que Graeber avait révélé un aspect de sa personnalité qui ne plaisait pas du tout à Vinay. J’en étais tellement persuadé que je fus glacé d’effroi en lisant le tweet original de l’épouse de David Graeber. David Graeber est décédé subitement le 2 septembre 2020.

Il laisse derrière lui une humanité qui a gravement besoin d’intellectuels assez malins pour analyser, assez talentueux pour communiquer et assez courageux pour parler franchement de la bullshitization de notre monde. Pour accepter, comme David Graeber, de payer le prix de leur franc-parler.

Je lui dédie mon essai « Despair and Hope » , largement inspiré par la lecture de « The Utopia of Rules ».

Mais, alors que le retour de mon escapade en Irlande fut un enfer (tous les vols vers Bruxelles furent annulés, je vous passe les détails), je digérai une leçon fondamentale de vie que venait de m’enseigner Graeber : « Tu ne dois rien à personne. Même si tu fais des déçus, tu ne leur dois rien. »

Il l’avait écrit en 600 pages. Je l’ai compris en un message Twitter.

C’est en rentrant d’Irlande, le message de David dans ma poche, que mon épouse acheva de me convaincre d’arrêter de faire des conférences gratuites et de me concentrer sur ce que je voulais vraiment faire. Pas sur ce que je pensais que les autres voulaient que je fasse.

Merci, David ! Que tes idées et tes combats ne se reposent jamais !

Photo prise le même jour par l’auteur.

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

Hi all! I’m excited to announce a strategic handover of DNS Spy to SecurityTrails with the goal to ensure both the future and growth of DNS Spy.

September 15, 2020

So AVIF is a new(ish) image format that promises even better optimization then WebP and is supported in desktop Chrome & behind a preference in Firefox; go to about:config and set image.avif.enabled to true.

If you are using Autoptimize to optimize your images and you want to test AVIF images, you can use below code snippet to do so;

add_filter('autoptimize_filter_imgopt_webp_js', function(){return '<script data-noptimize="1">function c_img(a,b){src="avif"==b?"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABoAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACJtZGF0EgAKCBgADsgQEAwgMgwf8AAAWAAAAACvJ+o=":"data:image/webp;base64,UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==";var c=new Image;c.onload=function(){var d=0<c.width&&0<c.height;a(d,b)},c.onerror=function(){a(!1,b)},c.src=src}function s_img(a,b){w=window,"avif"==b?!1==a?c_img(s_img,"webp"):w.ngImg="avif":!1==a?w.ngImg=!1:w.ngImg="webp"}c_img(s_img,"avif");document.addEventListener("lazybeforeunveil",function({target:a}){window.ngImg&&["data-src","data-srcset"].forEach(function(b){attr=a.getAttribute(b),null!==attr&&-1==attr.indexOf("/client/to_")&&a.setAttribute(b,attr.replace(/\/client\//,"/client/to_"+window.ngImg+","))})});</script>';});

Use the the code snippets plugin to add this (easy and safe) or if you’re adventurous add it to your theme’s functions.php.

September 14, 2020

Rendre la lecture financièrement accessible à tou·te·s. Et avoir la satisfaction d’être lu.

Ma carrière d’écrivain se concentre sur deux objectifs : écrire et être lu.

J’ai cette intuition que lire un seul de mes romans sera toujours plus important que lire tous mes billets de blog combinés. Que j’y apporte plus d’idées, plus de profondeur. Qu’en étant lu, un de me livres peut faire grandir le lecteur, lui faire considérer le monde sous un autre angle. C’est, selon de nombreux témoignages, ce que j’avais réussi avec « Le blog d’un condamné ».

Afin d’être lu, mon travail principal d’écrivain est d’éviter de mettre les bâtons dans les roues de mes lecteurs. Lisez, partagez, copiez, prêtez, donnez ! Mes livres ne vivent que si on les lit, si on les fait voyager, si on en écorne les pages, si on les annote, si on partage des extraits ou le texte complet.

Beaucoup de maisons d’édition pensent que cette philosophie n’est financièrement pas rentable. N’en déplaise à mon comptable, je souhaite être lu plutôt que de devenir riche. C’est d’ailleurs pour cette raison que j’ai pris le risque de m’associer avec une jeune maison d’édition qui me proposait un projet de version du roman sous Creative Commons.

Je suis conscient que dépenser 20€ pour un roman (plus 6€ de frais de port pour les Français, victimes d’une aberration administrative) est un luxe. Pour certains, c’est même un luxe malheureusement hors de portée.

C’est pourquoi j’ai souhaité que la campagne Ulule Printeurs s’accompagne d’un « Roman suspendu ».

Le principe est simple : vous commandez deux romans, vous n’en recevez qu’un seul et le second sera donné soit à des personnes ne pouvant se l’offrir, soit à des bibliothèques publiques.

En tant qu’auteur, je double cette offre. Cela signifie que pour chaque roman suspendu commandé, j’en offre un second, financé par mes droits d’auteur.

En clair, pour 38€, vous achetez un exemplaire de Printeurs et vous en offrez deux ! Vous pouvez également choisir de recevoir deux exemplaires afin d’en donner un à la bibliothèque de votre choix.

Si vous souhaitez bénéficier d’un roman suspendu, pour vous-même ou pour le projet de votre choix, contactez-moi par email. Nos échanges seront, bien entendu, confidentiels et je ne peux garantir d’accéder à toutes les demandes (cela dépendra, évidemment, du nombre de suspensions disponibles).

Si Printeurs ne me rendra vraisemblablement pas riche, le plus important pour moi est d’être lu. Et, sans fausse modestie, alors que je termine ma toute dernière relecture du manuscrit, je me dis que les idées partagées dans Printeurs sont essentielles pour construire le monde de demain.

« — Que fais-tu Nellio ?

— Ils veulent le printeur ? Et bien on va leur donner le printeur ! »

Printeurs, chapitre 40

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

September 12, 2020

September 11, 2020

Quelques liens en vrac que vous pouvez lire sans vous connecter aux réseaux sociaux. Je galère pour mettre en place une mailing-liste liée à mon blog pour vous permettre de vous abonner.

RSS

Plutôt que de picorer sur les réseaux sociaux, permettant à ceux-ci de décider ce que vous aller voir et lire, l’essentiel de mes lectures web provient dorénavant des flux RSS.

  • J’ai pris un abonnement à flus.io mais, Marien, son créateur, est en train de bosser sur un nouveau produit, une sorte de mélange entre Pocket et un aggrégateur RSS. Je me réjouis de tester cela ! Son blog est une très belle expérience d’auto-entrepreneuriat.
  • Je cherche à mettre en place une mailing-list permettant de recevoir mes billets par mail. Rien ne fonctionne sous WordPress. J’hésite à mettre en place une mailing-liste liée à mon flux RSS. Ou alors, je migre rapidement vers Write.as.

Mises-à-jour

Jeune geek, j’adorais mettre à jour mes logiciels, découvrir des nouvelles fonctionnalités voire même des bugs. Mais alors que je cherche à regagner ma concentration, je découvre à quel point les mises à jour forcées sont envahissantes et perturbantes. Le pire étant lorsque je suis soumis à une deadline et que le clavier de mon mac plante (ce qui arrive trop souvent) et que je redémarre pour découvrir que, pendant plus d’une heure, le système va se mettre à jour. Même Zettlr m’ennuie à chaque démarrage !

Les deux articles se complètent merveilleusement pour décrire une situation qui n’est à l’avantage ni des utilisateurs, ni des développeurs mais uniquement… du marketing et des managers !

Jaron Lanier

Un très bel interview avec Jaron Lanier. Si vous ne le connaissez pas, je vous conseille très chaudement son livre « Ten Arguments For Deleting Your Social Media Accounts Right Now ». J’ai plus de mal à finir « Who Owns The Future » car il tente de justifier la création d’emplois.

Jaron Lanier est, avec Cal Newport, une de mes sources d’inspiration : ce sont deux personnes qui écrivent des réflexions très intéressantes et ne sont pas du tout sur les réseaux sociaux.

Cory Doctorow

S’il est sur les réseaux sociaux, Cory Doctorow n’en est pas moins extrêmement intéressant. Je vous ai déjà recommandé la lecture de son essai « How to Destroy Surveillance Capitalism ». Je serais très intéressé de le voir face à Jaron Lanier (les deux approches sont complémentaires mais parfois contradictoires).

Pendant ce temps, Cory Doctorow annonce sur son blog Pluralistic le lancement d’une campagne Kickstarter. L’objectif ? Mettre à mal le monopole d’Amazon sur les livres audio et l’obligation des DRM. J’ai bien entendu contribué (même si je n’aime pas les livres audio) et me suis offert sa trilogie Little Brother en epub.

Cryptos

Politique

Bandes dessinées

  • Le Bourreau, par Gabella. Si le thème de départ est intéressant, les fautes de français à toutes les bulles et l’intrigue qui devient rapidement un fouilli de superhéros moyen-âgeux rend cette série parfaitement dispensable.
  • La confrérie du crabe, par Gallié et Andreae. Cinq enfants se retrouvent dans un hôpital pour se faire extraire leur « crabe » (la symbolique n’est pas vraiment subtile). Mais l’opération ne se passe pas comme prévu. Si la fin dans le troisième tome est très prévisible et convenue, si l’histoire tient sur un confetti, les deux premiers tomes offrent une ambiance fantastique très classique mais bien rendue. À emprunter dans votre bibliothèque/médiathèque.

Printeurs

Comme vous pouvez le voir en photo, ma plus grosse lecture de la semaine reste Printeurs. Manuscript définitif à rendre pour lundi !

Le premier pallier à 150 exemplaires précommandés assurera la diffusion de Printeurs sous licence Creative Commons dans un fichier print@home.

Bonnes lectures et bon week-end à tou·te·s !

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

September 10, 2020

This week I had to work on a PoC to deploy OpenShift in Virtual Machines instead of bare-metal, like we did recently for the CentOS CI infra

Why in Virtual Machines (KVM guests) and not on bare-metal ? Well, there are cases where you have powerful/beefy machines, but not enough to meet the minimum number of nodes (at least 3 etcd nodes, and not even counting the real workers, at least 2 so 5 in total for bare minimum), while these nodes would perfectly (both at cpu/memory and storage) support the whole infra (assuming that you don't deploy all etcd/control planes nodes on the same physical node of course, and same for workers)

If you have a look at the official openshift documentation, you'll see that while all major cloud providers (AWS, Azure, GCP) are listed, there are also ways to deploy on bare-metal (what we did for CI infra), but also on RHEV, vSphere and Openstack too .. but nothing for plain KVM hypervisors (managed by libvirt in our cases).

But a VM is more or less like a bare-metal install, so what about we treat the VMs as bare-metal ? problem solved, right ? For our bare-metal deployment, we just used Ansible and with a simple ad-hoc playbook, so nothing fancy : just creating pxe boot entries, using ipmi to remotely power on the nodes and ensure they'd boot on network, RHCOS is installed and has all the kernel parameters for network settings and where to find RHCOS image to install, and where to find ignition files

So reusing that was my first idea, as we can easily create a VM with a fixed mac-address, and boot from the network. But then I thought about what we already use for our traditional KVM deploy : a simple ad-hoc playbook just templating a virt-install command that is kicked on the hypervisor.

If you have used virt-install yourself, you know that there is the --location parameter (that we used already). Extracted from man virt-install :

      -l, --location OPTIONS
           Distribution tree installation source. virt-install can recognize certain distribution trees and fetches a
           bootable kernel/initrd pair to launch the install.

How does that work ? Well, virt-install grabs kernel and initrd from that location, but to know where to find it (name/path), it uses a .treeinfo file. Example of http://mirror.centos.org/centos/7/os/x86_64/.treeinfo :

[general]
name = CentOS-7
family = CentOS
timestamp = 1587405659.3
variant = 
version = 7
packagedir = 
arch = x86_64

[stage2]
mainimage = LiveOS/squashfs.img

[images-x86_64]
kernel = images/pxeboot/vmlinuz
initrd = images/pxeboot/initrd.img
boot.iso = images/boot.iso

[images-xen]
kernel = images/pxeboot/vmlinuz
initrd = images/pxeboot/initrd.img

So let's combine this option with the Red Hat CoreOS tree that we'll generate on our httpd deployment server : such .treeinfo doesn't exist, but let's just template it . From that point, it's easy, let's just use a variant for ad-hoc playbook that will :

  • Download kernel/initrd.img and deployer image for openshift to our local httpd server
  • Ensure we'll have correct .treeinfo file in place
  • Create a virt-install wrapper that will just point to correct path with --location, and deploy VMs with RHCOS and automatically calling ignition

While I admit that I'm surely not the most experienced openshift admin (just started to play with it), I still like the fact that RHCOS is still more or less linux that we use to know, and so combinining tools we already use allow us to deploy it , but surely not the way it's officially documented :)

Mateu, Gabe and I agreed to sunset the API-first initiative, about which I’ve written a lot in 2016–2019.

We’ve all spent countless hours on it — Gabe and I were able to work on it mostly full time, Mateu contributed an incredible amount of his free time to get the API-first initiative and the JSON:API module ecosystem in particular to where it is today.

I learned a lot from these two lovely people, and we also had lots of laughs!


Mateu wrote a great retrospective, which is a superb way to end this project. Quoted here in full:

TL;DR: we are putting an official end to the API-first initiative although we don’t consider our work done. The initiative leads have struggled to find availability or energy to keep moving it forward. The upcoming JS components initiative will likely light this flame back up, and we’ll be there to assist and guide in their API endeavors. This patch removes the initiative from the MAINTAINERS.txt.

Connection: close

We mark the API-first initiative done. :wave:.

However, we are not done. There are so many things we would like to improve in Drupal core. Those include hypermedia support, Open API and schema reliability, non-entity JSON:API resources, OAuth2, etc. Nonetheless, we believe that this is a good stopping point for the initiative. We achieved so much, there are so many unforgettable moments. This initiative has played a huge role into transitioning Drupal to the next 10 years of success! We are so proud of what we have accomplished that it has not been easy to wrap it up.

Let’s have HTTP guide us through this decision.

207 (Multi-status)

There is no single definitive reason, but the sum of several reasons have lead us to the unanimous decision to call this initiative done.

202 (Accepted)

JSON:API was the major goal and crowning achievement of the initiative. It was hard to imagine how much work, stress, and personal time that would take from us. As of Drupal 8.7 we can use JSON:API as part of Drupal core. This was the first time we were tempted to call it done.

426 (Upgrade required)

The API-first initiative started with Wim working hard to make REST in core more reliable. In parallel Mateu was writing a myriad of contrib modules bring decoupled Drupal more usable to deliver the expected experiences for customers. In the midst of this Gabe joined the team to help us guide the project to the finish line with the contribution of many volunteers—to whom we are supremely grateful. Thank you! :pray:

It seems this was such a long time ago. Nowadays none of us has the time or the energy to keep tugging this ship. It’s time for a different team to take the lead.

429 (Too many requests)

We recognize that Drupal has a very long road to truly become API-first. On top of that we still have to finish and polish so many key contributed modules. At different points we entertained the idea of adding to core:

  • Consumers.
  • Simple OAuth.
  • JSON:API Hypermedia.
  • Open API.
  • JSON:API Resources.
  • Decoupled Router.
  • Consumer Image Styles.

We probably don’t want them all, but we talked about how very useful they are to the decoupled Drupal endeavour. It is also worth mentioning that there are many other modules that are not very good candidates to Drupal core because they are not broadly applicable enough, while they remain tremendously important to the API-first ecosystem. One obvious example: JSON:API Explorer.

303 (See other)

Dries proposed a new JS components initiative that will likely begin by “solving” decoupled navigation. We vehemently agree that is a great place to start. It is a thorny problem that is not very well solved right now from the API perspective and requires API-first users to reinvent their own solutions over-and-over.

We expect that the JS components initiative team will have to work on the API side in order to complete their goals. We will be there for them, and we will help with code. We hope to be involved as much as we are able to.

This post was about marking the initiative as done. As such we have talked about the decisions, and the mindset of the initiative coordinators. However, it would be terribly unfair to add this bow on top of the initiative without mentioning the contributors. Everyone that contributed with code, documentation, ideas, designs, support, etc. THANK YOU.

Het aantal Raspberry Pi's in mijn huis begon onhandelbaar te worden en het kluwen van kabels en voedingsadapters was me al even een doorn in het oog. Ik besloot een aantal van deze Raspberry Pi's op elkaar te stapelen in een clusterbehuizing, aangesloten op één voeding en één netwerkswitch.

De belangrijkste componenten van de configuratie die ik koos, zijn:

Clusterbehuizing

Deze behuizing met zes lagen vond ik voor € 20 op Amazon:

Een clusterbehuizing voor Raspberry Pi's met acrylplaatjes

De Raspberry Pi's zijn hiermee niet volledig beschermd, want er zit alleen boven en onder elk processorbordje een acrylplaatje. Maar een voordeel van deze opstelling is dat ze gemakkelijk uit te breiden is. Je kunt er ook eenvoudig een laag uitnemen als je die Raspberry Pi tijdelijk elders nodig hebt.

Voeding

Als voeding koos ik voor het € 29 kostende Anker PowerPort 12 A 60 W laadstation met 6 poorten:

Het Anker PowerPort 12 A 60 W laadstation kan 6 Raspberry Pi's voeden.

Belangrijk bij de keuze voor de voeding is dat ze per poort voldoende vermogen kan leveren voor je Raspberry Pi's. Ik ging daarvoor uit van het vermogensverbruik van zes Raspberry Pi 4's op volle kracht. Uit een benchmark van MagPi blijkt dat dit model in een stresstest tot 7 W verbruikt.

Een set van laadkabels (usb-c voor de Raspberry Pi 4, usb-a voor de eerdere modellen) vult dit aan.

Waarschuwing

Ik heb laadkabels van 25 cm lang gekocht om het geheel zo compact mogelijk te houden, maar dat was eigenlijk iets te kort: door de stijfheid van de kabels blijft het laadstation niet stabiel staan. Maak dezelfde fout niet.

Netwerkswitch

Voor de netwerkverbinding kies je een switch met één poort meer dan het aantal Raspberry Pi's in je cluster. Een eenvoudige unmanaged gigabit-ethernetswitch is voldoende. Ik koos voor een TP-Link LS108G 8-poorts gigabit-ethernetswitch van € 25:

De TP-Link LS108G 8-poorts gigabit-ethernetswitch voorziet de Raspberry Pi's van een netwerkverbinding.

Voor de netwerkkabels koos ik voor een set van 7 platte Cat7-ethernetkabels.

Waarschuwing

Ik heb ook hier voor kabels van 25 cm lang gekozen om het geheel zo compact mogelijk te houden, maar dit was een miskoop. Ze waren te stijf, ik had echt flexibele ethernetkabels moeten kopen. En 25 cm was te kort.

Statusleds

Ik wilde de status van mijn Raspberry Pi's eenvoudig kunnen tonen, maar kant-en-klare oplossingen vond ik te duur of met een te klein schermpje. Ik vond een leuke lowtech-oplossing in het Mini Battery Display van Open-Smart. Voor € 1,30 per stuk vind je dit kleine printplaatje met leds op AliExpress. Het bevat een ledbalk met tien segmenten, die je kunt aansturen om bijvoorbeeld de processorbelasting of cpu-temperatuur aan te duiden:

Het Mini Battery Display van Open-Smart is perfect voor statusleds voor je Raspberry Pi.

Ik heb zes van deze printplaatjes op een breadboard geprikt en elk printplaatje is met vier jumperwires met zijn Raspberry Pi verbonden. Ik heb dan een Python-programma geschreven om de leds aan te sturen op basis van de processorbelasting: rpi-mini-battery-display.

Het resultaat

Als je dit alles dan in elkaar steekt, ziet dat er als volgt uit:

Mijn cluster van zes Raspberry Pi's.

Ik koos voor de horizontale plaatsing omdat die het minste problemen met de te korte kabels oplevert, en het zorgt ook voor een gelijkmatige warmteafvoer. Je ziet op de achtergrond wel nog het laadstation in de lucht 'zweven' door de te korte voedingskabels...

Voor PCM beschreef ik uitgebreid hoe je zelf zo'n cluster maakt. Het artikel gaat alleen in op de hardwarekant, maar daar komt al heel wat bij kijken. Meer tips en gedetailleerdere instructies vind je in het artikel.

Al met al ben ik hier tevreden mee. Ik probeer nu sneller nieuwe zaken op mijn Raspberry Pi's uit omdat ik er geen werkloze Raspberry Pi's meer voor uit een doos hoef te halen of een vrij stopcontact moet zoeken. En mijn bureau ziet er heel wat netter uit!

September 09, 2020

September 08, 2020

Over Labor Day weekend, Vanessa and I drove around Normandy. We admired the natural beauty and visited a few historical D-Day sites.

In June 1944, more than 150,000 American, British and Canadian forces landed on five beaches along the heavily fortified French coast. As we traveled the coast and overlooked the beaches, we saw the remains of artificial harbors, floating piers and bunkers. All powerful reminders of the atrocities that took place.

Vanessa overlooking the cliffs in Normandy

We stopped at Omaha Beach and Gold Beach, and visited the American cemetery in Colleville-sur-Mer. The cemetery honors 9,000+ American soldiers that died in World War II. It was humbling to think about how many people lost their lives for our freedom.

Hundreds of white crosses at the American cemetery in Colleville-sur-Mer

We traveled in a Volkswagen California. Sleeping in a van for 3 nights made it the perfect "corona trip".

Vanessa waking up in the van
Close-up of breakfast being made in the van

Because it was a short trip, we didn't get to all of the places we had hoped. It gives us a reason to get back on the road for another adventure.

A narrow road along the coast in Normandy

Les affres morales d’un chantre de la déconnexion qui vous spamme sur les réseaux sociaux afin de promouvoir sa prose.

Depuis deux années, je me bats contre l’hégémonie des réseaux sociaux dans ma vie, dans la vie. Je croyais que ma déconnexion de trois mois m’aurait permis de faire le tour du sujet. Je n’étais qu’au début de ma réflexion et de mon travail.

Ces derniers mois me procuraient une certaine fierté. Grâce aux RSS (via flus.io), je restais connecté et inspiré tout en me passant presque entièrement des réseaux sociaux. J’ai supprimé certains comptes, j’ai délaissé d’autres.

Mais voilà que je me retrouve à devoir faire la promotion de mon roman Printeurs. Printeurs qui, ironiquement, dénonce la publicité à outrance, l’envahissement permanent. Printeurs qui, en cas de succès, m’ouvrirait certaines portes que je regarde avec envie depuis mon enfance.

Mes principes moraux vacillent, mais j’ai tellement envie que Printeurs soit un succès. En combiné, plus de dix mille comptes me suivent sur Facebook, Twitter et Mastodon. Depuis la création de ce blog, vous êtes des centaines à m’avoir écrit que vous me lisez fidèlement. Printeurs a été lu plusieurs milliers de fois sur la plateforme Wattpad. Mais, lorsqu’il s’agit de mettre la main au portefeuille pour un produit réel, ces chiffres ne sont qu’un rideau de fumée. Le like est facile, bon marché. Il ne signifie rien.

Vendre est difficile. Vendre n’est pas mon métier. Je dirais même plus que je déteste vendre. J’ai l’impression d’arnaquer les gens.

Ce que je désire au plus profondément de moi, c’est être lu. C’est que vous partagiez mes textes, mes livres. Pour être lu, il faut être édité. Pour être édité, il faut vendre.

Alors que mon nouveau mode de vie me soulageait de courir après la gloire des followers et des likes, me permettait de me concentrer sur la lecture et la réflexion plus profonde, la campagne Ulule Printeurs me fait replonger. Je guette les chiffres de vente, je parcours les forums et les réseaux sociaux. Je vous spamme à tout va.

C’est aussi pour cela que je cherche à mettre en place une newsletter sur ce blog. Afin de pouvoir toucher directement ceux que mes projets intéressent.

Car, sur les réseaux sociaux, la surenchère est obligatoire. Malgré des milliers de followers, chaque publication ne sera vue, au petit bonheur la chance, que quelques dizaines de fois. Et elle sera noyée parmi d’autres. Je suis obligé de crier, de répéter, d’insister pour sortir du lot.

Je n’arrive plus à me concentrer sur autre chose.

Je rêve de pouvoir me passer de ce marketing outrancier, mais je ne sais pas comment faire.

Peut-être que vous pouvez m’aider. Par exemple en recommandant Printeurs dans vos cercles férus de science-fiction. Mais je vous demande déjà tant. Je vous ennuie déjà tellement avec cette campagne. Je cherche à vous contaminer avec le chaos qui règne dans mon esprit. Je tente de vous manipuler comme Eva le fait à Nellio.

Mais c’est pour la bonne cause.

C’est pour vous vendre un livre qui dénonce l’hyperconsumérisme publicitaire !

Alors, commandez-le tandis que je me débats dans les affres de mes paradoxes moraux !

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

Vlot geschreven autobiografische hagiografie van een naoorlogse ketterende nozem. Geen groot verhaal, maar gezien de seks, de drugs, het geweld en de schenen-schopperij was “Ik, Jan Cremer” ongetwijfeld een grote bevrijding in zijn tijd. Het schandelijke boek ging dan ook vlot over de tong en onder de toog.

Of het nu nog relevant is? Goh, als tijds-document misschien?

September 07, 2020

If you want to use the Arduino IDE with an ESP32 or ESP8266 microcontroller on Ubuntu 20.04, you get the following error when compiling your sketch:

Traceback (most recent call last):
  File "/home/koan/.arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py", line 37, in <module>
      import serial
      ImportError: No module named serial

This is because esptool.py is called as a Python 2 program, and Python 2 is deprecated. Ubuntu 20.04 doesn't even have pip anymore for Python 2, so you can't even install the serial module to solve this error.

There are two solutions to this problem: using Python 3 or Python 2.

Installing the module for Python 3

One solution is to create a symlink from /usr/bin/python to /usr/bin/python3. Ubuntu even has a package for this:

$ sudo apt install python-is-python3

After this install the pyserial module:

$ pip3 install pyserial

If you already have the serial module, you have to remove it first:

$ pip3 install serial

After this, try compiling your sketch again. This time the Arduino IDE calls esptool.py with Python 3, and thus finds the module you just installed with pip3.

Note

This approach makes python behave like python3 globally. So if you rely on other legacy Python software, this may not be the best approach.

Installing the module for Python 2

Another solution is to keep using Python 2 and thus installing the missing module with pip2. First enable the universe repository, where Python 2 has been moved to in Ubuntu 20.04:

$ sudo add-apt-repository universe

Update your package list, install Python 2 if you don't have it (it's not included anymore by default in new Ubuntu installations, but the Arduino IDE would have shown you another error in that case) and then pip2:

$ sudo apt update
$ sudo apt install python2
$ curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py
$ python2 get-pip.py

Then finally install the missing module:

$ pip2 install pyserial

After this, try compiling your sketch again. The Arduino IDE still calls esptool.py with Python 2, but this time it finds the module you just installed with pip2, so the error disappears.

September 04, 2020

Recently in the CentOS Infra, we got a new sponsor giving us access to a server that has a HBA needing a kernel module that was deprecated in the RHEL8 (and thus CentOS 8) kernel by default.

What can you do in such situation ? Answer is easy : Elrepo ! They provide (for years now) kernel modules ready to go for network cards, raid/hba controllers, wifi nics, etc, and for various versions of RHEL/CentOS and other rebuilds using same kernel.

I wanted to give it a try on a node I have at least remote KVM/ipmi access, to reset the node in case of problem. Let's use the following ~8y old IBM blade for this example , that has the following network interface card and also hba :

# lspci |egrep -i 'ethernet|Serial'
0c:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS2004 PCI-Express Fusion-MPT SAS-2 [Spitfire] (rev 03)
16:00.0 Ethernet controller: Emulex Corporation OneConnect 10Gb NIC (be3) (rev 03)
# lspci -n |egrep '0c:00.0|16:00.0'
0c:00.0 0107: 1000:0070 (rev 03)
16:00.0 0200: 19a2:0710 (rev 03)
# ethtool -i eth0|grep driver
driver: be2net
# modinfo be2net|grep 0710
alias:          pci:v000019A2d00000710sv*sd*bc*sc*i*
# lsmod|grep sas
mpt2sas               249763  2
# modinfo mpt2sas|grep 0070
alias:          pci:v00001000d00000070sv*sd*bc*sc*i*

As you can see above, we were searching for the kernel module in use, and compare in kernel module the pci id. We know which kmod to search for and which pci id the kmod is supposed to support. Let's verify this in CentOS 8 : Let's try with network module :

# modinfo be2net|grep 0710 || echo "Sorry, doesn't seem supported"
Sorry, doesn't seem supported

Ouch, be2net is present but doesn't support our pci id so it was deprecated ... we need a different one. Let's try now with the hba :

# modinfo mpt2sas|grep 0070 || echo "Sorry, doesn't seem supported"  
Sorry, doesn't seem supported

empty so also not supported. By chance, Elrepo has this packaged as rpm :

  • http://elrepo.reloumirrors.net/elrepo/el8/x86_64/RPMS/kmod-mpt3sas-28.100.00.00-3.el8_2.elrepo.x86_64.rpm
  • http://elrepo.reloumirrors.net/elrepo/el8/x86_64/RPMS/kmod-be2net-12.0.0.0-5.el8_2.elrepo.x86_64.rpm

Of course we can also use a DuD as Elrepo already provides such .iso images.

In our case though, we have to do things differently, as we need two kmods and also no way to fetch it through network ( Obviously, as we need first nic kernel module/driver ) ...

So here was my idea :

  • build a DuD .iso that has both kmods/kernel modules
  • inject that .iso inside the initrd.img (as we need kernel module loaded before we can reach network for stage2 and no way to grab network driver through network obviously)

Let's go back on the CentOS 7 node that needs to be reinstalled with CentOS 8 :

# yum install -y genisoimage createrepo_c
# cd $(mktemp -d)
# mkdir -p {./dd/rpms/x86_64/,./dd/src}
# echo -e "Driver Update Disk version 3\c" > ./dd/rhdd3
# pushd dd/rpms/x86_64/
# wget http://elrepo.reloumirrors.net/elrepo/el8/x86_64/RPMS/{kmod-mpt3sas-28.100.00.00-3.el8_2.elrepo.x86_64.rpm,kmod-be2net-12.0.0.0-5.el8_2.elrepo.x86_64.rpm}
# createrepo_c ./
# popd
# pushd dd/src
# wget http://elrepo.reloumirrors.net/elrepo/el8/SRPMS/{kmod-be2net-12.0.0.0-5.el8_2.elrepo.src.rpm,kmod-mpt3sas-28.100.00.00-3.el8_2.elrepo.src.rpm}
# popd
# mkisofs -quiet -lR -V OEMDRV -input-charset utf8 -o mpt3sas-be2net-kmod.iso ./dd

Now that we have mpt3sas-be2net-kmod.iso we can use it with inst.dd= .. but as we have no network, anaconda needs to find it early in the process. So let's inject it into initrd.img ( you can do the same with kickstart )

Let's retrieve vmlinuz and initrd.img to remotely kick a CentOS 8 reinstall on itself (node is actually running CentOS 7)

# pushd /boot
# mirror_url="http://mirror.centos.org/centos/8/"
# curl --location --fail ${mirror_url}/BaseOS/x86_64/os/images/pxeboot/initrd.img > initrd.img.install
# curl --location --fail ${mirror_url}/BaseOS/x86_64/os/images/pxeboot/vmlinuz > vmlinuz.install
# popd
# echo mpt3sas-be2net-kmod.iso |cpio -c -o >> /boot/initrd.img.install 
2005 blocks

Now that we have injected .iso into initrd.img, we can reference it for anaconda/install process as /<name>.iso. Let's then just use kexec (usual) to remotely launch the install and use also VNC to see if everything is working : network should respond and be configured, and then we'll be able to see storage too.

# pushd /boot
# yum install -y kexec-tools
# kexec -l vmlinuz.install --append="net.ifnames=0 biosdevname=0 ksdevice=eth2 inst.repo=http://mirror.centos.org/centos/8/BaseOS/x86_64/os/ inst.lang=en_GB inst.keymap=be-latin1 inst.dd=/mpt3sas-be2net-kmod.iso inst.vnc inst.vncpassword=DuDTest ip=172.22.0.16 netmask=255.255.254.0 gateway=172.22.1.254 nameserver=172.22.0.1 hostname=test.ci.centos.org pcie_aspm=off" --initrd=initrd.img.install && kexec -e

From that point it is like described in the previous link about kexec and kick a reinstall : kernel boots, loads initrd.img (but this time we see the DuD iso image being loaded and then it starts anaconda as usual. We can from there connect over vnc to finish the install (we have network and hba kernel module loaded and able to configure hardware)

Once machine is installed and rebooted, we can just ssh into it and clearly we can see that both rpm/kmods were installed ok (otherwise, no network nor storage and of course no install :) )

# modinfo mpt3sas|egrep 'filename|signer'
filename:       /lib/modules/4.18.0-193.14.2.el8_2.x86_64/weak-updates/mpt3sas/mpt3sas.ko
signer:         ELRepo.org Secure Boot Key
# modinfo be2net|egrep 'filename|signer'
filename:       /lib/modules/4.18.0-193.14.2.el8_2.x86_64/weak-updates/be2net/be2net.ko
signer:         ELRepo.org Secure Boot Key
# rpm -qa|grep elrepo
kmod-be2net-12.0.0.0-5.el8_2.elrepo.x86_64
kmod-mpt3sas-28.100.00.00-3.el8_2.elrepo.x86_64
# yum installl -y elrepo-release

Of course, as shown above, don't forget to also install elrepo-release pkg, to then access newer kmods when needed, in case of a rebase between major.minor releases.

Hope you found that useful in case you need to upgrade working hardware but with deprecated drivers in the CentOS 8 kernel.

Lancement d’une campagne de crowfunding pour précommander mon premier roman de science-fiction.

Alors que je discutais vulgarisation blockchain et cryptomonnaies avec Ludom, le fondateur de la jeune maison d’édition suisse PVH, il m’a brusquement demandé s’il m’arrivait d’écrire autre chose que du technique.

Il avait en effet lancé la collection « Ludomire » consacrée à la littérature de l’imaginaire et cherchait à agrandir son catalogue. Je l’ai immédiatement redirigé vers mon feuilleton Printeurs que mes lecteurs les plus fidèles connaissent bien. Une histoire que vous êtes nombreux à m’avoir demandée au format papier.

Ludom a été immédiatement séduit à la condition que je retravaille le texte pour transformer un feuilleton en véritable roman. Après de longs mois de relectures, de réunions en visioconférence, de modifications profondes de certains personnages et l’écriture de deux nouveaux chapitres, j’ai le plaisir de vous annoncer que Printeurs sortira en novembre.

Cependant, Ludom voulait garder l’esprit OpenSource/Fablab du roman jusque dans le processus d’édition. Il a alors eu l’idée de réaliser une campagne de crowdfunding pour « libérer » Printeurs. Si nous prévendons 150 exemplaires, les fichiers définitifs servant à l’impression du roman seront distribués sous licence Creative Commons. Tout le monde pourrait alors imprimer sa propre version de Printeurs. En 3D. Enfin, presque, mais je trouvais que le titre sonnait bien.

La campagne Printeurs sur Ulule.

Cette campagne de crowdfunding est également particulièrement importante pour le futur de Printeurs et des éditions PVH. Alors que les livres PVH rencontrent un franc succès en Suisse, il est impossible de trouver ses ouvrages dans les librairies belges et françaises. Les réseaux de distribution sont en effet réticents à signer des contrats avec de jeunes maisons d’édition, forçant ces dernières à se rabattre sur Amazon.

Ludom et moi-même croyons encore en la force du réseau des libraires. Nous souhaitons, si possible, éviter de nourrir l’ogre Amazon. Une belle campagne de crowdfunding serait un extraordinaire atout de négociation avec les distributeurs en France et en Belgique.

Si la campagne se passe bien, Ludom est également déjà intéressé par publier mes prochains romans. Comme j’ai très envie de les écrire et de vous les partager, je croise les doigts !

Merci de partager cette campagne auprès de tous les amateurs de science-fiction et de littérature autour de vous. Cela n’a l’air de rien, mais vous êtes en train de m’aider à lancer ma carrière d’écrivain. Un rêve que je caresse depuis ma plus tendre enfance…

Merci et, n’oubliez pas le lien Ulule.

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

September 03, 2020

I published the following diary on isc.sans.edu: “Sandbox Evasion Using NTP“:

I’m still hunting for interesting (read: “malicious”) Python samples. By reading my previous diaries, you know that I like to find how attackers implement obfuscation and evasion techniques. Like yesterday, I found a Python sample that creates a thread to run a malicious shellcode[1]. But before processing the shellcode, it performs suspicious network traffic… [Read more]

The post [SANS ISC] Sandbox Evasion Using NTP appeared first on /dev/random.

Quelques liens en vrac que vous pouvez lire sans vous connecter aux réseaux sociaux.

Je souhaite me libérer le plus complètement possible des réseaux sociaux et des plateformes propriétaires. Pourtant, je continue à y poster des lectures que je trouve intéressantes à partager mais pour lesquelles je ne prends pas la peine d’écrire un article de blog. Dommage. Pour tenter de remédier à cette situation, je tente l’expérience de poster régulièrement des billets de liens en vrac (inspirés entre autres par Tristan Nitot).

Small Web

Ce retour aux sites personnels semble être une tendance de fond assez forte, appelée parfois « Small Web » :

Personnellement, je vous recommande de me suivre par RSS. J’envisage également de lancer une newsletter qui enverrait automatiquement mes billets dans votre boîte mail. Si cela vous intéresse, inscrivez-vous sur la page d’accueil de ce blog (tout en haut).

Déconnexion

  • Ray Bradbury critiquait déjà l’hyperconnexion. Visionnaire et à la fois hyperconservateur. Nos enfants seront certainement immunisés contre cette hyperconnexion qui me dérange tant.
  • How to Destroy Surveillance Capitalism, par Cory Doctorow. Un livre en ligne (ou un très long article), ironiquement publié sur Medium mais qui résume tout ce que vous devez savoir sur le sujet. Brillant, écornant au passage Zouboff. Doctorow prend en compte ce phénomène de résilience, d’adaptation de l’humain, chose que nous avons tendance à perdre et oublier en vieillissant. À lire absolument (Attention, ne s’affiche pas complètement dans Pocket).
  • Les machines à écrire connectées. Ce projet n’est qu’un parmi les dizaines que j’ai vu passer ces derniers mois. J’écris moi-même sur un Astrohaus Freewrite qui est ce qui se rapproche le plus. Mais le logiciel propriétaire, plein de bugs, lié à un cloud propriétaire est très fatiguant. Je rêve de lancer ma propre startup de production de machine à écrire avec écran e-ink et OS ouvert permettant d’écrire, de programmer, de compiler, de répondre à ses mails sans être distrait par une connexion permanente. Je planche sur le sujet depuis plus d’un an, j’en rêve !
  • Tout ça car on a oublié que l‘Internet devrait être construit pour ses utilisateurs.

Société

  • Même les États-Unis deviennent de moins en moins religieux. De manière intéressante, le degré de religiosité d’un pays est directement corrélé avec le degré de corruption. Mais on se rend compte que la religion a surtout pour objectif de réduire les femmes à un rôle de reproductrices dans des sociétés où la survie de l’espèce est menacée. Comme disait Asimov (je paraphrase de mémoire) : « Si être maman était une aspiration tellement nécessaire pour les femmes, les religions et les gouvernements n’auraient pas besoin de le répéter à longueur de journée. »
  • Diriger un gouvernement comme on dirige un business est la pire erreur. Tout simplement parce qu’un business peut faire faillite. Le business ou ses membres pourront alors être aidés par le gouvernement. Mais si le gouvernement fait faillite ? (Je recommande le blog de Doug Belshaw).
  • Thierry Crouzet sur l’abus des masques et l’oubli de l’hygiène des mains. Faut bien avouer que porter un masque toute la journée dans la rue et de voir les gens l’enlever pour fumer une clope ou pour se parler, ça me fait dire que la mesure est loin d’être la panacée !
  • Everything I know, des retranscriptions de longues conférences de Buckminster Fuller. Je suis dans la seconde session.

Bonnes lectures à tou·te·s et bonne rentrée !

Photo by Alfons Morales on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

September 02, 2020

A Wi-Fi enabled microcontroller such as the ESP32 or ESP8266 has a lot of applications, but if you use a development board, the result doesn't really look appealing in your living room, unless you spend some effort in creating your own case.

Enter M5Stack, a young Chinese company that offers a lot of ESP32-based products that don't look like development boards but like finished products. I first encountered them two years ago when I discovered their M5Stack Core BASIC Kit: a modular, stackable, ESP32 board with a 2 inch LCD screen, all in a package that doesn't look bad in your living room. I bought one and turned it into a dashboard for my MQTT-based home automation system: it could read the temperature and humidity of various sensors in my home by subscribing to the corresponding MQTT messages and showing them on the screen.

M5Core2, the newest ESP32 product of M5Stack

Now M5Stack has sent me their newest product: the M5Core2. It has more RAM, a touch screen, a real-time clock and even a microphone. This looks like an even better dashboard for my home automation system, adding a lot of possibilities.

Although from time to time you still bump into Chinese data sheets or code comments, I noticed that M5Stack's documentation and code has improved considerably since I last checked it for the first generation of this product. For the new M5Core2 there's:

I'm definitely going to experiment with this device and see how I can integrate this in my home automation system. I can reuse a lot of existing Arduino libraries, and together with the M5Core2 Arduino library it should be fairly straightforward to come up with a prototype.

Some specifications:

ESP32-D0WD-V3

240 MHz dual core, 600 DMIPS, 520 KB SRAM, Wi-Fi, dual mode Bluetooth

Flash

16 MB

PSRAM

8 MB

Input Voltage

5 V @ 500 mA

Interface

TypeC x 1, GROVE (I²C + I/O + UART) x 1

IPS LCD Screen

2.0"@320*240 ILI9342C

Touch Screen

FT6336U

Speaker

1W-0928

LED

Green power indicator light

Button

Power button, RST button, Virtual screen button x 3

Vibration reminder

Vibration motor

MIC

SPM1423

I2S Power Amplifier

NS4168

6-axis IMU

MPU6886

RTC

BM8563

PMU

AXP192

USB Chip

CP2104

DC-DC Boost

SY7088

TF card slot

16 GB max

Lithium Battery

390m Ah @ 3.7 V

Antenna

2.4 GHz 3D antenna

Operating temperature

0°C to 40°C

Net Weight

52 g

Gross Weight

70 g

Product Size

54 mm x 54 mm x 16 mm

Package Size

75 mm x 60 mm x 20 mm

Case Material

Plastic

I published the following diary on isc.sans.edu: “Python and Risky Windows API Calls“:

The Windows API is full of calls that are usually good indicators to guess the behavior of a script. In a previous diary, I wrote about some examples of “API call groups” that are clearly used together to achieve malicious activities. If it is often used in PowerShell scripts, here is an interesting sample in Python that uses the same technique. It calls directly Windows API though ‘ctypes’… [Read more]

The post [SANS ISC] Python and Risky Windows API Calls appeared first on /dev/random.

screenshot of the arbitrary file upload fix on github. quite happy with my work thereWith Autoptimize 2.7.7 released on August the 23rd and having been pushed to all sites that were still on 2.7.0-2.7.6 by the WordPress plugins team on Aug. 30th and 31th, resulting in just under one million downloads in 8 days time, it is now the moment for a small debrief of the security issues that were fixed in this version.

2.7.7 fixed two vulnerabilities, one authenticated cross-site scripting and one arbitrary file upload.

  1. XSS:
    1. Problem: administrator users were able leave JavaScript in the exclusion-fields for CSS and JS optimization, leading that JS to be executed when the page was (re-)loaded.
    2. Risk: This could be abused by one administrator to execute JS against another administrator.
    3. Solution: This was fixed by applying esc_html (to become esc_attr in the next version as suggested by George Stephanis) to escape the JS-code and avoid it getting executed.
  2. Arbitrary File Upload:
    1. Problem: the code that processes Critical CSS settings imports did insufficient checks to ensure no malicious files were uploaded as it lacked a user capability check, did not check file extension of to uploaded file to be zip and did not check the contents of the zip-file. It did however check for a correct nonce for that specific action.
    2. Risk: this could lead to authenticated attackers uploading PHP-files that could be executed, but that risk was very much limited by the nonce-check (which all exploits I have seen happily ignore).
    3. Solution: the code has been updated to do a capability check, to make sure the file uploaded is a zip-file and most importantly to delete any unknown file found immediately after unzipping (based on an list of known-good files).

A big thank you to the two security researchers (Erin Germ for the XSS and an anonymous whitehatter for the file upload problem) who reported these vulnerabilities in a responsible manner and to the WordPress plugin team for their invaluable help in keeping our users safe.

August 31, 2020

FOSDEM 2021 will take place on Saturday 6 and Sunday 7 February 2021 as an online event. Please bear with us while we work out the specifics. Further details and calls for participation will be announced in the coming weeks.

Recently I wanted to test how a Python program behaved with various combinations of command-line arguments.

Thanks to pytest's mocker fixture, this is easy to do:

def test_arguments_from_cli(mocker):
    """Test whether arguments from the command line are set up correctly in a HermesApp object."""
    mocker.patch(
        "sys.argv",
        [
            "rhasspy-hermes-app-test",
            "--host",
            "rhasspy.home",
            "--port",
            "8883",
            "--tls",
            "--username",
            "rhasspy-hermes-app",
            "--password",
            "test",
        ],
    )
    app = HermesApp("Test arguments in init", mqtt_client=mocker.MagicMock())

    assert app.args.host == "rhasspy.home"
    assert app.args.port == 8883
    assert app.args.tls is True
    assert app.args.username == "rhasspy-hermes-app"
    assert app.args.password == "test"

You just patch the sys.argv variable with the command-line arguments you want to test your program with. This variable is a list of strings representing the arguments as separated by a space, and with the command's name as the first element. So this example function patches sys.argv to behave as if the test function is running in a command you started as follows:

$ rhasspy-hermes-app-test --host rhasspy.home --port 8883 --tls --username rhasspy-hermes-app --password test

In this case the HermesApp object uses the argparse library to populate some attributes with values from sys.argv, such as host, port, tls, username and password. The function test_arguments_from_cli tests whether these attributes are initialized correctly. But you can use the same approach if you have a main function for your command that reads your command-line arguments.

If you want to test other combinations of command-line arguments, you just add another test function that patches sys.argv with another list of arguments. All these test functions are executed independently with their own patched argument list.

August 28, 2020

I published the following diary on isc.sans.edu: “Example of Malicious DLL Injected in PowerShell“:

For a while, PowerShell remains one of the favorite languages for attackers. Installed by default (and almost impossible to get rid of it), powerful, perfectly integrated with the core operating system. It’s very easy to develop specific PowerShell functions that will provide interesting features for an attacker but, if written in PowerShell, they could easily ring a bell for the defenders (example: by using many suspicious API calls). Another technique to expand the language with more functions is just to load a DLL! I found a sample that exfiltrates data from the victim’s computer… [Read more]

The post [SANS ISC] Example of Malicious DLL Injected in PowerShell appeared first on /dev/random.

August 26, 2020

I published the following diary on isc.sans.edu: “Malicious Excel Sheet with a NULL VT Score“:

Just a quick diary today to demonstrate, once again, that relying only on a classic antivirus solution is not sufficient in 2020. I found a sample that just has a very nice score of 0/57 on VT. Yes, according to all AV’s the file is safe. Really? If it matched one of my hunting rules, there is for sure something suspicious inside. Let’s have a look at it… [Read more]

The post [SANS ISC] Malicious Excel Sheet with a NULL VT Score appeared first on /dev/random.

August 25, 2020

I published the following diary on isc.sans.edu: “Keep An Eye on LOLBins“:

Don’t misread, I won’t talk about “lolcats” today but “LOLBins” or “Living Off The Land Binaries”. All operating systems provide a rich toolbox to achieve multiple day-to-day tasks like maintenance of the certificates, installation of patches and applications, management of files, and many more. Those tools are installed by default and available to all users without specific access rights (most of the time). Also very important, they are signed by the operating system so they are usually considered safe by default… [Read more]

(Source: https://www.slideshare.net/OddvarHlandMoe/lolbins-nothing-to-lol-about)

The post [SANS ISC] Keep An Eye on LOLBins appeared first on /dev/random.

Yesterday, a very interesting article was published on the MISP blog by my friend Koen about a solution to monitor a MISP instance with Cacti. Monitoring your threat intelligence platform is always a good idea because many other tools depend on it. You can feed other tools with MISP data and, if MISP is not running, you will probably break your detection capabilities!

Cacti is a great tool that I used in the past but for many reasons, I switched to another solution to monitor my infrastructure. My current setup is running on Centreon. Being a very old Nagios user for years, I like Nagios-alike solutions because you can quickly extend your monitoring tool by adding your own plugins written in any language. They just have to return the correct information to be processed by the engine. They are also many tools that ingest Nagios plugins as-is: Centreon, Icinga, Zabbix, etc…

Koen’s blog article gave me the idea to do the same but… based on Nagios plugins. I wrote (well, I copy-pasted Koen’s code) two Python scripts to fetch useful data from a MISP instance:

./check_misp_workers.py -h
usage: check_misp_workers.py [-h] [-u MISPURL] 
           [-k MISPKEY]
           [-w MISPWARN]
           [-c MISPCRIT]

Nagios compatible plugin to monitor MISP workers

optional arguments:
-h, --help show this help message and exit
-u MISPURL, --url MISPURL
MISP URL
-k MISPKEY, --key MISPKEY
MISP API Key
-w MISPWARN, --warning MISPWARN
MISP Warning Threshold
-c MISPCRIT, --critical MISPCRIT
MISP Critical Threshold

# ./check_misp_stats.py -h
usage: check_misp_stats.py [-h] 
           [-u MISPURL] 
           [-k MISPKEY] 
           [-w MISPWARN]
           [-c MISPCRIT]

Nagios compatible plugin to monitor MISP events/attributes

optional arguments:
-h, --help show this help message and exit
-u MISPURL, --url MISPURL
MISP URL
-k MISPKEY, --key MISPKEY
MISP API Key
-w MISPWARN, --warning MISPWARN
MISP Warning Threshold
-c MISPCRIT, --critical MISPCRIT
MISP Critical Threshold

The first plugin returns the status of MISP workers and triggers an alter is one or more workers are dead (which is a classic issues with MSIP ;-). The second one returns useful statistics about the MISP instance: Events, attributes, users and organisations. It triggers an alert when there is a peak of attributes created (which can also lead to performance issues).

Here is what it looks like in my Centreon:

The scripts are available in my Github repository:

https://github.com/xme/toolbox/blob/master/check_misp_stats.py
https://github.com/xme/toolbox/blob/master/check_misp_workers.py

If you compare my monitoring with the one implemented in Cacti, there is less information (no CPU, memory, etc) because my MISP instance is running in a Docker and I’m monitoring the health at the Docker engine level!

The post Monitoring MISP with Nagios appeared first on /dev/random.

August 24, 2020

I published the following diary on isc.sans.edu: “Tracking A Malware Campaign Through VT“:

During the weekend, I found several samples from the same VBA macro. The only difference between all the samples was the URL to fetch a malicious PE file. I have a specific YARA rule to search for embedded PowerShell strings and my rule fired several times with the same pattern and similar size. Here is the pattern… [Read more]

The post [SANS ISC] Tracking A Malware Campaign Through VT appeared first on /dev/random.

For my Rhasspy voice assistant I use the Seeed ReSpeaker 2-Mics Pi HAT on a Raspberry Pi: it's cheap and has two on-board microphones, so you only need to a add a speaker to use it for voice projects.

The drivers are open source and they can be installed easily from the respeaker/seeed-voicecard repository together with supporting systemd services. However, every time you reboot your Raspberry Pi, the playback volume is set to its maximal value, so the feedback sounds and replies from your voice assistant echo through the whole house.

I never bothered to change this behaviour, but when someone on the Rhasspy forum asked about it yesterday (Rhasspy with respeaker 2 hat starts with highest playback volume) I decided to dive into the details.

It turns out that the seeed-voicecard.service systemd script removes your system's asound.conf and asound.state at each boot, replacing them by its default files.

If you know this and read the /usr/bin/seeed-voicecard shell script, the solution for the state file (containing your volume settings) is simple: let the ALSA service store to and restore from this file installed by the Seeed driver, /etc/voicecard/wm8960_asound.state. Have a look at the alsa-restore.service file:

$ systemctl cat alsa-restore.service
# /lib/systemd/system/alsa-restore.service
#
# Note that two different ALSA card state management schemes exist and they
# can be switched using a file exist check - /etc/alsa/state-daemon.conf .
#

[Unit]
Description=Save/Restore Sound Card State
Documentation=man:alsactl(1)
ConditionPathExists=!/etc/alsa/state-daemon.conf
ConditionPathExistsGlob=/dev/snd/control*
After=alsa-state.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=-/usr/sbin/alsactl -E HOME=/run/alsa restore
ExecStop=-/usr/sbin/alsactl -E HOME=/run/alsa store

You need to change the latter two lines. So edit the service file to override these lines:

$ sudo systemctl edit alsa-restore.service

Then add the following lines containing the filename of the Seeed driver's asound state file:

[Service]
ExecStart=
ExecStart=-/usr/sbin/alsactl -E HOME=/run/alsa -f /etc/voicecard/wm8960_asound.state restore
ExecStop=
ExecStop=-/usr/sbin/alsactl -E HOME=/run/alsa -f /etc/voicecard/wm8960_asound.state store

The empty ExecStart and ExecStop commands are needed because you want to replace the original commands instead of adding extra commands.

Reload the systemd configuration after your changes:

$ sudo systemctl daemon-reload

Then reboot. After this, every change you make to the ALSA mixer (for instance with the alsamixer command) will be saved when your Raspberry Pi shuts down and reloaded when it boots, so it always uses the volume you have set.

Note

If you don't need your changes to the ALSA mixer to be stored automatically, you can ignore the previous steps and just store the state manually every time after you change it: sudo alsactl -f /etc/voicecard/wm8960_asound.state store.

August 23, 2020

Lorsque j’ai travaillé dans l’industrie du Web, j’avais coutume de dire que les clients voulaient un bouton pour faire A, un bouton pour faire B, un bouton pour faire C, un bouton pour faire D, mais, surtout, surtout, une interface simple avec un seul bouton.

Je croyais qu’il s’agissait avant tout de maladresse dans un domaine où, après tout, c’était moi le professionnel.

Mais je crois à présent qu’il s’agit d’une partie essentielle de la psyché humaine : nous ne savons pas ce que nous voulons !

Nous croyons savoir. Nous avons l’intuition que c’est simple. Jusqu’au moment où nous devons nous confronter à la réalité. J’aimerais vivre à la campagne, loin du bruit, mais disposer de toutes les facilités sans devoir prendre la voiture. J’aimerais une maison petite et minimaliste avec un grand salon, une bibliothèque, une cuisine ouverte, un bureau séparé, une chambre d’amis. J’aimerais être reconnu pour ma réussite professionnelle, consacrer du temps à ma famille, mais, surtout, avoir du temps pour mes projets personnels.

Nous avons tous nos rêves, nos espoirs, nos idéaux. Ils nous poussent à avancer, ils nous font espérer. Lorsque nous n’avons pas le choix, nous envions, nous idéalisons, mais nous ne sommes jamais confrontés à nos paradoxes ou au prix à payer.

Nous avons tous déjà eu l’expérience d’avoir une idée géniale sans pour autant l’exprimer, sans arriver à la communiquer, la mettre en pratique. Cela arrive parfois au réveil ou, pour certains, lors de l’usage de stupéfiants. L’idée est pourtant parfaite, géniale. Que manque-t-il ?

J’ai fini par accepter que je suis beaucoup moins génial que je ne le crois parfois. C’est ma capacité à percevoir les contradictions qui s’éteint. L’analytique rationnel s’étant endormi, l’intuitif trouve soudain l’idée exceptionnelle. Forcément : une maison à la campagne avec toutes les facilités accessibles, c’est génial. Un site web avec plein de fonctionnalités, mais un seul bouton, c’est génial. Ce n’est malheureusement pas réaliste.

C’est la raison pour laquelle les logiciels auront toujours des bugs. Un logiciel fait toujours exactement ce qu’on lui dit de faire. Mais aucun humain ne sait parfaitement ce qu’il veut du logiciel. L’humain communiquera toujours imparfaitement ses désirs, car ceux-ci sont une notion floue, changeante et contradictoire.

Jusqu’à la question ultime : quelle vie ai-je envie de vivre ?

S’il n’y avait aucune limite financière, voire familiale, quelle serait ma vie de rêve ? Non pas comme un concept flou ( « Je rêve d’être écrivain et scénariste de films » ), mais comme un plan réaliste, au jour le jour ?

Je ne sais pas. Je pense que personne ne le sait.

C’est peut-être pour ça que les gens riches et célèbres ne sont pas épargnés, bien au contraire, par la dépression et le suicide. C’est peut-être pour ça que des multimilliardaires continuent à aller travailler tous les jours dans un bureau au lieu de vivre des vacances permanentes qui font fantasmer ceux qui ne peuvent s’en offrir qu’une ou deux semaines par an. C’est peut-être pour cela que les travailleu·r·se·s affirmaient tou·te·s vouloir passer plus de temps avec leur famille jusqu’à ce que le lockdown du coronavirus nous démontre que c’était très souvent un enfer.

C’est lorsqu’on touche un de ses rêves du bout des doigts, lorsqu’il nous semble accessible qu’il nous apparait soudainement dans sa réalité crue, dans son imperfection.

Le prix à payer nous saute aux yeux. Les contradictions nous frustrent. On en vient même à regretter le temps où le rêve était inaccessible, où il n’était que cela… un rêve.

On nous a appris à croire en nos rêves, mais ce n’est pas vrai. Les rêves mentent. Ce sont de beaux mensonges cependant. Ils nous font vibrer. Il faut les savourer. Les artistes et les poètes ne font pas autre chose que nous donner l’impression qu’ils ont compris nos rêves, qu’ils nous aident à les partager. Ce sont des menteurs professionnels et nous les admirons pour cela.

Toute la société actuelle est basée sur ce mensonge. Nous ne payons pas pour des solutions à nos problèmes. Nous payons pour un rêve entretenu par les vendeurs, le marketing voire l’ingénieur qui prétend écouter le problème du client. Nous payons pour les remercier d’avoir entretenu un rêve qui nous a été imposé.

La réelle liberté ne serait-elle pas d’arriver à reconstruire ses propres rêves ? Des rêves personnels, individuels ? Mais en sommes-nous encore seulement capables ?

Pour sauver le monde, nous devons réapprendre à construire nos rêves plutôt que de se laisser imposer ceux qui servent l’intérêt des autres. Nous devons réapprendre à payer le véritable prix de nos rêves. À nous passer de l’exposition permanente aux rêves des autres dans laquelle nous nous engluons. À considérer la réalité de nos souhaits les plus profonds plutôt que les désirs instagramables que nous souhaitons provoquer chez les autres.

Nous devons apprendre à nous poser des questions incroyablement difficiles : comment ai-je envie de vivre les quelques centaines de millions de secondes qu’il me reste ? Et quel prix suis-je prêt à payer pour cela ?

Photo by Noah Silliman on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande jusqu'au 24 septembre. Si vous avez apprécié ce texte, n'hésitez pas à me soutenir sur Paypal, en achetant et diffusant mon livre autour de vous et en vous abonnant à mes billets. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

Ce texte est publié sous la licence CC-By BE.

August 20, 2020

The earth is a cube. It’s a Pyrite crystal that didn’t stop growing. Here is the earth scaled to my size:

Square earth. Well a cube, even

I’m telling you; it’s Pyrite cubes all the way down.

Een opensource stemassistent zoals Rhasspy die volledig offline werkt, is een hele krachttoer. Een zwak punt van Rhasspy is dat de Nederlandse spraaksynthese nogal robotachtig klinkt. Dat is te wijten aan het standaard gebruikte TTS-systeem eSpeak. Probeer dit maar eens uit:

$ espeak -v nl "Welkom in de wondere wereld van spraaksynthese"

Het doet me altijd wat denken aan Howard die in The Big Bang Theory de computerstem van Stephen Hawking imiteert. Leuk voor een keer, maar daar wil je niet de hele dag naar luisteren...

Rhasspy ondersteunt voor het Nederlands ook Google WaveNet, maar dat vereist een Google-account en stuurt elke nieuwe zin die je wilt laten uitspreken naar Google. Dat past dus niet in een offline oplossing.

Buiten wat onderzoeksprojecten waarvan me niet duidelijk is of ze nog onderhouden worden, ken ik geen ander opensource offline spraaksyntheseprogramma dat out-of-the-box Nederlands ondersteunt en een goede kwaliteit haalt.

Hulp gevraagd

Michael Hansen, de hoofdontwikkelaar van Rhasspy, wil aan een oplossing werken door een model voor Mozilla TTS te trainen voor het Nederlands. Maar voor zo'n model heb je een audiocorpus nodig van tekst met de overeenkomstige spraak. En Michael roept daarom nu de hulp in van vrijwilligers met als moedertaal Nederlands.

Hij ziet de volgende opties:

  1. Gebruik een audiocorpus met vrije licentie dat voor elke zin een audiobestand met de overeenkomstige spraak aanbiedt. Audioboeken zoals die van LibriVox zijn dus niet geschikt omdat die per hoofdstuk opgesplitst zijn.

  2. Maak zelf een geschikt audiocorpus aan. Michael bezorgt je dan een fonetisch gebalanceerde verzameling zinnen die je voorleest, samen met een programma dat je spraak op de correcte manier opneemt. Je hebt wel een kwalitatieve microfoon nodig.

Ken je een geschikt audiocorpus of wil je je stem uitlenen om de Nederlandse stem van Rhasspy te worden? Reageer dan zeker in het forum van Rhasspy of spreek me via e-mail of Twitter aan.

Over the last few years, I’ve gradually been increasing my font size in my terminal, editor and wherever possible.

August 19, 2020

Groots afscheid van zijn moeder, vol kleine en grote herinneringen. Volgens de schrijver zelf lang uitgesteld maar met een sterke drang geschreven (Go Johnny, Go!). Over (over)acteren, de middenstand, de mater familias, taal, het mooie en het lelijke van leven tot aan het bittere/ verlossende einde.

I published the following diary on isc.sans.edu: “Example of Word Document Delivering Qakbot“:

Qakbot is back on stage at the moment! Many security companies already reported some peaks of activity around this malware. On my side, I also spotted several samples. The one that I’ll cover today has been reported by one of our readers (thanks to him) and deserves a quick analysis of the obfuscation used by the attackers. It is not available on VT at this time… [Read more]

The post [SANS ISC] Example of Word Document Delivering Qakbot appeared first on /dev/random.

Met slimme assistenten zoals Google Assistant, Amazon Alexa en Apple Siri geef je opdrachten met je stem. Leuk, maar je stemopnames worden wel naar de cloud gestuurd voor verwerking. Met een Raspberry Pi en de opensourcesoftware Rhasspy kun je stembesturing volledig lokaal realiseren, zelfs zonder internet. Je stemopdrachten koppel je dan aan Node-RED of een domoticasysteem zoals Home Assistant, en dat zonder dat Google, Amazon of Apple de hele tijd meeluistert. Zelfs in het Nederlands.

Rhasspy is geen afgewerkte spraakassistent zoals voorgaande voorbeelden. Het is eigenlijk een toolkit waarmee je zelf je eigen spraakassistent ontwikkelt. Meer voor de doe-het-zelvers dus, maar als je al een eigen domoticasysteem zoals Home Assistant hebt draaien, zal dit je zeker niet afschrikken. Na de configuratie heb je een systeem dat audio omzet in gestructureerde JSON-gegevens:

/images/rhasspy-audio-to-json.svg

Je bedoeling herkennen

Rhasspy herkent niet zomaar alles wat je zegt. Je dient zelf te definiëren welke zinnen Rhasspy moet verstaan en welke bedoeling (intent) hij daaraan geeft. Omdat deze herkenning specifiek op maat van jouw vereisten gebeurt, vereist dit geen clouddienst met grote verwerkingskracht, maar kun je Rhasspy perfect op een Raspberry Pi draaien.

Zo definieer je bijvoorbeeld een intent LightState die een toestand kent: aan of uit. Je vult dan zinnen in die deze intent weergeven, zoals "doe het licht aan". Als je dan die zin uitspreekt, komt de hele machinerie van Rhasspy in gang en krijg je als resultaat het JSON-fragment dat de herkende bedoeling op een gestructureerde manier weergeeft.

Daarop kun je dan Home Assistant, Node-RED of je eigen software laten reageren en bijvoorbeeld je apparaten via je stem laten aansturen. Rhasspy maakt gebruik van MQTT (Message Queuing Telemetry Transport) om boodschappen op je netwerk rond te sturen wanneer je hem geactiveerd hebt, wanneer hij een zin heeft herkend, wanneer een sessie voorbij is enzovoort. Je kunt dus in gelijk welke programmeertaal of gelijk welk domoticasysteem op die MQTT-boodschappen reageren en zelf MQTT-boodschappen sturen om functionaliteit van Rhasspy aan te spreken.

Aan de slag met Rhasspy

Wil je ook met Rhasspy aan de slag? Op de website van Computer!Totaal leg ik in het artikel Zo krijg je stembesturing op de Raspberry Pi uit hoe je met Rhasspy begint op een Raspberry Pi met luidspreker en microfoon. Op het einde van het artikel kun je spraakopdrachten in het Nederlands geven aan Rhasspy en kun je Node-RED daarop laten reageren (zie ook mijn artikel Node-RED: apparaten en diensten koppelen zonder code). Loop je tegen problemen aan? Bezoek dan zeker Rhasspy's forum eens, waar talloze behulpzame communityleden actief zijn (waaronder ikzelf).

Heeft de mogelijkheid om zonder clouddienst aan stembesturing te doen je geprikkeld? Lees dan zeker mijn boek Control Your Home with Raspberry Pi: Secure, Modular, Open-Source and Self-Sufficient. Zoals de ondertitel al zegt, is het zelfvoorzienende aspect een belangrijk principe van mijn aanpak in dit boek. Ik vind dat een domoticasysteem niet mag afhangen van externe diensten van bedrijven die er van de ene op de andere dag de brui aan kunnen geven, of die continu kunnen zien wat ik thuis doe. Voor stembesturing geldt dat nog meer: je wilt niet dat Google of een ander bedrijf meeluistert met wat er in je huis gebeurt, ook al is het per ongeluk.

Het hele hoofdstuk over stembesturing in mijn boek gaat dan ook over Rhasspy. Het gaat iets dieper in op enkele aspecten die in het artikel in Computer!Totaal minder of niet aan bod kwamen. Zo leg ik er uit hoe je één Raspberry Pi als basis opzet en één of meerdere als satellieten, zodat je op meerdere plaatsen in huis met Rhasspy kunt spreken. Ook andere manieren dan Node-RED om de opdrachten die je geeft te verwerken komen aan bod, zoals met Python (onder andere via AppDaemon). Het boek is in het Engels en de voorbeelden dus ook, maar dezelfde aanpak werkt ook perfect in het Nederlands.

August 18, 2020

I published the following diary on isc.sans.edu: “Using API’s to Track Attackers“:

For a few days, I’m keeping an eye on suspicious Python code posted on VT. We all know that VBA, JavaScript, Powershell, etc are attacker’s best friends but Python is also a good candidate to perform malicious activities on a computer. Even if Python isn’t installed by default, it’s easy to “compile” a Python script to make it portable via a PE file. There exists multiple tools to achieve this, my favorite being ‘pyinstaller’… [Read more]

Keeping an eye on suspicious Python code

The post [SANS ISC] Using API’s to Track Attackers appeared first on /dev/random.

August 14, 2020

Do you � the free and open web and do you want to ensure a non-profit can continue to play an important role? Do you use Firefox or use MDN (Mozilla Developer Network) to check up on JS or CSS or HTML syntax?

We do too and as from today Optimizing Matters will donate $20 monthly. If you use Autoptimize or Async JavaScript or WP YouTube Lyte then please, pretty please, consider donating at https://donate.mozilla.org too.

The Shelly RGBW2 is a nice Wi-Fi RGBW LED controller. 1 But I want to have open source firmware on as much devices as possible at home. So after playing with the original firmware for a while (for my book about self-hosted home automation) I decided to flash ESPHome on the device.

ESPHome doesn't list the Shelly RGBW2 as an officially supported device, but as it's built around an ESP8266, it should run the firmware fine. It's just a matter of finding the right firmware configuration and the right pins to connect the USB to TTL adapter cable to flash the firmware.

Finding the device pinout isn't an issue. Shelly has extensive documentation about the RGBW2 and neatly shows the pins under the header Flash/Debug:

/images/shelly-rgbw2-pins.png

However, connecting to the pin header is something else. While the Shelly 1 has a standard-size 2.54 mm pitch header that fits normal (Dupont) jumper wires, the RGBW2 (as well as the Shelly 2.5) has a 1.27 mm pitch header, which is considerably smaller. So you need some kind of adapter. 2

I found a number of solutions for this:

The latter looks like the nicest solution, but I had to order the 1.27 mm pitch header and I wanted to flash the device now, so I thought about the easiest way to create an adapter with the stuff I had lying at home.

After giving it some thought, I MacGyvered the following solution:

/images/shelly-rgbw2-crocodile.jpg

Yes, that's right, these are four crocodile clips and some thin wires put into the header.

The wires are leads I cut off two resistors. This gives you four wires, but you need to connect five pins. However, while flashing you have to pull GPIO0 to ground to start the boot loader in flash mode, so you can just fold one of the resistor leads and put one end in the GPIO0 hole and the other one in the GND hole. The folded wire is then connected to the white crocodile clip you see at the top.

The crocodile clips then connect to jumper wires that go into the breadboard, where the USB to TTL adapter is plugged in, and then connected to my computer to flash the device with the firmware.

This works, but you have to make sure that the resistor leads fit right into the header holes. After some wiggling, the esphome flasher recognized the serial connection, and the result was ESPHome on my RGBW2, which integrates nicely with Home Assistant.

And after this, you can apply OTA (over-the-air) updates of the ESPHome firmware, so you don't need the MacGyver adapter anymore.

1

The nice thing about Shelly is that they give you the choice: use their devices with their own cloud services, or use them completely self-hosted with your own home automation gateway on your local network, such as Home Assistant. Shelly's firmware has an HTTP API and also supports a subset of the features with MQTT.

2

Trust me, I tried to cram the jumper wires in the header. They really don't fit.

August 12, 2020

I'm on vacation this week, and was catching up on my RSS feed. I read that the Australian government content management system GovCMS has reported record traffic spikes this year due to COVID-19.

This caught my attention because GovCMS is a Drupal distribution — a version of Drupal developed as a cost-effective option for building government websites.

Today, 91 Australian government agencies use GovCMS. At the peak of the pandemic, the platform saw 2 billion hits per month, 100,000 pageviews per minute, and 187,000 concurrent users.

When I read that, I felt proud that Drupal is scalable, secure and accessible. I hope other Drupalists feel that way as well. One of the best ways to get more people to contribute to Drupal is by building software that people can be proud of.

The GovCMS numbers are just the tip of the iceberg. Drupal is not just being used by the Australian government – it's being used by thousands of federal, state and local governments around the world. Many of these government agencies are providing essential health information and other digital services during these trying times.

It's a powerful reminder of Drupal's impact, and why it's non-negotiable that we build Drupal so everyone can use it, and use it reliably.

August 11, 2020

Have you ever written a table without a header in Markdown? It turns out that most Markdown parsers don't support tables without headers.

When I wrote the page about my book Control Your Home with Raspberry Pi on this website, I wanted to list some specifications (title, publication date, number of pages, ...) in a table without a header. In reStructuredText, which I'm using for this website, the code for the table looks like this:

+----------------------+-------------------------------------+
| **Title**            | Control Your Home with Raspberry Pi |
+----------------------+-------------------------------------+
| **Author**           | Koen Vervloesem                     |
+----------------------+-------------------------------------+
| **Publication date** | 2020-08-17                          |
+----------------------+-------------------------------------+
| **Number of pages**  | 331                                 |
+----------------------+-------------------------------------+
| **Price**            | € 37.50                             |
+----------------------+-------------------------------------+
| **ISBN-13**          | 978-1-907920-94-3                   |
+----------------------+-------------------------------------+
| **ISBN-10**          | 1-907920-94-3                       |
+----------------------+-------------------------------------+
| **Publisher**        | Elektor International Media (EIM)   |
+----------------------+-------------------------------------+

This is rendered by Nikola, the static site generator I'm using, as:

Title

Control Your Home with Raspberry Pi

Author

Koen Vervloesem

Publication date

2020-08-17

Number of pages

331

Price

€ 37.50

ISBN-13

978-1-907920-94-3

ISBN-10

1-907920-94-3

Publisher

Elektor International Media (EIM)

This looks fine as a simple table without a header.

Now I wanted to do the same in Markdown in the corresponding GitHub repository with code examples. I could have written the README as a reStructuredText file, but I already created a README.md out of habit, so I tried to create the same table without header in Markdown. But apparently GitHub-flavoured Markdown and many other Markdown flavours don't support tables without headers.

That StackOverflow post linked above shows a hack that seems to work in many Markdown parsers, including in GitHub:

|    <!-- -->          |        <!-- -->                     |
|----------------------|-------------------------------------|
| **Title**            | Control Your Home with Raspberry Pi |
| **Author**           | Koen Vervloesem                     |
| **Publication date** | 2020-08-17                          |
| **Number of pages**  | 331                                 |
| **Price**            | € 37.50                             |
| **ISBN-13**          | 978-1-907920-94-3                   |
| **ISBN-10**          | 1-907920-94-3                       |
| **Publisher**        | Elektor International Media (EIM)   |

This adds HTML comment blocks in the header cells, which essentially adds an empty header row to the table. Unfortunately in GitHub the result looks a bit odd, with that compressed empty header row:

/images/markdown-table-without-header.png

This is literally an ugly hack. Of course I can just create an HTML table without a header in the Markdown file, as shown in one of the StackOverflow answers, but that defeats the purpose of using a more human-centered markup language. So now I have converted the README file from Markdown to reStructuredText. The result is rendered by GitHub as:

/images/rst-table-without-header.png

Just like I wanted. It's these small quibbles with Markdown all the time that strenghten my preference for reStructuredText as a markup language.

August 10, 2020

Toys

So I like electric unicycles which I basically regard as a revolution in personal transportation. They are quick, switch easily between riding and walking, and consume very little space. My Inmotion V10 served me well for 4000 km, but its limited range of 30km was getting me on my nerves, especially during summer times, where multiple charging sessions were needed during a day. But apart from that, I really enjoyed riding this thing.

Looking around for a new wheel was easy and yet very difficult. I wanted a recent 1500+Wh model, so that limited the choice between the KS16X and the Nikola. It took me months to decide between both. Both are very fine wheels, but the reports about the water- and dust inlet of the KS16X let me skip this wheel (someone remembers the waterproofing issues of the V10 some months after launch ? I really needed a wheel which I can occasionally drive through some rain without fear of having a brick few days later). Shame, I really really like the looks of the KS16X, definitively the better looking wheel of those 2, it reminds me of the Z10 with those fantastic LEDs.

I initially was looking at the Nikola+ 2100Wh, but put it down as I feared for the sheer weight (my daily commute has a fairly amount of steps). As the 100V 21700 model came it out with its double battery pack, it meant better stability and lesser weight, so I was sold.

The wheel performs marvellously : riding it feels like a magic carpet, and my range has been increased from 30 km to 70 on a single charging session. It's also super stable, with only a few wobbles at high speed, mostly due to badly positioned feet on the pedals. The most noticeable disadvantage is the stock CST tire, which has a nagging desire to stay upright, even when taking turns (the so-called gyro effect). This implies leaning horribly to the left or right (like on a motor cycle) which feels a bit eerie, especially at high speeds.

Mobile phones

So on my last flight to Las Vegas, either I lost my phone, or someone stole it from me at the airport, something I only noticed hours afterwards. Nothing showed up in the lost items department, so the theft option is real. So I found myself suddenly without phone, and had to revert using the Xiaomi Mi Mix with its cracked screen. Nothing wrong, as this is a fantastic phone (I really really love the width of the screen), but its annoyances drove me to look out for another phone.

I spotted the OP7Pro at Amazon with a 200€ discount, which arrived eventually in my hands. Lovely phone (my 3rd OnePlus device already !), gorgeous screen, a bit on the heavy side. I liked OxygenOS with its Android 10 version, and at that time, LineageOS 17 wasn't available yet for this device, so no reinstall for this device.

This will probably be my last OnePlus device, as the price keeps on increasing, and I apparently am not able to keep a phone from falling/being stolen during 18 months. I really love the brand (my 7 year old Oneplus One is still being used by my wife), but it's moving away out of my financial zone of comfort. Spending a biyearly 500 bucks for phones hurts my wallet too much; I don't need a flagship phone, midrange will suit me very well.

August 09, 2020

PowerPC Notebook

powerpc noetbook

I prefer RISC as a CPU architecture over CISC. RISC is a simpler design that should deliver more CPU performance with fewer transistors and is more power-efficient. We have to recognize that Intel and AMD have made great progress in increasing the performance and efficiency of the x86 CISC architecture.

But the x86 architecture comes with a FreeDOM cost, Intel has the Intel Management Engine and closed Proprietary software is required to initialize the components. The same can be said about AMD; AMD has the AMD Platform Security Processor and binary blobs are required.

Power is currently the most powerful alternative that doesn’t require binary blobs; this is not only great for free/open source activists. A truly open-source firmware that can be reviewed / audited is also for nice security reasons.

For these reasons; I support the PowerPC notebook initiative: https://www.powerpc-notebook.org. This project tries to design an open-hardware PowerPC notebook, the schematics are already completed and available at GitLab: https://gitlab.com/power-progress-community/oshw-powerpc-notebook/powerpc-laptop-mobo.

There is a donation campaign running by the project to complete the PCB design at: https://www.powerpc-notebook.org/campaigns/donation-campaign-for-pcb-design-of-the-powerpc-notebook-motherboard/.

If this project interest you, you might consider donating to it.

Have fun!

August 06, 2020

I published the following diary on isc.sans.edu: “A Fork of the FTCode Powershell Ransomware“:

Yesterday, I found a new malicious Powershell script that deserved to be analyzed due to the way it was dropped on the victim’s computer. As usual, the malware was delivered through a malicious Word document with a VBA macro. A first observation reveals that it’s a file less macro. The malicious Base64 code  is stored in multiples environment variables that are concatenated then executed through an IEX command… [Read more]

The post [SANS ISC] A Fork of the FTCode Powershell Ransomware appeared first on /dev/random.

/images/heavy_reading.jpg

Ik wist dat ik zware lectuur in mijn boekenkast had staan, maar dit beeld in mijn thuiskantoor verraste me zonet. Toevallig was het een van de boekenplanken met wiskundeboeken. 1

1

Eigenlijk brak de plank door wat je niet ziet op deze foto: de stapel tijdschriften die voor de rij boeken stond en nu op de vloer door de hele kamer ligt.

/images/heavy_reading.jpg

I knew I had some heavy reading on my bookshelf, but I was just surprised by this view in my home office. Coincidentally, it was one of the mathematics shelves. 1

1

Actually, the shelf broke by what you don't see in this picture: the stack of magazines that stood in front of the row of books and is now lying on the floor all around the room.