<!doctype html><!-- This is a valid HTML5 document. --> | |||||
<!-- Screen readers, SEO, extensions and so on. --> | |||||
<html lang="fr"> | |||||
<!-- Has to be within the first 1024 bytes, hence before the `title` element | |||||
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset --> | |||||
<meta charset="utf-8"> | |||||
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 --> | |||||
<!-- The viewport meta is quite crowded and we are responsible for that. | |||||
See: https://codepen.io/tigt/post/meta-viewport-for-2015 --> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<!-- Required to make a valid HTML5 document. --> | |||||
<title>Propriété par Fanny Cheung (archive) — David Larlet</title> | |||||
<meta name="description" content="Publication mise en cache pour en conserver une trace."> | |||||
<!-- That good ol' feed, subscribe :). --> | |||||
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/"> | |||||
<!-- Generated from https://realfavicongenerator.net/ such a mess. --> | |||||
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png"> | |||||
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png"> | |||||
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png"> | |||||
<link rel="manifest" href="/static/david/icons2/site.webmanifest"> | |||||
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c"> | |||||
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico"> | |||||
<meta name="msapplication-TileColor" content="#f7f7f7"> | |||||
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml"> | |||||
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)"> | |||||
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)"> | |||||
<!-- Documented, feel free to shoot an email. --> | |||||
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css"> | |||||
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. --> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<script> | |||||
function toggleTheme(themeName) { | |||||
document.documentElement.classList.toggle( | |||||
'forced-dark', | |||||
themeName === 'dark' | |||||
) | |||||
document.documentElement.classList.toggle( | |||||
'forced-light', | |||||
themeName === 'light' | |||||
) | |||||
} | |||||
const selectedTheme = localStorage.getItem('theme') | |||||
if (selectedTheme !== 'undefined') { | |||||
toggleTheme(selectedTheme) | |||||
} | |||||
</script> | |||||
<meta name="robots" content="noindex, nofollow"> | |||||
<meta content="origin-when-cross-origin" name="referrer"> | |||||
<!-- Canonical URL for SEO purposes --> | |||||
<link rel="canonical" href="https://ynote.hk/mots/argent/propriete.html"> | |||||
<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all"> | |||||
<article> | |||||
<header> | |||||
<h1>Propriété par Fanny Cheung</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> • | |||||
<a href="https://ynote.hk/mots/argent/propriete.html" title="Lien vers le contenu original">Source originale</a> | |||||
</p> | |||||
</nav> | |||||
<hr> | |||||
<p>En ce moment, je discute avec d’autres personnes, dans l’idée d’acheter un | |||||
terrain et d’y construire un habitat léger. Ça me questionne, comme à chaque | |||||
fois, sur l’accès à la propriété.</p> | |||||
<p>Une grande partie de mon entourage est déjà propriétaire. Ça en dit long sur | |||||
la sphère dans laquelle j’évolue. J’ai l’impression que le fait d’acheter une | |||||
maison fait partie de la liste non-négociable d’une vie réussie dans notre monde | |||||
capitaliste. Jusqu’à très récemment, je n’avais jamais interrogé ce postulat.</p> | |||||
<p>Mais finalement, pourquoi est-ce qu’on veut être propriétaire ? On achète un | |||||
futur, une certitude. Celle de ne jamais être en danger et de pouvoir dormir | |||||
quelque part. On achète aussi pour construire son foyer. Faire communauté. | |||||
Je ne sors pas de ce schéma.</p> | |||||
<p>J’ai envie de tout ça. J’aimerais simplement que ça ne soit pas l’unique | |||||
réponse à ces envies.</p> | |||||
</article> | |||||
<hr> | |||||
<footer> | |||||
<p> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> • | |||||
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use> | |||||
</svg> Suivre</a> • | |||||
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use> | |||||
</svg> Pro</a> • | |||||
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use> | |||||
</svg> Email</a> • | |||||
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use> | |||||
</svg> Légal</abbr> | |||||
</p> | |||||
<template id="theme-selector"> | |||||
<form> | |||||
<fieldset> | |||||
<legend><svg class="icon icon-brightness-contrast"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use> | |||||
</svg> Thème</legend> | |||||
<label> | |||||
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto | |||||
</label> | |||||
<label> | |||||
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé | |||||
</label> | |||||
<label> | |||||
<input type="radio" value="light" name="chosen-color-scheme"> Clair | |||||
</label> | |||||
</fieldset> | |||||
</form> | |||||
</template> | |||||
</footer> | |||||
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script> | |||||
<script> | |||||
function loadThemeForm(templateName) { | |||||
const themeSelectorTemplate = document.querySelector(templateName) | |||||
const form = themeSelectorTemplate.content.firstElementChild | |||||
themeSelectorTemplate.replaceWith(form) | |||||
form.addEventListener('change', (e) => { | |||||
const chosenColorScheme = e.target.value | |||||
localStorage.setItem('theme', chosenColorScheme) | |||||
toggleTheme(chosenColorScheme) | |||||
}) | |||||
const selectedTheme = localStorage.getItem('theme') | |||||
if (selectedTheme && selectedTheme !== 'undefined') { | |||||
form.querySelector(`[value="${selectedTheme}"]`).checked = true | |||||
} | |||||
} | |||||
const prefersColorSchemeDark = '(prefers-color-scheme: dark)' | |||||
window.addEventListener('load', () => { | |||||
let hasDarkRules = false | |||||
for (const styleSheet of Array.from(document.styleSheets)) { | |||||
let mediaRules = [] | |||||
for (const cssRule of styleSheet.cssRules) { | |||||
if (cssRule.type !== CSSRule.MEDIA_RULE) { | |||||
continue | |||||
} | |||||
// WARNING: Safari does not have/supports `conditionText`. | |||||
if (cssRule.conditionText) { | |||||
if (cssRule.conditionText !== prefersColorSchemeDark) { | |||||
continue | |||||
} | |||||
} else { | |||||
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) { | |||||
continue | |||||
} | |||||
} | |||||
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules)) | |||||
} | |||||
// WARNING: do not try to insert a Rule to a styleSheet you are | |||||
// currently iterating on, otherwise the browser will be stuck | |||||
// in a infinite loop… | |||||
for (const mediaRule of mediaRules) { | |||||
styleSheet.insertRule(mediaRule.cssText) | |||||
hasDarkRules = true | |||||
} | |||||
} | |||||
if (hasDarkRules) { | |||||
loadThemeForm('#theme-selector') | |||||
} | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
title: Propriété par Fanny Cheung | |||||
url: https://ynote.hk/mots/argent/propriete.html | |||||
hash_url: 37b0c9d01d6f788bee398b64377cb6c1 | |||||
<p>En ce moment, je discute avec d’autres personnes, dans l’idée d’acheter un | |||||
terrain et d’y construire un habitat léger. Ça me questionne, comme à chaque | |||||
fois, sur l’accès à la propriété.</p> | |||||
<p>Une grande partie de mon entourage est déjà propriétaire. Ça en dit long sur | |||||
la sphère dans laquelle j’évolue. J’ai l’impression que le fait d’acheter une | |||||
maison fait partie de la liste non-négociable d’une vie réussie dans notre monde | |||||
capitaliste. Jusqu’à très récemment, je n’avais jamais interrogé ce postulat.</p> | |||||
<p>Mais finalement, pourquoi est-ce qu’on veut être propriétaire ? On achète un | |||||
futur, une certitude. Celle de ne jamais être en danger et de pouvoir dormir | |||||
quelque part. On achète aussi pour construire son foyer. Faire communauté. | |||||
Je ne sors pas de ce schéma.</p> | |||||
<p>J’ai envie de tout ça. J’aimerais simplement que ça ne soit pas l’unique | |||||
réponse à ces envies.</p> |
<!doctype html><!-- This is a valid HTML5 document. --> | |||||
<!-- Screen readers, SEO, extensions and so on. --> | |||||
<html lang="fr"> | |||||
<!-- Has to be within the first 1024 bytes, hence before the `title` element | |||||
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset --> | |||||
<meta charset="utf-8"> | |||||
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 --> | |||||
<!-- The viewport meta is quite crowded and we are responsible for that. | |||||
See: https://codepen.io/tigt/post/meta-viewport-for-2015 --> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<!-- Required to make a valid HTML5 document. --> | |||||
<title>How teams remember (archive) — David Larlet</title> | |||||
<meta name="description" content="Publication mise en cache pour en conserver une trace."> | |||||
<!-- That good ol' feed, subscribe :). --> | |||||
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/"> | |||||
<!-- Generated from https://realfavicongenerator.net/ such a mess. --> | |||||
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png"> | |||||
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png"> | |||||
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png"> | |||||
<link rel="manifest" href="/static/david/icons2/site.webmanifest"> | |||||
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c"> | |||||
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico"> | |||||
<meta name="msapplication-TileColor" content="#f7f7f7"> | |||||
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml"> | |||||
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)"> | |||||
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)"> | |||||
<!-- Documented, feel free to shoot an email. --> | |||||
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css"> | |||||
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. --> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<script> | |||||
function toggleTheme(themeName) { | |||||
document.documentElement.classList.toggle( | |||||
'forced-dark', | |||||
themeName === 'dark' | |||||
) | |||||
document.documentElement.classList.toggle( | |||||
'forced-light', | |||||
themeName === 'light' | |||||
) | |||||
} | |||||
const selectedTheme = localStorage.getItem('theme') | |||||
if (selectedTheme !== 'undefined') { | |||||
toggleTheme(selectedTheme) | |||||
} | |||||
</script> | |||||
<meta name="robots" content="noindex, nofollow"> | |||||
<meta content="origin-when-cross-origin" name="referrer"> | |||||
<!-- Canonical URL for SEO purposes --> | |||||
<link rel="canonical" href="https://gilest.org/htr.html"> | |||||
<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all"> | |||||
<article> | |||||
<header> | |||||
<h1>How teams remember</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> • | |||||
<a href="https://gilest.org/htr.html" title="Lien vers le contenu original">Source originale</a> | |||||
</p> | |||||
</nav> | |||||
<hr> | |||||
<p><img src="https://gilest.org/images/htr-slides.jpg" alt="Screenshot of my slides about 'How teams remember', a solid pink background with black text that says 'Documentation for teams is just as important as documentation for software' "><br><em><small>Slides from my keynote at Agile in the City</small></em></p> | |||||
<p>Recently, I’ve been doing a lot of thinking about teams and memory. <a href="https://agilecommshandbook.com">Agile comms</a> enables memory, and memory has value - but it also <em>costs</em> time and money to do properly. Remembering means writing things down, and curating lots of memories over time. Organisations need people who can do those things, and who have the time and incentive to do those things.</p> | |||||
<p>So someone has to decide <em>how many people</em>, and <em>how much</em> time and money an organisation is prepared to spend on realising the value of memory. Someone has to grant permission for remembering to happen. This isn’t just about comms, this is about budgets and leadership.</p> | |||||
<p>The deeper I dig into my research, the more case studies and examples I find. Institutional memory is frequently overlooked and undervalued - until the moment when someone needs access to memory <em>right now</em>, and of course by then it’s too late. Good remembering means turning tacit knowledge into explicit knowledge; if all your tacit knowledge has left the building inside the heads of former colleagues, it’s lost to you forever.</p> | |||||
<p>So I think there’s a case for allowing and encouraging <em>documentation for teams</em>, just as much as <em>documentation for software</em>. Writing that documentation is a task, It needs to be part of someone’s job. Every organisation needs a little bit of storytelling capability, to help make that job easier.</p> | |||||
<p>I think there’s another book for me to write here. I’ve started writing it.</p> | |||||
<p>I’m making notes - starting with a summary of last week’s keynote from <a href="https://bristol.agileinthecity.net/programme/how-teams-remember">Agile in the City: Bristol & Bath</a> - at <a href="https://howteamsremember.com">howteamsremember.com</a>.</p> | |||||
<p>Thoughts, feedback and suggestions very welcome.</p> | |||||
</article> | |||||
<hr> | |||||
<footer> | |||||
<p> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> • | |||||
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use> | |||||
</svg> Suivre</a> • | |||||
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use> | |||||
</svg> Pro</a> • | |||||
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use> | |||||
</svg> Email</a> • | |||||
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use> | |||||
</svg> Légal</abbr> | |||||
</p> | |||||
<template id="theme-selector"> | |||||
<form> | |||||
<fieldset> | |||||
<legend><svg class="icon icon-brightness-contrast"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use> | |||||
</svg> Thème</legend> | |||||
<label> | |||||
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto | |||||
</label> | |||||
<label> | |||||
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé | |||||
</label> | |||||
<label> | |||||
<input type="radio" value="light" name="chosen-color-scheme"> Clair | |||||
</label> | |||||
</fieldset> | |||||
</form> | |||||
</template> | |||||
</footer> | |||||
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script> | |||||
<script> | |||||
function loadThemeForm(templateName) { | |||||
const themeSelectorTemplate = document.querySelector(templateName) | |||||
const form = themeSelectorTemplate.content.firstElementChild | |||||
themeSelectorTemplate.replaceWith(form) | |||||
form.addEventListener('change', (e) => { | |||||
const chosenColorScheme = e.target.value | |||||
localStorage.setItem('theme', chosenColorScheme) | |||||
toggleTheme(chosenColorScheme) | |||||
}) | |||||
const selectedTheme = localStorage.getItem('theme') | |||||
if (selectedTheme && selectedTheme !== 'undefined') { | |||||
form.querySelector(`[value="${selectedTheme}"]`).checked = true | |||||
} | |||||
} | |||||
const prefersColorSchemeDark = '(prefers-color-scheme: dark)' | |||||
window.addEventListener('load', () => { | |||||
let hasDarkRules = false | |||||
for (const styleSheet of Array.from(document.styleSheets)) { | |||||
let mediaRules = [] | |||||
for (const cssRule of styleSheet.cssRules) { | |||||
if (cssRule.type !== CSSRule.MEDIA_RULE) { | |||||
continue | |||||
} | |||||
// WARNING: Safari does not have/supports `conditionText`. | |||||
if (cssRule.conditionText) { | |||||
if (cssRule.conditionText !== prefersColorSchemeDark) { | |||||
continue | |||||
} | |||||
} else { | |||||
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) { | |||||
continue | |||||
} | |||||
} | |||||
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules)) | |||||
} | |||||
// WARNING: do not try to insert a Rule to a styleSheet you are | |||||
// currently iterating on, otherwise the browser will be stuck | |||||
// in a infinite loop… | |||||
for (const mediaRule of mediaRules) { | |||||
styleSheet.insertRule(mediaRule.cssText) | |||||
hasDarkRules = true | |||||
} | |||||
} | |||||
if (hasDarkRules) { | |||||
loadThemeForm('#theme-selector') | |||||
} | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
title: How teams remember | |||||
url: https://gilest.org/htr.html | |||||
hash_url: 5a9fa7db62f151b8a863b949ed4e9e5f | |||||
<p><img src="https://gilest.org/images/htr-slides.jpg" alt="Screenshot of my slides about 'How teams remember', a solid pink background with black text that says 'Documentation for teams is just as important as documentation for software' "><br><em><small>Slides from my keynote at Agile in the City</small></em></p> | |||||
<p>Recently, I’ve been doing a lot of thinking about teams and memory. <a href="https://agilecommshandbook.com">Agile comms</a> enables memory, and memory has value - but it also <em>costs</em> time and money to do properly. Remembering means writing things down, and curating lots of memories over time. Organisations need people who can do those things, and who have the time and incentive to do those things.</p> | |||||
<p>So someone has to decide <em>how many people</em>, and <em>how much</em> time and money an organisation is prepared to spend on realising the value of memory. Someone has to grant permission for remembering to happen. This isn’t just about comms, this is about budgets and leadership.</p> | |||||
<p>The deeper I dig into my research, the more case studies and examples I find. Institutional memory is frequently overlooked and undervalued - until the moment when someone needs access to memory <em>right now</em>, and of course by then it’s too late. Good remembering means turning tacit knowledge into explicit knowledge; if all your tacit knowledge has left the building inside the heads of former colleagues, it’s lost to you forever.</p> | |||||
<p>So I think there’s a case for allowing and encouraging <em>documentation for teams</em>, just as much as <em>documentation for software</em>. Writing that documentation is a task, It needs to be part of someone’s job. Every organisation needs a little bit of storytelling capability, to help make that job easier.</p> | |||||
<p>I think there’s another book for me to write here. I’ve started writing it.</p> | |||||
<p>I’m making notes - starting with a summary of last week’s keynote from <a href="https://bristol.agileinthecity.net/programme/how-teams-remember">Agile in the City: Bristol & Bath</a> - at <a href="https://howteamsremember.com">howteamsremember.com</a>.</p> | |||||
<p>Thoughts, feedback and suggestions very welcome.</p> |
<!doctype html><!-- This is a valid HTML5 document. --> | |||||
<!-- Screen readers, SEO, extensions and so on. --> | |||||
<html lang="fr"> | |||||
<!-- Has to be within the first 1024 bytes, hence before the `title` element | |||||
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset --> | |||||
<meta charset="utf-8"> | |||||
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 --> | |||||
<!-- The viewport meta is quite crowded and we are responsible for that. | |||||
See: https://codepen.io/tigt/post/meta-viewport-for-2015 --> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<!-- Required to make a valid HTML5 document. --> | |||||
<title>If a hammer was like AI… (archive) — David Larlet</title> | |||||
<meta name="description" content="Publication mise en cache pour en conserver une trace."> | |||||
<!-- That good ol' feed, subscribe :). --> | |||||
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/"> | |||||
<!-- Generated from https://realfavicongenerator.net/ such a mess. --> | |||||
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png"> | |||||
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png"> | |||||
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png"> | |||||
<link rel="manifest" href="/static/david/icons2/site.webmanifest"> | |||||
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c"> | |||||
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico"> | |||||
<meta name="msapplication-TileColor" content="#f7f7f7"> | |||||
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml"> | |||||
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)"> | |||||
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)"> | |||||
<!-- Documented, feel free to shoot an email. --> | |||||
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css"> | |||||
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. --> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<script> | |||||
function toggleTheme(themeName) { | |||||
document.documentElement.classList.toggle( | |||||
'forced-dark', | |||||
themeName === 'dark' | |||||
) | |||||
document.documentElement.classList.toggle( | |||||
'forced-light', | |||||
themeName === 'light' | |||||
) | |||||
} | |||||
const selectedTheme = localStorage.getItem('theme') | |||||
if (selectedTheme !== 'undefined') { | |||||
toggleTheme(selectedTheme) | |||||
} | |||||
</script> | |||||
<meta name="robots" content="noindex, nofollow"> | |||||
<meta content="origin-when-cross-origin" name="referrer"> | |||||
<!-- Canonical URL for SEO purposes --> | |||||
<link rel="canonical" href="https://axbom.com/hammer-ai/"> | |||||
<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all"> | |||||
<article> | |||||
<header> | |||||
<h1>If a hammer was like AI…</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> • | |||||
<a href="https://axbom.com/hammer-ai/" title="Lien vers le contenu original">Source originale</a> | |||||
</p> | |||||
</nav> | |||||
<hr> | |||||
<p><strong>A common argument I come across when talking about ethics in AI is that it's <em>just</em> a tool, and like any tool it can be used for good or for evil. One familiar declaration is this one: "It's really no different from a hammer". I was compelled to make a poster to address these claims. Steal it, share it, print it and use it where you see fit.</strong></p> | |||||
<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://axbom.com/content/images/2023/06/axbom-hammer-ai-02.png" class="kg-image" alt="All topics in the poster are explained in the description below." loading="lazy" srcset="https://axbom.com/content/images/size/w600/2023/06/axbom-hammer-ai-02.png 600w, https://axbom.com/content/images/size/w1000/2023/06/axbom-hammer-ai-02.png 1000w, https://axbom.com/content/images/2023/06/axbom-hammer-ai-02.png 1599w" sizes="(min-width: 720px) 720px"><figcaption>The poster "If a hammer was like AI"</figcaption></figure> | |||||
<p>Note that this poster primarily addresses the features of generative AI and deep learning, which are the main technologies receiving attention in 2023.</p> | |||||
<h2 id="description-if-a-hammer-was-like-ai">Description: If a hammer was like AI</h2> | |||||
<h3 id="downloads">Downloads</h3> | |||||
<blockquote class="kg-blockquote-alt">It's just a tool!</blockquote> | |||||
<p>Now, as I have your attention, let me take this opportunity to break down what each of the topics in the poster refers to. These and more are also outlined in my infographic: <a href="https://axbom.com/elements">The Elements of AI Ethics</a>.</p> | |||||
<h3 id="obscured-data-theft">Obscured data theft</h3> | |||||
<blockquote><em>"It copies the design of most constructions in the western, industrialised world without consent and strives to mimic the most average one of those."</em></blockquote> | |||||
<p>To become as "good" as they are in their current form, many generative AI systems have been trained on vast amounts of data that were not intended for this purpose, and whose owners and makers were not asked for consent. The mere publishing of an article or image on the web does not imply it can be used by anyone for anything. Generative AI tools appear to be getting away with ignoring copyright.</p> | |||||
<p>At the same time there are many intricacies that law- and policymakers need to understand to do a good job of reasoning around infringements on rights or privileges. Images are for example not duplicated and stored, but rather used to feed a computational model, which is an argument often used by defenders to explain how generative AI is only "inspired" by the works of others and not "copying". There are several ongoing legal cases challenging this view.</p> | |||||
<h3 id="bias-injustice">Bias & injustice</h3> | |||||
<blockquote><em>"By design, the hammer will most often just hit the thumb of Black, Brown and underserved people."</em></blockquote> | |||||
<p>One inherent property of AI is its ability to act as an accelerator of other harms. By being trained on large amounts of data (often unsupervised) – that inevitably contains biases, abandoned values and prejudiced commentary – these will be reproduced in any output. It is likely that this will even happen unnoticeably (especially when not actively monitored) since many biases are subtle and embedded in common language. And at other times it will happen quite clearly, with bots spewing toxic, misogynistic and racist content.</p> | |||||
<p>Because of systemic issues and the fact that bias becomes embedded in these tools, these biases will have dire consequences for people who are already disempowered. Scoring systems are often used by automated decision-making tools and these scores can for example affect job opportunities, welfare/housing eligibility and judicial outcomes.</p> | |||||
<p>No, this does not mean that the hammer has a <em>mind of its own</em>. It means that the hammer is built in a way that has inherent biases which will tend to disfavor people who are already underserved and disenfranchised. AI tools will for example <a href="https://www.bbc.com/news/technology-63228466?ref=axbom.com">fail to reduce bias in recruitment</a>, and contribute to racist and sexist <a href="https://www.fastcompany.com/90844066/chatgpt-write-performance-reviews-sexist-and-racist?ref=axbom.com">performance reviews</a>.</p> | |||||
<p>It's relevant to compare this topic with a touchless soap dispenser <a href="https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773?ref=axbom.com">that won't react to dark skin</a>. It's not the fault of the user that it does not react, it's the fault of the manufacturer and how it was built. It doesn't "act that way" because it has a mind, but because the manufacturing and design process was unmindful. You can't tell the user to educate themself about using it to make it work better. See also <a href="https://blog.twitter.com/engineering/en_us/topics/insights/2021/sharing-learnings-about-our-image-cropping-algorithm?ref=axbom.com">Twitter's image cropping algorithm</a>, Google's "inability" to <a href="https://www.nytimes.com/2023/05/22/technology/ai-photo-labels-google-apple.html?ref=axbom.com">find gorillas</a>, webcams <a href="https://www.youtube.com/watch?v=t4DT3tQqgRM&ref=axbom.com">unable to recognize dark-skinned faces</a>, and I'm sure there are many more examples that have been shared with me over the years.</p> | |||||
<h3 id="carbon-cost">Carbon cost</h3> | |||||
<blockquote><em>"The energy use is about 100 times greater than achieving a similar result with other tools."</em></blockquote> | |||||
<p>To be fair this is an intentionally provocative number, as OpenAI and other manufacturers will not disclose the energy use of their models. There are estimates claiming that one ChatGPT query costs (in money) 100x more than a Google search, or consumes 10x as much energy. And one ChatGPT session, to get the response you want, can be estimated at 10 prompts.<br><br>But in the end there are many examples of things that can be done in more environmentally friendly ways. For example, writing a speech for a wedding. The year of 2023 has truly become the year when people trust a computer more than themselves to write words for their loved ones. Another way to write a speech for a wedding is pen and paper, and from the heart 😊.</p> | |||||
<p>What we do know is that the energy required to source data, train the models, power the models and compute all the interactions with these tools is significant. With this in mind, it is apt to ask if every challenge really is looking for an AI solution. Will consumers perhaps come to see the phrase "AI-powered system" in the same light as "Diesel-Powered SUV".</p> | |||||
<h3 id="monoculture-and-power-concentration">Monoculture and power concentration</h3> | |||||
<blockquote><em>"The hammer is made by a small, western and wealthy subset of humanity – creating costly barriers to entry."</em></blockquote> | |||||
<p>Today, there are nearly 7,000 languages and dialects in the world. Around 7% of these are reflected in published online material. And 98% of the internet’s web pages are published in just 12 languages, more than half in English. When sourcing the entire Internet, that is still a small part of humanity.<br><br>An estimated 76% of the cyber population lives in Africa, Asia, the Middle East, Latin America and the Caribbean, most of the online content comes from elsewhere. Take Wikipedia, for example, where more than 80% of articles come from Europe and North America.<br><br>Now consider what content most AI tools are trained on.<br><br>Through the lens of a small subset of human experience and circumstance it is difficult to envision and foresee the multitudes of perspectives and fates that one new creation may influence. The homogenity of those who have been provided the capacity to make and create in the digital space means that it is primarily their mirror-images who benefit – with little thought for the wellbeing of those not visible inside the reflection.</p> | |||||
<p>When power is with a few, their own needs and concerns will naturally be top of mind and prioritized. The more their needs are prioritized, the more power they gain. Three million AI engineers is 0.0004% of the world's population.<br><br>The dominant actors in the AI space right now are primarily US-based. And the computing power required to build and maintain many of these tools is huge, ensuring that the power of influence will continue to rest with a few big tech actors.</p> | |||||
<h3 id="invisible-decision-making">Invisible decision-making</h3> | |||||
<blockquote><em>"Computations will 'estimate' your aim, tend to miss the nail and push for a different design. Often unnoticeably."</em></blockquote> | |||||
<p>The more complex the algorithms become, the harder they are to understand. As more people are involved, time passes, integrations with other systems are made and documentation is faulty, the further they deviate from human understanding. Many companies will hide proprietary code and evade scrutiny, sometimes themselves losing understanding of the full picture of how the code works. Decoding and understanding how decisions are made will be open to infinitely fewer beings.<br><br>And it doesn't stop there. This also affects autonomy. By obscuring decision-making processes (how, when, why decisions are made, what options are available and what personal data is shared) it is increasingly difficult for individuals to make properly informed choices in their own best interest.</p> | |||||
<h3 id="accountability-projection">Accountability projection</h3> | |||||
<blockquote><em>"If the hammer breaks and hurts someone, the manufacturer will claim the hammer has 'a mind of its own' and they can’t help you."</em></blockquote> | |||||
<p>I am fond of the term "Moral outsourcing" as <a href="https://www.ted.com/talks/rumman_chowdhury_moral_outsourcing_humanity_in_the_age_of_ai?ref=axbom.com">coined</a> by <a href="http://www.rummanchowdhury.com/?ref=axbom.com">Dr. Rumman Chowdhury</a>. It refers to how makers of AI manage to defer moral decision-making to machines, as if they themselves have no say in the output.</p> | |||||
<p>By using the phrase <em><em>accountability projection</em></em> I want to emphasise that organisations have a tendency not only to evade moral responsibility but also to project the very real accountability that must accompany the making of products and services. <em><em>Projection </em></em>is borrowed from psychology and refers to how manufacturers, and those who implement AI, wish to be free from guilt and project their own weakness onto something else – in this case the tool itself.</p> | |||||
<p>The framing of AI appears to give manufacturers and product owners a "get-out-of-jail free card" by projecting blame onto the entity they have produced, as if they have no control over what they are making. Imagine buying a washing machine that shrinks all your clothes, and the manufacturer being able to evade any accountability by claiming that the washing machine has a "mind of its own".</p> | |||||
<p>Machines aren't unethical, but the makers of machines can act unethically.</p> | |||||
<h3 id="jerry-building-misinformation">Jerry-building (Misinformation)</h3> | |||||
<blockquote><em>"Optimised for building elaborate structures that don’t hold up to scrutiny."</em></blockquote> | |||||
<p>The one harm that most everyone appears to be in agreement about is the abundance of misinformation that many of these tools will allow for at virtually no cost to bad actors. This is of course already happening. There is both the type of misinformation that troll farms now can happily generate by the masses and with perfect grammar in many languages, and also the type of misinformation that proliferates with the everyday use of these tools, and often unknowingly.</p> | |||||
<p>This second type of misinformation is generated and spread by the highest of educated professionals within the most valued realms of government and public services. The tools are just that good at appearing confident when expressing synthetic text in believable, flourished and seductive language.</p> | |||||
<p>One concern that does come up and is still looking for an answer is what will happen when the tools now begin to be "trained" with the texts that they themselves have generated.</p> | |||||
<h3 id="dataprivacy-breaches">Data/privacy breaches</h3> | |||||
<blockquote><em>"May reveal blueprints from other people using a hammer from the same manufacturer, or other personal data that happened to be part of its development."</em></blockquote> | |||||
<p>There are several ways personal data makes its way into the AI tools.</p> | |||||
<p>First, since the tools are often trained on data available online and in an unsupervised manner, personal data will actually make its way into the workings of the tools themselves. Data may have been inadvertently published online or may have been published for a specific purpose, rarely one that supports feeding an AI system and its plethora of outputs.</p> | |||||
<p>Second, personal data is actually entered into the tools by everyday users through negligent or inconsiderate use – data that at times is also stored and used by the tools.</p> | |||||
<p>Third, when many data points from many different sources are linked together in one tool they can reveal details of an individuals’ life that any single piece of information could not.</p> | |||||
<h3 id="moderator-trauma">Moderator trauma</h3> | |||||
<blockquote><em>"Low-wage moderators work around the clock watching filth and violence to ensure the hammer can’t be used to build brothels or torture chambers. Unless someone hacks it of course."</em></blockquote> | |||||
<p>In order for us to avoid seeing traumatitizing content when using many of these tools (such as physical violence, self-harm, child abuse, killings and torture) this content needs to be filtered out. In order for it to be filtered out, someone has to watch it. As it stands, the workers who perform this filtering are often exploited and suffer PTSD without adequate care for their wellbeing. Many of them have no idea what they are getting themselves into when they start the job.</p> | |||||
<blockquote class="kg-blockquote-alt"><strong>You can’t own it, but you can subscribe. Perpetually.</strong></blockquote> | |||||
<p>Yes, it's fair to point out that AI in its many different software manifestations can be considered a tool. But that is not the point of the statement. The word to watch out for is "just". If someone were to say ”it’s a tool”, that makes sense. But the word "just" is there to shed accountability.</p> | |||||
<p>Hence my concern is that the statement itself removes accountability and consideration for the bigger picture effects. Saying something is just a tool creates the faulty mental model of all tools having interchangeable qualities from an ethical perspective, which simply isn’t true.</p> | |||||
</article> | |||||
<hr> | |||||
<footer> | |||||
<p> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> • | |||||
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use> | |||||
</svg> Suivre</a> • | |||||
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use> | |||||
</svg> Pro</a> • | |||||
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use> | |||||
</svg> Email</a> • | |||||
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use> | |||||
</svg> Légal</abbr> | |||||
</p> | |||||
<template id="theme-selector"> | |||||
<form> | |||||
<fieldset> | |||||
<legend><svg class="icon icon-brightness-contrast"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use> | |||||
</svg> Thème</legend> | |||||
<label> | |||||
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto | |||||
</label> | |||||
<label> | |||||
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé | |||||
</label> | |||||
<label> | |||||
<input type="radio" value="light" name="chosen-color-scheme"> Clair | |||||
</label> | |||||
</fieldset> | |||||
</form> | |||||
</template> | |||||
</footer> | |||||
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script> | |||||
<script> | |||||
function loadThemeForm(templateName) { | |||||
const themeSelectorTemplate = document.querySelector(templateName) | |||||
const form = themeSelectorTemplate.content.firstElementChild | |||||
themeSelectorTemplate.replaceWith(form) | |||||
form.addEventListener('change', (e) => { | |||||
const chosenColorScheme = e.target.value | |||||
localStorage.setItem('theme', chosenColorScheme) | |||||
toggleTheme(chosenColorScheme) | |||||
}) | |||||
const selectedTheme = localStorage.getItem('theme') | |||||
if (selectedTheme && selectedTheme !== 'undefined') { | |||||
form.querySelector(`[value="${selectedTheme}"]`).checked = true | |||||
} | |||||
} | |||||
const prefersColorSchemeDark = '(prefers-color-scheme: dark)' | |||||
window.addEventListener('load', () => { | |||||
let hasDarkRules = false | |||||
for (const styleSheet of Array.from(document.styleSheets)) { | |||||
let mediaRules = [] | |||||
for (const cssRule of styleSheet.cssRules) { | |||||
if (cssRule.type !== CSSRule.MEDIA_RULE) { | |||||
continue | |||||
} | |||||
// WARNING: Safari does not have/supports `conditionText`. | |||||
if (cssRule.conditionText) { | |||||
if (cssRule.conditionText !== prefersColorSchemeDark) { | |||||
continue | |||||
} | |||||
} else { | |||||
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) { | |||||
continue | |||||
} | |||||
} | |||||
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules)) | |||||
} | |||||
// WARNING: do not try to insert a Rule to a styleSheet you are | |||||
// currently iterating on, otherwise the browser will be stuck | |||||
// in a infinite loop… | |||||
for (const mediaRule of mediaRules) { | |||||
styleSheet.insertRule(mediaRule.cssText) | |||||
hasDarkRules = true | |||||
} | |||||
} | |||||
if (hasDarkRules) { | |||||
loadThemeForm('#theme-selector') | |||||
} | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
title: If a hammer was like AI… | |||||
url: https://axbom.com/hammer-ai/ | |||||
hash_url: aac3c4716f9ff73e7409ecbc9550491b | |||||
<p><strong>A common argument I come across when talking about ethics in AI is that it's <em>just</em> a tool, and like any tool it can be used for good or for evil. One familiar declaration is this one: "It's really no different from a hammer". I was compelled to make a poster to address these claims. Steal it, share it, print it and use it where you see fit.</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://axbom.com/content/images/2023/06/axbom-hammer-ai-02.png" class="kg-image" alt="All topics in the poster are explained in the description below." loading="lazy" srcset="https://axbom.com/content/images/size/w600/2023/06/axbom-hammer-ai-02.png 600w, https://axbom.com/content/images/size/w1000/2023/06/axbom-hammer-ai-02.png 1000w, https://axbom.com/content/images/2023/06/axbom-hammer-ai-02.png 1599w" sizes="(min-width: 720px) 720px"><figcaption>The poster "If a hammer was like AI"</figcaption></figure><p>Note that this poster primarily addresses the features of generative AI and deep learning, which are the main technologies receiving attention in 2023.</p><h2 id="description-if-a-hammer-was-like-ai">Description: If a hammer was like AI</h2> | |||||
<h3 id="downloads">Downloads</h3> | |||||
<blockquote class="kg-blockquote-alt">It's just a tool!</blockquote><p>Now, as I have your attention, let me take this opportunity to break down what each of the topics in the poster refers to. These and more are also outlined in my infographic: <a href="https://axbom.com/elements">The Elements of AI Ethics</a>.</p> | |||||
<h3 id="obscured-data-theft">Obscured data theft</h3><blockquote><em>"It copies the design of most constructions in the western, industrialised world without consent and strives to mimic the most average one of those."</em></blockquote><p>To become as "good" as they are in their current form, many generative AI systems have been trained on vast amounts of data that were not intended for this purpose, and whose owners and makers were not asked for consent. The mere publishing of an article or image on the web does not imply it can be used by anyone for anything. Generative AI tools appear to be getting away with ignoring copyright.</p><p>At the same time there are many intricacies that law- and policymakers need to understand to do a good job of reasoning around infringements on rights or privileges. Images are for example not duplicated and stored, but rather used to feed a computational model, which is an argument often used by defenders to explain how generative AI is only "inspired" by the works of others and not "copying". There are several ongoing legal cases challenging this view.</p> | |||||
<h3 id="bias-injustice">Bias & injustice</h3><blockquote><em>"By design, the hammer will most often just hit the thumb of Black, Brown and underserved people."</em></blockquote><p>One inherent property of AI is its ability to act as an accelerator of other harms. By being trained on large amounts of data (often unsupervised) – that inevitably contains biases, abandoned values and prejudiced commentary – these will be reproduced in any output. It is likely that this will even happen unnoticeably (especially when not actively monitored) since many biases are subtle and embedded in common language. And at other times it will happen quite clearly, with bots spewing toxic, misogynistic and racist content.</p><p>Because of systemic issues and the fact that bias becomes embedded in these tools, these biases will have dire consequences for people who are already disempowered. Scoring systems are often used by automated decision-making tools and these scores can for example affect job opportunities, welfare/housing eligibility and judicial outcomes.</p><p>No, this does not mean that the hammer has a <em>mind of its own</em>. It means that the hammer is built in a way that has inherent biases which will tend to disfavor people who are already underserved and disenfranchised. AI tools will for example <a href="https://www.bbc.com/news/technology-63228466?ref=axbom.com">fail to reduce bias in recruitment</a>, and contribute to racist and sexist <a href="https://www.fastcompany.com/90844066/chatgpt-write-performance-reviews-sexist-and-racist?ref=axbom.com">performance reviews</a>.</p><p>It's relevant to compare this topic with a touchless soap dispenser <a href="https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773?ref=axbom.com">that won't react to dark skin</a>. It's not the fault of the user that it does not react, it's the fault of the manufacturer and how it was built. It doesn't "act that way" because it has a mind, but because the manufacturing and design process was unmindful. You can't tell the user to educate themself about using it to make it work better. See also <a href="https://blog.twitter.com/engineering/en_us/topics/insights/2021/sharing-learnings-about-our-image-cropping-algorithm?ref=axbom.com">Twitter's image cropping algorithm</a>, Google's "inability" to <a href="https://www.nytimes.com/2023/05/22/technology/ai-photo-labels-google-apple.html?ref=axbom.com">find gorillas</a>, webcams <a href="https://www.youtube.com/watch?v=t4DT3tQqgRM&ref=axbom.com">unable to recognize dark-skinned faces</a>, and I'm sure there are many more examples that have been shared with me over the years.</p> | |||||
<h3 id="carbon-cost">Carbon cost</h3><blockquote><em>"The energy use is about 100 times greater than achieving a similar result with other tools."</em></blockquote><p>To be fair this is an intentionally provocative number, as OpenAI and other manufacturers will not disclose the energy use of their models. There are estimates claiming that one ChatGPT query costs (in money) 100x more than a Google search, or consumes 10x as much energy. And one ChatGPT session, to get the response you want, can be estimated at 10 prompts.<br><br>But in the end there are many examples of things that can be done in more environmentally friendly ways. For example, writing a speech for a wedding. The year of 2023 has truly become the year when people trust a computer more than themselves to write words for their loved ones. Another way to write a speech for a wedding is pen and paper, and from the heart 😊.</p><p>What we do know is that the energy required to source data, train the models, power the models and compute all the interactions with these tools is significant. With this in mind, it is apt to ask if every challenge really is looking for an AI solution. Will consumers perhaps come to see the phrase "AI-powered system" in the same light as "Diesel-Powered SUV".</p> | |||||
<h3 id="monoculture-and-power-concentration">Monoculture and power concentration</h3><blockquote><em>"The hammer is made by a small, western and wealthy subset of humanity – creating costly barriers to entry."</em></blockquote><p>Today, there are nearly 7,000 languages and dialects in the world. Around 7% of these are reflected in published online material. And 98% of the internet’s web pages are published in just 12 languages, more than half in English. When sourcing the entire Internet, that is still a small part of humanity.<br><br>An estimated 76% of the cyber population lives in Africa, Asia, the Middle East, Latin America and the Caribbean, most of the online content comes from elsewhere. Take Wikipedia, for example, where more than 80% of articles come from Europe and North America.<br><br>Now consider what content most AI tools are trained on.<br><br>Through the lens of a small subset of human experience and circumstance it is difficult to envision and foresee the multitudes of perspectives and fates that one new creation may influence. The homogenity of those who have been provided the capacity to make and create in the digital space means that it is primarily their mirror-images who benefit – with little thought for the wellbeing of those not visible inside the reflection.</p><p>When power is with a few, their own needs and concerns will naturally be top of mind and prioritized. The more their needs are prioritized, the more power they gain. Three million AI engineers is 0.0004% of the world's population.<br><br>The dominant actors in the AI space right now are primarily US-based. And the computing power required to build and maintain many of these tools is huge, ensuring that the power of influence will continue to rest with a few big tech actors.</p> | |||||
<h3 id="invisible-decision-making">Invisible decision-making</h3><blockquote><em>"Computations will 'estimate' your aim, tend to miss the nail and push for a different design. Often unnoticeably."</em></blockquote><p>The more complex the algorithms become, the harder they are to understand. As more people are involved, time passes, integrations with other systems are made and documentation is faulty, the further they deviate from human understanding. Many companies will hide proprietary code and evade scrutiny, sometimes themselves losing understanding of the full picture of how the code works. Decoding and understanding how decisions are made will be open to infinitely fewer beings.<br><br>And it doesn't stop there. This also affects autonomy. By obscuring decision-making processes (how, when, why decisions are made, what options are available and what personal data is shared) it is increasingly difficult for individuals to make properly informed choices in their own best interest.</p> | |||||
<h3 id="accountability-projection">Accountability projection</h3><blockquote><em>"If the hammer breaks and hurts someone, the manufacturer will claim the hammer has 'a mind of its own' and they can’t help you."</em></blockquote><p>I am fond of the term "Moral outsourcing" as <a href="https://www.ted.com/talks/rumman_chowdhury_moral_outsourcing_humanity_in_the_age_of_ai?ref=axbom.com">coined</a> by <a href="http://www.rummanchowdhury.com/?ref=axbom.com">Dr. Rumman Chowdhury</a>. It refers to how makers of AI manage to defer moral decision-making to machines, as if they themselves have no say in the output.</p><p>By using the phrase <em><em>accountability projection</em></em> I want to emphasise that organisations have a tendency not only to evade moral responsibility but also to project the very real accountability that must accompany the making of products and services. <em><em>Projection </em></em>is borrowed from psychology and refers to how manufacturers, and those who implement AI, wish to be free from guilt and project their own weakness onto something else – in this case the tool itself.</p><p>The framing of AI appears to give manufacturers and product owners a "get-out-of-jail free card" by projecting blame onto the entity they have produced, as if they have no control over what they are making. Imagine buying a washing machine that shrinks all your clothes, and the manufacturer being able to evade any accountability by claiming that the washing machine has a "mind of its own".</p><p>Machines aren't unethical, but the makers of machines can act unethically.</p> | |||||
<h3 id="jerry-building-misinformation">Jerry-building (Misinformation)</h3><blockquote><em>"Optimised for building elaborate structures that don’t hold up to scrutiny."</em></blockquote><p>The one harm that most everyone appears to be in agreement about is the abundance of misinformation that many of these tools will allow for at virtually no cost to bad actors. This is of course already happening. There is both the type of misinformation that troll farms now can happily generate by the masses and with perfect grammar in many languages, and also the type of misinformation that proliferates with the everyday use of these tools, and often unknowingly.</p><p>This second type of misinformation is generated and spread by the highest of educated professionals within the most valued realms of government and public services. The tools are just that good at appearing confident when expressing synthetic text in believable, flourished and seductive language.</p><p>One concern that does come up and is still looking for an answer is what will happen when the tools now begin to be "trained" with the texts that they themselves have generated.</p> | |||||
<h3 id="dataprivacy-breaches">Data/privacy breaches</h3><blockquote><em>"May reveal blueprints from other people using a hammer from the same manufacturer, or other personal data that happened to be part of its development."</em></blockquote><p>There are several ways personal data makes its way into the AI tools.</p><p>First, since the tools are often trained on data available online and in an unsupervised manner, personal data will actually make its way into the workings of the tools themselves. Data may have been inadvertently published online or may have been published for a specific purpose, rarely one that supports feeding an AI system and its plethora of outputs.</p><p>Second, personal data is actually entered into the tools by everyday users through negligent or inconsiderate use – data that at times is also stored and used by the tools.</p><p>Third, when many data points from many different sources are linked together in one tool they can reveal details of an individuals’ life that any single piece of information could not.</p> | |||||
<h3 id="moderator-trauma">Moderator trauma</h3><blockquote><em>"Low-wage moderators work around the clock watching filth and violence to ensure the hammer can’t be used to build brothels or torture chambers. Unless someone hacks it of course."</em></blockquote><p>In order for us to avoid seeing traumatitizing content when using many of these tools (such as physical violence, self-harm, child abuse, killings and torture) this content needs to be filtered out. In order for it to be filtered out, someone has to watch it. As it stands, the workers who perform this filtering are often exploited and suffer PTSD without adequate care for their wellbeing. Many of them have no idea what they are getting themselves into when they start the job.</p><blockquote class="kg-blockquote-alt"><strong>You can’t own it, but you can subscribe. Perpetually.</strong></blockquote><p>Yes, it's fair to point out that AI in its many different software manifestations can be considered a tool. But that is not the point of the statement. The word to watch out for is "just". If someone were to say ”it’s a tool”, that makes sense. But the word "just" is there to shed accountability.</p><p>Hence my concern is that the statement itself removes accountability and consideration for the bigger picture effects. Saying something is just a tool creates the faulty mental model of all tools having interchangeable qualities from an ethical perspective, which simply isn’t true.</p> |
<!doctype html><!-- This is a valid HTML5 document. --> | |||||
<!-- Screen readers, SEO, extensions and so on. --> | |||||
<html lang="fr"> | |||||
<!-- Has to be within the first 1024 bytes, hence before the `title` element | |||||
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset --> | |||||
<meta charset="utf-8"> | |||||
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 --> | |||||
<!-- The viewport meta is quite crowded and we are responsible for that. | |||||
See: https://codepen.io/tigt/post/meta-viewport-for-2015 --> | |||||
<meta name="viewport" content="width=device-width,initial-scale=1"> | |||||
<!-- Required to make a valid HTML5 document. --> | |||||
<title>Multi-page web apps (archive) — David Larlet</title> | |||||
<meta name="description" content="Publication mise en cache pour en conserver une trace."> | |||||
<!-- That good ol' feed, subscribe :). --> | |||||
<link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/"> | |||||
<!-- Generated from https://realfavicongenerator.net/ such a mess. --> | |||||
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png"> | |||||
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png"> | |||||
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png"> | |||||
<link rel="manifest" href="/static/david/icons2/site.webmanifest"> | |||||
<link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c"> | |||||
<link rel="shortcut icon" href="/static/david/icons2/favicon.ico"> | |||||
<meta name="msapplication-TileColor" content="#f7f7f7"> | |||||
<meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml"> | |||||
<meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)"> | |||||
<meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)"> | |||||
<!-- Documented, feel free to shoot an email. --> | |||||
<link rel="stylesheet" href="/static/david/css/style_2021-01-20.css"> | |||||
<!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. --> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin> | |||||
<script> | |||||
function toggleTheme(themeName) { | |||||
document.documentElement.classList.toggle( | |||||
'forced-dark', | |||||
themeName === 'dark' | |||||
) | |||||
document.documentElement.classList.toggle( | |||||
'forced-light', | |||||
themeName === 'light' | |||||
) | |||||
} | |||||
const selectedTheme = localStorage.getItem('theme') | |||||
if (selectedTheme !== 'undefined') { | |||||
toggleTheme(selectedTheme) | |||||
} | |||||
</script> | |||||
<meta name="robots" content="noindex, nofollow"> | |||||
<meta content="origin-when-cross-origin" name="referrer"> | |||||
<!-- Canonical URL for SEO purposes --> | |||||
<link rel="canonical" href="https://adactio.com/journal/20442"> | |||||
<body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all"> | |||||
<article> | |||||
<header> | |||||
<h1>Multi-page web apps</h1> | |||||
</header> | |||||
<nav> | |||||
<p class="center"> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> • | |||||
<a href="https://adactio.com/journal/20442" title="Lien vers le contenu original">Source originale</a> | |||||
</p> | |||||
</nav> | |||||
<hr> | |||||
<p>I received this email recently:</p> | |||||
<blockquote> | |||||
<p>Subject: multi-page web apps</p> | |||||
<p>Hi Jeremy,</p> | |||||
<p>lately I’ve been following you through videos and texts and I’m curious as to why you advocate the use of multi-page web apps and not single-page ones.</p> | |||||
<p>Perhaps you can refer me to some sources where your position and reasoning is evident?</p> | |||||
</blockquote> | |||||
<p>Here’s the response I sent…</p> | |||||
<p>Hi,</p> | |||||
<p>You can find a lot of my reasoning laid out in this (short and free) online book I wrote called Resilient Web Design:</p> | |||||
<p><a href="https://resilientwebdesign.com/">https://resilientwebdesign.com/</a></p> | |||||
<p>The short answer to your question is this: user experience.</p> | |||||
<p>The slightly longer answer…</p> | |||||
<p>For most use cases, a website (or multi-page app if you prefer) is going to provide the most robust experience for the most number of users. That’s because a user’s web browser takes care of most of the heavy lifting.</p> | |||||
<p>Navigating from one page to another? That’s taken care of with links.</p> | |||||
<p>Gathering information from a user to process on a server? That’s taken care of with forms.</p> | |||||
<p>This frees me up to concentrate on the content and the design without having to reinvent the wheels of links and form fields.</p> | |||||
<p>These (let’s call them) multi-page apps are stateless, and for most use cases that’s absolutely fine.</p> | |||||
<p>There are some cases where you’d want a state to persist across pages. Let’s say you’re playing a song, or a podcast episode. Ideally you’d want that player to continue seamlessly playing even as the user navigates around the site. In that situation, a single-page app would be a suitable architecture.</p> | |||||
<p>But that architecture comes at a cost. Now you’ve got stop the browser doing what it would normally do with links and forms. It’s up to you to recreate that functionality. And you can’t do it with HTML, a robust fault-tolerant declarative language. You need to reimplement all that functionality in JavaScript, a less tolerant, more brittle language.</p> | |||||
<p>Then you’ve got to ship all that code to the user before they can use your site. It might be JavaScript code you’ve written yourself or it might be a third-party library designed for building single-page apps. Either way, the user pays a download tax (and a parsing tax, and an execution tax). Whereas with links and forms, all of that functionality is pre-bundled into the user’s web browser.</p> | |||||
<p>So that’s my reasoning. At least nine times out of ten, a multi-page approach is leaner, more robust, and simpler.</p> | |||||
<p>Like I said, there are times when a single-page approach makes sense—it all comes down to whether state needs to be constantly preserved. But these use cases are the exceptions, not the rule.</p> | |||||
<p>That’s why I find the framing of your question a little concerning. It should be inverted. The default approach should be to assume a multi-page approach (which is the way the web works by default). Deciding to take a JavaScript-driven single-page approach should be the exception.</p> | |||||
<p>It’s kind of like when people ask, “Why don’t you have children?” Surely the decision to <em>have</em> a child should require deliberation and commitment, rather than the other way around.</p> | |||||
<p>When it comes to front-end development, I’m worried that we’ve reached a state where the more complex over-engineered approach is viewed as the default.</p> | |||||
<p>I may be committing a fundamental attribution error here, but I think that we’ve reached this point not because of any consideration for users, but rather because of how it makes us developers feel. Perhaps building an old-fashioned website that uses HTML for navigations feels too easy, like it’s beneath us. But building an “app” that requires JavaScript just to render text on a screen feels like <em>real</em> programming.</p> | |||||
<p>I hope I’m wrong. I hope that other developers will start to consider user experience first and foremost when making architectural decisions.</p> | |||||
<p>Anyway. That’s my answer. User experience.</p> | |||||
<p>Cheers,</p> | |||||
<p>Jeremy</p> | |||||
</article> | |||||
<hr> | |||||
<footer> | |||||
<p> | |||||
<a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use> | |||||
</svg> Accueil</a> • | |||||
<a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use> | |||||
</svg> Suivre</a> • | |||||
<a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use> | |||||
</svg> Pro</a> • | |||||
<a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use> | |||||
</svg> Email</a> • | |||||
<abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use> | |||||
</svg> Légal</abbr> | |||||
</p> | |||||
<template id="theme-selector"> | |||||
<form> | |||||
<fieldset> | |||||
<legend><svg class="icon icon-brightness-contrast"> | |||||
<use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use> | |||||
</svg> Thème</legend> | |||||
<label> | |||||
<input type="radio" value="auto" name="chosen-color-scheme" checked> Auto | |||||
</label> | |||||
<label> | |||||
<input type="radio" value="dark" name="chosen-color-scheme"> Foncé | |||||
</label> | |||||
<label> | |||||
<input type="radio" value="light" name="chosen-color-scheme"> Clair | |||||
</label> | |||||
</fieldset> | |||||
</form> | |||||
</template> | |||||
</footer> | |||||
<script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script> | |||||
<script> | |||||
function loadThemeForm(templateName) { | |||||
const themeSelectorTemplate = document.querySelector(templateName) | |||||
const form = themeSelectorTemplate.content.firstElementChild | |||||
themeSelectorTemplate.replaceWith(form) | |||||
form.addEventListener('change', (e) => { | |||||
const chosenColorScheme = e.target.value | |||||
localStorage.setItem('theme', chosenColorScheme) | |||||
toggleTheme(chosenColorScheme) | |||||
}) | |||||
const selectedTheme = localStorage.getItem('theme') | |||||
if (selectedTheme && selectedTheme !== 'undefined') { | |||||
form.querySelector(`[value="${selectedTheme}"]`).checked = true | |||||
} | |||||
} | |||||
const prefersColorSchemeDark = '(prefers-color-scheme: dark)' | |||||
window.addEventListener('load', () => { | |||||
let hasDarkRules = false | |||||
for (const styleSheet of Array.from(document.styleSheets)) { | |||||
let mediaRules = [] | |||||
for (const cssRule of styleSheet.cssRules) { | |||||
if (cssRule.type !== CSSRule.MEDIA_RULE) { | |||||
continue | |||||
} | |||||
// WARNING: Safari does not have/supports `conditionText`. | |||||
if (cssRule.conditionText) { | |||||
if (cssRule.conditionText !== prefersColorSchemeDark) { | |||||
continue | |||||
} | |||||
} else { | |||||
if (cssRule.cssText.startsWith(prefersColorSchemeDark)) { | |||||
continue | |||||
} | |||||
} | |||||
mediaRules = mediaRules.concat(Array.from(cssRule.cssRules)) | |||||
} | |||||
// WARNING: do not try to insert a Rule to a styleSheet you are | |||||
// currently iterating on, otherwise the browser will be stuck | |||||
// in a infinite loop… | |||||
for (const mediaRule of mediaRules) { | |||||
styleSheet.insertRule(mediaRule.cssText) | |||||
hasDarkRules = true | |||||
} | |||||
} | |||||
if (hasDarkRules) { | |||||
loadThemeForm('#theme-selector') | |||||
} | |||||
}) | |||||
</script> | |||||
</body> | |||||
</html> |
title: Multi-page web apps | |||||
url: https://adactio.com/journal/20442 | |||||
hash_url: efc348f6559d55129657c7ba9d740b76 | |||||
<p>I received this email recently:</p> | |||||
<blockquote> | |||||
<p>Subject: multi-page web apps</p> | |||||
<p>Hi Jeremy,</p> | |||||
<p>lately I’ve been following you through videos and texts and I’m curious as to why you advocate the use of multi-page web apps and not single-page ones.</p> | |||||
<p>Perhaps you can refer me to some sources where your position and reasoning is evident?</p> | |||||
</blockquote> | |||||
<p>Here’s the response I sent…</p> | |||||
<p>Hi,</p> | |||||
<p>You can find a lot of my reasoning laid out in this (short and free) online book I wrote called Resilient Web Design:</p> | |||||
<p><a href="https://resilientwebdesign.com/">https://resilientwebdesign.com/</a></p> | |||||
<p>The short answer to your question is this: user experience.</p> | |||||
<p>The slightly longer answer…</p> | |||||
<p>For most use cases, a website (or multi-page app if you prefer) is going to provide the most robust experience for the most number of users. That’s because a user’s web browser takes care of most of the heavy lifting.</p> | |||||
<p>Navigating from one page to another? That’s taken care of with links.</p> | |||||
<p>Gathering information from a user to process on a server? That’s taken care of with forms.</p> | |||||
<p>This frees me up to concentrate on the content and the design without having to reinvent the wheels of links and form fields.</p> | |||||
<p>These (let’s call them) multi-page apps are stateless, and for most use cases that’s absolutely fine.</p> | |||||
<p>There are some cases where you’d want a state to persist across pages. Let’s say you’re playing a song, or a podcast episode. Ideally you’d want that player to continue seamlessly playing even as the user navigates around the site. In that situation, a single-page app would be a suitable architecture.</p> | |||||
<p>But that architecture comes at a cost. Now you’ve got stop the browser doing what it would normally do with links and forms. It’s up to you to recreate that functionality. And you can’t do it with HTML, a robust fault-tolerant declarative language. You need to reimplement all that functionality in JavaScript, a less tolerant, more brittle language.</p> | |||||
<p>Then you’ve got to ship all that code to the user before they can use your site. It might be JavaScript code you’ve written yourself or it might be a third-party library designed for building single-page apps. Either way, the user pays a download tax (and a parsing tax, and an execution tax). Whereas with links and forms, all of that functionality is pre-bundled into the user’s web browser.</p> | |||||
<p>So that’s my reasoning. At least nine times out of ten, a multi-page approach is leaner, more robust, and simpler.</p> | |||||
<p>Like I said, there are times when a single-page approach makes sense—it all comes down to whether state needs to be constantly preserved. But these use cases are the exceptions, not the rule.</p> | |||||
<p>That’s why I find the framing of your question a little concerning. It should be inverted. The default approach should be to assume a multi-page approach (which is the way the web works by default). Deciding to take a JavaScript-driven single-page approach should be the exception.</p> | |||||
<p>It’s kind of like when people ask, “Why don’t you have children?” Surely the decision to <em>have</em> a child should require deliberation and commitment, rather than the other way around.</p> | |||||
<p>When it comes to front-end development, I’m worried that we’ve reached a state where the more complex over-engineered approach is viewed as the default.</p> | |||||
<p>I may be committing a fundamental attribution error here, but I think that we’ve reached this point not because of any consideration for users, but rather because of how it makes us developers feel. Perhaps building an old-fashioned website that uses HTML for navigations feels too easy, like it’s beneath us. But building an “app” that requires JavaScript just to render text on a screen feels like <em>real</em> programming.</p> | |||||
<p>I hope I’m wrong. I hope that other developers will start to consider user experience first and foremost when making architectural decisions.</p> | |||||
<p>Anyway. That’s my answer. User experience.</p> | |||||
<p>Cheers,</p> | |||||
<p>Jeremy</p> | |||||
<li><a href="/david/cache/2022/1676902071b6e1e7e0d3395bc47956b5/" title="Accès à l’article dans le cache local : Adding ActivityPub to your static site">Adding ActivityPub to your static site</a> (<a href="https://paul.kinlan.me/adding-activity-pub-to-your-static-site/" title="Accès à l’article original distant : Adding ActivityPub to your static site">original</a>)</li> | <li><a href="/david/cache/2022/1676902071b6e1e7e0d3395bc47956b5/" title="Accès à l’article dans le cache local : Adding ActivityPub to your static site">Adding ActivityPub to your static site</a> (<a href="https://paul.kinlan.me/adding-activity-pub-to-your-static-site/" title="Accès à l’article original distant : Adding ActivityPub to your static site">original</a>)</li> | ||||
<li><a href="/david/cache/2022/aac3c4716f9ff73e7409ecbc9550491b/" title="Accès à l’article dans le cache local : If a hammer was like AI…">If a hammer was like AI…</a> (<a href="https://axbom.com/hammer-ai/" title="Accès à l’article original distant : If a hammer was like AI…">original</a>)</li> | |||||
<li><a href="/david/cache/2022/ee7eb9c245d1b2c4b91b8dda4cd7d318/" title="Accès à l’article dans le cache local : Benjamin Hennot : Interview">Benjamin Hennot : Interview</a> (<a href="https://www.rayonvertcinema.org/benjamin-hennot-interview/" title="Accès à l’article original distant : Benjamin Hennot : Interview">original</a>)</li> | <li><a href="/david/cache/2022/ee7eb9c245d1b2c4b91b8dda4cd7d318/" title="Accès à l’article dans le cache local : Benjamin Hennot : Interview">Benjamin Hennot : Interview</a> (<a href="https://www.rayonvertcinema.org/benjamin-hennot-interview/" title="Accès à l’article original distant : Benjamin Hennot : Interview">original</a>)</li> | ||||
<li><a href="/david/cache/2022/927159a754f4d7d9e176f5f8397dbf02/" title="Accès à l’article dans le cache local : ce qui est passé">ce qui est passé</a> (<a href="https://www.la-grange.net/2023/01/07/passe" title="Accès à l’article original distant : ce qui est passé">original</a>)</li> | <li><a href="/david/cache/2022/927159a754f4d7d9e176f5f8397dbf02/" title="Accès à l’article dans le cache local : ce qui est passé">ce qui est passé</a> (<a href="https://www.la-grange.net/2023/01/07/passe" title="Accès à l’article original distant : ce qui est passé">original</a>)</li> | ||||
<li><a href="/david/cache/2022/c564325b28ec854b6b098950df5c8c8f/" title="Accès à l’article dans le cache local : weathering software winter">weathering software winter</a> (<a href="https://100r.co/site/weathering_software_winter.html" title="Accès à l’article original distant : weathering software winter">original</a>)</li> | <li><a href="/david/cache/2022/c564325b28ec854b6b098950df5c8c8f/" title="Accès à l’article dans le cache local : weathering software winter">weathering software winter</a> (<a href="https://100r.co/site/weathering_software_winter.html" title="Accès à l’article original distant : weathering software winter">original</a>)</li> | ||||
<li><a href="/david/cache/2022/efc348f6559d55129657c7ba9d740b76/" title="Accès à l’article dans le cache local : Multi-page web apps">Multi-page web apps</a> (<a href="https://adactio.com/journal/20442" title="Accès à l’article original distant : Multi-page web apps">original</a>)</li> | |||||
<li><a href="/david/cache/2022/c9441324cd8ba32c33817cdbc720bfda/" title="Accès à l’article dans le cache local : Grande Traversée du Poisson Blanc 2023">Grande Traversée du Poisson Blanc 2023</a> (<a href="https://poissonblanc.ca/experiences/la-grande-traversee/" title="Accès à l’article original distant : Grande Traversée du Poisson Blanc 2023">original</a>)</li> | <li><a href="/david/cache/2022/c9441324cd8ba32c33817cdbc720bfda/" title="Accès à l’article dans le cache local : Grande Traversée du Poisson Blanc 2023">Grande Traversée du Poisson Blanc 2023</a> (<a href="https://poissonblanc.ca/experiences/la-grande-traversee/" title="Accès à l’article original distant : Grande Traversée du Poisson Blanc 2023">original</a>)</li> | ||||
<li><a href="/david/cache/2022/29dac969af1faa8ba0338a2e7e59ebbd/" title="Accès à l’article dans le cache local : A notification center for progress bars that sounds like birdsong">A notification center for progress bars that sounds like birdsong</a> (<a href="https://interconnected.org/home/2023/02/10/progress" title="Accès à l’article original distant : A notification center for progress bars that sounds like birdsong">original</a>)</li> | <li><a href="/david/cache/2022/29dac969af1faa8ba0338a2e7e59ebbd/" title="Accès à l’article dans le cache local : A notification center for progress bars that sounds like birdsong">A notification center for progress bars that sounds like birdsong</a> (<a href="https://interconnected.org/home/2023/02/10/progress" title="Accès à l’article original distant : A notification center for progress bars that sounds like birdsong">original</a>)</li> | ||||
<li><a href="/david/cache/2022/8be5d8a651e8f8e211cfe10fd49bb3f0/" title="Accès à l’article dans le cache local : Pluralistic: Autoenshittification (24 July 2023)">Pluralistic: Autoenshittification (24 July 2023)</a> (<a href="https://pluralistic.net/2023/07/24/rent-to-pwn/" title="Accès à l’article original distant : Pluralistic: Autoenshittification (24 July 2023)">original</a>)</li> | <li><a href="/david/cache/2022/8be5d8a651e8f8e211cfe10fd49bb3f0/" title="Accès à l’article dans le cache local : Pluralistic: Autoenshittification (24 July 2023)">Pluralistic: Autoenshittification (24 July 2023)</a> (<a href="https://pluralistic.net/2023/07/24/rent-to-pwn/" title="Accès à l’article original distant : Pluralistic: Autoenshittification (24 July 2023)">original</a>)</li> | ||||
<li><a href="/david/cache/2022/5a9fa7db62f151b8a863b949ed4e9e5f/" title="Accès à l’article dans le cache local : How teams remember">How teams remember</a> (<a href="https://gilest.org/htr.html" title="Accès à l’article original distant : How teams remember">original</a>)</li> | |||||
<li><a href="/david/cache/2022/3ca10b945c7517c2f234e3b9534bfb6d/" title="Accès à l’article dans le cache local : Software Maxims">Software Maxims</a> (<a href="https://www.softwaremaxims.com/blog/not-a-supplier" title="Accès à l’article original distant : Software Maxims">original</a>)</li> | <li><a href="/david/cache/2022/3ca10b945c7517c2f234e3b9534bfb6d/" title="Accès à l’article dans le cache local : Software Maxims">Software Maxims</a> (<a href="https://www.softwaremaxims.com/blog/not-a-supplier" title="Accès à l’article original distant : Software Maxims">original</a>)</li> | ||||
<li><a href="/david/cache/2022/25d41d569f637f8342c495139ccce8a8/" title="Accès à l’article dans le cache local : Stupeur et tremblements : comment faire fuir les développeuses expérimentées.">Stupeur et tremblements : comment faire fuir les développeuses expérimentées.</a> (<a href="https://www.duchess-france.fr/coup%20de%20gueule/sexisme/2023/03/06/stupeur-et-trembements.html" title="Accès à l’article original distant : Stupeur et tremblements : comment faire fuir les développeuses expérimentées.">original</a>)</li> | <li><a href="/david/cache/2022/25d41d569f637f8342c495139ccce8a8/" title="Accès à l’article dans le cache local : Stupeur et tremblements : comment faire fuir les développeuses expérimentées.">Stupeur et tremblements : comment faire fuir les développeuses expérimentées.</a> (<a href="https://www.duchess-france.fr/coup%20de%20gueule/sexisme/2023/03/06/stupeur-et-trembements.html" title="Accès à l’article original distant : Stupeur et tremblements : comment faire fuir les développeuses expérimentées.">original</a>)</li> | ||||
<li><a href="/david/cache/2022/096a44a83d8d3f2bdfd21e3d378e4719/" title="Accès à l’article dans le cache local : Aller voir les aurores boréales en train">Aller voir les aurores boréales en train</a> (<a href="https://blog.professeurjoachim.com/billet/2023-03-31-aller-voir-les-aurores-boreales-en-train" title="Accès à l’article original distant : Aller voir les aurores boréales en train">original</a>)</li> | <li><a href="/david/cache/2022/096a44a83d8d3f2bdfd21e3d378e4719/" title="Accès à l’article dans le cache local : Aller voir les aurores boréales en train">Aller voir les aurores boréales en train</a> (<a href="https://blog.professeurjoachim.com/billet/2023-03-31-aller-voir-les-aurores-boreales-en-train" title="Accès à l’article original distant : Aller voir les aurores boréales en train">original</a>)</li> | ||||
<li><a href="/david/cache/2022/37b0c9d01d6f788bee398b64377cb6c1/" title="Accès à l’article dans le cache local : Propriété par Fanny Cheung">Propriété par Fanny Cheung</a> (<a href="https://ynote.hk/mots/argent/propriete.html" title="Accès à l’article original distant : Propriété par Fanny Cheung">original</a>)</li> | |||||
<li><a href="/david/cache/2022/acb867f0c6a744d9a06cd82cd9da002e/" title="Accès à l’article dans le cache local : Which emoji scissors close">Which emoji scissors close</a> (<a href="https://wh0.github.io/2020/01/02/scissors.html" title="Accès à l’article original distant : Which emoji scissors close">original</a>)</li> | <li><a href="/david/cache/2022/acb867f0c6a744d9a06cd82cd9da002e/" title="Accès à l’article dans le cache local : Which emoji scissors close">Which emoji scissors close</a> (<a href="https://wh0.github.io/2020/01/02/scissors.html" title="Accès à l’article original distant : Which emoji scissors close">original</a>)</li> | ||||
<li><a href="/david/cache/2022/4b5bae499ad13fe0f5413d8c7b77c09a/" title="Accès à l’article dans le cache local : Understanding A Protocol">Understanding A Protocol</a> (<a href="https://aeracode.org/2022/12/05/understanding-a-protocol/" title="Accès à l’article original distant : Understanding A Protocol">original</a>)</li> | <li><a href="/david/cache/2022/4b5bae499ad13fe0f5413d8c7b77c09a/" title="Accès à l’article dans le cache local : Understanding A Protocol">Understanding A Protocol</a> (<a href="https://aeracode.org/2022/12/05/understanding-a-protocol/" title="Accès à l’article original distant : Understanding A Protocol">original</a>)</li> |