Browse Source

Moar links

master
David Larlet 1 year ago
parent
commit
6445da0c43
No known key found for this signature in database

+ 621
- 0
cache/ab325197a8e81f929de1b10477cce340/index.html View File

@@ -0,0 +1,621 @@
<!doctype html><!-- This is a valid HTML5 document. -->
<!-- Screen readers, SEO, extensions and so on. -->
<html lang=fr>
<!-- Has to be within the first 1024 bytes, hence before the <title>
See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
<meta charset=utf-8>
<!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
<!-- The viewport meta is quite crowded and we are responsible for that.
See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
<meta name=viewport content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
<!-- Required to make a valid HTML5 document. -->
<title>Calm Technology (archive) — David Larlet</title>
<!-- Generated from https://realfavicongenerator.net/ such a mess. -->
<link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
<link rel="shortcut icon" href="/static/david/icons/favicon.ico">
<meta name="apple-mobile-web-app-title" content="David Larlet">
<meta name="application-name" content="David Larlet">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
<meta name="theme-color" content="#f0f0ea">
<!-- That good ol' feed, subscribe :p. -->
<link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">

<meta name="robots" content="noindex, nofollow">
<meta content="origin-when-cross-origin" name="referrer">
<!-- Canonical URL for SEO purposes -->
<link rel="canonical" href="https://calmtech.com/">

<style>
/* http://meyerweb.com/eric/tools/css/reset/ */
html, body, div, span,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, address, big, cite, code,
del, dfn, em, img, ins,
small, strike, strong, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section { display: block; }
body { line-height: 1; }
blockquote, q { quotes: none; }
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}

/* http://practicaltypography.com/equity.html */
/* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
/* https://www.filamentgroup.com/lab/js-web-fonts.html */
@font-face {
font-family: 'EquityTextB';
src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
font-weight: 300;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'EquityTextB';
src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
font-weight: 300;
font-style: italic;
font-display: swap;
}
@font-face {
font-family: 'EquityTextB';
src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
font-weight: 700;
font-style: normal;
font-display: swap;
}

@font-face {
font-family: 'ConcourseT3';
src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
font-weight: 300;
font-style: normal;
font-display: swap;
}


/* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
body {
/* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
font-family: "EquityTextB", Palatino, serif;
background-color: #f0f0ea;
color: #07486c;
font-kerning: normal;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: subpixel-antialiased;
text-rendering: optimizeLegibility;
font-variant-ligatures: common-ligatures contextual;
font-feature-settings: "kern", "liga", "clig", "calt";
}
pre, code, kbd, samp, var, tt {
font-family: 'TriplicateT4c', monospace;
}
em {
font-style: italic;
color: #323a45;
}
strong {
font-weight: bold;
color: black;
}
nav {
background-color: #323a45;
color: #f0f0ea;
display: flex;
justify-content: space-around;
padding: 1rem .5rem;
}
nav:last-child {
border-bottom: 1vh solid #2d7474;
}
nav a {
color: #f0f0ea;
}
nav abbr {
border-bottom: 1px dotted white;
}

h1 {
border-top: 1vh solid #2d7474;
border-bottom: .2vh dotted #2d7474;
background-color: #e3e1e1;
color: #323a45;
text-align: center;
padding: 5rem 0 4rem 0;
width: 100%;
font-family: 'ConcourseT3';
display: flex;
flex-direction: column;
}
h1.single {
padding-bottom: 10rem;
}
h1 span {
position: absolute;
top: 1vh;
left: 20%;
line-height: 0;
}
h1 span a {
line-height: 1.7;
padding: 1rem 1.2rem .6rem 1.2rem;
border-radius: 0 0 6% 6%;
background: #2d7474;
font-size: 1.3rem;
color: white;
text-decoration: none;
}
h2 {
margin: 4rem 0 1rem;
border-top: .2vh solid #2d7474;
padding-top: 1vh;
}
h3 {
text-align: center;
margin: 3rem 0 .75em;
}
hr {
height: .4rem;
width: .4rem;
border-radius: .4rem;
background: #07486c;
margin: 2.5rem auto;
}
time {
display: bloc;
margin-left: 0 !important;
}
ul, ol {
margin: 2rem;
}
ul {
list-style-type: square;
}
a {
text-decoration-skip-ink: auto;
text-decoration-thickness: 0.05em;
text-underline-offset: 0.09em;
}
article {
max-width: 50rem;
display: flex;
flex-direction: column;
margin: 2rem auto;
}
article.single {
border-top: .2vh dotted #2d7474;
margin: -6rem auto 1rem auto;
background: #f0f0ea;
padding: 2rem;
}
article p:last-child {
margin-bottom: 1rem;
}
p {
padding: 0 .5rem;
margin-left: 3rem;
}
p + p,
figure + p {
margin-top: 2rem;
}

blockquote {
background-color: #e3e1e1;
border-left: .5vw solid #2d7474;
display: flex;
flex-direction: column;
align-items: center;
padding: 1rem;
margin: 1.5rem;
}
blockquote cite {
font-style: italic;
}
blockquote p {
margin-left: 0;
}

figure {
border-top: .2vh solid #2d7474;
background-color: #e3e1e1;
text-align: center;
padding: 1.5rem 0;
margin: 1rem 0 0;
font-size: 1.5rem;
width: 100%;
}
figure img {
max-width: 250px;
max-height: 250px;
border: .5vw solid #323a45;
padding: 1px;
}
figcaption {
padding: 1rem;
line-height: 1.4;
}
aside {
display: flex;
flex-direction: column;
background-color: #e3e1e1;
padding: 1rem 0;
border-bottom: .2vh solid #07486c;
}
aside p {
max-width: 50rem;
margin: 0 auto;
}

/* https://fvsch.com/code/css-locks/ */
p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
font-size: 1rem;
line-height: calc( 1.5em + 0.2 * 1rem );
}
h1 {
font-size: 1.9rem;
line-height: calc( 1.2em + 0.2 * 1rem );
}
h2 {
font-size: 1.6rem;
line-height: calc( 1.3em + 0.2 * 1rem );
}
h3 {
font-size: 1.35rem;
line-height: calc( 1.4em + 0.2 * 1rem );
}
@media (min-width: 20em) {
/* The (100vw - 20rem) / (50 - 20) part
resolves to 0-1rem, depending on the
viewport width (between 20em and 50em). */
p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
margin-left: 0;
}
h1 {
font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
}
h2 {
font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
}
h3 {
font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
}
}
@media (min-width: 50em) {
/* The right part of the addition *must* be a
rem value. In this example we *could* change
the whole declaration to font-size:2.5rem,
but if our baseline value was not expressed
in rem we would have to use calc. */
p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
font-size: calc( 1rem + .6 * 1rem );
line-height: 1.5em;
}
p, li, pre, details {
margin-left: 3rem;
}
h1 {
font-size: calc( 1.9rem + 1.5 * 1rem );
line-height: 1.2em;
}
h2 {
font-size: calc( 1.5rem + 1.5 * 1rem );
line-height: 1.3em;
}
h3 {
font-size: calc( 1.35rem + 1.5 * 1rem );
line-height: 1.4em;
}
figure img {
max-width: 500px;
max-height: 500px;
}
}

figure.unsquared {
margin-bottom: 1.5rem;
}
figure.unsquared img {
height: inherit;
}



@media print {
body { font-size: 100%; }
a:after { content: " (" attr(href) ")"; }
a, a:link, a:visited, a:after {
text-decoration: underline;
text-shadow: none !important;
background-image: none !important;
background: white;
color: black;
}
abbr[title] { border-bottom: 0; }
abbr[title]:after { content: " (" attr(title) ")"; }
img { page-break-inside: avoid; }
@page { margin: 2cm .5cm; }
h1, h2, h3 { page-break-after: avoid; }
p3 { orphans: 3; widows: 3; }
img {
max-width: 250px !important;
max-height: 250px !important;
}
nav, aside { display: none; }
}

ul.with_columns {
column-count: 1;
}
@media (min-width: 20em) {
ul.with_columns {
column-count: 2;
}
}
@media (min-width: 50em) {
ul.with_columns {
column-count: 3;
}
}
ul.with_two_columns {
column-count: 1;
}
@media (min-width: 20em) {
ul.with_two_columns {
column-count: 1;
}
}
@media (min-width: 50em) {
ul.with_two_columns {
column-count: 2;
}
}

