123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- <!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>
- Quiz
- — David Larlet</title>
- <meta name="description" content="On aimerait pouvoir faire des quiz.">
- <!-- 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)">
- <!-- Is that even respected? Retrospectively? What a shAItshow…
- https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
- <meta name="robots" content="noai, noimageai">
- <!-- Documented, feel free to shoot an email. -->
- <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
- <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
- <link rel="preload"
- href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2"
- as="font"
- type="font/woff2"
- media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
- crossorigin>
- <link rel="preload"
- href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2"
- as="font"
- type="font/woff2"
- media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
- crossorigin>
- <link rel="preload"
- href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2"
- as="font"
- type="font/woff2"
- media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
- crossorigin>
- <link rel="preload"
- href="/static/david/css/fonts/triplicate_t3_regular.woff2"
- as="font"
- type="font/woff2"
- media="(prefers-color-scheme: dark)"
- crossorigin>
- <link rel="preload"
- href="/static/david/css/fonts/triplicate_t3_bold.woff2"
- as="font"
- type="font/woff2"
- media="(prefers-color-scheme: dark)"
- crossorigin>
- <link rel="preload"
- href="/static/david/css/fonts/triplicate_t3_italic.woff2"
- as="font"
- type="font/woff2"
- media="(prefers-color-scheme: dark)"
- crossorigin>
- <script>
- function toggleTheme(themeName) {
- document.documentElement.classList.toggle(
- 'forced-dark',
- themeName === 'dark'
- )
- document.documentElement.classList.toggle(
- 'forced-light',
- themeName === 'light'
- )
- }
- const selectedTheme = localStorage.getItem('theme')
- if (selectedTheme !== 'undefined') {
- toggleTheme(selectedTheme)
- }
- </script>
-
- <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick"
- data-instant-intensity="viewport-all">
-
- <article>
- <header>
- <h1>Quiz</h1>
- </header>
- <nav>
- <p class="center">
-
- <a rel="prev"
- href="/david/2023/02/13/"
- title="Publication précédente : Livre">← Précédent</a> •
-
- <nobr>
- <a href="/david/" title="Aller à l’accueil" rel="up">
- <svg class="icon icon-home">
- <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
- </svg>
- Accueil</a>
- </nobr>
- •
- <nobr>
- <a href="/david/recherche/"
- title="Aller à la page de recherche"
- rel="search">
- <svg class="icon icon-search">
- <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-search"></use>
- </svg>
- Recherche</a>
- </nobr>
-
- • <a rel="next"
- href="/david/2023/02/25/"
- title="Publication suivante : Transmission">Suivant →</a>
-
- </p>
- </nav>
- <hr>
-
-
- <blockquote>
- <p>On aimerait pouvoir faire des quiz.</p>
- </blockquote>
- <p>Il y a 20 ans, j’aurais commencé à modéliser cela dans une base de données relationnelles avec les bons index et tout.</p>
- <p>Il y a 15 ans, j’aurais essayé de représenter cela avec des données liées et du RDF pour une réutilisation sémantique.</p>
- <p>Il y a 10 ans, je me serais demandé si ça pouvait rentrer dans Redis ou MongoDB et à quel point ça passerait à l’échelle.</p>
- <p>Il y a 5 ans, j’aurais imaginé une API pour pouvoir généraliser l’usage et décliner plusieurs services équivalents.</p>
- <p><strong>Et aujourd’hui alors ?</strong></p>
- <p>Je commence par me demander comment est-ce que les utilisateur·ices vont pouvoir saisir ces données et devenir autonomes.</p>
- <p>Je n’envisage pas qu’iels puissent saisir du HTML — qui plus est valide et accessible — pour concevoir ce quiz. Je me demande quelle serait la structure la plus logique pour déterminer les réponses possibles et mentionner la bonne. Il y a un enjeu de <em>feedback</em> immédiat lors de la rédaction, par exemple en <em>CommonMark</em> un peu étendu dans un <em>pad</em> ou un forge <em>git</em>. J’imagine une structure qui ressemble à :</p>
- <pre><code>Le consentement c’est :
-
- * [ ] Demander la permission
- * [x] S’assurer à tout moment que l’autre↩
- est à l’aise et désire ce qu’on lui fait
- * [ ] Peut se donner avec un peu de pression
- </code></pre>
- <p>C’est ensuite à moi de convertir cette structure plate, textuelle, relativement compréhensible en un formulaire web interactif. C’est le seul moment où la technique entre en jeux avec des dépendances aussi minimalistes que possible.</p>
- <p>Ce qui a changé en 20 ans, c’est que j’ai pris conscience que la pérennité d’une donnée tient à l’autonomie que l’on peut donner aux personnes qui vont s’assurer de son évolution. La « bonne » modélisation est celle qui est explicite et non réservée à une élite de dévelopeur·euses.</p>
- <p>Entre l’<em>User eXperience</em> (UX) et la <em>Developer eXperience</em> (DX), il y aurait peut-être la <em>Maintenance eXperience</em> (MX) ? Et dans ce contexte, l’autonomie vis-à-vis des données est cruciale. Ce n’est peut-être pas techniquement très propre, c’est difficile à mettre en valeur sur un CV ou dans une conférence, c’est même aux antipodes de la mode actuelle.</p>
- <p>Mais c’est là où je positionne ma valeur aujourd’hui. De la cathédrale qu’il faut reconstruire tous les 2 ans au refuge qui ne nécessite que quelques planches et clous en maintenance annuelle pour qu’une poignée de personnes y trouvent du réconfort. Et soient en capacité de participer à l’effort commun.</p>
- <hr />
- <p>Bandes-dessinées de la semaine :</p>
- <ul>
- <li><a href="https://editions-sarbacane.com/bd/rene-e-aux-bois-dormants">René.e aux bois dormants</a> de Elene Usdin.</li>
- <li><a href="https://ecosociete.org/livres/megantic-un-train-dans-la-nuit">Mégantic, un train dans la nuit</a> de Anne-Marie Saint-Cerny et Christian Quesnel.</li>
- </ul>
- <p>Je ne sais pas si c’est le fait de résider sur ces territoires mais les deux m’ont pas mal affecté. L’héritage de la colonisation en étant sur les lieux colonisés est encore plus difficile à porter.</p>
- <hr />
- <p>Film de la semaine : <a href="https://en.wikipedia.org/wiki/The_Menu_(2022_film)">The Menu</a> (essayez de ne pas vous divulgâcher…).</p>
- <hr />
-
- <blockquote lang="en">
- <p>💯 Always remember that although a subset of the JavaScript community can be very loud, they represent a paltry portion of the web as a whole. This means that when they say something like “Best practices don’t actually work”—what they mean is “Best practices don’t actually work for a small subset of less than 5 percent of the web”.</p>
- <p><cite><em><a href="https://andy-bell.co.uk/the-extremely-loud-minority/">The (extremely) loud minority</a></em> (<a href="/david/cache/2023/78d79db0da7f60c48a02cfd088885085/">cache</a>)</cite></p>
- </blockquote>
-
- <blockquote lang="en">
- <p>🐦 Spinners are the dumbest progress bar.</p>
- <p><cite><em><a href="https://interconnected.org/home/2023/02/10/progress">A notification center for progress bars that sounds like birdsong</a></em> (<a href="/david/cache/2023/29dac969af1faa8ba0338a2e7e59ebbd/">cache</a>)</cite></p>
- </blockquote>
-
-
- <nav>
- <p>
-
- <a href="/david/2023/accompagnement/"
- title="Liste de tous les articles 2023 associés à cette étiquette"
- rel="tag">#accompagnement</a>
-
- <a href="/david/2023/simplicite/"
- title="Liste de tous les articles 2023 associés à cette étiquette"
- rel="tag">#simplicité</a>
-
- <a href="/david/2023/web/"
- title="Liste de tous les articles 2023 associés à cette étiquette"
- rel="tag">#web</a>
-
- <a href="/david/#tags-2023" title="Liste de toutes les étiquettes 2023">
- <svg class="icon icon-tags">
- <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-tags"></use>
- </svg>
- tous ?</a>
- </p>
- </nav>
-
- <nav>
- <p class="center">
-
- <a rel="prev"
- href="/david/2023/02/13/"
- title="Publication précédente : Livre">← Précédent</a> •
-
- <a href="/david/2023/" title="Liste des publications récentes">↑ En 2023</a>
-
- • <a rel="next"
- href="/david/2023/02/25/"
- title="Publication suivante : Transmission">Suivant →</a>
-
- </p>
- </nav>
- </article>
-
- <hr>
- <footer>
- <p>
- <nobr>
- <a href="/david/" title="Aller à l’accueil">
- <svg class="icon icon-home">
- <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-home"></use>
- </svg>
- Accueil</a>
- </nobr>
- •
- <nobr>
- <a href="/david/log/" title="Accès au flux RSS">
- <svg class="icon icon-rss2">
- <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-rss2"></use>
- </svg>
- Suivre</a>
- </nobr>
- •
- <nobr>
- <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-2022-03.svg#icon-user-tie"></use>
- </svg>
- Pro</a>
- </nobr>
- •
- <nobr>
- <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">
- <svg class="icon icon-mail">
- <use xlink:href="/static/david/icons2/symbol-defs-2022-03.svg#icon-mail"></use>
- </svg>
- Email</a>
- </nobr>
- •
- <nobr>
- <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-2022-03.svg#icon-hammer2"></use>
- </svg>
- Légal</abbr>
- </nobr>
- </p>
- <template id="theme-selector">
- <form>
- <fieldset>
- <legend>
- <svg class="icon icon-brightness-contrast">
- <use xlink:href="/static/david/icons2/symbol-defs-2022-03.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>
|