Browse Source

More links

master
David Larlet 2 years ago
parent
commit
17f244ae89

+ 4
- 4
cache.py View File

@@ -17,7 +17,7 @@ from minicli import cli, run, wrap
from readability.readability import Document

HERE = Path(".")
CACHE_PATH = HERE / "cache" / "2021"
CACHE_PATH = HERE / "cache" / "2022"
LOCAL_DOMAIN = "http://larlet.test:3579"


@@ -90,7 +90,7 @@ def create(hash_url):
if not os.path.exists(cache_target):
os.makedirs(cache_target)
open(cache_target / "index.html", "w").write(page)
print(f"Done: {LOCAL_DOMAIN}/david/cache/2021/{hash_url}/")
print(f"Done: {LOCAL_DOMAIN}/david/cache/2022/{hash_url}/")


@cli
@@ -106,7 +106,7 @@ def generate():
template = environment.get_template("cache_archives.html")
page = template.render(cache_list=cache_list)
open(CACHE_PATH / "index.html", "w").write(page)
print(f"Done: {LOCAL_DOMAIN}/david/cache/2021/")
print(f"Done: {LOCAL_DOMAIN}/david/cache/2022/")


@cli
@@ -116,7 +116,7 @@ def new(url):
:url: The URL of the page to put into cache.
"""
hash_url = hashlib.md5(url.encode("utf-8")).hexdigest()
url_cache = f"/david/cache/2021/{hash_url}/"
url_cache = f"/david/cache/2022/{hash_url}/"
link_line = f"]({url}) ([cache]({url_cache}))"
print(link_line)
try:

+ 225
- 0
cache/2022/393a69cbefc7e1642bae86080e6fc8c4/index.html View File

@@ -0,0 +1,225 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Is the madness ever going to end? (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://unixsheikh.com/articles/is-the-madness-ever-going-to-end.html">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Is the madness ever going to end?</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://unixsheikh.com/articles/is-the-madness-ever-going-to-end.html" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p class="post-data">Published on <span id="pubdate">2022-01-11</span>. Modified on <span id="moddate">2022-01-14</span>.</p>
<p class="info info-yellow"><span id="description">There is something seriously wrong with the IT industry. It's so bad that I haven't managed to find a single industry with the same massive amount of stupidity, with the exception of perhaps the fashion industry. It's like the IT industry has been paralyzed in some strange kind of mass hypnosis.</span></p>

<p>No, I will not be polite and call it something else because it is truly sheer stupidity.</p>

<p>In the past IT people, whether we're talking about programmers or something else, were very clever people. People with a high level of intelligence that took serious pride in doing things in a meaningful and pragmatic way.</p>

<p>In the so-called modern day it's like everyone - except a few - has dropped their brain on the floor. They keep inventing "revolutionary new ways" of doing the same thing that could be done in a dozen ways already. And they do that by coating more and more and more unnecessary complexity on top of existing technology stacks.</p>

<p>Electron and React Native Desktop are supposed to be a revolutionary new way of making desktop applications. Except they are not, and they eat up all the memory you have and still ask for more. They constantly crash and have no value over a native desktop application what so ever - well, perhaps with the only exception that now a 2 year old baby can make something shiny that you can click on with your mouse.</p>

<p><i>But, noooo, you're a dinosaur, you don't understand anything, it's the future, it's the modern way of doing things. Native desktop apps are dead!</i></p>

<p>PHP is a programming language mainly for web development. It is made in C, a pure procedural language, originally as a templating language, and it still is a templating language at the core, yet it is apparently not good enough. We have to put a completely different template system on top of PHP, also written in PHP, which now makes the application load four times as slow.</p>

<p><i>But, noooo, you're a dinosaur, you don't understand anything, it's the future, it's the modern way of doing things. We don't do that in modern web development any more!</i></p>

<p>All web servers have a built-in router. Whether it's NGINX, Apache, lighttpd, Caddy or something else. But no. Let's not use that; let's add yet another router on top of that with a single entry point and then basically re-write every single request before it gets served.</p>

<p><i>But, noooo, you're a dinosaur, you don't understand anything, it's the future, it's the modern way of doing things. We don't do that in modern web development any more!</i></p>

<p>The browser's native language is HTML. HTML is a markup language and if you feed HTML to the browser it will quickly render the page with what you give it. But no. Let's not do that. Let's instead feed the browser with JSON and then have the built-in JavaScript engine translate that into a pre-formatted output which then gets translated into HTML before it's served to the user. Oh, and while we're at it, let's do the same thing with CSS. So, now your simple news article or blog post takes ages to load on a 1 gigabit connection and requires about 3 times as much electrical power even though you're only serving text and perhaps a few images - just because someone thought it was a really good idea to make a React app instead of a simple HTML page rendered by the server.</p>

<p>Why in the world has this idiotic trend of abstracting everything away by layers upon layers of complexity gained such a strong foothold in the industry? Has everyone except the "unix greybeards" gone mad!?</p>

<p>The situation is really bad for the industry. And it is a real shame that the younger generations who grow up not knowing anything else, thinking that these so-called "modern ways of doing things" are the correct and best ways, will have to suffer when everything starts to crumble (which it already is).</p>

<p>The entry barrier to programming needs to be high! Programming is engineering; it's not something where you throw stuff at the wall and see what sticks and just assume that programming languages, browsers, and operating systems are made of magical dust.</p>

<h2>Update: 2022-01-12</h2>

<p>Someone wrote me an email pointing out the famous saying by <a href="https://en.wikipedia.org/wiki/Brian_Kernighan">Brian Kernighan</a>, who has stated that: "<i>Programmer time is expensive; conserve it in preference to machine time</i>", but that does not apply here at all.</p>

<p>Firstly, we live in a time in which the environmental concerns needs to be considered too. As I mentioned in the beginning, it is irresponsible to keep throwing more hardware at a problem that doesn't even need to exist.</p>

<p>Secondly, Brian is being general, which I completely agree with. The situation I am talking about in the above is something far beyond being justified by any means. The added layers of complexity results in products that are horrible. Everyone is experiencing the pain of using the web daily. Simple websites that contains nothing more that text and images takes forever to load, they only work in a few browsers, and they are suffering from a flood of almost daily security issues.</p>

<p>Someone else wrote me another email. The person assumed that I have no experience in web development, or that I don't have any experience in larger projects, and that is the reason why I write the above.</p>

<p>I have been doing web development since about 1997 and I have been involved in many different projects with many different companies and many differently sized development teams.</p>

<p>One of my main activities as a contractor today is to <a href="https://www.unixsheikh.com/articles/javascript-malware-infested-nightmare.html">clean up the mess</a> that I am addressing in this article.</p>

<p>A company may save both time and money in the beginning because, yes you can get something running quickly, but they <strong>always</strong> pay the price in the long run when they are faced with all the issues their bad decision has caused. Every time, and without exception, the developers are blamed for not raising enough concerns about the problems.</p>

<p>I write (rant) about it, not only because I - as a daily consumer of the web - are faced with all these horrible websites, or because friends and family complain about how bad this or that website has become, but mainly because I am faced with the results of this mess every single day. And I can tell you, in about 99% of the cases I deal with, people get fired and everything is re-written from the ground up without any of the added bloat - not because we want to, but because we absolutely need to.</p>

<h2>Update 2022-01-14:</h2>

<p>Someone on Hacker News commented on this article with the following comment, which sums it up pretty good:</p>

<blockquote>I have been in professional web development since 2004 and I mostly agree with the author that there are massive amounts of groupthink going on. "Modern" web development has standardized in tool stacks which are insanely complicated, far beyond anything that is warranted in most cases. We have forgotten how to make simple things in simple ways.<br><br>At a minimum you need node, npm, webpack, babel, an spa framework, a frontend router, a css transpiler, a css framework, a test runner, a testing functions library, and a bunch of smaller things, and that's just what is "needed" to build a static website with a bit of interaction. We're not even talking about the dockerized insanity that happens as soon as you want to slide an API under that beast.</blockquote>

<p>Bingo!</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 58
- 0
cache/2022/393a69cbefc7e1642bae86080e6fc8c4/index.md View File

@@ -0,0 +1,58 @@
title: Is the madness ever going to end?
url: https://unixsheikh.com/articles/is-the-madness-ever-going-to-end.html
hash_url: 393a69cbefc7e1642bae86080e6fc8c4

<p class="post-data">Published on <span id="pubdate">2022-01-11</span>. Modified on <span id="moddate">2022-01-14</span>.</p>
<p class="info info-yellow"><span id="description">There is something seriously wrong with the IT industry. It's so bad that I haven't managed to find a single industry with the same massive amount of stupidity, with the exception of perhaps the fashion industry. It's like the IT industry has been paralyzed in some strange kind of mass hypnosis.</span></p>

<p>No, I will not be polite and call it something else because it is truly sheer stupidity.</p>

<p>In the past IT people, whether we're talking about programmers or something else, were very clever people. People with a high level of intelligence that took serious pride in doing things in a meaningful and pragmatic way.</p>

<p>In the so-called modern day it's like everyone - except a few - has dropped their brain on the floor. They keep inventing "revolutionary new ways" of doing the same thing that could be done in a dozen ways already. And they do that by coating more and more and more unnecessary complexity on top of existing technology stacks.</p>

<p>Electron and React Native Desktop are supposed to be a revolutionary new way of making desktop applications. Except they are not, and they eat up all the memory you have and still ask for more. They constantly crash and have no value over a native desktop application what so ever - well, perhaps with the only exception that now a 2 year old baby can make something shiny that you can click on with your mouse.</p>

<p><i>But, noooo, you're a dinosaur, you don't understand anything, it's the future, it's the modern way of doing things. Native desktop apps are dead!</i></p>

<p>PHP is a programming language mainly for web development. It is made in C, a pure procedural language, originally as a templating language, and it still is a templating language at the core, yet it is apparently not good enough. We have to put a completely different template system on top of PHP, also written in PHP, which now makes the application load four times as slow.</p>

<p><i>But, noooo, you're a dinosaur, you don't understand anything, it's the future, it's the modern way of doing things. We don't do that in modern web development any more!</i></p>

<p>All web servers have a built-in router. Whether it's NGINX, Apache, lighttpd, Caddy or something else. But no. Let's not use that; let's add yet another router on top of that with a single entry point and then basically re-write every single request before it gets served.</p>

<p><i>But, noooo, you're a dinosaur, you don't understand anything, it's the future, it's the modern way of doing things. We don't do that in modern web development any more!</i></p>

<p>The browser's native language is HTML. HTML is a markup language and if you feed HTML to the browser it will quickly render the page with what you give it. But no. Let's not do that. Let's instead feed the browser with JSON and then have the built-in JavaScript engine translate that into a pre-formatted output which then gets translated into HTML before it's served to the user. Oh, and while we're at it, let's do the same thing with CSS. So, now your simple news article or blog post takes ages to load on a 1 gigabit connection and requires about 3 times as much electrical power even though you're only serving text and perhaps a few images - just because someone thought it was a really good idea to make a React app instead of a simple HTML page rendered by the server.</p>

<p>Why in the world has this idiotic trend of abstracting everything away by layers upon layers of complexity gained such a strong foothold in the industry? Has everyone except the "unix greybeards" gone mad!?</p>

<p>The situation is really bad for the industry. And it is a real shame that the younger generations who grow up not knowing anything else, thinking that these so-called "modern ways of doing things" are the correct and best ways, will have to suffer when everything starts to crumble (which it already is).</p>

<p>The entry barrier to programming needs to be high! Programming is engineering; it's not something where you throw stuff at the wall and see what sticks and just assume that programming languages, browsers, and operating systems are made of magical dust.</p>

<h2>Update: 2022-01-12</h2>

<p>Someone wrote me an email pointing out the famous saying by <a href="https://en.wikipedia.org/wiki/Brian_Kernighan">Brian Kernighan</a>, who has stated that: "<i>Programmer time is expensive; conserve it in preference to machine time</i>", but that does not apply here at all.</p>

<p>Firstly, we live in a time in which the environmental concerns needs to be considered too. As I mentioned in the beginning, it is irresponsible to keep throwing more hardware at a problem that doesn't even need to exist.</p>

<p>Secondly, Brian is being general, which I completely agree with. The situation I am talking about in the above is something far beyond being justified by any means. The added layers of complexity results in products that are horrible. Everyone is experiencing the pain of using the web daily. Simple websites that contains nothing more that text and images takes forever to load, they only work in a few browsers, and they are suffering from a flood of almost daily security issues.</p>

<p>Someone else wrote me another email. The person assumed that I have no experience in web development, or that I don't have any experience in larger projects, and that is the reason why I write the above.</p>

<p>I have been doing web development since about 1997 and I have been involved in many different projects with many different companies and many differently sized development teams.</p>

<p>One of my main activities as a contractor today is to <a href="https://www.unixsheikh.com/articles/javascript-malware-infested-nightmare.html">clean up the mess</a> that I am addressing in this article.</p>

<p>A company may save both time and money in the beginning because, yes you can get something running quickly, but they <strong>always</strong> pay the price in the long run when they are faced with all the issues their bad decision has caused. Every time, and without exception, the developers are blamed for not raising enough concerns about the problems.</p>

<p>I write (rant) about it, not only because I - as a daily consumer of the web - are faced with all these horrible websites, or because friends and family complain about how bad this or that website has become, but mainly because I am faced with the results of this mess every single day. And I can tell you, in about 99% of the cases I deal with, people get fired and everything is re-written from the ground up without any of the added bloat - not because we want to, but because we absolutely need to.</p>

<h2>Update 2022-01-14:</h2>

<p>Someone on Hacker News commented on this article with the following comment, which sums it up pretty good:</p>

<blockquote>I have been in professional web development since 2004 and I mostly agree with the author that there are massive amounts of groupthink going on. "Modern" web development has standardized in tool stacks which are insanely complicated, far beyond anything that is warranted in most cases. We have forgotten how to make simple things in simple ways.<br><br>At a minimum you need node, npm, webpack, babel, an spa framework, a frontend router, a css transpiler, a css framework, a test runner, a testing functions library, and a bunch of smaller things, and that's just what is "needed" to build a static website with a bit of interaction. We're not even talking about the dockerized insanity that happens as soon as you want to slide an API under that beast.</blockquote>

<p>Bingo!</p>

+ 303
- 0
cache/2022/3a929cba1a057771e1778ee9dc3e300a/index.html View File

@@ -0,0 +1,303 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://phys.org/news/2021-04-wolf-dont-alpha-males-females.html">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://phys.org/news/2021-04-wolf-dont-alpha-males-females.html" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<div data-thumb="https://scx1.b-cdn.net/csz/news/tmb/2021/wolf-packs-dont-actual.jpg" data-src="https://scx2.b-cdn.net/gfx/news/2021/wolf-packs-dont-actual.jpg" data-sub-html="The alpha designation used to describe wolf hierarchy is based on research on captive wolves. Credit: Bjarne Henning Kvaale / Shutterstock / NTB">
<figure class="article-img">
<img src="https://scx1.b-cdn.net/csz/news/800a/2021/wolf-packs-dont-actual.jpg" alt="Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding" title="The alpha designation used to describe wolf hierarchy is based on research on captive wolves. Credit: Bjarne Henning Kvaale / Shutterstock / NTB">
<figcaption class="text-darken text-low-up text-truncate-js text-truncate mt-3">
The alpha designation used to describe wolf hierarchy is based on research on captive wolves. Credit: Bjarne Henning Kvaale / Shutterstock / NTB
</figcaption> </figure>
</div>
<p>You may have heard that a wolf pack is led by an alpha pair.</p>
<p>Given this designation, it's easy to imagine that a pack consists of <a href="https://phys.org/tags/young+adults/" rel="tag" class="textTag">young adults</a> and older animals in a strict ranking system. You can imagine that relatives, newcomers and challengers are all part of the system. Maybe some of these wolves might challenge the alpha male to take over leadership of the pack?</p>
<p>On the Howstuffworks website, for example, you can read that wolves follow "an incredibly sophisticated group hierarchy," and that wolves naturally organize themselves in packs for stability and to help each other with hunting.</p>
<p>The pack structure is said to include a "beta wolf" who is the deputy and the "omega wolf" who is at the bottom of the rank, and often the victim of bullying.</p>
<p>In reality, wolf packs are usually much less complicated.</p>
<p><b>Doesn't work for wolves in the wild</b></p>
<p>Calling wolves alpha and beta animals comes from research on wolves in captivity, says Barbara Zimmermann.</p>
<p>Zimmermann is a professor at Inland Norway University of Applied Sciences who studies wolves.</p>
<p>"The leader is called the alpha male. Then there may be several rank levels, beta, gamma and so on. But this is not a concept that works for wolves in the wild," she says.</p>
<p>Most wolf packs simply consist of two parents and their puppies. The group may also include one- to three-year-old offspring that have not yet headed out on their own.</p>
<p>"The adults are simply in charge because they are the parents of the rest of the pack members. We don't talk about the alpha male, the alpha female and the beta child in a human family," Zimmermann said.</p>
<p><b>Battle for leadership in captivity</b></p>
<p>So how did the idea for the alpha wolf come about?</p>
<p>Rudolf Schenkel wrote about social structure and body language among wolves in 1947.</p>
<p>Schenkel studied wolves at the Basel Zoo in Switzerland, where up to ten wolves were kept together in an area of 10 by 20 meters.</p>
<p>He saw that the highest ranked female and male formed a pair, and that the hierarchy could change.</p>
<p>"By continuously controlling and suppressing all types of competition within the same sex, both 'alpha animals' defend their social position," Schenkel wrote.</p>

<p>According to another well-known wolf researcher, David Mech, it was Schenkel's work that gave rise to the idea of the alpha wolf, according to The International Wolf Center website.</p>
<p>As early as 1947, Schenkel mentioned that it was possible that wild wolf packs consisted of a monogamous pair, their puppies and one- to two-year-old pups. But this information was overlooked.</p>
<p>Rudolf Schenkel's work had great influence, said Ane Møller Gabrielsen, a senior research librarian at NTNU, the Norwegian University of Science and Technology.</p>
<p>In 2015, she completed her doctorate on "Power and meaning in the conflict zones over keeping dogs." Her dissertation describes research on pack structure in wolves, and how it in turn affected views on dog training.</p>
<p><b>Pecking order</b></p>
<p>Another Norwegian, Thorleif Schjelderup-Ebbe, also contributed with important insights.</p>
<p>Schjelderup-Ebbe established the term "pecking order " in the 1920s to describe relationships among chickens. This describes how chickens can be aggressive towards birds below them in the social hierarchy, but not towards those above them.</p>
<p>"The concept of the pecking order became very popular. It had great influence on the whole view of science at that time, at least in research that had to do with living organisms. It was seen as an underlying dominance principle that structures society and behavior," Møller Gabrielsen said.</p>
<div class="article-gallery lightGallery">
<div data-thumb="https://scx1.b-cdn.net/csz/news/tmb/2021/wolf-packs-dont-actual-1.jpg" data-src="https://scx2.b-cdn.net/gfx/news/2021/wolf-packs-dont-actual-1.jpg" data-sub-html="A moose meal in the snow. Credit: Andrew Astbury / Shutterstock / NTB">
<figure class="article-img text-center">
<img src="https://scx1.b-cdn.net/csz/news/800a/2021/wolf-packs-dont-actual-1.jpg" alt="Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding" title="A moose meal in the snow. Credit: Andrew Astbury / Shutterstock / NTB">
<figcaption class="text-left text-darken text-truncate text-low-up mt-3">
A moose meal in the snow. Credit: Andrew Astbury / Shutterstock / NTB
</figcaption> </figure>
</div>
</div>
<p><b>Popularized the alpha wolf concept</b></p>
<p>A great deal of research was done on the wolf's pack structure in the 1960s and 1970s, but this was mainly on wolves in captivity, Zimmermann said. For example, Erik Zimen, a Swede, worked with social organization among wolves in captivity.</p>
<p>These wolves were not necessarily related and were kept in an unnaturally small area.</p>
<p>In 1970, the book <i>The Wolf: Ecology and Behavior of an Endangered Species</i> was published, written by David Mech. It was a success. The book helped to popularize the alpha concept, because many people referred to Mech's work.</p>
<p>Mech has written on his website that he repeatedly asked the publisher to stop printing the book because much of the information is outdated—including the concept behind the alpha wolf. Nevertheless, the book is still being sold.</p>
<p>"David Mech, the world's most profiled wolf researcher, used the terminology alpha animals in his early research. But by the time he realized that this was a mistake, the term had already taken root in the literature. He is now struggling to get this changed," Zimmermann said.</p>
<p><b>Affected dog training</b></p>
<p>The alpha wolf theory was of great importance in dog training, says NTNU's Ane Møller Gabrielsen.</p>
<p>"This was true especially after 1970, when David Mech published his study. In addition, you have a number of other well-known names who published research based on animals in zoos. This gave us a pretty clear picture of the wolf as a very authoritarian animal with an almost a military ranking," she said.</p>
<p>Dog training comes from the military, Møller Gabrielsen said. The military used punishment as a training tool.</p>
<p>"Once the concept of the wolf and its strict hierarchy was established, trainers were more likely to use punishment. It wasn't just that the dog was punished when it did something wrong, you had to show the dog that you were the alpha wolf all the time," she said.</p>
<p>Some of the methods involved physical punishment, such as taking the puppy by the scruff of the neck and shaking it. These ideas became less widespread in the dog training literature throughout the 2000s.</p>
<p>"Most of what has been published in books since 2000 is so-called positive training, which is reward-based dog training that uses the least possible punishment and no physical punishment. So there has been a very big change," Møller Gabrielsen said.</p>
<p><b>Close contact with wolves</b></p>
<p>In 1999 and 2000, David Mech published two articles in which he tried to correct the popular misunderstanding about how a wolf pack is organized.</p>
<p>By that time, Mech had studied wild wolf packs on Ellesmere Island in Canada for 13 summers. He was able to acclimatize one of the wolf packs to his presence. That allowed him to study the pack up close—up to one meter, over several years.</p>
<p>He wrote that what was commonly called the alpha pair was simply the parents of the rest of the pack. As parents, they consequently led the pack's activities.</p>
<p>"Dominance fights with other wolves are rare, if they exist at all. During my 13 summers where I observed the pack, I saw none," Mech wrote in an article entitled "Alpha Status, Dominance, and Division of Labor in Wolf Packs."</p>
<p><b>The parents decide</b></p>
<p>The younger wolves were submissive to the parents. The parents controlled the distribution of food. The couple prioritized the youngest puppies to ensure they would get enough food if it needed to be shared. Older siblings may do the same thing, Mech wrote.</p>
<p>All the animals eat at the same time from a large carcass. But if the carcass is small, the parents eat first and determine when the pups are allowed to eat, he wrote.</p>
<p>However, there are also wolf packs that have a slightly different and exciting structure that we'll come back to later.</p>
<p><b>How Norwegian packs are structured</b></p>
<p>Barbara Zimmermann at the Inland Norway University of Applied Sciences and her colleagues have studied pack cohesion in Norwegian wolves using GPS data. This has given them insights into how these wolves live together.</p>
<div class="article-gallery lightGallery">
<div data-thumb="https://scx1.b-cdn.net/csz/news/tmb/2021/wolf-packs-dont-actual-2.jpg" data-src="https://scx2.b-cdn.net/gfx/news/2021/wolf-packs-dont-actual-2.jpg" data-sub-html="David Mech spent a lot of time studying daily life in the wolf pack. Credit: U.S. Geological Survey by L. David Mech">
<figure class="article-img text-center">
<img src="https://scx1.b-cdn.net/csz/news/800a/2021/wolf-packs-dont-actual-2.jpg" alt="Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding" title="David Mech spent a lot of time studying daily life in the wolf pack. Credit: U.S. Geological Survey by L. David Mech">
<figcaption class="text-left text-darken text-truncate text-low-up mt-3">
David Mech spent a lot of time studying daily life in the wolf pack. Credit: U.S. Geological Survey by L. David Mech
</figcaption> </figure>
</div>
</div>
<p>"A typical wolf pack in Scandinavia consists of six animals on average, most often the parents and four yearling puppies," says Zimmermann.</p>
<p>A typical year for a Scandinavian wolf pack first involves a male and a female pair establishing a territory. They mark a large area in the forest with scent, which they patrol and defend against other wolves.</p>
<p>The wolves mate in February-March and the young are born in May, in a den.</p>
<p>While the female nurses the young, the male must hunt for the first few weeks.</p>
<p>"At this time, moose calves are small. The male wolf eats as much food as possible and comes back and vomits it up for the female to eat," she said.</p>
<p>After a couple of weeks, the female also begins to take hunting trips while the male remains in the den.</p>
<p><b>Strong attachment</b></p>
<p>"What is exciting about wolf pairs is that they are unbelievably faithful. They stay together all the time," Zimmermann said.</p>
<p>Wolves are monogamous, and usually do not change partners until one dies.</p>
<p>The denning period is mostly the only time when they hunt apart, Zimmermann said.</p>
<p>"More than 70 percent of GPS positions from wolf pairs show they remain within 100 meters of each other. So they are incredibly dependent on each other," she said.</p>
<p>After the denning period, the puppies are carried to a new location, which is usually by a carcass. Then the parents move in star shape around the area. After a few weeks, they are moved to a new location.</p>
<p>In September—October, the young are big enough to start following the adults. But even then they have a common location. The adults go out and hunt together in the evening. Then they go get the pups when they have killed their prey.</p>
<p><b>Quick to become independent</b></p>
<p>By November, the pups are so big that they start to wander a little farther away from their parents. But they stay within the territory.</p>
<p>"There may be individual pups that hang around on their own before they come back to the rest of the pack after two or three weeks," Zimmermann said.</p>
<p>"There is a lot of dynamism from November onwards, where you see that the pups gradually become more and more independent," she said.</p>
<p>Most puppies leave the pack when they are one year old. At this point they have grown to the point where they look like adults. They usually reach puberty their second winter, but this can be delayed if they have remained with their parents.</p>
<p>The first "wave" leaves the pack when the parents mate again, and the second group leaven when the parents have new pups.</p>
<p>At this point, the young wolves go out in search of a partner and a suitable area to establish their own territory.</p>
<p>Some young animals remain in their parents' territory for one to two more years.</p>
<p>Zimmermann describes an example from her GPS studies. This wolf did not leave the pack as a one-year-old, like its siblings did.</p>
<p>"We saw from the GPS data that it was constantly trying to get close to the adults that had new pups. Then it disappeared again, possibly it was chased away," she said. "But in the autumn it returned to the pack and was with the adults and its new siblings all winter, until February-March," she said.</p>
<p>It ended up that this particular wolf established a territory right next to its parents, where there was available space.</p>
<div class="article-gallery lightGallery">
<div data-thumb="https://scx1.b-cdn.net/csz/news/tmb/2021/wolf-packs-dont-actual-3.jpg" data-src="https://scx2.b-cdn.net/gfx/news/2021/wolf-packs-dont-actual-3.jpg" data-sub-html="Two Canadian wolf pups with their mother. Credit: Pat Lauzon / Shutterstock / NTB">
<figure class="article-img text-center">
<img src="https://scx1.b-cdn.net/csz/news/800a/2021/wolf-packs-dont-actual-3.jpg" alt="Wolf packs don't actually have alpha males and alpha females, the idea is based on a misunderstanding" title="Two Canadian wolf pups with their mother. Credit: Pat Lauzon / Shutterstock / NTB">
<figcaption class="text-left text-darken text-truncate text-low-up mt-3">
Two Canadian wolf pups with their mother. Credit: Pat Lauzon / Shutterstock / NTB
</figcaption> </figure>
</div>
</div>
<p><b>Hunting in packs?</b></p>
<p>The findings described above come from the report Ulvevalpers flokksamhold og områdebruk i Skandinavia (Wolf pups' pack cohesion and areal use in Scandinavia).</p>
<p>The researchers wrote that the fact that the young gradually become more independent early on "stands in stark contrast to the perception that a pack of wolves is a close-knit unit that hunts in teams and moves together at all times."</p>
<p>Zimmermann notes that it's usually only the parents that hunt.</p>
<p>"The pups are usually not involved. The pups are not good at hunting themselves either, so they are pampered by the adults," she said.</p>
<p>As a result, the one-year-old pups aren't necessarily that good at hunting before they head off on their own, she said.</p>
<p>"They probably learn a bit from watching their parents, and they may sometimes be on some hunts. But it seems like they are very bad at hunting when they leave the pack," she said.</p>
<p>"We have some data on lone wolves and what they kill. It's not much. It's almost a surprise that they survive. But they are canines, they manage to survive on little food," she said.</p>
<p>But in some places in America, things are a little different. Here you can see large packs of <a href="https://phys.org/tags/wolves/" rel="tag" class="textTag">wolves</a> hunting in teams.</p>
<p><b>Packs with many members</b></p>
<p>There are video recordings, particularly from Yellowstone National Park, of large packs hunting together, Zimmermann said. In this situation, the pack contains several one- to three-year-olds. Wolves were reintroduced to Yellowstone in 1995.</p>
<p>"There are much higher prey densities and completely different conditions," Zimmermann said. "The thing is that when the wolf density increases and there start to be a lot of packs in very small territories, you see that the packs get bigger."</p>
<p>There it is more common for the pups to wait longer to go out on their own. The packs can thus consist of the parents and offspring from the last four years.</p>
<p>There have also been reports of cases from America where a wolf pair "adopts" a young male wolf that is unrelated, at least for a period. L. David Mech and Luigi Boitani wrote about this in their book "Wolves: Behavior, Ecology, and Conservation." As a rule, these intruders are normally chased away or killed.</p>
<p>"We have no documented cases of this in Scandinavia. This is something that has been published from Yellowstone," says Zimmermann.</p>
<p>Other variations that can be seen in <a href="https://phys.org/tags/wolf+packs/" rel="tag" class="textTag">wolf packs</a> is when one of the parents dies and a new partner comes from outside, perhaps with cubs in tow. It has also been observed that a daughter can become a partner with her stepfather and take over for an aging mother who remains in the pack.</p>
<p>In large packs, it can even happen that two bitches give birth to puppies, both mother and daughter.</p>
<p>The daughter is then still subordinate to the mother, but controls her own pups. In such relatively rare cases, it's possible that you can more rightly call the original pair alphas, Mech wrote in his 1999 study.</p>
<p>"The point here is not so much the terminology, but what the terminology falsely implies: a strictly strength-based dominance hierarchy," he wrote.</p>
<p>Packs with two mothers can later be split in two, if the daughter, for example, has mated with an adoptive male.</p>
<p><b>Takes time to change</b></p>
<p>The term alpha wolf is not widely used by wolf researchers today. But it is still well established in our consciousness, Zimmermann said. In the middle of a sentence, she corrects herself.</p>
<p>"Alpha animals ... I mean the leader animals or the adults," she said. "As you can see, it's still in there. But that's completely wrong."</p>
<p>In an article from 2008, David Mech wrote that it is said that it takes 20 years before new research fully sinks in. Perhaps this is also true for the concept of the alpha <a href="https://phys.org/tags/wolf/" rel="tag" class="textTag">wolf</a>.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 135
- 0
cache/2022/3a929cba1a057771e1778ee9dc3e300a/index.md View File

@@ -0,0 +1,135 @@
title: Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding
url: https://phys.org/news/2021-04-wolf-dont-alpha-males-females.html
hash_url: 3a929cba1a057771e1778ee9dc3e300a
<div data-thumb="https://scx1.b-cdn.net/csz/news/tmb/2021/wolf-packs-dont-actual.jpg" data-src="https://scx2.b-cdn.net/gfx/news/2021/wolf-packs-dont-actual.jpg" data-sub-html="The alpha designation used to describe wolf hierarchy is based on research on captive wolves. Credit: Bjarne Henning Kvaale / Shutterstock / NTB">
<figure class="article-img">
<img src="https://scx1.b-cdn.net/csz/news/800a/2021/wolf-packs-dont-actual.jpg" alt="Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding" title="The alpha designation used to describe wolf hierarchy is based on research on captive wolves. Credit: Bjarne Henning Kvaale / Shutterstock / NTB">
<figcaption class="text-darken text-low-up text-truncate-js text-truncate mt-3">
The alpha designation used to describe wolf hierarchy is based on research on captive wolves. Credit: Bjarne Henning Kvaale / Shutterstock / NTB
</figcaption> </figure>
</div>
<p>You may have heard that a wolf pack is led by an alpha pair.</p><p>Given this designation, it's easy to imagine that a pack consists of <a href="https://phys.org/tags/young+adults/" rel="tag" class="textTag">young adults</a> and older animals in a strict ranking system. You can imagine that relatives, newcomers and challengers are all part of the system. Maybe some of these wolves might challenge the alpha male to take over leadership of the pack?</p>
<p>On the Howstuffworks website, for example, you can read that wolves follow "an incredibly sophisticated group hierarchy," and that wolves naturally organize themselves in packs for stability and to help each other with hunting.</p>
<p>The pack structure is said to include a "beta wolf" who is the deputy and the "omega wolf" who is at the bottom of the rank, and often the victim of bullying.</p>
<p>In reality, wolf packs are usually much less complicated.</p>
<p><b>Doesn't work for wolves in the wild</b></p>
<p>Calling wolves alpha and beta animals comes from research on wolves in captivity, says Barbara Zimmermann.</p>
<p>Zimmermann is a professor at Inland Norway University of Applied Sciences who studies wolves.</p>
<p>"The leader is called the alpha male. Then there may be several rank levels, beta, gamma and so on. But this is not a concept that works for wolves in the wild," she says.</p>
<p>Most wolf packs simply consist of two parents and their puppies. The group may also include one- to three-year-old offspring that have not yet headed out on their own.</p>
<p>"The adults are simply in charge because they are the parents of the rest of the pack members. We don't talk about the alpha male, the alpha female and the beta child in a human family," Zimmermann said.</p>
<p><b>Battle for leadership in captivity</b></p>
<p>So how did the idea for the alpha wolf come about?</p>
<p>Rudolf Schenkel wrote about social structure and body language among wolves in 1947.</p>
<p>Schenkel studied wolves at the Basel Zoo in Switzerland, where up to ten wolves were kept together in an area of 10 by 20 meters.</p>
<p>He saw that the highest ranked female and male formed a pair, and that the hierarchy could change.</p>
<p>"By continuously controlling and suppressing all types of competition within the same sex, both 'alpha animals' defend their social position," Schenkel wrote.</p>
<p>According to another well-known wolf researcher, David Mech, it was Schenkel's work that gave rise to the idea of the alpha wolf, according to The International Wolf Center website.</p>
<p>As early as 1947, Schenkel mentioned that it was possible that wild wolf packs consisted of a monogamous pair, their puppies and one- to two-year-old pups. But this information was overlooked.</p>
<p>Rudolf Schenkel's work had great influence, said Ane Møller Gabrielsen, a senior research librarian at NTNU, the Norwegian University of Science and Technology.</p>
<p>In 2015, she completed her doctorate on "Power and meaning in the conflict zones over keeping dogs." Her dissertation describes research on pack structure in wolves, and how it in turn affected views on dog training.</p>
<p><b>Pecking order</b></p>
<p>Another Norwegian, Thorleif Schjelderup-Ebbe, also contributed with important insights.</p>
<p>Schjelderup-Ebbe established the term "pecking order " in the 1920s to describe relationships among chickens. This describes how chickens can be aggressive towards birds below them in the social hierarchy, but not towards those above them.</p>
<p>"The concept of the pecking order became very popular. It had great influence on the whole view of science at that time, at least in research that had to do with living organisms. It was seen as an underlying dominance principle that structures society and behavior," Møller Gabrielsen said.</p>
<div class="article-gallery lightGallery">
<div data-thumb="https://scx1.b-cdn.net/csz/news/tmb/2021/wolf-packs-dont-actual-1.jpg" data-src="https://scx2.b-cdn.net/gfx/news/2021/wolf-packs-dont-actual-1.jpg" data-sub-html="A moose meal in the snow. Credit: Andrew Astbury / Shutterstock / NTB">
<figure class="article-img text-center">
<img src="https://scx1.b-cdn.net/csz/news/800a/2021/wolf-packs-dont-actual-1.jpg" alt="Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding" title="A moose meal in the snow. Credit: Andrew Astbury / Shutterstock / NTB">
<figcaption class="text-left text-darken text-truncate text-low-up mt-3">
A moose meal in the snow. Credit: Andrew Astbury / Shutterstock / NTB
</figcaption> </figure>
</div>
</div>
<p><b>Popularized the alpha wolf concept</b></p>
<p>A great deal of research was done on the wolf's pack structure in the 1960s and 1970s, but this was mainly on wolves in captivity, Zimmermann said. For example, Erik Zimen, a Swede, worked with social organization among wolves in captivity.</p>
<p>These wolves were not necessarily related and were kept in an unnaturally small area.</p>
<p>In 1970, the book <i>The Wolf: Ecology and Behavior of an Endangered Species</i> was published, written by David Mech. It was a success. The book helped to popularize the alpha concept, because many people referred to Mech's work.</p>
<p>Mech has written on his website that he repeatedly asked the publisher to stop printing the book because much of the information is outdated—including the concept behind the alpha wolf. Nevertheless, the book is still being sold.</p>
<p>"David Mech, the world's most profiled wolf researcher, used the terminology alpha animals in his early research. But by the time he realized that this was a mistake, the term had already taken root in the literature. He is now struggling to get this changed," Zimmermann said.</p>
<p><b>Affected dog training</b></p>
<p>The alpha wolf theory was of great importance in dog training, says NTNU's Ane Møller Gabrielsen.</p>
<p>"This was true especially after 1970, when David Mech published his study. In addition, you have a number of other well-known names who published research based on animals in zoos. This gave us a pretty clear picture of the wolf as a very authoritarian animal with an almost a military ranking," she said.</p>
<p>Dog training comes from the military, Møller Gabrielsen said. The military used punishment as a training tool.</p>
<p>"Once the concept of the wolf and its strict hierarchy was established, trainers were more likely to use punishment. It wasn't just that the dog was punished when it did something wrong, you had to show the dog that you were the alpha wolf all the time," she said.</p>
<p>Some of the methods involved physical punishment, such as taking the puppy by the scruff of the neck and shaking it. These ideas became less widespread in the dog training literature throughout the 2000s.</p>
<p>"Most of what has been published in books since 2000 is so-called positive training, which is reward-based dog training that uses the least possible punishment and no physical punishment. So there has been a very big change," Møller Gabrielsen said.</p>
<p><b>Close contact with wolves</b></p>
<p>In 1999 and 2000, David Mech published two articles in which he tried to correct the popular misunderstanding about how a wolf pack is organized.</p>
<p>By that time, Mech had studied wild wolf packs on Ellesmere Island in Canada for 13 summers. He was able to acclimatize one of the wolf packs to his presence. That allowed him to study the pack up close—up to one meter, over several years.</p>
<p>He wrote that what was commonly called the alpha pair was simply the parents of the rest of the pack. As parents, they consequently led the pack's activities.</p>
<p>"Dominance fights with other wolves are rare, if they exist at all. During my 13 summers where I observed the pack, I saw none," Mech wrote in an article entitled "Alpha Status, Dominance, and Division of Labor in Wolf Packs."</p>
<p><b>The parents decide</b></p>
<p>The younger wolves were submissive to the parents. The parents controlled the distribution of food. The couple prioritized the youngest puppies to ensure they would get enough food if it needed to be shared. Older siblings may do the same thing, Mech wrote.</p>
<p>All the animals eat at the same time from a large carcass. But if the carcass is small, the parents eat first and determine when the pups are allowed to eat, he wrote.</p>
<p>However, there are also wolf packs that have a slightly different and exciting structure that we'll come back to later.</p>
<p><b>How Norwegian packs are structured</b></p>
<p>Barbara Zimmermann at the Inland Norway University of Applied Sciences and her colleagues have studied pack cohesion in Norwegian wolves using GPS data. This has given them insights into how these wolves live together.</p>
<div class="article-gallery lightGallery">
<div data-thumb="https://scx1.b-cdn.net/csz/news/tmb/2021/wolf-packs-dont-actual-2.jpg" data-src="https://scx2.b-cdn.net/gfx/news/2021/wolf-packs-dont-actual-2.jpg" data-sub-html="David Mech spent a lot of time studying daily life in the wolf pack. Credit: U.S. Geological Survey by L. David Mech">
<figure class="article-img text-center">
<img src="https://scx1.b-cdn.net/csz/news/800a/2021/wolf-packs-dont-actual-2.jpg" alt="Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding" title="David Mech spent a lot of time studying daily life in the wolf pack. Credit: U.S. Geological Survey by L. David Mech">
<figcaption class="text-left text-darken text-truncate text-low-up mt-3">
David Mech spent a lot of time studying daily life in the wolf pack. Credit: U.S. Geological Survey by L. David Mech
</figcaption> </figure>
</div>
</div>
<p>"A typical wolf pack in Scandinavia consists of six animals on average, most often the parents and four yearling puppies," says Zimmermann.</p>
<p>A typical year for a Scandinavian wolf pack first involves a male and a female pair establishing a territory. They mark a large area in the forest with scent, which they patrol and defend against other wolves.</p>
<p>The wolves mate in February-March and the young are born in May, in a den.</p>
<p>While the female nurses the young, the male must hunt for the first few weeks.</p>
<p>"At this time, moose calves are small. The male wolf eats as much food as possible and comes back and vomits it up for the female to eat," she said.</p>
<p>After a couple of weeks, the female also begins to take hunting trips while the male remains in the den.</p>
<p><b>Strong attachment</b></p>
<p>"What is exciting about wolf pairs is that they are unbelievably faithful. They stay together all the time," Zimmermann said.</p>
<p>Wolves are monogamous, and usually do not change partners until one dies.</p>
<p>The denning period is mostly the only time when they hunt apart, Zimmermann said.</p>
<p>"More than 70 percent of GPS positions from wolf pairs show they remain within 100 meters of each other. So they are incredibly dependent on each other," she said.</p>
<p>After the denning period, the puppies are carried to a new location, which is usually by a carcass. Then the parents move in star shape around the area. After a few weeks, they are moved to a new location.</p>
<p>In September—October, the young are big enough to start following the adults. But even then they have a common location. The adults go out and hunt together in the evening. Then they go get the pups when they have killed their prey.</p>
<p><b>Quick to become independent</b></p>
<p>By November, the pups are so big that they start to wander a little farther away from their parents. But they stay within the territory.</p>
<p>"There may be individual pups that hang around on their own before they come back to the rest of the pack after two or three weeks," Zimmermann said.</p>
<p>"There is a lot of dynamism from November onwards, where you see that the pups gradually become more and more independent," she said.</p>
<p>Most puppies leave the pack when they are one year old. At this point they have grown to the point where they look like adults. They usually reach puberty their second winter, but this can be delayed if they have remained with their parents.</p>
<p>The first "wave" leaves the pack when the parents mate again, and the second group leaven when the parents have new pups.</p>
<p>At this point, the young wolves go out in search of a partner and a suitable area to establish their own territory.</p>
<p>Some young animals remain in their parents' territory for one to two more years.</p>
<p>Zimmermann describes an example from her GPS studies. This wolf did not leave the pack as a one-year-old, like its siblings did.</p>
<p>"We saw from the GPS data that it was constantly trying to get close to the adults that had new pups. Then it disappeared again, possibly it was chased away," she said. "But in the autumn it returned to the pack and was with the adults and its new siblings all winter, until February-March," she said.</p>
<p>It ended up that this particular wolf established a territory right next to its parents, where there was available space.</p>
<div class="article-gallery lightGallery">
<div data-thumb="https://scx1.b-cdn.net/csz/news/tmb/2021/wolf-packs-dont-actual-3.jpg" data-src="https://scx2.b-cdn.net/gfx/news/2021/wolf-packs-dont-actual-3.jpg" data-sub-html="Two Canadian wolf pups with their mother. Credit: Pat Lauzon / Shutterstock / NTB">
<figure class="article-img text-center">
<img src="https://scx1.b-cdn.net/csz/news/800a/2021/wolf-packs-dont-actual-3.jpg" alt="Wolf packs don't actually have alpha males and alpha females, the idea is based on a misunderstanding" title="Two Canadian wolf pups with their mother. Credit: Pat Lauzon / Shutterstock / NTB">
<figcaption class="text-left text-darken text-truncate text-low-up mt-3">
Two Canadian wolf pups with their mother. Credit: Pat Lauzon / Shutterstock / NTB
</figcaption> </figure>
</div>
</div>
<p><b>Hunting in packs?</b></p>
<p>The findings described above come from the report Ulvevalpers flokksamhold og områdebruk i Skandinavia (Wolf pups' pack cohesion and areal use in Scandinavia).</p>
<p>The researchers wrote that the fact that the young gradually become more independent early on "stands in stark contrast to the perception that a pack of wolves is a close-knit unit that hunts in teams and moves together at all times."</p>
<p>Zimmermann notes that it's usually only the parents that hunt.</p>
<p>"The pups are usually not involved. The pups are not good at hunting themselves either, so they are pampered by the adults," she said.</p>
<p>As a result, the one-year-old pups aren't necessarily that good at hunting before they head off on their own, she said.</p>
<p>"They probably learn a bit from watching their parents, and they may sometimes be on some hunts. But it seems like they are very bad at hunting when they leave the pack," she said.</p>
<p>"We have some data on lone wolves and what they kill. It's not much. It's almost a surprise that they survive. But they are canines, they manage to survive on little food," she said.</p>
<p>But in some places in America, things are a little different. Here you can see large packs of <a href="https://phys.org/tags/wolves/" rel="tag" class="textTag">wolves</a> hunting in teams.</p>
<p><b>Packs with many members</b></p>
<p>There are video recordings, particularly from Yellowstone National Park, of large packs hunting together, Zimmermann said. In this situation, the pack contains several one- to three-year-olds. Wolves were reintroduced to Yellowstone in 1995.</p>
<p>"There are much higher prey densities and completely different conditions," Zimmermann said. "The thing is that when the wolf density increases and there start to be a lot of packs in very small territories, you see that the packs get bigger."</p>
<p>There it is more common for the pups to wait longer to go out on their own. The packs can thus consist of the parents and offspring from the last four years.</p>
<p>There have also been reports of cases from America where a wolf pair "adopts" a young male wolf that is unrelated, at least for a period. L. David Mech and Luigi Boitani wrote about this in their book "Wolves: Behavior, Ecology, and Conservation." As a rule, these intruders are normally chased away or killed.</p>
<p>"We have no documented cases of this in Scandinavia. This is something that has been published from Yellowstone," says Zimmermann.</p>
<p>Other variations that can be seen in <a href="https://phys.org/tags/wolf+packs/" rel="tag" class="textTag">wolf packs</a> is when one of the parents dies and a new partner comes from outside, perhaps with cubs in tow. It has also been observed that a daughter can become a partner with her stepfather and take over for an aging mother who remains in the pack.</p>
<p>In large packs, it can even happen that two bitches give birth to puppies, both mother and daughter.</p>
<p>The daughter is then still subordinate to the mother, but controls her own pups. In such relatively rare cases, it's possible that you can more rightly call the original pair alphas, Mech wrote in his 1999 study.</p>
<p>"The point here is not so much the terminology, but what the terminology falsely implies: a strictly strength-based dominance hierarchy," he wrote.</p>
<p>Packs with two mothers can later be split in two, if the daughter, for example, has mated with an adoptive male.</p>
<p><b>Takes time to change</b></p>
<p>The term alpha wolf is not widely used by wolf researchers today. But it is still well established in our consciousness, Zimmermann said. In the middle of a sentence, she corrects herself.</p>
<p>"Alpha animals ... I mean the leader animals or the adults," she said. "As you can see, it's still in there. But that's completely wrong."</p>
<p>In an article from 2008, David Mech wrote that it is said that it takes 20 years before new research fully sinks in. Perhaps this is also true for the concept of the alpha <a href="https://phys.org/tags/wolf/" rel="tag" class="textTag">wolf</a>.</p>

+ 194
- 0
cache/2022/539f9f951e0d3ba9024f3b837941372f/index.html View File

@@ -0,0 +1,194 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Ce qui compte (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://olivier.thereaux.net/2021/Ce-qui-compte/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Ce qui compte</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://olivier.thereaux.net/2021/Ce-qui-compte/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p class="postDate">Publié: <abbr class="published">30 Décembre 2021</abbr></p>

<blockquote lang="en" xml:lang="en" cite="urn:isbn:9780141992839">
<p>One <em>ri</em> —as I came to know in practice— was the distance that a man with a burden would aim to cover in one hour on mountain roads. The kilometer was invented for the convenience of machinery. The <em>ri</em> was an entirely human measure, which is why it had no chance of surviving.</p>
<cite class="title">The Roads to Sata</cite>
<cite class="author">Alan Booth</cite>
</blockquote>

<p>Au printemps, un peu inquiet quant aux séquelles laissées par la double campagne napoléonienne du Covid long et d'une cytaphérèse du dernier espoir, j'empruntais à S un de ces bracelets connectés, lui donnant par ailleurs le prétexte d'en acheter un plus sophistiqué pour le remplacer.</p>

<p>Je ne suis pas entièrement étranger à la pratique de la quantification du soi, ayant par le passé porté une variété de pédomètres pour mieux jauger mes habitudes déambulatoires. Mais cette fois, il en allait d'une anxiété plus profonde, existentielle. Si la promesse de tout ce genre d'appareillage est de nous pousser par petites touches vers l'idéal ensandalé de l'esprit sain dans un corps sain, je l'approchais plutôt comme un moyen de dévisager ma propre mort.</p>

<p>J'avais trouvé sur une de ses étagères ma copie de bachelier des Lettres d'Épicure. La mort, disent-elles comme une prière, n'est rien pour nous. J'ai gardé le bouquin: presque le seul talisman choisi parmi deux bennes de merdier accumulé le long d'une retraite trop tranquille.</p>

<p>Après quelques semaines à porter ledit bracelet, qui m'annonçait fièrement que l'âge de mon système vasculaire était de vingt ans, et que mon pouls au repos oscillait entre 37 battements par minute et 150, j'entamai un divorce à l'amiable avec le bidule. Au milieu d'une année prise en sandwich par les obsèques de mes deux parents, je décidai qu'après tout, j'avais assez de mort dans ma vie sans avoir vraiment besoin en bonus de ces données absurdes sur ma propre mortalité, et sa distance dont je choisis, après tout, de ne pas connaître l'unité.</p>

<p>Venu l'été, j'ai repensé à ce machin qui prenait gentiment la poussière dans un fond de tiroir lorsque, interrogé par l'artiste en résidence de l'ODI sur le langage de mon métier, je dus donner une définition personnelle de ce que pour moi signifiait la donnée. Une drôle de question, mais pertinente si l'on souhaite éviter les définitions circulaires impliquant l'usage du mot "information". La donnée, répondai-je, c'est la mesure de ce qui nous tient à cœur, de ce qui nous importe.</p>

<p>Par amour du mauvais jeu de mot, j'aurais pu dire: <em>la mesure de ce qui compte</em>.</p>

<p>Mesurer pour comprendre, analyser; mesurer pour informer nos décisions, pour les communiquer, les mettre en contexte, parfois pour les justifier, en comprendre l'impact. Mesurer nos erreurs. Mais aussi: savoir que ce qui compte est parfois insondable, indénombrable. Avoir la sagesse d'admettre que ce qui peut être compté n'est souvent qu'un pâle reflet de ce que les chiffres représentent, tout comme l'on peut compter les arbres ou leur rendement de bois, mais pour prendre la mesure d'une forêt, il faut aussi ressentir la souplesse de la mousse sous le pied, observer l'odeur des feuilles et du sous-bois, écouter le vent dans les branches et saluer la vie de ses résidents.</p>

<p>Et de mon cœur, je compte les souvenirs plutôt que les battements.</p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 35
- 0
cache/2022/539f9f951e0d3ba9024f3b837941372f/index.md View File

@@ -0,0 +1,35 @@
title: Ce qui compte
url: https://olivier.thereaux.net/2021/Ce-qui-compte/
hash_url: 539f9f951e0d3ba9024f3b837941372f

<p class="postDate">Publié: <abbr class="published">30 Décembre 2021</abbr></p>



<blockquote lang="en" xml:lang="en" cite="urn:isbn:9780141992839">
<p>One <em>ri</em> —as I came to know in practice— was the distance that a man with a burden would aim to cover in one hour on mountain roads. The kilometer was invented for the convenience of machinery. The <em>ri</em> was an entirely human measure, which is why it had no chance of surviving.</p>
<cite class="title">The Roads to Sata</cite>
<cite class="author">Alan Booth</cite>
</blockquote>

<p>Au printemps, un peu inquiet quant aux séquelles laissées par la double campagne napoléonienne du Covid long et d'une cytaphérèse du dernier espoir, j'empruntais à S un de ces bracelets connectés, lui donnant par ailleurs le prétexte d'en acheter un plus sophistiqué pour le remplacer.</p>

<p>Je ne suis pas entièrement étranger à la pratique de la quantification du soi, ayant par le passé porté une variété de pédomètres pour mieux jauger mes habitudes déambulatoires. Mais cette fois, il en allait d'une anxiété plus profonde, existentielle. Si la promesse de tout ce genre d'appareillage est de nous pousser par petites touches vers l'idéal ensandalé de l'esprit sain dans un corps sain, je l'approchais plutôt comme un moyen de dévisager ma propre mort.</p>



<p>J'avais trouvé sur une de ses étagères ma copie de bachelier des Lettres d'Épicure. La mort, disent-elles comme une prière, n'est rien pour nous. J'ai gardé le bouquin: presque le seul talisman choisi parmi deux bennes de merdier accumulé le long d'une retraite trop tranquille.</p>

<p>Après quelques semaines à porter ledit bracelet, qui m'annonçait fièrement que l'âge de mon système vasculaire était de vingt ans, et que mon pouls au repos oscillait entre 37 battements par minute et 150, j'entamai un divorce à l'amiable avec le bidule. Au milieu d'une année prise en sandwich par les obsèques de mes deux parents, je décidai qu'après tout, j'avais assez de mort dans ma vie sans avoir vraiment besoin en bonus de ces données absurdes sur ma propre mortalité, et sa distance dont je choisis, après tout, de ne pas connaître l'unité.</p>



<p>Venu l'été, j'ai repensé à ce machin qui prenait gentiment la poussière dans un fond de tiroir lorsque, interrogé par l'artiste en résidence de l'ODI sur le langage de mon métier, je dus donner une définition personnelle de ce que pour moi signifiait la donnée. Une drôle de question, mais pertinente si l'on souhaite éviter les définitions circulaires impliquant l'usage du mot "information". La donnée, répondai-je, c'est la mesure de ce qui nous tient à cœur, de ce qui nous importe.</p>

<p>Par amour du mauvais jeu de mot, j'aurais pu dire: <em>la mesure de ce qui compte</em>.</p>



<p>Mesurer pour comprendre, analyser; mesurer pour informer nos décisions, pour les communiquer, les mettre en contexte, parfois pour les justifier, en comprendre l'impact. Mesurer nos erreurs. Mais aussi: savoir que ce qui compte est parfois insondable, indénombrable. Avoir la sagesse d'admettre que ce qui peut être compté n'est souvent qu'un pâle reflet de ce que les chiffres représentent, tout comme l'on peut compter les arbres ou leur rendement de bois, mais pour prendre la mesure d'une forêt, il faut aussi ressentir la souplesse de la mousse sous le pied, observer l'odeur des feuilles et du sous-bois, écouter le vent dans les branches et saluer la vie de ses résidents.</p>

<p>Et de mon cœur, je compte les souvenirs plutôt que les battements.</p>

+ 194
- 0
cache/2022/987e2e450e3e88d0d6d18ec6e6a44b95/index.html View File

@@ -0,0 +1,194 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Habiter sans posséder, tel est l’antidote (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://revoirleslucioles.org/habiter-sans-posseder-tel-est-lantidote/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Habiter sans posséder, tel est l’antidote</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://revoirleslucioles.org/habiter-sans-posseder-tel-est-lantidote/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>La période est franchement déprimante, on ne va pas se mentir. Et pourtant, loin des radars médiatiques et des polémiques creuses, elle recèle aussi des initiatives singulièrement intéressantes. Ainsi du récent lancement de la <a class="spip_out" href="https://lafonciereantidote.org/" target="_blank" rel="external noopener noreferrer">foncière Antidote</a>, où se sont tenues de salutaires réflexions sur l’autonomie, le collectif et la question de la propriété. De quoi se décrasser un peu les neurones des débats superficiels et haineux.</p>
<h3 class="spip">Cultiver l’usage</h3>
<p>On le sait, la propriété privée dans un système capitaliste et productiviste fait des ravages. Elle exacerbe la valeur marchande au <a class="spip_out" href="https://www.mediapart.fr/journal/economie/081221/marchandisation-du-virtuel-la-fuite-en-avant-du-systeme-economique" target="_blank" rel="external noopener noreferrer">détriment de la valeur d’usage</a>. Elle permet l’accumulation sans limites écologiques ni égards de justice sociale. Ce n’est pas une nouvelle et ce n’était d’ailleurs guère mieux dans les systèmes féodaux, où la propriété impliquait un lien d’assujettissement du vassal envers le suzerain qui la lui garantissait. Sans parler du commerce d’esclaves qui donna au droit de propriété son extension la plus intolérable. Bien sûr, je prends à dessein les exemples les plus frappants<small class="fine d-inline"> </small>; cela pour dire que le sacro-saint droit à la propriété comporte ses failles, fautes et monstruosités.</p>
<p>Il n’est donc pas surprenant que ce droit ait toujours été questionné. Citons pêle-mêle les <em>Diggers</em> du <span class="caps">XVII</span><sup class="typo_exposants">e</sup> siècle portant haut et fort, dans une perspective autonome et égalitaire le droit de <i>«<small class="fine d-inline"> </small>bêcher, labourer et habiter<small class="fine d-inline"> </small>»</i> sans titre de propriété ni loyer<small class="fine d-inline"> </small>; les arracheurs de pieux de Jean-Jacques Rousseau<small class="fine d-inline"> </small>; la lutte du Mouvement des travailleurs ruraux sans terre au Brésil contre le système des latifundistes<small class="fine d-inline"> </small>; ou encore les mouvements successifs concernant le droit de glaner qui, même limité, n’a jamais disparu, comme le souligne l’historienne Florence Gauthier.</p>
<p><i>«<small class="fine d-inline"> </small>Le premier qui, ayant enclos un terrain, s’avisa de dire : </i>“Ceci est à moi”<i>, et trouva des gens assez simples pour le croire, fut le vrai fondateur de la société civile</i>, écrit Jean-Jacques Rousseau, dans le <i>Discours sur l’origine et les fondements de l’inégalité parmi les hommes</i> (1755). <i>Que de crimes, que de guerres, de meurtres, que de misères et d’horreurs n’eût point épargnés au genre humain celui qui, arrachant les pieux ou comblant le fossé, eût crié à ses semblables : </i>“Gardez-vous d’écouter cet imposteur<small class="fine d-inline"> </small>; vous êtes perdus, si vous oubliez que les fruits sont à tous, et que la terre n’est à personne”<i>.<small class="fine d-inline"> </small>»</i></p>
<p>Contrairement à l’idée en vogue, la propriété n’est pas un pouvoir absolu. Le droit prévoit d’ailleurs de pouvoir la contourner dans certains cas au nom de l’intérêt général. Par exemple, quand des personnes dorment à la rue ou dans des <a href="https://reporterre.net/Des-migrants-crevent-de-froid-aux-portes-de-Paris-et-l-Etat-ne-fait-rien">camps de fortune</a> alors que plus de 3 millions de logements sont vacants en France, l’État a le pouvoir et le devoir de réquisitionner les logements, publics comme privés.</p>
<h3>«<small class="fine d-inline"> </small>Créer des lieux que personne ne possède et qui sont utiles à beaucoup<small class="fine d-inline"> </small>»</h3>
<p>Peut-on donc imaginer une manière d’habiter sans posséder<small class="fine d-inline"> </small>? Je ne parle pas ici de devenir locataire, ce qui induit une autre forme de dépendance, mais bien d’habiter sans posséder ni se soumettre<small class="fine d-inline"> </small>; en somme, de redéfinir droit de propriété et droit d’usage, à l’aune du travail colossal réalisé sur les communs, l’<a class="spip_out" href="https://www.revue-ballast.fr/la-part-anarchiste-des-communs/" target="_blank" rel="external noopener noreferrer">autogestion et la solidarité</a>.</p>
<p>C’est la tâche à laquelle s’attelle depuis trois ans la <a href="https://reporterre.net/Le-fonds-de-dotation-une-breche-dans-la-conception-francaise-de-la-propriete-prive">foncière Antidote</a>, en cherchant à neutraliser la partie la plus nocive de la propriété, l’abusus. Concrètement, si l’on prend l’exemple d’un arbre, l’usus donne le droit de dormir sous son feuillage, le fructus celui de manger ses fruits, et l’abusus le droit de le couper. Appliqué à un lieu collectif, neutraliser l’abusus revient donc à le sortir du marché afin qu’il ne puisse être vendu. Pour cela, la propriété en est confiée à un fonds de dotation, la foncière Antidote. Celle-ci, par le biais de baux emphytéotiques, va déléguer aux usagers tous les droits d’un propriétaire, sauf celui de vendre.</p>
<p>Ce dispositif permet de garantir la pérennité du lieu. Il permet également de s’épargner les questions de parts et de rachat lorsqu’une personne décide de s’en aller. Enfin, l’autonomie du projet est garantie par le fait que la propriétaire, la foncière Antidote, est une structure animée par des bénévoles, qui ne comporte ni bénéfices ni actionnaires, et dans laquelle le pouvoir ne peut être acheté.</p>
<p>L’ironie veut que l’on doive ces fonds de dotation à Christine Lagarde, ministre de l’Économie de Nicolas Sarkozy en 2008. Loin de chercher à promouvoir l’autogestion, elle souhaitait alors favoriser les grands donateurs privés par une simplification des procédures et des avantages fiscaux. Un détournement opéré en toute légalité… Le principe d’Antidote est d’ailleurs proche d’autres initiatives comme <a class="spip_out" href="http://www.foretsenvie.org" target="_blank" rel="external noopener noreferrer">Forêts en vie</a>, qui permet à des collectifs citoyens d’acquérir et préserver des forêts, le fonds <a href="https://reporterre.net/Les-zadistes-veulent-acheter-les-terres-de-Notre-Dame-des-Landes">La terre en commun</a> créé suite à l’abandon du projet d’aéroport sur la Zad de Notre-Dame-des-Landes, ou encore la Fondation et la Foncière <a href="https://terredeliens.org/-un-mouvement-trois-piliers-.html">Terre de liens</a>.</p>
<h3 class="spip"><img loading="lazy" class="aligncenter size-full wp-image-3187" src="https://revoirleslucioles.org/wp-content/uploads/2022/01/bandeau-ancrage.jpg" alt="" srcset="https://revoirleslucioles.org/wp-content/uploads/2022/01/bandeau-ancrage.jpg 900w, https://revoirleslucioles.org/wp-content/uploads/2022/01/bandeau-ancrage-300x150.jpg 300w, https://revoirleslucioles.org/wp-content/uploads/2022/01/bandeau-ancrage-768x384.jpg 768w" sizes="(max-width: 900px) 100vw, 900px"></h3>
<h3 class="spip">Des lieux d’expérimentations</h3>
<p>Mais contrairement à cette dernière, Antidote fonctionne sur un modèle autogestionnaire avec un périmètre d’action qui englobe autant des fermes collectives que des lieux d’expérimentations urbains, comme en témoignent les trois premiers projets accompagnés. Les communs de la Marinie, dans l’Aveyron, naviguent entre paysannerie, travail social, projections de films et éducation populaire en milieu rural. La Talvère, dans le Lot, se définit comme « un tiers-lieu autogéré et laboratoire des communs », ouvert à de nombreux usages, dont des activités socioculturelles. Enfin, <a href="https://blogs.mediapart.fr/romain-pacia/blog/241221/collectif-ancrage-ensemble-prenons-un-coin-de-rue">le petit immeuble d’Ancrage à Nancy</a>, bien implanté dans le quartier des Trois Maisons, sera dédié aux luttes sociales, à la création, à l’édition et à l’image, avec une bibliothèque et un étage dédié à de l’hébergement solidaire.</p>
<p>Il peut paraître curieux d’utiliser le ressort de la propriété pour favoriser les communs. Cette question a notamment été explorée par le juriste Lionel Maurel, en lien avec les travaux d’Elinor Ostrom et les démarches de Réserves de vie sauvage de l’<a class="spip_out" href="https://aspas-reserves-vie-sauvage.org/les-reserves-de-vie-sauvage/" target="_blank" rel="external noopener noreferrer"><span class="caps">ASPAS</span></a>. Il s’interrogeait alors : <i>«<small class="fine d-inline"> </small><a href="https://scinfolex.com/2019/08/19/la-propriete-privee-au-secours-des-forets-ou-les-paradoxes-des-nouveaux-communs-%20sylvestres/" data-wplink-url-error="true">Faut-il se résigner à faire des îlots de communs dans un océan de propriété ou agir pour que le commun s’impose à tous les propriétaires<small class="fine d-inline"> </small>?<small class="fine d-inline"> </small></a>»</i> Le principal atout d’Antidote pour gérer au mieux ce paradoxe est de porter un projet politique clairement affirmé qui vide la notion même de propriété de tout ce qu’elle véhicule de capital, de retour sur investissement, de spéculation et de rente héritée. L’objectif n’est pas de recourir à la propriété privée, mais bien de neutraliser celle-ci pour créer <i>«<small class="fine d-inline"> </small>des lieux que personne ne possède et qui sont utiles à beaucoup<small class="fine d-inline"> </small>»</i>.</p>
<p>Voilà qui peut contribuer à mailler le pays d’espaces autogérés, libérés du marché et de la précarité. La foncière Antidote n’en est qu’à ses débuts et rien ne permet aujourd’hui de garantir son succès. Mais elle s’attaque depuis les interstices à un angle mort du contre-système, celui de la stratégie et de l’autonomie financières, en creusant une voie nouvelle dans le droit qui permet d’espérer. Et cela mérite d’être soutenu et salué.</p>
<hr class="spip">
<p> </p>
<p>• <i>Ces réflexions sont en grande partie issues des échanges qui ont eu lieu au lancement de la foncière Antidote aux Laboratoires d’Aubervilliers, le 12 novembre, en présence de nombreux collectifs et invité·es, animés par Jade Lindgaard avec les interventions de Sarah Vanuxem et Isabelle Stengers.</i></p>
<p>Habiter sans posséder<i> est le titre de l’ouvrage édité par la maison d’édition Les Presses du Faubourg, qui fait partie du collectif Ancrage à Nancy. Il réunit les actes de rencontres tenues en 2018 à Dijon avec des contributions de Florence Gauthier, Jérôme Baschet, Longo Maï, le Mietshäuser Syndikat allemand, Aurélien Berlan ou encore la revue </i>Panthère Première<i>. Commande possible par courriel à : lespressesdufaubourg@riseup.net </i></p>
<p><em>Si cela vous est financièrement possible, vous pouvez participer à l’un des projets accompagnés par la Foncière Antidote ou contribuer à son fonds de solidarité général ici :</em> <a href="https://www.helloasso.com/associations/la-fonciere-antidote">https://www.helloasso.com/associations/la-fonciere-antidote</a><em> (et hacker au passage la réduction d’impôts de 66 % imaginée par Christine Lagarde).</em></p>
<p>Illustration : © 2021 lafonciereantidote.org</p>
<p>• <a class="spip_out" href="https://lafonciereantidote.org/" target="_blank" rel="external noopener noreferrer">Toutes les informations sur Antidote</a></p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 27
- 0
cache/2022/987e2e450e3e88d0d6d18ec6e6a44b95/index.md View File

@@ -0,0 +1,27 @@
title: Habiter sans posséder, tel est l’antidote
url: https://revoirleslucioles.org/habiter-sans-posseder-tel-est-lantidote/
hash_url: 987e2e450e3e88d0d6d18ec6e6a44b95

<p>La période est franchement déprimante, on ne va pas se mentir. Et pourtant, loin des radars médiatiques et des polémiques creuses, elle recèle aussi des initiatives singulièrement intéressantes. Ainsi du récent lancement de la <a class="spip_out" href="https://lafonciereantidote.org/" target="_blank" rel="external noopener noreferrer">foncière Antidote</a>, où se sont tenues de salutaires réflexions sur l’autonomie, le collectif et la question de la propriété. De quoi se décrasser un peu les neurones des débats superficiels et haineux.</p>
<h3 class="spip">Cultiver l’usage</h3>
<p>On le sait, la propriété privée dans un système capitaliste et productiviste fait des ravages. Elle exacerbe la valeur marchande au <a class="spip_out" href="https://www.mediapart.fr/journal/economie/081221/marchandisation-du-virtuel-la-fuite-en-avant-du-systeme-economique" target="_blank" rel="external noopener noreferrer">détriment de la valeur d’usage</a>. Elle permet l’accumulation sans limites écologiques ni égards de justice sociale. Ce n’est pas une nouvelle et ce n’était d’ailleurs guère mieux dans les systèmes féodaux, où la propriété impliquait un lien d’assujettissement du vassal envers le suzerain qui la lui garantissait. Sans parler du commerce d’esclaves qui donna au droit de propriété son extension la plus intolérable. Bien sûr, je prends à dessein les exemples les plus frappants<small class="fine d-inline"> </small>; cela pour dire que le sacro-saint droit à la propriété comporte ses failles, fautes et monstruosités.</p>
<p>Il n’est donc pas surprenant que ce droit ait toujours été questionné. Citons pêle-mêle les <em>Diggers</em> du <span class="caps">XVII</span><sup class="typo_exposants">e</sup> siècle portant haut et fort, dans une perspective autonome et égalitaire le droit de <i>«<small class="fine d-inline"> </small>bêcher, labourer et habiter<small class="fine d-inline"> </small>»</i> sans titre de propriété ni loyer<small class="fine d-inline"> </small>; les arracheurs de pieux de Jean-Jacques Rousseau<small class="fine d-inline"> </small>; la lutte du Mouvement des travailleurs ruraux sans terre au Brésil contre le système des latifundistes<small class="fine d-inline"> </small>; ou encore les mouvements successifs concernant le droit de glaner qui, même limité, n’a jamais disparu, comme le souligne l’historienne Florence Gauthier.</p>
<p><i>«<small class="fine d-inline"> </small>Le premier qui, ayant enclos un terrain, s’avisa de dire : </i>“Ceci est à moi”<i>, et trouva des gens assez simples pour le croire, fut le vrai fondateur de la société civile</i>, écrit Jean-Jacques Rousseau, dans le <i>Discours sur l’origine et les fondements de l’inégalité parmi les hommes</i> (1755). <i>Que de crimes, que de guerres, de meurtres, que de misères et d’horreurs n’eût point épargnés au genre humain celui qui, arrachant les pieux ou comblant le fossé, eût crié à ses semblables : </i>“Gardez-vous d’écouter cet imposteur<small class="fine d-inline"> </small>; vous êtes perdus, si vous oubliez que les fruits sont à tous, et que la terre n’est à personne”<i>.<small class="fine d-inline"> </small>»</i></p>
<p>Contrairement à l’idée en vogue, la propriété n’est pas un pouvoir absolu. Le droit prévoit d’ailleurs de pouvoir la contourner dans certains cas au nom de l’intérêt général. Par exemple, quand des personnes dorment à la rue ou dans des <a href="https://reporterre.net/Des-migrants-crevent-de-froid-aux-portes-de-Paris-et-l-Etat-ne-fait-rien">camps de fortune</a> alors que plus de 3 millions de logements sont vacants en France, l’État a le pouvoir et le devoir de réquisitionner les logements, publics comme privés.</p>
<h3>«<small class="fine d-inline"> </small>Créer des lieux que personne ne possède et qui sont utiles à beaucoup<small class="fine d-inline"> </small>»</h3>
<p>Peut-on donc imaginer une manière d’habiter sans posséder<small class="fine d-inline"> </small>? Je ne parle pas ici de devenir locataire, ce qui induit une autre forme de dépendance, mais bien d’habiter sans posséder ni se soumettre<small class="fine d-inline"> </small>; en somme, de redéfinir droit de propriété et droit d’usage, à l’aune du travail colossal réalisé sur les communs, l’<a class="spip_out" href="https://www.revue-ballast.fr/la-part-anarchiste-des-communs/" target="_blank" rel="external noopener noreferrer">autogestion et la solidarité</a>.</p>
<p>C’est la tâche à laquelle s’attelle depuis trois ans la <a href="https://reporterre.net/Le-fonds-de-dotation-une-breche-dans-la-conception-francaise-de-la-propriete-prive">foncière Antidote</a>, en cherchant à neutraliser la partie la plus nocive de la propriété, l’abusus. Concrètement, si l’on prend l’exemple d’un arbre, l’usus donne le droit de dormir sous son feuillage, le fructus celui de manger ses fruits, et l’abusus le droit de le couper. Appliqué à un lieu collectif, neutraliser l’abusus revient donc à le sortir du marché afin qu’il ne puisse être vendu. Pour cela, la propriété en est confiée à un fonds de dotation, la foncière Antidote. Celle-ci, par le biais de baux emphytéotiques, va déléguer aux usagers tous les droits d’un propriétaire, sauf celui de vendre.</p>
<p>Ce dispositif permet de garantir la pérennité du lieu. Il permet également de s’épargner les questions de parts et de rachat lorsqu’une personne décide de s’en aller. Enfin, l’autonomie du projet est garantie par le fait que la propriétaire, la foncière Antidote, est une structure animée par des bénévoles, qui ne comporte ni bénéfices ni actionnaires, et dans laquelle le pouvoir ne peut être acheté.</p>
<p>L’ironie veut que l’on doive ces fonds de dotation à Christine Lagarde, ministre de l’Économie de Nicolas Sarkozy en 2008. Loin de chercher à promouvoir l’autogestion, elle souhaitait alors favoriser les grands donateurs privés par une simplification des procédures et des avantages fiscaux. Un détournement opéré en toute légalité… Le principe d’Antidote est d’ailleurs proche d’autres initiatives comme <a class="spip_out" href="http://www.foretsenvie.org" target="_blank" rel="external noopener noreferrer">Forêts en vie</a>, qui permet à des collectifs citoyens d’acquérir et préserver des forêts, le fonds <a href="https://reporterre.net/Les-zadistes-veulent-acheter-les-terres-de-Notre-Dame-des-Landes">La terre en commun</a> créé suite à l’abandon du projet d’aéroport sur la Zad de Notre-Dame-des-Landes, ou encore la Fondation et la Foncière <a href="https://terredeliens.org/-un-mouvement-trois-piliers-.html">Terre de liens</a>.</p>
<h3 class="spip"><img loading="lazy" class="aligncenter size-full wp-image-3187" src="https://revoirleslucioles.org/wp-content/uploads/2022/01/bandeau-ancrage.jpg" alt="" srcset="https://revoirleslucioles.org/wp-content/uploads/2022/01/bandeau-ancrage.jpg 900w, https://revoirleslucioles.org/wp-content/uploads/2022/01/bandeau-ancrage-300x150.jpg 300w, https://revoirleslucioles.org/wp-content/uploads/2022/01/bandeau-ancrage-768x384.jpg 768w" sizes="(max-width: 900px) 100vw, 900px"></h3>
<h3 class="spip">Des lieux d’expérimentations</h3>
<p>Mais contrairement à cette dernière, Antidote fonctionne sur un modèle autogestionnaire avec un périmètre d’action qui englobe autant des fermes collectives que des lieux d’expérimentations urbains, comme en témoignent les trois premiers projets accompagnés. Les communs de la Marinie, dans l’Aveyron, naviguent entre paysannerie, travail social, projections de films et éducation populaire en milieu rural. La Talvère, dans le Lot, se définit comme « un tiers-lieu autogéré et laboratoire des communs », ouvert à de nombreux usages, dont des activités socioculturelles. Enfin, <a href="https://blogs.mediapart.fr/romain-pacia/blog/241221/collectif-ancrage-ensemble-prenons-un-coin-de-rue">le petit immeuble d’Ancrage à Nancy</a>, bien implanté dans le quartier des Trois Maisons, sera dédié aux luttes sociales, à la création, à l’édition et à l’image, avec une bibliothèque et un étage dédié à de l’hébergement solidaire.</p>
<p>Il peut paraître curieux d’utiliser le ressort de la propriété pour favoriser les communs. Cette question a notamment été explorée par le juriste Lionel Maurel, en lien avec les travaux d’Elinor Ostrom et les démarches de Réserves de vie sauvage de l’<a class="spip_out" href="https://aspas-reserves-vie-sauvage.org/les-reserves-de-vie-sauvage/" target="_blank" rel="external noopener noreferrer"><span class="caps">ASPAS</span></a>. Il s’interrogeait alors : <i>«<small class="fine d-inline"> </small><a href="https://scinfolex.com/2019/08/19/la-propriete-privee-au-secours-des-forets-ou-les-paradoxes-des-nouveaux-communs-%20sylvestres/" data-wplink-url-error="true">Faut-il se résigner à faire des îlots de communs dans un océan de propriété ou agir pour que le commun s’impose à tous les propriétaires<small class="fine d-inline"> </small>?<small class="fine d-inline"> </small></a>»</i> Le principal atout d’Antidote pour gérer au mieux ce paradoxe est de porter un projet politique clairement affirmé qui vide la notion même de propriété de tout ce qu’elle véhicule de capital, de retour sur investissement, de spéculation et de rente héritée. L’objectif n’est pas de recourir à la propriété privée, mais bien de neutraliser celle-ci pour créer <i>«<small class="fine d-inline"> </small>des lieux que personne ne possède et qui sont utiles à beaucoup<small class="fine d-inline"> </small>»</i>.</p>
<p>Voilà qui peut contribuer à mailler le pays d’espaces autogérés, libérés du marché et de la précarité. La foncière Antidote n’en est qu’à ses débuts et rien ne permet aujourd’hui de garantir son succès. Mais elle s’attaque depuis les interstices à un angle mort du contre-système, celui de la stratégie et de l’autonomie financières, en creusant une voie nouvelle dans le droit qui permet d’espérer. Et cela mérite d’être soutenu et salué.</p>
<hr class="spip">
<p> </p>
<p>• <i>Ces réflexions sont en grande partie issues des échanges qui ont eu lieu au lancement de la foncière Antidote aux Laboratoires d’Aubervilliers, le 12 novembre, en présence de nombreux collectifs et invité·es, animés par Jade Lindgaard avec les interventions de Sarah Vanuxem et Isabelle Stengers.</i></p>
<p>Habiter sans posséder<i> est le titre de l’ouvrage édité par la maison d’édition Les Presses du Faubourg, qui fait partie du collectif Ancrage à Nancy. Il réunit les actes de rencontres tenues en 2018 à Dijon avec des contributions de Florence Gauthier, Jérôme Baschet, Longo Maï, le Mietshäuser Syndikat allemand, Aurélien Berlan ou encore la revue </i>Panthère Première<i>. Commande possible par courriel à : lespressesdufaubourg@riseup.net </i></p>
<p><em>Si cela vous est financièrement possible, vous pouvez participer à l’un des projets accompagnés par la Foncière Antidote ou contribuer à son fonds de solidarité général ici :</em> <a href="https://www.helloasso.com/associations/la-fonciere-antidote">https://www.helloasso.com/associations/la-fonciere-antidote</a><em> (et hacker au passage la réduction d’impôts de 66 % imaginée par Christine Lagarde).</em></p>
<p>Illustration : © 2021 lafonciereantidote.org</p>
<p>• <a class="spip_out" href="https://lafonciereantidote.org/" target="_blank" rel="external noopener noreferrer">Toutes les informations sur Antidote</a></p>

+ 196
- 0
cache/2022/a26f276782ba59d80e70fb4371713309/index.html View File

@@ -0,0 +1,196 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>The Optional Chaining Operator, “Modern” Browsers, and My Mom (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://blog.jim-nielsen.com/2022/a-web-for-all/">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>The Optional Chaining Operator, “Modern” Browsers, and My Mom</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://blog.jim-nielsen.com/2022/a-web-for-all/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p>Eric Bailey recently wrote on CSS-Tricks about <a href="https://css-tricks.com/test-your-product-on-a-crappy-laptop/">testing your website on a crappy laptop</a> and it reminded me of this anecdote from my own life.</p>
<p>About a month ago, I was talking to my Mom on the phone. At the end of the call, she asked if I could help her with a computer problem on my next visit. “Of course,” I replied. Most of my parents computer issues are easy fixes: ensure all the cables are plugged in, restart the computer, you know the drill.</p>
<p>When I arrived at my parents’ house, I asked my Mom what was wrong.</p>
<p>“I can’t open this website I always use to make a reservation to volunteer. It doesn’t work on our computer and it doesn’t work on my iPad. But it does work on Mike’s (my brother) laptop, so I’ve just been using his. Can you fix it?”</p>
<p>Hmm. Something that works on one computer, but not on two others. That doesn’t sound like an unplugged cable. What could it be?</p>
<p>First I looked to confirm the problem. I pulled up the website on my parents’ computer as well as my Mom’s iPad and sure enough, the website didn’t load. Then I opened it on my brother’s laptop, and it did load. My Mom’s verbal JIRA ticket was right.</p>
<p>This problem started to sound all too familiar: a website that doesn’t work across multiple devices.</p>
<p>My first thought was, “well it can’t be a browser issue. It’s not like my Mom is using Internet Explorer! She has relatively modern tech: an iPad (Safari) and a Chromebox (Google Chrome).”</p>
<p>But the more I thought about it—a website that works on some devices but not on others—the more I realized this had to be a browser issue.</p>
<p>So I looked at the version of Chrome on my parent’s computer. Version 76! I knew we were at ninety-something in 2022, so I figured that was the culprit. “I’ll just update Chrome,” I thought.</p>
<p>Turns out, you can’t. From what I could gather, the version of Chrome was tied to ChromeOS which couldn’t be updated because of the hardware. No new ChromeOS meant no new Chrome which meant stuck at version 76.</p>
<p>But what about the iPad? I discovered that my Mom’s iPad was a 1st generation iPad Air. Apple stopped supporting that device in iOS 12, which means it was stuck with whatever version of Safari last shipped with iOS 12.</p>
<p>So I had two older browsers that couldn’t be updated. It was device obsolescence because you couldn’t install the latest browser.</p>
<p>“But what was the culprit in the website,” you ask? After opening the developer tools in Chrome and looking at the console, I discovered the website authors were shipping JavaScript that used the <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining">optional chaining operator</a> (<code>?.</code>), an unsupported syntax in older browsers that caused the entire website to fail.</p>
<p><img src="https://cdn.jim-nielsen.com/blog/2022/mom-chaining-operator.jpg" alt="Photo of the Chrome developer tools showing JavaScript code using the optional chaining operator.">

</p>
<p>In my brain, I always thought of Safari and Chrome as “modern” browsers. But even Chrome, an “evergreen” browser, failed because it wasn‘t on an “evergreen” operating system (or hardware).</p>
<p>I went back to my Mom and told her I’d found the issue. In essence, “your computer is too old and I can’t update it.” This only reconfirmed my parents’ belief that device makers deliberately make things go out of date so that you have to go buy new hardware every couple of years.</p>
<p>I wanted to try and explain to my Mom that, while true for many native applications, browsers shouldn’t go out of date so easily because of hardware. “This isn’t your problem Mom. You should’t have to go buy new hardware. This is a fixable problem by the people who make that website. They should be making their website’s code more accessible to legacy devices. Just because you don’t have a browser that can run ECMAScript 2020, you should still be able to access and use this website.” But I didn’t feel like explaining the idea of progressive enhancement to my Mom—or even what a compiler like Babel is useful for.</p>
<p>The real-life impact of our technical decisions really hit home to me once again: my Mom had trouble volunteering and participating in her local community because somebody shipped the optional chaining operator in their production JavaScript. </p>
<p>Reminds me of this line, which I love, from <a href="https://www.w3.org/TR/design-principles/">the W3C’s design principles</a>:</p>
<blockquote>
<p>The internet is for end users: any change made to the web platform has the potential to affect vast numbers of people, and may have a profound impact on any person’s life.</p>
</blockquote>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 28
- 0
cache/2022/a26f276782ba59d80e70fb4371713309/index.md View File

@@ -0,0 +1,28 @@
title: The Optional Chaining Operator, “Modern” Browsers, and My Mom
url: https://blog.jim-nielsen.com/2022/a-web-for-all/
hash_url: a26f276782ba59d80e70fb4371713309

<p>Eric Bailey recently wrote on CSS-Tricks about <a href="https://css-tricks.com/test-your-product-on-a-crappy-laptop/">testing your website on a crappy laptop</a> and it reminded me of this anecdote from my own life.</p>
<p>About a month ago, I was talking to my Mom on the phone. At the end of the call, she asked if I could help her with a computer problem on my next visit. “Of course,” I replied. Most of my parents computer issues are easy fixes: ensure all the cables are plugged in, restart the computer, you know the drill.</p>
<p>When I arrived at my parents’ house, I asked my Mom what was wrong.</p>
<p>“I can’t open this website I always use to make a reservation to volunteer. It doesn’t work on our computer and it doesn’t work on my iPad. But it does work on Mike’s (my brother) laptop, so I’ve just been using his. Can you fix it?”</p>
<p>Hmm. Something that works on one computer, but not on two others. That doesn’t sound like an unplugged cable. What could it be?</p>
<p>First I looked to confirm the problem. I pulled up the website on my parents’ computer as well as my Mom’s iPad and sure enough, the website didn’t load. Then I opened it on my brother’s laptop, and it did load. My Mom’s verbal JIRA ticket was right.</p>
<p>This problem started to sound all too familiar: a website that doesn’t work across multiple devices.</p>
<p>My first thought was, “well it can’t be a browser issue. It’s not like my Mom is using Internet Explorer! She has relatively modern tech: an iPad (Safari) and a Chromebox (Google Chrome).”</p>
<p>But the more I thought about it—a website that works on some devices but not on others—the more I realized this had to be a browser issue.</p>
<p>So I looked at the version of Chrome on my parent’s computer. Version 76! I knew we were at ninety-something in 2022, so I figured that was the culprit. “I’ll just update Chrome,” I thought.</p>
<p>Turns out, you can’t. From what I could gather, the version of Chrome was tied to ChromeOS which couldn’t be updated because of the hardware. No new ChromeOS meant no new Chrome which meant stuck at version 76.</p>
<p>But what about the iPad? I discovered that my Mom’s iPad was a 1st generation iPad Air. Apple stopped supporting that device in iOS 12, which means it was stuck with whatever version of Safari last shipped with iOS 12.</p>
<p>So I had two older browsers that couldn’t be updated. It was device obsolescence because you couldn’t install the latest browser.</p>
<p>“But what was the culprit in the website,” you ask? After opening the developer tools in Chrome and looking at the console, I discovered the website authors were shipping JavaScript that used the <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining">optional chaining operator</a> (<code>?.</code>), an unsupported syntax in older browsers that caused the entire website to fail.</p>
<p><img src="https://cdn.jim-nielsen.com/blog/2022/mom-chaining-operator.jpg" alt="Photo of the Chrome developer tools showing JavaScript code using the optional chaining operator.">

</p><p>In my brain, I always thought of Safari and Chrome as “modern” browsers. But even Chrome, an “evergreen” browser, failed because it wasn‘t on an “evergreen” operating system (or hardware).</p>
<p>I went back to my Mom and told her I’d found the issue. In essence, “your computer is too old and I can’t update it.” This only reconfirmed my parents’ belief that device makers deliberately make things go out of date so that you have to go buy new hardware every couple of years.</p>
<p>I wanted to try and explain to my Mom that, while true for many native applications, browsers shouldn’t go out of date so easily because of hardware. “This isn’t your problem Mom. You should’t have to go buy new hardware. This is a fixable problem by the people who make that website. They should be making their website’s code more accessible to legacy devices. Just because you don’t have a browser that can run ECMAScript 2020, you should still be able to access and use this website.” But I didn’t feel like explaining the idea of progressive enhancement to my Mom—or even what a compiler like Babel is useful for.</p>
<p>The real-life impact of our technical decisions really hit home to me once again: my Mom had trouble volunteering and participating in her local community because somebody shipped the optional chaining operator in their production JavaScript. </p>
<p>Reminds me of this line, which I love, from <a href="https://www.w3.org/TR/design-principles/">the W3C’s design principles</a>:</p>
<blockquote>
<p>The internet is for end users: any change made to the web platform has the potential to affect vast numbers of people, and may have a profound impact on any person’s life.</p>
</blockquote>

+ 244
- 0
cache/2022/eafb714078643eddfcc2d7de9982bd3b/index.html View File

@@ -0,0 +1,244 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Understanding UUIDs, ULIDs and String Representations (archive) — David Larlet</title>
<meta name="description" content="Publication mise en cache pour en conserver une trace.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://sudhir.io/uuids-ulids">

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<article>
<header>
<h1>Understanding UUIDs, ULIDs and String Representations</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="https://sudhir.io/uuids-ulids" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<p class="lead">What UUIDs and ULIDs are under the hood, and how to encode and use them.</p>
<p>Database and data storage systems need identifiers for each piece of information they store. Using numbers as identifiers is a one way to do it, but that has limitations — and we have alternatives in the form of UUIDs and ULIDs.</p>
<h2>Numbers</h2>
<p>The easiest and most intuitive way to generate IDs is to use numbers. They're small, efficient and simple. In SQL databases like PostgreSQL, MySQL, SQL Server or Oracle, the numeric primary key is normally called <code>SERIAL</code> with an explicit or implicit size. The common sizes are 4 bytes, which corresponds to a 32 digit (or <em>32 bit</em>) binary number, capable of representing numbers from 0 to 2,147,483,647; and a bigger version (<code>BIGSERIAL</code>) at 8 bytes, or 64 bits, which can go from 0 to 9,223,372,036,854,775,807.</p>
<p>That's the first problem right there. When using a numeric primary key, you need to be sure the size of key you're using is big enough. 2,147,483,647 looks like a big number, but in the context of modern web applications it's not that large. An application that serves a few hundred thousand people can quickly blow through that number, especially if it's being used to identify individual items, changes, or events.</p>
<p>Using 8 bytes gives you more headroom to grow — 9,223,372,036,854,775,807 of anything is pretty hard to hit. Most frameworks will / should set this as the primary key default when creating databases for you, but it always helps to double-check. I've experienced and heard of many times where tables have run out of 32-bit space and engineers had to run upgrades and migrations at the worst possible time. </p>
<p>How does a numeric ID work, though? And what are its limitations? The first thing to remember is that if a number is being used as an identifier it needs to be unique — which means some entity needs to keep track of which numbers have already been used and make sure they're never used again. In most database systems, this is done via the use of a <em>sequence</em> object. When adding a new piece of data, this sequence object is asked for a new number — it checks its storage to get last number it gave out, increments it, durably updates the new number in storage, and then gives it out. The most common type of sequence is a <em>monotonically increasing</em> sequence, which means that each time you ask the <em>sequence</em> object for a number it'll give you the previous number it gave out plus one.</p>
<p>You might have noticed that when you asked for a number the sequence object stored the number first and then gave it out to you. Why would it do that? Why not give you the number and then store it? This is an important distinction — if the sequence didn't store the number first before giving it out to you, and it crashed before storing that number, it would give the same number out again the next time someone asked for one. This is a catastrophic failure — multiple consumers will have received the same number out of a sequence whose main job is to make sure no two consumers get the same number. This means that the sequence implementation must err on the side of caution — it must update the number first <em>before</em> it gives it out to you.</p>
<p>But there's a downside to this approach — what if <em>you</em> crash <em>before</em> using the number that you got out of the sequence generator? When you restart and try your work again, you'll get a new number, incremented even if no other consumer is using this sequence. That number that you first pulled out and didn't use is lost forever. This is a common error with sequences — you can never assume that the highest number you see as an ID is implicitly the count of the number of items or rows. This <em>may</em> the case if nothing has ever gone wrong during the lifetime of the system, but that's pretty unlikely.</p>
<p>Numeric sequences also have the disadvantage of being a separate entity from the datasets that they're being used in, making them <em>implicitly coupled</em>. You can copy a table over to a new database and forget to copy over the sequence generator object and its state, setting yourself up for an unexpected blowup. You might make the mistake of resetting the sequence generator to a number that's already been used (usually back to zero). Or your database backup/restore script might make the same mistakes. When you have coupling like this, there's a lot that can go wrong.</p>
<p>Then there's <em>scalability</em> — this is something you don't often need, but if and when you do need it it's always too late for simple fixes. Having a single place where identifiers are generated means that you can add data only as fast as your sequence generator can reliably generate IDs. If you suddenly have a million people who want to buy things on your store, you can't ask them to wait because your sequence generator can't number their order line items fast enough. And because a sequence must store each number to disk before giving it out, your entire system is bottle-necked by the speed of rewriting a number on one SSD or hard disk — no matter how many servers you have.</p>
<p>On a scaling-related note, numeric IDs limit your sharding options — if you're trying to split your workloads across multiple databases, you'll need to be careful to make sure that sequences can't overlap. You might make one shard's sequence run in even numbers, and another one run in odd numbers, for example; or more complex schemes when you have more shards.</p>
<p>So numeric IDs are simple and work great in many situations, but remember that they're separate objects from the data you're storing but still always need to managed in tandem with your data; choosing a small size is likely to cause a crash when you least expect it; they look like counters but they're not; and they'll limit how fast you can add new data by their nature.</p>
<h2>UUIDs</h2>
<p>With the rise of distributed systems it became more and more important to have identifiers that could be created on multiple computers simultaneously, without forcing them to communicate with each other. This is necessary either because the systems are geographically independent, like databases that take orders in different countries and then merge them for global sales reporting, or because the rate of identifier creation required was greater than what could be supported by one sequence generator.</p>
<p>The most common type of UUID or GUID in use today is a 128-bit (16-byte) number, generated at random. This means that under the <a href="https://tools.ietf.org/html/rfc4122">RFC 4122</a> specification, where 122 bits are generated randomly, it can represent a number up to to <code>5.3×10^36</code>. That's a lot of zeroes, and makes for a very large number — so large we consider it practically unreachable under any single application, or even the combination of all human applications. The new internet protocol address format, IPv6, is also essentially a 128 bit number given as a unique address to every possible internet connected object.</p>
<p>Most database systems support UUIDs, and do so efficiently. The human readable standard representation of a UUID looks like <code>xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx</code> with <code>x</code> being the hexadecimal representation of a random byte and <code>M</code> and <code>N</code> representing version information. This looks like a long string, but most databases will internally support an efficient binary UUID type that maps onto a 16-byte array. It's also possible to use all the bits for randomness, if you don't care about conformance to the specification.</p>
<p>This entire idea of using random IDs assumes that your computers can generate random numbers that are random and unpredictable — this isn't an easy problem, and there's a lot of research being done in the field. The <a href="https://www.cloudflare.com/en-in/learning/ssl/lava-lamp-encryption/">Cloudflare lava lamp project</a> is an interesting look into how to tap into a real-world source of randomness. Studies into the nature of random number generators in modern computers and operating systems is its own topic, and for now we'll just assume that all our systems are using state-of-the-art cryptographic random number generators.</p>
<p>Using UUIDs then allows us to rise above some of the problems we saw with numeric IDs. Since there's no single authority or sequence generator in charge of a particular identifier, it becomes possible to generate identifiers for anything at a practically unlimited rate. There's also no problems with generating identifiers at multiple places simultaneously — there's no need for them to coordinate, so if you need more identifier generation capacity you can just add more hardware to handle the problem. Because these identifiers are independent, it's also possible to merge them into a single dataset later (asynchronously) without reasonably expecting any problems.</p>
<p>That last sentence might have raised your eyebrows, though. What does “without reasonably expecting any problems” mean?. The issue with random IDs that it is remotely possible that the same ID may be generated more than once, even by the same system. If you're using a single system it may be possible to check the data and reject a duplicate ID, but if you're using multiple systems this won't be possible. The chances of this happening are extremely remote, though — similar to your chances of winning the lottery multiple times and immediately being struck by lightning each time — but they're not strictly zero. There's a <a href="https://en.wikipedia.org/wiki/Universally_unique_identifier#Collisions">mathematical treatment on the Wikipedia page</a>, but the basic premise is that the more IDs you generate they more your probability of a duplicate ID, or a <em>collision</em>, increases. This probability is actually more than just the naive assumption that it's <code>1 / TOTAL_POSSIBLE_IDS</code> because of an interesting concept called the <em>birthday paradox</em>. The probability that a your birthday is the same as mine is <code>1/365</code>, but in a room of 30 people the probability that <em>any</em> two people have the same birthday <em>isn't</em> <code>1/365</code>, because the universe now has many more chances to get a match. The same things applies with UUIDs, because each UUID you generate has the chance to collide with every UUID ever generated in the history of your dataset. In practice, though, this isn't a problem. Most applications will ignore the these odds, and some may have a contingency in place to handle a collision, but will almost never actually experience one. </p>
<p>The bigger problem with UUIDs is they have no concept of <em>locality</em>. With numeric IDs, we could examine the ID and reasonably assume that higher numbers were generated later than lower ones, and the highest ID is the last one generated. This also helps optimize indexes in some databases — additions are made only on one side of the index tree, so it's possible to optimize for that use case. In a completely random UUID system, though, IDs are being inserted with no concept of location at all. Any ID has an equal chance of being inserted anywhere in the spectrum of possibilities. This means that indexes become wasteful — they're usually made to order items neatly, but if you put UUIDs in them you're wasting any ordering capability, and mostly causing extra bloat and book-keeping that won't be used. Alternate <a href="https://www.postgresql.org/docs/current/hash-intro.html">indexes based on hashing</a> are excellent for UUIDs, though, but they're not as popular or optimized because they only offer fast lookup and no sorting.</p>
<h2>ULIDs To The Rescue</h2>
<p>So given the two major problems of UUIDs, which are 1) collision possibilities across the history of all generated IDs, and 2) complete loss of locality, can we do better? Yes, we can!</p>
<p>Instead of using all the 128 bits for randomness, what if we use the first 48 bits for a timestamp? 48 bits is enough to represent a millisecond-precision Unix timestamp (the number of milliseconds since an <em>epoch</em> at the beginning of Jan 1, 1970) till the year 10889 AD. Given the way we're going, humanity in its present form isn't likely to exist them, so when this becomes an issue it'll be somebody else's problem. More likely <em>something</em> else's problem.</p>
<p>The remaining 80 bits are available for randomness, which means they still represent a pretty large number: ~1,208,925,820,000,000,000,000,000. You get to generate this many IDs inside a <em>single millisecond</em>.</p>
<p>At one stroke, this solves both the problems we have. An ID generated at a particular millisecond in the past can never collide with one generated in the future, so we only need to worry about collisions inside the same millisecond — which is to say the amount of worrying we need to do is a lot closer to zero. It also introduces <em>locality</em> into the ID, which means that IDs generated later will have higher byte values than those generated earlier. Assuming they're encoded with the proper alphabet, they'll also sort correctly. We'll come back to encoding later.</p>
<p>This time-based ULID system continues to give us all the advantages of a UUID system—it can be distributed, because there's no single sequence authority, the IDs can be merged into a single dataset later, and there's an even lower chance of global collision, because collisions are only possible inside the same millisecond. And because they sort based on time, we can use them in append-only settings, where we can keep adding them to our dataset without having to re-balance indexes. The ULID format also allows continuous archiving of our data — because we know we're not going to receive any more data with identifiers lower than those representing a particular time, we can just archive all data in permanent storage each hour or day or week if we wanted to. It would still be possible to quickly find the data we need based on the timestamp prefix.</p>
<h2>Words Matter</h2>
<p>Speaking of prefixes, the way we represent our IDs makes a big difference. SQL database systems will usually have an optimized 16-byte representation internally, but most No-SQL systems work on strings. Strings also come into play when sending the IDs over JSON, XML or any other format over the wire. Let's look at a few common encoding options:</p>
<p>To start with, we're working with a 128 bit binary number that looks like this:</p>
<pre><code>11111111011110001010111001101011011100010111011001000110111010011000000111000110010010111110111001100000101110101000000110111011
</code></pre>
<p>Encodings work with bytes instead of bits, so let's see what our ID looks like when split into 8-bit chunks, or bytes:</p>
<pre><code>[11111111, 01111000, 10101110, 01101011, 01110001, 01110110, 01000110, 11101001, 10000001, 11000110, 01001011, 11101110, 01100000, 10111010, 10000001, 10111011]
</code></pre>
<p>In decimal, or <code>base10</code>, this is really just a sequence of numbers between 0 and 255:</p>
<pre><code>[255, 120, 174, 107, 113, 118, 70, 233, 129, 198, 75, 238, 96, 186, 129, 187]
</code></pre>
<p>The UUID spec uses hexadecimal characters to represent IDs. Each hexadecimal character represents 4 bits, so it can represent the binary number 0000 (decimal 0) to 1111 (decimal 16). Since we're dealing with a byte, we'll need two hexadecimal characters for each byte in the sequence:</p>
<pre><code>["ff", "78", "ae", "6b", "71", "76", "46", "e9", "81", "c6", "4b", "ee", "60", "ba", "81", "bb"]
</code></pre>
<p>If we smash them all together we get <code>ff78ae6b717646e981c64bee60ba81bb</code>, and if we insert hyphens according to the <a href="https://tools.ietf.org/html/rfc4122">RFC 4122 spec</a> we get:</p>
<pre><code>ff78ae6b-7176-46e9-81c6-4bee60ba81bb
</code></pre>
<p>But of course this isn't the only way to do it. We had to use two characters for each byte because the hexadecimal alphabet has only 16 characters, which are <code>0123456789abcdef</code>. But what if we use more characters? What if we exactly double our available alphabet, to <code>0123456789ABCDEFGHJKMNPQRSTVWXYZ</code>? Then we wind up with a more compact representation:</p>
<pre><code>7ZF2Q6PWBP8VMR3HJBXSGBN0DV
</code></pre>
<p>This alphabet, <code>0123456789ABCDEFGHJKMNPQRSTVWXYZ</code>, is <a href="https://www.crockford.com/base32.html">Douglas Crockford's Base32</a>, chosen for human readability and being able to call it out over a phone if required. You'll see that ambiguous letters like I and L have been omitted because they can be confused with 1 — along with other considerations.</p>
<p>This Base32 is what's used in the ULID format. In a ULID the first 48 bits are the timestamp, so here's what a ULID that I generated looks like:</p>
<pre><code>01EWW6K6EXQDX5JV0E9CAHPXG5
</code></pre>
<p>In binary, that's</p>
<pre><code>1011101110011100001101001100110011101110110111011011110100101100101101100000011100100101100010101000110110111011000000101
</code></pre>
<p>or <code>1948255503464693300277367552865957381</code> if we're just using decimal.</p>
<p>Using the process above, we can always just turn this back into the UUID format:</p>
<pre><code>01773869-99dd-bb7a-596c-0e4b151b7605
</code></pre>
<p>If you remember, the first 48 bits it a timestamp, and 48 bits is 6 bytes, and since each byte is written with two hexadecimal characters, the first 12 characters are the timestamp component: <code>0177386999dd</code>. Convert that to to decimal and you get 1611559180765 — which is the number of UTC milliseconds between Jan 1, 1970 and the time I generated this ID.</p>
<p><strong><em>All this is to say that UUIDs and ULIDs are really just big numbers. We can write them however we want, making their string representations as small or as big as we want.</em></strong></p>
<p>We could use <a href="https://en.wikipedia.org/wiki/Base64">base64</a>, for instance, and write the ID as <code>AXc4aZndu3pZbAAADksVGw</code>. Or we could <a href="https://gist.github.com/snikch/6969879"></a><a href="https://gist.github.com/snikch/6969879">go all in</a> on UTF-8 and use a 1,112,064 character alphabet, including emoji and symbols.</p>
<p>My personal favourite alphabet is the <strong><em>lexicographic base62</em></strong>.: </p>
<pre><code>0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
</code></pre>
<p>This contains every number and every uppercase and lowercase English alphabet, and no symbols. This means it's safe for URLs, and results in fairly short identifiers — but most importantly, it sorts correctly under ASCII and UTF-8 sorting. This means that you can encode ULIDs with this alphabet, and as long as you make sure all your IDs are the same length (you can left pad to a standard length with a zero), they'll string sort correctly.</p>
<p>This is fantastic for NoSQL databases — your primary identifier can now act as a timestamp and natural sort, allowing you to do time range queries on a UUID primary key.</p>
<p>This is one of my pet subjects, so here are a few tools I've built to help work with UUIDs and ULIDs:</p>
<h3>References</h3>
<h3>Other Formats</h3>
<p>I wrote about UUIDs and ULIDs because they're compatible with each other and widely supported, but there some other options if you just need strings: </p>
<h3>PS</h3>
<p>New UUID formats are also being proposed: <a href="https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-01">https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-01</a></p>
<p>There's a Hacker News discussion here: <a href="https://news.ycombinator.com/item?id=29794186">https://news.ycombinator.com/item?id=29794186</a></p>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 19
- 0
cache/2022/eafb714078643eddfcc2d7de9982bd3b/index.md
File diff suppressed because it is too large
View File


+ 180
- 0
cache/2022/index.html View File

@@ -0,0 +1,180 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang="fr">
<!-- Has to be within the first 1024 bytes, hence before the `title` element
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset="utf-8">
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- Required to make a valid HTML5 document. -->
<title>Articles archivés — David Larlet</title>
<meta name="description" content="Lien vers les publications externes mises en cache.">
<!-- That good ol' feed, subscribe :). -->
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
<link rel="manifest" href="/static/david/icons2/site.webmanifest">
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
<meta name="msapplication-TileColor" content="#f7f7f7">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
<script>
function toggleTheme(themeName) {
document.documentElement.classList.toggle(
'forced-dark',
themeName === 'dark'
)
document.documentElement.classList.toggle(
'forced-light',
themeName === 'light'
)
}
const selectedTheme = localStorage.getItem('theme')
if (selectedTheme !== 'undefined') {
toggleTheme(selectedTheme)
}
</script>

<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">


<header>
<h1>Articles archivés</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a>
</p>
</nav>
<hr>
<main>
<ul>
<li><a href="/david/cache/2022/539f9f951e0d3ba9024f3b837941372f/" title="Accès à l’article dans le cache local : Ce qui compte">Ce qui compte</a> (<a href="https://olivier.thereaux.net/2021/Ce-qui-compte/" title="Accès à l’article original distant : Ce qui compte">original</a>)</li>
<li><a href="/david/cache/2022/987e2e450e3e88d0d6d18ec6e6a44b95/" title="Accès à l’article dans le cache local : Habiter sans posséder, tel est l’antidote">Habiter sans posséder, tel est l’antidote</a> (<a href="https://revoirleslucioles.org/habiter-sans-posseder-tel-est-lantidote/" title="Accès à l’article original distant : Habiter sans posséder, tel est l’antidote">original</a>)</li>
<li><a href="/david/cache/2022/a26f276782ba59d80e70fb4371713309/" title="Accès à l’article dans le cache local : The Optional Chaining Operator, “Modern” Browsers, and My Mom">The Optional Chaining Operator, “Modern” Browsers, and My Mom</a> (<a href="https://blog.jim-nielsen.com/2022/a-web-for-all/" title="Accès à l’article original distant : The Optional Chaining Operator, “Modern” Browsers, and My Mom">original</a>)</li>
<li><a href="/david/cache/2022/393a69cbefc7e1642bae86080e6fc8c4/" title="Accès à l’article dans le cache local : Is the madness ever going to end?">Is the madness ever going to end?</a> (<a href="https://unixsheikh.com/articles/is-the-madness-ever-going-to-end.html" title="Accès à l’article original distant : Is the madness ever going to end?">original</a>)</li>
<li><a href="/david/cache/2022/3a929cba1a057771e1778ee9dc3e300a/" title="Accès à l’article dans le cache local : Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding">Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding</a> (<a href="https://phys.org/news/2021-04-wolf-dont-alpha-males-females.html" title="Accès à l’article original distant : Wolf packs don’t actually have alpha males and alpha females, the idea is based on a misunderstanding">original</a>)</li>
<li><a href="/david/cache/2022/eafb714078643eddfcc2d7de9982bd3b/" title="Accès à l’article dans le cache local : Understanding UUIDs, ULIDs and String Representations">Understanding UUIDs, ULIDs and String Representations</a> (<a href="https://sudhir.io/uuids-ulids" title="Accès à l’article original distant : Understanding UUIDs, ULIDs and String Representations">original</a>)</li>
</ul>
</main>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
</svg> Accueil</a> •
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
</svg> Suivre</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
</svg> Pro</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
</svg> Email</a> •
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
</svg> Légal</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend><svg class="icon icon-brightness-contrast">
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
</svg> Thème</legend>
<label>
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
</label>
<label>
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé
</label>
<label>
<input type="radio" value="light" name="chosen-color-scheme"> Clair
</label>
</fieldset>
</form>
</template>
</footer>
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
<script>
function loadThemeForm(templateName) {
const themeSelectorTemplate = document.querySelector(templateName)
const form = themeSelectorTemplate.content.firstElementChild
themeSelectorTemplate.replaceWith(form)

form.addEventListener('change', (e) => {
const chosenColorScheme = e.target.value
localStorage.setItem('theme', chosenColorScheme)
toggleTheme(chosenColorScheme)
})

const selectedTheme = localStorage.getItem('theme')
if (selectedTheme && selectedTheme !== 'undefined') {
form.querySelector(`[value="${selectedTheme}"]`).checked = true
}
}

const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
window.addEventListener('load', () => {
let hasDarkRules = false
for (const styleSheet of Array.from(document.styleSheets)) {
let mediaRules = []
for (const cssRule of styleSheet.cssRules) {
if (cssRule.type !== CSSRule.MEDIA_RULE) {
continue
}
// WARNING: Safari does not have/supports `conditionText`.
if (cssRule.conditionText) {
if (cssRule.conditionText !== prefersColorSchemeDark) {
continue
}
} else {
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
continue
}
}
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
}

// WARNING: do not try to insert a Rule to a styleSheet you are
// currently iterating on, otherwise the browser will be stuck
// in a infinite loop…
for (const mediaRule of mediaRules) {
styleSheet.insertRule(mediaRule.cssText)
hasDarkRules = true
}
}
if (hasDarkRules) {
loadThemeForm('#theme-selector')
}
})
</script>
</body>
</html>

+ 1
- 1
templates/cache_archives.html View File

@@ -16,7 +16,7 @@
<main>
<ul>
{% for cache in cache_list %}
<li><a href="/david/cache/2021/{{ cache.hash_url }}/" title="Accès à l’article dans le cache local : {{ cache.title }}">{{ cache.title }}</a> (<a href="{{ cache.url }}" title="Accès à l’article original distant : {{ cache.title }}">original</a>)</li>
<li><a href="/david/cache/2022/{{ cache.hash_url }}/" title="Accès à l’article dans le cache local : {{ cache.title }}">{{ cache.title }}</a> (<a href="{{ cache.url }}" title="Accès à l’article original distant : {{ cache.title }}">original</a>)</li>
{% endfor %}
</ul>
</main>

Loading…
Cancel
Save