A place to cache linked articles (think custom and personal wayback machine)
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

index.html 47KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697
  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>How to Build a Low-tech Internet (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.lowtechmagazine.com/2015/10/how-to-build-a-low-tech-internet.html">
  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. How to Build a Low-tech Internet (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.lowtechmagazine.com/2015/10/how-to-build-a-low-tech-internet.html">Source originale du contenu</a></h3>
  445. <p>More than half of the global population does not have access to the "worldwide" web. Up to now, the internet is mainly an urban phenomenon, especially in "developing" countries. Telecommunication companies are usually reluctant to extend their network outside cities due to a combination of high infrastructure costs, low population density, limited ability to pay for services, and an unreliable or non-existent electricity infrastructure. Even in remote regions of "developed" countries, internet connectivity isn't always available.</p>
  446. <p>Internet companies such as Facebook and Google regularly make headlines with plans for connecting these remote regions to the internet. Facebook tries to achieve this with drones, while Google counts on high-altitude balloons. There are major technological challenges, but the main objection to these plans is their commercial character. Obviously, Google and Facebook want to connect more people to the internet because that would increase their revenues. Facebook especially receives lots of criticism because their network promotes their own site in particular, and blocks most other internet applications. [<span>1</span>]</p>
  447. <p>Meanwhile, several research groups and network enthusiasts have developed and implemented much cheaper alternative network technologies to solve these issues. Although these low-tech networks have proven their worth, they have received much less attention. Contrary to the projects of internet companies, they are set up by small organisations or by the users themselves. This guarantees an open network that benefits the users instead of a handful of corporations. At the same time, these low-tech networks are very energy efficient.</p>
  448. <p><span><strong>WiFi-based Long Distance Networks</strong></span></p>
  449. <p>Most low-tech networks are based on WiFi, the same technology that allows mobile access to the internet in most western households. As we have seen in the previous article, <a href="http://www.lowtechmagazine.com/2015/10/the-4g-network-thats-already-there.html" target="_self">sharing these devices could provide free mobile access across densely populated cities</a>. But the technology can be equally useful in sparsely populated areas. Although the WiFi-standard was developed for short-distance data communication (with a typical range of about 30 metres), its reach can be extended through modifications of the Media Access Control (MAC) layer in the networking protocol, and through the use of range extender amplifiers and directional antennas. [<span>2</span>]</p>
  450. <blockquote>
  451. <p><span>Although the WiFi-standard was developed for short-distance data communication, its reach can be extended to cover distances of more than 100 kilometres.</span></p>
  452. </blockquote>
  453. <p>The longest unamplified WiFi link is a 384 km wireless point-to-point connection between Pico El Águila and Platillón in Venezuela, established a few years ago. [<span>3,4</span>] However, WiFi-based long distance networks usually consist of a combination of shorter point-to-point links, each between a few kilometres and one hundred kilometers long at most. These are combined to create larger, multihop networks. Point-to-points links, which form the backbone of a long range WiFi network, are combined with omnidirectional antennas that distribute the signal to individual households (or public institutions) of a community.</p>
  454. <p><a href="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d14fd748970c-pi"><img title="Tegola project low-tech internet" src="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d14fd748970c-500wi" alt="Tegola project low-tech internet"/></a><span>Picture: A relay with three point-to-point links and three sectoral antennae. <a href="http://www.tegola.org.uk/howto/network-planning.html" target="_blank">Tegola</a>.</span></p>
  455. <p>Long-distance WiFi links require line of sight to make a connection -- in this sense, the technology resembles the <a href="http://www.lowtechmagazine.com/2007/12/email-in-the-18.html" target="_blank">18th century optical telegraph</a>. [<span>5</span>] If there's no line of sight between two points, a third relay is required that can see both points, and the signal is sent to the intermediate relay first. Depending on the terrain and particular obstacles, more hubs may be necessary. [<span>6</span>]</p>
  456. <p>Point-to-point links typically consist of two directional antennas, one focused on the next node and the other on the previous node in the network. Nodes can have multiple antennas with one antenna per fixed point-to-point link to each neighbour. [<span>7</span>] This allows mesh routing protocols that can dynamically select which links to choose for routing among the available ones. [<span>8</span>]</p>
  457. <blockquote>
  458. <p><span>Long-distance WiFi links require line of sight to make a connection -- in this sense, the technology resembles the 18th century optical telegraph.</span></p>
  459. </blockquote>
  460. <p>Distribution nodes usually consist of a sectoral antenna (a small version of the things you see on mobile phone masts) or a conventional WiFi-router, together with a number of receivers in the community. [<span>6</span>] For short distance WiFi-communication, there is no requirement for line of sight between the transmitter and the receiver. [<span>9</span>]</p>
  461. <p>To provide users with access to the worldwide internet, a long range WiFi network should be connected to the main backbone of the internet using at least one "backhaul" or "gateway node". This can be a dial-up or broadband connection (DSL, fibre or satellite). If such a link is not established, users would still be able to communicate with each other and view websites set up on local servers, but they would not be able to access the internet. [<span>10</span>]</p>
  462. <p><span><strong>Advantages of Long Range WiFi</strong></span></p>
  463. <p><a href="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d16a5210970c-pi"><img title="Litebeam M5" src="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d16a5210970c-200wi" alt="Litebeam M5"/></a>Long range WiFi offers high bandwidth (up to 54 Mbps) combined with very low capital costs. Because the WiFi standard enjoys widespread acceptance and has huge production volumes, off-the-shelf antennas and wireless cards can be bought for very little money. [<span>11</span>] Alternatively, components can be put together <a href="http://roelof.info/projects/%282014%29Pretty_Fly_For_A_Wifi/" target="_blank">from discarded materials</a> such as old routers, satellite dish antennas and laptops. Protocols like WiLDNet run on a 266 Mhz processor with only 128 MB memory, so an old computer will do the trick. [<span>7</span>]</p>
  464. <p>The WiFi-nodes are lightweight and don't need expensive towers -- further decreasing capital costs, and minimizing the impact of the structures to be built. [<span>7</span>] More recently, single units that combine antenna, wireless card and processor have become available. These are very convenient for installation. To build a relay, one simply connects such units together with ethernet cables that carry both signal and power. [<span>6</span>] The units can be mounted in towers or slim masts, given that they offer little windload. [<span>3</span>] Examples of suppliers of long range WiFi components are <a href="https://www.ubnt.com/" target="_blank">Ubiquity</a>, <a href="http://www.alvarion.com/" target="_blank">Alvarion</a> and <a href="http://www.mikrotik.com/" target="_blank">MikroTik</a>, and <a href="https://www.simplewifi.com/" target="_blank">simpleWiFi</a>.</p>
  465. <blockquote>
  466. <p><span>Long Range WiFi makes use of unlicensed spectrum and offers high bandwidth, low capital costs, easy installation, and low power requirements.</span></p>
  467. </blockquote>
  468. <p>Long range WiFi also has low operational costs due to low power requirements. A typical mast installation consisting of two long distance links and one or two wireless cards for local distribution consumes around 30 watts. [<span>6,12</span>] In several low-tech networks, nodes are entirely powered by solar panels and batteries. Another important advantage of long range WiFi is that it makes use of unlicensed spectrum (2.4 and 5 GHz), and thus avoids negotiations with telecom operators and government. This adds to the cost advantage and allows basically anyone to start a WiFi-based long distance network. [<span>9</span>]</p>
  469. <p><strong><span>Long Range WiFi Networks in Poor Countries</span></strong></p>
  470. <p>The first long range WiFi networks were set up ten to fifteen years ago. In poor countries, two main types have been built. The first is aimed at providing internet access to people in remote villages. An example is the Akshaya network in India, which covers the entire Kerala State and is one of the largest wireless networks in the world. The infrastructure is built around approximately 2,500 "computer access centers", which are open to the local population -- direct ownership of computers is minimal in the region. [<span>13</span>]</p>
  471. <p>Another example, also in India, are the AirJaldi networks which provide internet access to approximately 20,000 users in six states, all in remote regions and on difficult terrain. Most nodes in this network are solar-powered and the distance between them can range up to 50 km or more. [<span>14</span>] In some African countries, local WiFi-networks distribute internet access from a satellite gateway. [<span>15,16</span>]</p>
  472. <p><a href="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d1579486970c-pi"><img title="Airjaldi" src="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d1579486970c-800wi" alt="Airjaldi" border="0"/></a></p>
  473. <p><span>A node in the AirJaldi network. Picture: AirJaldi.<br/></span></p>
  474. <p>A second type of long distance WiFi network in poor countries is aimed at providing telemedicine to remote communities. In remote regions, health care is often provided through health posts scarcely equipped and attended by health technicians who are barely trained. [<span>17</span>] Long-range WiFi networks can connect urban hospitals with these outlying health posts, allowing doctors to remotely support health technicians using high-resolution file transfers and real-time communication tools based on voice and video.</p>
  475. <p>An example is the link between Cabo Pantoja and Iquitos in the Loreto province in Peru, which was established in 2007. The 450 km network consists of 17 towers which are 16 to 50 km apart. The line connects 15 medical outposts in remote villages with the main hospital in Iquitos and is aimed at remote diagnosis of patients. [<span>17,18</span>] All equipment is powered by solar panels. [<span>18,19</span>] Other succesful examples of long range WiFi telemedicine networks have been built in India, Malawi and Ghana. [<span>20,21</span>]</p>
  476. <p><span><strong>WiFi-Based Community Networks in Europe<br/></strong></span></p>
  477. <p>The low-tech networks in poor countries are set up by NGO's, governments, universities or businesses. In contrast, most of the WiFi-based long distance networks in remote regions of rich countries are so-called "community networks": the users themselves build, own, power and maintain the infrastructure. Similar to the shared wireless approach in cities, reciprocal resource sharing forms the basis of these networks: participants can set up their own node and connect to the network (for free), as long as their node also allows traffic of other members. Each node acts as a WiFi routing device that provides IP forwarding services and a data link to all users and nodes connected to it. [<span>8,22</span>]</p>
  478. <blockquote>
  479. <p><span>In a community network, the users themselves build, own, power and maintain the infrastructure.</span></p>
  480. </blockquote>
  481. <p>Consequently, with each new user, the network becomes larger. There is no a-priori overall planning. A community network grows bottom-up, driven by the needs of its users, as nodes and links are added or upgraded following demand patterns. The only consideration is to connect a node from a new participant to an existing one. As a node is powered on, it discovers it neighbours, attributes itself a unique IP adress, and then establishes the most appropriate routes to the rest of the network, taking into account the quality of the links. Community networks are open to participation to everyone, sometimes according to an open peering agreement. [<span>8,9,19,22</span>]</p>
  482. <p><a class="asset-img-link" href="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b7c7e2d9d7970b-pi"><img class="asset asset-image at-xid-6a00e0099229e8883301b7c7e2d9d7970b image-full img-responsive" title="Guifi in en rond barcelona" src="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b7c7e2d9d7970b-800wi" alt="Guifi in en rond barcelona" border="0"/></a></p>
  483. <p><span>Wireless links in the Spanish Guifi network. <a href="http://iuliinet.github.io/presentazione_ottobre_2014/img/barcellona.jpg" target="_blank">Credit</a>.<br/></span></p>
  484. <p>Despite the lack of reliable statistics, community networks seem to be rather succesful, and there are several large ones in Europe, such as <a href="https://guifi.net/" target="_blank">Guifi.net</a> (Spain), <a href="http://www.awmn.gr/content.php?s=ce506a41ab245641d6934638c6f6f107" target="_blank">Athens Wireless Metropolitan Network</a> (Greece), <a href="http://www.funkfeuer.at/" target="_blank">FunkFeuer</a> (Austria), and <a href="http://freifunk.net/en/" target="_blank">Freifunk</a> (Germany). [<span>8,22,23,24</span>] The Spanish network  is the largest WiFi-based long distance network in the world with more than 50,000 kilometres of links, although a small part is based on optic fibre links. Most of it is located in the Catalan Pyrenees, one of the least populated areas in Spain. The network was initiated in 2004 and now has close to 30,000 nodes, up from 17,000 in 2012. [<span>8,22</span>]</p>
  485. <p>Guifi.net provides internet access to individuals, companies, administrations and universities. In principle, the network is installed, powered and maintained by its users, although volunteer teams and even commercial installers are present to help. Some nodes and backbone upgrades have been succesfully crowdfunded by indirect beneficiaries of the network. [<span>8,22</span>]</p>
  486. <p><span><strong>Performance of Low-tech Networks</strong></span></p>
  487. <p>So how about the performance of low-tech networks? What can you do with them? The available bandwidth per user can vary enormously, depending on the bandwidth of the gateway node(s) and the number of users, among other factors. The long-distance WiFi networks aimed at telemedicine in poor countries have few users and a good backhaul, resulting in high bandwidth (+ 40 Mbps). This gives them a similar performance to fibre connections in the developed world. A study of (a small part of) the Guifi.net community network, which has dozens of gateway nodes and thousands of users, showed an average throughput of 2 Mbps, which is comparable to a relatively slow DSL connection. Actual throughput per user varies from 700 kbps to 8 Mbps. [<span>25</span>]</p>
  488. <blockquote>
  489. <p><span>The available bandwidth per user can vary enormously, depending on the bandwidth of the gateway node(s) and the number of users, among other factors</span></p>
  490. </blockquote>
  491. <p>However, the low-tech networks that distribute internet access to a large user base in developing countries can have much more limited bandwidth per user. For example, a university campus in Kerala (India) uses a 750 kbps internet connection that is shared across 3,000 faculty members and students operating from 400 machines, where during peak hours nearly every machine is being used. </p>
  492. <p>Therefore, the worst-case average bandwidth available per machine is approximately 1.9 kbps, which is slow even in comparison to a dial-up connection (56 kbps). And this can be considered a really good connectivity compared to typical rural settings in poor countries. [26] To make matters worse, such networks often have to deal with an intermittent power supply.</p>
  493. <div id="photo-xid-6a00e0099229e8883301b8d16a5899970c" class="photo-wrap photo-xid-6a00e0099229e8883301b8d16a5899970c photo-full "><a class="asset-img-link" href="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d16a5899970c-pi"><img class="asset asset-image at-xid-6a00e0099229e8883301b8d16a5899970c img-responsive" title="Antena-guifi-floresta" src="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d16a5899970c-800wi" alt="Antena-guifi-floresta" border="0"/></a>
  494. <p id="caption-xid-6a00e0099229e8883301b8d16a5899970c" class="photo-caption caption-xid-6a00e0099229e8883301b8d16a5899970c"><span>A node in the Spanish Guifi community network.</span></p>
  495. </div>
  496. <p>Under these circumstances, even the most common internet applications have poor performance, or don't work at all. The communication model of the internet is based on a set of network assumptions, called the TCP/IP protocol suite. These include the existence of a bi-directional end-to-end path between the source (for example a website's server) and the destination (the user's computer), short round-trip delays, and low error rates.</p>
  497. <p>Many low-tech networks in poor countries do not comform to these assumptions. They are characterized by intermittent connectivity or "network partitioning" -- the absence of an end-to-end path between source and destination -- long and variable delays, and high error rates. [<span>21,27,28</span>]</p>
  498. <p><span><strong>Delay-Tolerant Networks</strong></span></p>
  499. <p>Nevertheless, even in such conditions, the internet could work perfectly fine. The technical issues can be solved by moving away from the always-on model of traditional networks, and instead design networks based upon asynchronous communication and intermittent connectivity. These so-called "delay-tolerant networks" (DTNs) have their own specialized protocols overlayed on top of the lower protocols and do not utilize TCP. They overcome the problems of intermittent connectivity and long delays by using store-and-forward message switching.</p>
  500. <p>Information is forwarded from a storage place on one node to a storage place on another node, along a path that <em>eventually</em> reaches its destination. In contrast to traditional internet routers, which only store incoming packets for a few milliseconds on memory chips, the nodes of a delay-tolerant network have persistent storage (such as hard disks) that can hold information indefinitely. [<span>27,28</span>]</p>
  501. <blockquote>
  502. <p><span>Delay-tolerant networks combine well with renewable energy: solar panels or wind turbines could power network nodes only when the sun shines or the wind blows, eliminating the need for energy storage.</span></p>
  503. </blockquote>
  504. <p>Delay-tolerant networks don't require an end-to-end path between source and destination. Data is simply transferred from node to node. If the next node is unavailable because of long delays or a power outage, the data is stored on the hard disk until the node becomes available again. While it might take a long time for data to travel from source to destination, a delay-tolerant network ensures that it will eventually arrive.</p>
  505. <p>Delay-tolerant networks further decrease capital costs and energy use, leading to the most efficient use of scarce resources. They keep working with an intermittent energy supply and they combine well with renewable energy sources: solar panels or wind turbines could power network nodes only when the sun shines or the wind blows, eliminating the need for energy storage.</p>
  506. <p><span><strong>Data Mules</strong></span></p>
  507. <p>Delay-tolerant networking can take surprising forms, especially when they take advantage of some non-traditional means of communication, such as "data mules". [<span>11,29</span>] In such networks, conventional transportation technologies -- buses, cars, motorcycles, trains, boats, airplanes -- are used to ferry messages from one location to another in a store-and-forward manner.</p>
  508. <p>Examples are DakNet and KioskNet, which use buses as data mules. [<span>30-34</span>] In many developing regions, rural bus routes regularly visit villages and towns that have no network connectivity. By equipping each vehicle with a computer, a storage device and a mobile WiFi-node on the one hand, and by installing a stationary WiFi-node in each village on the other hand, the local transport infrastructure can substitute for a wireless internet link. [<span>11</span>]</p>
  509. <p><a href="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b7c7da1fc2970b-pi"><img title="Airjaldi epostman" src="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b7c7da1fc2970b-500wi" alt="Airjaldi epostman"/></a><span>Picture: AirJaldi.</span></p>
  510. <p>Outgoing data (such as sent emails or requests for webpages) is stored on local computers in the village until the bus comes withing range. At this point, the fixed WiFi-node of the local computer automatically transmits the data to the mobile WiFi-node of the bus. Later, when the bus arrives at a hub that is connected to the internet, the outgoing data is transmitted from the mobile WiFi-node to the gateway node, and then to the internet. Data sent to the village takes the opposite route. The bus -- or data -- driver doesn't require any special skills and is completely oblivious to the data transfers taking place. He or she does not need to do anything other than come in range of the nodes. [<span>30,31</span>]</p>
  511. <blockquote>
  512. <p><span>In a data mules network, the local transport infrastructure substitutes for a wireless internet link.</span></p>
  513. </blockquote>
  514. <p>The use of data mules offers some extra advantages over more "sophisticated" delay-tolerant networks. A "drive-by" WiFi network allows for small, low-cost and low-power radio devices to be used, which don't require line of sight and consequently no towers -- further lowering capital costs and energy use compared to other low-tech networks. [<span>30,31,32</span>]</p>
  515. <p>The use of short-distance WiFi-links also results in a higher bandwidth compared to long-distance WiFi-links, which makes data mules better suited to transfer larger files. On average, 20 MB of data can be moved in each direction when a bus passes a fixed WiFi-node. [<span>30,32</span>] On the other hand, latency (the time interval between sending and receiving data) is usually higher than on long-range WiFi-links. A single bus passing by a village once a day gives a latency of 24 hours.</p>
  516. <p><strong><span>Delay-Tolerant Software</span><br/></strong></p>
  517. <p>Obviously, a delay-tolerant network (DTN) -- whatever its form -- also requires new software: applications that function without a connected end-to-end networking path. [<span>11</span>] Such custom applications are also useful for synchronous, low bandwidth networks. Email is relatively easy to adapt to intermittent connectivity, because it's an asynchronous communication method by itself. A DTN-enabled email client stores outgoing messages until a connection is available. Although emails may take longer to reach their destination, the user experience doesn't really change.</p>
  518. <p><a class="asset-img-link" href="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b7c7e07dac970b-pi"><img class="asset asset-image at-xid-6a00e0099229e8883301b7c7e07dac970b img-responsive" title="Freifunk berlijn" src="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b7c7e07dac970b-500wi" alt="Freifunk berlijn"/></a></p>
  519. <p><span>A Freifunk WiFi-node is installed in Berlin, Germany. Picture:<a href="https://upload.wikimedia.org/wikipedia/commons/5/51/Freifunk-Initiative_in_Berlin-Kreuzberg.jpg" target="_blank"> Wikipedia Commons</a>.</span></p>
  520. <p>Browsing and searching the web requires more adaptations. For example, most search engines optimize for speed, assuming that a user can quickly look through the returned links and immediately run a second modified search if the first result is inadequate. However, in intermittent networks, multiple rounds of interactive search would be impractical. [<span>26,35</span>] Asynchronous search engines optimize for bandwith rather than response time. [<span>26,30,31,35,36</span>] For example, RuralCafe desynchronizes the search process by performing many search tasks in an offline manner, refining the search request based on a database of similar searches. The actual retrieval of information using the network is only done when absolutely necessary.</p>
  521. <blockquote>
  522. <p><span>Many internet applications could be adapted to intermittent networks, such as webbrowsing, email, electronic form filling, interaction with e-commerce sites, blogsoftware, large file downloads, or social media.</span></p>
  523. </blockquote>
  524. <p>Some DTN-enabled browsers download not only the explicitly requested webpages but also the pages that are linked to by the requested pages. [<span>30</span>] Others are optimized to return low-bandwidth results, which are achieved by filtering, analysis, and compression on the server site. A similar effect can be achieved through the use of a service like <a href="http://www.loband.org/loband/" target="_blank">Loband</a>, which strips webpages of images, video, advertisements, social media buttons, and so on, merely presenting the textual content. [<span>26</span>]</p>
  525. <p>Browsing and searching on intermittent networks can also be improved by local caching (storing already downloaded pages) and prefetching (downloading pages that might be retrieved in the future). [206] Many other internet applications could also be adapted to intermittent networks, such as electronic form filling, interaction with e-commerce sites, blogsoftware, large file downloads, social media, and so on. [<span>11,30</span>] All these applications would remain possible, though at lower speeds.</p>
  526. <p><span><strong>Sneakernets</strong></span></p>
  527. <p>Obviously, real-time applications such as internet telephony, media streaming, chatting or videoconferencing are impossible to adapt to intermittent networks, which provide only asynchronous communication. These applications are also difficult to run on synchronous networks that have limited bandwidth. Because these are the applications that are in large part responsible for the growing energy use of the internet, one could argue that their incompatibility with low-tech networks is actually a good thing (see the <a href="http://www.lowtechmagazine.com/2015/10/can-the-internet-run-on-renewable-energy.html" target="_self">previous article</a>).</p>
  528. <p>Furthermore, many of these applications could be organized in different ways. While real-time voice or video conversations won't work, it's perfectly possible to send and receive voice or video messages. And while streaming media can't happen, downloading music albums and video remains possible. Moreover, these files could be "transmitted" by the most low-tech internet technology available: a sneakernet. In a sneakernet, digital data is "wirelessly" transmitted using a storage medium such as a hard disk, a USB-key, a flash card, or a CD or DVD. Before the arrival of the internet, all computer files were exchanged via a sneakernet, using tape or floppy disks as a storage medium.</p>
  529. <p><a class="asset-img-link" href="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d16a5d62970c-pi"><img class="asset asset-image at-xid-6a00e0099229e8883301b8d16a5d62970c img-responsive" title="Freight train" src="http://krisdedecker.typepad.com/.a/6a00e0099229e8883301b8d16a5d62970c-500wi" alt="Freight train"/></a></p>
  530. <p><span>Stuffing a cargo train full of digital storage media would beat any digital network in terms of speed, cost and energy efficiency. Picture: Wikipedia Commons.</span></p>
  531. <p>Just like a data mules network, a sneakernet involves a vehicle, a messenger on foot, or an animal (such as a <a href="http://www.lowtechmagazine.com/2009/02/sneakernet-beats-internet.html" target="_self">carrier pigeon</a>). However, in a sneakernet there is no automatic data transfer between the mobile node (for instance, a vehicle) and the stationary nodes (sender and recipient). Instead, the data first have to be transferred from the sender's computer to a portable storage medium. Then, upon arrival, the data have to be transferred from the portable storage medium to the receiver's computer. [<span>30</span>] A sneakernet thus requires manual intervention and this makes it less convenient for many internet applications.</p>
  532. <p>There are exceptions, though. For example, a movie doesn't have to be transferred to the hard disk of your computer in order to watch it. You play it straight from a portable hard disk or slide a disc into the DVD-player. Moreover, a sneakernet also offers an important advantage: of all low-tech networks, it has the most bandwidth available. This makes it perfectly suited for the distribution of large files such as movies or computer games. In fact, when very large files are involved, a sneakernet even beats the fastest fibre internet connection. At lower internet speeds, sneakernets can be advantageous for much smaller files.</p>
  533. <p>Technological progress will not lower the advantage of a sneakernet. Digital storage media evolve at least as fast as internet connections and they both improve communication in an equal way.</p>
  534. <p><span><strong>Resilient Networks<br/></strong></span></p>
  535. <p>While most low-tech networks are aimed at regions where the alternative is often no internet connection at all, their usefulness for well-connected areas cannot be overlooked. The internet as we know it in the industrialized world is a product of an abundant energy supply, a robust electricity infrastructure, and sustained economic growth. This "high-tech" internet might offer some fancy advantages over the low-tech networks, but it cannot survive if these conditions change. This makes it extremely vulnerable.</p>
  536. <blockquote>
  537. <p><span>The internet as we know it in the industrialized world is a product of an abundant energy supply, a robust electricity infrastructure, and sustained economic growth. It cannot survive if these conditions change.<br/></span></p>
  538. </blockquote>
  539. <p>Depending on their level of resilience, low-tech networks can remain in operation when the supply of fossil fuels is interrupted, when the electricity infrastructure deteriorates, when the economy grinds to a halt, or if other calamities should hit. Such a low-tech internet would allow us to surf the web, send and receive e-mails, shop online, share content, and so on. Meanwhile, data mules and sneakernets could serve to handle the distribution of large files such as videos. Stuffing a cargo vessel or a train full of digital storage media would beat any digital network in terms of speed, cost and energy efficiency. And if such a transport infrastructure would no longer be available, we could still rely on messengers on foot, <a href="http://www.lowtechmagazine.com/2014/05/modular-cargo-cycles.html" target="_self">cargo bikes</a> and <a href="http://www.lowtechmagazine.com/sailing-ships/" target="_self">sailing vessels</a>.</p>
  540. <p>Such a hybrid system of online and offline applications would remain a very powerful communication network -- unlike anything we had even in the late twentieth century. Even if we envision a doom scenario in which the wider internet infrastructure would disintegrate, isolated low-tech networks would still be very useful local and regional communication technologies. Furthermore, they could obtain content from other remote networks through the exchange of portable storage media. The internet, it appears, can be as low-tech or high-tech as we can afford it to be.</p>
  541. </article>
  542. </section>
  543. <nav id="jumpto">
  544. <p>
  545. <a href="/david/blog/">Accueil du blog</a> |
  546. <a href="http://www.lowtechmagazine.com/2015/10/how-to-build-a-low-tech-internet.html">Source originale</a> |
  547. <a href="/david/stream/2019/">Accueil du flux</a>
  548. </p>
  549. </nav>
  550. <footer>
  551. <div>
  552. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  553. <p>
  554. Bonjour/Hi!
  555. 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>
  556. 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>).
  557. </p>
  558. <p>
  559. 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>.
  560. </p>
  561. <p>
  562. Voici quelques articles choisis :
  563. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  564. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  565. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  566. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  567. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  568. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  569. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  570. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  571. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  572. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  573. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  574. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  575. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  576. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  577. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  578. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  579. </p>
  580. <p>
  581. 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>.
  582. </p>
  583. <p>
  584. Je ne traque pas ta navigation mais mon
  585. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  586. conserve des logs d’accès.
  587. </p>
  588. </div>
  589. </footer>
  590. <script type="text/javascript">
  591. ;(_ => {
  592. const jumper = document.getElementById('jumper')
  593. jumper.addEventListener('click', e => {
  594. e.preventDefault()
  595. const anchor = e.target.getAttribute('href')
  596. const targetEl = document.getElementById(anchor.substring(1))
  597. targetEl.scrollIntoView({behavior: 'smooth'})
  598. })
  599. })()
  600. </script>