Planet Grep

Planet'ing Belgian FLOSS people

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

October 27, 2020

Acquia Engage took place last week. For the first time in seven years, it was an all-virtual event.

Dries standing in a virtual conference lobby.
The virtual conference lobby of Acquia Engage, modeled after our Boston office's lobby.

The best way to learn about what Acquia has been up to, is to watch the recording of my opening keynote. In 30 minutes, I cover 10 major updates to Acquia's Digital Experience Platform. We packed the presentation with short product demos. You can also download a copy of my slides (65 MB), but you won't get to see the demos.

Acquia Drupal Cloud updates

First, I talked about new features for Acqiua's Drupal Cloud. All features are focused on helping developers migrate, develop, design and launch Drupal sites faster.

I covered the following new features for Acquia's Drupal Cloud:

  • Acquia Migrate: A family of products that help you migrate to Drupal 9 five times faster and easier.
  • Acquia Cloud IDE: A cloud-based development environment optimized for Drupal and Acquia.
  • Acquia CMS: An easy, out-of-the-box distribution of Drupal 9. It comes pre-integrated with Acquia's products.
  • Acquia Site Studio Page Builder: A new page builder for Acquia's low-code/no-code website building tool. It's optimized for marketers and content creators.
  • Acquia Cloud Next: A container-based cloud hosting environment optimized for speed, scale and security.

Acquia Marketing Cloud updates

Next, I covered new Marketing Cloud features. Marketers today are using more and more tools to get their jobs done. Unfortunately, many of these tools are not well-integrated. This lack of integration results in siloed customer information and inefficient marketing. Ultimately these silos lead to poor customer experiences. Acquia Marketing Cloud solves these problems by eliminating these silos. We combine or unify customer data profiles, segments, analytics, and machine learning capabilities into a single, easy-to-use platform.

Dries delivering his presentation in front of a virtual audience

New announcements for Acquia's Marketing Cloud include:

  • Unified real-time user profiles: Aggregates customer actions across platforms into profiles in real-time. Use them instantly in marketing campaigns.
  • Universal segments: Use consistent segments across every tool within Acquia Marketing Cloud. A segment created in our Customer Data Platform (CDP) automatically becomes available in our website personalization product and multi-channel marketing automation solution.
  • 360ยบ marketing analytics: Measures marketing campaign effectiveness across the Acquia Marketing Cloud.
  • "Predictive sends" machine learning model: Uses machine learning to predict the best time to send campaign emails.
  • COVID-19 dashboard: Helps you understand your customers' shift from offline to online, as well as changes in channel preferences, product preferences and opportunities for growth.

Closing words

I'm proud that Acquia is innovating faster than ever before. I want to thank our product and engineering teams for working incredibly hard in the midst of a pandemic.

October 26, 2020

Ce que la crise du coronavirus exemplifie à l’extrême est un problème qui gangrène nos institutions depuis plusieurs années : le fait que les décisions sont prises à l’intuition par une minorité. Que la communication et l’affect aient désormais plus d’importance que la rationalité et les faits. Bref, que tout se décide désormais au doigt mouillé.

Contre cette tendance, les spécialistes et les scientifiques ne peuvent pas lutter. En effet, un véritable scientifique commencera toujours par affirmer qu’il y’a beaucoup de choses qu’il ne sait pas. Qu’il n’est certain de rien. Qu’il faut tester des hypothèses. Bref, qu’il faut faire preuve d’humilité.

Humilité qui nécessite une érudition, une expertise : la seule chose que je sais c’est que je ne sais rien. Humilité qui peut permettre de convaincre les individus, mais qui n’est malheureusement pas « médiatique ».

https://cenestquunetheorie.wordpress.com/2020/05/27/methode-4-lhumilite-epistemique-la-clef-pour-convaincre-ethiquement/

Au contraire, lorsqu’on n’a pas étudié un domaine pendant des années, il est tellement simple d’avoir l’impression que l’on sait, de confondre intuition, opinion et décision. De croire que la réalité se plie face à nos certitudes. La certitude est l’apanage des ignorants.

C’est, depuis des millénaires, le fonds de commerce des religions. Enseigner qu’une croyance a plus d’importance que l’observation de la réalité. C’est la raison pour laquelle j’affirme haut et fort que les discours « anti-science » et toutes les formes de foi sont d’une prétention infinie : cela revient à dire que l’on est détenteur d’une vérité unique et absolue. Bref que l’on est plus intelligent que tous les humains passés, présents et futurs.

https://ploum.net/la-science-na-pas-reponse-a-tout/

Cette perversion mentale est particulièrement flagrante chez les politiciens qui n’essaient même pas de prendre des décisions sensées, mais pour qui, de par le fonctionnement de nos démocraties, jaugent toute action à l’aulne de sa popularité, entrant de ce fait dans une boucle de résonnance avec leur propre public, attisant les idéologies extrêmes.

Cette victoire de l’idéologie sur la philosophie, nous en avons un exemple historique sous les yeux avec le déclin intellectuel de l’Islam aux alentours de l’an 1200. Alors que l’Europe nageait dans l’obscurantisme religieux, le monde arabe, concentré sur son expansion commerciale plutôt que militaire, brillait par ses philosophes, ses scientifiques. Jusqu’au jour où d’obscures sectes musulmanes ont pris le pouvoir et ont décidé que le Coran (où du moins l’interprétation qu’en faisait une clique de potentats) était la seule source de vérité.

https://www.thenewatlantis.com/publications/why-the-arabic-world-turned-away-from-science

La crise du coronavirus nous démontre à quel point nos politiciens sont, par construction de notre système, ineptes. Les réseaux sociaux les trompent en leur faisant croire qu’ils sont en contact avec la population, qu’ils comprennent les gens, qu’ils sont populaires. Ce mensonge n’est qu’un artefact technologique qui, sous prétexte d’optimiser les revenus publicitaires de quelques entreprises, enferme une minorité dans une bulle de résonnance hyperaddictive, mais décorrélée de la réalité.

https://ploum.net/le-mensonge-des-reseaux-sociaux/

Une réalité qui est qu’aujourd’hui encore, une quantité non négligeable de la population (principalement paupérisée et peu connectée) ne sait pas ce qu’est le covid. Bien sûr, on préfère oublier cela. La bulle médiatique n’est pas le reflet de la réalité, mais ses addicts, dont l’immense majorité des politiciens, tentent de transformer la réalité pour qu’elle corresponde à leurs croyances. Un phénomène qui n’est rien d’autre qu’une forme de religiosité, nourrissant l’idéologie plutôt que la raison.

Mais le coronavirus n’est qu’un révélateur. Et les politiciens ne sont qu’un exemple des plus extrêmes. Dans les entreprises privées, la majorité des managers et des CEO prend désormais des décisions intuitives, rapides et sans aucun moyen d’en mesurer les effets. Une mesure ne semble pas avoir l’effet escompté ? Plutôt que de la remettre en question on prend cela comme un signal qu’il faut l’appliquer encore plus fort. Un effet positif se dégage ? On prend cela comme un confirmation qu’il faut l’appliquer… encore plus fort.

Sans les réseaux sociaux et les médias de masse, les décisions devraient être pensées et réfléchies, car il serait hors de question de les modifier trop souvent. Nul n’est censé ignorer la loi. Chaque loi devrait donc également être diffusée, atteindre la population.

L’ère de la connexion donne aux politiciens la croyance qu’ils peuvent changer d’avis plusieurs fois par jour. Le nombre de likes leur fait croire qu’une multitude les soutient, que tout le monde est au courant. Pire : que pour continuer à être visible, il est souhaitable de changer les règlements régulièrement, d’apporter de la nouveauté.

Nous gérons nos pays et nos entreprises sur le modèle des sites web rentabilisés par la publicité : faire du clic, faire du buzz, faire de statistiques. Il n’est plus un commerce, plus une association qui ne cherche à optimiser son nombre de visiteurs et ses likes sur Facebook sans que cela soit positivement corrélé avec son chiffre d’affaires.

Les CEOs des très grosses entreprises n’ont d’ailleurs rien à craindre. Ils font tout pour ne pas mesurer l’impact de leurs décisions. La société fait de l’argent ? C’est grâce à eux et ils auront un bonus. La société n’en fait pas : c’est une mauvaise exécution des employés. Au pire, le CEO sera démis de ses fonctions avec un parachute doré. Il est désormais avéré que les CEOs ne font pas mieux que des décisions aléatoires. Leurs bonus mirobolants ne récompensent donc aucun risque, aucune compétence, mais sont de facto une rente sur le copinage.

Les scientifiques ne sont évidemment pas en reste. La recherche s’est transformée en une course à la publication. Les résultats incertains sont immédiatement transformés en titres sensationnalistes. Les codes sources sont très rarement partagés, la reproductibilité est nulle. Quand, tout simplement, l’idéologie ne prend pas le pas sur la méthode scientifique.

Exemple frappant : deux économistes à tendance très conservatrice ont choisi de démontrer que l’endettement d’un pays arrêtait sa croissance. Ce papier, incroyablement influent, inventa le concept d’austérité dont les Grecs et de nombreux Européens furent les victimes.

Mais afin d’établir le lien entre déclin de croissance et endettement, les auteurs se contentèrent d’établir une moyenne de plusieurs pays. Méthodologiquement, le principe de tirer une généralité sur une moyenne est complètement faux. Pour s’en convaincre, il suffit de s’imaginer que si Jeff Bezos rentre dans un stade bondé, chaque spectateur est en moyenne multimillionnaire.

La méthodologie est donc fausse. Mais même en l’admettant, le résultat ne démontre rien. En moyenne, les pays endettés de plus de 90% ont une croissance de près de 3%. C’est en revoyant les calculs que des chercheurs ont découvert qu’une erreur de la formule dans Excel ne prenait pas tous les pays en compte.

https://theconversation.com/the-reinhart-rogoff-error-or-how-not-to-excel-at-economics-13646

Mais nul ne s’est trop penché dessus, car, idéologiquement, la décision de l’austérité était intuitive. L’austérité ne fonctionne pas et n’est justifiée que par une erreur de calcul. On continue de l’appliquer car personne n’osera prendre la décision inverse.

Aujourd’hui, on découvre que la manière la plus efficace et la moins chère de lutter contre la pauvreté est de… donner de l’argent aux pauvres. De fournir un logement décent aux sans-abris. Cela fonctionne. Au Canada, une étude a montré que donner 7500$ à des sans-abris était en moyenne suffisant pour les tirer de la misère. Que ceux qui avaient reçu de l’argent dépensaient 34% en moins que les autres en drogues et alcools. Que ça coutait moins cher que de les héberger dans un centre.

https://edition.cnn.com/2020/10/09/americas/direct-giving-homeless-people-vancouver-trnd/index.html

Malheureusement, tout cela va à l’encontre de l’idéologie selon laquelle « tout salaire doit être mérité par un travail » (nonobstant le fait que les riches « font travailler leur argent »). Naïvement, on pourrait croire que lutter contre la pauvreté fait l’unanimité. Ce n’est pas le cas.

Les gauchistes et écologistes ne sont pas épargnés par ce misérabilisme intellectuel. Un exemple des plus frappants en est le rejet du nucléaire. Le nucléaire est, à ce jour l’énergie la plus propre, la plus sûre jamais inventée. L’effet nocif des radiations en cas d’accident est des millions de fois moins important que l’effet nocif, avéré et permanent, de la pollution de l’air par les centrales à charbon. Cependant, ces 20 dernières années, nous avons augmenté notre dépendance au charbon par simple rejet irrationnel du nucléaire. Et je n’aborde même pas la mouvance antivaccins.

Comme le résumé Vaclav Smil : « Les gens n’ont rien à faire du monde réel ».

https://www.transitionsenergies.com/vaclav-smil-les-gens-nen-ont-rien-a-faire-du-monde-reel/

L’idéologie avant la raison et l’intuition avant les faits sont les pires des gestions. Le monde s’en accommodait grâce à une tendance naturelle au progrès. Mais la pandémie fait éclater au grand jour l’incompétence épistémique de nos institutions politiciennes.

Mais plutôt que de rejeter tout en bloc, de tomber dans le populisme, je vous invite à réfléchir à la voie de la modération. Oui, le port du masque partout est absurde. Mais le masque reste utile. Le couvre-feu est une atteinte à nos libertés. Mais peut-être que c’est une mesure qui peut avoir un impact important. Apprenons l’humilité que nos décideurs ne peuvent pas se permettre d’afficher.

Le 21ème siècle doit être le siècle de la prise de décision rationnelle et consciente. De l’acceptation que toute mesure doit être mesurée, doit être remise en question régulièrement et qu’il n’est pas de posture morale plus élégante pour un politicien que de dire « Je me suis trompé, changeons de cap ».

À ce titre, je me réjouis de lire « Vaincre les épidémies » de Didier Pittet et Thierry Crouzet.

https://tcrouzet.com/2020/10/22/la-voix-de-la-sagesse-dans-la-crise-covid/

Et n’oubliez pas que consulter les malheurs du monde en boucle peut avoir un impact néfaste sur votre santé. C’est justement ce qui arrive dans la dernière nouvelle (drôle) de Valéry Bonneau que je vous invite à lire en guise de conclusion.

https://www.valerybonneau.com/nouvelles-noires/tako-tsubo

Si nous pouvons retenir une chose des milliers de morts du Coronavirus c’est que la politique du doigt mouillé ne fonctionne pas et que les certitudes idéologiques sont les premières causes de mortalité et de souffrance. Que l’éducation est notre seul espoir. Que les immenses progrès scientifques et philosophiques de notre époque sont nés de la lecture des livres, pas des tweets.

https://www.calnewport.com/blog/2020/06/27/on-the-exceptionalism-of-books-in-an-age-of-tweets/

Vous savez ce qui vous reste à faire : coupez Facebook, Twitter et la presse. Entrez dans la résistance, ouvrez un livre !

Bonnes lectures et bonne semaine.

Photo by Karl JK Hedin on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

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

October 25, 2020

We now invite proposals for developer rooms for FOSDEM 2021. Invitations to submit proposals for other elements of the event will follow in the next couple of weeks. FOSDEM offers open source and free software developers a place to meet, share ideas and collaborate. Renowned for being highly developer-oriented, the event brings together some 8000+ geeks from all over the world. The twenty-first edition will take place Saturday 6th and Sunday 7th February 2021, online. Developer rooms are assigned to self-organising groups to work together on open source and free software projects, to discuss topics relevant to a broader舰

pifire

I was using OPNsense on my pcengines alix firewall and was quite happy with it.

The alix 2d13 is a nice motherboard with a Geode CPU, it has a 32 bits x86 instruction set. I migrated to OPNsense from pfSense when pfSense dropped 32 bits support.