.gallery {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
.gallery figure img {
margin-left: 1rem;
margin-right: 1rem;
}
.gallery figure figcaption {
font-family: 'ConcourseT3'
}

footer {
font-family: 'ConcourseT3';
display: flex;
flex-direction: column;
border-top: 3px solid white;
padding: 4rem 0;
background-color: #07486c;
color: white;
}
footer > * {
max-width: 50rem;
margin: 0 auto;
}
footer a {
color: #f1c40f;
}
footer .avatar {
width: 200px;
height: 200px;
border-radius: 50%;
float: left;
-webkit-shape-outside: circle();
shape-outside: circle();
margin-right: 2rem;
padding: 2px 5px 5px 2px;
background: white;
border-left: 1px solid #f1c40f;
border-top: 1px solid #f1c40f;
border-right: 5px solid #f1c40f;
border-bottom: 5px solid #f1c40f;
}
</style>

<h1>
<span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
Calm Technology (archive)
<time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
</h1>
<section>
<article>
<h3><a href="https://calmtech.com/">Source originale du contenu</a></h3>
<h2>Our world is made of information that competes for our attention.<br>What is necessary? What is not?</h2>

<p>When we design products, we aim to choose the best position for user interface components, placing the most important ones in the most accessible places on the screen.</p>

<p>Equally important is the design of communication. How many are notifications are necessary? How and when should they be displayed? To answer this, we can be inspired by the principles of <strong>calm technology.</strong><sup>1</sup></p>

<h2 class="header-text">Principles of Calm Technology</h2>

<p><hr>
<ol type="I">
<!-- list item -->
<li>Technology should require the smallest possible amount of attention <ol type="a"> <br />
<li>Technology can communicate, but doesn’t need to speak.</li>
<li>Create ambient awareness through different senses.</li> <br />
<li>Communicate information without taking the wearer out of their environment or task.</li>
</ol>
</li>
<!-- end list item -->
<!-- list item --></p>
<!-- Additional Notes: Keep in mind that people have a limited amount of attention. Attempt to create technology that requires the least amount of their attention while providing the most useful functions. Consider how your interface can provide information without tak- ing the user out of their primary task. -->

<li>Technology should inform and create calm
<ol type="a">
<li>A person's primary task should not be computing, but being human.</li>
<li>Give people what they need to solve their problem, and nothing more.</li>
</ol>
</li>

<!-- end list item -->

<!-- list item -->

<li>Technology should make use of the periphery
<ol type="a">
<li>A calm technology will move easily from the periphery of our attention, to the center, and back.</li>
<li>The periphery is informing without overburdening.</li>
<!-- Additional notes: Explore ways in which your technology can make use of peripheral attention . Technology should make use of the periphery. -->
</ol>
</li>

<!-- end list item -->

<!-- list item -->

<li>Technology should amplify the best of technology and the best of humanity
<ol type="a">
<li>Design for people first.</li>
<li>Machines shouldn't act like humans.</li>
<li>Humans shouldn't act like machines.</li>
<li>Amplify the best part of each.</li>
</ol>
</li>

<!-- end list item -->

<!-- list item -->

<li>Technology can communicate, but doesn’t need to speak
<ol type="a">
<li>Does your product need to rely on voice, or can it use a different communication method?</li>
<li>Consider how your technology communicates status.</li>
</ol>
</li>

<!-- end list item -->

<!-- list item -->

<li>Technology should work even when it fails
<ol type="a">
<li>Think about what happens if your technology fails.</li>
<li>Does it default to a usable state or does it break down completely?</li>
</ol>
</li>

<li>The right amount of technology is the minimum needed to solve the problem
<ol type="a">
<li>What is the minimum amount of technology needed to solve the problem?</li>
<li>Slim the feature set down so that the product does what it needs to do and no more.</li>
</ol>
</li>

<!-- end list item -->

<!-- list item -->

<li>Technology should respect social norms
<ol type="a">
<li>Technology takes time to introduce to humanity.</li>
<li>What social norms exist that your technology might violate or cause stress on?</li>
<li>Slowly introduce features so that people have time to get accustomed to the product.</li>
</ol>
</li>

</ol>
</article>
</section>


<nav id="jumpto">
<p>
<a href="/david/blog/">Accueil du blog</a> |
<a href="https://calmtech.com/">Source originale</a> |
<a href="/david/stream/2019/">Accueil du flux</a>
</p>
</nav>

<footer>
<div>
<img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
<p>
Bonjour/Hi!
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>
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>).
</p>
<p>
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>.
</p>
<p>
Voici quelques articles choisis :
<a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
<a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
<a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
<a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
<a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
<a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
<a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
<a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
<a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
<a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
<a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
<a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
<a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
<a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
<a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
</p>
<p>
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>.
</p>
<p>
Je ne traque pas ta navigation mais mon
<abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
conserve des logs d’accès.
</p>
</div>
</footer>
<script type="text/javascript">
;(_ => {
const jumper = document.getElementById('jumper')
jumper.addEventListener('click', e => {
e.preventDefault()
const anchor = e.target.getAttribute('href')
const targetEl = document.getElementById(anchor.substring(1))
targetEl.scrollIntoView({behavior: 'smooth'})
})
})()
</script>

+ 93
- 0
cache/ab325197a8e81f929de1b10477cce340/index.md View File

