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.

index.html 17KB

4 lat temu
4 lat temu
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  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,initial-scale=1">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>The modern web is becoming an unusable, user-hostile wasteland (archive) — David Larlet</title>
  13. <meta name="description" content="Publication mise en cache pour en conserver une trace.">
  14. <!-- That good ol' feed, subscribe :). -->
  15. <link rel="alternate" type="application/atom+xml" title="Feed" href="/david/log/">
  16. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  17. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons2/apple-touch-icon.png">
  18. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons2/favicon-32x32.png">
  19. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons2/favicon-16x16.png">
  20. <link rel="manifest" href="/static/david/icons2/site.webmanifest">
  21. <link rel="mask-icon" href="/static/david/icons2/safari-pinned-tab.svg" color="#07486c">
  22. <link rel="shortcut icon" href="/static/david/icons2/favicon.ico">
  23. <meta name="msapplication-TileColor" content="#f0f0ea">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f0f0ea">
  26. <!-- Documented, feel free to shoot an email. -->
  27. <link rel="stylesheet" href="/static/david/css/style_2020-06-19.css">
  28. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  29. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  30. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  31. <link rel="preload" href="/static/david/css/fonts/triplicate_t4_poly_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)" crossorigin>
  32. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <script type="text/javascript">
  36. function toggleTheme(themeName) {
  37. document.documentElement.classList.toggle(
  38. 'forced-dark',
  39. themeName === 'dark'
  40. )
  41. document.documentElement.classList.toggle(
  42. 'forced-light',
  43. themeName === 'light'
  44. )
  45. }
  46. const selectedTheme = localStorage.getItem('theme')
  47. if (selectedTheme !== 'undefined') {
  48. toggleTheme(selectedTheme)
  49. }
  50. </script>
  51. <meta name="robots" content="noindex, nofollow">
  52. <meta content="origin-when-cross-origin" name="referrer">
  53. <!-- Canonical URL for SEO purposes -->
  54. <link rel="canonical" href="https://omarabid.com/the-modern-web">
  55. <body class="remarkdown h1-underline h2-underline h3-underline hr-center ul-star pre-tick">
  56. <article>
  57. <header>
  58. <h1>The modern web is becoming an unusable, user-hostile wasteland</h1>
  59. </header>
  60. <nav>
  61. <p class="center">
  62. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  63. <a href="https://omarabid.com/the-modern-web" title="Lien vers le contenu original">Source originale</a>
  64. </p>
  65. </nav>
  66. <hr>
  67. <main>
  68. <blockquote>
  69. <p>In one of Gerald Weinberg’s books, probably The Secrets of Consulting, there’s the apocryphal story of the giant multinational hamburger chain where some bright MBA figured out that eliminating just three sesame seeds from a sesame-seed bun would be completely unnoticeable by anyone yet would save the company $126,000 per year. So they do it, and time passes, and another bushy-tailed MBA comes along, and does another study, and concludes that removing another five sesame seeds wouldn’t hurt either, and would save even more money, and so on and so forth, every year or two, the new management trainee looking for ways to save money proposes removing a sesame seed or two, until eventually, they’re shipping hamburger buns with exactly three sesame seeds artfully arranged in a triangle, and nobody buys their hamburgers any more.</p>
  70. </blockquote>
  71. <p><em>Joel Spolsky from <a href="https://www.joelonsoftware.com/2007/09/11/theres-no-place-like-127001/">There’s no place like 127.0.0.1</a></em></p>
  72. <p>As I keep browsing today’s internet, I keep recalling this extract. It’s the same thing happening with the modern web: If you add another advertisement to your pages, you generate more revenue. If you track your users better, now you can deliver tailored ads and your conversion rates are higher. If you restrict users from leaving your walled garden ecosystem, now you get all the juice from whatever attention they have.</p>
  73. <p>The question is: At which point do we reach the breaking point?</p>
  74. <p>And I think the answer is: <em>We are very close</em>.</p>
  75. <p>Here are some of these websites, who have managed over time to turn the user experience almost unusable for anyone who doesn’t have an account.</p>
  76. <h2 id="facebook_2">Facebook <a class="head_anchor" href="#facebook_2">#</a>
  77. </h2>
  78. <p>If you try to open a Facebook page without an account, this is what you get.</p>
  79. <p><a href="https://svbtleusercontent.com/dJwcwmJQW8QkFHeMQBKnTC0xspap.png"><img src="https://svbtleusercontent.com/dJwcwmJQW8QkFHeMQBKnTC0xspap.png" alt="Screen Shot 2019-11-11 at 6.34.32 PM.png"/></a></p>
  80. <p>There is a blue header at the top that has the login form. But in case you missed it, Facebook has made another big white one at the bottom. Have you signed up yet?</p>
  81. <p>Let’s try to scroll a little bit more.</p>
  82. <p><a href="https://svbtleusercontent.com/gNR1XozEXRGq8TxxBbtSK60xspap.png"><img src="https://svbtleusercontent.com/gNR1XozEXRGq8TxxBbtSK60xspap.png" alt="Screen Shot 2019-11-11 at 6.34.55 PM.png"/></a></p>
  83. <p>Wooha! Looks like you didn’t login, or you haven’t signed up yet! But there is a small “Not Now” button; because we know <em>you’ll have to create an account later</em>.</p>
  84. <p>In case you think this experience is garbage; wait until you see the mobile version.</p>
  85. <p><a href="https://svbtleusercontent.com/GkQ5zG4SoV2yZDFPZCn1a0xspap.png"><img src="https://svbtleusercontent.com/GkQ5zG4SoV2yZDFPZCn1a0xspap.png" alt="IMG_3528.PNG"/></a></p>
  86. <p>It’s not even clear, at this point, what the actual page is about. Let’s try to scroll a bit more.</p>
  87. <p><a href="https://svbtleusercontent.com/iwrmnvSWCCZ6LWkp1V3SRH0xspap.png"><img src="https://svbtleusercontent.com/iwrmnvSWCCZ6LWkp1V3SRH0xspap.png" alt="IMG_3530.PNG"/></a></p>
  88. <p>There isn’t even any content in this page. Who designed and approved this mess?</p>
  89. <p>Think you are a smart-ass? You can create a fake account. But after a while, Facebook will think you are dodgy and ask for more identifiable information.</p>
  90. <p><a href="https://svbtleusercontent.com/5xyZiwADWPEziRppRmEvSM0xspap.png"><img src="https://svbtleusercontent.com/5xyZiwADWPEziRppRmEvSM0xspap.png" alt="Screen Shot 2019-11-20 at 11.58.45 AM.png"/></a></p>
  91. <p>There is a solution: To buy a disposable phone number and use it to complete the verification. But this was the breaking point. At this point, I no longer bother.</p>
  92. <p>Is Twitter any better? Well, it looks like they are trying to strike a balance between giving you free data and their craving for your identity. You can still read the president tweets from his main page.</p>
  93. <p><a href="https://svbtleusercontent.com/vfk2SLog4xoJR693CHSUaX0xspap.png"><img src="https://svbtleusercontent.com/vfk2SLog4xoJR693CHSUaX0xspap.png" alt="Screen Shot 2019-12-20 at 1.07.06 PM.png"/></a></p>
  94. <p>Trying to read his “Tweets &amp; replies” is less fruitful though.</p>
  95. <p><a href="https://svbtleusercontent.com/8eBsgGd149ankeY2dh9qj80xspap.png"><img src="https://svbtleusercontent.com/8eBsgGd149ankeY2dh9qj80xspap.png" alt="Screen Shot 2019-12-20 at 1.07.44 PM.png"/></a></p>
  96. <p>Actually, all of these buttons are inaccessible as for right now.</p>
  97. <p><a href="https://svbtleusercontent.com/iN7M3MxngAUo8bX8F2JCA80xspap.png"><img src="https://svbtleusercontent.com/iN7M3MxngAUo8bX8F2JCA80xspap.png" alt="Screen Shot 2019-12-20 at 1.07.06 PM.png"/></a></p>
  98. <p>Extrapolating on the progress these websites have been making, it’s only a matter of time before <em>nothing</em> on Twitter is readable without an account. Maybe, you’ll get a spoiler in the future; but that’s it.</p>
  99. <h2 id="medium_2">Medium <a class="head_anchor" href="#medium_2">#</a>
  100. </h2>
  101. <p>Everyone is complaining about these tech-giants these days, but are the new incumbents doing any better? Medium is one these <em>dudes</em> and they claim to be the good guys.</p>
  102. <blockquote class="short">
  103. <p>Keep it ad-free<br/>
  104. Medium doesn’t accept advertising. Please don’t market yourself or other products, feature advertisements, or include requests for claps or donations.</p>
  105. </blockquote>
  106. <p><a href="https://svbtleusercontent.com/9VdU6n8fbQbksQwSnKp6Nx0xspap.png"><img src="https://svbtleusercontent.com/9VdU6n8fbQbksQwSnKp6Nx0xspap.png" alt="Screen Shot 2019-11-11 at 7.26.25 PM.png"/></a></p>
  107. <p>No ads? Time to check the terms of service.</p>
  108. <blockquote>
  109. <p>In consideration for Medium granting you access to and use of the Services, you agree that Medium may enable advertising on the Services, including in connection with the display <em>of your content</em> or other information. We may also <em>use your content</em> to promote Medium, including its products and content. We will never sell your content to third parties without your explicit permission.</p>
  110. </blockquote>
  111. <p>So they are advertising, but <em>you are not</em>. But hey! at least they are not selling your content without your permission. Don’t hold your breath, though. The terms can change at a moment notice.</p>
  112. <p>And in case you wondered what the experience of browsing medium is, here it is:</p>
  113. <p><a href="https://svbtleusercontent.com/wyvY4QLnCK9RFwxDG7CSDc0xspap.png"><img src="https://svbtleusercontent.com/wyvY4QLnCK9RFwxDG7CSDc0xspap.png" alt="Screen Shot 2019-11-11 at 7.20.10 PM.png"/></a></p>
  114. <p><a href="https://svbtleusercontent.com/wcxC522McDBrpK98NQyK4f0xspap.png"><img src="https://svbtleusercontent.com/wcxC522McDBrpK98NQyK4f0xspap.png" alt="Screen Shot 2019-11-11 at 7.22.33 PM.png"/></a></p>
  115. <p><a href="https://svbtleusercontent.com/rFMbk9Nh775qzsV2Lx3FLn0xspap.png"><img src="https://svbtleusercontent.com/rFMbk9Nh775qzsV2Lx3FLn0xspap.png" alt="Screen Shot 2019-11-11 at 7.23.44 PM.png"/></a></p>
  116. <p>But what if you pay? That is you are not the product like they said. Let’s say you check a supposedly reputable company (i.e. Bloomberg) and think of opting for a digital subscription.</p>
  117. <p><a href="https://svbtleusercontent.com/uZ3k94FgmD61DTUb4m1bqd0xspap.png"><img src="https://svbtleusercontent.com/uZ3k94FgmD61DTUb4m1bqd0xspap.png" alt="Screen Shot 2019-11-23 at 9.33.01 PM.png"/></a></p>
  118. <p>I mean it’s only $2/month. Less than what you’d pay for a cup of coffee. Or $<strong>340</strong>/year; here hoping you are very bad at math.</p>
  119. <p>In a nutshell, if I can describe my browsing experience in 2019.</p>
  120. <ul>
  121. <li>Websites asking to login, register or enter an email.</li>
  122. <li>Websites asking for your phone number after you gave up your email.</li>
  123. <li>Websites asking to allow HTML5 notifications.</li>
  124. <li>Websites downloading 50Mb of data and making hundreds of requests to serve 6Kb worth of text.</li>
  125. <li>Websites that are not functioning because they have too much JavaScript.</li>
  126. <li>Websites that are not functioning because some of the JavaScript was caught by uBlock Origin.</li>
  127. <li>Websites asking to turn off the Ad Blocker.</li>
  128. <li>Websites asking to accept the cookies in 41,484 different ways.</li>
  129. <li>Websites asking to download their mobile app which is non-native and requires around 200Mb of storage.</li>
  130. <li>Popups to buy a deal or download some random crap.</li>
  131. <li>reCaptcha with random street images; that are sometimes impossible to solve.</li>
  132. <li>CloudFlare DDoS protection thinking I’m a bot.</li>
  133. <li>Youtube running a 2:30 minutes ad for a 3:30 minutes music video.</li>
  134. <li>Video or Website not showing up because I’m not in said country.</li>
  135. <li>Linkedin that keeps sending dozens of emails despite unsubscribing multiple times; and somehow evades the Spam filter</li>
  136. </ul>
  137. <h1 id="the-breaking-point_1">The breaking point <a class="head_anchor" href="#the-breaking-point_1">#</a>
  138. </h1>
  139. <p>I used to have a bank account with a local branch of BNP Paribas. When I signed up, I opted for various services like Online Banking, a “Platinum” debit card and other services. It made sense at the time to pay for online banking since it was long ago, but does it make sense now?</p>
  140. <p>Worse, in the last few years, I have seen the bill for these services increase three fold in the last 3 years. And they started charging for small crap: Deposit money? There is a small fee. Deposit a check? There is a small fee. Withdraw from another bank ATM? The fee now is so high I have to think twice. <em>Inconvenient</em>.</p>
  141. <p>Changing banks is annoying but not impossible. It’d be better if I can avoid such a thing but there is a point where the system breaks. And at some point, you look at the bill and decide: That’s the <strong>breaking point</strong>.</p>
  142. </main>
  143. </article>
  144. <hr>
  145. <footer>
  146. <p>
  147. <a href="/david/" title="Aller à l’accueil">🏠</a> •
  148. <a href="/david/log/" title="Accès au flux RSS">🤖</a> •
  149. <a href="http://larlet.com" title="Go to my English profile" data-instant>🇨🇦</a> •
  150. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">📮</a> •
  151. <abbr title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340">🧚</abbr>
  152. </p>
  153. <template id="theme-selector">
  154. <form>
  155. <fieldset>
  156. <legend>Thème</legend>
  157. <label>
  158. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  159. </label>
  160. <label>
  161. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  162. </label>
  163. <label>
  164. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  165. </label>
  166. </fieldset>
  167. </form>
  168. </template>
  169. </footer>
  170. <script type="text/javascript">
  171. function loadThemeForm(templateName) {
  172. const themeSelectorTemplate = document.querySelector(templateName)
  173. const form = themeSelectorTemplate.content.firstElementChild
  174. themeSelectorTemplate.replaceWith(form)
  175. form.addEventListener('change', (e) => {
  176. const chosenColorScheme = e.target.value
  177. localStorage.setItem('theme', chosenColorScheme)
  178. toggleTheme(chosenColorScheme)
  179. })
  180. const selectedTheme = localStorage.getItem('theme')
  181. if (selectedTheme && selectedTheme !== 'undefined') {
  182. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  183. }
  184. }
  185. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  186. window.addEventListener('load', () => {
  187. let hasDarkRules = false
  188. for (const styleSheet of Array.from(document.styleSheets)) {
  189. let mediaRules = []
  190. for (const cssRule of styleSheet.cssRules) {
  191. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  192. continue
  193. }
  194. // WARNING: Safari does not have/supports `conditionText`.
  195. if (cssRule.conditionText) {
  196. if (cssRule.conditionText !== prefersColorSchemeDark) {
  197. continue
  198. }
  199. } else {
  200. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  201. continue
  202. }
  203. }
  204. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  205. }
  206. // WARNING: do not try to insert a Rule to a styleSheet you are
  207. // currently iterating on, otherwise the browser will be stuck
  208. // in a infinite loop…
  209. for (const mediaRule of mediaRules) {
  210. styleSheet.insertRule(mediaRule.cssText)
  211. hasDarkRules = true
  212. }
  213. }
  214. if (hasDarkRules) {
  215. loadThemeForm('#theme-selector')
  216. }
  217. })
  218. </script>
  219. </body>
  220. </html>