Unfortunately, OPNsense also dropped support for 32 bits CPU’s in the 19.1.7 release. I decided to install FreeBSD on the alix to use it as my firewall. But I need a temporary firewall solution so I can install FreeBSD on my alix board. I have a Raspberry PI 2 that I wasn’t using.

You’ll find my journey to use my RPI2 as my firewall below.

flashingw500

Install FreeBSD

ARM is a Tier 2 architecture on FreeBSD. Tier 2 architectures are less mature and aren’t supported as well. FreeBSD-update isn’t supported on a Tier 2 architecture for example.

Pkgbase can be an alternative to update FreeBSD on ARM. But I didn’t try this (yet).

Download FreeBSD

Links to latest downloads are available at: https://wiki.freebsd.org/arm/Raspberry%20Pi. Download the latest image and verify the checksum.

[staf@snuffel ~/Downloads]$ sha256 FreeBSD-12.2-PRERELEASE-arm-armv7-RPI2-20200910-r365545.img.xz
SHA256 (FreeBSD-12.2-PRERELEASE-arm-armv7-RPI2-20200910-r365545.img.xz) = e2987f1ae57db48719d484af293fbcc80e944c2dd30c7d3edfae4ac62d8dc3e3
[staf@snuffel ~/Downloads]$ grep e2987f1ae57db48719d484af293fbcc80e944c2dd30c7d3edfae4ac62d8dc3e3 CHECKSUM.SHA256-FreeBSD-12.2-PRERELEASE-arm-armv7-RPI2-20200910-r365545
SHA256 (FreeBSD-12.2-PRERELEASE-arm-armv7-RPI2-20200910-r365545.img.xz) = e2987f1ae57db48719d484af293fbcc80e944c2dd30c7d3edfae4ac62d8dc3e3

Write the image to your sdcard

After downloading the image, you need to write the image to a sdcard. I execute the steps below on a FreeBSD system.

Find your sdcard

The easiest way to find your sdcard is the geom utility. Execute geom disk list to find the device name of your sd card.

root@snuffel:~ # geom disk list
Geom name: cd0
Providers:
1. Name: cd0
   Mediasize: 0 (0B)
   Sectorsize: 2048
   Mode: r0w0e0
   descr: MATSHITA DVD-RAM UJ862A
   ident: (null)
   rotationrate: unknown
   fwsectors: 0
   fwheads: 0

<snip>

Geom name: da0
Providers:
1. Name: da0
   Mediasize: 7948206080 (7.4G)
   Sectorsize: 512
   Mode: r0w0e0
   descr: Generic STORAGE DEVICE
   lunname: Generic STORAGE DEVICE-4
   lunid: Generic STORAGE DEVICE-4
   ident: 000000000903
   rotationrate: unknown
   fwsectors: 63
   fwheads: 255

root@snuffel:/home/staf/Downloads # 

Write the image to your sdcard

root@snuffel:/home/staf/Downloads # xzcat FreeBSD-12.2-PRERELEASE-arm-armv7-RPI2-20200910-r365545.img.xz | dd of=/dev/da0 status=progress bs=1M
  3220176896 bytes (3220 MB, 3071 MiB) transferred 694.026s, 4640 kB/s
0+370017 records in
3072+0 records out
3221225472 bytes transferred in 694.681604 secs (4636981 bytes/sec)
root@snuffel:/home/staf/Downloads # sync
root@snuffel:/home/staf/Downloads # 

Boot your raspberry-pi

Boot your raspberry-pi.

Update password

The default password for the root account is root. Always a good idea to change the default password.

Changing local password for root
New Password:
Retype New Password:
root@generic:~ # 

Remove the freebsd user

There is default user freebsd, I’ll set my own user. Use rmuser to remove it.

root@pifire001:~ # rmuser freebsd
Matching password entry:

freebsd:******:1001::0:0:FreeBSD User:/home/freebsd:/bin/csh

Is this the entry you wish to remove? y
Remove user's home directory (/home/freebsd)? y
Removing user (freebsd): mailspool home passwd.
root@pifire001:~ #

Create user

Create a user to administer your firewall. Make sure that you add the user to the wheel group. Only users that are in the wheel group are able to use su on FreeBSD.

root@generic:~ # adduser 
Username: staf
Full name: 
Uid (Leave empty for default): 
Login group [staf]: 
Login group is staf. Invite staf into other groups? []: wheel 
Login class [default]: 
Shell (sh csh tcsh nologin) [sh]: 
Home directory [/home/staf]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: 
Use an empty password? (yes/no) [no]: 
Use a random password? (yes/no) [no]: 
Enter password: 
Enter password again: 
Lock out the account after creation? [no]: no
Username   : staf
Password   : *****
Full Name  : 
Uid        : 1002
Class      : 
Groups     : staf wheel
Home       : /home/staf
Home Mode  : 
Shell      : /bin/sh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (staf) to the user database.
Add another user? (yes/no): no
Goodbye!
root@generic:~ # 

Set your hostname

On FreeBSD system settings are configure in /etc/rc.conf. sysrc is a handy utility to manage it. Use sysrc hostname=your_hostname to change it.

root@generic:~ # sysrc hostname=pifire001
hostname: generic -> pifire001
root@generic:~ # 

To make hostname active without a reboot use hostname your_hostname.

root@generic:~ # hostname pifire001

Install packages

Install the packages that are required to manage your system. I use ansible to manage my systems; sudo and python are required for ansible.

Install pkg
root@generic:~ # pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:12:armv7/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.15.10...
Extracting pkg-1.15.10: 100%
pkg: not enough arguments
Usage: pkg [-v] [-d] [-l] [-N] [-j <jail name or id>|-c <chroot path>|-r <rootdir>] [-C <configuration file>] [-R <repo config dir>] [-o var=value] [-4|-6] <command> [<args>]

For more information on available commands and options see 'pkg help'.
root@generic:~ # 
Install packages
root@generic:~ # pkg install -y python3 sudo 

sudo

The ansible user will become a member of the wheel group on my network. Use visudo to grant execute permissions to execute commands as root.

root@generic:~ # visudo

I still use passwords for sudo even for the ansible user.

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL

Configure the network

Network interfaces

I use two network interface on my firewall. I use the a usb network adapter for the second interface. Please note the internal network interface on the

The network interfaces are - like all system settings configured in /etc/rc.conf on FreeBSD. User sysrc to configure them.

raspberry-pi is also connected over USB.

  • ue0 is connected to my internet router. I use a fixed IP address.
  • ue1 is my internal interface.
root@pifire001:~ # sysrc ifconfig_ue0="inet 192.168.xxx.xxx netmask 255.255.255.0"
ifconfig_ue0: inet 192.168.xxx.xxx netmask 255.255.255.0 -> inet 192.168.xxx.xxx netmask 255.255.255.0
root@pifire001:~ # sysrc ifconfig_ue1="inet 192.168.yyy.yyy netmask 255.255.255.0"
ifconfig_ue1: inet 192.168.yyy.1 netmask 255.255.255.0 -> inet 192.168.yyy.1 netmask 255.255.255.0

There is ifconfig_DEFAULT variable set in the /etc/rc.conf. Remove it with sysrc.

root@pifire001:~ # sysrc ifconfig_DEFAULT=""

Set the default route

Set the default route to your internet connection.

defaultrouter: NO -> 192.168.yyy.1
root@pifire001:/etc # 

restart the network services

Restart netif service to make the network connection active.

root@pifire001:~ # /etc/rc.d/netif restart

Restart the routing to get the default route configured.

root@pifire001:~ # /etc/rc.d/routing restart
delete host 127.0.0.1: gateway lo0
route: route has not been found
delete net default: gateway 192.168.xxx.xxx fib 0: not in table
delete host ::1: gateway lo0
delete net fe80::: gateway ::1
delete net ff02::: gateway ::1
delete net ::ffff:0.0.0.0: gateway ::1
delete net ::0.0.0.0: gateway ::1
add host 127.0.0.1: gateway lo0
add net default: gateway 192.168.xxx.xxx
add host ::1: gateway lo0
add net fe80::: gateway ::1
add net ff02::: gateway ::1
add net ::ffff:0.0.0.0: gateway ::1
add net ::0.0.0.0: gateway ::1
root@pifire001:~ # 

Enable routing

FreeBSD doesn’t route the network by default, the net.inet.ip.forwarding system variable needs to be set. This can be enabled with the gateway_enable variable in /etc/rc.conf, execute sysrc gateway_enable="YES"` to set it.

root@pifire001:~ # sysrc gateway_enable="YES" 
gateway_enable: NO -> YES

To enable routing set the net.inet.ip.forwarding variable to 1 with sysctl.

root@pifire001:~ # sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
root@pifire001:~ # sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1
root@pifire001:~ # sysctl net.inet.ip.forwarding 
net.inet.ip.forwarding: 1
root@pifire001:~ # 

pf

I use pf as my firewall.

Enable pf & logging

To enable pf when the system starts up we need to pf_enable=yes and pflog_enable=yes in /etc/rc.conf. pflog is the logging daemon for the pf firewall.

root@pifire001:~ # sysrc pf_enable=yes
pf_enable: NO -> yes
root@pifire001:~ #  sysrc pflog_enable=yes
pflog_enable: NO -> yes
root@pifire001:~ # 

And start the pflog daemon.

root@pifire001:~ # /etc/rc.d/pflog start
Starting pflog.

firewall rules

Create /etc/pf.conf with your firewall rules. You’ll find the firewall rule I use below.

Some remark on my firewall rules:

  • It’s possible to set a network variable automatically with localnet=$int_if:network but if the interface isn’t configured when pf is started during the setup startup. The firewall rules will not be loaded.
# set external / internal interface
ext_if="ue0"
int_if="ue1"

# set network ranges
# localnet=$int_if:network
localnet="{ 192.168.xxx.0/24 }"
private_addresses="{10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16}"
mgmt_systems="{192.168.xxx.10/32}"
firewall_internal_ips="{ 192.168.xxx.xxx/32}"
firewall_external_ips="{ 192.168.yyy.4}"
none_routeable="{127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \
	      10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \
	      0.0.0.0/8, 240.0.0.0/4 }"

firewall_tcp_services = "{ }"
firewall_udp_services = "{ 53, 67, 68 }"

# default block policy, allow lo traffic
set block-policy drop
set skip on lo

# Nat rules need to be defined first
nat on $ext_if from $localnet to any -> ($ext_if)

# block everything by default 
block in log all
block out log all

# dont block the mgmt systems ( - for now -)
pass in quick from $mgmt_systems to any 
pass out quick from $mgmt_systems to any 
pass in quick from $firewall_internal_ips to any 
pass out quick from $firewall_internal_ips to any 
pass out quick from $firewall_external_ips to any 

# allow firewall services
block in quick on $ext_if
block in log quick to $firewall_external_ips
pass in quick on $int_if proto udp to $firewall_internal_ips port $firewall_udp_services
pass in quick on $int_if inet proto icmp icmp-type echoreq
block in log quick to $firewall_internal_ips

# block all access to private_addreses 
block in quick log from any to $private_addresses
block out quick log from any to $private_addresses

# block all non-routeable traffic on the external interface 
block in log quick on $ext_if from $none_routeable to any
block out log quick on $ext_if from any to $none_routeable

# allow outgoing (all allowed - for now - )
pass out quick all keep state

pass in quick on $int_if inet all keep state

# allow localnet traffic
pass from { lo0, $localnet } to any keep state

# allow ping
pass inet proto icmp icmp-type echoreq

Start the pf service

To active the firewall you need to start the pf service.

root@pifire001:~ # /etc/rc.d/pf start

Verify

To display the firewall rules:

  • pfctl -s rules will display the firewall rules
  • pfctl -s nat will display the nat rules.
  • ```pfctl -s states will display the current stateful table.

Firewall rules with logging enabled can be analyzed by monitoring the pflog0 interface with tcpdump.

root@pifire001:~/scripts # tcpdump -n -e -ttt -i pflog0

DNS

I’ll use unbound as my dns server, unbound is a nice dns server/resolver and support dns over tls by default.

install unbound

root@pifire001:/etc # pkg install -y unbound ca_root_nss

Enable sysrc

root@pifire001:/etc # sysrc unbound_enable="YES"

first start

root@pifire001:/etc # /usr/local/etc/rc.d/unbound start

config

# cd /usr/local/etc/unbound/
# 

You’ll need set the interface where unbound will run on.

# vi unbound.conf
        # interface: 2001:DB8::5

        interface: 0.0.0.0

Allow your localnetwork to query the dns server.

        # access-control: ::ffff:127.0.0.1 allow

        access-control: 192.168.xxx.0/24 allow

Enable dns-over-tls, I’ll use quad9 as my dns provider with dns-over-tls.

#       forward-host: fwd.example.com

forward-zone:
  name: "."
  forward-ssl-upstream: yes
  forward-addr: 9.9.9.9@853

Restart ubound to active the settings.

# /usr/local/etc/rc.d/unbound restart
Stopping unbound.
Waiting for PIDS: 61238.
Obtaining a trust anchor...
Starting unbound.

dhcpd

install isc-dhcpd

root@pifire001:~ # pkg install -y isc-dhcp44-server
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	isc-dhcp44-server: 4.4.2_1

Number of packages to be installed: 1

The process will require 6 MiB more space.
1 MiB to be downloaded.
[1/1] Fetching isc-dhcp44-server-4.4.2_1.txz:  24%  312 KiB 319.5kB/s    00:03 E[1/1] Fetching isc-dhcp44-server-4.4.2_1.txz:  87%    1 MiB 835.6kB/s    00:00 E[1/1] Fetching isc-dhcp44-server-4.4.2_1.txz: 100%    1 MiB 659.6kB/s    00:02    
Checking integrity... done (0 conflicting)
[1/1] Installing isc-dhcp44-server-4.4.2_1...
===> Creating groups.
Creating group 'dhcpd' with gid '136'.
===> Creating users
Creating user 'dhcpd' with uid '136'.
[1/1] Extracting isc-dhcp44-server-4.4.2_1: 100%
=====
Message from isc-dhcp44-server-4.4.2_1:

--
****  To setup dhcpd, please edit /usr/local/etc/dhcpd.conf.

****  This port installs the dhcp daemon, but doesn't invoke dhcpd by default.
      If you want to invoke dhcpd at startup, add these lines to /etc/rc.conf:

	    dhcpd_enable="YES"				# dhcpd enabled?
	    dhcpd_flags="-q"				# command option(s)
	    dhcpd_conf="/usr/local/etc/dhcpd.conf"	# configuration file
	    dhcpd_ifaces=""				# ethernet interface(s)
	    dhcpd_withumask="022"			# file creation mask

