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 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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>Ask LukeW: New Ways into Web Content (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. <!-- Documented, feel free to shoot an email. -->
  28. <link rel="stylesheet" href="/static/david/css/style_2021-01-20.css">
  29. <!-- See https://www.zachleat.com/web/comprehensive-webfonts/ for the trade-off. -->
  30. <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>
  31. <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>
  32. <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>
  33. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_regular.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  34. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_bold.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  35. <link rel="preload" href="/static/david/css/fonts/triplicate_t3_italic.woff2" as="font" type="font/woff2" media="(prefers-color-scheme: dark)" crossorigin>
  36. <script>
  37. function toggleTheme(themeName) {
  38. document.documentElement.classList.toggle(
  39. 'forced-dark',
  40. themeName === 'dark'
  41. )
  42. document.documentElement.classList.toggle(
  43. 'forced-light',
  44. themeName === 'light'
  45. )
  46. }
  47. const selectedTheme = localStorage.getItem('theme')
  48. if (selectedTheme !== 'undefined') {
  49. toggleTheme(selectedTheme)
  50. }
  51. </script>
  52. <meta name="robots" content="noindex, nofollow">
  53. <meta content="origin-when-cross-origin" name="referrer">
  54. <!-- Canonical URL for SEO purposes -->
  55. <link rel="canonical" href="https://www.lukew.com/ff/entry.asp?2008">
  56. <body class="remarkdown h1-underline h2-underline h3-underline em-underscore hr-center ul-star pre-tick" data-instant-intensity="viewport-all">
  57. <article>
  58. <header>
  59. <h1>Ask LukeW: New Ways into Web Content</h1>
  60. </header>
  61. <nav>
  62. <p class="center">
  63. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  64. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  65. </svg> Accueil</a> •
  66. <a href="https://www.lukew.com/ff/entry.asp?2008" title="Lien vers le contenu original">Source originale</a>
  67. </p>
  68. </nav>
  69. <hr>
  70. <p class="feature">Large language (AI) models allow us to rethink how to build software and design user interfaces. To that end, we made use of these new capabilities to create a different way of interacting with this site at: <a href="https://ask.lukew.com">ask.lukew.com</a></p>
  71. <p>Though quiet recently, this site built up a <a href="https://www.lukew.com/ff/">decent amount</a> of content over the past 27 years. Specifically, there's nearly 2,000 text articles, 375 presentations, 60 videos, and 3 books worth of explorations and explanations about all forms of digital product design from early Web sites to Mobile apps to Augmented Reality experiences.</p>
  72. <p><a href="//static.lukew.com/ask_lukew_data_2x.png"><img src="//static.lukew.com/ask_lukew_data.png" srcset="//static.lukew.com/ask_lukew_data.png, //static.lukew.com/ask_lukew_data_2x.png 2x" alt="2,000 articles, 375 presentations, 57 videos on LukeW's site"></a>
  73. </p>
  74. <p>Anyone interested in these materials, has essentially two options: search or browse. Searching (primarily through Google) gets people to a specific article, presentation, or video when they have a sense of what they're looking for. Browsing (on this site or other sites with links to this one) helps people discover things they might not have been explicitly looking for.</p>
  75. <p>But with over half a million written words, three and a half thousand minutes of video, and thousands of images it's hard to know what's available, to connect related content, and ultimately get the most value out of this site.</p>
  76. <p><a href="//static.lukew.com/ask_lukew_data2_2x.png"><img src="//static.lukew.com/ask_lukew_data2.png" srcset="//static.lukew.com/ask_lukew_data2.png, //static.lukew.com/ask_lukew_data2_2x.png 2x" alt="Search or browse the content on LukeW Ideation and Design"></a>
  77. </p>
  78. <p>Enter <a href="https://www.computer.org/csdl/magazine/co/2022/05/09771130/1DeEYd2FXZm">large-scale AI models for language</a> (LLMs). By making use of these models to perform a variety of language operations, we can re-index the content on this site by concepts using embeddings, and generate new ways to interact with it.</p>
  79. <p>We make use of large-language models to:</p>
  80. <ul>
  81. <li>summarize articles</li>
  82. <li>extract key concepts from articles</li>
  83. <li>create follow-on questions to ask with specific articles</li>
  84. <li>make exploratory questions to expose people to new content</li>
  85. <li>generate answers in response to what people ask</li>
  86. </ul>
  87. <p>This combination of language operations adds up to a very different new way to experience the content on <a href="https://ask.lukew.com">lukew.com</a></p>
  88. <p><a href="//static.lukew.com/ask_lukew_questions_2x.png"><img src="//static.lukew.com/ask_lukew_questions.png" srcset="//static.lukew.com/ask_lukew_questions.png, //static.lukew.com/ask_lukew_questions_2x.png 2x" alt="Suggested questions in the Ask LukeW interface"></a>
  89. </p>
  90. <p><a href="https://ask.lukew.com">Ask LukeW</a> starts off with a series of suggested questions that change each time someone loads the page. This not only helps with the "what should I ask?" problem of empty text fields but is also a compelling way to explore what the site has to offer. Of course, someone can start with their own specific question. But in testing, many folks gravitate to the suggestions first, which helps expose people to more of the breadth and depth of available content.</p>
  91. <p><a href="//static.lukew.com/ask_lukew_answer2_2x.png"><img src="//static.lukew.com/ask_lukew_answer2.png" srcset="//static.lukew.com/ask_lukew_answer2.png, //static.lukew.com/ask_lukew_answer2_2x.png 2x" alt="Generated answers and visual sources in the Ask LukeW interface"></a>
  92. </p>
  93. <p>After someone selects a question or types their own question, we generate an answer using the corpus of information on lukew.com. These results tend to be more opinionated than what a large language model operating solely on a much bigger set of content (like the Web) provides, even with prompt engineering to direct it toward specific kinds of answers (i.e. UI design-focused).</p>
  94. <p><a href="//static.lukew.com/ask_lukew_corpus_2x.png"><img src="//static.lukew.com/ask_lukew_corpus.png" srcset="//static.lukew.com/ask_lukew_corpus.png, //static.lukew.com/ask_lukew_corpus_2x.png 2x" alt="Comparing answers from a fixed corpus to ChatGPT in the Ask LukeW interface"></a>
  95. </p>
  96. <p>The content we use to answer someone's question can come from one or more articles so we give provide visual sources to make this clear. In the current build, we're citing Web pages but PDFs and videos are next. It's also worth noting that we follow-up each answer with additional suggested questions to once again give people a better sense of what they can ask next. No dead ends.</p>
  97. <p><a href="//static.lukew.com/ask_lukew_objects_2x.png"><img src="//static.lukew.com/ask_lukew_objects.png" srcset="//static.lukew.com/ask_lukew_objects.png, //static.lukew.com/ask_lukew_objects_2x.png 2x" alt="Sources object cards from the Ask LukeW interface"></a>
  98. </p>
  99. <p>If someone wants to go deeper into any of the sourced materials, they can select the card and get an article-specific experience. Here we make use of LLM language operations to create a summary, extract related topics and provide suggested questions that the article can answer. People can ask questions of just this document (as indicated by the green article "chip" in the question bar) or go back to site-wide questions by tapping the close (x) icon.</p>
  100. <p><a href="//static.lukew.com/ask_lukew_article_2x.png"><img src="//static.lukew.com/ask_lukew_article.png" srcset="//static.lukew.com/ask_lukew_article.png, //static.lukew.com/ask_lukew_article_2x.png 2x" alt="Article specific features in the Ask LukeW interface"></a>
  101. </p>
  102. <p>As the number of answers builds up, we collapse each one automatically, so people can focus on the current question they've asked. This also makes it easier to scroll through a long conversation and pick out answers from short summaries consisting of the question and the first two lines of its answer.</p>
  103. <p>People can also pin individual question and answer pairs to save them for later and come back to previous conversations in addition to making new ones using the menu bar on the left.</p>
  104. <p><a href="//static.lukew.com/ask_lukew_conversation_2x.png"><img src="//static.lukew.com/ask_lukew_conversation.png" srcset="//static.lukew.com/ask_lukew_conversation.png, //static.lukew.com/ask_lukew_conversation_2x.png 2x" alt="Conversation listing in the Ask LukeW interface"></a>
  105. </p>
  106. <p>While there's a number of features in the <a href="https://ask.lukew.com">Ask LukeW</a> interface, it's mostly a beta. We don't save state from question to question so the kind of ongoing dialog people may expect from <a href="https://openai.com/blog/chatgpt">ChatGPT</a> isn't there yet, pinned answers and saved conversations are only done locally (cookie-based) and as mentioned before, PDFs and videos aren't yet part of the index.</p>
  107. <p>Despite that, it's been interesting to explore how an existing body of content can gain new life using large-language model technology. I've been regularly surprised and interested by questions like:</p>
  108. <ul>
  109. <li>How can progressive enhancement be used in software development?
  110. </li><li>What are the central mental traits that people unconsciously display through the products they buy?</li>
  111. <li>What are the design considerations for touch-based apps for kids?</li>
  112. <li>What is small multiples and how can it help people make sense of large amounts of information quickly and easily?</li>
  113. <li>What is the debate around the utility of usability testing in design?</li>
  114. </ul>
  115. <p>And I wrote all this content! Since that happened across a quarter century, maybe it's not that surprising that I don't remember it all. Anyhow... hope you also enjoy trying out <a href="https://ask.lukew.com">ask.lukew.com</a> and feel free to <a href="https://www.lukew.com/about/">send</a> any ideas or comments over.</p>
  116. <h2>Acknowledgments</h2>
  117. <p>Big thanks to <a href="https://liyangguang.com/">Yangguang Li</a> (front end), <a href="https://twitter.com/swissgrid">Thanh Tran</a> (design), and <a href="https://twitter.com/sampullara">Sam Pullara</a> (back end) in helping pull together this <a href="https://ask.lukew.com">exploration</a>.</p>
  118. </article>
  119. <hr>
  120. <footer>
  121. <p>
  122. <a href="/david/" title="Aller à l’accueil"><svg class="icon icon-home">
  123. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-home"></use>
  124. </svg> Accueil</a> •
  125. <a href="/david/log/" title="Accès au flux RSS"><svg class="icon icon-rss2">
  126. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-rss2"></use>
  127. </svg> Suivre</a> •
  128. <a href="http://larlet.com" title="Go to my English profile" data-instant><svg class="icon icon-user-tie">
  129. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-user-tie"></use>
  130. </svg> Pro</a> •
  131. <a href="mailto:david%40larlet.fr" title="Envoyer un courriel"><svg class="icon icon-mail">
  132. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-mail"></use>
  133. </svg> Email</a> •
  134. <abbr class="nowrap" title="Hébergeur : Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33184162340"><svg class="icon icon-hammer2">
  135. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-hammer2"></use>
  136. </svg> Légal</abbr>
  137. </p>
  138. <template id="theme-selector">
  139. <form>
  140. <fieldset>
  141. <legend><svg class="icon icon-brightness-contrast">
  142. <use xlink:href="/static/david/icons2/symbol-defs-2021-12.svg#icon-brightness-contrast"></use>
  143. </svg> Thème</legend>
  144. <label>
  145. <input type="radio" value="auto" name="chosen-color-scheme" checked> Auto
  146. </label>
  147. <label>
  148. <input type="radio" value="dark" name="chosen-color-scheme"> Foncé
  149. </label>
  150. <label>
  151. <input type="radio" value="light" name="chosen-color-scheme"> Clair
  152. </label>
  153. </fieldset>
  154. </form>
  155. </template>
  156. </footer>
  157. <script src="/static/david/js/instantpage-5.1.0.min.js" type="module"></script>
  158. <script>
  159. function loadThemeForm(templateName) {
  160. const themeSelectorTemplate = document.querySelector(templateName)
  161. const form = themeSelectorTemplate.content.firstElementChild
  162. themeSelectorTemplate.replaceWith(form)
  163. form.addEventListener('change', (e) => {
  164. const chosenColorScheme = e.target.value
  165. localStorage.setItem('theme', chosenColorScheme)
  166. toggleTheme(chosenColorScheme)
  167. })
  168. const selectedTheme = localStorage.getItem('theme')
  169. if (selectedTheme && selectedTheme !== 'undefined') {
  170. form.querySelector(`[value="${selectedTheme}"]`).checked = true
  171. }
  172. }
  173. const prefersColorSchemeDark = '(prefers-color-scheme: dark)'
  174. window.addEventListener('load', () => {
  175. let hasDarkRules = false
  176. for (const styleSheet of Array.from(document.styleSheets)) {
  177. let mediaRules = []
  178. for (const cssRule of styleSheet.cssRules) {
  179. if (cssRule.type !== CSSRule.MEDIA_RULE) {
  180. continue
  181. }
  182. // WARNING: Safari does not have/supports `conditionText`.
  183. if (cssRule.conditionText) {
  184. if (cssRule.conditionText !== prefersColorSchemeDark) {
  185. continue
  186. }
  187. } else {
  188. if (cssRule.cssText.startsWith(prefersColorSchemeDark)) {
  189. continue
  190. }
  191. }
  192. mediaRules = mediaRules.concat(Array.from(cssRule.cssRules))
  193. }
  194. // WARNING: do not try to insert a Rule to a styleSheet you are
  195. // currently iterating on, otherwise the browser will be stuck
  196. // in a infinite loop…
  197. for (const mediaRule of mediaRules) {
  198. styleSheet.insertRule(mediaRule.cssText)
  199. hasDarkRules = true
  200. }
  201. }
  202. if (hasDarkRules) {
  203. loadThemeForm('#theme-selector')
  204. }
  205. })
  206. </script>
  207. </body>
  208. </html>