Browse Source

More links

master
David Larlet 3 years ago
parent
commit
e3ebffab27

+ 173
- 0
cache/2020/030b4208de95e734300a715f386ba1bf/index.html View File

@@ -0,0 +1,173 @@
<!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>
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>#LeNouvelEssai - Dernières infos ! (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="#f0f0ea">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f0f0ea">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2020-06-19.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 type="text/javascript">
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="http://lenouvelessai.nursit.com/spip.php?article31">

<body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">

<article>
<header>
<h1>#LeNouvelEssai - Dernières infos !</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil">🏠</a> •
<a href="http://lenouvelessai.nursit.com/spip.php?article31" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<main>
<p>Deux nouvelles à vous apporter : la première, c’est que nous avons enfin trouvé un lieu pour nous poser (définitivement) et concrétiser notre projeeeeeeeeeeeeeeet d’éducation populaire politique anarchiste. Ce sera le Kreiz Breizh ! On s’y installe ce lundi et on espère mettre tout cela en route d’ici mars 2021. Nous souhaitons y proposer des débats, des projections, des expositions, des ateliers, … toujours dans un esprit anarchiste (auto-organisation, autogestion, autonomie, solidarité, féminisme, écologie, anti-autoritarisme). À terme, on espère que ça mènera à la création d’une assemblée locale.</p>

<p>La seconde info, c’est que nous allons (définitivement aussi) quitter les réseaux sociaux (Facebook, Twitter … et, par cohérence, Mastodon). A cela, plusieurs raisons que l’on pourrait détailler mais comme nous préférons nous organiser plutôt que de nous lamenter, nous allons donc faire court. La raison principale, c’est surtout que les RS sont devenus beaucoup trop chronophages à notre goût et tendent de plus en plus à entretenir des rapports de domination et de compétition entre égos surdimensionnés Ça n’est pas vraiment notre came ! Nous avons psychologiquement et physiquement besoin de sérénité et de concret pour avancer. Ça ne veut pas dire que les « rézosocios » sont le mal incarné … nous nous interrogeons simplement sur leur efficacité en terme de militantisme. Personnellement, nous optons pour un choix radical, nous les quittons pour reprendre entièrement place dans la vie réelle.</p>

<p>Est-ce que nous arrêtons la lutte pour autant ? Bien sûr que non, c’est tout le contraire ! Nous arrêtons seulement de jouer à un jeu qui nous semble ressembler de plus en plus à un grand tourbillon dans lequel nous n’avons plus aucune prise. Nous allons donc reprendre possession de nos vies en essayant de construire quelque chose de différent, une autre manière de faire collectif. Nous essaierons, modestement, de suivre la voie ouverte par les grands pédagogues anarchistes.</p>

<p>Vous êtes d’ores et déjà les bienvenu·e·s !</p>

<p>Pour le moment, nous gardons le blog <a href="http://lenouvelessai.nursit.com/" class="spip_url auto" rel="nofollow">http://lenouvelessai.nursit.com/</a> comme moyen d’informer sur l’évolution de tout cela et, surtout, comme possibilité de garder un contact avec celles et ceux qui le souhaiteraient. Pour nous retrouver, il suffit de nous envoyer un mail <a href="http://lenouvelessai.nursit.com/spip.php?rubrique5" class="spip_url auto" rel="nofollow">http://lenouvelessai.nursit.com/spip.php?rubrique5</a> (avec votre pseudo pour que l’on fasse le lien). Nous essaierons de mettre en place une petite newsletter. Dites-le nous si ça vous intéresse.</p>

<p>En début d’année prochaine, nous envisageons de rejoindre un groupe anarchiste (le besoin de réseau social est toujours présent … mais nous le souhaitons dorénavant le plus concret possible). Et nous espérons apporter notre contribution à la constitution d’un réseau militant et de solidarité en Bretagne. Ce réseau existe déjà plus ou moins formellement mais nous pensons qu’il serait intéressant d’aller un peu plus loin. Nous verrons. En tous cas, pour qu’il n’y ait pas de malaise, nous allons rassurer tout de suite les quelques détracteurs qui aiment bien nous faire passer pour ce que nous ne sommes pas : il ne s’agit pas de faire tout cela pour notre petite gloriole. Nous nous refusons de parvenir ! Nous avons un peu d’expérience à partager et la très grande motivation de faire progresser les idées anarchistes en Bretagne. Nous ne souhaitons rien de plus.</p>

<p>Au plaisir de vous lire par mail (soyez indulgents, nous ne répondons pas toujours très rapidement) ou de vous voir à la maison. Kenavo !</p>

<p>Isabelle et Willy</p>

<p>PS : de nombreuses rencontres et des débats autour du livre sont prévus au sein du réseau des cafés-librairies de Bretagne (d’autres rendez-vous encore à venir). C’est avec plaisir que nous vous y retrouverons !</p>
</main>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil">🏠</a> •
<a href="/david/log/" title="Accès au flux RSS">🤖</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
<abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend>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 type="text/javascript">
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>

+ 13
- 0
cache/2020/030b4208de95e734300a715f386ba1bf/index.md View File

@@ -0,0 +1,13 @@
title: #LeNouvelEssai - Dernières infos !
url: http://lenouvelessai.nursit.com/spip.php?article31
hash_url: 030b4208de95e734300a715f386ba1bf

<p>Deux nouvelles à vous apporter : la première, c’est que nous avons enfin trouvé un lieu pour nous poser (définitivement) et concrétiser notre projeeeeeeeeeeeeeeet d’éducation populaire politique anarchiste. Ce sera le Kreiz Breizh ! On s’y installe ce lundi et on espère mettre tout cela en route d’ici mars 2021. Nous souhaitons y proposer des débats, des projections, des expositions, des ateliers, … toujours dans un esprit anarchiste (auto-organisation, autogestion, autonomie, solidarité, féminisme, écologie, anti-autoritarisme). À terme, on espère que ça mènera à la création d’une assemblée locale.</p>
<p>La seconde info, c’est que nous allons (définitivement aussi) quitter les réseaux sociaux (Facebook, Twitter … et, par cohérence, Mastodon). A cela, plusieurs raisons que l’on pourrait détailler mais comme nous préférons nous organiser plutôt que de nous lamenter, nous allons donc faire court. La raison principale, c’est surtout que les RS sont devenus beaucoup trop chronophages à notre goût et tendent de plus en plus à entretenir des rapports de domination et de compétition entre égos surdimensionnés Ça n’est pas vraiment notre came ! Nous avons psychologiquement et physiquement besoin de sérénité et de concret pour avancer. Ça ne veut pas dire que les « rézosocios » sont le mal incarné … nous nous interrogeons simplement sur leur efficacité en terme de militantisme. Personnellement, nous optons pour un choix radical, nous les quittons pour reprendre entièrement place dans la vie réelle.</p>
<p>Est-ce que nous arrêtons la lutte pour autant ? Bien sûr que non, c’est tout le contraire ! Nous arrêtons seulement de jouer à un jeu qui nous semble ressembler de plus en plus à un grand tourbillon dans lequel nous n’avons plus aucune prise. Nous allons donc reprendre possession de nos vies en essayant de construire quelque chose de différent, une autre manière de faire collectif. Nous essaierons, modestement, de suivre la voie ouverte par les grands pédagogues anarchistes.</p>
<p>Vous êtes d’ores et déjà les bienvenu·e·s !</p>
<p>Pour le moment, nous gardons le blog <a href="http://lenouvelessai.nursit.com/" class="spip_url auto" rel="nofollow">http://lenouvelessai.nursit.com/</a> comme moyen d’informer sur l’évolution de tout cela et, surtout, comme possibilité de garder un contact avec celles et ceux qui le souhaiteraient. Pour nous retrouver, il suffit de nous envoyer un mail <a href="http://lenouvelessai.nursit.com/spip.php?rubrique5" class="spip_url auto" rel="nofollow">http://lenouvelessai.nursit.com/spip.php?rubrique5</a> (avec votre pseudo pour que l’on fasse le lien). Nous essaierons de mettre en place une petite newsletter. Dites-le nous si ça vous intéresse.</p>
<p>En début d’année prochaine, nous envisageons de rejoindre un groupe anarchiste (le besoin de réseau social est toujours présent … mais nous le souhaitons dorénavant le plus concret possible). Et nous espérons apporter notre contribution à la constitution d’un réseau militant et de solidarité en Bretagne. Ce réseau existe déjà plus ou moins formellement mais nous pensons qu’il serait intéressant d’aller un peu plus loin. Nous verrons. En tous cas, pour qu’il n’y ait pas de malaise, nous allons rassurer tout de suite les quelques détracteurs qui aiment bien nous faire passer pour ce que nous ne sommes pas : il ne s’agit pas de faire tout cela pour notre petite gloriole. Nous nous refusons de parvenir ! Nous avons un peu d’expérience à partager et la très grande motivation de faire progresser les idées anarchistes en Bretagne. Nous ne souhaitons rien de plus.</p>
<p>Au plaisir de vous lire par mail (soyez indulgents, nous ne répondons pas toujours très rapidement) ou de vous voir à la maison. Kenavo !</p>
<p>Isabelle et Willy</p>
<p>PS : de nombreuses rencontres et des débats autour du livre sont prévus au sein du réseau des cafés-librairies de Bretagne (d’autres rendez-vous encore à venir). C’est avec plaisir que nous vous y retrouverons !</p>

+ 171
- 0
cache/2020/37c08a59224bed34c1f2d243f029c54c/index.html View File