****  If compiled with paranoia support (the default), the following rc.conf
      options are also supported:

	    dhcpd_chuser_enable="YES"		# runs w/o privileges?
	    dhcpd_withuser="dhcpd"		# user name to run as
	    dhcpd_withgroup="dhcpd"		# group name to run as
	    dhcpd_chroot_enable="YES"		# runs chrooted?
	    dhcpd_devfs_enable="YES"		# use devfs if available?
	    dhcpd_rootdir="/var/db/dhcpd"	# directory to run in
	    dhcpd_includedir="<some_dir>"	# directory with config-
						  files to include

****  WARNING: never edit the chrooted or jailed dhcpd.conf file but
      /usr/local/etc/dhcpd.conf instead which is always copied where
      needed upon startup.
root@pifire001:~ # 

update rc.conf

dhcpd_chuser_enable="YES"		# runs w/o privileges?
dhcpd_withuser="dhcpd"		# user name to run as
dhcpd_withgroup="dhcpd"		# group name to run as
dhcpd_chroot_enable="YES"		# runs chrooted?
dhcpd_devfs_enable="YES"		# use devfs if available?
dhcpd_rootdir="/var/db/dhcpd"	# directory to run in
dhcpd_enable="YES"

configure

Edit /usr/local/etc/dhcpd.conf and update it for your network.

dns

option domain-name "intern.stafnet.local";
option domain-name-servers 192.168.xxx.xxxx, 192.168.xxx,xxx, 192.168.xxx,xxx;

subnet

subnet 192.168.xxx.0 netmask 255.255.255.0 {
  range 192.168.xxx.100 192.168.xxx.254;
  option routers 192.168.xxx.1;
}

fixed ip addresses

host snuffel {
   hardware ethernet XX:XX:XX:XX:XX:XX;
   fixed-address 192.168.xxx.zzz;
}

start

root@pifire001:/usr/local/etc # /usr/local/etc/rc.d/isc-dhcpd start

Have fun!

Links

October 24, 2020

Most home automation systems have a web interface that you can use on your computer or smartphone. However, having to open your laptop or unlock your smartphone before navigating to the right web page creates unnecessary friction. What if you quickly want to see the temperature outside or close the blinds?

The solution is a dedicated device that shows a dashboard. Two years ago I bought a 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 wrote an Arduino sketch to turn 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.

However, the result was quite basic, and I never really found some time to expand the system to something more usable. Recently I discovered Homepoint: open source firmware for the ESP32 microcontroller that turns your device into an MQTT dashboard, and one of the devices that it supports is the M5Stack Core. 1

Flashing Homepoint

Just download the latest release of Homepoint, unpack the ZIP file, connect your M5Stack Core to your PC using a USB-C cable and flash the firmware with esptool:

$ esptool.py write_flash -fs 4MB -fm dout 0x0 homepoint_m5stack_full.bin

Once you have flashed the device, it starts a wireless access point, so you can visit its web interface and configure the Wi-Fi settings so it connects to your own network. After this, you just put a JSON file with the configuration of your dashboard on its internal storage, and this can be done using a web interface. So no need to reflash it every time you want to change its configuration. It also supports OTA (over-the-air) updates.

You can add sensors, but also switches and lights that you control with the buttons of the M5Stack Core. All in all, it's just what I needed. I now have my M5Stack Core on a shelf in my living room, showing the temperature and humidity outside, of the bedroom and storage room, of the freezer, cooler and fridge:

/images/homepoint-m5stack-core.jpg

Configuration

The above configuration looks like this:

homepoint/config.json (Source)

{
  "wifi": "SSID",
  "password": "PASSWORD",
  "login": "admin",
  "webpass": "WEBPASSWORD",
  "mqttbroker": "mqtt://192.168.0.125",
  "mqttusername": "MQTTUSER",
  "mqttpasswd": "MQTTPASSWORD",
  "timezone": "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00",
  "scenes": [{
    "name": "Freezer",
    "type": "Sensor",
    "devices": [{
      "name": "Temperature",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon": "temperature_small",
      "getTopic": "rtl433/Oregon-THGR122N/1/218/temperature_C"
    },
    {
      "name": "Humidity",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon":"humidity_small",
      "getTopic": "rtl433/Oregon-THGR122N/1/218/humidity"
    }]
  },
  {
    "name": "Cooler",
    "type": "Sensor",
    "devices": [{
      "name": "Temperature",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon": "temperature_small",
      "getTopic": "rtl433/Prologue-TH/2/151/temperature_C"
    },
    {
      "name": "Humidity",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon":"humidity_small",
      "getTopic": "rtl433/Prologue-TH/2/151/humidity"
    }]
  },
  {
    "name": "Fridge",
    "type": "Sensor",
    "devices": [{
      "name": "Temperature",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon": "temperature_small",
      "getTopic": "rtl433/Oregon-THGR122N/1/175/temperature_C"
    },
    {
      "name": "Humidity",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon":"humidity_small",
      "getTopic": "rtl433/Oregon-THGR122N/1/175/humidity"
    }]
  },
  {
    "name": "Outside",
    "type": "Sensor",
    "devices": [{
      "name": "Temperature",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon": "temperature_small",
      "getTopic": "rtl433/Oregon-THGR122N/1/106/temperature_C"
    },
    {
      "name": "Humidity",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon":"humidity_small",
      "getTopic": "rtl433/Oregon-THGR122N/1/106/humidity"
    }]
  },
  {
    "name": "Bedroom",
    "type": "Sensor",
    "devices": [{
      "name": "Temperature",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon": "temperature_small",
      "getTopic": "rtl433/Prologue-TH/1/159/temperature_C"
    },
    {
      "name": "Humidity",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon":"humidity_small",
      "getTopic": "rtl433/Prologue-TH/1/159/humidity"
    }]
  },
  {
    "name": "Storage room",
    "type": "Sensor",
    "devices": [{
      "name": "Temperature",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon": "temperature_small",
      "getTopic": "rtl433/Prologue-TH/3/128/temperature_C"
    },
    {
      "name": "Humidity",
      "type": "singleValue",
      "jsondata": false,
      "firstIcon":"humidity_small",
      "getTopic": "rtl433/Prologue-TH/3/128/humidity"
    }]
  },
  {
    "name": "Raspberry Pi",
    "type": "Sensor",
    "devices": [{
      "name": "Temperature",
      "type": "combinedValues",
      "jsondata": true,
      "firstIcon": "temperature_small",
      "secondIcon": "wattage_small",
      "firstKey": "temperature",
      "secondKey": "disk_use",
      "getTopic": "system-sensors/sensor/pi-red/state"
    }]
  },
  {
    "name": "Bathroom",
    "type": "Light",
    "icon": "door",
    "devices": [{
      "name": "Bathroom light",
      "setTopic": "zwave/Bathroom/Bathroom_light/38/1/0/set",
      "getTopic": "zwave/Bathroom/Bathroom_light/38/1/0",
      "onValue": "99",
      "offValue": "0"
    }]
  }]
}

The first six sensors are all wireless temperature/humidity sensors that transmit their data on the 433.92 MHz frequency band. I use an RTL-SDR stick connected to a Raspberry Pi to receive their transmissions, together with the rtl_433toMQTT project that translates these transmissions to MQTT messages. This uses the rtl_433 project that has more than 150 protocol decoders for various devices.

I have also added an example of another MQTT sensor that shows the temperature and disk usage of one of my Raspberry Pis, collected by the system_sensors project. The last component in the configuration file above is an example of a light switch: it enables me to switch my bathroom light on and off (using ZWave2Mqtt). The setTopic is the MQTT topic to set the value of the light and the getTopic is the MQTT topic to get the value of the light. The values for the on and off states are defined in onValue and ofValue, respectively.

The picture above only shows the six sensors, but with the buttons of the M5Stack Core you can walk through each component until it shows a second screen with the two other components. You can even group components, for instance a group with all devices in a specific room. 2

The perfect MQTT dashboard

All in all I'm quite happy with Homepoint. When I want to see the temperature of one of the sensors defined in the dashboard, I just have to push on one of the buttons to wake up the screen and I can immediately see all sensors. If you're using an MQTT-based home automation system, an M5Stack Core with Homepoint is the perfect companion.

1

The M5Core2 is currently not supported.

2

Homepoint only supports a group with all lights/switches; you can't create a group that contains both lights/switches and sensors.

October 23, 2020

October 21, 2020

Several years ago, I created a list of ESXi versions with matching VM BIOS identifiers. The list is now complete up to vSphere 7.
Your Linux runs on a VMware VM, but on which ESXi version? Even without access to the host nor vCenter, you can see for yourself: run "dmidecode" and look at lines 10, 11 and 12. The BIOS release date, the address and the size are unique for each ESXi version. Look up your result in the following table:
ESXi version  BIOS release date  Address  Size
ESX 2.504/21/20040xE848097152 bytes
ESX 3.004/17/20060xE7C7099216 bytes
ESX 3.501/30/20080xE7910100080 bytes
ESX 408/15/20080xEA6C088384 bytes
ESX 4U109/22/20090xEA55088752 bytes
ESX 4.110/13/20090xEA2E089376 bytes
ESXi 501/07/20110xE72C0101696 bytes
ESXi 5.106/22/20120xEA0C089920 bytes
ESXi 5.507/30/20130xEA05090032 bytes
ESXi 609/30/20140xE9A4091584 bytes
ESXi 6.504/05/20160xEA58088704 bytes
ESXi 6.707/03/20180xEA52088800 bytes
ESXi 6.7 U212/12/20180xEA49088944 bytes
ESXi 7.012/09/20190xEA48088960 bytes
NB These DMI properties are set at boot time. Even if your VM gets live-migrated to a host running a different vSphere version, your VM will keep the values it got from the host it booted on. What you see is the vSphere version of the host your VM booted on. It is the VM power-on that matters, so a guest OS reboot will not regenerate the DMI properties. A guest OS shut down on the other hand will also power off the VM, and the next power-on will regenerate the DMI properties.

October 20, 2020

I published the following diary on isc.sans.edu: “Mirai-alike Python Scanner“:

Last week, I found an interesting Python script that behaves like a Mirai bot. It scans for vulnerable devices exposing their telnet (TCP/23) interface in the wild, then tries to connect using a dictionary of credentials. The script has been uploaded to VT and has a low score of 2/59. Indeed, it does not contain suspicious strings nor API calls. Just a simple but powerful scanner.

Here are the commands injected when a device is found with vulnerable credentials… [Read more]

The post [SANS ISC] Mirai-alike Python Scanner appeared first on /dev/random.

October 17, 2020

I’ve never been into iTunes or Spotify, tuning into online radio-stations instead to satisfy my constant need for musical discovery, excitement and/ or entertainment. For a long time I was an avid KCRW listener, but times change and their eclecticism does not necessarily match mine the way it used to, so over the last couple of years many online streams (Worldwide FM, Nova, TSF Jazz, KCSN, Laurent Garnier’s PBB, …) were added to my favorites which I stored in a draft mail in Gmail of all places, accessing that file on my different devices and -where available- using VLC to play them.

But VLC isn’t available everywhere (hello “smart” TV), it is not great to manage a collections of streams and copy/pasting URL’s from that draft mail is clumsy, so after creating a simple webpage with an HTML5 audio element for my wife to listen to the local “Radio 1 classics” stream on our TV, I decided to extend that to display a list of streams to choose from with a minimum of vanilla JavaScript to do the actual switching and just a dash of CSS (still struggling with vertically aligning multiline titles in those inline-blocks, but I don’t mind that too much. No really, I’m not nervous about that whenever I see it, not at all!).

