Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 31KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807
  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>
  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,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Outils — David Larlet</title>
  13. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  14. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
  15. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
  16. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
  17. <link rel="manifest" href="/manifest.json">
  18. <link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
  19. <link rel="shortcut icon" href="/static/david/icons/favicon.ico">
  20. <meta name="apple-mobile-web-app-title" content="David Larlet">
  21. <meta name="application-name" content="David Larlet">
  22. <meta name="msapplication-TileColor" content="#da532c">
  23. <meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
  24. <meta name="theme-color" content="#f0f0ea">
  25. <!-- That good ol' feed, subscribe :p. -->
  26. <link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">
  27. <!-- Canonical URL for SEO purposes -->
  28. <link rel="canonical" href="https://larlet.fr/david/stream/2019/12/24/">
  29. <style>
  30. /* http://meyerweb.com/eric/tools/css/reset/ */
  31. html, body, div, span,
  32. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  33. a, abbr, address, big, cite, code,
  34. del, dfn, em, img, ins,
  35. small, strike, strong, tt, var,
  36. dl, dt, dd, ol, ul, li,
  37. fieldset, form, label, legend,
  38. table, caption, tbody, tfoot, thead, tr, th, td,
  39. article, aside, canvas, details, embed,
  40. figure, figcaption, footer, header, hgroup,
  41. menu, nav, output, ruby, section, summary,
  42. time, mark, audio, video {
  43. margin: 0;
  44. padding: 0;
  45. border: 0;
  46. font-size: 100%;
  47. font: inherit;
  48. vertical-align: baseline;
  49. }
  50. /* HTML5 display-role reset for older browsers */
  51. article, aside, details, figcaption, figure,
  52. footer, header, hgroup, menu, nav, section { display: block; }
  53. body { line-height: 1; }
  54. blockquote, q { quotes: none; }
  55. blockquote:before, blockquote:after,
  56. q:before, q:after {
  57. content: '';
  58. content: none;
  59. }
  60. table {
  61. border-collapse: collapse;
  62. border-spacing: 0;
  63. }
  64. /* http://practicaltypography.com/equity.html */
  65. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  66. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  67. @font-face {
  68. font-family: 'EquityTextB';
  69. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  70. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  71. font-weight: 300;
  72. font-style: normal;
  73. font-display: swap;
  74. }
  75. @font-face {
  76. font-family: 'EquityTextB';
  77. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  78. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  79. font-weight: 300;
  80. font-style: italic;
  81. font-display: swap;
  82. }
  83. @font-face {
  84. font-family: 'EquityTextB';
  85. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  86. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  87. font-weight: 700;
  88. font-style: normal;
  89. font-display: swap;
  90. }
  91. @font-face {
  92. font-family: 'ConcourseT3';
  93. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  94. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  95. font-weight: 300;
  96. font-style: normal;
  97. font-display: swap;
  98. }
  99. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  100. body {
  101. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  102. font-family: "EquityTextB", Palatino, serif;
  103. background-color: #f0f0ea;
  104. color: #07486c;
  105. font-kerning: normal;
  106. -moz-osx-font-smoothing: grayscale;
  107. -webkit-font-smoothing: subpixel-antialiased;
  108. text-rendering: optimizeLegibility;
  109. font-variant-ligatures: common-ligatures contextual;
  110. font-feature-settings: "kern", "liga", "clig", "calt";
  111. }
  112. pre, code, kbd, samp, var, tt {
  113. font-family: 'TriplicateT4c', monospace;
  114. }
  115. em {
  116. font-style: italic;
  117. color: #323a45;
  118. }
  119. strong {
  120. font-weight: bold;
  121. color: black;
  122. }
  123. nav {
  124. background-color: #323a45;
  125. color: #f0f0ea;
  126. display: flex;
  127. justify-content: space-around;
  128. padding: 1rem .5rem;
  129. }
  130. nav:last-child {
  131. border-bottom: 1vh solid #2d7474;
  132. }
  133. nav a {
  134. color: #f0f0ea;
  135. }
  136. nav abbr {
  137. border-bottom: 1px dotted white;
  138. }
  139. h1 {
  140. border-top: 1vh solid #2d7474;
  141. border-bottom: .2vh dotted #2d7474;
  142. background-color: #e3e1e1;
  143. color: #323a45;
  144. text-align: center;
  145. padding: 5rem 0 4rem 0;
  146. width: 100%;
  147. font-family: 'ConcourseT3';
  148. display: flex;
  149. flex-direction: column;
  150. }
  151. h1.single {
  152. padding-bottom: 10rem;
  153. }
  154. h1 span {
  155. position: absolute;
  156. top: 1vh;
  157. left: 20%;
  158. line-height: 0;
  159. }
  160. h1 span a {
  161. line-height: 1.7;
  162. padding: 1rem 1.2rem .6rem 1.2rem;
  163. border-radius: 0 0 6% 6%;
  164. background: #2d7474;
  165. font-size: 1.3rem;
  166. color: white;
  167. text-decoration: none;
  168. }
  169. h2 {
  170. margin: 4rem 0 1rem;
  171. border-top: .2vh solid #2d7474;
  172. padding-top: 1vh;
  173. }
  174. h3 {
  175. text-align: center;
  176. margin: 3rem 0 .75em;
  177. }
  178. hr {
  179. height: .4rem;
  180. width: .4rem;
  181. border-radius: .4rem;
  182. background: #07486c;
  183. margin: 2.5rem auto;
  184. }
  185. time {
  186. display: bloc;
  187. margin-left: 0 !important;
  188. }
  189. ul, ol {
  190. margin: 2rem;
  191. }
  192. ul {
  193. list-style-type: square;
  194. }
  195. a {
  196. text-decoration-skip-ink: auto;
  197. text-decoration-thickness: 0.05em;
  198. text-underline-offset: 0.09em;
  199. }
  200. article {
  201. max-width: 50rem;
  202. display: flex;
  203. flex-direction: column;
  204. margin: 2rem auto;
  205. }
  206. article.single {
  207. border-top: .2vh dotted #2d7474;
  208. margin: -6rem auto 1rem auto;
  209. background: #f0f0ea;
  210. padding: 2rem;
  211. }
  212. article p:last-child {
  213. margin-bottom: 1rem;
  214. }
  215. p {
  216. padding: 0 .5rem;
  217. margin-left: 3rem;
  218. }
  219. p + p,
  220. figure + p {
  221. margin-top: 2rem;
  222. }
  223. blockquote {
  224. background-color: #e3e1e1;
  225. border-left: .5vw solid #2d7474;
  226. display: flex;
  227. flex-direction: column;
  228. align-items: center;
  229. padding: 1rem;
  230. margin: 1.5rem;
  231. }
  232. blockquote cite {
  233. font-style: italic;
  234. }
  235. blockquote p {
  236. margin-left: 0;
  237. }
  238. figure {
  239. border-top: .2vh solid #2d7474;
  240. background-color: #e3e1e1;
  241. text-align: center;
  242. padding: 1.5rem 0;
  243. margin: 1rem 0 0;
  244. font-size: 1.5rem;
  245. width: 100%;
  246. }
  247. figure img {
  248. max-width: 250px;
  249. max-height: 250px;
  250. border: .5vw solid #323a45;
  251. padding: 1px;
  252. }
  253. figcaption {
  254. padding: 1rem;
  255. line-height: 1.4;
  256. }
  257. aside {
  258. display: flex;
  259. flex-direction: column;
  260. background-color: #e3e1e1;
  261. padding: 1rem 0;
  262. border-bottom: .2vh solid #07486c;
  263. }
  264. aside p {
  265. max-width: 50rem;
  266. margin: 0 auto;
  267. }
  268. /* https://fvsch.com/code/css-locks/ */
  269. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  270. font-size: 1rem;
  271. line-height: calc( 1.5em + 0.2 * 1rem );
  272. }
  273. h1 {
  274. font-size: 1.9rem;
  275. line-height: calc( 1.2em + 0.2 * 1rem );
  276. }
  277. h2 {
  278. font-size: 1.6rem;
  279. line-height: calc( 1.3em + 0.2 * 1rem );
  280. }
  281. h3 {
  282. font-size: 1.35rem;
  283. line-height: calc( 1.4em + 0.2 * 1rem );
  284. }
  285. @media (min-width: 20em) {
  286. /* The (100vw - 20rem) / (50 - 20) part
  287. resolves to 0-1rem, depending on the
  288. viewport width (between 20em and 50em). */
  289. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  290. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  291. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  292. margin-left: 0;
  293. }
  294. h1 {
  295. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  296. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  297. }
  298. h2 {
  299. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  300. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  301. }
  302. h3 {
  303. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  304. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  305. }
  306. }
  307. @media (min-width: 50em) {
  308. /* The right part of the addition *must* be a
  309. rem value. In this example we *could* change
  310. the whole declaration to font-size:2.5rem,
  311. but if our baseline value was not expressed
  312. in rem we would have to use calc. */
  313. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  314. font-size: calc( 1rem + .6 * 1rem );
  315. line-height: 1.5em;
  316. }
  317. p, li, pre, details {
  318. margin-left: 3rem;
  319. }
  320. h1 {
  321. font-size: calc( 1.9rem + 1.5 * 1rem );
  322. line-height: 1.2em;
  323. }
  324. h2 {
  325. font-size: calc( 1.5rem + 1.5 * 1rem );
  326. line-height: 1.3em;
  327. }
  328. h3 {
  329. font-size: calc( 1.35rem + 1.5 * 1rem );
  330. line-height: 1.4em;
  331. }
  332. figure img {
  333. max-width: 500px;
  334. max-height: 500px;
  335. }
  336. }
  337. figure.unsquared {
  338. margin-bottom: 1.5rem;
  339. }
  340. figure.unsquared img {
  341. height: inherit;
  342. }
  343. @media print {
  344. body { font-size: 100%; }
  345. a:after { content: " (" attr(href) ")"; }
  346. a, a:link, a:visited, a:after {
  347. text-decoration: underline;
  348. text-shadow: none !important;
  349. background-image: none !important;
  350. background: white;
  351. color: black;
  352. }
  353. abbr[title] { border-bottom: 0; }
  354. abbr[title]:after { content: " (" attr(title) ")"; }
  355. img { page-break-inside: avoid; }
  356. @page { margin: 2cm .5cm; }
  357. h1, h2, h3 { page-break-after: avoid; }
  358. p3 { orphans: 3; widows: 3; }
  359. img {
  360. max-width: 250px !important;
  361. max-height: 250px !important;
  362. }
  363. nav, aside { display: none; }
  364. }
  365. ul.with_columns {
  366. column-count: 1;
  367. }
  368. @media (min-width: 20em) {
  369. ul.with_columns {
  370. column-count: 2;
  371. }
  372. }
  373. @media (min-width: 50em) {
  374. ul.with_columns {
  375. column-count: 3;
  376. }
  377. }
  378. ul.with_two_columns {
  379. column-count: 1;
  380. }
  381. @media (min-width: 20em) {
  382. ul.with_two_columns {
  383. column-count: 1;
  384. }
  385. }
  386. @media (min-width: 50em) {
  387. ul.with_two_columns {
  388. column-count: 2;
  389. }
  390. }
  391. .gallery {
  392. display: flex;
  393. flex-wrap: wrap;
  394. justify-content: space-around;
  395. }
  396. .gallery figure img {
  397. margin-left: 1rem;
  398. margin-right: 1rem;
  399. }
  400. .gallery figure figcaption {
  401. font-family: 'ConcourseT3'
  402. }
  403. footer {
  404. font-family: 'ConcourseT3';
  405. display: flex;
  406. flex-direction: column;
  407. border-top: 3px solid white;
  408. padding: 4rem 0;
  409. background-color: #07486c;
  410. color: white;
  411. }
  412. footer > * {
  413. max-width: 50rem;
  414. margin: 0 auto;
  415. }
  416. footer a {
  417. color: #f1c40f;
  418. }
  419. footer .avatar {
  420. width: 200px;
  421. height: 200px;
  422. border-radius: 50%;
  423. float: left;
  424. -webkit-shape-outside: circle();
  425. shape-outside: circle();
  426. margin-right: 2rem;
  427. padding: 2px 5px 5px 2px;
  428. background: white;
  429. border-left: 1px solid #f1c40f;
  430. border-top: 1px solid #f1c40f;
  431. border-right: 5px solid #f1c40f;
  432. border-bottom: 5px solid #f1c40f;
  433. }
  434. </style>
  435. <h1 class="single">
  436. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  437. Outils
  438. <time>Publié le 24 décembre</time>
  439. </h1>
  440. <article class="single">
  441. <p><em>Pas mal de trucs perso cette semaine, c’est pas pire d’avoir du temps hors boulot aussi. Ça me laisse le temps de coder un peu. Oh wait.</em></p>
  442. <p>Et la première chose c’est d’avoir enfin rendu publiques les <a href="https://git.larlet.fr/davidbgk">lignes de code</a> qui construisent ce site. Et en fait ça n’est pas tant de l’acte de publication mais celui de l’avoir recodé en Python 3 et avec des <a href="https://github.com/pyrates/">outils</a> que j’affectionne. Et aussi découpé car je ne souhaitais pas que tout devienne accessible. Et aussi migrer des journaux privés. Et aussi revoir le déploiement pour recoller tous les morceaux.</p>
  443. <p><em>Bref, c’était en chantier depuis un moment et ça fait du bien quand ça sort !</em></p>
  444. <hr />
  445. <blockquote>
  446. <p>I frequently wonder if the people who love Lisp or Smalltalk fall into that same broad category: that they don’t “love Lisp” so much as they love <em>their</em> Lisp, the Howl’s Moving Memory Palaces they’ve built for themselves, tailored to the precise cut of their own idiosyncracies. That if you really dig in and ask them you’ll find that <em>other people’s</em> Lisp, obviously, sucks. </p>
  447. <p><cite><em><a href="http://exple.tive.org/blarg/2019/12/17/poor-craft/">Poor Craft</a></em> (<a href="/david/cache/613d27d467c47a4dc1e697a027219434/">cache</a>)</cite></p>
  448. </blockquote>
  449. <p>Merci Karl pour ce petit lien qui pique au niveau du tempo :-). Je plaide à moitié coupable, je trouve qu’une certaine émulation est saine et on a tous des motivations différentes qui aboutissent à des outils différents. Et en même temps je vois le gaspillage, l’égoïsme et le manque d’accessibilité technique de ces outils.</p>
  450. <p><em>Lorsque je mange mes céréales avec une cuillère que j’ai sculptée, elles ont un autre goût.</em></p>
  451. <hr />
  452. <blockquote>
  453. <p>So my proposal is seven unconventional guidelines in how we handle websites designed to be informative, to make them easy to maintain and preserve. The guiding intention is that the maintainer will try to keep the website up for at least 10 years, maybe even 20 or 30 years. These are not controversial views necessarily, but are aspirations that are not mainstream—a manifesto for a long-lasting website. </p>
  454. <p><cite><em><a href="https://jeffhuang.com/designed_to_last/">A Manifesto for Preserving Content on the Web</a></em> (<a href="/david/cache/4e7f48be44adc1ef9e8d4539015fd6ee/">cache</a>)</cite></p>
  455. </blockquote>
  456. <p>Après 15 ans à essayer de conserver mes publications dans le temps, je ne peux qu’acquiescer. Réduire les dépendances au maximum et comprendre chaque étape de la chaîne depuis vos doigts jusqu’à la publication du HTML.</p>
  457. <p>Je me demande encore si je vais pousser ces sources sur Microsoft Github™ le temps qu’elles aillent <a href="https://archiveprogram.github.com/">se les geler en Arctique</a>.</p>
  458. <p><em>Pari facile : que le lien ci-dessus soit un jour une 404. #ironie</em></p>
  459. <hr />
  460. <blockquote>
  461. <p>Here I aim to show how these different disciplinary approaches converge across four scales of maintenance. In “Rust,” we’ll look at the repair of large urban infrastructures, from transportation systems to social networks. In “Dust,” we consider architectural maintenance alongside housework and other forms of caretaking in the domestic and interior realms. In “Cracks,” we study the repair of objects, from television sets to subway signs to cell phones. Finally, in “Corruption,” we turn to the curators who clean and maintain data — a resource that fuels the operation of our digital objects, our networked architectures, and our intelligent cities.</p>
  462. <p>[…]</p>
  463. <p>Across the many scales and dimensions of this problem, we are never far from three enduring truths: (1) Maintainers require care; (2) caregiving requires maintenance; and (3) the distinctions between these practices are shaped by race, gender, class, and other political, economic, and cultural forces. Who gets to organize the maintenance of infrastructure, and who then executes the work? Who gets cared for at home, and who does that tending and mending? Agreements about what things deserve repair — and what “good repair” entails — are always contingent and contextual. If we wish to better support the critical work performed by the world’s maintainers, we must recognize that maintenance encompasses a world of standards, tools, practices, and wisdom. Sometimes it deploys machine learning; other times, a mop.</p>
  464. <p><cite><em><a href="https://placesjournal.org/article/maintenance-and-care/">Maintenance and Care</a></em> (<a href="/david/cache/a8c72cf5a081dac8fcaa67404eda3026/">cache</a>)</cite></p>
  465. </blockquote>
  466. <p>J’ai ce lien depuis un moment dans mon navigateur et il me fournit des clés de lecture lorsqu’on parle de maintenance, à l’intersection entre les privilèges et la technique. Conserver ses privilèges c’est faire aspirer — de moins privilégiés — à une technique dont ils n’auront pas/plus la maîtrise. Se libérer de cette dépendance devient alors un obstacle infranchissable lorsqu’elle est associée à une certaine idée du confort.</p>
  467. <p>Au passage, je trouve le terme de <em>sustainer</em> assez équivoque (<a href="https://sustainoss.org/wp-content/uploads/2019/12/SustainOSS-west-2017-report.pdf">PDF, 400Ko</a> (<a href="/static/david/stream/SustainOSS-west-2017-report.pdf">cache</a>)).</p>
  468. <blockquote>
  469. <p>This world-wide crisis of world-wide institutions can lead to a new consciousness about the nature of tools and to majority action for their control. If tools are not controlled politically, they will be managed in a belated technocratic response to disaster. Freedom and dignity will continue to dissolve into an unprecedented enslavement of man to his tools.</p>
  470. <p><cite><em>Tools for Conviviality</em>, Ivan Illich (1973)</cite></p>
  471. </blockquote>
  472. <p>Voir aussi : <a href="https://calmtech.com/">calmtech</a> (<a href="/david/cache/ab325197a8e81f929de1b10477cce340/">cache</a>).</p>
  473. <hr />
  474. <blockquote>
  475. <p>Ainsi, celui qui occupe une position défavorable à l’intérieur de la structure inégalitaire s’efforcera d’échapper à celle-ci et d’en trouver une autre plus favorable en adoptant l’habitus d’un « gagnant ». À moins que la situation défavorable ne semble si inébranlable et si désespérée, que la position sociale des mieux lotis ne paraisse si inattaignable et si inaccessible, que s’installe un habitus fataliste et que l’action ne vise plus qu’à assurer le strict nécessaire à la survie.</p>
  476. <p>Par ailleurs, la personne qui occupe dans la société une position plus avantageuse veille à maintenir son état relativement privilégié et s’efforce donc, par réflexe d’habitus, de se démarquer des moins bien nantis tout en jetant un coup d’œil vers le haut ou vers les endroits qui, selon la perception sociale généralement admise, promettent une vie (encore) meilleure ou même la meilleure qui soit.</p>
  477. <p>Dans les zones privilégiées de la structure sociale, du point de vue tant objectif que subjectif, se développe alors chez les <em>happy few</em> un habitus de l’évidence ou bien de la supériorité, éventuellement aussi un habitus de l’exclusion et du mépris, lequel s’exprimera dans des comportements quotidiens à l’avenant, allant de l’attitude confiante et naturelle devant sa propre situation de privilégié jusqu’à l’ostentation arrogante et la justification aggressive.</p>
  478. <p><cite><em>À côté de nous le déluge</em>, Stephan Lessenich</cite></p>
  479. </blockquote>
  480. <p>Il faudrait que je prenne le temps de lire Bourdieu un de ces jours <a href="/david/stream/2018/09/23/">quand même</a>. Je disais la même chose <a href="/david/stream/2014/#tw-507621612447727617">il y a cinq ans</a>. Parfois <a href="/david/stream/2018/04/07/">la spirale</a> tourne en rond.</p>
  481. <p>Tiens un des effets de bord des sources publiques, c’est qu’il devrait vous être plus facile de faire des recherches dedans. Ou peut-être que je suis le seul à en avoir besoin afin de réinternaliser un peu de mémoire des fois.</p>
  482. <p>Autre externalité potentiellement positive, j’ai bien envie de jouer avec ma façon de <a href="/david/stream/2019/12/10/">publier</a> des <a href="/david/stream/2018/10/30/">choses</a> l’année prochaine.</p>
  483. <p><em>Un autre rythme ? Un autre format d’exploration des contenus ?</em></p>
  484. </article>
  485. <nav id="jumpto">
  486. <p>
  487. <a rel=prev href="/david/stream/2019/12/17/">← Origines</a> | <a href="/david/stream/2019/" title="Retour à la liste complète">↑ Liste complète</a> | <a rel=next href="/david/stream/2019/12/27/">Intemporels →</a>
  488. </p>
  489. </nav>
  490. <footer>
  491. <div>
  492. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  493. <p>
  494. Bonjour/Hi!
  495. Je suis <a href="/david/" title="Profil public">David&nbsp;Larlet</a>, je vis actuellement à Montréal et j’alimente cet espace depuis 15 ans. <br>
  496. Si tu as apprécié cette lecture, n’hésite pas à poursuivre ton exploration. Par exemple via les <a href="/david/blog/" title="Expériences bienveillantes">réflexions bimestrielles</a>, la <a href="/david/stream/2019/" title="Pensées (dés)articulées">veille hebdomadaire</a> ou en t’abonnant au <a href="/david/log/" title="S’abonner aux publications via RSS">flux RSS</a> (<a href="/david/blog/2019/flux-rss/" title="Tiens c’est quoi un flux RSS ?">so 2005</a>).
  497. </p>
  498. <p>
  499. Je m’intéresse à la place que je peux avoir dans ce monde. En tant qu’humain, en tant que membre d’une famille et en tant qu’associé d’une coopérative. De temps en temps, je fais aussi des <a href="https://github.com/davidbgk" title="Principalement sur Github mais aussi ailleurs">trucs techniques</a>. Et encore plus rarement, <a href="/david/talks/" title="En ce moment je laisse plutôt la place aux autres">j’en parle</a>.
  500. </p>
  501. <p>
  502. Les dernières publications hebdomadaires sont :
  503. </p>
  504. <ul class="with_columns">
  505. <li>
  506. <a href="/david/stream/2019/12/27/">Intemporels</a>
  507. </li>
  508. <li>
  509. <a href="/david/stream/2019/12/24/">Outils</a>
  510. </li>
  511. <li>
  512. <a href="/david/stream/2019/12/17/">Origines</a>
  513. </li>
  514. <li>
  515. <a href="/david/stream/2019/12/10/">Publier</a>
  516. </li>
  517. <li>
  518. <a href="/david/stream/2019/12/03/">En forêt</a>
  519. </li>
  520. <li>
  521. <a href="/david/stream/2019/11/26/">Ecocentric</a>
  522. </li>
  523. <li>
  524. <a href="/david/stream/2019/11/19/">Se livrer</a>
  525. </li>
  526. <li>
  527. <a href="/david/stream/2019/11/12/">Dépendances</a>
  528. </li>
  529. <li>
  530. <a href="/david/stream/2019/11/05/">Positif</a>
  531. </li>
  532. <li>
  533. <a href="/david/stream/2019/10/29/">Dettes</a>
  534. </li>
  535. <li>
  536. <a href="/david/stream/2019/10/22/">Privilèges</a>
  537. </li>
  538. <li>
  539. <a href="/david/stream/2019/10/15/">Discrétion</a>
  540. </li>
  541. <li>
  542. <a href="/david/stream/2019/10/08/">Désespérance</a>
  543. </li>
  544. <li>
  545. <a href="/david/stream/2019/10/01/">Présent</a>
  546. </li>
  547. <li>
  548. <a href="/david/stream/2019/09/24/">Manifester</a>
  549. </li>
  550. <li>
  551. <a href="/david/stream/2019/09/17/">Arpenter</a>
  552. </li>
  553. <li>
  554. <a href="/david/stream/2019/09/10/">Nostalgie</a>
  555. </li>
  556. <li>
  557. <a href="/david/stream/2019/09/03/">Déconstruire</a>
  558. </li>
  559. <li>
  560. <a href="/david/stream/2019/08/27/">Documenter</a>
  561. </li>
  562. <li>
  563. <a href="/david/stream/2019/08/20/">Frustration</a>
  564. </li>
  565. <li>
  566. <a href="/david/stream/2019/08/13/">Holisme</a>
  567. </li>
  568. <li>
  569. <a href="/david/stream/2019/08/06/">1%</a>
  570. </li>
  571. <li>
  572. <a href="/david/stream/2019/07/30/">Exemplarité</a>
  573. </li>
  574. <li>
  575. <a href="/david/stream/2019/07/23/">Timelines</a>
  576. </li>
  577. <li>
  578. <a href="/david/stream/2019/07/16/">Écoute</a>
  579. </li>
  580. <li>
  581. <a href="/david/stream/2019/07/02/">Anxiété</a>
  582. </li>
  583. <li>
  584. <a href="/david/stream/2019/06/21/">À lier</a>
  585. </li>
  586. <li>
  587. <a href="/david/stream/2019/06/14/">Pauvreté</a>
  588. </li>
  589. <li>
  590. <a href="/david/stream/2019/06/07/">Amateur</a>
  591. </li>
  592. <li>
  593. <a href="/david/stream/2019/05/31/">Pollution</a>
  594. </li>
  595. <li>
  596. <a href="/david/stream/2019/05/24/">Apaisement</a>
  597. </li>
  598. <li>
  599. <a href="/david/stream/2019/05/10/">Folie</a>
  600. </li>
  601. <li>
  602. <a href="/david/stream/2019/05/03/">Sympathie</a>
  603. </li>
  604. <li>
  605. <a href="/david/stream/2019/04/12/">Péremption</a>
  606. </li>
  607. <li>
  608. <a href="/david/stream/2019/04/05/">Définitions</a>
  609. </li>
  610. <li>
  611. <a href="/david/stream/2019/03/29/">Acceptation</a>
  612. </li>
  613. <li>
  614. <a href="/david/stream/2019/03/22/">Dissonance</a>
  615. </li>
  616. <li>
  617. <a href="/david/stream/2019/03/15/">Reconnaissance</a>
  618. </li>
  619. <li>
  620. <a href="/david/stream/2019/03/08/">Lecture</a>
  621. </li>
  622. <li>
  623. <a href="/david/stream/2019/03/01/">Journaux</a>
  624. </li>
  625. <li>
  626. <a href="/david/stream/2019/02/22/">Écriture</a>
  627. </li>
  628. <li>
  629. <a href="/david/stream/2019/02/15/">Kyriarchie</a>
  630. </li>
  631. <li>
  632. <a href="/david/stream/2019/02/08/">Mots-serrures</a>
  633. </li>
  634. <li>
  635. <a href="/david/stream/2019/02/01/">Sans voie</a>
  636. </li>
  637. <li>
  638. <a href="/david/stream/2019/01/25/">Auto-diagnostic</a>
  639. </li>
  640. <li>
  641. <a href="/david/stream/2019/01/18/">Agilité</a>
  642. </li>
  643. <li>
  644. <a href="/david/stream/2019/01/11/">Métaphores</a>
  645. </li>
  646. <li>
  647. <a href="/david/stream/2019/01/04/">Balbutiements</a>
  648. </li>
  649. </ul>
  650. <p>
  651. Voici quelques articles choisis :
  652. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  653. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  654. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  655. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  656. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  657. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  658. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  659. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  660. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  661. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  662. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  663. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  664. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  665. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  666. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  667. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  668. </p>
  669. <p>
  670. On peut <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">échanger par courriel</a>. Si éventuellement tu souhaites que l’on travaille ensemble, tu devrais commencer par consulter le <a href="http://larlet.com">profil dédié à mon activité professionnelle</a> et/ou contacter directement <a href="http://scopyleft.fr/">scopyleft</a>, la <abbr title="Société coopérative et participative">SCOP</abbr> dont je fais partie depuis six ans. Je recommande au préalable de lire <a href="/david/blog/2018/cout-site/" title="Attention ce qui va suivre peut vous choquer">combien coûte un site</a> et pourquoi je suis plutôt favorable à une <a href="/david/pro/devis/" title="Discutons-en !">non-demande de devis</a>.
  671. </p>
  672. <p>
  673. Je ne traque pas ta navigation mais mon
  674. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  675. conserve des logs d’accès.
  676. </p>
  677. </div>
  678. </footer>
  679. <script type="text/javascript">
  680. ;(_ => {
  681. const jumper = document.getElementById('jumper')
  682. jumper.addEventListener('click', e => {
  683. e.preventDefault()
  684. const anchor = e.target.getAttribute('href')
  685. const targetEl = document.getElementById(anchor.substring(1))
  686. targetEl.scrollIntoView({behavior: 'smooth'})
  687. })
  688. })()
  689. </script>
  690. <script>
  691. /* Service workers */
  692. if (navigator.serviceWorker) {
  693. window.addEventListener('load', function () {
  694. var selector = 'a[href^="/david/cache/"], a[rel=prev], a[rel=next]'
  695. function sendLinks (selector) {
  696. var links = [].slice.call(document.querySelectorAll(selector)).map(function (link) {
  697. return link.getAttribute('href')
  698. })
  699. links.push(location.pathname) // Put the current page in cache too.
  700. navigator.serviceWorker.controller.postMessage({ links: links })
  701. }
  702. navigator.serviceWorker.getRegistration()
  703. .then(function (registration) {
  704. if (!registration || !navigator.serviceWorker.controller) {
  705. return navigator.serviceWorker.register('/serviceworker.js')
  706. .then(navigator.serviceWorker.ready)
  707. .then(function () {
  708. console.log('[ServiceWorker] Ready to go!')
  709. })
  710. .catch(console.error.bind(console))
  711. } else {
  712. console.log('[ServiceWorker] Send links via registration')
  713. sendLinks(selector)
  714. }
  715. })
  716. navigator.serviceWorker.addEventListener('controllerchange', function () {
  717. console.log('[ServiceWorker] Send links via controller change')
  718. sendLinks(selector)
  719. })
  720. navigator.serviceWorker.addEventListener('message', function (event) {
  721. var link = document.querySelector('a[href="' + event.data.link + '"]')
  722. if (event.data.status && link) {
  723. link.style.backgroundColor = '#2d7474'
  724. link.style.color = '#f0f0ea'
  725. link.setAttribute('title', 'En cache pour consultation sans connexion')
  726. }
  727. })
  728. })
  729. } else {
  730. console.warn('[ServiceWorker] No cache for old browsers.')
  731. }
  732. </script>