A place to cache linked articles (think custom and personal wayback machine)
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.

преди 5 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  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>La création d'un livre web : Le livre 010101 (archive) — 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. <meta name="robots" content="noindex, nofollow">
  28. <meta content="origin-when-cross-origin" name="referrer">
  29. <!-- Canonical URL for SEO purposes -->
  30. <link rel="canonical" href="http://www.quaternum.net/2015/10/26/creation-d-un-livre-web-le-livre-010101/">
  31. <style>
  32. /* http://meyerweb.com/eric/tools/css/reset/ */
  33. html, body, div, span,
  34. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  35. a, abbr, address, big, cite, code,
  36. del, dfn, em, img, ins,
  37. small, strike, strong, tt, var,
  38. dl, dt, dd, ol, ul, li,
  39. fieldset, form, label, legend,
  40. table, caption, tbody, tfoot, thead, tr, th, td,
  41. article, aside, canvas, details, embed,
  42. figure, figcaption, footer, header, hgroup,
  43. menu, nav, output, ruby, section, summary,
  44. time, mark, audio, video {
  45. margin: 0;
  46. padding: 0;
  47. border: 0;
  48. font-size: 100%;
  49. font: inherit;
  50. vertical-align: baseline;
  51. }
  52. /* HTML5 display-role reset for older browsers */
  53. article, aside, details, figcaption, figure,
  54. footer, header, hgroup, menu, nav, section { display: block; }
  55. body { line-height: 1; }
  56. blockquote, q { quotes: none; }
  57. blockquote:before, blockquote:after,
  58. q:before, q:after {
  59. content: '';
  60. content: none;
  61. }
  62. table {
  63. border-collapse: collapse;
  64. border-spacing: 0;
  65. }
  66. /* http://practicaltypography.com/equity.html */
  67. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  68. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  69. @font-face {
  70. font-family: 'EquityTextB';
  71. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  72. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  73. font-weight: 300;
  74. font-style: normal;
  75. font-display: swap;
  76. }
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: italic;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  89. font-weight: 700;
  90. font-style: normal;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'ConcourseT3';
  95. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  96. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  97. font-weight: 300;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  102. body {
  103. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  104. font-family: "EquityTextB", Palatino, serif;
  105. background-color: #f0f0ea;
  106. color: #07486c;
  107. font-kerning: normal;
  108. -moz-osx-font-smoothing: grayscale;
  109. -webkit-font-smoothing: subpixel-antialiased;
  110. text-rendering: optimizeLegibility;
  111. font-variant-ligatures: common-ligatures contextual;
  112. font-feature-settings: "kern", "liga", "clig", "calt";
  113. }
  114. pre, code, kbd, samp, var, tt {
  115. font-family: 'TriplicateT4c', monospace;
  116. }
  117. em {
  118. font-style: italic;
  119. color: #323a45;
  120. }
  121. strong {
  122. font-weight: bold;
  123. color: black;
  124. }
  125. nav {
  126. background-color: #323a45;
  127. color: #f0f0ea;
  128. display: flex;
  129. justify-content: space-around;
  130. padding: 1rem .5rem;
  131. }
  132. nav:last-child {
  133. border-bottom: 1vh solid #2d7474;
  134. }
  135. nav a {
  136. color: #f0f0ea;
  137. }
  138. nav abbr {
  139. border-bottom: 1px dotted white;
  140. }
  141. h1 {
  142. border-top: 1vh solid #2d7474;
  143. border-bottom: .2vh dotted #2d7474;
  144. background-color: #e3e1e1;
  145. color: #323a45;
  146. text-align: center;
  147. padding: 5rem 0 4rem 0;
  148. width: 100%;
  149. font-family: 'ConcourseT3';
  150. display: flex;
  151. flex-direction: column;
  152. }
  153. h1.single {
  154. padding-bottom: 10rem;
  155. }
  156. h1 span {
  157. position: absolute;
  158. top: 1vh;
  159. left: 20%;
  160. line-height: 0;
  161. }
  162. h1 span a {
  163. line-height: 1.7;
  164. padding: 1rem 1.2rem .6rem 1.2rem;
  165. border-radius: 0 0 6% 6%;
  166. background: #2d7474;
  167. font-size: 1.3rem;
  168. color: white;
  169. text-decoration: none;
  170. }
  171. h2 {
  172. margin: 4rem 0 1rem;
  173. border-top: .2vh solid #2d7474;
  174. padding-top: 1vh;
  175. }
  176. h3 {
  177. text-align: center;
  178. margin: 3rem 0 .75em;
  179. }
  180. hr {
  181. height: .4rem;
  182. width: .4rem;
  183. border-radius: .4rem;
  184. background: #07486c;
  185. margin: 2.5rem auto;
  186. }
  187. time {
  188. display: bloc;
  189. margin-left: 0 !important;
  190. }
  191. ul, ol {
  192. margin: 2rem;
  193. }
  194. ul {
  195. list-style-type: square;
  196. }
  197. a {
  198. text-decoration-skip-ink: auto;
  199. text-decoration-thickness: 0.05em;
  200. text-underline-offset: 0.09em;
  201. }
  202. article {
  203. max-width: 50rem;
  204. display: flex;
  205. flex-direction: column;
  206. margin: 2rem auto;
  207. }
  208. article.single {
  209. border-top: .2vh dotted #2d7474;
  210. margin: -6rem auto 1rem auto;
  211. background: #f0f0ea;
  212. padding: 2rem;
  213. }
  214. article p:last-child {
  215. margin-bottom: 1rem;
  216. }
  217. p {
  218. padding: 0 .5rem;
  219. margin-left: 3rem;
  220. }
  221. p + p,
  222. figure + p {
  223. margin-top: 2rem;
  224. }
  225. blockquote {
  226. background-color: #e3e1e1;
  227. border-left: .5vw solid #2d7474;
  228. display: flex;
  229. flex-direction: column;
  230. align-items: center;
  231. padding: 1rem;
  232. margin: 1.5rem;
  233. }
  234. blockquote cite {
  235. font-style: italic;
  236. }
  237. blockquote p {
  238. margin-left: 0;
  239. }
  240. figure {
  241. border-top: .2vh solid #2d7474;
  242. background-color: #e3e1e1;
  243. text-align: center;
  244. padding: 1.5rem 0;
  245. margin: 1rem 0 0;
  246. font-size: 1.5rem;
  247. width: 100%;
  248. }
  249. figure img {
  250. max-width: 250px;
  251. max-height: 250px;
  252. border: .5vw solid #323a45;
  253. padding: 1px;
  254. }
  255. figcaption {
  256. padding: 1rem;
  257. line-height: 1.4;
  258. }
  259. aside {
  260. display: flex;
  261. flex-direction: column;
  262. background-color: #e3e1e1;
  263. padding: 1rem 0;
  264. border-bottom: .2vh solid #07486c;
  265. }
  266. aside p {
  267. max-width: 50rem;
  268. margin: 0 auto;
  269. }
  270. /* https://fvsch.com/code/css-locks/ */
  271. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  272. font-size: 1rem;
  273. line-height: calc( 1.5em + 0.2 * 1rem );
  274. }
  275. h1 {
  276. font-size: 1.9rem;
  277. line-height: calc( 1.2em + 0.2 * 1rem );
  278. }
  279. h2 {
  280. font-size: 1.6rem;
  281. line-height: calc( 1.3em + 0.2 * 1rem );
  282. }
  283. h3 {
  284. font-size: 1.35rem;
  285. line-height: calc( 1.4em + 0.2 * 1rem );
  286. }
  287. @media (min-width: 20em) {
  288. /* The (100vw - 20rem) / (50 - 20) part
  289. resolves to 0-1rem, depending on the
  290. viewport width (between 20em and 50em). */
  291. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  292. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  293. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  294. margin-left: 0;
  295. }
  296. h1 {
  297. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  298. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  299. }
  300. h2 {
  301. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  302. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  303. }
  304. h3 {
  305. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  306. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  307. }
  308. }
  309. @media (min-width: 50em) {
  310. /* The right part of the addition *must* be a
  311. rem value. In this example we *could* change
  312. the whole declaration to font-size:2.5rem,
  313. but if our baseline value was not expressed
  314. in rem we would have to use calc. */
  315. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  316. font-size: calc( 1rem + .6 * 1rem );
  317. line-height: 1.5em;
  318. }
  319. p, li, pre, details {
  320. margin-left: 3rem;
  321. }
  322. h1 {
  323. font-size: calc( 1.9rem + 1.5 * 1rem );
  324. line-height: 1.2em;
  325. }
  326. h2 {
  327. font-size: calc( 1.5rem + 1.5 * 1rem );
  328. line-height: 1.3em;
  329. }
  330. h3 {
  331. font-size: calc( 1.35rem + 1.5 * 1rem );
  332. line-height: 1.4em;
  333. }
  334. figure img {
  335. max-width: 500px;
  336. max-height: 500px;
  337. }
  338. }
  339. figure.unsquared {
  340. margin-bottom: 1.5rem;
  341. }
  342. figure.unsquared img {
  343. height: inherit;
  344. }
  345. @media print {
  346. body { font-size: 100%; }
  347. a:after { content: " (" attr(href) ")"; }
  348. a, a:link, a:visited, a:after {
  349. text-decoration: underline;
  350. text-shadow: none !important;
  351. background-image: none !important;
  352. background: white;
  353. color: black;
  354. }
  355. abbr[title] { border-bottom: 0; }
  356. abbr[title]:after { content: " (" attr(title) ")"; }
  357. img { page-break-inside: avoid; }
  358. @page { margin: 2cm .5cm; }
  359. h1, h2, h3 { page-break-after: avoid; }
  360. p3 { orphans: 3; widows: 3; }
  361. img {
  362. max-width: 250px !important;
  363. max-height: 250px !important;
  364. }
  365. nav, aside { display: none; }
  366. }
  367. ul.with_columns {
  368. column-count: 1;
  369. }
  370. @media (min-width: 20em) {
  371. ul.with_columns {
  372. column-count: 2;
  373. }
  374. }
  375. @media (min-width: 50em) {
  376. ul.with_columns {
  377. column-count: 3;
  378. }
  379. }
  380. ul.with_two_columns {
  381. column-count: 1;
  382. }
  383. @media (min-width: 20em) {
  384. ul.with_two_columns {
  385. column-count: 1;
  386. }
  387. }
  388. @media (min-width: 50em) {
  389. ul.with_two_columns {
  390. column-count: 2;
  391. }
  392. }
  393. .gallery {
  394. display: flex;
  395. flex-wrap: wrap;
  396. justify-content: space-around;
  397. }
  398. .gallery figure img {
  399. margin-left: 1rem;
  400. margin-right: 1rem;
  401. }
  402. .gallery figure figcaption {
  403. font-family: 'ConcourseT3'
  404. }
  405. footer {
  406. font-family: 'ConcourseT3';
  407. display: flex;
  408. flex-direction: column;
  409. border-top: 3px solid white;
  410. padding: 4rem 0;
  411. background-color: #07486c;
  412. color: white;
  413. }
  414. footer > * {
  415. max-width: 50rem;
  416. margin: 0 auto;
  417. }
  418. footer a {
  419. color: #f1c40f;
  420. }
  421. footer .avatar {
  422. width: 200px;
  423. height: 200px;
  424. border-radius: 50%;
  425. float: left;
  426. -webkit-shape-outside: circle();
  427. shape-outside: circle();
  428. margin-right: 2rem;
  429. padding: 2px 5px 5px 2px;
  430. background: white;
  431. border-left: 1px solid #f1c40f;
  432. border-top: 1px solid #f1c40f;
  433. border-right: 5px solid #f1c40f;
  434. border-bottom: 5px solid #f1c40f;
  435. }
  436. </style>
  437. <h1>
  438. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  439. La création d'un livre web : Le livre 010101 (archive)
  440. <time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
  441. </h1>
  442. <section>
  443. <article>
  444. <h3><a href="http://www.quaternum.net/2015/10/26/creation-d-un-livre-web-le-livre-010101/">Source originale du contenu</a></h3>
  445. <p>Après avoir découvert le livre web <a href="/2015/05/12/un-design-de-livre-web/">Professionnal Web Typography</a> de Donny Truong, voici une mise en pratique avec <em>Le livre 010101 (1971-2015)</em> de Marie Lebert : création d’un site web dédié et d’un fichier EPUB, afin de palier au seul format PDF disponible. Les principes : permettre une lecture <em>en ligne</em> ou <em>hors ligne</em>. Les contraintes : lisibilité, simplicité et légèreté. Explications du projet.</p>
  446. <h2 id="le-projet-de-marie-lebert">Le projet de Marie Lebert</h2>
  447. <p>Depuis plusieurs années <a href="https://marielebert.wordpress.com/">Marie Lebert</a> recense les événements majeurs de l’évolution du livre numérique à travers un ouvrage qui a connu plusieurs <em>éditions</em>. En avril 2015, elle publie la dernière version à jour : 46 chapitres, plus de 700 000 signes, et une chronologie comprenant plus de 200 dates entre 1971 et 2015.</p>
  448. <p>Une précision importante : depuis avril 2015 et le dépôt du livre de Marie Lebert au format PDF <a href="http://www.enssib.fr/bibliotheque-numerique/notices/65334-le-livre-010101-1971-2015">sur le site de l’enssib</a>, la publication est placée sous licence Creative Commons “Attribution - Pas d’Utilisation Commerciale - Pas de Modification 4.0 International”. Le contenu du livre peut donc être librement diffusé, hors usage commercial.</p>
  449. <h2 id="une-dmarche-personnelle">Une démarche personnelle</h2>
  450. <p>Seule une version PDF du livre de Marie Lebert est proposée, dommage pour un livre sur le livre numérique. Je décide mettre en forme les contenus déjà disponibles dans un <em>livre web</em>, accompagné d’un fichier au format EPUB. </p>
  451. <p>Ne répondant à aucune demande ou commande, je décide de mener ce projet en mon nom propre, et propose à Marie Lebert des premiers essais.</p>
  452. <h2 id="www010101booknet">www.010101book.net</h2>
  453. <p>Le livre est lisible en ligne à cette adresse :</p>
  454. <p><a class="link-button" href="http://www.010101book.net">www.010101book.net</a></p>
  455. <h2 id="les-tapes-du-projet">Les étapes du projet</h2>
  456. <p>Pour celles et ceux qui seraient curieux des étapes d’un tel projet, voici quelques explications. Faites-vous un thé ou un café, c’est un peu long !</p>
  457. <p>Je sais par avance que cette entreprise ne sera pas de tout repos, je découpe le projet en plusieurs parties :</p>
  458. <ol>
  459. <li><a href="#1">Conversion du PDF en HTML</a></li>
  460. <li><a href="#2">Scénarios pour une mise en ligne</a></li>
  461. <li><a href="#3">Structuration des contenus</a></li>
  462. <li><a href="#4">Production du site web</a></li>
  463. <li><a href="#5">Design</a></li>
  464. <li><a href="#6">Fabrication de l’EPUB</a></li>
  465. <li><a href="#7">Quelques briques technologiques</a></li>
  466. <li><a href="#8">Bilan (rapide)</a></li>
  467. </ol>
  468. <h3 id="1">1. Conversion du PDF en HTML</h3>
  469. <p>Marie Lebert n’ayant plus accès au fichier .doc originel, je n’ai que le format PDF comme point de départ. Afin de pouvoir envisager de faire quelque chose avec les contenus, je commence par convertir le fichier PDF en HTML, avec <a href="http://pandoc.org/">Pandoc</a>. Heureusement la mise en forme est minimaliste et à défaut d’une réelle feuille de style il y a une structure : des niveaux de titres. Quelques expressions régulières et une relecture en diagonale – et quelques heures de travail – et je dispose d’un contenu utilisable.</p>
  470. <h3 id="2">2. Scénarios pour une mise en ligne</h3>
  471. <p>L’envie est forte de vouloir produire un site <em>à la main</em>, mais je commence tout de même par faire le tour des quelques solutions qui existent déjà en matière de <em>livre web</em>. Je suis le projet <a href="https://www.gitbook.com/">GitBook</a> depuis le lancement en mai 2014, mais je ne suis pas totalement en accord avec certains choix de design, et si je veux utiliser GitBook sérieusement cela demande un budget. Deux autres arguments m’éloignent de cette solution :</p>
  472. <ul>
  473. <li>je veux profiter de ce projet pour construire une interface de lecture <em>décentralisée</em> ;</li>
  474. <li>le projet de Marie Lebert n’a pas de dimension collective, donc ici GitBook n’est pas totalement pertinent.</li>
  475. </ul>
  476. <p>J’écarte assez vite l’utilisation d’un CMS avec base(s) de données, je ne veux pas maintenir un outil dont je ne saurai plus rien dans 3 ans.</p>
  477. <p>Je m’oriente donc vers la production d’un site en HTML+CSS+JavaScript, facile à mettre à jour par moi ou par Marie Lebert, et qui ne demandera pas d’hébergement complexe. <a href="/2014/12/29/un-point-sur-jekyll/">Jekyll</a> – <em>noDB CMS</em> – semble tout indiqué.</p>
  478. <h3 id="3">3. Structuration des contenus</h3>
  479. <p>Pour pouvoir intégrer les contenus dans une chaîne de publication basée sur Jekyll, il me faut découper chaque chapitres et sous-chapitres en autant de fichiers Markdown, un exercice de copiés-collés depuis un seul fichier HTML, puis de corrections. Ce sera la partie la plus longue et la plus fastidieuse du projet – au total il y a 250 fichiers Markdown, autant de pages web qui seront générées via Jekyll.</p>
  480. <h3 id="4">4. Production du site web</h3>
  481. <p>Si vous ne connaissez pas Jekyll vous trouverez une littérature abondante sur le web, mais vous pouvez également lire ces trois billets sur quaternum.net :</p>
  482. <ul>
  483. <li><a href="/2012/12/23/pourquoi-quitter-wordpress/">Pourquoi quitter Wordpress ?</a></li>
  484. <li><a href="/2014/04/26/latex-et-jekyll/">LaTeX et Jekyll : deux workflows de publication</a></li>
  485. <li><a href="/2014/12/29/un-point-sur-jekyll/">Un point sur Jekyll</a></li>
  486. </ul>
  487. <p>Jekyll est pensé par défaut pour les carnets web ou les <em>blogs</em>, mais pour construire un site avec une arborescence à deux niveaux c’est légèrement plus compliqué, Jekyll s’adapte aussi à cet usage. Je passe un certain temps à chercher les solutions les plus efficaces – en même temps que l’étape 3 – avec trois contraintes :</p>
  488. <ul>
  489. <li>ne pas perdre de temps en recherche et ensuite en intégration ;</li>
  490. <li>trouver des solutions que je peux implémenter – je ne développe pas en Ruby ;</li>
  491. <li>ne pas faire une usine à gaz.</li>
  492. </ul>
  493. <p>L’arborescence finale est la suivante : </p>
  494. <ul>
  495. <li>niveau 1 : home</li>
  496. <li>niveau 2 : chapitre (niveau d’arborescence sans page HTML) ou <em>pages statiques</em> comme l’À propos</li>
  497. <li>niveau 3 : sous-chapitre (s’il n’y a pas de sous-chapitre : création d’une page “Résumé”)</li>
  498. </ul>
  499. <p>Les principales difficultés arriverons lors des choix du design, et notamment du <em>menu</em>.</p>
  500. <h3 id="5">5. Design</h3>
  501. <p>Première contrainte : concevoir un design <em>liquide</em>. Je ne veux pas gérer des adaptations en fonction des <em>n</em> tailles d’écran, mais construire un même design lisible partout. Le site web étant très simple, je peux me permettre de n’envisager qu’un point de rupture : une diminution de la taille – ou proportion – des caractères en-deçà d’une certaine largeur. </p>
  502. <p>Très inspiré par <a href="/2015/05/12/un-design-de-livre-web/">Professionnal Web Typography</a>, et cherchant la simplicité maximale, le choix de la table des matières placée en pied de page me séduit beaucoup. Aussi parce que le site est de fait <em>single colonn</em>. Il n’y aura donc pas de menu, mais un accès aux différents chapitres et sous-chapitres sur chaque page et sans <em>activation</em> d’un menu. Ce sera l’un des points les plus complexes – pour moi – mais je trouve assez rapidement <a href="http://stackoverflow.com/questions/31194588/generate-a-menu-in-jekyll">de l’aide et une solution</a>. Cette table des matières très longues pourrait être amplement critiquée, j’assume cette décision. Dans le cadre de ce projet – ce qui n’est pas forcément vrai ailleurs – je défends le fait que la simplicité est un atout : il vaut mieux dérouler une page très longue que mal concevoir un menu qui sera peu visible ou accessible.</p>
  503. <p>La navigation sera elle aussi très simple : deux liens “Partie précédente” et “Partie suivante” en bas de chaque sous-chapitre. La difficulté est de générer convenablement ces liens sans perdre dans l’arborescence, là encore je trouve <a href="http://stackoverflow.com/questions/31013878/navigation-for-pages-not-for-posts-in-jekyll">des réponses</a> – Jekyll a cet avantage de disposer d’une communauté active.</p>
  504. <p>Après quelques recherches de couleurs via l’outil <a href="https://coolors.co/">Coloors</a>, je pars tout d’abord sur deux teintes de bleu et du orange flashy, puis j’abandonne le orange pour plus de simplicité. La charte graphique repose sur quatre couleurs (dont du blanc et du faux blanc) : </p>
  505. <p><img src="/images/010101-colors.png" alt="Couleurs utilisées pour 010101book.net" /> </p>
  506. <p>Le choix de la fonte se fait selon deux critères : une sans serif très lisible et complète. Après avoir tenté la <a href="http://www.latofonts.com/">Lato</a>, je choisis l’<a href="https://fr.wikipedia.org/wiki/Open_Sans">Open Sans</a>, pour plusieurs raisons :</p>
  507. <ul>
  508. <li>c’est une fonte très complète ;</li>
  509. <li>elle est très lisible en bas casse <em>et</em> en majuscule ;</li>
  510. <li>elle est placée sous licence <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache version 2.0</a>, je peux donc l’utiliser librement.</li>
  511. </ul>
  512. <h3 id="6">6. Fabrication de l'EPUB</h3>
  513. <p>Vous ne savez pas ce qu’est le format EPUB ? C’est un format standardisé de livre numérique, un peu comme un site web encapsulé.</p>
  514. <p>Je cherche tout d’abord une solution automatisée de production de l’EPUB : partir des mêmes fichiers du site web – en Markdown – pour générer un fichier EPUB, en détournant Jekyll. D’autres y avaient pensé avant moi, mais je ne trouve pas résultats concluants, et conformes aux standards actuels de l’EPUB. Je finis par reprendre le fichier HTML complet pour l’intégrer <em>à la main</em> dans des fichiers XHTML via <a href="http://sigil-ebook.com/">Sigil</a>. En quelques heures à peine le fichier EPUB est généré.</p>
  515. <h3 id="7">7. Quelques briques et outils</h3>
  516. <p>En dehors de Jekyll, j’ai utilisé plusieurs <em>briques</em> pour la production du site web :</p>
  517. <ul>
  518. <li>KNACSS pour la base de la feuille de style, un projet développé et maintenu par Raphael Goetter : <a href="http://www.knacss.com">www.knacss.com</a> ;</li>
  519. <li>Min+ : “un <em>boilerplate</em> EPUB minimaliste, léger et modulaire”, créé et maintenu par <a href="http://jiminy.chapalpanoz.com/outils-ebook/">Jiminy Panoz</a>.</li>
  520. </ul>
  521. <p>Toujours pour la production du site web, voici les outils dont je me suis servis :</p>
  522. <ul>
  523. <li>un éditeur de texte : <a href="http://www.sublimetext.com/">Sublime Text 2</a> ;</li>
  524. <li>un navigateur web : <a href="https://www.mozilla.org/fr/firefox/">Mozilla Firefox</a> et ses outils pour développeurs ;</li>
  525. <li>la liste des bonnes pratiques d’Opquast, <a href="https://checklists.opquast.com/fr/">un incontournable</a> ;</li>
  526. <li>etc.</li>
  527. </ul>
  528. <h3 id="8">8. Bilan (rapide)</h3>
  529. <p>Si j’ai l’habitude de travailler en équipe sur des sites web beaucoup plus complexes, ce projet était l’occasion de me confronter à une gestion de projet <em>complète</em> en empruntant les différents rôles : chargé de projet, designer, intégrateur, etc.</p>
  530. <h2 id="remerciements">Remerciements</h2>
  531. <p><a href="https://marielebert.wordpress.com/">Marie Lebert</a> pour sa confiance.<br />
  532. <a href="http://insitu-collective.com/">Willy</a> pour ses nombreuses aides sur la réalisation de la mise en forme.<br />
  533. <a href="https://twitter.com/AnthonyMasure">Anthony</a>, <a href="https://twitter.com/John_Tax">Julien</a>, <a href="http://www.fadebiaye.com/">Frank</a> et <a href="https://twitter.com/Priscille_Lgrs">Priscille</a> pour les relectures et les retours sur le site web.<br />
  534. <a href="http://jiminy.chapalpanoz.com/">Jiminy</a> pour les derniers réglages techniques sur l’EPUB.</p>
  535. <h2 id="des-questions-ou-des-remarques">Des questions ou des remarques</h2>
  536. <p>Si vous avez des questions ou des remarques sur www.010101book.net, n’hésitez pas à m’écrire :</p>
  537. <p><a href="mailto:antoine@quaternum.net" class="link-button">Contactez-moi</a></p>
  538. </article>
  539. </section>
  540. <nav id="jumpto">
  541. <p>
  542. <a href="/david/blog/">Accueil du blog</a> |
  543. <a href="http://www.quaternum.net/2015/10/26/creation-d-un-livre-web-le-livre-010101/">Source originale</a> |
  544. <a href="/david/stream/2019/">Accueil du flux</a>
  545. </p>
  546. </nav>
  547. <footer>
  548. <div>
  549. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  550. <p>
  551. Bonjour/Hi!
  552. 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>
  553. 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>).
  554. </p>
  555. <p>
  556. 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>.
  557. </p>
  558. <p>
  559. Voici quelques articles choisis :
  560. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  561. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  562. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  563. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  564. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  565. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  566. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  567. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  568. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  569. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  570. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  571. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  572. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  573. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  574. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  575. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  576. </p>
  577. <p>
  578. 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>.
  579. </p>
  580. <p>
  581. Je ne traque pas ta navigation mais mon
  582. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  583. conserve des logs d’accès.
  584. </p>
  585. </div>
  586. </footer>
  587. <script type="text/javascript">
  588. ;(_ => {
  589. const jumper = document.getElementById('jumper')
  590. jumper.addEventListener('click', e => {
  591. e.preventDefault()
  592. const anchor = e.target.getAttribute('href')
  593. const targetEl = document.getElementById(anchor.substring(1))
  594. targetEl.scrollIntoView({behavior: 'smooth'})
  595. })
  596. })()
  597. </script>