The result (at https://futtta.be/r/) is an unattractive but pretty usable mp3 stream player that I use on 4 different locations and which I can update easily to accommodate my wife’s knack for doo-wap and xmas-music. Maybe I should add falling snow-flakes to surprise her when we put up the Christmas tree? :-)

October 15, 2020

Dilemma; 3 of 4 sterren? De Bekeerlinge is een verslag van Hertmans’ ontdekkingsreis doorheen de waar gebeurde geschiedenis van een 11de-eeuwse Normandisch meisje dat zich omwille van de liefde bekeerde tot het Jodendom en met haar David op de vlucht slaat temidden van de woelige tijd van de (aanzet tot de) eerste kruistochten. De basis is een bijzonder sterk verhaal, de historische context ook erg interessant, het boek prikkelt de nieuwsgierigheid, maar toch … het geheel is niet meeslepend gebracht, eerder zakelijk. Ik heb De Bekeerlinge graag gelezen, maar vond het niet … virtuoos genoeg, dus toch “slechts” 3 misschien?

Recently I bought a new laptop. The first time I was attending a videoconference with this laptop, my network connection (using a USB Gigabit Ethernet adapter) was very flaky and my external microphone turned itself off all the time. It took me a while before I figured out that both issues had the same cause: USB autosuspend.

Apparently both devices had USB autosuspend enabled, so they turned off after a while. I'm not sure why this is, because I used the same devices on my previous laptop with the same operating system (Ubuntu 20.04 LTS) and I never saw this behaviour. Luckily USB autosuspend can be easily disabled for specific devices.

There are multiple ways to do this, for instance with udev rules. However, in my opinion the power management tool tlp offers the easiest way. If you don't have it already, install it:

$ sudo apt install tlp

Then have a look at the vendor ID and product ID of the USB devices you don't want to autosuspend:

$ lsusb
Bus 002 Device 002: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 04f2:b684 Chicony Electronics Co., Ltd Chicony USB2.0 Camera
Bus 001 Device 006: ID 0556:0001 Asahi Kasei Microsystems Co., Ltd AK5370 I/F A/D Converter
Bus 001 Device 003: ID 8087:0029 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Here you see the Gigabit Ethernet adapter (with ID 0bda:8153) on the first line, and the microphone (with ID 0556:0001) on the fourth line.

Now create the file /etc/tlp.d/50-usb-autosuspend-blacklist.conf and add both IDs to the USB_BLACKLIST parameter:

USB_BLACKLIST="0bda:8153 0556:0001"

Then restart the tlp service:

$ sudo systemctl restart tlp

After reconnecting the USB devices, they won't autosuspend anymore and you can happily enjoy your videoconferences again without hardware-related interruptions.

Quelques liens en lien avec ma quête d’écrire pour tracer ma voie, pour laisser ma trace. Mais au fond, quelles traces voulont nous laisser ?

Être écrivain

Orel Auwen m’a interviewé pour son blog. Au menu, quelques explications sur l’historique du projet Printeurs, sur ma vision de l’écriture, mais également sur les projets d’écriture que j’aimerais réaliser dans le futur. Si jamais vous connaissez un éditeur intéressé, faites-moi signe !

https://serveur410.com/ploum-transforme-des-billets-en-roman/

Je viens de terminer la toute dernière relecture sur épreuve de Printeurs. Et, c’est le cas de le dire, c’est éprouvant. Je touche mon rêve d’être écrivain. Et comme je le disais.

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.

https://ploum.net/le-cauchemar-dune-vie-de-reve/

Mais Margueurite Duras le dit beaucoup mieux que je ne le ferai jamais dans son livre « Écrire ».

Dans la vie, il arrive un moment, et je pense que c’est fatal, auquel on ne peut pas échapper, où tout est mis en doute : le mariage, les amis, surtout les amis du couple. Pas l’enfant. L’enfant n’est jamais mis en doute. Et ce doute grandit autour de soi. Ce doute, il est seul, il est celui de la solitude. On peut déjà nommer le mot. Je crois que beaucoup de gens ne pourraient pas supporter ça que je dis là, ils se sauveraient. C’est peut-être pour cette raison que chaque homme n’est pas écrivain. Oui. C’est ça, la différence. C’est ça la vérité. Rien d’autre. Le doute, c’est écrire. Donc c’est l’écrivain, aussi. Et avec l’écrivain tout le monde écrit. On l’a toujours su.

Le paradoxe académique

Encore un témoignage d’un universitaire qui a quitté le milieu académique. Mais cette fois-ci, ce n’est pas à cause de la surcharge administrative, c’est à cause de la « course à la publication ». Un témoignage qui illustre à quel point la motivation de publier peut aller à l’encontre des intérêts de la science.

https://reyammer.io/blog/2020/10/03/the-good-the-bad-and-the-bye-bye-why-i-left-my-tenured-academic-job/

Aventures

J’ai toujours autant de plaisir à lire les aventures cyclistes de Thierry. Et toujours aussi jaloux. Devrais-je écrire les miennes plus souvent ?

https://tcrouzet.com/2020/10/06/mini-aventure-teleportation-dans-laude-par-le-train/

Cela me rappelle cette réflexion que j’avais sur le besoin d’être dehors à l’heure où l’air conditionné a bouleversé le monde moderne :

https://ploum.net/la-boue-ou-lair-conditionne/

Mon besoin d’être dehors rentre malheureusement en conflit avec mon besoin d’écrire. C’est peut-être cela le secret de Thierry : il fusionne les deux activités. Il crée ses traces à vélo pour laisser sa trace.

Ergonomie et Bépo

Je n’ai vraiment commencer à écrire qu’après avoir appris le Bépo. Je peste chaque jour contre l’ergonomie des claviers de laptop. Je rêve d’un laptop ou d’un Freewrite avec un clavier orthogonal. Je ne suis pas le seul, mais certains vont vraiment très très loin dans leur recherche d’une solution idéale :

https://blog.scottlogic.com/2020/10/09/ergo-rabbit-hole.html

Pour ceux qui ne connaissent pas, j’avais raconté l’histoire du Bépo sur le Framablog en 2011 :

https://framablog.org/2011/12/19/bepo-clavier-libre-ploum/

Écologie et bagnoles

Honda annonce se retirer de la Formule 1 en 2021 pour consacrer ce budget à développer des technologies permettant d’arriver à la neutralité carbone. Il est vrai que la F1 n’est pas un sport très écologique (notez que, quand vous voyez le nombre de voitures et motos sur une course, le cyclisme professionnel ne l’est guère non plus).

https://arstechnica.com/cars/2020/10/honda-shocks-f1-says-it-will-quit-the-sport-after-2021/

Le spécialiste belge de la F1, Gaetan Vigneron, relativise l’annonce. Ce n’est pas la première fois que Honda quitte la F1 et l’annonce écologique n’est certainement que la façade marketing pour une décision politico-financière. Ceci dit, Gaetan Vigneron revient sur l’aspect écologique avec une phrase malheureuse qui en dit très long sur la psychologie d’une partie de sa génération :

Bien sûr c’est bien de lorgner vers les technologies du futur et la neutralité zéro carbone, mais tout cela ne va-t-il pas trop vite… (sic)

Non Monsieur Vigneron ! On ne peut pas aller « trop vite ». Il y’a une urgence absolue. Cette simple phrase renforce mon idée que la F1 reste un symbole de l’automobile machiste, virile et polluante. Elle doit changer rapidement ou disparaitre. Il y’a des traces qu’on aimerait ne pas laisser…

https://www.rtbf.be/sport/moteurs/f1/detail_formule-1-honda-tire-la-prise-une-bonne-chose-pour-personne?id=10599173

Mes recommandations BD

J’étais un peu effrayé par le pitch de « Traquemage », par Lupano et Relom. J’avais peur de tomber dans la parodie fantasy facile type Donjon de Naheulbeuk, genre propice aux blagues d’intiés et à l’humour scatologique. Mais Traquemage tient ses promesses : une véritable aventure contant les péripéties d’un jeune berger, de sa chèvre couillonne Myrtille et de Pompette, la fée alcoolique. C’est drôle, délirant, bien rythmé sans tomber trop souvent dans la facilité. Après deux albums, j’ai envie de savoir la suite !

Belle découverte également, « Soleil Froid », par Pécau et Damien. Une aventure post-apocalyptique en 3 volumes qui se passe dans une France ravagée par une grippe aviaire particulièrement mortelle. L’originalité est le parti pris délicieusement amoral et les décors familiers (pour une fois qu’on n’est pas aux États-Unis). Les personnages ne cherchent qu’une chose : survivre, peu importe le prix (la scène de l’hôpital est splendide de simplicité). La survie finira néanmoins par se transformer en quête, avec révélations et rédemptions finales qui rendent la facture de l’ensemble un peu plus classique, mais qui a le bon goût de se clôturer efficacement.

Enfin, j’ai finalement pris le temps de lire un classique qui encombrait ma liste de lecture depuis longtemps : « Aâma », de Frederik Peeters. Un chef-d’œuvre onirique, à mi-chemin entre les mondes d’Aldébaran et l’Incal. Comme toutes les œuvres de ce genre, Aâma souffre un peu vers la fin, lorsque la frontière entre l’onirisme psychédélique et le portnawak se brouille. À titre personnel, j’appelle ce moment fait de sensations pures dans lequel tombent énormément d’histoires de SF la « zone Jodorowsky ». Une zone dont Aâma se sort plutôt bien, conférant à l’œuvre globale une saveur toute particulière et un statut culte mérité.

Photo by RetroSupply on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

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

I published the following diary on isc.sans.edu: “Nicely Obfuscated Python RAT“:

While hunting, I found an interesting Python script. It matched one of my YARA rules due to the interesting list of imports but the content itself was nicely obfuscated. The script SHA256 hash is c5c8b428060bcacf2f654d1b4d9d062dfeb98294cad4e12204ee4aa6e2c93a0b and the current VT score is only 2/59! The script is simple, after a bunch of imports and an if/then condition to detect if it is executed on Windows or Linux, we have this piece of code (slightly beautified)… [Read more]

The post [SANS ISC] Nicely Obfuscated Python RAT appeared first on /dev/random.

October 14, 2020

cover image

Imagine going to a restaurant. The food is amazing, and you're having a great time. You tell the waiter, "Compliments to the chef!", who dutifully reports the news to the kitchen.

Only the chef is crazy. He runs out and snatches your plate while you're still eating, saying "If you liked this one, wait until you try my next recipe!" He doesn't return for two days, so you leave hungry and dissatisfied.

When you write a letter in complaint, the chef considers you entitled and refuses to acknowledge you, because he discovered you put some extra salt and pepper on the food he served.

Welcome to Beat Saber, by Beat Games.

A chef carefully pouring oil on a salad

Nerds Trying To Dance

For a few months now, I've been enjoying this game in VR. It's a fantastic intersection of rhythm game, exercise and rave culture. It solves the biggest problem I've always had with going to clubs: that most people are there for the meat market instead of just dancing and having fun.

In fact, I would say Beat Saber is not a video game, but rather a sport. It is also a sport that many people have put significant time and effort into getting good at, myself included. We have the muscles and missing body fat to prove it:

This doesn't just take practice, it takes training.

The game is popular in large part because of numerous mods and player-created levels. The devs however refuse to play nice with all this. Every time the game updates, all that breaks. Most of your custom songs stop working, i.e. the ones you actually like. The UI goes back to being terrible, with lists not even sorted alphabetically, so you can't find anything. The last update completely changes the UI, which will require significant re-investment by mod authors. There are plenty of other complaints in comments and review bombs, ranging from graphical bugs to misaligned sabers. What I personally noticed is that the new effects make it harder to see what you're doing on the Expert+ levels.

It's like taking a tennis player's racket collection, bending them all by, say, 5 degrees, and then calling that person entitled if they explain that they can't hit the balls correctly this way.

Steam auto-update options: 1) keep this game up to date, 2) keep this game up to date when I start it, 3) keep this game up to date with high priority

Naturally, you can't turn off auto-updates... that would be too simple for Steam, which only offers a choice of "Yes.", "Yes?" and "Harder, daddy." You can't revert back to an older version of the game, because the developer doesn't let you. What you can do is:

It took hours just to get it back to what it was the day before, and which I was perfectly happy with. If other people hadn't already done the heavy lifting, it would've taken days, maybe weeks. Regardless, I would've tried to escape the update treadmill, because it would be absurd to have a hobby I can't enjoy when I want to.

$100 Bills

I have spent thousands of dollars on VR equipment now, and specifically bought a new set of Index controllers for this game, at ~$300 for the pair. I am the ideal customer for Beat Games, someone who is willing to spend a lot of money on their niche. Initially I bought a few music packs just to support them, even if the songs were meh. Several forced updates later, I hate them with the burning passion of a thousand suns and refuse to buy anything else these people make, because I hate being cockblocked by my own purchases. It's infuriating.

I'm sure the devs think it's the users who are entitled, expecting them to support our modded copies forever. But this is a case of Sinclair's Maxim in action: it is hard to get a developer to understand that customers don't want auto-updates, when his salary depends on not understanding it.

In this case, Beat Games appears to be following two incentives. First, they can only get more money out of existing customers by pushing new song packs on them through the game. Second, they can attract more mainstream customers by making the game more "accessible." So they think that's what they need to do, and think it outweighs the downsides. In reality, each forced update teaches a new cohort of the most engaged fans that the game they love doesn't love them back, and probably isn't worth spending any money on at all. The devs keep doing this.

This isn't just "this is slightly different and therefor I hate it," because I can easily compare now. It's different in a game-altering way. My muscle memory and visual cortex are honed for a sport that no longer officially exists. Maybe it will come back, I don't know. They think just because I liked one of their ideas once, that therefor I will like every new idea they have, and like it more than the last one. That the bugs they introduced simply don't exist and that their creation is perfect. That I will be willing to waste hours of my time, and then days more to adjust, when the net change is worse to me. Who feels entitled to whose time in this transaction?

Let's be honest, this problem is universal in software, and reflects the average developer's attitudes today: they force their users into accepting updates, without backwards compatibility or the choice of old vs new. They then interpret their users' reluctant resignation as a ringing endorsement. If you do this, I wish you a thousand stubbed toes forever, for you are a hare-brained prima donna who does not even consider what your customers experience when they try to use your work in the field.

Trainwreck Of Electro Swing

In the community, a common refrain is that this is just a temporary issue, and that in a few days the modders will have caught up. Ironically, this assumes that the good will of modders is endless, and that they won't tire of having to update their work over and over just to stay current. Anyone who has worked in open source knows this is a lie. As soon as the selfless contributor stops feeling the work is inherently rewarding, you have a pile of abandoned code on your hands that almost nobody knows, but a lot depends on.

Beat Saber's own success depends on it too. If you look on Youtube, you will see almost everyone is playing unofficial songs. Players use mixed reality set-ups to put themselves in the game, and even mod in entirely custom environments. It's purely there to look cool, so it looks nothing like it in-game. This level doesn't actually transform into an epileptic seizure:

It also reveals a choice Beat Games has, and which they seem be leaning into. Is Beat Saber a game that feels great to play, or is it a game that looks amazing to play? That is, is it for playing, or for watching? The latest update is notable for its rather obnoxious restyling of the entire UI, which replaces the relatively sober title screen with illustrations of people partying. Call me a grouch, but this is normie stuff, for one very simple reason: the people who only show up to the party when it's already banging... those are not the people who actually make great parties happen. This is trying to ensure people have fun by asking them, with a megaphone to their ear, "Are you having FUN yet???"

To me it's a text-book case of David Chapman's Geeks, MOPs and Sociopaths model, of trying to make something "cooler" while diminishing what made it work in the first place. It's not the pro-youtubers with their meticulously green screened performances... it was everyone else who vindicated the Star Wars Kid by shamelessly pretending to be a Jedi in their living room. You see, it is very rare when somebody who isn't Valve does what they do best: they give people a super-power and carefully teach them how to use it.

Star Wars Kid - 1
Star Wars Kid - 2
Star Wars Kid - 3

At the very least Beat Games should let the uncool, smelly nerds keep their hobby as it is, because that's how we liked it, and that's what we actually paid for when we bought it. Subscribing to software was supposed to help us keep our software secure and reliable, and allow users to benefit sooner from new functionality. If those updates break people's set ups for days, disrupt muscle memory even if it does work, and target a different audience, you are doing it completely wrong. Because the correct answer to that is product differentiation, dickbrains.

The Only Thing They Fear Is You

When faced with a community of enthusiasts eager to hack your game to bits, you have a choice. You can push back hard and say "no, we are the devs, we control this thing." Or you can realize you have a luxury of free talent, man-hours and passion at your disposal and figure out how to work best with it, instead of giving them the middle finger and cold shoulder.

You can see mods as free prototypes, already validated in the market, and try to integrate their functionality natively. You can plan and implement smooth support for legacy content. You can set up a Discord to act as a recruiting pipeline. You can identify the modders that would make a good addition to your team, who know your code from angles you never considered. You can use modding guides to figure out what the typical end-user's copy actually looks like in the wild, and try to handle the 90% case, to cut down on hate mail. You can also use it as a spec for the modding API you probably should've built but didn't.

Yes, you can actually have specs, and automated tests. This is a thing people sometimes do when they want to engineer reliable and reproducible behaviors in a collaborative environment, without increasing the amount of things they have to keep track of in their head. I know, it's wild.

If Beat Games keeps it up, then they are basically attributing all their success only to their own efforts, instead of what their customers did with it. The devs are outnumbered, so some humility is advised. In 10 years nobody will remember a "Linking Park DLC." But there will probably be an OpenBeatSaber, created by one or more passionate fans, motivated by love for their hobby and spite for the people who mismanaged it. Unless they change their approach.

If you want an example of how to do this right, learn from Line Rider creator, Boštjan Čadež. You'd be amazed what happens when somebody understands the value of a deterministic physics engine.

October 12, 2020

C’est une question que j’entends souvent lorsque je parle de cryptomonnaie : ne pourrait-on pas déplacer la virgule pour avoir plus de bitcoins ?

Peut-on déplacer la virgule du Bitcoin ? Oui !

