Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. <!DOCTYPE html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang="fr">
  4. <!-- Has to be within the first 1024 bytes, hence before the `title` element
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset="utf-8">
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name="viewport" content="width=device-width,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>
  13. Dune
  14. — David Larlet</title>
  15. <script>
  16. function toggleTheme(themeName) {
  17. document.documentElement.classList.toggle(
  18. 'forced-dark',
  19. themeName === 'dark'
  20. )
  21. document.documentElement.classList.toggle(
  22. 'forced-light',
  23. themeName === 'light'
  24. )
  25. }
  26. const selectedTheme = localStorage.getItem('theme')
  27. if (selectedTheme !== 'undefined') {
  28. toggleTheme(selectedTheme)
  29. }
  30. </script>
  31. <!-- Documented, feel free to shoot an email. -->
  32. <link rel="stylesheet" href="/static/david/css/style_2024-03-09.css">
  33. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  34. <link rel="preload"
  35. href="/static/david/css/fonts/century_supra_ot_a_regular.woff2"
  36. as="font"
  37. type="font/woff2"
  38. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  39. crossorigin>
  40. <link rel="preload"
  41. href="/static/david/css/fonts/century_supra_ot_a_bold.woff2"
  42. as="font"
  43. type="font/woff2"
  44. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  45. crossorigin>
  46. <link rel="preload"
  47. href="/static/david/css/fonts/century_supra_ot_a_italic.woff2"
  48. as="font"
  49. type="font/woff2"
  50. media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)"
  51. crossorigin>
  52. <link rel="preload"
  53. href="/static/david/css/fonts/century_supra_ot_b_regular.woff2"
  54. as="font"
  55. type="font/woff2"
  56. media="(prefers-color-scheme: dark)"
  57. crossorigin>
  58. <link rel="preload"
  59. href="/static/david/css/fonts/century_supra_ot_b_bold.woff2"
  60. as="font"
  61. type="font/woff2"
  62. media="(prefers-color-scheme: dark)"
  63. crossorigin>
  64. <link rel="preload"
  65. href="/static/david/css/fonts/century_supra_ot_b_italic.woff2"
  66. as="font"
  67. type="font/woff2"
  68. media="(prefers-color-scheme: dark)"
  69. crossorigin>
  70. <meta name="description" content="Je crois bien n’être allé que 3 fois dans une salle de cinéma ces 10 dernières années. Et puis l’occasion s’est présentée, sans prévenir, aujourd’hui. J’avais quelques retenues sur la première partie mais j’attendais quand même avec impatience la suite. Et j’avais réussi à ne pas trop regarder les bandes annonces, ni les critiques.">
  71. <!-- That good ol' feed, subscribe :). -->
  72. <link rel="alternate"
  73. type="application/atom+xml"
  74. title="Feed"
  75. href="/david/log/">
  76. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  77. <link rel="apple-touch-icon"
  78. sizes="180x180"
  79. href="/static/david/icons2/apple-touch-icon.png">
  80. <link rel="icon"
  81. type="image/png"
  82. sizes="32x32"
  83. href="/static/david/icons2/favicon-32x32.png">
  84. <link rel="icon"
  85. type="image/png"
  86. sizes="16x16"
  87. href="/static/david/icons2/favicon-16x16.png">
  88. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  89. <link rel="mask-icon"
  90. href="/static/david/icons2/safari-pinned-tab.svg"
  91. color="#07486c">
  92. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  93. <meta name="msapplication-TileColor" content="#f7f7f7">
  94. <meta name="msapplication-config"
  95. content="/static/david/icons2/browserconfig.xml">
  96. <meta name="theme-color"
  97. content="#f7f7f7"
  98. media="(prefers-color-scheme: light)">
  99. <meta name="theme-color"
  100. content="#272727"
  101. media="(prefers-color-scheme: dark)">
  102. <!-- Is that even respected? Retrospectively? What a shAItshow…
  103. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  104. <meta name="robots" content="noai, noimageai">
  105. <!-- To get attribution when linking on mastodon. -->
  106. <meta name="fediverse:creator" content="@david@larlet.fr">
  107. <style type="text/css">
  108. .tippy-content {
  109. min-width: 280px;
  110. padding: .5rem;
  111. font-size: calc(var(--fluid-0) * 0.8);
  112. font-family: var(--labor-font);
  113. letter-spacing: initial;
  114. text-align: left;
  115. }
  116. .tippy-content h3 {
  117. margin-top: 0;
  118. }
  119. .tippy-content h3 img {
  120. max-width: 2rem;
  121. max-height: 2rem;
  122. display: inline-block;
  123. }
  124. .tippy-content .tippy-links {
  125. display: flex;
  126. justify-content: space-around;
  127. }
  128. .tippy-content a {
  129. padding: .4rem;
  130. color: #F06048;
  131. }
  132. </style>
  133. <body data-instant-intensity="viewport-all">
  134. <article>
  135. <header>
  136. <hgroup>
  137. <h1>Dune</h1>
  138. <p>Le <time datetime="2024-03-10">10 mars 2024</time></p>
  139. </hgroup>
  140. </header>
  141. <nav>
  142. <p>
  143. <a rel="prev"
  144. href="/david/2024/03/09/"
  145. title="Publication précédente : Marque">← Précédent</a> •
  146. <a href="/david/" title="Aller à l’accueil" rel="up">Accueil</a>
  147. <a href="/david/recherche/"
  148. title="Aller à la page de recherche"
  149. rel="search" data-no-instant>Recherche</a>
  150. • <a rel="next"
  151. href="/david/2024/03/11/"
  152. title="Publication suivante : LoginWall">Suivant →</a>
  153. </p>
  154. </nav>
  155. <p>Je crois bien n’être allé que 3&nbsp;fois dans une salle de cinéma ces 10&nbsp;dernières années. Et puis l’occasion s’est présentée, sans prévenir, aujourd’hui. J’avais <a href="/david/2021/10/18/">quelques retenues sur la première partie</a> mais j’attendais quand même avec impatience la suite. Et j’avais réussi à ne pas trop regarder les bandes annonces, ni les&nbsp;critiques.</p>
  156. <p><em>Note&nbsp;: ça va forcément divulgâcher un peu dans la&nbsp;suite.</em></p>
  157. <p>L’adaptation est bonne, le défi était de taille et —&nbsp;en dépit des quelques ajustements qui piquent un peu le <em>fan</em> que je suis (surtout vers la fin&#8239;!)&nbsp;— la scénarisation est cohérente. Ce qui n’était pas une mince affaire car encore une fois la temporalité n’est pas évidente et rendre l’évolution des personnages visible avec tout ce qui est censé se passer dans leur tête requiert des redéfinitions et des&nbsp;raccourcis.</p>
  158. <p>Mon erreur a probablement été de choisir de l’IMAX alors que c’était Hans “<a data-link-domain="20k.org" href="https://www.20k.org/episodes/boojstrikesback">booj</a>” Zimmer aux platines. Autant dire que le siège a vibré la moitié du film&#8239;! Au-delà de la bande originale, le son a vraiment été travaillé mais je crois que c’était un peu trop pour mes vieilles oreilles plus vraiment adaptées à de tels volumes. Il y a des moments où j’ai même trouvé que ça altérait la compréhension des dialogues… j’avais un peu l’impression de me noyer dans la volonté im·mer·sive alors que l’on est en plein désert. Je doute de retourner dans une salle de si&nbsp;tôt.</p>
  159. <p>Tout ce qui tourne autour des vers est bien fait, j’avais toujours eu du mal à me faire ma propre représentation des tailles et interactions à la lecture et là ça me semble être respecté / réaliste. Idem pour les <em>Sietchs</em>, c’est fidèle à la projection mentale que je pouvais m’en faire, même si l’on n’en voit pas grand chose au final. J’ai particulièrement apprécié le choix de faire une <em>Chani</em> forte qui est davantage consciente des enjeux et des répercutions. La jalousie aurait mérité d’être plus subtile, la différence entre la femme (politique) de Paul et sa compagne (amoureuse) est vraiment explicite dans le&nbsp;livre.</p>
  160. <p>Paul Muad’dib perd un peu trop d’eau à mon goût au cours de nombreuses scènes. Il était probablement plus difficile de transmettre des émotions&nbsp;sèches&nbsp;(?).</p>
  161. <p>Pour finir sur une note positive, l’image bien sûr. C’est à la limite du trop <em>et</em> c’est magnifique au niveau des différents tableaux qui s’enchaînent avec leurs propres couleurs, cinématiques et points de vues. On sent le travail de recherche sans qu’il ne devienne complètement distrayant. J’y serai d’autant plus attentif lors d’un second visionnage, chez moi, en choisissant le volume&nbsp;sonore.</p>
  162. <p>Je ne vois pas comment est-ce qu’il ne pourrait pas y avoir une troisième partie. À voir comment / si ça raccroche les wagons des livres. J’aurais presque envie que ça explore sa propre branche. <em>Dune&nbsp;multi·vers·e&#8239;!</em></p>
  163. <nav>
  164. <p>
  165. <a href="/david/2024/adaptation/"
  166. title="Liste de tous les articles 2024 associés à cette étiquette"
  167. rel="tag">#adaptation</a>
  168. <a href="/david/2024/cinema/"
  169. title="Liste de tous les articles 2024 associés à cette étiquette"
  170. rel="tag">#cinéma</a>
  171. <a href="/david/2024/lecture/"
  172. title="Liste de tous les articles 2024 associés à cette étiquette"
  173. rel="tag">#lecture</a>
  174. <a href="/david/2024/#tags" title="Liste de toutes les étiquettes 2024">tous ?</a>
  175. </p>
  176. </nav>
  177. <nav>
  178. <p>
  179. <a rel="prev"
  180. href="/david/2024/03/09/"
  181. title="Publication précédente : Marque">← Précédent</a> •
  182. <a href="/david/2024/" title="Liste des publications récentes">↑ En 2024</a>
  183. • <a rel="next"
  184. href="/david/2024/03/11/"
  185. title="Publication suivante : LoginWall">Suivant →</a>
  186. </p>
  187. </nav>
  188. <form action="/david/recherche/" method="get">
  189. <fieldset>
  190. <legend>Recherche</legend>
  191. <label for="input-search">Termes de votre recherche :</label>
  192. <input id="input-search" type="search" name="s" aria-describedby="indexation-infos" required>
  193. <input type="submit" value="Chercher">
  194. <p id="indexation-infos">
  195. <small>
  196. Seuls les contenus de ces 8 dernières années sont indexés.
  197. </small>
  198. </p>
  199. </fieldset>
  200. </form>
  201. <aside>
  202. <theme-toggle></theme-toggle>
  203. </aside>
  204. </article>
  205. <hr>
  206. <footer>
  207. <p>
  208. <a href="/david/" title="Aller à l’accueil">Accueil</a>
  209. <a href="/david/log/" title="Accès au flux RSS">Suivre</a>
  210. <a href="http://larlet.com"
  211. title="Go to my English profile"
  212. data-instant>Pro</a>
  213. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">Email</a>
  214. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">Légal</abbr>
  215. </p>
  216. <template id="theme-selector">
  217. <form>
  218. <style type="text/css">
  219. fieldset div {
  220. text-align: center;
  221. }
  222. </style>
  223. <fieldset>
  224. <legend>Thème</legend>
  225. <div>
  226. <label>
  227. <input type="radio" value="auto" name="chosen-color-scheme" checked>
  228. Auto
  229. </label>
  230. <label>
  231. <input type="radio" value="dark" name="chosen-color-scheme">
  232. Foncé
  233. </label>
  234. <label>
  235. <input type="radio" value="light" name="chosen-color-scheme">
  236. Clair
  237. </label>
  238. </div>
  239. </fieldset>
  240. </form>
  241. </template>
  242. </footer>
  243. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  244. <script>
  245. class ThemeToggle extends HTMLElement {
  246. constructor() {
  247. super()
  248. const themeSelectorTemplate = document.querySelector('#theme-selector')
  249. const form = themeSelectorTemplate.content.firstElementChild
  250. this.attachShadow({ mode: 'open' })
  251. this.shadowRoot.appendChild(form.cloneNode(true))
  252. }
  253. connectedCallback() {
  254. const form = this.shadowRoot.querySelector('form')
  255. form.addEventListener('change', (e) => {
  256. const chosenColorScheme = e.target.value
  257. localStorage.setItem('theme', chosenColorScheme)
  258. toggleTheme(chosenColorScheme)
  259. })
  260. const selectedTheme = localStorage.getItem('theme')
  261. if (selectedTheme && selectedTheme !== 'undefined') {
  262. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  263. }
  264. }
  265. }
  266. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  267. window.addEventListener('load', () => {
  268. let colorsLayer = undefined
  269. let hasDarkRules = false
  270. for (const styleSheet of Array.from(document.styleSheets)) {
  271. let mediaRules = []
  272. for (const layerRule of styleSheet.cssRules) {
  273. if (!(layerRule instanceof CSSLayerBlockRule)) {
  274. continue
  275. }
  276. if (layerRule.name === 'colors') {
  277. colorsLayer = layerRule
  278. }
  279. for (const cssRule of layerRule.cssRules) {
  280. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  281. continue
  282. }
  283. // WARNING: Safari does not have/supports `conditionText`.
  284. if (cssRule.conditionText) {
  285. if (cssRule.conditionText !== prefersColorSchemeDark) {
  286. continue
  287. }
  288. } else {
  289. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  290. continue
  291. }
  292. }
  293. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  294. }
  295. }
  296. // WARNING: do not try to insert a Rule to a styleSheet you are
  297. // currently iterating on, otherwise the browser will be stuck
  298. // in a infinite loop…
  299. for (const mediaRule of mediaRules) {
  300. // Safari requires the `0` second parameter (even if default).
  301. colorsLayer.insertRule(mediaRule.cssText, 0)
  302. hasDarkRules = true
  303. }
  304. }
  305. if (hasDarkRules) {
  306. if ('customElements' in window && !customElements.get('theme-toggle')) {
  307. customElements.define('theme-toggle', ThemeToggle)
  308. }
  309. }
  310. })
  311. </script>
  312. <script src="/static/david/js/popper-2.11.8.min.js"></script>
  313. <script src="/static/david/js/tippy-bundle-6.3.7.umd.min.js"></script>
  314. <script>
  315. tippy('[data-tippy]', {
  316. content(reference) {
  317. reference.addEventListener('click', (e) => e.preventDefault())
  318. return `
  319. <h3 lang="fr">
  320. <img src="${reference.dataset.favicon}" loading="lazy">
  321. <a href="${reference.dataset.source}"
  322. >Article sur ${reference.dataset.domain}</a></h3>
  323. <p lang="${reference.hreflang}"><em>${reference.dataset.description}</em></p>
  324. <div class="tippy-links" lang="fr">
  325. <a href="${reference.href}">Archive au ${reference.dataset.date}</a>
  326. </div>
  327. `
  328. },
  329. allowHTML: true,
  330. interactive: true,
  331. delay: [150, 700],
  332. hideOnClick: false
  333. })
  334. </script>
  335. <script type="module">
  336. import { annotate } from '/static/david/js/rough-notation-0.5.1.esm.min.js'
  337. const markObserver = new IntersectionObserver((entries, observer) => {
  338. const computedStyle = getComputedStyle(document.documentElement)
  339. const markBackground = computedStyle.getPropertyValue('--mark-background')
  340. for (const entry of entries) {
  341. if (entry.intersectionRatio === 0) continue
  342. const markElement = entry.target
  343. markElement.style.backgroundColor = 'inherit'
  344. const annotation = annotate(
  345. markElement, {
  346. type: 'highlight',
  347. multiline: true,
  348. color: markBackground,
  349. // animate: !window.matchMedia('(prefers-reduced-motion: reduce)').matches
  350. animate: false
  351. }
  352. )
  353. annotation.show()
  354. observer.unobserve(markElement)
  355. }
  356. }, {threshold: 1.0})
  357. for (const markElement of document.querySelectorAll('mark')) {
  358. markObserver.observe(markElement)
  359. }
  360. </script>
  361. </body>
  362. </html>