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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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` element
  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>A notification center for progress bars that sounds like birdsong (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="#f7f7f7">
  24. <meta name="msapplication-config" content="/static/david/icons2/browserconfig.xml">
  25. <meta name="theme-color" content="#f7f7f7" media="(prefers-color-scheme: light)">
  26. <meta name="theme-color" content="#272727" media="(prefers-color-scheme: dark)">
  27. <!-- Is that even respected? Retrospectively? What a shAItshow…
  28. https://neil-clarke.com/block-the-bots-that-feed-ai-models-by-scraping-your-website/ -->
  29. <meta name="robots" content="noai, noimageai">
  30. <!-- Documented, feel free to shoot an email. -->
  31. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  32. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  33. <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>
  34. <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>
  35. <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>
  36. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  37. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  38. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  39. <script>
  40. function toggleTheme(themeName) {
  41. document.documentElement.classList.toggle(
  42. 'forced-dark',
  43. themeName === 'dark'
  44. )
  45. document.documentElement.classList.toggle(
  46. 'forced-light',
  47. themeName === 'light'
  48. )
  49. }
  50. const selectedTheme = localStorage.getItem('theme')
  51. if (selectedTheme !== 'undefined') {
  52. toggleTheme(selectedTheme)
  53. }
  54. </script>
  55. <meta name="robots" content="noindex, nofollow">
  56. <meta content="origin-when-cross-origin" name="referrer">
  57. <!-- Canonical URL for SEO purposes -->
  58. <link rel="canonical" href="https://interconnected.org/home/2023/02/10/progress">
  59. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  60. <article>
  61. <header>
  62. <h1>A notification center for progress bars that sounds like birdsong</h1>
  63. </header>
  64. <nav>
  65. <p class="center">
  66. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  67. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  68. </svg> Accueil</a> •
  69. <a href="https://interconnected.org/home/2023/02/10/progress" title="Lien vers le contenu original">Source originale</a>
  70. </p>
  71. </nav>
  72. <hr>
  73. <p class="measure-wide f6 f5-l lh-copy black-80">The return of dead time!</p>
  74. <p class="measure-wide f6 f5-l lh-copy black-80">One curious experience in <a href="/home/2023/02/07/braggoscope">hacking on Braggoscope</a>: there’s a lot of <em>waiting for the AI.</em> Asking GPT-3 to extract some data costs 3 cents and takes 5 seconds. Stick it in a loop and that’s 80 minutes for the 1,000 episodes in the <em>In Our Time</em> archive.</p>
  75. <p class="measure-wide f6 f5-l lh-copy black-80">Now I’ve saved myself a few days writing code by asking the AI to do the heavy lifting so 80 minutes and pennies per inference is neither here nor there, but what am I supposed to <em>do?</em></p>
  76. <p class="measure-wide f6 f5-l lh-copy black-80">This has come up before:</p>
  77. <ul class="list ph0 ph0-ns bulleted-list">
  78. <li class="measure-wide f6 f5-l lh-copy black-80">in my undergrad, analysing quasar spectra, running data jobs overnight and over lunch</li>
  79. <li class="measure-wide f6 f5-l lh-copy black-80">writing firmware for a radio prototype, wanting to test my latest changes and hitting compile and staring at the wall for minutes while the computer did its THING.</li>
  80. </ul>
  81. <p class="measure-wide f6 f5-l lh-copy black-80"><em>Long-running processes</em> are kinda the norm, even though we have this narrative about computers being instant? Whether that’s waiting for a 3D render, or running the test suite on a codebase and going off to make a cup of tea while it does its thing.</p>
  82. <p class="measure-wide f6 f5-l lh-copy black-80">Or waiting for a restaurant delivery! Or a cab to arrive! Many process are human-machine hybrids.</p>
  83. <p class="measure-wide f6 f5-l lh-copy black-80">tbh I never know what to do with myself.</p>
  84. <p class="measure-wide f6 f5-l lh-copy black-80">I can never move on for that 80 minutes. I can never multiplex tasks. Even though I <em>know</em> it’s only a fraction of the way through, cognitively the computer’s task is still lodged in my head, and all I can do is doomscroll Twitter or shuffle my shoes or whatever until it completes. Nothing productive.</p>
  85. <p class="measure-wide f6 f5-l lh-copy black-80">I blame notifications.</p>
  86. <p class="measure-wide f6 f5-l lh-copy black-80">Operating systems are really good at dinging when the machine has finished (and it’s my turn now).</p>
  87. <p class="measure-wide f6 f5-l lh-copy black-80">An absolute <em>ton</em> of effort has gone into effective dinging, over the years. Apps can all ding. I can make my hobby code ding. There’s a top-level OS feature called the Notification Center which is all about collecting dings, so that I have a list of all the balls which are now in my court to deal with.</p>
  88. <p class="measure-wide f6 f5-l lh-copy black-80">Engagement!</p>
  89. <p class="measure-wide f6 f5-l lh-copy black-80">Computers and phones are not so good at, say, <em>humming</em> to say: hey you don’t need to do anything here. Don’t panic. Go away.</p>
  90. <hr class="h1 xh2-ns w1 xw2-ns ml4 mv4 bb bw1 b--white">
  91. <p class="measure-wide f6 f5-l lh-copy black-80">So, <em>progress bars,</em> right?</p>
  92. <p class="measure-wide f6 f5-l lh-copy black-80">Progress bars let me see that I’m only 10% of the way through a process, and the pixels are creeping up oh so slowly, so I can safely get on and THINK ABOUT SOMETHING ELSE secure in the knowledge that I won’t be interrupted by a ding.</p>
  93. <p class="measure-wide f6 f5-l lh-copy black-80"><em>Clever</em> progress bars even show an estimate time of completion.</p>
  94. <p class="measure-wide f6 f5-l lh-copy black-80"><em>(There’s a command line tool, I forget the name of it right now, where you - a developer - give it only minimal information, and it deduces the rest, providing a user interface with percentages and times and everything you’d need.)</em></p>
  95. <p class="measure-wide f6 f5-l lh-copy black-80">I know we laugh at progress bars because they were often comically inaccurate with time estimates – but we could have solved that with better design I’m sure? Visually provided lower bounds (this process will not complete in less than X) and confidence levels? Or just made them funny? <q>Reticulating splines,</q> that was good.</p>
  96. <p class="measure-wide f6 f5-l lh-copy black-80">But we didn’t take on that design challenge…</p>
  97. <p class="measure-wide f6 f5-l lh-copy black-80">Instead we got…</p>
  98. <p class="measure-wide f6 f5-l lh-copy black-80">Spinners.</p>
  99. <p class="measure-wide f6 f5-l lh-copy black-80">Spinners are the dumbest progress bar.</p>
  100. <p class="measure-wide f6 f5-l lh-copy black-80"><em>“I’m busy and I may come back to you in 3 minutes or I may come back to you in half a second but I’m not going to say which, and anyway the network may have hung so just wait forever, I’ll just be here looking exactly the same, spinning.”</em></p>
  101. <hr class="h1 xh2-ns w1 xw2-ns ml4 mv4 bb bw1 b--white">
  102. <p class="measure-wide f6 f5-l lh-copy black-80">Imagine if all the effort put into managing notifications had gone into progress bars.</p>
  103. <p class="measure-wide f6 f5-l lh-copy black-80">We would have…</p>
  104. <ul class="list ph0 ph0-ns bulleted-list">
  105. <li class="measure-wide f6 f5-l lh-copy black-80">all my progress bars consolidated in one place, not hidden behind other windows, a reassuring design feature that shows me that the computer is WORKING for me!</li>
  106. <li class="measure-wide f6 f5-l lh-copy black-80">AI predictions based on current churning away, and previous performance, with increasingly confident percentages and automatic time-till-done</li>
  107. <li class="measure-wide f6 f5-l lh-copy black-80">easy-to-integrate progress bars for app developers and hobbyist coders alike</li>
  108. <li class="measure-wide f6 f5-l lh-copy black-80">extra features, like integrated pause/resume when you need more battery, or the ability to hook up completion milestones to ding (I suppose) or vibrate my watch or whatever</li>
  109. <li class="measure-wide f6 f5-l lh-copy black-80"><em>cloud</em> progress bars, so I can see the progress of an Amazon delivery right next to the job that is using machine learning to generate my new profile image photos, all in a pane that swipes down from the top of the screen.</li>
  110. </ul>
  111. <p class="measure-wide f6 f5-l lh-copy black-80">Why do I want this?</p>
  112. <p class="measure-wide f6 f5-l lh-copy black-80">Well, the motivation as for the Notification Center itself: notifications are consolidated because it helps manage attention. It’s less stressful to have <em>“things I need to look at”</em> effectively as a to-do list rather than having to keep all the dings in my own brain.</p>
  113. <p class="measure-wide f6 f5-l lh-copy black-80">Progress Bar Center, same same: it would help me manage my attention. By listing all the things I DON’T need to look at, and letting me know that I definitely <em>don’t need to look at these for the next X minutes</em> then it means I can cognitively stand down: I need no longer inhabit a state of perpetual readiness.</p>
  114. <p class="measure-wide f6 f5-l lh-copy black-80">And so I can finally focus on something else instead.</p>
  115. <hr class="h1 xh2-ns w1 xw2-ns ml4 mv4 bb bw1 b--white">
  116. <p class="measure-wide f6 f5-l lh-copy black-80">Imagining, for a second, a Progress Bar Center on my laptop or my phone:</p>
  117. <p class="measure-wide f6 f5-l lh-copy black-80">It would be a home for my podcast <em>Now Playing</em> too. And for my current Google Maps journey. So this is semi-interactive.</p>
  118. <p class="measure-wide f6 f5-l lh-copy black-80">Given that interactivity, I can imagine the commercial angle too: the progress bar for a cloud render or my Amazon order may have a pay-for <em>Boost</em> button to buy more GPUs or upgrade to next-day delivery or whatever. The process economy instead of the engagement economy.</p>
  119. <p class="measure-wide f6 f5-l lh-copy black-80">And of course my GPT-3 tasks running, and Photoshop filters calculating, and my movies downloading –</p>
  120. <p class="measure-wide f6 f5-l lh-copy black-80">all, collectively, reassuringly telling me: the machine is busy on my behalf. I can relax, I’m already being productive, put it all out of my mind, there’s nothing I need to do.</p>
  121. <hr class="h1 xh2-ns w1 xw2-ns ml4 mv4 bb bw1 b--white">
  122. <p class="measure-wide f6 f5-l lh-copy black-80">And pulling on that thread of <em>putting attention aside…</em></p>
  123. <p class="measure-wide f6 f5-l lh-copy black-80">It’s easier to do that when the locus of attention is physically elsewhere?</p>
  124. <p class="measure-wide f6 f5-l lh-copy black-80">Like: when music is coming from the speaker behind me, rather than from the same location as the code problem I’m trying to crack on-screen, <a href="/home/2021/11/19/airpods">it seems less likely to distract me</a>.</p>
  125. <p class="measure-wide f6 f5-l lh-copy black-80">All these things asking for my attention from the same locus is fatiguing, in the same way that staring into a point source of bright light is fatiguing, but a diffuse glow from all around can can be just as bright and not fatiguing at all – just illuminating.</p>
  126. <p class="measure-wide f6 f5-l lh-copy black-80">So the equivalent for attention is (because <a href="/home/2023/01/20/map_room">I’ve been thinking about room-scale computing recently</a>) to scatter those progress bars around the room.</p>
  127. <p class="measure-wide f6 f5-l lh-copy black-80">And thinking of the <em>chugga chugga chugga</em> of old hard drives and other <a href="/home/2021/08/27/data_sense">synaesthetic data senses for machines</a> – it maybe would be cool to <em>sonify</em> these progress bars?</p>
  128. <p class="measure-wide f6 f5-l lh-copy black-80">The idea of making a soundscape of the workings of the machine has been around for a while of course but I’ve found it hard to see a plausible route to get there in this era of notifications. A room of dinging things would be torture.</p>
  129. <p class="measure-wide f6 f5-l lh-copy black-80">But based it on this framework for progress bars!</p>
  130. <p class="measure-wide f6 f5-l lh-copy black-80">You could do it for cheap with tiny speakers and Bluetooth, sell progress bars by the handful like AirTags.</p>
  131. <p class="measure-wide f6 f5-l lh-copy black-80">I would love it if sitting in my home office had the ambient sound of a rainforest. Everything, I would think, listening, is working as it should.</p>
  132. <p class="measure-wide f6 f5-l lh-copy black-80">The frogs are reaching a crescendo! (I am about to get a notification that a job has finished, I think to myself.)</p>
  133. <p class="measure-wide f6 f5-l lh-copy black-80">Or stepping into an office and hearing all the non-human workers sonified and layered – the sound of progress as the distant hum of traffic, or the wind.</p>
  134. </article>
  135. <hr>
  136. <footer>
  137. <p>
  138. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  139. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  140. </svg> Accueil</a> •
  141. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  142. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  143. </svg> Suivre</a> •
  144. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  145. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  146. </svg> Pro</a> •
  147. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  148. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  149. </svg> Email</a> •
  150. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  151. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  152. </svg> Légal</abbr>
  153. </p>
  154. <template id="theme-selector">
  155. <form>
  156. <fieldset>
  157. <legend><svg class="icon icon-brightness-contrast">
  158. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  159. </svg> Thème</legend>
  160. <label>
  161. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  162. </label>
  163. <label>
  164. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  165. </label>
  166. <label>
  167. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  168. </label>
  169. </fieldset>
  170. </form>
  171. </template>
  172. </footer>
  173. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  174. <script>
  175. function loadThemeForm(templateName) {
  176. const themeSelectorTemplate = document.querySelector(templateName)
  177. const form = themeSelectorTemplate.content.firstElementChild
  178. themeSelectorTemplate.replaceWith(form)
  179. form.addEventListener('change', (e) => {
  180. const chosenColorScheme = e.target.value
  181. localStorage.setItem('theme', chosenColorScheme)
  182. toggleTheme(chosenColorScheme)
  183. })
  184. const selectedTheme = localStorage.getItem('theme')
  185. if (selectedTheme && selectedTheme !== 'undefined') {
  186. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  187. }
  188. }
  189. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  190. window.addEventListener('load', () => {
  191. let hasDarkRules = false
  192. for (const styleSheet of Array.from(document.styleSheets)) {
  193. let mediaRules = []
  194. for (const cssRule of styleSheet.cssRules) {
  195. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  196. continue
  197. }
  198. // WARNING: Safari does not have/supports `conditionText`.
  199. if (cssRule.conditionText) {
  200. if (cssRule.conditionText !== prefersColorSchemeDark) {
  201. continue
  202. }
  203. } else {
  204. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  205. continue
  206. }
  207. }
  208. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  209. }
  210. // WARNING: do not try to insert a Rule to a styleSheet you are
  211. // currently iterating on, otherwise the browser will be stuck
  212. // in a infinite loop…
  213. for (const mediaRule of mediaRules) {
  214. styleSheet.insertRule(mediaRule.cssText)
  215. hasDarkRules = true
  216. }
  217. }
  218. if (hasDarkRules) {
  219. loadThemeForm('#theme-selector')
  220. }
  221. })
  222. </script>
  223. </body>
  224. </html>