@@ -0,0 +1,93 @@
title: Calm Technology
url: https://calmtech.com/
hash_url: ab325197a8e81f929de1b10477cce340

<h2>Our world is made of information that competes for our attention.<br>What is necessary? What is not?</h2>

<p>When we design products, we aim to choose the best position for user interface components, placing the most important ones in the most accessible places on the screen.</p>

<p>Equally important is the design of communication. How many are notifications are necessary? How and when should they be displayed? To answer this, we can be inspired by the principles of <strong>calm technology.</strong><sup>1</sup></p>

<h2 class="header-text">Principles of Calm Technology</h2>
<hr>
<ol type="I">
<!-- list item -->
<li>Technology should require the smallest possible amount of attention <ol type="a">
<li>Technology can communicate, but doesn’t need to speak.</li>
<li>Create ambient awareness through different senses.</li>
<li>Communicate information without taking the wearer out of their environment or task.</li>
</ol>
</li>
<!-- end list item -->
<!-- list item -->

<!-- Additional Notes: Keep in mind that people have a limited amount of attention. Attempt to create technology that requires the least amount of their attention while providing the most useful functions. Consider how your interface can provide information without tak- ing the user out of their primary task. -->

<li>Technology should inform and create calm
<ol type="a">
<li>A person's primary task should not be computing, but being human.</li>
<li>Give people what they need to solve their problem, and nothing more.</li>
</ol>
</li>

<!-- end list item -->
<!-- list item -->

<li>Technology should make use of the periphery
<ol type="a">
<li>A calm technology will move easily from the periphery of our attention, to the center, and back.</li>
<li>The periphery is informing without overburdening.</li>
<!-- Additional notes: Explore ways in which your technology can make use of peripheral attention . Technology should make use of the periphery. -->
</ol>
</li>

<!-- end list item -->
<!-- list item -->

<li>Technology should amplify the best of technology and the best of humanity
<ol type="a">
<li>Design for people first.</li>
<li>Machines shouldn't act like humans.</li>
<li>Humans shouldn't act like machines.</li>
<li>Amplify the best part of each.</li>
</ol>
</li>

<!-- end list item -->
<!-- list item -->

<li>Technology can communicate, but doesn’t need to speak
<ol type="a">
<li>Does your product need to rely on voice, or can it use a different communication method?</li>
<li>Consider how your technology communicates status.</li>
</ol>
</li>

<!-- end list item -->
<!-- list item -->

<li>Technology should work even when it fails
<ol type="a">
<li>Think about what happens if your technology fails.</li>
<li>Does it default to a usable state or does it break down completely?</li>
</ol>
</li>

<li>The right amount of technology is the minimum needed to solve the problem
<ol type="a">
<li>What is the minimum amount of technology needed to solve the problem?</li>
<li>Slim the feature set down so that the product does what it needs to do and no more.</li>
</ol>
</li>

<!-- end list item -->
<!-- list item -->

<li>Technology should respect social norms
<ol type="a">
<li>Technology takes time to introduce to humanity.</li>
<li>What social norms exist that your technology might violate or cause stress on?</li>
<li>Slowly introduce features so that people have time to get accustomed to the product.</li>
</ol>
</li>
</ol>

+ 2
- 0
cache/index.html View File

@@ -3208,6 +3208,8 @@ footer {
<li><a href="/david/cache/f14ac41ec597f2a6af377eabaf6cc66b/" title="Accès à l'article caché">Centralised DoH is bad for privacy, in 2019 and beyond</a> (<a href="https://blog.powerdns.com/2019/09/25/centralised-doh-is-bad-for-privacy-in-2019-and-beyond/" title="Accès à l'article original">original</a>)</li>
<li><a href="/david/cache/ab325197a8e81f929de1b10477cce340/" title="Accès à l'article caché">Calm Technology</a> (<a href="https://calmtech.com/" title="Accès à l'article original">original</a>)</li>
<li><a href="/david/cache/4f5f1314047ae271ac5f080f6c43bff4/" title="Accès à l'article caché">How to perform a good code review</a> (<a href="https://blog.alphasmanifesto.com/2016/11/17/how-to-perform-a-good-code-review/" title="Accès à l'article original">original</a>)</li>
<li><a href="/david/cache/11ea6cf2c559544215f010b0bf66a02a/" title="Accès à l'article caché">How (Not) to Run a Modern Society on Solar and Wind Power Alone</a> (<a href="https://solar.lowtechmagazine.com/2017/09/how-to-run-modern-society-on-solar-and-wind-powe.html" title="Accès à l'article original">original</a>)</li>

Loading…
Cancel
Save