@@ -0,0 +1,171 @@
<!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>
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 most important feature of Sublime Text (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="#f0f0ea">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f0f0ea">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2020-06-19.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 type="text/javascript">
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://tonsky.me/blog/sublime/">

<body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">

<article>
<header>
<h1>The most important feature of Sublime Text</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil">🏠</a> •
<a href="https://tonsky.me/blog/sublime/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<main>
<p>…is that it doesn’t change.</p>

<p>In the modern world, everything changes at a crazy pace. We get new OSes and new phones every year, Google opens and closes its products monthly, many physical devices get announced, produced, and disappear in an interval shorter than the Sublime Text release cycle. I have two problems with that.</p>

<p>First, new features just keep being added, because how else would you justify releases? VS Code releases every month with new stuff! They are well past the point of shipping the essentials (and have been for a couple of years now), but releases are still been shipped. Because they have a team, that team has a huge budget to spare, and there’s no power stopping them from shipping anything, no matter important or not. There’s no filter.</p>

<p>You might think that VS Code can be turned into Sublime by turning everything off. Well, yes, but you’ll have to do it every month because they add new stuff every month, and new stuff wants your attention, so they enable it for you and promote it for you.</p>

<p>Sublime fights this by being developed by just two people who don’t have much free time on their hands. As a result, every detail in ST is essential, and everything that is not is just not there. Yes, some new frameworks that came out yesterday might not be supported, and some obscure integrations might not exist, but the upside is that it keeps the ST experience clean and focused. That makes me much happier than VS Code that tries to please everyone but gets everyone tired instead.</p>

<p>The second problem is that when things change, some aspects get worse, and some disappear completely. I am horrified each year with Apple events — which essential features that I rely on heavily will they break/remove this year? Even if something is not removed, compatibility is always getting worse. This extension relies on this version of VS Code, and the other one on that. We are sorry, the developer of this extension did not update it for the current version. Even though things get better in general, some things always get broken/changed/removed along the way. Given the speed of change and the number of features every developer depends on (different for everyone), someone gets screwed with every new release. It’s only a matter of time when it will be your turn.</p>

<p>Sublime, on the other hand, changes very slowly. The current version, ST 3, is the same version that I used a year, two years, five years ago. And ST 2, released twelve years ago, is very very close to what I am using today. ST 4 is currently in alpha, and I honestly can’t tell the difference. The upside? I know what I am getting. If it fits me now, it will fit me ten years from now. I can <em>rely</em> on it. I get used to it once and I can spend the rest of my life focusing on my work instead of learning a new tool every month. I don’t risk losing it one day because it changed too much. ST will always stay ST, and if it’s perfect, I am happy it doesn’t change.</p>

<p>God bless Sublime.</p>
</main>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil">🏠</a> •
<a href="/david/log/" title="Accès au flux RSS">🤖</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
<abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend>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 type="text/javascript">
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/2020/37c08a59224bed34c1f2d243f029c54c/index.md View File

@@ -0,0 +1,19 @@
title: The most important feature of Sublime Text
url: https://tonsky.me/blog/sublime/
hash_url: 37c08a59224bed34c1f2d243f029c54c

<p>…is that it doesn’t change.</p>

<p>In the modern world, everything changes at a crazy pace. We get new OSes and new phones every year, Google opens and closes its products monthly, many physical devices get announced, produced, and disappear in an interval shorter than the Sublime Text release cycle. I have two problems with that.</p>

<p>First, new features just keep being added, because how else would you justify releases? VS Code releases every month with new stuff! They are well past the point of shipping the essentials (and have been for a couple of years now), but releases are still been shipped. Because they have a team, that team has a huge budget to spare, and there’s no power stopping them from shipping anything, no matter important or not. There’s no filter.</p>

<p>You might think that VS Code can be turned into Sublime by turning everything off. Well, yes, but you’ll have to do it every month because they add new stuff every month, and new stuff wants your attention, so they enable it for you and promote it for you.</p>

<p>Sublime fights this by being developed by just two people who don’t have much free time on their hands. As a result, every detail in ST is essential, and everything that is not is just not there. Yes, some new frameworks that came out yesterday might not be supported, and some obscure integrations might not exist, but the upside is that it keeps the ST experience clean and focused. That makes me much happier than VS Code that tries to please everyone but gets everyone tired instead.</p>

<p>The second problem is that when things change, some aspects get worse, and some disappear completely. I am horrified each year with Apple events — which essential features that I rely on heavily will they break/remove this year? Even if something is not removed, compatibility is always getting worse. This extension relies on this version of VS Code, and the other one on that. We are sorry, the developer of this extension did not update it for the current version. Even though things get better in general, some things always get broken/changed/removed along the way. Given the speed of change and the number of features every developer depends on (different for everyone), someone gets screwed with every new release. It’s only a matter of time when it will be your turn.</p>

<p>Sublime, on the other hand, changes very slowly. The current version, ST 3, is the same version that I used a year, two years, five years ago. And ST 2, released twelve years ago, is very very close to what I am using today. ST 4 is currently in alpha, and I honestly can’t tell the difference. The upside? I know what I am getting. If it fits me now, it will fit me ten years from now. I can <em>rely</em> on it. I get used to it once and I can spend the rest of my life focusing on my work instead of learning a new tool every month. I don’t risk losing it one day because it changed too much. ST will always stay ST, and if it’s perfect, I am happy it doesn’t change.</p>

<p>God bless Sublime.</p>

+ 170
- 0
cache/2020/cfc14f158c3fd69336c128dd70b29072/index.html
File diff suppressed because it is too large
View File


+ 15
- 0
cache/2020/cfc14f158c3fd69336c128dd70b29072/index.md
File diff suppressed because it is too large
View File


+ 215
- 0
cache/2020/d79377f9a5b66a158e5c7df3f3fe2b14/index.html View File

@@ -0,0 +1,215 @@
<!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>
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>Je suis un vieux con (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="#f0f0ea">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f0f0ea">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2020-06-19.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 type="text/javascript">
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://nota-bene.org/Je-suis-un-vieux-con">

<body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">

<article>
<header>
<h1>Je suis un vieux con</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil">🏠</a> •
<a href="https://nota-bene.org/Je-suis-un-vieux-con" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<main>
<p>Souvent, entre vieux de la vieille d’Openweb, on se dit que c’était mieux avant. Et puis, à l’ombre de nos marronniers, sur notre petit banc, il y a toujours quelqu’un pour dire que non, c’est normal, c’est la nostalgie, ça, les gars et les filles. Le monde change et c’est la vie.</p>

<p>Alors voilà, je suis sans doute un vieux con, mais moi j’aime bien arriver sur une page web, un truc qui est construit avec du <abbr title="Hypertext Markup Language">HTML</abbr>, et lire la page, dans laquelle se trouve un contenu qui est construit avec du <abbr title="Hypertext Markup Language">HTML</abbr>, brique fondamentale du Web.</p>

<p>Mais, a priori, Google s’en fout comme de son premier million de dollars, des vieux cons comme moi qui espèrent naïvement lire une page web en cliquant sur une URL. On peut crever la gueule ouverte, on n’a qu’à continuer à faire notre petit web perso tout pourri avec nos petits CMS tout pourris, hein. On dérange personne, et en particulier ceux qui se goinfrent de fric avec les données personnelles de leurs visiteurs.</p>

<h2>Une page vide</h2>

<p>Voilà ce qui m’agace, cet après-midi. Je vais visiter un article du blog Chromium<span class="spip_note_ref"> [<a href="#nb1" class="spip_note" rel="appendix" title="Chromium, c’est un navigateur, qui sert de base à pas mal de monde dans notre (...)" id="nh1">1</a>]</span>, et là j’ai une page vide.</p>

<figure>
<span class="spip_document_622 spip_documents">
<img src="local/cache-vignettes/L1200xH654/chromium_blog_with_css-c3bd4.png?1602005568" alt=""/></span>
<figcaption>La page du blog Chromium, toute vide malgré ma bonne volonté de vouloir la lire.</figcaption>
</figure>

<p>Ah flûte, me dis-je, voilà que ma vile paranoïa qui m’a conditionné à toujours installer sur mon Firefox <a href="https://addons.mozilla.org/fr/firefox/addon/ublock-origin/" class="spip_out" rel="external">uBlock Origin</a> et <a href="https://addons.mozilla.org/fr/firefox/addon/privacy-badger17/" class="spip_out" rel="external">Privacy Badger</a> me joue des tours. Ciel, me dis-je encore, ce blog doit être codé avec les pieds et attendre que tel ou tel script soit chargé, au lieu de faire du beau développement asynchrone comme savent le faire les bons développeurs web que j’ai la chance de compter parmi mes copains.</p>

<p>Je lance donc une session privée de Firefox, j’y colle l’URL, je désactive uBlock Origin et Privacy Badger. Tu vois comme j’ai envie de lire ton article, hein.</p>

<p>Et là toujours rien.</p>

<p>Ah oui, j’ai aussi les « <a href="https://support.mozilla.org/fr/kb/protection-renforcee-contre-pistage-firefox-ordinateur" class="spip_out" rel="external">Protections renforcées contre le pistage</a> ». <strong>C’est une fonction native de Firefox, il va falloir commencer à y penser quand tu fais tes tests.</strong> Alors je les désactive aussi, après avoir regardé quels domaines tiers ont été sollicités.</p>

<figure>
<span class="spip_document_621 spip_documents">
<img src="local/cache-vignettes/L561xH409/chromium_blog_third_parties_blocked-1c6bb.png?1602005568" alt=""/></span>
<figcaption>Liste des domaines tiers bloqués automatiquement par Firefox, et merci à lui.</figcaption>
</figure>

<p>Bon, je désactive aussi la protection renforcée. Comme vous le voyez ci-dessus, le domaine que j’essaie d’afficher est <i>blog.chromium.org</i> et il n’est pas bloqué par Firefox (sans quoi je ne verrais pas la page du tout).</p>

<p>Alors oui, ah là, le contenu s’affiche. Chic alors.</p>

<p>Je décide de revenir à ma configuration de base, et d’afficher le contenu sans <abbr title="Cascading Stylesheets">CSS</abbr> : parfois il y a juste un script tout pourri pour frimer avec un petit indicateur de chargement, le temps qu’on agrège des trucs et des machins, mais quand on désactive les <abbr title="Cascading Stylesheets">CSS</abbr> on voit que le contenu est déjà là.</p>

<p>Ici non, rien. Buvons le calice du Web moderne jusqu’à la lie.</p>

<figure>
<span class="spip_document_623 spip_documents">
<img src="local/cache-vignettes/L208xH1200/chromium_blog_with_no_css-5d6ca.png?1602005568" alt=""/></span>
<figcaption>Aperçu en petit de la page sans aucun style activé. Même en écarquillant les yeux, aucun contenu, juste des items de navigation.</figcaption>
</figure>

<p>Bref, en résumé :</p>

<ul class="spip"><li> ce site ne peut pas s’afficher si on bloque les services tiers ;</li><li> ce site <strong>ne comporte même pas de contenu</strong> si on bloque les services tiers ;</li><li> ce site affiche quand même le logo Google parce que bon.</li></ul>

<h2>Gymnastique du Web moderne</h2>

<p>Donc si, de nos jours, on veut lire un article sur ce blog, il faut soit accepter de se balader à poil et d’offrir ses données privées à plein de gens (voir ci-dessus), soit passer par une gymnastique amusante, par exemple :</p>

<ol class="spip"><li> ouvrir l’article,</li><li> constater que oulàlà c’est tout vide,</li><li> ajouter l’article à <a href="https://www.wallabag.it/fr" class="spip_out" rel="external">wallabag</a> (ou autre lecteur hors ligne peut-être, je n’ai que celui-là à vous conseiller qui me comble d’aise),</li><li> lire l’article dans l’application wallabag.</li></ol>

<p>Dans wallabag j’en profite pour constater que la sémantique <abbr title="Hypertext Markup Language">HTML</abbr> de l’article est bien pauvre, mais bon, on s’en fout hein. La sémantique <abbr title="Hypertext Markup Language">HTML</abbr>, c’est comme l’accessibilité : on se demande bien qui en a besoin.</p>

<p>J’ai pris l’article du blog Chromium parce que c’est une fois de trop, mais si vous saviez le nombre de trucs aussi mal fichus que je vois tous les jours. Disons-le bien fort au cas où ce ne serait pas clair : <strong>une page de blog n’est pas une application Web qui demande une interaction forte.</strong></p>

<p>Alors ouais, je vais continuer à aller lire les petits sites pourris perso des copains, parce que eux, au moins, respectent leurs lecteurs et leurs lectrices.</p>
</main>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil">🏠</a> •
<a href="/david/log/" title="Accès au flux RSS">🤖</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
<abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend>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 type="text/javascript">
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>

+ 39
- 0
cache/2020/d79377f9a5b66a158e5c7df3f3fe2b14/index.md View File

@@ -0,0 +1,39 @@
title: Je suis un vieux con
url: https://nota-bene.org/Je-suis-un-vieux-con
hash_url: d79377f9a5b66a158e5c7df3f3fe2b14

<p>Souvent, entre vieux de la vieille d’Openweb, on se dit que c’était mieux avant. Et puis, à l’ombre de nos marronniers, sur notre petit banc, il y a toujours quelqu’un pour dire que non, c’est normal, c’est la nostalgie, ça, les gars et les filles. Le monde change et c’est la vie.</p>
<p>Alors voilà, je suis sans doute un vieux con, mais moi j’aime bien arriver sur une page web, un truc qui est construit avec du <abbr title="Hypertext Markup Language">HTML</abbr>, et lire la page, dans laquelle se trouve un contenu qui est construit avec du <abbr title="Hypertext Markup Language">HTML</abbr>, brique fondamentale du Web.</p>
<p>Mais, a priori, Google s’en fout comme de son premier million de dollars, des vieux cons comme moi qui espèrent naïvement lire une page web en cliquant sur une URL. On peut crever la gueule ouverte, on n’a qu’à continuer à faire notre petit web perso tout pourri avec nos petits CMS tout pourris, hein. On dérange personne, et en particulier ceux qui se goinfrent de fric avec les données personnelles de leurs visiteurs.</p>
<h2>Une page vide</h2>
<p>Voilà ce qui m’agace, cet après-midi. Je vais visiter un article du blog Chromium<span class="spip_note_ref"> [<a href="#nb1" class="spip_note" rel="appendix" title="Chromium, c’est un navigateur, qui sert de base à pas mal de monde dans notre (...)" id="nh1">1</a>]</span>, et là j’ai une page vide.</p>
<figure>
<span class="spip_document_622 spip_documents">
<img src="local/cache-vignettes/L1200xH654/chromium_blog_with_css-c3bd4.png?1602005568" alt=""/></span>
<figcaption>La page du blog Chromium, toute vide malgré ma bonne volonté de vouloir la lire.</figcaption>
</figure>
<p>Ah flûte, me dis-je, voilà que ma vile paranoïa qui m’a conditionné à toujours installer sur mon Firefox <a href="https://addons.mozilla.org/fr/firefox/addon/ublock-origin/" class="spip_out" rel="external">uBlock Origin</a> et <a href="https://addons.mozilla.org/fr/firefox/addon/privacy-badger17/" class="spip_out" rel="external">Privacy Badger</a> me joue des tours. Ciel, me dis-je encore, ce blog doit être codé avec les pieds et attendre que tel ou tel script soit chargé, au lieu de faire du beau développement asynchrone comme savent le faire les bons développeurs web que j’ai la chance de compter parmi mes copains.</p>
<p>Je lance donc une session privée de Firefox, j’y colle l’URL, je désactive uBlock Origin et Privacy Badger. Tu vois comme j’ai envie de lire ton article, hein.</p>
<p>Et là toujours rien.</p>
<p>Ah oui, j’ai aussi les « <a href="https://support.mozilla.org/fr/kb/protection-renforcee-contre-pistage-firefox-ordinateur" class="spip_out" rel="external">Protections renforcées contre le pistage</a> ». <strong>C’est une fonction native de Firefox, il va falloir commencer à y penser quand tu fais tes tests.</strong> Alors je les désactive aussi, après avoir regardé quels domaines tiers ont été sollicités.</p>
<figure>
<span class="spip_document_621 spip_documents">
<img src="local/cache-vignettes/L561xH409/chromium_blog_third_parties_blocked-1c6bb.png?1602005568" alt=""/></span>
<figcaption>Liste des domaines tiers bloqués automatiquement par Firefox, et merci à lui.</figcaption>
</figure>
<p>Bon, je désactive aussi la protection renforcée. Comme vous le voyez ci-dessus, le domaine que j’essaie d’afficher est <i>blog.chromium.org</i> et il n’est pas bloqué par Firefox (sans quoi je ne verrais pas la page du tout).</p>
<p>Alors oui, ah là, le contenu s’affiche. Chic alors.</p>
<p>Je décide de revenir à ma configuration de base, et d’afficher le contenu sans <abbr title="Cascading Stylesheets">CSS</abbr> : parfois il y a juste un script tout pourri pour frimer avec un petit indicateur de chargement, le temps qu’on agrège des trucs et des machins, mais quand on désactive les <abbr title="Cascading Stylesheets">CSS</abbr> on voit que le contenu est déjà là.</p>
<p>Ici non, rien. Buvons le calice du Web moderne jusqu’à la lie.</p>
<figure>
<span class="spip_document_623 spip_documents">
<img src="local/cache-vignettes/L208xH1200/chromium_blog_with_no_css-5d6ca.png?1602005568" alt=""/></span>
<figcaption>Aperçu en petit de la page sans aucun style activé. Même en écarquillant les yeux, aucun contenu, juste des items de navigation.</figcaption>
</figure>
<p>Bref, en résumé :</p>
<ul class="spip"><li> ce site ne peut pas s’afficher si on bloque les services tiers ;</li><li> ce site <strong>ne comporte même pas de contenu</strong> si on bloque les services tiers ;</li><li> ce site affiche quand même le logo Google parce que bon.</li></ul><h2>Gymnastique du Web moderne</h2>
<p>Donc si, de nos jours, on veut lire un article sur ce blog, il faut soit accepter de se balader à poil et d’offrir ses données privées à plein de gens (voir ci-dessus), soit passer par une gymnastique amusante, par exemple :</p>
<ol class="spip"><li> ouvrir l’article,</li><li> constater que oulàlà c’est tout vide,</li><li> ajouter l’article à <a href="https://www.wallabag.it/fr" class="spip_out" rel="external">wallabag</a> (ou autre lecteur hors ligne peut-être, je n’ai que celui-là à vous conseiller qui me comble d’aise),</li><li> lire l’article dans l’application wallabag.</li></ol>
<p>Dans wallabag j’en profite pour constater que la sémantique <abbr title="Hypertext Markup Language">HTML</abbr> de l’article est bien pauvre, mais bon, on s’en fout hein. La sémantique <abbr title="Hypertext Markup Language">HTML</abbr>, c’est comme l’accessibilité : on se demande bien qui en a besoin.</p>
<p>J’ai pris l’article du blog Chromium parce que c’est une fois de trop, mais si vous saviez le nombre de trucs aussi mal fichus que je vois tous les jours. Disons-le bien fort au cas où ce ne serait pas clair : <strong>une page de blog n’est pas une application Web qui demande une interaction forte.</strong></p>
<p>Alors ouais, je vais continuer à aller lire les petits sites pourris perso des copains, parce que eux, au moins, respectent leurs lecteurs et leurs lectrices.</p>

+ 200
- 0
cache/2020/e30e5e6e532e5eeb1314ef1ad9abd6e1/index.html View File

@@ -0,0 +1,200 @@
<!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>
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 Gamification of Games (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="#f0f0ea">
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
<meta name="theme-color" content="#f0f0ea">
<!-- Documented, feel free to shoot an email. -->
<link rel="stylesheet" href="/static/david/css/style_2020-06-19.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 type="text/javascript">
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://reallifemag.com/the-gamification-of-games/">

<body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">

<article>
<header>
<h1>The Gamification of Games</h1>
</header>
<nav>
<p class="center">
<a href="/david/" title="Aller à l’accueil">🏠</a> •
<a href="https://reallifemag.com/the-gamification-of-games/" title="Lien vers le contenu original">Source originale</a>
</p>
</nav>
<hr>
<main>
<p>Despite its name, gamification has never really been about making experiences more game-like. If there were a common characteristic that defined all games, it would certainly not be the use of badges, achievements, and points as incentives for engagement. Games, if anything, share an embodiment of the spirit of play — a temporary suspension of the rules of life to make space for intensities of experience: levity, rivalry, concentration, joy. If historian Johan Huizinga — whose 1938 book <em>Homo Ludens</em> is one of the pivotal works of game studies — had the opportunity to define gamification according to his theory of play, he might have reserved the term for a “temporary abolition of the ordinary world” where “inside the circle of the game the laws and customs of ordinary life no longer count.”</p>

<p>Now gamification evangelists like Jane McGonigal advocate for games to be understood as fundamentally productive, offering a set of tactics to make life under neoliberalism appear more fun and addictive — a “magic circle” we should never step out from, even if we had the choice. The concept first gained traction at the end of the 2000s within game development and marketing communities, which saw an opportunity to use aspects of games to monetize the web. In 2008, before the word had a standardized spelling, a blog <a href="http://www.bretterrill.com/2008/06/my-coverage-of-lobby-of-social-gaming.html">explained</a> “gameification” as “taking game mechanics and applying [them] to other web properties to increase engagement.” In the Wharton School of Business’s popular online course titled <em>Gamification</em>, the instructor professes that &#8220;there are some game elements that are more common than others and that are more influential than others in shaping typical examples of gamification.” These elements are “points, badges, and leaderboards.” These offer scores that constitute &#8220;a universal currency, if you will, that allows us to create a system where doing one sort of action, going off on a quest with your friends, is somehow equivalent or comparable to doing some other sort of action, sitting and watching a video on the site.&#8221;</p>

<div class="pull-quote left-pull instapaper_ignore">
<p>&#8220;Achievements&#8221; notifications were not programmed by game developers to meet players’ demands, but were a requirement codified by platforms</p>
</div>

<p>Many games have scores, of course, but typically they serve the limited purpose of determining a winner of a particular contest. Gamification takes scores as an exportable measure of qualities that are no longer internal to the game that has generated them. “Score” becomes just another word for data — a “universal equivalent” whereby life activity and behavior can be reckoned with in quantified terms. From this perspective, games are primarily a means of data production, not a more intense or rewarding form of experience. Accordingly, apps that convert activity into points are hardly concerned with improving the quality of engagement, nor are they limited to the task of encouraging it. Consider the data collection practices of prominent gamification apps such as Nike’s fitness tracker <a href="https://www.lexology.com/library/detail.aspx?g=cad25150-7d5c-47a6-976d-986234750f51"><em>Nike+</em></a>, the productivity role playing game <a href="https://web.archive.org/web/20200509105604if_/https:/habitica.com/static/privacy"><em>Habitica</em></a>, or the language training app <a href="https://www.theverge.com/2019/3/5/18252397/facebook-android-apps-sending-data-user-privacy-developer-tools-violation"><em>Duolingo</em></a>. Gamification gurus praise these apps for how they import game mechanics, while watchdogs condemn them for privacy violations.</p>

<p>The use of gamification for data collection is not a secret. The professor of the <em>Gamification</em> course openly celebrates it: &#8220;One of the aspects of gamification is that you&#8217;re going to get lots of information potentially about your players. Information about who they are, their profile and so forth, but also tremendously granular data about what they&#8217;re doing. Every action they take in the game, potentially can be collected, and that&#8217;s a great thing.&#8221; Points, badges, and leaderboards have always been about the data and not the play.</p>

<p>This kind of instrumentalization is alien enough to the nature of games that it is possible to speak of the gamification of games themselves: when scoring systems are added to make behavior within a particular game quantifiable, commensurate, and exportable. Digital games now commonly have features that function more like app notifications: achievements, badges, or trophies that register outside the game world. It is no accident at almost every “hardcore” game for modern consoles — <em>Call of Duty, Grand Theft Auto, Super Smash Bros, </em>etc. — pings the user every time a new achievement is unlocked and displays this information in the user’s profile. For example, during the Covid-19 quarantine I’ve amassed 51 out of 93 possible “achievements” in Ubisoft’s <em>Assassin&#8217;s Creed: Odyssey. </em>These achievements, which include badges for “outwitting the sphinx” and for executing “100 headshots,” are viewable in the streaming platform Google Stadia’s “Trophy Room.” These achievements have no function within the game; the player can’t use them for anything except to look back on the time poured into playing with a sense that it amounted to “something.”</p>

<p>Achievements notifications were not features programmed by game developers to meet players’ demands, but as a requirement codified by platforms. Microsoft Xbox’s development kit <a href="https://docs.microsoft.com/en-us/dotnet/api/microsoft.xbox.services.achievements.achievement?view=xboxlive-dotnet-2017.11.20171204.01">defines</a> an “Achievement” as a “<em>system-wide</em> mechanism for directing and rewarding users&#8217; in-game actions consistently across <em>all games</em>.” [Emphasis added.] In other words, they are not conceived as part of an individual game but as part of the larger experience of “gaming” in general. Game developers in turn must design games with this logic of achievement in mind.</p>

<p>Every major game platform defines achievements similarly, whether it is PlayStation, Steam, Xbox, or one of the other new cloud-gaming platforms operated by Google, Amazon, and Nvidia. This ubiquitous implementation of “achievements” — data about players’ behavior and skill that is not contained to the game itself — reflects how games have been gamified: Achievements and rewards reduce the heterogeneous experience of different players playing different games to a common currency, allowing platforms to gather and compare data across all the games their systems can run. This data can then be used for ends that have little to do with the games themselves — exemplifying what Shoshanna Zuboff, in <em>The Rise of Surveillance Capitalism, </em>called a “ behavioral surplus.”</p>

<div class="pull-quote left-pull instapaper_ignore">
<p>In Google&#8217;s ad system, the “time spent exploring rather than completing levels” could indicate interest in real-world vacations</p>
</div>

<p>What could data drawn specifically from game-playing offer? In 2005, Google attempted to patent a system that would use neural networks, Bayesian inference, and support vector machines to uncover exploitable correlations between in-game behavior and untapped advertising opportunities. The patent listed a number of heuristics — avatar choices, gameplay style, time spent gaming — as potentially relevant to advertisers. The system could, for instance, “display ads for pizza-hut” if “the user has been playing for over two hours continuously.” In addition to inferring pizza appetite, the system would assess players’ personality based on gaming behavior. Such metrics as the time spent bartering instead of stealing within a game would serve as a potential indicator of the player’s interest in “the best deals rather than the flashiest items.” The “time spent exploring rather than completing levels” could indicate interest in real-world vacations. The patent is careful not to claim that these correlations actually exist; instead, it merely describes a system that could collect in-game data and then discover predictors of a player’s extramural wants, needs, and desires.</p>

<p><hr />
<p>Classifying gamers based on the data obtained through games is now a multibillion-dollar industry known as game analytics. The company <a href="https://gameanalytics.com/about">GameAnalytics</a> boasts the ability to collect and analyze data on 850 million monthly active players across 70,000 game titles. Such data can be used to segment players based on their services, playing styles, locations, and demographics. But harvesting data from gamers to make broader inferences about people has a long history. So long as there are winners and losers, players can be ranked by their ability to win.</p>
<p>One such ranking algorithm — the ELO rating system — was developed in the 1960s to rank chess players. It computes the relative skill of players by weighting their wins and losses by the skill level of the opponents. Through this system, the individual chess match becomes a subset of a larger game that is not confined to the board but persists in ordinary space and time, comparing players to people they have never played and enforcing a general climate of competition. This same method can be applied beyond chess. Mark Zuckerberg infamously “gamified” his classmates at Harvard by applying this ranking algorithm to photos of fellow female classmates that he illegally obtained.</p>
<p>The first video game to publicly rank game players with a high-score board was<em> Space Invaders </em>in 1978<em>. </em>This mechanic quickly became a popular feature among arcade games. In 1979,<em> Star Fire</em> and <em>Asteroids</em> were the first games to allow players to personalize scores with three letter combinations. As Nick Montfort and Ian Bogost show in <em>Racing the Beam: The Atari Video Computer System, </em>the new mechanic of high scores codified a culture of competition among arcade gamers. The goal of the game was no longer simply to have fun or to win. “High scores” subordinated play to status, yoking “achievement” to zero-sum competition. For a point of comparison, in <a href="https://www.wired.com/2007/06/soviet-games/">this </a><a href="https://www.wired.com/2007/06/soviet-games/"><em>Wired </em></a><a href="https://www.wired.com/2007/06/soviet-games/">article from 2007</a>, the co-founder of the Soviet Arcade Museum, Alexander Stakhanov, describes public rankings in video games as distinctly western — and by extension, capitalist. In Soviet arcade games, public leaderboards were never a feature. Instead, Stakhanov says, &#8220;If you got enough points you won a free game, but there was no &#8216;high score&#8217; culture as in the West.&#8221;</p>
<p>The capitalist gaming model won out, and rankings remain a prominent aspect of game analytics. But the diversity and volume of data collected through digital games has expanded considerably since the days of <em>Space Invaders. </em>Microsoft’s ranking algorithm <a href="https://www.microsoft.com/en-us/research/uploads/prod/2018/03/trueskill2.pdf">TrueSkill 2</a> uses a number of metrics such as “player experience, membership in a squad, the number of kills a player scored, tendency to quit, and skill in other game modes” to develop a relative ranking of every player on its platform. In fact, every gaming platform is now designed to collect numerous data points, as their privacy policies specify. This includes account information, payment information, user content, messages, contacts, device identifiers, network identifiers, location, achievements, scores, rankings, error reporting, and feature usage as well as maintaining the right to share or resell the data to third parties. It also includes common “key performance indicators,” or KPIs, such as virality, retention, active users, and revenue per user, as well as data specific to games such as user inputs and time spent completing tasks — which, according to <a href="https://developer.ibm.com/articles/ba-big-data-gaming/">this analysis from IBM</a>, include “time to complete levels, solo versus interactive behaviors, avatar selection, interaction style indicators, gender of avatar, game strategy behavior variables, game-related tweets, social network activity, language, and more.” <a href="https://www.playstation.com/en-gb/legal/privacy-policy/">PlayStation’s privacy policy</a> states that Sony can collect “what actions you take within a game or app (for example, what obstacle you jump over and what levels you reach).” Similarly Xbox’s third-party sharing notice explains that “information we share may include … data about your game play or app session, including achievements unlocked, time spent in the game or app, presence, game statistics and rankings, and enforcement activity about you in the game or app.” The choose-your-own-adventure narrative structure common to many games is more than a narrative device; it too is a measurement apparatus.</p>
<p>Of course, lots of devices, social media platforms, and apps already collect enormous amounts of data on users, far more than most of those users likely realize. But games can be designed to generate particular kinds of performance data under more carefully controlled conditions. As IBM’s analyst explains, collecting a range of data about players “is no different from the traditional customer view towards applying advanced analytics for player retention, churn, and marketing response efforts,” but stresses “the new variety of data” from games and the “tremendous volume and velocity at which it is generated.”</p>
<p>Because of the variety and magnitude of data collected, games are capable of extracting exploitable information about players’ values and habits. Numerous academic papers purport to have discovered statistically significant relations between users’ behavior in games and outside them. Several academic research papers have <a href="https://www.researchgate.net/publication/261498768_Games_as_personality_profiling_tools">concluded</a> that “a video game can be used to create an adequate personality profile of a player.” <a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0186621">Similar studies</a> of game-play data from multiplayer online battle arenas like Fortnite have found that it “correlates with fluid intelligence as measured under controlled laboratory conditions.” Other research suggests that “commercial video games can be useful as &#8216;proxy&#8217; tests of cognitive performance.”</p>
<p>Captured data can also be fed back into the platform designed to produce it. In-game choices can be tuned to measure latent characteristics about players, such as their compulsiveness, their sociability, and their cognitive ability. <em>Silent Hill: Shattered Memories</em> turned the capacity for psychological profiling into a salient part of the game’s narrative, featuring an <a href="https://www.youtube.com/watch?v=OszjLIxbI9c">in-game psychologist</a> that would use such techniques as the Myers-Briggs test to classify players by personality type. Much like TikTok tracks its users’ behavior to reshape their feed algorithmically, the game assesses players’ choices and behaviors (which restroom do they enter, how long they take to examine photographs, etc.) to alter the game into the player’s own “<a href="http://www.edge-online.com/features/the-making-of-silent-hillshattered-memories">personal nightmare</a><u>.</u>”</p>
<img loading="lazy" class="aligncenter wp-image-3393 size-full" src="https://reallifemag.com/wp-content/uploads/2020/08/WarningPascal.jpg" alt="" width="369" height="207" srcset="https://reallifemag.com/wp-content/uploads/2020/08/WarningPascal.jpg 369w, https://reallifemag.com/wp-content/uploads/2020/08/WarningPascal-300x168.jpg 300w" sizes="(max-width: 369px) 100vw, 369px" />
<p>In general, as Google’s patent suggested, the combination of game choices, achievements, playtime, and purchase history is especially valuable to advertisers. Since video games are often expertly designed to keep users invested in them for many hours at a time, the data they yield may be especially valuable to marketers seeking to capture consumer attention. Games can serve as real estate for ads, a repertoire of techniques for behavioral surveillance and control, and an experimental ground in which these can be tested.</p>
<div class="pull-quote left-pull instapaper_ignore">
<p>Open worlds are well adapted to surveillance and control; endless possibilities for exploration are matched by equally endless opportunities for data collection</p>
</div>
<p>In 2019, industry researchers estimated the global <a href="https://www.researchandmarkets.com/reports/5020111/in-game-advertising-market-forecasts-from-2020?utm_source=dynamic&amp;utm_medium=BW&amp;utm_code=6wr797&amp;utm_campaign=1408792+-+In-">in-game advertising market</a> to be more than $128 billion. Not only can games feature virtual billboards, but in-game items or other products within the game world can be swapped out for brands more tailored to the user’s tastes. Users can be forced to sit through personalized ads in cut scenes as they move through the game. Another strategy is to use in-game data to estimate a player’s “lifetime value” or LTV — the monetary value a user is expected to generate for the game developer — and adjust the game accordingly, focusing on players with the highest expected value, nudging them to continue buying game-world tokens, character modes, virtual materials, and other items. Such <a href="https://www.investopedia.com/articles/investing/022216/how-microtransactions-are-evolving-economics-gaming.asp">microtransactions</a> not only milk profit from players through their purchases; they can also indicate what sorts of mundane virtual tasks gamers are willing to put up with and what tasks gamers are willing to pay to avoid. <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2483426">Intellectual-property-law scholars have argued</a> that microtransactions can be used to estimate players’ “intertemporal discount factor,” a financial metric originally designed to assess an investor’s preference for immediate returns or delayed rewards. If a player proves willing to overspend for instant gratification, this data about the player can be sold to advertisers, and may prove especially useful when supplemented with the other data collected by platforms. Microtransactions, then, are more than transactions; they are data on top of money.</p>
<p>Additionally, there are games specifically designed to test the aptitude of job applicants. Even before employers put faith in “game-based assessment,” the U.S. military funded the development of the online networked game <em>America&#8217;s Army</em> as a recruitment tool. In an interview between U.S. Army Colonel Wardynski and the self-proclaimed “world&#8217;s foremost expert and public speaker on the subject of gamification” Gabe Zichermann, Wardynski admits that the objective of <em>America’s Army </em>was not direct recruitment: “Our objective was decision space.” Wardynski explained that “if [the army] is not even in your decision space, forget recruits. How do I get into a kid’s decision space?”</p>
<p>Beyond their potential for manipulating individual players, gamified games are proving to be important playgrounds for artificial intelligence. Game spaces attract AI developers because the open and dynamic worlds of games have already been rendered discrete and quantified. In gamified games, the points, badges, and leaderboards originally designed to monitor, control, and incentivize human players can be repurposed by engineers to monitor, control, and incentivize machine-learning algorithms. Open worlds are well adapted to surveillance and control, where the seemingly endless possibilities for exploration are matched by the equally endless opportunities for data collection.</p>
<p>Companies with ties to Google — such as DeepMind and OpenAI — use games to try to develop strategic AI capable of playing complex open-world games. Game-playing AIs have already beaten the world’s top human players of traditional games like Go and video games like <a href="https://venturebeat.com/2017/08/11/openais-bot-beats-top-dota-2-player-so-badly-that-he-quits/"><em>Dota 2</em></a>. Microsoft’s <a href="https://www.microsoft.com/en-us/research/project/project-malmo/">project Malmo</a> is an effort to use open-world network games like <em>Minecraft</em> to help build <a href="https://blogs.microsoft.com/ai/project-malmo-using-minecraft-build-intelligent-technology/#sm.0001674urakf1fo4w8n13a4hwd1ae">intelligent agents</a> capable of navigation, bartering, and collaboration. The purpose of this research is not purely theoretical. The defense contractor <a href="https://www.aptima.com/">Aptima</a> won a $1 million bid with DARPA to develop artificial agents that learn to work alongside human players in <em>Minecraft</em>, by modeling unique play styles of human players. With AI trained on <em>Minecraft</em> players, DARPA <a href="https://breakingdefense.com/2020/08/darpa-trains-ai-to-understand-humans-in-minecraft/">hopes to one day develop AI capable of monitoring soldiers on the battlefield</a>. Amazon, Google, and Microsoft have now sponsored a series of competitions that prompt teams of developers to engineer algorithms capable of accomplishing various game tasks such as <a href="https://www.aicrowd.com/challenges/neurips-2020-minerl-competition">navigating randomly selected game worlds</a>, <a href="https://www.aicrowd.com/challenges/neurips-2020-minerl-competition">mining a virtual diamond from the depths of a Minecraft’s digital caverns</a>, or <a href="https://www.aicrowd.com/challenges/neurips-2020-flatland-challenge">scheduling a rail network of in-game trains</a>. Much like the gamers in the worlds being experimented upon, winning teams in these competitions are awarded points, badges and rankings on the competition platform <a href="https://www.aicrowd.com/">AIcrowd</a>. The platform gamifies AI development itself by turning engineering into a series of competitive rounds, measured by ranking and activity scores and rewarded with icons of gold, silver, and bronze badges.</p>
<p>These efforts make it evident that the principles of gamification assume that humans are no different from algorithms in how they respond to rewards. Like machine learning algorithms, humans in algorithmically controlled spaces can be nudged and reprogrammed to have better habits. Far from making life more game-like, gamification makes human behavior more manageable and predictable, provoked by feedback loops and captured as data.</p>
<p>Given the potential of games to harvest such valuable information, it is not surprising that Google and Amazon have been developing cloud-gaming platforms. What is surprising is that the discourse on “cloud gaming” often focuses on the user experience without stopping to ask who the end users are. Google’s Stadia has received a lot of backlash from gamers, but mainly because it’s expensive, not because it’s exploitative. Yet cloud gaming, like the other services it offers, is about developing compelling alibis for Google’s main business of collecting data and selling ads. Google and Amazon’s move into cloud gaming integrates the data-generating power of games with their existing data-collecting empires. Games are important assets because of the unique affordances they offer to attention retailers: surveillance, control, and undivided attention.</p>
<p>An online marketplace, like a game, is a highly controlled yet seemingly “open world” where choices can be monitored closely. Just as in the two-sided platforms for goods and services managed by Google and Amazon, these choice environments can be engineered to nudge behavior in predefined directions or to collect user data. With psychological insight into the values, ideals, and fantasies that users are not so willing to admit in search queries, emails, and purchasing habits, games are valuable supplements to the data Google and Amazon already collect. Just as “hardcore” games have become more standardized with open worlds, achievements, and trophies, we can expect that the promised freedom and seamlessness of cloud gaming will come with increased surveillance and more penetrating monetization. If we accept the cliché “games are a series of interesting choices,” it is about time to start asking for whom.</p></p>
</main>
</article>


<hr>

<footer>
<p>
<a href="/david/" title="Aller à l’accueil">🏠</a> •
<a href="/david/log/" title="Accès au flux RSS">🤖</a> •
<a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
<abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
</p>
<template id="theme-selector">
<form>
<fieldset>
<legend>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 type="text/javascript">
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>

+ 38
- 0
cache/2020/e30e5e6e532e5eeb1314ef1ad9abd6e1/index.md View File

@@ -0,0 +1,38 @@
title: The Gamification of Games
url: https://reallifemag.com/the-gamification-of-games/
hash_url: e30e5e6e532e5eeb1314ef1ad9abd6e1

<p>Despite its name, gamification has never really been about making experiences more game-like. If there were a common characteristic that defined all games, it would certainly not be the use of badges, achievements, and points as incentives for engagement. Games, if anything, share an embodiment of the spirit of play — a temporary suspension of the rules of life to make space for intensities of experience: levity, rivalry, concentration, joy. If historian Johan Huizinga — whose 1938 book <em>Homo Ludens</em> is one of the pivotal works of game studies — had the opportunity to define gamification according to his theory of play, he might have reserved the term for a “temporary abolition of the ordinary world” where “inside the circle of the game the laws and customs of ordinary life no longer count.”</p>
<p>Now gamification evangelists like Jane McGonigal advocate for games to be understood as fundamentally productive, offering a set of tactics to make life under neoliberalism appear more fun and addictive — a “magic circle” we should never step out from, even if we had the choice. The concept first gained traction at the end of the 2000s within game development and marketing communities, which saw an opportunity to use aspects of games to monetize the web. In 2008, before the word had a standardized spelling, a blog <a href="http://www.bretterrill.com/2008/06/my-coverage-of-lobby-of-social-gaming.html">explained</a> “gameification” as “taking game mechanics and applying [them] to other web properties to increase engagement.” In the Wharton School of Business’s popular online course titled <em>Gamification</em>, the instructor professes that &#8220;there are some game elements that are more common than others and that are more influential than others in shaping typical examples of gamification.” These elements are “points, badges, and leaderboards.” These offer scores that constitute &#8220;a universal currency, if you will, that allows us to create a system where doing one sort of action, going off on a quest with your friends, is somehow equivalent or comparable to doing some other sort of action, sitting and watching a video on the site.&#8221;</p>
<div class="pull-quote left-pull instapaper_ignore">
<p>&#8220;Achievements&#8221; notifications were not programmed by game developers to meet players’ demands, but were a requirement codified by platforms</p>
</div>
<p>Many games have scores, of course, but typically they serve the limited purpose of determining a winner of a particular contest. Gamification takes scores as an exportable measure of qualities that are no longer internal to the game that has generated them. “Score” becomes just another word for data — a “universal equivalent” whereby life activity and behavior can be reckoned with in quantified terms. From this perspective, games are primarily a means of data production, not a more intense or rewarding form of experience. Accordingly, apps that convert activity into points are hardly concerned with improving the quality of engagement, nor are they limited to the task of encouraging it. Consider the data collection practices of prominent gamification apps such as Nike’s fitness tracker <a href="https://www.lexology.com/library/detail.aspx?g=cad25150-7d5c-47a6-976d-986234750f51"><em>Nike+</em></a>, the productivity role playing game <a href="https://web.archive.org/web/20200509105604if_/https:/habitica.com/static/privacy"><em>Habitica</em></a>, or the language training app <a href="https://www.theverge.com/2019/3/5/18252397/facebook-android-apps-sending-data-user-privacy-developer-tools-violation"><em>Duolingo</em></a>. Gamification gurus praise these apps for how they import game mechanics, while watchdogs condemn them for privacy violations.</p>
<p>The use of gamification for data collection is not a secret. The professor of the <em>Gamification</em> course openly celebrates it: &#8220;One of the aspects of gamification is that you&#8217;re going to get lots of information potentially about your players. Information about who they are, their profile and so forth, but also tremendously granular data about what they&#8217;re doing. Every action they take in the game, potentially can be collected, and that&#8217;s a great thing.&#8221; Points, badges, and leaderboards have always been about the data and not the play.</p>
<p>This kind of instrumentalization is alien enough to the nature of games that it is possible to speak of the gamification of games themselves: when scoring systems are added to make behavior within a particular game quantifiable, commensurate, and exportable. Digital games now commonly have features that function more like app notifications: achievements, badges, or trophies that register outside the game world. It is no accident at almost every “hardcore” game for modern consoles — <em>Call of Duty, Grand Theft Auto, Super Smash Bros, </em>etc. — pings the user every time a new achievement is unlocked and displays this information in the user’s profile. For example, during the Covid-19 quarantine I’ve amassed 51 out of 93 possible “achievements” in Ubisoft’s <em>Assassin&#8217;s Creed: Odyssey. </em>These achievements, which include badges for “outwitting the sphinx” and for executing “100 headshots,” are viewable in the streaming platform Google Stadia’s “Trophy Room.” These achievements have no function within the game; the player can’t use them for anything except to look back on the time poured into playing with a sense that it amounted to “something.”</p>
<p>Achievements notifications were not features programmed by game developers to meet players’ demands, but as a requirement codified by platforms. Microsoft Xbox’s development kit <a href="https://docs.microsoft.com/en-us/dotnet/api/microsoft.xbox.services.achievements.achievement?view=xboxlive-dotnet-2017.11.20171204.01">defines</a> an “Achievement” as a “<em>system-wide</em> mechanism for directing and rewarding users&#8217; in-game actions consistently across <em>all games</em>.” [Emphasis added.] In other words, they are not conceived as part of an individual game but as part of the larger experience of “gaming” in general. Game developers in turn must design games with this logic of achievement in mind.</p>
<p>Every major game platform defines achievements similarly, whether it is PlayStation, Steam, Xbox, or one of the other new cloud-gaming platforms operated by Google, Amazon, and Nvidia. This ubiquitous implementation of “achievements” — data about players’ behavior and skill that is not contained to the game itself — reflects how games have been gamified: Achievements and rewards reduce the heterogeneous experience of different players playing different games to a common currency, allowing platforms to gather and compare data across all the games their systems can run. This data can then be used for ends that have little to do with the games themselves — exemplifying what Shoshanna Zuboff, in <em>The Rise of Surveillance Capitalism, </em>called a “ behavioral surplus.”</p>
<div class="pull-quote left-pull instapaper_ignore">
<p>In Google&#8217;s ad system, the “time spent exploring rather than completing levels” could indicate interest in real-world vacations</p>
</div>
<p>What could data drawn specifically from game-playing offer? In 2005, Google attempted to patent a system that would use neural networks, Bayesian inference, and support vector machines to uncover exploitable correlations between in-game behavior and untapped advertising opportunities. The patent listed a number of heuristics — avatar choices, gameplay style, time spent gaming — as potentially relevant to advertisers. The system could, for instance, “display ads for pizza-hut” if “the user has been playing for over two hours continuously.” In addition to inferring pizza appetite, the system would assess players’ personality based on gaming behavior. Such metrics as the time spent bartering instead of stealing within a game would serve as a potential indicator of the player’s interest in “the best deals rather than the flashiest items.” The “time spent exploring rather than completing levels” could indicate interest in real-world vacations. The patent is careful not to claim that these correlations actually exist; instead, it merely describes a system that could collect in-game data and then discover predictors of a player’s extramural wants, needs, and desires.</p>
<hr />
<p>Classifying gamers based on the data obtained through games is now a multibillion-dollar industry known as game analytics. The company <a href="https://gameanalytics.com/about">GameAnalytics</a> boasts the ability to collect and analyze data on 850 million monthly active players across 70,000 game titles. Such data can be used to segment players based on their services, playing styles, locations, and demographics. But harvesting data from gamers to make broader inferences about people has a long history. So long as there are winners and losers, players can be ranked by their ability to win.</p>
<p>One such ranking algorithm — the ELO rating system — was developed in the 1960s to rank chess players. It computes the relative skill of players by weighting their wins and losses by the skill level of the opponents. Through this system, the individual chess match becomes a subset of a larger game that is not confined to the board but persists in ordinary space and time, comparing players to people they have never played and enforcing a general climate of competition. This same method can be applied beyond chess. Mark Zuckerberg infamously “gamified” his classmates at Harvard by applying this ranking algorithm to photos of fellow female classmates that he illegally obtained.</p>
<p>The first video game to publicly rank game players with a high-score board was<em> Space Invaders </em>in 1978<em>. </em>This mechanic quickly became a popular feature among arcade games. In 1979,<em> Star Fire</em> and <em>Asteroids</em> were the first games to allow players to personalize scores with three letter combinations. As Nick Montfort and Ian Bogost show in <em>Racing the Beam: The Atari Video Computer System, </em>the new mechanic of high scores codified a culture of competition among arcade gamers. The goal of the game was no longer simply to have fun or to win. “High scores” subordinated play to status, yoking “achievement” to zero-sum competition. For a point of comparison, in <a href="https://www.wired.com/2007/06/soviet-games/">this </a><a href="https://www.wired.com/2007/06/soviet-games/"><em>Wired </em></a><a href="https://www.wired.com/2007/06/soviet-games/">article from 2007</a>, the co-founder of the Soviet Arcade Museum, Alexander Stakhanov, describes public rankings in video games as distinctly western — and by extension, capitalist. In Soviet arcade games, public leaderboards were never a feature. Instead, Stakhanov says, &#8220;If you got enough points you won a free game, but there was no &#8216;high score&#8217; culture as in the West.&#8221;</p>
<p>The capitalist gaming model won out, and rankings remain a prominent aspect of game analytics. But the diversity and volume of data collected through digital games has expanded considerably since the days of <em>Space Invaders. </em>Microsoft’s ranking algorithm <a href="https://www.microsoft.com/en-us/research/uploads/prod/2018/03/trueskill2.pdf">TrueSkill 2</a> uses a number of metrics such as “player experience, membership in a squad, the number of kills a player scored, tendency to quit, and skill in other game modes” to develop a relative ranking of every player on its platform. In fact, every gaming platform is now designed to collect numerous data points, as their privacy policies specify. This includes account information, payment information, user content, messages, contacts, device identifiers, network identifiers, location, achievements, scores, rankings, error reporting, and feature usage as well as maintaining the right to share or resell the data to third parties. It also includes common “key performance indicators,” or KPIs, such as virality, retention, active users, and revenue per user, as well as data specific to games such as user inputs and time spent completing tasks — which, according to <a href="https://developer.ibm.com/articles/ba-big-data-gaming/">this analysis from IBM</a>, include “time to complete levels, solo versus interactive behaviors, avatar selection, interaction style indicators, gender of avatar, game strategy behavior variables, game-related tweets, social network activity, language, and more.” <a href="https://www.playstation.com/en-gb/legal/privacy-policy/">PlayStation’s privacy policy</a> states that Sony can collect “what actions you take within a game or app (for example, what obstacle you jump over and what levels you reach).” Similarly Xbox’s third-party sharing notice explains that “information we share may include … data about your game play or app session, including achievements unlocked, time spent in the game or app, presence, game statistics and rankings, and enforcement activity about you in the game or app.” The choose-your-own-adventure narrative structure common to many games is more than a narrative device; it too is a measurement apparatus.</p>
<p>Of course, lots of devices, social media platforms, and apps already collect enormous amounts of data on users, far more than most of those users likely realize. But games can be designed to generate particular kinds of performance data under more carefully controlled conditions. As IBM’s analyst explains, collecting a range of data about players “is no different from the traditional customer view towards applying advanced analytics for player retention, churn, and marketing response efforts,” but stresses “the new variety of data” from games and the “tremendous volume and velocity at which it is generated.”</p>
<p>Because of the variety and magnitude of data collected, games are capable of extracting exploitable information about players’ values and habits. Numerous academic papers purport to have discovered statistically significant relations between users’ behavior in games and outside them. Several academic research papers have <a href="https://www.researchgate.net/publication/261498768_Games_as_personality_profiling_tools">concluded</a> that “a video game can be used to create an adequate personality profile of a player.” <a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0186621">Similar studies</a> of game-play data from multiplayer online battle arenas like Fortnite have found that it “correlates with fluid intelligence as measured under controlled laboratory conditions.” Other research suggests that “commercial video games can be useful as &#8216;proxy&#8217; tests of cognitive performance.”</p>
<p>Captured data can also be fed back into the platform designed to produce it. In-game choices can be tuned to measure latent characteristics about players, such as their compulsiveness, their sociability, and their cognitive ability. <em>Silent Hill: Shattered Memories</em> turned the capacity for psychological profiling into a salient part of the game’s narrative, featuring an <a href="https://www.youtube.com/watch?v=OszjLIxbI9c">in-game psychologist</a> that would use such techniques as the Myers-Briggs test to classify players by personality type. Much like TikTok tracks its users’ behavior to reshape their feed algorithmically, the game assesses players’ choices and behaviors (which restroom do they enter, how long they take to examine photographs, etc.) to alter the game into the player’s own “<a href="http://www.edge-online.com/features/the-making-of-silent-hillshattered-memories">personal nightmare</a><u>.</u>”</p>
<img loading="lazy" class="aligncenter wp-image-3393 size-full" src="https://reallifemag.com/wp-content/uploads/2020/08/WarningPascal.jpg" alt="" width="369" height="207" srcset="https://reallifemag.com/wp-content/uploads/2020/08/WarningPascal.jpg 369w, https://reallifemag.com/wp-content/uploads/2020/08/WarningPascal-300x168.jpg 300w" sizes="(max-width: 369px) 100vw, 369px" />
<p>In general, as Google’s patent suggested, the combination of game choices, achievements, playtime, and purchase history is especially valuable to advertisers. Since video games are often expertly designed to keep users invested in them for many hours at a time, the data they yield may be especially valuable to marketers seeking to capture consumer attention. Games can serve as real estate for ads, a repertoire of techniques for behavioral surveillance and control, and an experimental ground in which these can be tested.</p>
<div class="pull-quote left-pull instapaper_ignore">
<p>Open worlds are well adapted to surveillance and control; endless possibilities for exploration are matched by equally endless opportunities for data collection</p>
</div>
<p>In 2019, industry researchers estimated the global <a href="https://www.researchandmarkets.com/reports/5020111/in-game-advertising-market-forecasts-from-2020?utm_source=dynamic&amp;utm_medium=BW&amp;utm_code=6wr797&amp;utm_campaign=1408792+-+In-">in-game advertising market</a> to be more than $128 billion. Not only can games feature virtual billboards, but in-game items or other products within the game world can be swapped out for brands more tailored to the user’s tastes. Users can be forced to sit through personalized ads in cut scenes as they move through the game. Another strategy is to use in-game data to estimate a player’s “lifetime value” or LTV — the monetary value a user is expected to generate for the game developer — and adjust the game accordingly, focusing on players with the highest expected value, nudging them to continue buying game-world tokens, character modes, virtual materials, and other items. Such <a href="https://www.investopedia.com/articles/investing/022216/how-microtransactions-are-evolving-economics-gaming.asp">microtransactions</a> not only milk profit from players through their purchases; they can also indicate what sorts of mundane virtual tasks gamers are willing to put up with and what tasks gamers are willing to pay to avoid. <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2483426">Intellectual-property-law scholars have argued</a> that microtransactions can be used to estimate players’ “intertemporal discount factor,” a financial metric originally designed to assess an investor’s preference for immediate returns or delayed rewards. If a player proves willing to overspend for instant gratification, this data about the player can be sold to advertisers, and may prove especially useful when supplemented with the other data collected by platforms. Microtransactions, then, are more than transactions; they are data on top of money.</p>
<p>Additionally, there are games specifically designed to test the aptitude of job applicants. Even before employers put faith in “game-based assessment,” the U.S. military funded the development of the online networked game <em>America&#8217;s Army</em> as a recruitment tool. In an interview between U.S. Army Colonel Wardynski and the self-proclaimed “world&#8217;s foremost expert and public speaker on the subject of gamification” Gabe Zichermann, Wardynski admits that the objective of <em>America’s Army </em>was not direct recruitment: “Our objective was decision space.” Wardynski explained that “if [the army] is not even in your decision space, forget recruits. How do I get into a kid’s decision space?”</p>
<p>Beyond their potential for manipulating individual players, gamified games are proving to be important playgrounds for artificial intelligence. Game spaces attract AI developers because the open and dynamic worlds of games have already been rendered discrete and quantified. In gamified games, the points, badges, and leaderboards originally designed to monitor, control, and incentivize human players can be repurposed by engineers to monitor, control, and incentivize machine-learning algorithms. Open worlds are well adapted to surveillance and control, where the seemingly endless possibilities for exploration are matched by the equally endless opportunities for data collection.</p>
<p>Companies with ties to Google — such as DeepMind and OpenAI — use games to try to develop strategic AI capable of playing complex open-world games. Game-playing AIs have already beaten the world’s top human players of traditional games like Go and video games like <a href="https://venturebeat.com/2017/08/11/openais-bot-beats-top-dota-2-player-so-badly-that-he-quits/"><em>Dota 2</em></a>. Microsoft’s <a href="https://www.microsoft.com/en-us/research/project/project-malmo/">project Malmo</a> is an effort to use open-world network games like <em>Minecraft</em> to help build <a href="https://blogs.microsoft.com/ai/project-malmo-using-minecraft-build-intelligent-technology/#sm.0001674urakf1fo4w8n13a4hwd1ae">intelligent agents</a> capable of navigation, bartering, and collaboration. The purpose of this research is not purely theoretical. The defense contractor <a href="https://www.aptima.com/">Aptima</a> won a $1 million bid with DARPA to develop artificial agents that learn to work alongside human players in <em>Minecraft</em>, by modeling unique play styles of human players. With AI trained on <em>Minecraft</em> players, DARPA <a href="https://breakingdefense.com/2020/08/darpa-trains-ai-to-understand-humans-in-minecraft/">hopes to one day develop AI capable of monitoring soldiers on the battlefield</a>. Amazon, Google, and Microsoft have now sponsored a series of competitions that prompt teams of developers to engineer algorithms capable of accomplishing various game tasks such as <a href="https://www.aicrowd.com/challenges/neurips-2020-minerl-competition">navigating randomly selected game worlds</a>, <a href="https://www.aicrowd.com/challenges/neurips-2020-minerl-competition">mining a virtual diamond from the depths of a Minecraft’s digital caverns</a>, or <a href="https://www.aicrowd.com/challenges/neurips-2020-flatland-challenge">scheduling a rail network of in-game trains</a>. Much like the gamers in the worlds being experimented upon, winning teams in these competitions are awarded points, badges and rankings on the competition platform <a href="https://www.aicrowd.com/">AIcrowd</a>. The platform gamifies AI development itself by turning engineering into a series of competitive rounds, measured by ranking and activity scores and rewarded with icons of gold, silver, and bronze badges.</p>
<p>These efforts make it evident that the principles of gamification assume that humans are no different from algorithms in how they respond to rewards. Like machine learning algorithms, humans in algorithmically controlled spaces can be nudged and reprogrammed to have better habits. Far from making life more game-like, gamification makes human behavior more manageable and predictable, provoked by feedback loops and captured as data.</p>
<p>Given the potential of games to harvest such valuable information, it is not surprising that Google and Amazon have been developing cloud-gaming platforms. What is surprising is that the discourse on “cloud gaming” often focuses on the user experience without stopping to ask who the end users are. Google’s Stadia has received a lot of backlash from gamers, but mainly because it’s expensive, not because it’s exploitative. Yet cloud gaming, like the other services it offers, is about developing compelling alibis for Google’s main business of collecting data and selling ads. Google and Amazon’s move into cloud gaming integrates the data-generating power of games with their existing data-collecting empires. Games are important assets because of the unique affordances they offer to attention retailers: surveillance, control, and undivided attention.</p>
<p>An online marketplace, like a game, is a highly controlled yet seemingly “open world” where choices can be monitored closely. Just as in the two-sided platforms for goods and services managed by Google and Amazon, these choice environments can be engineered to nudge behavior in predefined directions or to collect user data. With psychological insight into the values, ideals, and fantasies that users are not so willing to admit in search queries, emails, and purchasing habits, games are valuable supplements to the data Google and Amazon already collect. Just as “hardcore” games have become more standardized with open worlds, achievements, and trophies, we can expect that the promised freedom and seamlessness of cloud gaming will come with increased surveillance and more penetrating monetization. If we accept the cliché “games are a series of interesting choices,” it is about time to start asking for whom.</p>

+ 10
- 0
cache/2020/index.html View File

@@ -147,6 +147,8 @@
<li><a href="/david/cache/2020/662f4136a25b828f662a6e822d85575d/" title="Accès à l’article dans le cache local : Who Listens to the Listeners?">Who Listens to the Listeners?</a> (<a href="https://librarianshipwreck.wordpress.com/2019/12/06/who-listens-to-the-listeners/" title="Accès à l’article original distant : Who Listens to the Listeners?">original</a>)</li>
<li><a href="/david/cache/2020/d79377f9a5b66a158e5c7df3f3fe2b14/" title="Accès à l’article dans le cache local : Je suis un vieux con">Je suis un vieux con</a> (<a href="https://nota-bene.org/Je-suis-un-vieux-con" title="Accès à l’article original distant : Je suis un vieux con">original</a>)</li>
<li><a href="/david/cache/2020/4d81a301bbb7936312cd16e6674f3ff6/" title="Accès à l’article dans le cache local : A Group Is Its Own Worst Enemy">A Group Is Its Own Worst Enemy</a> (<a href="http://shirky.com/writings/group_enemy.html" title="Accès à l’article original distant : A Group Is Its Own Worst Enemy">original</a>)</li>
<li><a href="/david/cache/2020/41703d38c7acf11c750bfa04dad106fe/" title="Accès à l’article dans le cache local : Science ouverte : la révolution nécessaire">Science ouverte : la révolution nécessaire</a> (<a href="https://lejournal.cnrs.fr/articles/science-ouverte-la-revolution-necessaire" title="Accès à l’article original distant : Science ouverte : la révolution nécessaire">original</a>)</li>
@@ -223,6 +225,8 @@
<li><a href="/david/cache/2020/b4edfe74a826089b329de71ea9c9b8c1/" title="Accès à l’article dans le cache local : Mark Alizart : « Le climato-scepticisme doit se comprendre comme un fait politique, non comme une opinion » (Coup d’état climatique)">Mark Alizart : « Le climato-scepticisme doit se comprendre comme un fait politique, non comme une opinion » (Coup d’état climatique)</a> (<a href="https://diacritik.com/2020/04/01/mark-alizart-le-climato-scepticisme-doit-se-comprendre-comme-un-fait-politique-non-comme-une-opinion-coup-detat-climatique/" title="Accès à l’article original distant : Mark Alizart : « Le climato-scepticisme doit se comprendre comme un fait politique, non comme une opinion » (Coup d’état climatique)">original</a>)</li>
<li><a href="/david/cache/2020/37c08a59224bed34c1f2d243f029c54c/" title="Accès à l’article dans le cache local : The most important feature of Sublime Text">The most important feature of Sublime Text</a> (<a href="https://tonsky.me/blog/sublime/" title="Accès à l’article original distant : The most important feature of Sublime Text">original</a>)</li>
<li><a href="/david/cache/2020/7c3883b39ab29809ccb63ad2a268d08d/" title="Accès à l’article dans le cache local : Free Speech Is Not the Same As Free Reach">Free Speech Is Not the Same As Free Reach</a> (<a href="https://www.wired.com/story/free-speech-is-not-the-same-as-free-reach/" title="Accès à l’article original distant : Free Speech Is Not the Same As Free Reach">original</a>)</li>
<li><a href="/david/cache/2020/25289703cb4dd3023c087715cddf6d55/" title="Accès à l’article dans le cache local : What’s up with me?">What’s up with me?</a> (<a href="https://helloanselm.com/writings/whats-up-with-me" title="Accès à l’article original distant : What’s up with me?">original</a>)</li>
@@ -247,6 +251,8 @@
<li><a href="/david/cache/2020/5a82172cc73bfc2050a2590b4d81e82d/" title="Accès à l’article dans le cache local : Digital Gardens">Digital Gardens</a> (<a href="https://sentiers.media/dispatch-08-digital-gardens/" title="Accès à l’article original distant : Digital Gardens">original</a>)</li>
<li><a href="/david/cache/2020/e30e5e6e532e5eeb1314ef1ad9abd6e1/" title="Accès à l’article dans le cache local : The Gamification of Games">The Gamification of Games</a> (<a href="https://reallifemag.com/the-gamification-of-games/" title="Accès à l’article original distant : The Gamification of Games">original</a>)</li>
<li><a href="/david/cache/2020/9a05c76807ac1090c1fbaa96acb9f933/" title="Accès à l’article dans le cache local : La rose et le lotus">La rose et le lotus</a> (<a href="http://maiadereva.net/la-rose-et-le-lotus/" title="Accès à l’article original distant : La rose et le lotus">original</a>)</li>
<li><a href="/david/cache/2020/51327b2e408efddee97c2bf8ca7df317/" title="Accès à l’article dans le cache local : Paroles d’intrapreneuses #2 : Mélodie Dahi de la Startup d’Etat Zam">Paroles d’intrapreneuses #2 : Mélodie Dahi de la Startup d’Etat Zam</a> (<a href="https://blog.beta.gouv.fr/dinsic/2020/07/01/paroles-dintrapreneuse-melodie-dahi-du-secretariat-general-du-gouvernement/" title="Accès à l’article original distant : Paroles d’intrapreneuses #2 : Mélodie Dahi de la Startup d’Etat Zam">original</a>)</li>
@@ -323,6 +329,8 @@
<li><a href="/david/cache/2020/bdc65ed9d2657f45d13d97186072b415/" title="Accès à l’article dans le cache local : How I think about solving problems">How I think about solving problems</a> (<a href="https://humanwhocodes.com/blog/2020/02/how-i-think-about-solving-problems/" title="Accès à l’article original distant : How I think about solving problems">original</a>)</li>
<li><a href="/david/cache/2020/cfc14f158c3fd69336c128dd70b29072/" title="Accès à l’article dans le cache local : K: The Overlooked Variable That's Driving the Pandemic">K: The Overlooked Variable That's Driving the Pandemic</a> (<a href="https://www.theatlantic.com/health/archive/2020/09/k-overlooked-variable-driving-pandemic/616548/" title="Accès à l’article original distant : K: The Overlooked Variable That's Driving the Pandemic">original</a>)</li>
<li><a href="/david/cache/2020/b715701834baa76baecb154cf2c92c9c/" title="Accès à l’article dans le cache local : Harassers are nice to me, and probably to you">Harassers are nice to me, and probably to you</a> (<a href="https://leaddev.com/harassers-are-nice-me-and-probably-you" title="Accès à l’article original distant : Harassers are nice to me, and probably to you">original</a>)</li>
<li><a href="/david/cache/2020/82918fea8d8ed461aae66915dbed02c9/" title="Accès à l’article dans le cache local : Make me think!">Make me think!</a> (<a href="https://ralphammer.com/make-me-think/" title="Accès à l’article original distant : Make me think!">original</a>)</li>
@@ -333,6 +341,8 @@
<li><a href="/david/cache/2020/618f913d970fee8feadadd15cf282e5a/" title="Accès à l’article dans le cache local : How “Good Intent” Undermines Diversity and Inclusion">How “Good Intent” Undermines Diversity and Inclusion</a> (<a href="https://thebias.com/2017/09/26/how-good-intent-undermines-diversity-and-inclusion/" title="Accès à l’article original distant : How “Good Intent” Undermines Diversity and Inclusion">original</a>)</li>
<li><a href="/david/cache/2020/030b4208de95e734300a715f386ba1bf/" title="Accès à l’article dans le cache local : #LeNouvelEssai - Dernières infos !">#LeNouvelEssai - Dernières infos !</a> (<a href="http://lenouvelessai.nursit.com/spip.php?article31" title="Accès à l’article original distant : #LeNouvelEssai - Dernières infos !">original</a>)</li>
<li><a href="/david/cache/2020/42616669988094757bf9d4864ee4ab4f/" title="Accès à l’article dans le cache local : App Assisted Contact Tracing">App Assisted Contact Tracing</a> (<a href="https://lucumr.pocoo.org/2020/4/3/contact-tracing/" title="Accès à l’article original distant : App Assisted Contact Tracing">original</a>)</li>
<li><a href="/david/cache/2020/4bf3df418cd5d6e14bc6e1b2bda9b12d/" title="Accès à l’article dans le cache local : How is computer programming different today than 20 years ago?">How is computer programming different today than 20 years ago?</a> (<a href="https://medium.com/swlh/how-is-computer-programming-different-today-than-20-years-ago-9d0154d1b6ce" title="Accès à l’article original distant : How is computer programming different today than 20 years ago?">original</a>)</li>

Loading…
Cancel
Save