Le code du logiciel Bitcoin étant Open Source, n’importe qui peut le modifier pour en déplacer la virgule. Il affichera alors que vous avez 100 ou 1000 bitcoins au lieu d’un seul. Bien entendu, il ne s’agit que d’un affichage. Au moment du premier paiement, seule la valeur originale sera comptée. Vous pouvez rajouter des zéros au crayon sur votre billet de 10€ et prétendre que vous avez 1000€. Mais le premier magasin venu vous ramènera à la réalité.

Il est par contre possible de se mettre d’accord pour que tous les utilisateurs du Bitcoin déplacent la virgule ensemble. C’est exactement ce qu’on fait les Français en 1958, en passant de l’ancien au nouveau franc (même si eux ont décidé de déplacer la virgule dans l’autre sens pour avoir moins de francs).

En juin 2011, je militais activement sur le célèbre forum Bitcointalk pour un déplacement de la virgule de trois décimales vers la droite. Un autre utilisateur, MoonShadow, lança même un sondage, mais, cette fois-ci, proposant un déplacement de la virgule de six décimales vers la droite. Notre raisonnement commun était clair : alors qu’un bitcoin vaut environ 10 dollars, si on déplace la virgule, il y’aura un effet psychologique de garder le « nouveau bitcoin » entre 1 et 10 dollars, augmentant la valeur de « l’ancien bitcoin ». Ce raisonnement très naïf se révèle entièrement faux, mais nous ne le savions pas.

https://bitcointalk.org/index.php?topic=13144.0;topicseen

Cependant, l’idée de déplacer la virgule n’était pas neuve. En avril 2009, Satoshi lui-même parlait déjà de bouger la virgule pour rendre l’unité bitcoin plus simple à échanger.

https://nakamotostudies.org/emails/satoshi-reply-to-mike-hearn/

Ce déplacement aurait-il changé les choses ?

Techniquement, il s’agissait en tout et pour tout d’afficher la virgule sur une autre place dans le logiciel. D’un point de vue du code, tout resterait exactement pareil. La seule différence étant que ceux qui possédaient un bitcoin en auraient désormais un million.

L’idée derrière cette réflexion était qu’en dépassant la valeur nominale de un dollar par bitcoin, l’usage du bitcoin risquait de devenir peu pratique pour les paiements courants. On se retrouverait en permanence à gérer de très petits nombres, de types 0,001 bitcoin.

Malgré l’avis initial de Satoshi et le soutien de la communauté de l’époque (plus de deux tiers des 150 participants à ce sondage ont répondu en faveur du déplacement de la virgule), les développeurs n’en ont pas tenu compte et le prix d’un bitcoin s’est envolé, atteignant 1000$ en 2013 et 19000$ en 2017 avant de revenir à 10000$ en 2020, suscitant un incroyable battage médiatique et un intérêt du grand public.

Dirigeons-nous un instant dans l’univers parallèle 40bz2. Dans cette galaxie, la virgule a bel et bien été déplacée. Ce n’est qu’une question d’affichage et tout le reste, absolument tout le reste est resté identique : les mineurs, les échanges, les altcoins. Une seule ligne dans un logiciel change l’affichage d’un chiffre. C’est tout !

Pourtant, ce simple déplacement de la virgule a entrainé des différences profondes. Malheureusement, la communication entre univers parallèles n’est pas parfaitement au point. L’image est floue. Tout au plus peut-on tenter de deviner. En 2011 et 2012, les premiers participants se sont retrouvés millionnaires en bitcoins. Le prix du bitcoin a peut-être monté un peu plus vite, atteignant 1$ pour 1000 bitcoins dès 2012. Par contre, les médias n’ont pas pu titrer sur le caractère « cher » ou « bon marché » d’un bitcoin. C’est trop petit, pas assez intéressant. La bulle est sans doute arrivée plus tardivement. Est-ce que le prix est monté plus fort ou moins fort ? Mon Einsteinphone ne permet pas de le dire.

Tout ce que l’on peut faire est revenir dans notre bon vieil univers familier.

Bitcoinnaires et millionnaires en satoshis

Tout naturellement, la communauté s’est adaptée et parle désormais de satoshis pour les transactions courantes. Le prix d’un bitcoin semble désormais beaucoup trop cher pour le grand public. À chaque conférence, je dois rappeler que l’on peut acheter des fractions de bitcoins, qu’il n’est pas nécessaire d’en acheter un entier. Je me retrouve également à expliquer que les prix d’un ether, d’un litecoin ou d’un bitcoin ne sont en rien comparables. Les modes d’émission de la monnaie sont très différents. L’important n’est pas le prix, mais la fraction de l’économie totale que vous achetez. Mathématiquement, le nombre de bitcoins ne pourra jamais excéder 21 millions. Le nombre d’ether n’est, lui, en théorie pas limité. Les deux économies sont donc complètement différentes. L’un n’est pas « plus cher » que l’autre.

Quoiqu’il en soit, mon espoir de devenir un jour millionnaire en bitcoins s’est bel et bien envolé. Il ne reste que la possibilité de devenir millionnaire en satoshis (il y’a 100 millions de satoshis dans un bitcoin, en octobre 2020, un million de satoshis coûtent donc 110$).

Peut-être que, dans pas tellement longtemps, on ne parlera plus de milliardaires ou millionnaires, mais de bitcoinnaires. Mais si, vous savez bien : ces personnes tellement riches qu’elles possèdent un bitcoin tout entier. Les veinardes !

L’idée n’est pas complètement saugrenue lorsqu’on sait que la limite théorique de 21 millions de bitcoins sera atteinte en 2140. Le nombre d’êtres humains possédant un capital d’au moins 1 million de $ (patrimoine immobilier compris) varie entre 20 et 35 millions selon les estimations. Cela signifie que si vous connaissez quelqu’un dont la fortune globale personnelle est au moins de 1 million de dollars, il fait partie des 35 millions les plus riches de la planète, les 0,5%. En Europe, près de 2,5% de la population est millionnaire.

En comparant les chiffres, on se rend compte que même si l’usage du Bitcoin était réservé aux millionnaires en dollars, il n’y aurait pas assez de bitcoins pour tout le monde. Pire, en tenant en compte des bitcoins irrémédiablement perdus, on arrive à moins d’un demi-bitcoin par millionnaire.

À ce titre, utiliser le mot « bitcoinnaire » pour désigner une personne très riche fera peut-être bientôt partie du vocabulaire courant. Ou peut-être que le Bitcoin aura rejoint depuis longtemps le cimetière des projets précurseurs inutilisés comme Napster. Bitcoin va-t-il disparaitre ou créer un monde de bitcoinnaires ? C’est la question à devenir bitconnaire, seul le futur nous le dira. 

Une chose est certaine : une simple virgule dans un logiciel peut changer le monde. En fait, elle l’a déjà fait.

Photo by Ramiro Mendes on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

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

October 09, 2020

You probably have heard about AVIF already, but if not; it is a new image format which is based on the AV1 video format and generally has superior compression than the better-known WebP, JPEG, PNG and GIF formats. Avif is currently supported by Chrome & Opera and can be enabled by setting the image.avif.enabled flag in Firefox.

So now you know what it is you may want to use it on your WordPress site? In that case -and the title kind of gives it away- the freshly released Autoptimize 2.7.8 now has support for AVIF if you have image optimization active. Just as for WebP Autoptimize hooks into the lazyload JavaScript to detect if your visitor’s browser supports AVIF and will switch the requests to the ShortPixel CDN to that format if so. If AVIF is not support but WebP is, the requests will be for WebP images and if those are not supported old-fashioned JPEG’s will be loaded.

So there you have it, AVIF is now available in WordPress!

October 08, 2020

Als je je computer inschakelt, je smartphone ontgrendelt of je thermostaat bijstelt, treedt er op de achtergrond een heel proces in werking. Iemand (meestal een heel team) heeft de processor die in deze apparaten zit geprogrammeerd: minutieus aan de processor uitgelegd welke instructies die moet uitvoeren.

Computers en algoritmes overheersen steeds meer ons leven. Er gaan zelfs stemmen op om kinderen op de lagere school al te leren programmeren. Maar hoe begin je daaraan? En welke van de vele programmeertalen kies je?

De Arduino Uno, een gebruiksvriendelijk bordje om microcontrollers te leren programmeren. (Bron: Arduino)

Voor Linux Magazine schreef ik het artikel Zet je eerste stappen in programmeren. Ik bespreek er machinetaal, computationeel denken, visuele programmeertalen zoals Scratch en Node-RED, algemene programmeertalen zoals JavaScript en Python en hun ecosystemen, en tot slot het Arduino-platform voor wie meer met microcontrollers en elektronica aan de slag wil.

Uiteindelijk is de beste manier om te leren programmeren het in de praktijk doen en veel oefenen. Zoiets houd je alleen vol als je het interessant vindt. Ik raad dan ook niet aan om een specifieke programmeertaal te kiezen omdat ze populair is of veel gevraagd is op de arbeidsmarkt.

Kies gewoon een taal die goed geschikt is voor iets waarin je geïnteresseerd bent, of dat nu games ontwikkelen, websites bouwen of mobiele apps maken is. En begin dan gewoon al lerend dit te programmeren. Nadat je de basis van een eerste taal onder de knie hebt, leer je heel snel een andere programmeertaal.

October 06, 2020

Primo Levi was een jonge Joods-Italiaanse chemicus die de bergen introk om bij het verzet te gaan maar in 1943 werd opgepakt en naar Auschwitz werd gedeporteerd.

“Is dit een mens” gaat over leven, overleven, sterven en al dan niet mens zijn in een concentratiekamp. Over grote gruwel en het kleine leven, over diefstal, handel en pikorde tussen de verschillende slachtoffergroepen. Over de laatste stap van de ontmenselijking, in zijn meest extreme vorm. Over Dante’s Inferno, geschreven door iemand die de hel van Auschwitz overleefde.

Ik wil alleszins het vervolg “Het respijt” over zijn tocht terug naar Turijn ook lezen.

October 04, 2020

After a long hiatus, I'm ready to take up blogging again on my public blog. With my day job becoming more intensive and my side-job taking the remainder of the time, I've since quit my work on the Gentoo project. I am in process of releasing a new edition of the SELinux System Administration book, so I'll probably discuss that more later.

Today, I want to write about a task I had to do this year as brand new domain architect for infrastructure.

Transitioning to domain architect

While I have been an infrastructure architect for quite some time already, my focus then was always on specific areas within infrastructure (databases, scheduling, big data), or on general infrastructure projects or challenges (infrastructure zoning concept, region-wide disaster recovery analysis and design). As one of my ex-colleagues and mentors put it, as infrastructure architects you are allowed to piss on each other's area: you can (and perhaps should) challenge the vision and projects of others, of course in a professional way.

I heeded the advice of this person, and was able to get a much better grip on all our infrastructure services, their designs and challenges. I mentioned earlier on that my day job became more intensive: it was not just the direct responsibilities that I had that became more challenging, my principle to learn and keep track of all infrastructure evolutions were a large part of it as well. This pays off, as feedback and advice within the architecture review boards is more to the point, more tied to the situation.

Furthermore, as an architect, I still try to get my hands dirty on everything bouncing around. When I was focusing on big data, I learned Spark and pySpark, I revisited my Python knowledge, and used this for specific cases (like using Python to create reports rather than Excel) to make sure I get a general feel of what engineers and developers have to work with. When my focus was on databases, I tried to get acquainted with DBA tasks. When we were launching our container initiative, I set up and used Kubernetes myself (back then this was also to see if SELinux is working properly with Kubernetes and during the installation).

While this does not make me anything near what our engineers and experts are doing, I feel it gives me enough knowledge to be able to talk and discuss topics with these colleagues without being that "ivory tower" architect, and better understand (to a certain level) what they are going through when new initiatives or solutions are thrown at them.

End of 2019, the company decided that a reorganization was due, not only on department and directorate level, but also on the IT and Enterprise Architecture level. One of the areas that improved was to make sure the infrastructure in general was also covered and supported by the EA team. Part of that move, two of my infrastructure architect colleagues and myself joined the EA team. One colleague is appointed to tackle a strategic theme, another is now domain architect for workplace/workforce, and I got the task of covering the infrastructure domain. Well, it is called infrastructure, but focus on the infrastructure related to hosting of applications and services: cloud hosting, data center, network, compute, private cloud, container platform, mainframe, integration services, middleware, etc. Another large part of what I consider "infrastructure" is part of the workplace domain, which my colleague is pushing forward.

While I was still handing over my previous workload, coaching the new colleague that got thrown in to make sure both him and the teams involved are not left with a gap, the various domain enterprise architects got a first task: draft up the strategy for the domain… and don't wait too long ;-)

Tackling a domain strategy

Now, I've drafted infrastructural strategies quite a few times already, although those have most focus on the technology side. The domain view goes beyond just the technological means: to be able to have a well-founded strategy, I also have to tackle the resources and human side of things, the ability of the organization to deal with (yet another?) transformation, the processes involved, etc.

Unlike the more specific area focus I had in the past, where the number of direct stakeholders is limited, the infrastructure domain I now support has many more direct stakeholders involved. If I count the product managers, system architects, product owners (yes we are trying the Scaled Agile approach in our organization) and the managerial roles within the domain, I have 148 people to involve, spread across 7 Agile Release Trains with different directorate steering. The consumers of the infrastructure services (which are more part of business delivery services rather than on IT level) are even much larger than that, and are the most important ones (but also more difficult) to get in touch with.

Rather than just asking what the main evolutions are in the several areas of the domains, I approached this more according to practices I read in books like "Good Strategy, Bad Strategy" by Richard Rumelt. I started with interviews of all the stakeholders to get to learn what their challenges and problems are. I wanted our strategy to tackle the issues at hand, not focus on technological choices. Based on these interviews, I grouped the issues and challenges to see what are the primary causes of these issues.

Then I devised what action domains I need to focus on in the strategy. An action domain was an area that more clearly describes the challenges ahead: while I had close to 200 challenges observed from the interviews, I can assign the huge majority of them to one of two action domains: if we tackle these domains then we are helping the organization in most of their challenges. After validating that these action domains are indeed covering the needs of the organization, I started working on the principles how to tackle these issues.

