Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

vor 4 Jahren
vor 4 Jahren
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918
  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>Flux RSS ? — 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/blog/2019/flux-rss/">
  29. <!-- SEO/Semantic metadata -->
  30. <meta name="description" content="Tentative d’explication claire d’un truc non trivial." />
  31. <meta name="twitter:description" property="og:description" itemprop="description" content="Tentative d’explication claire d’un truc non trivial." />
  32. <meta name="twitter:title" property="og:title" itemprop="name" content="Flux RSS ?" />
  33. <meta name="twitter:card" content="summary" />
  34. <meta name="twitter:creator" content="@davidbgk" />
  35. <meta name="twitter:url" property="og:url" content="https://larlet.fr/david/blog/2019/flux-rss/" />
  36. <meta property="og:type" content="article" />
  37. <meta property="og:site_name" content="David Larlet (@davidbgk)" />
  38. <meta name="twitter:image" property="og:image" itemprop="image" content="https://larlet.fr/static/david/blog/2019/flux-rss.jpg" />
  39. <style>
  40. /* http://meyerweb.com/eric/tools/css/reset/ */
  41. html, body, div, span,
  42. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  43. a, abbr, address, big, cite, code,
  44. del, dfn, em, img, ins,
  45. small, strike, strong, tt, var,
  46. dl, dt, dd, ol, ul, li,
  47. fieldset, form, label, legend,
  48. table, caption, tbody, tfoot, thead, tr, th, td,
  49. article, aside, canvas, details, embed,
  50. figure, figcaption, footer, header, hgroup,
  51. menu, nav, output, ruby, section, summary,
  52. time, mark, audio, video {
  53. margin: 0;
  54. padding: 0;
  55. border: 0;
  56. font-size: 100%;
  57. font: inherit;
  58. vertical-align: baseline;
  59. }
  60. /* HTML5 display-role reset for older browsers */
  61. article, aside, details, figcaption, figure,
  62. footer, header, hgroup, menu, nav, section { display: block; }
  63. body { line-height: 1; }
  64. blockquote, q { quotes: none; }
  65. blockquote:before, blockquote:after,
  66. q:before, q:after {
  67. content: '';
  68. content: none;
  69. }
  70. table {
  71. border-collapse: collapse;
  72. border-spacing: 0;
  73. }
  74. /* http://practicaltypography.com/equity.html */
  75. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  76. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: normal;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  89. font-weight: 300;
  90. font-style: italic;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'EquityTextB';
  95. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  96. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  97. font-weight: 700;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. @font-face {
  102. font-family: 'ConcourseT3';
  103. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  104. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  105. font-weight: 300;
  106. font-style: normal;
  107. font-display: swap;
  108. }
  109. @font-face {
  110. font-family: 'TriplicateT4c';
  111. src: url('/static/david/css/fonts/Triplicate-T4-Code-Regular-webfont.woff2') format('woff2'),
  112. url('/static/david/css/fonts/Triplicate-T4-Code-Regular-webfont.woff') format('woff');
  113. font-weight: 300;
  114. font-style: normal;
  115. font-display: swap;
  116. }
  117. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  118. body {
  119. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  120. font-family: "EquityTextB", Palatino, serif;
  121. background-color: #f0f0ea;
  122. color: #07486c;
  123. font-kerning: normal;
  124. -moz-osx-font-smoothing: grayscale;
  125. -webkit-font-smoothing: subpixel-antialiased;
  126. text-rendering: optimizeLegibility;
  127. font-variant-ligatures: common-ligatures contextual;
  128. font-feature-settings: "kern", "liga", "clig", "calt";
  129. }
  130. pre, code, kbd, samp, var, tt {
  131. font-family: 'TriplicateT4c', monospace;
  132. }
  133. em {
  134. font-style: italic;
  135. color: #323a45;
  136. }
  137. strong {
  138. font-weight: bold;
  139. color: black;
  140. }
  141. nav {
  142. background-color: #323a45;
  143. color: #f0f0ea;
  144. display: flex;
  145. justify-content: space-around;
  146. padding: 1rem .5rem;
  147. }
  148. nav:last-child {
  149. border-bottom: 1vh solid #2d7474;
  150. }
  151. nav a {
  152. color: #f0f0ea;
  153. }
  154. nav abbr {
  155. border-bottom: 1px dotted white;
  156. }
  157. h1 {
  158. border-top: 1vh solid #2d7474;
  159. border-bottom: .2vh dotted #2d7474;
  160. background-color: #e3e1e1;
  161. color: #323a45;
  162. text-align: center;
  163. padding: 5rem 0 4rem 0;
  164. width: 100%;
  165. font-family: 'ConcourseT3';
  166. display: flex;
  167. flex-direction: column;
  168. }
  169. h1.single {
  170. padding-bottom: 10rem;
  171. }
  172. h1 span {
  173. position: absolute;
  174. top: 1vh;
  175. left: 20%;
  176. line-height: 0;
  177. }
  178. h1 span a {
  179. line-height: 1.7;
  180. padding: 1rem 1.2rem .6rem 1.2rem;
  181. border-radius: 0 0 6% 6%;
  182. background: #2d7474;
  183. font-size: 1.3rem;
  184. color: white;
  185. text-decoration: none;
  186. }
  187. h2 {
  188. margin: 4rem 0 1rem;
  189. border-top: .2vh solid #2d7474;
  190. padding-top: 1vh;
  191. }
  192. h3 {
  193. text-align: center;
  194. margin: 3rem 0 .75em;
  195. }
  196. hr {
  197. height: .4rem;
  198. width: .4rem;
  199. border-radius: .4rem;
  200. background: #07486c;
  201. margin: 2.5rem auto;
  202. }
  203. time {
  204. display: bloc;
  205. margin-left: 0 !important;
  206. }
  207. ul, ol {
  208. margin: 2rem;
  209. }
  210. ul {
  211. list-style-type: square;
  212. }
  213. a {
  214. text-decoration-skip-ink: auto;
  215. text-decoration-thickness: 0.05em;
  216. text-underline-offset: 0.09em;
  217. }
  218. article {
  219. max-width: 50rem;
  220. display: flex;
  221. flex-direction: column;
  222. margin: 2rem auto;
  223. }
  224. article.single {
  225. border-top: .2vh dotted #2d7474;
  226. margin: -6rem auto 1rem auto;
  227. background: #f0f0ea;
  228. padding: 2rem;
  229. }
  230. article p:last-child {
  231. margin-bottom: 1rem;
  232. }
  233. p {
  234. padding: 0 .5rem;
  235. margin-left: 3rem;
  236. }
  237. p + p,
  238. figure + p {
  239. margin-top: 2rem;
  240. }
  241. blockquote {
  242. background-color: #e3e1e1;
  243. border-left: .5vw solid #2d7474;
  244. display: flex;
  245. flex-direction: column;
  246. align-items: center;
  247. padding: 1rem;
  248. margin: 1.5rem;
  249. }
  250. blockquote cite {
  251. font-style: italic;
  252. }
  253. blockquote p {
  254. margin-left: 0;
  255. }
  256. figure {
  257. border-top: .2vh solid #2d7474;
  258. background-color: #e3e1e1;
  259. text-align: center;
  260. padding: 1.5rem 0;
  261. margin: 1rem 0 0;
  262. font-size: 1.5rem;
  263. width: 100%;
  264. }
  265. figure img {
  266. max-width: 250px;
  267. max-height: 250px;
  268. border: .5vw solid #323a45;
  269. padding: 1px;
  270. }
  271. figcaption {
  272. padding: 1rem;
  273. line-height: 1.4;
  274. }
  275. aside {
  276. display: flex;
  277. flex-direction: column;
  278. background-color: #e3e1e1;
  279. padding: 1rem 0;
  280. border-bottom: .2vh solid #07486c;
  281. }
  282. aside p {
  283. max-width: 50rem;
  284. margin: 0 auto;
  285. }
  286. /* https://fvsch.com/code/css-locks/ */
  287. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  288. font-size: 1rem;
  289. line-height: calc( 1.5em + 0.2 * 1rem );
  290. }
  291. h1 {
  292. font-size: 1.9rem;
  293. line-height: calc( 1.2em + 0.2 * 1rem );
  294. }
  295. h2 {
  296. font-size: 1.6rem;
  297. line-height: calc( 1.3em + 0.2 * 1rem );
  298. }
  299. h3 {
  300. font-size: 1.35rem;
  301. line-height: calc( 1.4em + 0.2 * 1rem );
  302. }
  303. @media (min-width: 20em) {
  304. /* The (100vw - 20rem) / (50 - 20) part
  305. resolves to 0-1rem, depending on the
  306. viewport width (between 20em and 50em). */
  307. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  308. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  309. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  310. margin-left: 0;
  311. }
  312. h1 {
  313. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  314. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  315. }
  316. h2 {
  317. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  318. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  319. }
  320. h3 {
  321. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  322. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  323. }
  324. }
  325. @media (min-width: 50em) {
  326. /* The right part of the addition *must* be a
  327. rem value. In this example we *could* change
  328. the whole declaration to font-size:2.5rem,
  329. but if our baseline value was not expressed
  330. in rem we would have to use calc. */
  331. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  332. font-size: calc( 1rem + .6 * 1rem );
  333. line-height: 1.5em;
  334. }
  335. p, li, pre, details {
  336. margin-left: 3rem;
  337. }
  338. h1 {
  339. font-size: calc( 1.9rem + 1.5 * 1rem );
  340. line-height: 1.2em;
  341. }
  342. h2 {
  343. font-size: calc( 1.5rem + 1.5 * 1rem );
  344. line-height: 1.3em;
  345. }
  346. h3 {
  347. font-size: calc( 1.35rem + 1.5 * 1rem );
  348. line-height: 1.4em;
  349. }
  350. figure img {
  351. max-width: 500px;
  352. max-height: 500px;
  353. }
  354. }
  355. figure.unsquared {
  356. margin-bottom: 1.5rem;
  357. }
  358. figure.unsquared img {
  359. height: inherit;
  360. }
  361. /* https://github.com/richleland/pygments-css */
  362. .codehilite{
  363. background-color: #fdf6e3;
  364. margin: 1rem auto;
  365. padding: 1rem;
  366. overflow-x:auto;
  367. box-shadow:inset 0 0 2px rgba(0,0,0,0.2)
  368. }
  369. .codehilite .t{color:#586e75}
  370. .codehilite .w{color:#073642}
  371. .codehilite .err{color:#cb4b16}
  372. .codehilite .k{color:#859900}
  373. .codehilite .kc{color:#2aa198}
  374. .codehilite .kd{color:#268bd2}
  375. .codehilite .kn{color:#b58900}
  376. .codehilite .kp{color:#859900}
  377. .codehilite .kr{color:#073642}
  378. .codehilite .kt{color:#b58900}
  379. .codehilite .n{color:#586e75}
  380. .codehilite .na{color:#2aa198}
  381. .codehilite .nb{color:#268bd2}
  382. .codehilite .nc{color:#268bd2}
  383. .codehilite .ne{color:#cb4b16}
  384. .codehilite .no{color:#2aa198}
  385. .codehilite .nd{color:#2aa198}
  386. .codehilite .ni{color:#2aa198;font-weight:bold}
  387. .codehilite .nf{color:#268bd2}
  388. .codehilite .nn{color:#586e75}
  389. .codehilite .nt{color:#2aa198;font-weight:bold}
  390. .codehilite .nv{color:#cb4b16}
  391. .codehilite .b{color:#859900}
  392. .codehilite .bp{color:#586e75}
  393. .codehilite .v{color:#586e75}
  394. .codehilite .vc{color:#586e75}
  395. .codehilite .vg{color:#268bd2}
  396. .codehilite .vi{color:#268bd2}
  397. .codehilite .m{color:#268bd2}
  398. .codehilite .mf{color:#268bd2}
  399. .codehilite .mh{color:#268bd2}
  400. .codehilite .mi{color:#268bd2}
  401. .codehilite .mo{color:#268bd2}
  402. .codehilite .s{color:#2aa198}
  403. .codehilite .sb{color:#2aa198}
  404. .codehilite .sc{color:#2aa198}
  405. .codehilite .sd{color:#2aa198}
  406. .codehilite .s2{color:#2aa198}
  407. .codehilite .se{color:#cb4b16}
  408. .codehilite .sh{color:#2aa198}
  409. .codehilite .si{color:#cb4b16}
  410. .codehilite .sx{color:#2aa198}
  411. .codehilite .sr{color:#cb4b16}
  412. .codehilite .s1{color:#2aa198}
  413. .codehilite .ss{color:#cb4b16}
  414. .codehilite .il{color:#268bd2}
  415. .codehilite .o{color:#586e75}
  416. .codehilite .ow{color:#859900}
  417. .codehilite .p{color:#586e75}
  418. .codehilite .c{color:#93a1a1;font-style:italic}
  419. .codehilite .cm{color:#93a1a1}
  420. .codehilite .cp{color:#93a1a1}
  421. .codehilite .c1{color:#93a1a1}
  422. .codehilite .cs{color:#93a1a1}
  423. .codehilite .hll{background-color:#dc322f}
  424. .codehilite .g{color:#586e75}
  425. .codehilite .gd{color:#586e75}
  426. .codehilite .ge{font-style:italic}
  427. .codehilite .gr{color:#586e75}
  428. .codehilite .gh{color:#586e75;font-weight:bold}
  429. .codehilite .gi{color:#586e75}
  430. .codehilite .go{color:#586e75}
  431. .codehilite .gp{color:#586e75}
  432. .codehilite .gs{font-weight:bold}
  433. .codehilite .gu{color:#586e75;font-weight:bold}
  434. .codehilite .gt{color:#586e75}
  435. @media print {
  436. body { font-size: 100%; }
  437. a:after { content: " (" attr(href) ")"; }
  438. a, a:link, a:visited, a:after {
  439. text-decoration: underline;
  440. text-shadow: none !important;
  441. background-image: none !important;
  442. background: white;
  443. color: black;
  444. }
  445. abbr[title] { border-bottom: 0; }
  446. abbr[title]:after { content: " (" attr(title) ")"; }
  447. img { page-break-inside: avoid; }
  448. @page { margin: 2cm .5cm; }
  449. h1, h2, h3 { page-break-after: avoid; }
  450. p3 { orphans: 3; widows: 3; }
  451. img {
  452. max-width: 250px !important;
  453. max-height: 250px !important;
  454. }
  455. nav, aside { display: none; }
  456. }
  457. ul.with_columns {
  458. column-count: 1;
  459. }
  460. @media (min-width: 20em) {
  461. ul.with_columns {
  462. column-count: 2;
  463. }
  464. }
  465. @media (min-width: 50em) {
  466. ul.with_columns {
  467. column-count: 3;
  468. }
  469. }
  470. ul.with_two_columns {
  471. column-count: 1;
  472. }
  473. @media (min-width: 20em) {
  474. ul.with_two_columns {
  475. column-count: 1;
  476. }
  477. }
  478. @media (min-width: 50em) {
  479. ul.with_two_columns {
  480. column-count: 2;
  481. }
  482. }
  483. .gallery {
  484. display: flex;
  485. flex-wrap: wrap;
  486. justify-content: space-around;
  487. }
  488. .gallery figure img {
  489. margin-left: 1rem;
  490. margin-right: 1rem;
  491. }
  492. .gallery figure figcaption {
  493. font-family: 'ConcourseT3'
  494. }
  495. footer {
  496. font-family: 'ConcourseT3';
  497. display: flex;
  498. flex-direction: column;
  499. border-top: 3px solid white;
  500. padding: 4rem 0;
  501. background-color: #07486c;
  502. color: white;
  503. }
  504. footer > * {
  505. max-width: 50rem;
  506. margin: 0 auto;
  507. }
  508. footer a {
  509. color: #f1c40f;
  510. }
  511. footer .avatar {
  512. width: 200px;
  513. height: 200px;
  514. border-radius: 50%;
  515. float: left;
  516. -webkit-shape-outside: circle();
  517. shape-outside: circle();
  518. margin-right: 2rem;
  519. padding: 2px 5px 5px 2px;
  520. background: white;
  521. border-left: 1px solid #f1c40f;
  522. border-top: 1px solid #f1c40f;
  523. border-right: 5px solid #f1c40f;
  524. border-bottom: 5px solid #f1c40f;
  525. }
  526. </style>
  527. <h1 class="single">
  528. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  529. Flux RSS ?
  530. <time>Publié le 19 mars 2019</time>
  531. </h1>
  532. <article class="single">
  533. <p><em>Un article qui va évoluer en fonction de vos retours de façon à en faire une référence. N’hésitez pas à me proposer des améliorations !</em></p>
  534. <p>Si vous avez entendu parler de « flux RSS », « flux Atom », de « syndication », d’« agrégateur » ou en anglais de « <em>feeds</em> » sans vraiment savoir de quoi il retourne je vais essayer de démystifier ça.</p>
  535. <p>Sans parler de technique. En parlant un peu de politique quand même.</p>
  536. <h2>Utilité</h2>
  537. <p>Si vous savez ce qu’est une liste de diffusion (ou <em>newsletter</em>)  vous entretenez une familiarité avec les flux RS.</p>
  538. <p>Avec une liste de diffusion, vous recevez un courriel (ou <em>email</em>) à chaque nouvelle information disponible. Une personne rédige un texte, ajoute tous ses contacts en copie et ça arrive dans votre boîte de réception.</p>
  539. <details>
  540. <summary>Enfin presque…</summary>
  541. <em>En réalité, ça passe probablement par un service tiers qui récupère votre adresse et redirige chaque lien envoyé pour pouvoir vous profiler en fonction de ce qui vous a intéressé mais restons concentré·e·s sur le flux d’information pour l’instant.</em>
  542. </details>
  543. <p>Lorsqu’on utilise un flux RSS, il s’agit de s’abonner à ce qu’une personne va publier (oui, c’est l’ancêtre du réseau social !) sauf que vous ne recevez pas les mises à jour dans votre boîte de réception mais dans un outil dédié. Et vous n’avez en général pas à fournir votre courriel ni à vous identifier. Et RSS fonctionne avec la majorité des publications sur le Web.</p>
  544. <p>Enfin ça fonctionnait, car — et c’est là où ça devient politique — les plateformes ont tout intérêt à ce que vous restiez chez elles pour tracer votre comportement, que vous veniez regarder de la publicité le plus régulièrement possible, etc.</p>
  545. <p>Utiliser un lecteur de flux RSS (on appelle cela un agrégateur) c’est <em>aussi</em> lutter contre une centralisation du Web. C’est également ne pas être soumis aux bon vouloir d’un algorithme pour sélectionner ce que vous allez voir. C’est choisir intentionnellement vos lectures et donc votre esprit critique.</p>
  546. <h2>Usage</h2>
  547. <p>En général, on représente le RSS avec l’icône (orange) suivante :</p>
  548. <p><svg role="img" aria-label="Logo de RSS" xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#f5a623" stroke-width="3" stroke-linecap="square" stroke-linejoin="arcs"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg></p>
  549. <p>J’ai dans mon outil d’agrégation une centaine de sources, majoritairement des blogs personnels, qui se rafraichissent toutes les 30 minutes. Je n’ai plus besoin d’aller consulter ces sites un par un pour savoir s’ils ont été mis à jour, des petits robots s’en occupent pour moi. Je me retrouve avec un flux d’articles en ordre chronologique de publication. Et lisibles dans un style unifié qui me permet d’être attentif à ce que je lis. Pas de <em>popups</em> pour recevoir du <em>spam</em>, pas de publicités qui s’agitent, pas de bouton pour accepter les <em>cookies</em>. Du contenu simple et lisible.</p>
  550. <p>Bien sûr, en un clic je peux me retrouver sur le site et interagir avec mais, dans la majorité des cas, cette suite d’articles me suffit. Cela me permet de gagner beaucoup de temps et de tranquillité d’esprit. Je n’ai pas la peur de manquer quelque chose, je n’ai pas la peur de suivre des liens de suggestions douteux, je ne suis pas profilé par ce que je lis.</p>
  551. <h2>Et moi ?</h2>
  552. <p>Premièrement, si vous produisez du contenu, assurez-vous d’avoir laissé la possibilité aux autres de s’abonner à votre flux RSS. Sur la plupart des outils de publication (Wordpress, Medium, etc) la syndication est activée par défaut, mais vous pouvez vous en assurer en vous abonnant à vos propres publications ! Vous pouvez faire un lien explicite vers votre flux dans vos pages pour en favoriser la découverte et encourager cette façon décentralisée et libre d’accéder à de l’information.</p>
  553. <p>Et justement en parlant de s’abonner, il existe une <a href="https://en.wikipedia.org/wiki/Comparison_of_feed_aggregators">multitude d’agrégateurs</a> (cette page n’existait malheureusement pas en français, <a href="https://fr.wikipedia.org/wiki/Comparaison_des_agr%C3%A9gateurs_de_flux">maintenant si</a> !), à vous de trouver celui qui vous convient. C’est aussi la beauté d’un standard, cela permet d’une part d’éviter les monopoles et de l’autre d’être résilient lorsqu’un outil est abandonné. J’utilise pour ma part <a href="https://en.wikipedia.org/wiki/NetNewsWire">NetNewsWire</a> sous macOS et rien ne m’empêche d’en changer demain sachant que les imports et exports sont aussi standardisés.</p>
  554. <p>Lorsque vous avez installé un de ces outils, vous pouvez tester en vous abonnant — totalement au hasard — au <a href="/david/log">flux de cet espace</a>. Si vous cliquez sur ce lien dans votre navigateur vous allez avoir un code (presque) impossible à lire <em>mais</em> si vous l’ajoutez à votre agrégateur alors là votre vie va changer à tout jamais. Vous pouvez ensuite parcourir vos sites favoris à la recherche d’un flux RSS dédié.</p>
  555. <p>Ça devrait ressembler à ça :</p>
  556. <figure class="unsquared">
  557. <img src="/static/david/blog/2019/capture-lecteur-rss.png" alt="Capture de mon lecteur RSS" />
  558. <figcaption>
  559. Par exemple, voici le rendu de ce billet dans mon agrégateur (so meta).
  560. </figcaption>
  561. </figure>
  562. <p>Notez qu’il existe des agrégateurs sous forme de logiciels dédiés mais aussi sous forme d’applications Web selon vos préférences personnelles et/ou vos contraintes (mobilité, ordinateur partagé, etc).</p>
  563. <p>Quelques exemples avec les principaux écueils que vous pouvez rencontrer :</p>
  564. <ul>
  565. <li><a href="http://romy.tetue.net/">Romy Duhem-Verdière</a>, ce qui devrait être le cas « classique », un lien direct vers le <a href="http://feeds.feedburner.com/romy">flux RSS</a> depuis toutes les pages.</li>
  566. <li><a href="https://marges.clairezuliani.com/">Claire Zuliani</a>, le lien n’est pas visible donc il faut soit que votre agrégateur le trouve à partir de la page, soit aller dans le code source pour <a href="https://marges.clairezuliani.com/feed.xml">le trouver</a>.</li>
  567. <li><a href="http://elisegravel.com/">Élise Gravel</a>, on voit qu’il est mal configuré (non affichage dans le navigateur) et non découvrable directement depuis le site ni même son code source. Il faut savoir que c’est un Wordpress qui rajoute <code>/feed/</code> par défaut à <a href="http://elisegravel.com/feed/">l’URL du flux</a>, pas évident.</li>
  568. <li><a href="https://www.youtube.com/channel/UCBqV52BgH8eQGExjZz7rO5w">Chris Prouse</a> sur Youtube, il faut passer par <a href="https://lehollandaisvolant.net/?d=2018/06/09/13/55/04-mini-outil-trouver-le-flux-rss-dune-chaine-youtube">un petit outil</a> pour trouver le <a href="https://www.youtube.com/feeds/videos.xml?channel_id=UCBqV52BgH8eQGExjZz7rO5w">flux RSS d’une chaîne</a>.</li>
  569. <li>D’autres cas insolites ?</li>
  570. </ul>
  571. <p>Cela fonctionne aussi bien évidemment avec des sites d’informations plus traditionnels comme <a href="https://www.monde-diplomatique.fr/">Le Monde Diplomatique</a>.</p>
  572. <p>Il existe des extensions dédiées aux navigateurs pour détecter les flux RSS comme <a href="https://addons.mozilla.org/fr/firefox/addon/awesome-rss/">Awesome RSS</a> pour Firefox ou <a href="https://chrome.google.com/webstore/detail/rss-subscription-extensio/nlbjncdgjeocebhnmkbbbdekmmmcbfjd">RSS Subscription Extension</a> pour Chrome.</p>
  573. <h2>Encore !</h2>
  574. <ul>
  575. <li>La page wikipedia <a href="https://fr.wikipedia.org/wiki/Souscription_%C3%A0_du_contenu">Souscription à du contenu</a></li>
  576. <li><a href="https://openweb.eu.org/articles/syndication-mon-amour">Syndication mon amour</a> (<a href="/david/cache/9e92a5ac171038de1c58a2ab90e98c0e/">cache</a>)</li>
  577. <li>Votre propre article sur le sujet ?</li>
  578. </ul>
  579. </article>
  580. <figure class="image" property="schema:image">
  581. <img src="/static/david/blog/2019/flux-rss.jpg" alt="" />
  582. </figure>
  583. <nav id="jumpto">
  584. <p>
  585. <a rel=prev href="/david/blog/2019/valeurs-etoiles/">← Valeurs et étoiles</a> | <a href="/david/blog/" title="Retour à la liste des expériences">↑</a> | <a rel=next href="/david/blog/2019/faire-equipe/">Faire équipe →</a>
  586. </p>
  587. </nav>
  588. <footer>
  589. <div>
  590. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  591. <p>
  592. Bonjour/Hi!
  593. 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>
  594. 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>).
  595. </p>
  596. <p>
  597. 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>.
  598. </p>
  599. <p>
  600. Les dernières publications hebdomadaires sont :
  601. </p>
  602. <ul class="with_columns">
  603. <li>
  604. <a href="/david/stream/2019/12/31/">Merci</a>
  605. </li>
  606. <li>
  607. <a href="/david/stream/2019/12/27/">Intemporels</a>
  608. </li>
  609. <li>
  610. <a href="/david/stream/2019/12/24/">Outils</a>
  611. </li>
  612. <li>
  613. <a href="/david/stream/2019/12/17/">Origines</a>
  614. </li>
  615. <li>
  616. <a href="/david/stream/2019/12/10/">Publier</a>
  617. </li>
  618. <li>
  619. <a href="/david/stream/2019/12/03/">En forêt</a>
  620. </li>
  621. <li>
  622. <a href="/david/stream/2019/11/26/">Ecocentric</a>
  623. </li>
  624. <li>
  625. <a href="/david/stream/2019/11/19/">Se livrer</a>
  626. </li>
  627. <li>
  628. <a href="/david/stream/2019/11/12/">Dépendances</a>
  629. </li>
  630. <li>
  631. <a href="/david/stream/2019/11/05/">Positif</a>
  632. </li>
  633. <li>
  634. <a href="/david/stream/2019/10/29/">Dettes</a>
  635. </li>
  636. <li>
  637. <a href="/david/stream/2019/10/22/">Privilèges</a>
  638. </li>
  639. <li>
  640. <a href="/david/stream/2019/10/15/">Discrétion</a>
  641. </li>
  642. <li>
  643. <a href="/david/stream/2019/10/08/">Désespérance</a>
  644. </li>
  645. <li>
  646. <a href="/david/stream/2019/10/01/">Présent</a>
  647. </li>
  648. <li>
  649. <a href="/david/stream/2019/09/24/">Manifester</a>
  650. </li>
  651. <li>
  652. <a href="/david/stream/2019/09/17/">Arpenter</a>
  653. </li>
  654. <li>
  655. <a href="/david/stream/2019/09/10/">Nostalgie</a>
  656. </li>
  657. <li>
  658. <a href="/david/stream/2019/09/03/">Déconstruire</a>
  659. </li>
  660. <li>
  661. <a href="/david/stream/2019/08/27/">Documenter</a>
  662. </li>
  663. <li>
  664. <a href="/david/stream/2019/08/20/">Frustration</a>
  665. </li>
  666. <li>
  667. <a href="/david/stream/2019/08/13/">Holisme</a>
  668. </li>
  669. <li>
  670. <a href="/david/stream/2019/08/06/">1%</a>
  671. </li>
  672. <li>
  673. <a href="/david/stream/2019/07/30/">Exemplarité</a>
  674. </li>
  675. <li>
  676. <a href="/david/stream/2019/07/23/">Timelines</a>
  677. </li>
  678. <li>
  679. <a href="/david/stream/2019/07/16/">Écoute</a>
  680. </li>
  681. <li>
  682. <a href="/david/stream/2019/07/02/">Anxiété</a>
  683. </li>
  684. <li>
  685. <a href="/david/stream/2019/06/21/">À lier</a>
  686. </li>
  687. <li>
  688. <a href="/david/stream/2019/06/14/">Pauvreté</a>
  689. </li>
  690. <li>
  691. <a href="/david/stream/2019/06/07/">Amateur</a>
  692. </li>
  693. <li>
  694. <a href="/david/stream/2019/05/31/">Pollution</a>
  695. </li>
  696. <li>
  697. <a href="/david/stream/2019/05/24/">Apaisement</a>
  698. </li>
  699. <li>
  700. <a href="/david/stream/2019/05/10/">Folie</a>
  701. </li>
  702. <li>
  703. <a href="/david/stream/2019/05/03/">Sympathie</a>
  704. </li>
  705. <li>
  706. <a href="/david/stream/2019/04/12/">Péremption</a>
  707. </li>
  708. <li>
  709. <a href="/david/stream/2019/04/05/">Définitions</a>
  710. </li>
  711. <li>
  712. <a href="/david/stream/2019/03/29/">Acceptation</a>
  713. </li>
  714. <li>
  715. <a href="/david/stream/2019/03/22/">Dissonance</a>
  716. </li>
  717. <li>
  718. <a href="/david/stream/2019/03/15/">Reconnaissance</a>
  719. </li>
  720. <li>
  721. <a href="/david/stream/2019/03/08/">Lecture</a>
  722. </li>
  723. <li>
  724. <a href="/david/stream/2019/03/01/">Journaux</a>
  725. </li>
  726. <li>
  727. <a href="/david/stream/2019/02/22/">Écriture</a>
  728. </li>
  729. <li>
  730. <a href="/david/stream/2019/02/15/">Kyriarchie</a>
  731. </li>
  732. <li>
  733. <a href="/david/stream/2019/02/08/">Mots-serrures</a>
  734. </li>
  735. <li>
  736. <a href="/david/stream/2019/02/01/">Sans voie</a>
  737. </li>
  738. <li>
  739. <a href="/david/stream/2019/01/25/">Auto-diagnostic</a>
  740. </li>
  741. <li>
  742. <a href="/david/stream/2019/01/18/">Agilité</a>
  743. </li>
  744. <li>
  745. <a href="/david/stream/2019/01/11/">Métaphores</a>
  746. </li>
  747. <li>
  748. <a href="/david/stream/2019/01/04/">Balbutiements</a>
  749. </li>
  750. </ul>
  751. <p>
  752. Voici quelques articles choisis :
  753. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  754. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  755. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  756. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  757. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  758. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  759. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  760. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  761. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  762. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  763. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  764. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  765. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  766. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  767. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  768. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  769. </p>
  770. <p>
  771. 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>.
  772. </p>
  773. <p>
  774. Je ne traque pas ta navigation mais mon
  775. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  776. conserve des logs d’accès.
  777. </p>
  778. </div>
  779. </footer>
  780. <script type="text/javascript">
  781. ;(_ => {
  782. const jumper = document.getElementById('jumper')
  783. jumper.addEventListener('click', e => {
  784. e.preventDefault()
  785. const anchor = e.target.getAttribute('href')
  786. const targetEl = document.getElementById(anchor.substring(1))
  787. targetEl.scrollIntoView({behavior: 'smooth'})
  788. })
  789. })()
  790. </script>
  791. <script>
  792. /* Service workers */
  793. if (navigator.serviceWorker) {
  794. window.addEventListener('load', function () {
  795. var selector = 'a[href^="/david/cache/"], a[rel=prev], a[rel=next]'
  796. function sendLinks (selector) {
  797. var links = [].slice.call(document.querySelectorAll(selector)).map(function (link) {
  798. return link.getAttribute('href')
  799. })
  800. links.push(location.pathname) // Put the current page in cache too.
  801. navigator.serviceWorker.controller.postMessage({ links: links })
  802. }
  803. navigator.serviceWorker.getRegistration()
  804. .then(function (registration) {
  805. if (!registration || !navigator.serviceWorker.controller) {
  806. return navigator.serviceWorker.register('/serviceworker.js')
  807. .then(navigator.serviceWorker.ready)
  808. .then(function () {
  809. console.log('[ServiceWorker] Ready to go!')
  810. })
  811. .catch(console.error.bind(console))
  812. } else {
  813. console.log('[ServiceWorker] Send links via registration')
  814. sendLinks(selector)
  815. }
  816. })
  817. navigator.serviceWorker.addEventListener('controllerchange', function () {
  818. console.log('[ServiceWorker] Send links via controller change')
  819. sendLinks(selector)
  820. })
  821. navigator.serviceWorker.addEventListener('message', function (event) {
  822. var link = document.querySelector('a[href="' + event.data.link + '"]')
  823. if (event.data.status && link) {
  824. link.style.backgroundColor = '#2d7474'
  825. link.style.color = '#f0f0ea'
  826. link.setAttribute('title', 'En cache pour consultation sans connexion')
  827. }
  828. })
  829. })
  830. } else {
  831. console.warn('[ServiceWorker] No cache for old browsers.')
  832. }
  833. </script>