Within the principles I want to steer the evolution within the infrastructure domain, without already focusing on the tangible projects to accomplish that. The principles should map to both larger projects (which I wanted to describe in the strategy as well) as well as smaller or more continuity-related projects. I eventually settled with four principles: - one principle covering how to transform the environment, - one principle covering what we offer (and thus also what we won't be offering anymore), - one principle which extends our scope with a major area that our internal customers are demanding, and - one principle describing how we will design our services

Four principles are easy enough to remember for all involved, and if they are described well, they are steering enough for the organization to take up in their solutions. But with principles alone the strategy is not tangible enough for everyone, and many choices to be made are not codified within those principles. The next step was to draw out the vision for infrastructure, based upon current knowledge and the principles above, and show the major areas of work that lays ahead, as well as give guidance on what these areas should evolve to.

I settled for eight vision statements, each worked out further with high level guidance, as well as impact information: how will this impact the organization? Do we need specific knowledge or other profiles that we miss? Is this a vision that instills a cultural change (which often implies a slower adoption and the need for more support)? What are the financial consequences? What will happen if we do not pursue this vision?

Within each vision, I collaborated with the various system architects and other stakeholders to draft out epics, changes that support the vision and are ready to be taken up in the Scaled Agile approach of the organization. The epics that would be due soon were fully expanded, with a lean business case (attempt) and phasing. Epics that are scheduled later (the strategy is a 5-year plan) are mainly paraphrased as expanding those right now provides little value.

While the epics themselves are not fully described in the strategy (the visions give the rough approach), drafting these out is a way to verify if the vision statements are feasible and correct, and is a way to check if the organization understands and supports the vision.

From the moment I got the request to the final draft of the strategy note, around 2 months have passed. The first draft was slideware and showed the intentions towards management (who wanted feedback within a few weeks after the request), after which the strategy was codified in a large document, and brought for approval on the appropriate boards.

That was only the first hurdle though. Next was to communicate this strategy further…

Communication and involvement are key

The strategic document was almost finalized when COVID-19 struck. The company moved to working at home, and the way of working changed a lot. This also impacted how to approach the communication of the strategy and trying to get involvement of people. Rather than physically explaining the strategy, watching the body language of the people to see if they understand and support it or not, I was facing digital meetings where we did not yet have video. Furthermore, the organization was moving towards a more distributed approach with smaller teams (higher agility) with fewer means of bringing out information to larger groups.

I selected a few larger meetings (such as those where all product managers and system architects are present) to present and discuss the strategy, but also started making webinars on this so that interested people could get informed about it. I even decided to have two webinars: a very short one (3 minutes) which focuses on the principles alone (and quickly summarizes the vision statements), and an average one (20-ish minutes) which covers the principles and vision statements.

I also made recordings of the full explanations (e.g. those to management team), which take 1 hour, but did not move those towards a webinar (due to time pressure). Of course, I also published the strategy document itself for everyone, as well as the slides that accompany it.

One of the next steps is to translate the strategy further towards the specific agile release trains, drafting up specific roadmaps, etc. This will also allow me to communicate and explain the strategy further. Right now, this is where we are at - and while I am happy with the strategy content, I do feel that the communication part received too little attention from myself, and is something I need to continue to put focus on.

If a strategy is not absorbed by the organization, it fails as a strategy. And if you do not have sufficient collaboration on the strategy after it was 'finalized' (not just communication but collaboration) then the organization cannot absorb it. I also understand that the infrastructure strategy isn't the only one guiding the organization: each domain has a strategy, and while the domain architects do try to get the strategies aligned (or at least not contradictory to each other), it is still not a single, company-wide strategy.

Right now, colleagues are working on consolidating the various strategies on architectural level, while the agile organization is using the strategies to formulate their specific solution visions (and for a handful of solutions I'm also directly involved).

We'll see how it pans out.

So, do you think this is a sensible approach I took? How did you tackle communication and collaboration of such initiatives during COVID-19 measures?

October 03, 2020

cover image

Let me tell you a tech story.

Many years ago, I was working on an app with real-time collaboration built into it. It was a neat experimental stack, using early React and CouchDB to their full potential. It synced data live over JSON OT. It was used to do actual work internally, but the general applicability and potential for re-use was evident.

Trying to sell potential customers on this technology, we ran into an unexpected wall. Our tech looked and worked great in the demo video, no problem there. It showed exactly how it worked, and nothing was faked. We had come up with and coded a credible field scenario.

Two users interacting through a mobile app

That was in fact the problem. Our demo worked exactly the way everyone else always pretended their apps worked. Namely that information would flow instantly from A to B, even large media files. That everyone would see new records as they came in. That by adopting an app, users could just work together without friction on the exact same things, even if they had a spotty internet connection in the middle of nowhere. This is the sort of thing every After Effects-product-video does implicitly.

Despite the fact that everyone knew what a Refresh button was for, it didn't register at all that the web apps they were asking us to build would normally be subject to its limitations. Or that it would be an entirely different experience if you stopped needing it altogether. What they mainly noticed was that you could "chat" by leaving notes between people, so they wondered how this was different from, say, Slack. Oof.

The Design of Everyday Syncs

If you've been working in software for a while, it can be a bit jarring to remember that most people cannot look at a picture of an interface and infer what it will do when they interact with it. Let alone know what's going to happen behind the scenes. Knowing what can happen is largely a result of knowing what cannot happen, or should not happen. It requires a mental model not just of what the software is doing, but how its different parts are arranged and can communicate.

A classic example is the user who is staring at a spinner.gif for 20 minutes, wondering when the work will finally be done. The developer would know the process is probably dead and that the gif will never go away. Its animation mimes that work is happening, but it's not connected to the state of the work. This is the sort of thing where some techies like to roll their eyes at just how misinformed a user can be. Notice though, which one of them is pointing at a spinning clock and saying it's actually standing still?

An animated activity spinner

This is the value proposition of real-time in a nutshell. These days real-time databases are still mostly underused, and still regarded with suspicion. Most of them lean heavily into NoSQL style, which tend to bring up Mongo-fueled benders people would rather forget. For me though, it meant getting comfy on the CouchDB, as well as learning to design schemas that somebody other than a bureaucrat could correctly fill in. I think my time was better spent.

The real topic of this post is what I'm using these days. Not by choice, but through uncaring and blindly applied corporate policy. Hence a Totally Fair and Unbiased comparison of two closely related Real-Time Database Products By Googleâ„¢.

Firebase Real-Time Database + Firebase Cloud Firestore = Firebase

Anyone need more stickers?

They both have fire in their name. One I regard with fondness. The other is a different kind of fire. If I'm hesitant to name them, it's because once I do, you will run into the first big problem, their names.

One is called the Firebase Real-Time Database and the other is the Firebase Cloud Firestore. They are both products in Google's Firebase suite. The APIs are respectively firebase.database(…) and firebase.firestore(…).

This is because Real-Time Database is just the original Firebase, before Google bought it in 2014. They then decided to build a copy of Firebase on their big data whatsit, as a parallel offering, and named it Firestore with a cloud. Hope you're still following. If not, no worries, I have tried to rewrite this part a dozen times already.

Cos really you have a Firebase in your Firebase, and a Firestore in your Firebase, or at least you do if you want to be able to make sense of Stack Overflow from a few years ago.

If there is a Raspberry award for worst naming in software products, this surely qualifies. The mental hamming distance between these names is so small it will trip up even seasoned engineers, whose fingers will type one thing as their lips speak another. It will royally fuck up plans made with the best of intentions, fulfilling the prophecy of having your database be on fire. I'm not joking in the slightest. The person who came up with this naming scheme has blood, sweat and tears on their hands.

I will call them Firebaseâš¾ï¸� and Firestore🧯. The baseball is for Firebase, and the fire extinguisher is for Firestore, because you need one.

A man chasing bugs with a butterfly net in a forest that's on fire

Pyrrhic Victory

You might think Firestore🧯 is the replacement for Firebaseâš¾ï¸�, a next-generation successor, but that would be false. Firestore🧯 is patently unsuitable as a Firebaseâš¾ï¸� replacement. Somebody has seemingly engineered away almost everything that is interesting about it, and messed up most of the rest in various ways.

A cursory glance at the two offerings will confuse you though, because it seems they do the same thing, through mostly the same APIs and even the very same DB session. The differences are subtle and will only be discovered after careful comparative study of the sparse docs. Or when you're trying to port code that works perfectly fine on Firebaseâš¾ï¸� over to work with Firestore🧯. When you discover that your database interface catches fire as soon as you try to do a mouse drag in real-time. Again, not kidding.

Firebaseâš¾ï¸�'s client is polite in that it buffers changes and auto-retries with last-write-wins best-effort consistency. Firestore🧯 however has a throttle of 1 write per document per user per second, enforced by the server. It's up to you to implement a rate limiter around it yourself when you use it, even though you're just trying to build your app. So Firestore🧯 is a real-time database without a real-time client, wearing the API of one as a skin suit.

This is also where you start to see the first hints of the reason for Firestore🧯's existence. Those words "best-effort consistency" tend to make Grumpy Database Admins' few remaining hairs stand up. I could be wrong about this, but I suspect that somebody high up enough at Google looked at Firebaseâš¾ï¸� after they bought it and simply said: "No. Dear God, No. This is unacceptable. Not on my watch."

A gray beard monk reading from a tome

They emerged from their chambers and declared:

"One big JSON document? No. You will split your data into separate documents, each no more than 1MB in size."

This seems like a limit that will not survive first encounter with any sufficiently motivated user base. You know it's true. Like, we have a few 1500+ slide presentations at my current job, which is Perfectly Normal.

Under this constraint, you will be forced to accept that one "document" in your database bears no resemblance to anything a user might refer to as a document. This is the kind of thing that will cause subtle misery from day 1 in attempting to match end-user requirements, and never cease.

"Arrays of arrays that can contain other things recursively? No. Arrays will contain only objects, or numbers of a fixed size, as God intended."

So if you were hoping to put GeoJSON in your OnFirestore🧯, you will discover that's not possible. With anything remotely not 1-dimensional. Hope you like Base64 and/or JSON inside JSON.

"Import and Export JSON via HTTP, command line tools or the admin panel? No. You will only export and import data to and from Google Cloud Storage. At least I think that's what it's called these days. When I say 'you', I am only talking to those of you with Project Owner permissions. Everybody else go away and file a ticket."

You see, FireBae🤵⚾�'s data model is straightforward to describe. It contains one big enormous JSON document, which maps JSON keys to URL paths. If you HTTP PUT this to your ⚾� at /:

{
  "hello": "world"
}

Then GET /hello will return "world". For the most part this works as you'd expect. A ⚾� collection of objects /my-collection/:id is equivalent to a JSON dictionary {"my-collection": {...}} at the root, whose contents are available at /my-collection:

{
  "id1": {...object},
  "id2": {...object},
  "id3": {...object},
  // ...
}

This works fine as long as each insert has a non-colliding ID, which you are provided a standard solution for.

In other words, âš¾ï¸� is 100% JSON compatible (*) and plays nice with HTTP, like CouchDB. But you mostly use it through its real-time API, which abstracts away the websockets, auth and subscriptions. The admin panel does both, allowing real-time edits and JSON import/export. If you embrace the same in your code, it's quite astonishing how much specialized code disappears once you realize JSON patch and diff can solve 90% of your persistent state handling chores.

🧯's data model is JSON-like, but diverges in a few critical ways. No arrays of arrays was already mentioned. The model for sub-collections is to have them be first class concepts, separate from the JSON document holding them. Because there is no readily available serialization for this, getting data in and out requires a specialized code path. You must build your own scripts and tools to handle your own collections. The admin panel only allows you to make small edits, one field at a time, and does not have any import/export.

They took a real-time NoSQL database and turned it into a slow, auto-joined not-SQL with a dedicated not-JSON column. Something something GraftQL.

A developer sitting at a computer that's on fire

Hot Java

If 🧯 was supposed to be more reliable and scalable, then the irony is that the average developer will end up with a less reliable solution than if they had just used âš¾ï¸� out of the box. The kind of software that Grumpy Database Admin has designed for requires a level of effort, and caliber of engineering, that just isn't realistic for the niche they are supposedly good at. It's similar to how HTML5 Canvas is not at all a Flash substitute, if the tools and player aren't there. What's more, it is steeped in an attitude towards data purity and sterile validation that simply doesn't match how the average business user actually likes to get work done, which is that everything is optional because everything is a draft until the very end.

The main flaw in âš¾ï¸� is that the client was created a few years too soon, before you could reasonably expect most web developers to know what immutability was. As a result, âš¾ï¸� assumes you are mutating your data, and will not benefit from any immutability you feed it. It will also not reuse data in the snapshots it gives you, making diffs much harder. For larger documents, its mutable-diff based transactional mechanism is just inadequate. C'mon guys, we have WeakMap in JavaScript now. It's cool.

If you give your data the right shape, and keep your trees shallow, you can work around this. But I do wonder whether âš¾ï¸� wouldn't get a whole lot more interesting to people if they just released a really good client API based on leveraging immutability, coupled with serious practical advice on schema design. Instead it's like they tried to fix what wasn't broken, and made it worse.

A developer on fire

I don't know the full intent behind building 🧯. Speculating about motives inside the Borg cube is part of the fun. The juxtaposition of these two extremely similar but discapable databases is a relative rarity in the scene. It's almost as if somebody thought "âš¾ï¸� is just a feature we can emulate on <Google â˜�ï¸�>" but hadn't yet discovered the concept of gathering real-world requirements, or coming up with useful solutions for all of them. "Let the developers worry about that. Just make the UI pretty... Can we add more fire?"

I do know a thing or two about data structures. I can certainly see that "everything is one big JSON tree" is attempting to abstract away any sense of large-scale structure from a database. Expecting the software to just cope with any kind of dubious schema fractal is madness. I really don't need to imagine how bad these things can get, for I have done hostile code audits, and seen things you wouldn't believe. But I also know what good schemas look like, how you can leverage them, and why you should. I can imagine a world where 🧯 seemed absolutely like the right thing to do and where the people who did it think they did a good job. But it's not the one I live in.

âš¾ï¸�'s support for querying is poor by anyone's standards, borderline non-existent. It certainly could have used improvement, or even a rethink. But 🧯 isn't much better, as it is limited to the same 1 dimensional indices you get in basic SQL. If you want the kinds of queries humans like to do on messy data, that means full text search, multi-range filters, and arbitrary user-defined ordering. Anything that's basic SQL if you squint is itself too limited. Besides, the only SQL queries people can run in production are the fast ones. What you want is a dedicated indexing solution with grown up data structures. For everything else, there ought to at least be incremental map-reduce or something.

If you ask Google's docs about this, you will be helpfully pointed in the direction of things like BigTable and BigQuery. All these solutions however come with so much unadulterated enterprise sales speak, that you will quickly turn back and look elsewhere.

The last thing you need with a real-time database is something made by and for people who work on an executive schedule.

(*) Just kidding, there is no such thing as 100% JSON compatible.

October 02, 2020

Quelques liens en vrac que vous pouvez lire sans vous connecter aux réseaux sociaux. Je reçois de nombreux mails enthousiastes pour ce type de billets au format « brêves ». C’est donc un format qui semble apporter de la valeur, mais qui, ironiquement, n’a aucune chance de « faire le buzz ». Tant mieux, ce n’est pas ce que vous et moi cherchons. On n’est pas bien là, entre nous ? Au fait, vous préférez des billets plus courts et plus fréquents ? Ou on continue ?

Minimalisme numérique

J’en parle souvent, mais c’est important de ne pas l’oublier : même quand on ne les utilise pas, nos smartphones nous rendent bêtes. Le simple fait d’avoir un smartphone à portée de main nous déconcentre.

https://www.calnewport.com/blog/2020/09/22/do-smartphones-make-us-dumber/

Le problème chez les adultes, c’est que pour se concentrer, il faut induire un certain sentiment d’urgence, sentiment qui produit des hormones qui nous donnent envie de passer à l’action et donc de nous déconcentrer. Il faut apprendre à passer outre ce cap pour approcher la concentration profonde et efficace.

https://www.calnewport.com/blog/2020/09/29/on-the-neurochemistry-of-deep-work/

Un bon exemple en la personne de Trump. En analysant ses tweets, on peut découvrir qu’il dort de moins en moins longtemps et que cela a un impact direct sur… ses tweets eux-mêmes ! Moins il dort, moins ses tweets sont positifs et moins ils génèrent de l’engagement. Trump ne m’intéresse pas, mais on peut facilement généraliser cette observation à soi-même.

https://www.psychnewsdaily.com/analysis-of-trumps-tweets-show-hes-sleeping-less-and-getting-angrier/

Il faut dire qu’il y’a de quoi être énervé, car, quand on prend du recul, notre technologie mirobolante fonctionne mal. Très mal. Ça clignote partout, mais faîtes un peu l’exercice de noter tout ce qui « ne va pas » dans une journée. Je suis ingénieur en informatique et j’ai passé plus d’une heure de ma matinée à tenter de me connecter à un site du gouvernement avec ma carte d’identité électronique.

https://tonsky.me/blog/tech-sucks/

Ce n’est pas un hasard si je me tourne de plus en plus vers le minimalisme numérique.

https://ploum.net/series/distraction-free/

Mais je suis loin d’être le seul. Exemple très proche du mien avec l’écrivaine Florie Vine.

https://florieteller.com/minimalisme-numerique/

Personnellement, je tente de ne plus créer de compte nulle part, de les supprimer (je vous en reparlerai), de ne plus télécharger de logiciels, de réduire mes besoins. Malheureusement, ceux qui conçoivent certains de mes logiciels ne font pas toujours pareil. Mozilla est actuellement sur la sellette. Alors que Firefox dégringole dans les parts de marché, que les seules sources de revenus proviennent, indirectement, du capitalisme de surveillance, le salaire des exécutifs n’a fait qu’augmenter. Comme dans les banques.

http://calpaterson.com/mozilla.html

Fierté

Beaucoup d’écrivains ont des pages Wikipédia. Mais combien sont cités dans les exemples du Wiktionnaire ? J’ai découvert que j’en fais partie. J’en suis très fier.

https://fr.wiktionary.org/wiki/salvation

Imaginaires & Vélo

J’aime beaucoup les nouvelles noires de Valéry Bonneau. Du coup, j’ai été content de découvrir qu’il sortait un recueil papier. Pas forcément pour les relire immédiatement, mais parce qu’elles méritent une place dans ma bibliothèque. Souvenez-vous d’Umberto Eco : une bibliothèque n’est pas la liste de ce qu’on sait, c’est une mine de ce qu’on ne connait pas encore.

https://www.valerybonneau.com/bibliographie/dans-la-foule-nouvelles-noires-pour-se-rire-du-desespoir-volume-5

Et même si je ne suis pas fan du format podcast, je n’ai pas pu résister de contribuer modestement au projet d’Antoine et Léa.

https://www.kisskissbankbank.com/fr/projects/nos-spheres-le-podcast-qui-interroge-nos-imaginaires-sociaux-et-politiques/tabs/description

Thierry Crouzet a organisé un tour en vélo de l’Hérault au mois d’avril. J’avais très envie de participer, mais le covid est passé par là. Finalement, ils ont été deux à le faire en septembre. Et c’est un régal à lire.

https://tcrouzet.com/2020/09/28/bikepacking-dans-la-tourmente/

Un régal et à la fois une frustration intense de ne pas avoir été présent. Mon expérience de 2019 me donne encore des fourmis dans les jambes. Je ne sais pas encore comment ni où ni avec qui, mais, en 2021, j’espère remettre le couvert.

https://ploum.net/de-la-mediterranee-a-latlantique-en-vtt/

J’avais séparé les sections « Imaginaires » et « Vélo ». Puis je suis retombé sur ce billet de Thierry :

https://tcrouzet.com/2019/02/15/le-velo-comme-ecriture/

Effondrement

Le problème du Covid ne serait pas la contagiosité, mais la variabilité de cette contagiosité. Les mesures à prendre pour une maladie à contagiosité variable sont très différentes. Continuez à éviter les réunions de famille, les sorties cinéma et les restaurants bondés.

https://www.theatlantic.com/health/archive/2020/09/k-overlooked-variable-driving-pandemic/616548/

De toute façon, si vous craignez un effondrement civilisationnel, j’ai une bonne nouvelle. Il ne va pas arriver. Nous sommes tout simplement en plein dedans. Avec de la chance, on y survit.

https://gen.medium.com/i-lived-through-collapse-america-is-already-there-ba1e4b54c5fc

Pour maximiser nos chances de survies, cependant, il faut peut-être accepter de prendre des décisions rationnelles. Notamment sur le fait que l’énergie nucléaire est la plus propre, la plus sûre et la plus efficace que nous ayons sous la main. Et que les radiations sont certainement beaucoup moins dangereuses que ce l’on peut croire.

https://www.bbc.com/news/science-environment-54211450

Journalisme

Le procès pour l’extradition de Julian Assange est l’occasion de condamner le fait de… faire du journalisme, tout simplement.

https://www.jonathan-cook.net/blog/2020-09-22/guardian-silent-assange-trial/

Le tout en l’accusant de broutilles techniques parce qu’il n’y a pas grand-chose d’autre dont on peut accuser Assange sans immédiatement accuser l’ensemble de la profession des journalistes.

https://dissenter.substack.com/p/prosecutors-password-cracking-conspiracy

Aucun média ne prend la défense d’Assange. Normal, les « journalistes » modernes sont désormais payés par les subventions publiques et par les grands groupes industriels.

https://ploum.net/la-mort-de-la-presse-tant-mieux/

L’imprimerie

Dans un billet que j’estime extrêmement important, je défendais l’idée selon laquelle l’imprimerie était un véritable tournant civilisationnel.

https://ploum.net/il-faudra-la-construire-sans-eux/

C’est avec surprise que j’ai découvert, au détour d’un roman très célèbre, que je bredouillais des idées défendues avec autrement de talent par un illustre prédécesseur. Je vous laisse deviner :

Chapitre 2 : Ceci tuera cela

À notre sens, cette pensée avait deux faces. C’était d’abord une pensée de prêtre. C’était l’effroi du sacerdoce devant un agent nouveau, l’imprimerie. C’était l’épouvante et l’éblouissement de l’homme du sanctuaire devant la presse lumineuse de Gutenberg. C’était la chaire et le manuscrit, la parole parlée et la parole écrite, s’alarmant de la parole imprimée ; quelque chose de pareil à la stupeur d’un passereau qui verrait l’ange Légion ouvrir ses six millions d’ailes. C’était le cri du prophète qui entend déjà bruire et fourmiller l’humanité émancipée, qui voit dans l’avenir l’intelligence saper la foi, l’opinion détrôner la croyance, le monde secouer Rome. Pronostic du philosophe qui voit la pensée humaine, volatilisée par la presse, s’évaporer du récipient théocratique. Terreur du soldat qui examine le bélier d’airain et qui dit : La tour croulera. Cela signifiait qu’une puissance allait succéder à une autre puissance. Cela voulait dire : La presse tuera l’église.

[…]

L’invention de l’imprimerie est le plus grand événement de l’histoire. C’est la révolution mère. C’est le mode d’expression de l’humanité qui se renouvelle totalement, c’est la pensée humaine qui dépouille une forme et en revêt une autre, c’est le complet et définitif changement de peau de ce serpent symbolique qui, depuis Adam, représente l’intelligence.

[…]

En même temps que les arts, la pensée s’émancipe de tous côtés. Les hérésiarques du moyen âge avaient déjà fait de larges entailles au catholicisme. Le seizième siècle brise l’unité religieuse. Avant l’imprimerie, la réforme n’eût été qu’un schisme, l’imprimerie la fait révolution. Ôtez la presse, l’hérésie est énervée. Que ce soit fatal ou providentiel, Gutenberg est le précurseur de Luther.

Vous avez bien entendu reconnu la plume de Victor Hugo dans « Notre-Dame de Paris ». Je ne résiste pas à vous donner un dernier extrait, issu du chapitre : « Gringoire a plusieurs bonnes idées de suite rue des Bernardins ».

– Qu’avez-vous donc tant qui vous attache à la vie ?
– Ah ! mille raisons !
– Lesquelles, s’il vous plaît ?
– Lesquelles ? L’air, le ciel, le matin, le soir, le clair de lune, mes bons amis les truands, nos gorges chaudes avec les vilotières, les belles architectures de Paris à étudier, trois gros livres à faire, dont un contre l’évêque et ses moulins, que sais-je, moi ? Anaxagoras disait qu’il était au monde pour admirer le soleil. Et puis, j’ai le bonheur de passer toutes mes journées du matin au soir avec un homme de génie qui est moi, et c’est fort agréable.

Je vous souhaite le même bonheur que Gringoire, d’excellentes lectures et un bon week-end !

Photo by Pedro Lastra on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

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

I published the following diary on isc.sans.edu: “Analysis of a Phishing Kit“:

Sometimes, attackers make mistakes and allow security researchers to access interesting resources. This time, it’s another phishing kit that was left in the wild on the compromised server. The file is called ‘2019Amex.zip’ (SHA256:269ab3970ef8997a61b1b14eebe5a2beb1348b2dcc5358ccd4314ad19a41daf5)… [Read more]

The post [SANS ISC] Analysis of a Phishing Kit appeared first on /dev/random.

October 01, 2020

Over moederliefde, gemengde relaties, vervreemding, Israël, Palestina, bezette gebieden, de Joodse identiteit, het Israëlisch leger … en zoveel meer. Een ietwat fragmentarisch maar zeer sterk verhaal, ondanks de emotioneel-filosofische stukken over de relatie tussen het Vlaamse hoofdpersonage en haar Joodse partner en zijn zoon. Het boek slaagt er in om de rol van het Israëlische militarisme en de bezetting (gevoelsmatig) te verklaren maar laat ook de donkere kant (verveling, willekeur, pesterijen, de scheve machtsverhoudingen) een grote rol spelen.

Israël/ Palestina is geen eenvoudige materie en dit boek is geen poging tot feitelijke beschrijving, maar het slaagt erin om een gevoel over te brengen zonder expliciet grote morele oordelen te vellen. Een aanrader!

September 29, 2020

I published the following diary on isc.sans.edu: “Managing Remote Access for Partners & Contractors“:

Yesterday, I wrote a quick diary about a potential security issue that some Tyler customers faced. Some people reacted to my diary with interesting comments in our forums. Two of them were interesting and deserve some review… [Read more]

The post [SANS ISC] Managing Remote Access for Partners & Contractors appeared first on /dev/random.

September 28, 2020

Nous interagissons avec l’information de deux façons : à travers une boîte, inbox, ou un flux. Mais le choix de ce mode d’interaction est loin d’être anodin !

Historiquement, nos interactions avec l’information se sont modelées sur celles du monde physique. L’information arrive dans une boîte que nous devons vider régulièrement. La fameuse inbox. Tout ce qui arrive dans une boîte doit être traité, même si cela est fait rapidement.

Il suffit de penser à une boîte aux lettres : si on ne la vide pas régulièrement, elle déborde et cesse de remplir son office. La boîte aux lettres remplie informe d’ailleurs le facteur et les voisins que le courrier délivré n’a plus d’effet.

En conséquence, le fonctionnement en boîte demande une certaine rigueur et régularité. Jusqu’au début du 21e siècle, le fonctionnement du courriel était similaire.

Cependant, deux innovations font subitement perturber cet état de fait. La généralisation du spam et l’apparition de GMail, offrant 1 Go d’espace pour nos emails là où les fournisseurs traditionnels oscillaient entre 10Mo et 100Mo.

Ces deux innovations combinées vont rendre le fait de vider sa boîte mail de plus en plus difficile, mais, surtout, de moins en moins nécessaire.

L’apparition du flux

Si la quantité d’informations est telle qu’il est impossible de la traiter, un nouveau paradigme mérite d’être exploré. Ce paradigme, popularisé par Facebook et Twitter à quelques mois d’écarts en 2006, c’est le flux.

Contrairement à la boîte, les éléments ne s’entassent pas dans le flux. Ils ne font que passer. Le flux donne une impression d’inéluctabilité, de soulagement. Avec le flux, je ne dois pas tout traiter, car c’est impossible. Je peux me contenter de picorer, de m’abreuver selon mon envie. Du moins, en théorie.

Le flux ne demande plus de rigueur, plus de volonté.

Le modèle est tellement puissant que le succès des messageries reposant sur ce concept est immédiat (Whatsapp, Messenger, Telegram et d’autres). On ne reçoit plus un message. On consulte une discussion infinie et permanente qu’on ne peut plus quitter.

Si l’avantage du flux est qu’il n’oblige pas de traiter l’information de manière structurée, qu’il permet d’être passif, son désavantage est qu’il oblige à être passif, qu’il empêche d’être structuré. Toute personne souhaitant reprendre le contrôle sur les informations qu’elle reçoit se voit noyée. Si le flux voulait nous libérer de devoir en permanence vider nos boîtes, il est impossible d’en décrocher. Il est permanent, il nous enchaîne et souligne toute l’information qui nous échappe.

La tentation de reprendre le contrôle

Le flux est infini. Il souligne donc l’infinité d’informations qui aurait pu nous être utile, nous amuser, nous intéresser. Il ne nous permet pas de dire « J’ai traité tout mon courrier, j’ai lu tout mon journal ». Il crée une angoisse permanente de rater des opportunités (FOMO, Fear Of Missing Out).

Pour certains, la solution est de continuer à suivre le flux jusqu’au moment où l’on retrouve une information connue. Cela revient à se surcharger mentalement pour tenter d’utiliser le flux comme une boîte.

Outre la surcharge mentale et le stress que crée ce mode d’utilisation, il a également le défaut de n’être plus applicable dès le moment où les créateurs du flux décident de rendre ce dernier imprévisible. Il est prouvé qu’une dose d’aléatoire est extrêmement addictive. Cerise sur le gâteau, sous couvert d’aléatoire il est désormais possible de personnaliser les informations que chacun va trouver dans son flux.

Alors que l’utilisateur naïf croit picorer dans une rivière, s’abreuver à une fontaine infinie de sérendipité, il rend en fait son jugement disponible à des algorithmes qui choisissent expressément ce qui a le plus de chances de le faire rester sur le site, de le faire réagir voire de le rendre plus sensible à la publicité d’un annonceur.

Le retour à la boîte

Après plus d’une décennie à tenter de transformer mon univers informationnel en un flux, je ne peux que constater l’étendue des dégâts. Le retour à la boîte n’est pas seulement souhaitable, il m’est indispensable. C’est une question de survie.

Certes, la boîte nécessite une rigueur. Une rigueur qui devient vite une habitude, un réflexe. Trouvez-vous difficile de vous assurer que votre boîte aux lettres physique ne déborde pas ? Et bien ce n’est pas plus difficile avec la boîte aux lettres virtuelles une fois que la machine est enclenchée.

Si une boîte mail contient 3432 mails avec un subtil jeu de lu/non lu et d’étoiles pour savoir ce qui est important et ce qui ne l’est pas, ce n’est plus une boîte, c’est devenu un flux. En étant très strict avec mon inbox 0, ma boîte mail est une réelle boîte qui m’a redonné le plaisir de communiquer par mail.

En ce qui concerne les informations que je souhaite consulter, les articles que je souhaite lire, j’utilise le RSS. Si l’on parle souvent de « flux RSS », le nom est trompeur. Tout comme l’email, le RSS apporte des éléments dans une de mes boîtes, mon lecteur RSS.

Le fait de garder séparées mes boîtes informationnelles « mail » et « RSS » a plusieurs avantages. Premièrement, je sais que ce qui est dans le RSS n’est pas urgent. Je peux ne pas le consulter si je n’en éprouve pas l’envie. Deuxièmement, je sais que ce n’est pas important. Si mon lecteur RSS déborde, par exemple au retour de vacances, je peux tout marquer comme lu sans arrière pensée. Enfin, là où le mail me force (et c’est une bonne chose) à prendre une action, le simple fait de lire un élément de mon lecteur le fait sortir de ma boîte. Le lecteur RSS se vide donc très rapidement en appuyant sur la touche « J » (raccourci pour « élément suivant » dans flus.io).

Si je ne peux pas « perdre » un élément passé dans mon flux RSS, je le rajoute dans Pocket. Pocket qui est mon inbox d’articles à lire. Une de plus.

D’ailleurs, dans un monde parfait certains flux RSS arriveraient directement dans Pocket, car je sais que je ne veux en rater aucun article. J’ai tenté de le faire avec Zappier, mais ce ne fut guère concluant.

En résumé, je dispose d’une boîte mail qui est importante et urgente, d’une boîte RSS qui n’est ni importante ni urgente et d’une boîte Pocket qui est importante, mais pas urgente.

Et les flux dans tout ça ?

Je cherche désormais à fuir les flux comme la peste. Si je veux suivre un compte Twitter, je le fais via Nitter dans mon lecteur RSS. Idem pour les comptes Mastodon. Je reste néanmoins exposé aux flux sur Whatsapp, Signal et pour les interactions sur Mastodon.

Je rêve de me débarrasser totalement des flux.

Mais cela n’est pas sans conséquence. Car les boîtes se vident. Et une fois mes boîtes vides, je suis confronté à ce que le flux tente de nous ôter : la solitude, la clarté d’esprit voire l’ennui. Un ennui salutaire qui n’est pas toujours facile alors qu’une partie de mon cerveau réclame à grands cris des gratifications rapides que seul le flux peut m’apporter.

Photo by Abdulla Abeedh on Unsplash

Je suis @ploum, ingénieur écrivain. Printeurs, mon dernier roman de science-fiction, est disponible en précommande. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. Votre soutien, même symbolique, compte beaucoup pour moi. Merci !

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

I published the following diary on isc.sans.edu: “PowerShell Backdoor Launched from a ShellCode“:

When you need to perform malicious actions on a victim’s computer, the Internet is full of resources that can be reused, forked, slightly changed to meet your requirements. After all, why reinvent the wheel if some pieces of code are available on GitHub for free? If you developed some offensive tools for good reasons (because you’re a pentester, a red teamer of just doing some research), chances are high that your code will be reused… [Read more]

The post [SANS ISC] PowerShell Backdoor Launched from a ShellCode appeared first on /dev/random.

September 26, 2020

In tegenstelling tot sommige van zijn andere boeken werd ik niet omvergeblazen door “Het Winterpaleis” van John Boyne. Het is weliswaar vlot geschreven fictie met flarden Russische geschiedenis, maar “de clou” was enigszins voorspelbaar en de aanwezigheid van het hoofdpersonage bij een aantal sleutelmomenten van het einde van de heerschappij van de Russische Tsaren nogal ongeloofwaardig.

Drie-en-half sterren, of ben ik te streng?

I have been running a home automation system on a Raspberry almost as long as this popular single-board computer family exists. In all those years, the setup has changed a lot: I have replaced the Raspberry Pi 1 by a Raspberry Pi 4, I switched from Domoticz to Home Assistant and more recently to a highly modular setup of home automation services running in Docker containers and communicating by MQTT.

Looking back at my first setup, the seeds were already there for what I now consider the four pillars of a good home automation system:

  • be secure, so you don't risk someone else controlling your house or spying on you at home;

  • be modular, to make it easy to plug in other protocols or applications;

  • only use open source software;

  • be self-sufficient, not relying on cloud systems from Google, Amazon, or other parties.

Let's look into these one by one.

Secure

Home automation and IoT devices are notoriously insecure. At the Usenix Security Conference 2019, the Czech security software company Avast and Stanford University presented their research of household IoT devices. Avast scanned 83 million IoT devices in 16 million homes around the world of people who agreed to share these data. The results of the study published in "All Things Considered: An Analysis of IoT Devices on Home Networks" were staggering:

  • 7% percent of all IoT devices support an obsolete, insecure, and completely unencrypted protocol such as Telnet or FTP.

  • Of these, 17% exhibit weak FTP passwords, and 2% have weak Telnet passwords.

  • Surveillance cameras have the weakest Telnet profile, with more than 10% of them that support Telnet with weak credentials.

  • 3% percent of the homes are externally visible on the internet and more than half of those have a known vulnerability or a weak password.

This is not an isolated study. Not a week goes by without some news items about insecure devices, most of the time because basic security measures such as strong passwords are not enforced by the manufacturer or basic programming errors have been made. To give you an idea about what can happen: in 2018 nude videos of the Dutch women's handball team appeared on a popular porn website because the surveillance cameras of the dressing room of a sauna were broken into. Imagine if someone can access your baby monitor with a camera or your security camera in your living room or bedroom...

So what can you do to secure your home automation system? If you choose an off-the-shelf system: not much. You fully rely on the manufacturer's ability to create a secure system and the goodwill to keep supplying patches that solve security issues that have been discovered. And the home automation and IoT industries have clearly shown they are not up to the task. This is one of the reasons why I prefer open source software. Not because it is always secure, but because the transparency of the open source development process forces developers to create more secure software.

Modular

There are many competing standards and communication protocols for home automation. Unfortunately, many off-the-shelf home automation gateways support only a small subset of these protocols or even use a proprietary protocol that locks you into using devices of the same manufacturer. That severely limits your choice of products.

You can't know which protocols will become popular in a few years, and maybe you like one product that uses Z-Wave and another product that uses Zigbee. It should be easy to interconnect these devices, even when they use different protocols.

So how can you do this? Many of the wireless communication protocols for home automation need a dedicated transceiver because they work on a specific radio frequency. That's where the Raspberry Pi shines: you can start with a basic Raspberry Pi setup supporting only IoT devices that are communicating over Wi-Fi and Bluetooth, add an RTL-SDR USB dongle to read the measurements of your 433.92 MHz weather sensors, later add a Z-Wave HAT on the board when you start adding Z-Wave sensors to your house and then add a Zigbee USB transceiver when you want to control some Zigbee lights.

Modularity is also important for software. There's a lot of user-friendly software to make your Raspberry Pi a home automation gateway. So you just install something like Home Assistant, openHAB or Domoticz on your Raspberry Pi and that's it: you have a gateway that supports tons of devices. Some of these systems are very modular and extensible, others aren't. Many of them support MQTT (Message Queuing Telemetry Transport), a common language to exchange messages.

MQTT has become the standard for interoperability between various home automation devices. For instance, if your home automation gateway of choice doesn't support Zigbee but it does support MQTT, then you only have to run the Zigbee2mqtt software, which translates the Zigbee protocol to MQTT messages. Your gateway can then talk to your Zigbee devices using MQTT.

Modularity also means that you don't have to have one gateway. You can perfectly have your main gateway in your basement, but install a second gateway with your 433.92 MHz receiver for your environmental sensors in your living room because that gives you better coverage to receive data from these wireless sensors. If you're using MQTT, that's very simple to implement: you just relay the sensor readings that your gateway in the living room receives to your MQTT broker, after which all the other components of your home automation setup can access the readings in the MQTT format.

In short: a good modular home automation system means that you can mix and match the devices that you like, irrespective of their protocol, and you can use the software and hardware components of your choice, in various locations in your house.

Open source

If you buy an off-the-shelf home automation gateway, you generally don't get access to its source code, so you cannot peek into it to see what it does or to assess its quality. You just have to believe the manufacturer on his word. Is that enough for you if it's about software that will get to know you intimately because it processes sensor readings and even camera images about you in your home? Not for me, so open source software is a hard requirement for my home automation setup.

But what when you're not a programmer and you wouldn't even understand the source code of your home automation system if you had access to it? Even then the use of open source software has a lot of advantages. It's not because you don't have the programming experience that others can't help. Most open source projects have a decentralized software development model that encourages open collaboration.

So if you find a bug in the software or see something wrong in its source code but don't have the programming experience needed to fix it, just report the bug on the issue tracker of the project, and hopefully, someone else in the project's community will step in and fix it. It all depends on the health of the project's community. But a good open source project has a vibrant community of developers and users who collaborate to continuously improve the software.

And open source doesn't just mean getting access to the source code, it's much more than that. For instance, when you know a specific software project is open source, you know that it doesn't arbitrarily restrict what you can do with it. The Open Source Definition even explicitly lists that the license of open source software must not discriminate against any person or group of persons, nor restrict anyone from making use of the program in a specific field of endeavour.

The decentralization and transparency of the open source development model gives power back to the users, where it belongs. For home automation that's even more important: I don't want a company having control over my house.

Self-sufficient

During the last ten years, there has been a worrying development in the computer industry: we all depend more and more on (centralized) cloud systems. Unfortunately, the home automation industry didn't escape this fate. Many popular home automation and IoT systems depend on a cloud server. Some examples:

  • the Ring video doorbell with Wi-Fi camera;

  • the Nest Learning Thermostat;

  • so-called 'smart speakers' running voice assistants, like Amazon Echo and Google Home;

  • the IFTTT service that links various other services.

This isn't without its problems. In the last couple of years some of these cloud services for home automation stopped working for their users:

  • In 2014 Nest bought the company that was selling the Revolv Hub home automation system, not long after Nest itself was acquired by Google. In 2016 Nest shut down the servers Revolv Hub depended on, after announcing it with a quiet note on the website of Revolv a few months earlier. That meant that the $300 Revolv Hub ceased functioning entirely.

  • At the end of 2019, Best Buy announced that several of their Insignia-branded smart devices would stop working because they decided to shut down the corresponding backend systems.

  • In May 2020 Wink (with the catchphrase "A simpler way to a smarter home") announced with just a week's notice that it would start charging a monthly fee for the use of their services. Users that didn't want to pay were no longer be able to access their Wink devices and their automations were disabled. The Wink Hub was rendered useless, although it had been in stores with the clear description "no required monthly fees, ever". Ironically, the announcement ended with the message "Our user community is integral to Wink, and we want to continue to be your trusted smart home provider." Yeah, right.

The home automation system at the left is cloud-based: a simple motion detection message first goes to a server over the internet before returning to your light. The self-hosted system on the right makes much more sense: a Raspberry Pi on your network relays the message without using the internet detour.

But fundamentally, the problem lies even deeper. It just makes no sense to use cloud services to automate your home. Home automation comes down to: you want one device to be able to respond to another device in your home. For instance: the motion sensor in your bathroom detects motion at night, and this turns the bathroom light on for five minutes. If you use IFTTT to link both devices, the motion sensor has to send a message to the internet, IFTTT relays the message to your bathroom light (for instance a Philips Hue light), and the bathroom light turns on.

But there's no need for an internet service like IFTTT between these devices because both devices are in your home, so it makes much more sense to link them locally, using a server at home. This could be a Raspberry Pi running home automation software that doesn't need a cloud server to function, but does all its processing on-device (or on the edge, as it's called now). You can perfectly do this with Node-RED or Home Assistant. Then there's no way a company can render your home automation system useless by shutting down their service, or your bathroom light doesn't turn on at night because your internet connection or IFTTT's servers are down. You're fully in control of your home automation system.

There's another risk: using cloud services for your home automation system invades your privacy. Look at some of the privacy issues with the services I talked about above:

  • If you use the Ring video doorbell, it sends a video of everyone that steps on your porch to the manufacturer. The Ring company (which has been bought by Amazon in 2018) has a questionable approach to privacy: in January 2019 it was uncovered that employees have access to the video recordings of all Ring devices and even that the data are stored unencrypted.

  • If you use the Nest Learning Thermostat, Google knows precisely when you are home and when you aren't.

  • If you run a smart speaker like the Amazon Echo, what you tell your house members will be sent countless times inadvertently to Amazon because the Echo thinks it has heard its wake word. Moreover, Amazon's employees listen to a part of all 'conversations' with the Echo to improve its algorithms.

  • If you use the IFTTT service to link your various other services, you give one company access to all your home automation services, which is too much power concentrated in one company's hands: they can see exactly what you're doing.

After reading all this, do you still find it acceptable to use cloud services for your home automation?

How to do this?

This is an abridged version of the introduction of my book Control Your Home with Raspberry Pi. You can read the full introduction for free in the Elektor store, where you can also find the table of contents. In this book you will learn how to implement the four pillars of a good home automation system, by installing and configuring your Raspberry Pi as a highly flexible home automation gateway for protocols of your choice, and link various services with MQTT to make it your own system, including fully offline voice commands in your own language, and all secured with TLS.

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. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. 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. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. 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. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. 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. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. 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. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. 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. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. 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. Abonnez-vous pour recevoir mes billets, partagez-les autour de vous et n'hésitez pas à me soutenir sur Paypal. 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. 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.