<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: usability</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/usability.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-02-27T22:49:32+00:00</updated><author><name>Simon Willison</name></author><entry><title>Please, please, please stop using passkeys for encrypting user data</title><link href="https://simonwillison.net/2026/Feb/27/passkeys/#atom-tag" rel="alternate"/><published>2026-02-27T22:49:32+00:00</published><updated>2026-02-27T22:49:32+00:00</updated><id>https://simonwillison.net/2026/Feb/27/passkeys/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.timcappalli.me/p/passkeys-prf-warning/"&gt;Please, please, please stop using passkeys for encrypting user data&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Because users lose their passkeys &lt;em&gt;all the time&lt;/em&gt;, and may not understand that their data has been irreversibly encrypted using them and can no longer be recovered.&lt;/p&gt;
&lt;p&gt;Tim Cappalli:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To the wider identity industry: &lt;em&gt;please stop promoting and using passkeys to encrypt user data. I’m begging you. Let them be great, phishing-resistant authentication credentials&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://lobste.rs/s/tf8j5h/please_stop_using_passkeys_for"&gt;lobste.rs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/passkeys"&gt;passkeys&lt;/a&gt;&lt;/p&gt;



</summary><category term="security"/><category term="usability"/><category term="passkeys"/></entry><entry><title>It’s hard to justify Tahoe icons</title><link href="https://simonwillison.net/2026/Jan/5/its-hard-to-justify-tahoe-icons/#atom-tag" rel="alternate"/><published>2026-01-05T19:30:24+00:00</published><updated>2026-01-05T19:30:24+00:00</updated><id>https://simonwillison.net/2026/Jan/5/its-hard-to-justify-tahoe-icons/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://tonsky.me/blog/tahoe-icons/"&gt;It’s hard to justify Tahoe icons&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Devastating critique of the new menu icons in macOS Tahoe by Nikita Prokopov, who starts by quoting the 1992 Apple HIG rule to not "overload the user with complex icons" and then provides comprehensive evidence of Tahoe doing exactly that.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In my opinion, Apple took on an impossible task: to add an icon to every menu item. There are just not enough good metaphors to do something like that.&lt;/p&gt;
&lt;p&gt;But even if there were, the premise itself is questionable: if everything has an icon, it doesn’t mean users will find what they are looking for faster.&lt;/p&gt;
&lt;p&gt;And even if the premise was solid, I still wish I could say: they did the best they could, given the goal. But that’s not true either: they did a poor job consistently applying the metaphors and designing the icons themselves.&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=46497712"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/apple"&gt;apple&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;&lt;/p&gt;



</summary><category term="apple"/><category term="design"/><category term="macos"/><category term="usability"/></entry><entry><title>The ChatGPT sharing dialog demonstrates how difficult it is to design privacy preferences</title><link href="https://simonwillison.net/2025/Aug/3/privacy-design/#atom-tag" rel="alternate"/><published>2025-08-03T23:26:15+00:00</published><updated>2025-08-03T23:26:15+00:00</updated><id>https://simonwillison.net/2025/Aug/3/privacy-design/#atom-tag</id><summary type="html">
    &lt;p&gt;ChatGPT just removed their "make this chat discoverable" sharing feature, after it turned out a material volume of users had inadvertantly made their private chats available via Google search.&lt;/p&gt;
&lt;p&gt;Dane Stuckey, CISO for OpenAI, &lt;a href="https://x.com/cryps1s/status/1951041845938499669"&gt;on Twitter&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We just removed a feature from @ChatGPTapp that allowed users to make their conversations discoverable by search engines, such as Google. This was a short-lived experiment to help people discover useful conversations. [...]&lt;/p&gt;
&lt;p&gt;Ultimately we think this feature introduced too many opportunities for folks to accidentally share things they didn't intend to, so we're removing the option.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There's been some media coverage of this issue - here are examples from &lt;a href="https://techcrunch.com/2025/07/31/your-public-chatgpt-queries-are-getting-indexed-by-google-and-other-search-engines/"&gt;TechCrunch&lt;/a&gt;, &lt;a href="https://www.techradar.com/ai-platforms-assistants/chatgpt/openai-pulls-chat-sharing-tool-after-google-search-privacy-scare"&gt;TechRadar&lt;/a&gt;, and &lt;a href="https://www.pcmag.com/news/be-careful-what-you-tell-chatgpt-your-chats-could-show-up-on-google-search"&gt;PCMag&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It turned out users had shared extremely private conversations and made them discoverable by search engines, which meant that various &lt;code&gt;site:chatgpt.com ...&lt;/code&gt; searches were turning up all sorts of potentially embarrassing details.&lt;/p&gt;
&lt;p&gt;Here's what that UI looked like before they removed the option:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/chatgpt-share.jpg" alt="Screenshot of a chat sharing dialog with title &amp;quot;Public link created&amp;quot; and X close button. Text reads &amp;quot;A public link to your chat has been created. Manage previously shared chats at any time via Settings.&amp;quot; Below is an unchecked checkbox labeled &amp;quot;Make this chat discoverable&amp;quot; with subtitle &amp;quot;Allows it to be shown in web searches&amp;quot;. The sharing URL shown is &amp;quot;https://chatgpt.com/share/688b95ef-f986&amp;quot; with a black &amp;quot;Copy link&amp;quot; button. At bottom are three social sharing icons for LinkedIn, Reddit, and X." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;I've seen a bunch of commentary, both on Twitter and &lt;a href="https://news.ycombinator.com/item?id=44778764"&gt;this Hacker News thread&lt;/a&gt;, from people who are baffled that anyone could be confused by such a clear option in the UI.&lt;/p&gt;
&lt;p&gt;I think that confusion is warranted. Let's break it down.&lt;/p&gt;
&lt;p&gt;Here's the microcopy in question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Make this chat discoverable&lt;/strong&gt;&lt;br /&gt;
Allows it to be shown in web searches.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The first problem here is the choice of terminology. "Discoverable" is not a widely understood term - it's insider jargon. "Allows it to be shown in web searches" is better, but still requires a surprisng depth of understanding from users before they can make an informed decision.&lt;/p&gt;
&lt;p&gt;Here's everything a user would need to understand for this to make sense to them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What a URL is, and how it's posssible to create a URL that is semi-public in that it's unguessable by others but can still be read by anyone you share it with. That concept is a pretty tall order just on its own!&lt;/li&gt;
&lt;li&gt;What a web search engine is - that in this case it's intended as a generic term for Google, Bing, DuckDuckGo etc.&lt;/li&gt;
&lt;li&gt;That "web search" here means "those public search engines other people can use" and not something like "the private search feature you use on this website".&lt;/li&gt;
&lt;li&gt;A loose understanding of how search engines work: that they have indexes, and those indexes can selectively include or exclude content.&lt;/li&gt;
&lt;li&gt;That sites like ChatGPT get to control whether or not their content is included in those indexes.&lt;/li&gt;
&lt;li&gt;That the nature of a "secret URL" is that, once shared and made discoverable, anyone with that link (or who finds it through search) can now view the full content of that page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ChatGPT has over a billion users now. That means there is a giant range of levels of technical expertise among those users. We can't assume that everyone understands the above concepts necessary to understand the implications of checking that box.&lt;/p&gt;
&lt;p&gt;And even if they have the pre-requisite knowledge required to understand this, &lt;strong&gt;users don't read&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When people are using an application they are always looking for the absolute shortest path to achieving their goal. Any dialog box or question that appears is something to be skipped over as quickly as possible.&lt;/p&gt;
&lt;p&gt;Sadly, a lot of users may have learned to just say "yes" to any question. This option about making something "discoverable"? Sure, whatever, click the box and keep on going.&lt;/p&gt;
&lt;p&gt;I think there's another factor at play here too: the option itself makes almost no sense.&lt;/p&gt;
&lt;p&gt;How many people looking for a way to share their chats are going to think "and you know what? Stick this in Google too"?&lt;/p&gt;
&lt;p&gt;It's such a tiny fraction of the audience that a logical conclusion, when faced with the above option, could well be that obviously it wouldn't put my chats in Google because who on Earth would ever want that to happen?&lt;/p&gt;
&lt;p&gt;I think OpenAI made the right call disabling this feature. The value it can provide for the tiny set of people who decide to use it is massively outweighed by the potential for less discerning users to cause themselves harm by inadvertently sharing their private conversations with the world.&lt;/p&gt;
&lt;h4 id="meta-ai-does-this-even-worse"&gt;Meta AI does this even worse&lt;/h4&gt;
&lt;p&gt;A much worse example of this anti-pattern is Meta AI's decision to provide a "Post to feed" button in their own Meta AI chat app:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/meta-ai-share.jpg" alt="Sharing dialog has two options: Post to feed - share this conversation to the public feed so anyone can see it and engage. and Share a link: Create a link to share this conversation with specific people." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;I think their microcopy here is &lt;em&gt;top notch&lt;/em&gt; - the text here uses clear language and should be easy for anyone to understand.&lt;/p&gt;
&lt;p&gt;(I took this screenshot today though, so it's possible the text has been recently updated.)&lt;/p&gt;
&lt;p&gt;And yet... Futurism, June 14th: &lt;a href="https://futurism.com/meta-ai-embarassing"&gt;People Don't Realize Meta's AI App Is Publicly Blasting Their Humiliating Secrets to the World&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once again, when your users number in the millions some of them are going to randomly click things without understanding the consequences.&lt;/p&gt;
&lt;p&gt;The Meta AI iPhone app (fun fact: it can talk to you in the voice of Dame Judi Dench or John Cena) shows that public feed on the homepage when you first open the app, presumably to try and help people get over the blank slate "what is this thing even for" problem. They do not appear keen on losing this feature!&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/privacy"&gt;privacy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/meta"&gt;meta&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="design"/><category term="privacy"/><category term="usability"/><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="chatgpt"/><category term="llms"/><category term="meta"/></entry><entry><title>Re-label the "Save" button to be "Publish", to better indicate to users the outcomes of their action</title><link href="https://simonwillison.net/2025/Aug/2/wikipedia-save-button/#atom-tag" rel="alternate"/><published>2025-08-02T19:48:29+00:00</published><updated>2025-08-02T19:48:29+00:00</updated><id>https://simonwillison.net/2025/Aug/2/wikipedia-save-button/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://phabricator.wikimedia.org/T131132"&gt;Re-label the &amp;quot;Save&amp;quot; button to be &amp;quot;Publish&amp;quot;, to better indicate to users the outcomes of their action&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Fascinating Wikipedia usability improvement issue from 2016:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From feedback we get repeatedly as a development team from interviews, user testing and other solicited and unsolicited avenues, and by inspection from the number of edits by newbies not quite aware of the impact of their edits in terms of immediate broadcast and irrevocability, that new users don't necessarily understand what "Save" on the edit page means. [...]&lt;/p&gt;
&lt;p&gt;Even though "user-generated content" sites are a lot more common today than they were when Wikipedia was founded, it is still unusual for most people that their actions will result in immediate, and effectively irrevocable, publication.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A great illustration of the usability impact of micro-copy, even more important when operating at Wikipedia scale.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://x.com/tilmanbayer/status/1951730503671050245"&gt;@tilmanbayer&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wikipedia"&gt;wikipedia&lt;/a&gt;&lt;/p&gt;



</summary><category term="design"/><category term="usability"/><category term="wikipedia"/></entry><entry><title>Note on 18th April 2025</title><link href="https://simonwillison.net/2025/Apr/18/link-to-things/#atom-tag" rel="alternate"/><published>2025-04-18T23:59:01+00:00</published><updated>2025-04-18T23:59:01+00:00</updated><id>https://simonwillison.net/2025/Apr/18/link-to-things/#atom-tag</id><summary type="html">
    &lt;p&gt;It frustrates me when support sites for online services fail to &lt;em&gt;link&lt;/em&gt; to the things they are talking about. Cloudflare's &lt;a href="https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/"&gt;Find zone and account IDs&lt;/a&gt; page for example provides a four step process for finding my account ID that starts at the root of their dashboard, including a screenshot of where I should click.&lt;/p&gt;
&lt;p&gt;&lt;img alt="1. Log in to the Cloudflare dashboard. 2. Select your account and domain. 3. On the Overview page (the landing page for your domain), find the API section. Screenshot includes an Overview panel showing analytics" src="https://static.simonwillison.net/static/2025/cloudflare-docs.jpg" style="max-width: 100%"&gt;&lt;/p&gt;
&lt;p&gt;In Cloudflare's case it's harder to link to the correct dashboard page because the URL differs for different users, but that shouldn't be a show-stopper for getting this to work. Set up &lt;code&gt;dash.cloudflare.com/redirects/find-account-id&lt;/code&gt; and link to that!&lt;/p&gt;
&lt;p&gt;... I just noticed they &lt;em&gt;do&lt;/em&gt; have a mechanism like that which they use elsewhere. On the &lt;a href="https://developers.cloudflare.com/r2/api/tokens/"&gt;R2 authentication page&lt;/a&gt; they link to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://dash.cloudflare.com/?to=/:account/r2/api-tokens
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The "find account ID" flow presumably can't do the same thing because there is no single page displaying that information - it's shown in a sidebar on the page for each of your Cloudflare domains.&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/urls"&gt;urls&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cloudflare"&gt;cloudflare&lt;/a&gt;&lt;/p&gt;



</summary><category term="urls"/><category term="usability"/><category term="cloudflare"/></entry><entry><title>ChatGPT Canvas can make API requests now, but it's complicated</title><link href="https://simonwillison.net/2024/Dec/10/chatgpt-canvas/#atom-tag" rel="alternate"/><published>2024-12-10T21:49:55+00:00</published><updated>2024-12-10T21:49:55+00:00</updated><id>https://simonwillison.net/2024/Dec/10/chatgpt-canvas/#atom-tag</id><summary type="html">
    &lt;p&gt;Today's &lt;a href="https://openai.com/12-days/?day=4"&gt;12 Days of OpenAI&lt;/a&gt; release concerned &lt;a href="https://help.openai.com/en/articles/9930697-what-is-the-canvas-feature-in-chatgpt-and-how-do-i-use-it"&gt;ChatGPT Canvas&lt;/a&gt;, a new ChatGPT feature that enables ChatGPT to pop open a side panel with a shared editor in it where you can collaborate with ChatGPT on editing a document or writing code.&lt;/p&gt;
&lt;p&gt;I'm always excited to see a new form of UI on top of LLMs, and it's great seeing OpenAI stretch out beyond pure chat for this. It's definitely worth playing around with to get a feel for how a collaborative human+LLM interface can work. The feature where you can ask ChatGPT for "comments on my document" and it will attach them Google Docs style is particularly neat.&lt;/p&gt;
&lt;p&gt;I wanted to focus in on one particular aspect of Canvas, because it illustrates a concept I've been talking about for a little while now: the increasing complexity of fully understanding the capabilities of core LLM tools.&lt;/p&gt;
&lt;h4 id="canvas-runs-python-via-pyodide"&gt;Canvas runs Python via Pyodide&lt;/h4&gt;
&lt;p&gt;If a canvas editor contains Python code, ChatGPT adds a new "Run" button at the top of the editor.&lt;/p&gt;
&lt;p&gt;ChatGPT has had the ability to run Python for a long time via the excellent &lt;a href="https://simonwillison.net/tags/code-interpreter/"&gt;Code Interpreter&lt;/a&gt; feature, which executes Python server-side in a tightly locked down Kubernetes container managed by OpenAI.&lt;/p&gt;
&lt;p&gt;The new Canvas run button is &lt;strong&gt;not the same thing&lt;/strong&gt; - it's an entirely new implementation of code execution that runs code directly in your browser using &lt;a href="https://pyodide.org/"&gt;Pyodide&lt;/a&gt; (Python compiled to WebAssembly).&lt;/p&gt;
&lt;p&gt;The first time I tried this button I got the following dialog:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2024/run-python-code.jpg" alt="Run Python code? Python in canvas can make network requests and interact with external systems. Please review your code carefully before proceeding." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;"Python in canvas can make network requests"‽ This is a &lt;em&gt;very new&lt;/em&gt; capability. ChatGPT Code Interpreter has all network access blocked, but apparently ChatGPT Canvas Python does not share that limitation.&lt;/p&gt;
&lt;p&gt;I tested this a little bit and it turns out it can make direct HTTP calls from your browser to anywhere online with compatible CORS headers.&lt;/p&gt;
&lt;p&gt;(Understanding CORS is &lt;a href="https://simonwillison.net/search/?q=cors&amp;amp;sort=date&amp;amp;tag=llms"&gt;a recurring theme&lt;/a&gt; in working with LLMs as a consumer, which I find deeply amusing because it remains a pretty obscure topic even among professional web developers.)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://simonwillison.net/tags/claude-artifacts/"&gt;Claude Artifacts&lt;/a&gt; allow full JavaScript execution in a Canvas-like interface within Claude, but even those are severely restricted in terms of the endpoints they can access. OpenAI have apparently made the opposite decision, throwing everything wide open as far as allowed network request targets go.&lt;/p&gt;
&lt;p&gt;I prompted ChatGPT like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;use python to fetch "https://datasette.io/content.json?sql=select+*+from+stats++limit+10%0D%0A&amp;amp;_shape=array" and then display it nicely - the JSON looks like this:&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[
  {
    "package": "airtable-export",
    "date": "2020-12-14",
    "downloads": 2
  },
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;I often find pasting the first few lines of a larger JSON example into an LLM gives it enough information to guess the rest.&lt;/p&gt;
&lt;p&gt;Here's the result. ChatGPT wrote the code and showed it in a canvas, then I clicked "Run" and had the resulting data displayed in a neat table below:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2024/canvas-python.jpg" alt="Two columns. On the left is my chat with my prompt. On the right Python code, with a table below showing the results of the API call." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;What a neat and interesting thing! I can now get ChatGPT to write me Python code that fetches from external APIs and displays me the results.&lt;/p&gt;
&lt;p&gt;It's not yet as powerful as Claude Artifacts which allows for completely custom HTML+CSS+JavaScript interfaces, but it's also &lt;em&gt;more&lt;/em&gt; powerful than Artifacts because those are not allowed to make outbound HTTP requests at all.&lt;/p&gt;
&lt;h4 id="what-this-all-means"&gt;What this all means&lt;/h4&gt;
&lt;p&gt;With the introduction of Canvas, here are some new points that an expert user of ChatGPT now needs to understand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT can write and then execute code in Python, but there are two different ways it can do that:
&lt;ul&gt;
&lt;li&gt;If run using Code Interpreter it can access files you upload to it and &lt;a href="https://github.com/simonw/scrape-openai-code-interpreter/blob/main/packages.txt"&gt;a collection of built-in libraries&lt;/a&gt; but cannot make API requests.&lt;/li&gt;
&lt;li&gt;If run in a Canvas it uses Pyodide and can access API endpoints, but not files that you upload to it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Code Interpreter cannot &lt;code&gt;pip install&lt;/code&gt; additional packages, though you may be able to &lt;a href="https://til.simonwillison.net/llms/code-interpreter-expansions"&gt;upload them as wheels&lt;/a&gt; and convince it to install them.&lt;/li&gt;
&lt;li&gt;Canvas Python can install extra packages using &lt;a href="https://micropip.pyodide.org/en/stable/project/usage.html"&gt;micropip&lt;/a&gt;, but this will only work for pure Python wheels that are compatible with Pyodide.&lt;/li&gt;
&lt;li&gt;Code interpreter is locked down: it cannot make API requests or communicate with the wider internet at all. If you want it to work on data you need to upload that data to it.&lt;/li&gt;
&lt;li&gt;Canvas Python can fetch data via API requests (directly into your browser), but only from sources that implement an open CORS policy.&lt;/li&gt;
&lt;li&gt;Both Canvas and Code Interpreter remain strictly limited in terms of the custom UI they can offer - but they both have access to the Pandas ecosystem of visualization tools so they can probably show you charts or tables.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="this-is-really-really-confusing"&gt;This is really, really confusing&lt;/h4&gt;
&lt;p&gt;Do you find this all hopelessly confusing? I don't blame you. I'm a professional web developer and a Python engineer of 20+ years and I can just about understand and internalize the above set of rules.&lt;/p&gt;
&lt;p&gt;I don't really have any suggestions for where we go from here. This stuff is &lt;em&gt;hard to use&lt;/em&gt;. The more features and capabilities we pile onto these systems the harder it becomes to obtain true mastery of them and really understand what they can do and how best to put them into practice.&lt;/p&gt;
&lt;p&gt;Maybe this doesn't matter? I don't know anyone with true mastery of Excel - to the point where they could compete in &lt;a href="https://fmworldcup.com/microsoft-excel-world-championship/"&gt;last week's Microsoft Excel World Championship&lt;/a&gt; - and yet plenty of people derive enormous value from Excel despite only scratching the surface of what it can do.&lt;/p&gt;
&lt;p&gt;I do think it's worth remembering this as a general theme though. Chatbots may sound easy to use, but they really aren't - and they're getting harder to use all the time.&lt;/p&gt;
&lt;h4 id="exfiltration"&gt;A new data exfiltration vector&lt;/h4&gt;
&lt;p&gt;Thinking about this a little more, I think the most meaningful potential security impact from this could be opening up a new data exfiltration vector.&lt;/p&gt;
&lt;p&gt;Data exfiltration attacks occur when an attacker tricks someone into pasting malicious instructions into their prompt (often via a &lt;a href="https://simonwillison.net/tags/prompt-injection/"&gt;prompt injection attack&lt;/a&gt;) that cause ChatGPT to gather up any available private information from the current conversation and leak it to that attacker in some way.&lt;/p&gt;
&lt;p&gt;I imagine it may be possible to construct a pretty gnarly attack that convinces ChatGPT to open up a Canvas and then run Python that leaks any gathered private data to the attacker via an API call.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webassembly"&gt;webassembly&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pyodide"&gt;pyodide&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-injection"&gt;prompt-injection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-artifacts"&gt;claude-artifacts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cors"&gt;cors&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-to-app"&gt;prompt-to-app&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="python"/><category term="security"/><category term="usability"/><category term="ai"/><category term="webassembly"/><category term="pyodide"/><category term="openai"/><category term="prompt-injection"/><category term="generative-ai"/><category term="chatgpt"/><category term="llms"/><category term="claude-artifacts"/><category term="cors"/><category term="prompt-to-app"/></entry><entry><title>Quoting David Heinemeier Hansson</title><link href="https://simonwillison.net/2024/Oct/15/david-heinemeier-hansson/#atom-tag" rel="alternate"/><published>2024-10-15T20:46:45+00:00</published><updated>2024-10-15T20:46:45+00:00</updated><id>https://simonwillison.net/2024/Oct/15/david-heinemeier-hansson/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://world.hey.com/dhh/passwords-have-problems-but-passkeys-have-more-95285df9"&gt;&lt;p&gt;The problem with passkeys is that they're essentially a halfway house to a password manager, but tied to a specific platform in ways that aren't obvious to a user at all, and liable to easily leave them unable to access of their accounts. [...]&lt;/p&gt;
&lt;p&gt;Chrome on Windows stores your passkeys in Windows Hello, so if you sign up for a service on Windows, and you then want to access it on iPhone, you're going to be stuck (unless you're so forward thinking as to add a second passkey, somehow, from the iPhone will on the Windows computer!). The passkey lives on the wrong device, if you're away from the computer and want to login, and it's not at all obvious to most users how they might fix that.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://world.hey.com/dhh/passwords-have-problems-but-passkeys-have-more-95285df9"&gt;David Heinemeier Hansson&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/passkeys"&gt;passkeys&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dhh"&gt;dhh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chrome"&gt;chrome&lt;/a&gt;&lt;/p&gt;



</summary><category term="passkeys"/><category term="dhh"/><category term="security"/><category term="usability"/><category term="chrome"/></entry><entry><title>Quoting Erik Bernhardsson</title><link href="https://simonwillison.net/2024/Sep/27/erik-bernhardsson/#atom-tag" rel="alternate"/><published>2024-09-27T14:33:02+00:00</published><updated>2024-09-27T14:33:02+00:00</updated><id>https://simonwillison.net/2024/Sep/27/erik-bernhardsson/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://erikbern.com/2024/09/27/its-hard-to-write-code-for-humans.html"&gt;&lt;p&gt;Consumer products have had growth hackers for many years optimizing every part of the onboarding funnel. Dev tools should do the same. Getting started shouldn't be an afterthought after you built the product. Getting started &lt;em&gt;is&lt;/em&gt; the product!&lt;/p&gt;
&lt;p&gt;And I mean this to the point where I think it's worth restructuring your entire product to enable fast onboarding. Get rid of mandatory config. Make it absurdly easy to set up API tokens. Remove all the friction. Make it possible for users to &lt;em&gt;use your product&lt;/em&gt; on their laptop in a couple of minutes, tops.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://erikbern.com/2024/09/27/its-hard-to-write-code-for-humans.html"&gt;Erik Bernhardsson&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/developers"&gt;developers&lt;/a&gt;&lt;/p&gt;



</summary><category term="usability"/><category term="developers"/></entry><entry><title>ChatGPT in "4o" mode is not running the new features yet</title><link href="https://simonwillison.net/2024/May/15/chatgpt-in-4o-mode/#atom-tag" rel="alternate"/><published>2024-05-15T18:25:07+00:00</published><updated>2024-05-15T18:25:07+00:00</updated><id>https://simonwillison.net/2024/May/15/chatgpt-in-4o-mode/#atom-tag</id><summary type="html">
    &lt;p&gt;Monday's OpenAI &lt;a href="https://openai.com/index/hello-gpt-4o/"&gt;announcement&lt;/a&gt; of their new GPT-4o model included some intriguing new features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creepily good improvements to the ability to both understand and produce voice (Sam Altman simply tweeted &lt;a href="https://twitter.com/sama/status/1790075827666796666"&gt;"her"&lt;/a&gt;), and to be interrupted mid-sentence&lt;/li&gt;
&lt;li&gt;New image output capabilities that appear to leave existing models like DALL-E 3 in the dust - take a look &lt;a href="https://openai.com/index/hello-gpt-4o/#_6NeEuZ7OcMDzk5E1elaK6i"&gt;at the examples&lt;/a&gt;, they seem to have solved consistent character representation AND reliable text output!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They also made the new 4o model available to paying ChatGPT Plus users, on the web and in their apps.&lt;/p&gt;
&lt;p&gt;But, crucially, &lt;strong&gt;those big new features were not part of that release&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update 10th December 2024:&lt;/strong&gt; ChatGPT &lt;a href="https://help.openai.com/en/articles/8400625-voice-mode-faq"&gt;Advanced Voice Mode&lt;/a&gt; has now been available in the mobile apps (and desktop app) for a few months, but advanced image output mode still isn't available yet.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Here's the relevant section from the announcement post:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We recognize that GPT-4o’s audio modalities present a variety of novel risks. Today we are publicly releasing text and image inputs and text outputs. Over the upcoming weeks and months, we’ll be working on the technical infrastructure, usability via post-training, and safety necessary to release the other modalities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is catching out a lot of people. The ChatGPT iPhone app already has image output, and it already has a voice mode. These worked with the previous GPT-4 mode and they still work with the new GPT-4o mode... but they are &lt;em&gt;not using&lt;/em&gt; the new model's capabilities.&lt;/p&gt;
&lt;p&gt;Lots of people are discovering the voice mode for the first time - it's the headphone icon in the bottom right of the interface.&lt;/p&gt;
&lt;p&gt;They try it and it's impressive (it was impressive before) but it's nothing like as good as the voice mode in Monday's demos.&lt;/p&gt;
&lt;p&gt;Honestly, it's not at all surprising that people are confused. They're seeing the "4o" option and, understandably, are assuming that this is the set of features that were announced earlier this week.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2024/gpt-4o.jpg" alt="Screenshot of the ChatGPT iPhone app. An arrow points to the 4o indicator in the title saying GPT-4o - another arrow points to the headphone icon at the bottom saying Not GPT-4o" style="width: 400px; max-width: 100%;" /&gt;&lt;/p&gt;
&lt;h4 id="most-people-dont-distinguish"&gt;Most people don't distinguish models from features&lt;/h4&gt;
&lt;p&gt;Think about what you need to know in order to understand what's going on here:&lt;/p&gt;
&lt;p&gt;GPT-4o is a brand new multi-modal Large Language Model. It can handle text, image and audio input and produce text, image and audio output.&lt;/p&gt;
&lt;p&gt;But... the version of GPT-4o that has been made available so far - both via the API and via the OpenAI apps - is only able to handle text and image input and produce text output. The other features are not yet available outside of OpenAI (and a select group of partners).&lt;/p&gt;
&lt;p&gt;And yet in the apps it can still handle audio input and output and generate images. That's because the app version of the model is wrapped with additional tools.&lt;/p&gt;
&lt;p&gt;The audio input is handled by a separate model called Whisper, which converts speech to text. That text is then fed into the LLM, which generates a text response.&lt;/p&gt;
&lt;p&gt;The response is passed to OpenAI's boringly-named &lt;code&gt;tts-1&lt;/code&gt; (or maybe &lt;code&gt;tts-1-hd&lt;/code&gt;) model (&lt;a href="https://platform.openai.com/docs/models/tts"&gt;described here&lt;/a&gt;), which converts that text to speech.&lt;/p&gt;
&lt;p&gt;While nowhere near as good as the audio in Monday's demo, &lt;code&gt;tts-1&lt;/code&gt; is still a really impressive model. I've been using it via my &lt;a href="https://github.com/simonw/ospeak"&gt;ospeak&lt;/a&gt; CLI tool since it was released back in November.&lt;/p&gt;
&lt;p&gt;As for images? Those are generated using DALL-E 3, through a process where ChatGPT directly prompts that model. I wrote about how that works &lt;a href="https://simonwillison.net/2023/Oct/26/add-a-walrus/"&gt;back in October&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So what's going on with ChatGPT's GPT-4o mode is completely obvious, provided you already understand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPT-4 v.s. GPT-4o&lt;/li&gt;
&lt;li&gt;Whisper&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tts-1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DALL-E 3&lt;/li&gt;
&lt;li&gt;Why OpenAI would demonstrate these features and then release a version of the model that doesn't include them&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'm reminded of the kerfluffle back in March when the Google Gemini image creator was found to &lt;a href="https://www.npr.org/2024/03/18/1239107313/google-races-to-find-a-solution-after-ai-generator-gemini-misses-the-mark"&gt;generate images of Black Nazis&lt;/a&gt;. I saw a whole bunch of people refer to that in conversations about the Google Gemini Pro 1.5 LLM, released at the same time, despite the quality of that model being entirely unrelated to Google's policy decisions about how one of the interfaces to that model should make use of the image creator tool.&lt;/p&gt;
&lt;h4 id="what-can-we-learn"&gt;What can we learn from this?&lt;/h4&gt;
&lt;p&gt;If you're fully immersed in this world, it's easy to lose track of how incredibly complicated these systems have become. The amount you have to know in order to even understand what that "4o" mode in the ChatGPT app does is very easy to underestimate.&lt;/p&gt;
&lt;p&gt;Fundamentally these are challenges in user experience design. You can't just write documentation about them, because no-one reads documentation.&lt;/p&gt;
&lt;p&gt;A good starting here is to acknowledge the problem. LLM systems are extremely difficult to understand and use. We need to design the tools we build on top of them accordingly.&lt;/p&gt;
&lt;h4 id="workaround"&gt;Update: a UI workaround&lt;/h4&gt;
&lt;p&gt;On May 16th around 1PM PT OpenAI released a new iPhone app update which adds &lt;a href="https://twitter.com/simonw/status/1791216044230447116"&gt;the following warning message&lt;/a&gt; the first time you try to access that headphones icon:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;New Voice Mode coming soon&lt;/p&gt;

&lt;p&gt;We plan to launch a new Voice Mode with new GPT-4o capabilities in an alpha within ChatGPT Plus in the coming weeks. We'll let you know when you have access.&lt;/p&gt;
&lt;/blockquote&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/text-to-speech"&gt;text-to-speech&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="text-to-speech"/><category term="usability"/><category term="ux"/><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="chatgpt"/><category term="llms"/></entry><entry><title>How do you accidentally run for President of Iceland?</title><link href="https://simonwillison.net/2024/Apr/29/accidentally-run-for-president-of-iceland/#atom-tag" rel="alternate"/><published>2024-04-29T15:31:13+00:00</published><updated>2024-04-29T15:31:13+00:00</updated><id>https://simonwillison.net/2024/Apr/29/accidentally-run-for-president-of-iceland/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://uxdesign.cc/how-do-you-accidentally-run-for-president-of-iceland-0d71a4785a1e"&gt;How do you accidentally run for President of Iceland?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Anna Andersen writes about a spectacular user interface design case-study from this year's Icelandic presidential election.&lt;/p&gt;
&lt;p&gt;Running for President requires 1,500 endorsements. This year, those endorsements can be filed online through a government website.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://island.is/forsetaframbod"&gt;page for collecting endorsements&lt;/a&gt; originally had two sections - one for registering to collect endorsements, and another to submit your endorsement. The login link for the first came higher on the page, and at least 11 people ended up accidentally running for President!

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://toot.cafe/@baldur/112355190615093453"&gt;Baldur Bjarnason&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;&lt;/p&gt;



</summary><category term="usability"/><category term="ux"/></entry><entry><title>Quoting Erika Hall</title><link href="https://simonwillison.net/2024/Apr/24/erika-hall/#atom-tag" rel="alternate"/><published>2024-04-24T00:31:27+00:00</published><updated>2024-04-24T00:31:27+00:00</updated><id>https://simonwillison.net/2024/Apr/24/erika-hall/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.muledesign.com/blog/on-surveys"&gt;&lt;p&gt;A bad survey won’t tell you it’s bad. It’s actually really hard to find out that a bad survey is bad — or to tell whether you have written a good or bad set of questions. Bad code will have bugs. A bad interface design will fail a usability test. It’s possible to tell whether you are having a bad user interview right away. Feedback from a bad survey can only come in the form of a second source of information contradicting your analysis of the survey results.&lt;/p&gt;
&lt;p&gt;Most seductively, surveys yield responses that are easy to count and counting things feels so certain and objective and truthful.&lt;/p&gt;
&lt;p&gt;Even if you are counting lies.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.muledesign.com/blog/on-surveys"&gt;Erika Hall&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/surveys"&gt;surveys&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;&lt;/p&gt;



</summary><category term="surveys"/><category term="usability"/><category term="ux"/></entry><entry><title>Quoting David Pierce</title><link href="https://simonwillison.net/2024/Apr/12/david-pierce/#atom-tag" rel="alternate"/><published>2024-04-12T12:39:48+00:00</published><updated>2024-04-12T12:39:48+00:00</updated><id>https://simonwillison.net/2024/Apr/12/david-pierce/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.theverge.com/24126502/humane-ai-pin-review"&gt;&lt;p&gt;The language issues are indicative of the bigger problem facing the AI Pin, ChatGPT, and frankly, every other AI product out there: you can’t see how it works, so it’s impossible to figure out how to use it. [...] our phones are constant feedback machines — colored buttons telling us what to tap, instant activity every time we touch or pinch or scroll. You can see your options and what happens when you pick one. With AI, you don’t get any of that. Using the AI Pin feels like wishing on a star: you just close your eyes and hope for the best. Most of the time, nothing happens.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.theverge.com/24126502/humane-ai-pin-review"&gt;David Pierce&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="usability"/><category term="ux"/></entry><entry><title>The Articulation Barrier: Prompt-Driven AI UX Hurts Usability</title><link href="https://simonwillison.net/2024/Jan/27/the-articulation-barrier/#atom-tag" rel="alternate"/><published>2024-01-27T15:49:02+00:00</published><updated>2024-01-27T15:49:02+00:00</updated><id>https://simonwillison.net/2024/Jan/27/the-articulation-barrier/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.uxtigers.com/post/ai-articulation-barrier"&gt;The Articulation Barrier: Prompt-Driven AI UX Hurts Usability&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jakob Nielsen: “Generative AI systems like ChatGPT use prose prompts for intent-based outcomes, requiring users to be articulate in writing prose, which is a challenge for half of the population in rich countries.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jakob-nielsen"&gt;jakob-nielsen&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;



</summary><category term="jakob-nielsen"/><category term="usability"/><category term="ai"/><category term="generative-ai"/><category term="llms"/></entry><entry><title>Quoting Steven Levy</title><link href="https://simonwillison.net/2024/Jan/27/steven-levy-in-1984/#atom-tag" rel="alternate"/><published>2024-01-27T01:33:56+00:00</published><updated>2024-01-27T01:33:56+00:00</updated><id>https://simonwillison.net/2024/Jan/27/steven-levy-in-1984/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www.rollingstone.com/culture/culture-news/the-birth-of-the-mac-rolling-stones-1984-feature-on-steve-jobs-and-his-whiz-kids-243516/"&gt;&lt;p&gt;If you have had any prior experience with personal computers, what you might expect to see is some sort of opaque code, called a “prompt,” consisting of phosphorescent green or white letters on a murky background. What you see with Macintosh is the Finder. On a pleasant, light background (you can later change the background to any of a number of patterns, if you like), little pictures called “icons” appear, representing choices available to you.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www.rollingstone.com/culture/culture-news/the-birth-of-the-mac-rolling-stones-1984-feature-on-steve-jobs-and-his-whiz-kids-243516/"&gt;Steven Levy&lt;/a&gt;, in 1984&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mac"&gt;mac&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;



</summary><category term="mac"/><category term="usability"/><category term="llms"/></entry><entry><title>The Eight Golden Rules of Interface Design</title><link href="https://simonwillison.net/2024/Jan/9/the-eight-golden-rules-of-interface-design/#atom-tag" rel="alternate"/><published>2024-01-09T21:37:20+00:00</published><updated>2024-01-09T21:37:20+00:00</updated><id>https://simonwillison.net/2024/Jan/9/the-eight-golden-rules-of-interface-design/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.cs.umd.edu/~ben/goldenrules.html"&gt;The Eight Golden Rules of Interface Design&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
By HCI researcher Ben Shneiderman. I particularly like number 4, “Design dialogs to yield closure”, which encourages feedback at the completion of a group of actions that “gives users the satisfaction of accomplishment, a sense of relief.”

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=38916663"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;&lt;/p&gt;



</summary><category term="usability"/><category term="ux"/></entry><entry><title>The 6 Types of Conversations with Generative AI</title><link href="https://simonwillison.net/2023/Nov/23/6-types-of-conversations-with-generative-ai/#atom-tag" rel="alternate"/><published>2023-11-23T17:37:04+00:00</published><updated>2023-11-23T17:37:04+00:00</updated><id>https://simonwillison.net/2023/Nov/23/6-types-of-conversations-with-generative-ai/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.nngroup.com/articles/AI-conversation-types/"&gt;The 6 Types of Conversations with Generative AI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I’ve hoping to see more user research on how users interact with LLMs for a while. Here’s a study from Nielsen Norman Group, who conducted a 2-week diary study involving 18 participants, then interviewed 14 of them.&lt;/p&gt;

&lt;p&gt;They identified six categories of conversation, and made some resulting design recommendations.&lt;/p&gt;

&lt;p&gt;A key observation is that “search style” queries (just a few keywords) often indicate users who are new to LLMs, and should be identified as a sign that the user needs more inline education on how to best harness the tool.&lt;/p&gt;

&lt;p&gt;Suggested follow-up prompts are valuable for most of the types of conversation identified.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/userresearch"&gt;userresearch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;



</summary><category term="usability"/><category term="ux"/><category term="userresearch"/><category term="ai"/><category term="generative-ai"/><category term="llms"/></entry><entry><title>My User Experience Porting Off setup.py</title><link href="https://simonwillison.net/2023/Oct/31/my-user-experience-porting-off-setuppy/#atom-tag" rel="alternate"/><published>2023-10-31T19:57:19+00:00</published><updated>2023-10-31T19:57:19+00:00</updated><id>https://simonwillison.net/2023/Oct/31/my-user-experience-porting-off-setuppy/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://gregoryszorc.com/blog/2023/10/30/my-user-experience-porting-off-setup.py/"&gt;My User Experience Porting Off setup.py&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
PyOxidizer maintainer Gregory Szorc provides a detailed account of his experience trying to figure out how to switch from setup.py to pyproject.toml for his zstandard Python package.&lt;/p&gt;

&lt;p&gt;This kind of detailed usability feedback is incredibly valuable for project maintainers, especially when the user encountered this many different frustrations along the way. It’s like the written version of a detailed usability testing session.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://discuss.python.org/t/user-experience-with-porting-off-setup-py/37502"&gt;discuss.python.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/packaging"&gt;packaging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;&lt;/p&gt;



</summary><category term="packaging"/><category term="python"/><category term="usability"/></entry><entry><title>The Magic Interview Question</title><link href="https://simonwillison.net/2022/Jun/28/the-magic-interview-question/#atom-tag" rel="alternate"/><published>2022-06-28T14:26:53+00:00</published><updated>2022-06-28T14:26:53+00:00</updated><id>https://simonwillison.net/2022/Jun/28/the-magic-interview-question/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://jeffgothelf.com/blog/the-magic-interview-question/"&gt;The Magic Interview Question&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jeff Gothelf explains why “Tell me about the last time you [did something]” is the most valuable question you can ask when interviewing a user or potential user.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/andybudd/status/1541787392729808897"&gt;@andybudd&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;&lt;/p&gt;



</summary><category term="usability"/></entry><entry><title>File not found: A generation that grew up with Google is forcing professors to rethink their lesson plans</title><link href="https://simonwillison.net/2021/Sep/23/file-not-found/#atom-tag" rel="alternate"/><published>2021-09-23T22:49:30+00:00</published><updated>2021-09-23T22:49:30+00:00</updated><id>https://simonwillison.net/2021/Sep/23/file-not-found/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.theverge.com/22684730/students-file-folder-directory-structure-education-gen-z"&gt;File not found: A generation that grew up with Google is forcing professors to rethink their lesson plans&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is fascinating: as-of 2017 university instructors have been increasingly encountering students who have absolutely no idea how files and folders on a computer work. The new generation has a completely different mental model of how applications work, where everything is found using search and data mostly lives inside the application that you use to manipulate it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Gradually, Garland came to the same realization that many of her fellow educators have reached in the past four years: the concept of file folders and directories, essential to previous generations’ understanding of computers, is gibberish to many modern students.&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/simonw/status/1440725351949213700"&gt;@dancow&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/teaching"&gt;teaching&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/computer-literacy"&gt;computer-literacy&lt;/a&gt;&lt;/p&gt;



</summary><category term="teaching"/><category term="usability"/><category term="computer-literacy"/></entry><entry><title>Quoting Command Line Interface Guidelines</title><link href="https://simonwillison.net/2020/Dec/4/command-line-interface-guidelines/#atom-tag" rel="alternate"/><published>2020-12-04T20:48:03+00:00</published><updated>2020-12-04T20:48:03+00:00</updated><id>https://simonwillison.net/2020/Dec/4/command-line-interface-guidelines/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://clig.dev/#ease-of-discovery"&gt;&lt;p&gt;Discoverable CLIs have comprehensive help texts, provide lots of examples, suggest what command to run next, suggest what to do when there is an error. There are lots of ideas that can be stolen from GUIs to make CLIs easier to learn and use, even for power users.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://clig.dev/#ease-of-discovery"&gt;Command Line Interface Guidelines&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cli"&gt;cli&lt;/a&gt;&lt;/p&gt;



</summary><category term="usability"/><category term="cli"/></entry><entry><title>Command Line Interface Guidelines</title><link href="https://simonwillison.net/2020/Dec/4/command-line-interface-guidelines/#atom-tag" rel="alternate"/><published>2020-12-04T20:44:58+00:00</published><updated>2020-12-04T20:44:58+00:00</updated><id>https://simonwillison.net/2020/Dec/4/command-line-interface-guidelines/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://clig.dev/"&gt;Command Line Interface Guidelines&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Aanand Prasad, Ben Firshman, Carl Tashian and Eva Parish provide the missing manual for designing CLI tools in 2020. Deeply researched and clearly presented—I picked up a bunch of useful tips and ideas from reading this, and I’m looking forward to applying them to my own CLI projects.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/bfirsh/status/1334902269758693376"&gt;bfirsh&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cli"&gt;cli&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;&lt;/p&gt;



</summary><category term="cli"/><category term="design"/><category term="usability"/></entry><entry><title>The Distribution of Users’ Computer Skills: Worse Than You Think</title><link href="https://simonwillison.net/2019/Sep/23/computer-skills/#atom-tag" rel="alternate"/><published>2019-09-23T14:49:31+00:00</published><updated>2019-09-23T14:49:31+00:00</updated><id>https://simonwillison.net/2019/Sep/23/computer-skills/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.nngroup.com/articles/computer-skill-levels/"&gt;The Distribution of Users’ Computer Skills: Worse Than You Think&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Research from 2016: “Across 33 rich countries, only 5% of the population has high computer-related abilities, and only a third of people can complete medium-complexity tasks”

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=21037674"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jakob-nielsen"&gt;jakob-nielsen&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;&lt;/p&gt;



</summary><category term="jakob-nielsen"/><category term="usability"/></entry><entry><title>Do I need to change something on my LIVE website to do Remote usability testing? Am I needed to create a duplicate copy of my website?</title><link href="https://simonwillison.net/2013/Jul/29/do-i-need-to/#atom-tag" rel="alternate"/><published>2013-07-29T18:31:00+00:00</published><updated>2013-07-29T18:31:00+00:00</updated><id>https://simonwillison.net/2013/Jul/29/do-i-need-to/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Do-I-need-to-change-something-on-my-LIVE-website-to-do-Remote-usability-testing-Am-I-needed-to-create-a-duplicate-copy-of-my-website/answer/Simon-Willison"&gt;Do I need to change something on my LIVE website to do Remote usability testing? Am I needed to create a duplicate copy of my website?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You should be able to run a working copy (potentially with fake data or a subset of your production data) on your laptop, for development purposes. You can use the same setup for usability testing new features.&lt;/p&gt;

&lt;p&gt;If you or your team can't do this I'd suggest fixing that as soon as possible. Not having an effective development environment is a huge productivity disadvantage.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/userresearch"&gt;userresearch&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="usability"/><category term="web-development"/><category term="quora"/><category term="userresearch"/></entry><entry><title>What activities, games or examples have you used to persuade developers that they are different from 'real' users?</title><link href="https://simonwillison.net/2012/Feb/22/what-activities-games-or/#atom-tag" rel="alternate"/><published>2012-02-22T13:52:00+00:00</published><updated>2012-02-22T13:52:00+00:00</updated><id>https://simonwillison.net/2012/Feb/22/what-activities-games-or/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-activities-games-or-examples-have-you-used-to-persuade-developers-that-they-are-different-from-real-users/answer/Simon-Willison"&gt;What activities, games or examples have you used to persuade developers that they are different from &amp;#39;real&amp;#39; users?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I doubt there's anything as effective as getting them to watch a well-run usability test - either a video, a fancy one-way glass setup or just having them quietly observe a zero-budget testing session in a coffee shop.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ui"&gt;ui&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/userresearch"&gt;userresearch&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ui"/><category term="usability"/><category term="quora"/><category term="ux"/><category term="userresearch"/></entry><entry><title>Why does Wolfram|Alpha present all search results as pictures rather than text?</title><link href="https://simonwillison.net/2011/Dec/25/why-does-wolframalpha-present/#atom-tag" rel="alternate"/><published>2011-12-25T16:50:00+00:00</published><updated>2011-12-25T16:50:00+00:00</updated><id>https://simonwillison.net/2011/Dec/25/why-does-wolframalpha-present/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Why-does-Wolfram-Alpha-present-all-search-results-as-pictures-rather-than-text/answer/Simon-Willison"&gt;Why does Wolfram|Alpha present all search results as pictures rather than text?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Wolfram Alpha is essentially a web interface to Mathematica (plus a huge corpus of structured data). Mathematica has been around for decades, and has an extremely sophisticated visualisation engine (try typing "sin(x)/cos(x)" in to Wolfram Alpha and see what happens). It's also very good at rendering mathematical formulae that would be very hard to represent in plain HTML (without using MathML, which isn't supported by IE).&lt;/p&gt;

&lt;p&gt;Since a good proportion of Alpha's results are going to be rendered as images generated by Mathematica, I imagine the engineering team decided to use images for everything (even plain text answers) because they wanted the typefaces to be consistently presented.&lt;/p&gt;

&lt;p&gt;You can read more about how Alpha uses Mathematica here:&lt;/p&gt;

&lt;span&gt;&lt;a href="http://blog.wolframalpha.com/2009/05/01/the-secret-behind-the-computational-engine-in-wolframalpha/"&gt;http://blog.wolframalpha.com/200...&lt;/a&gt;&lt;/span&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/search"&gt;search&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="search"/><category term="usability"/><category term="quora"/></entry><entry><title>Instapaper requiring email and passwords for new accounts</title><link href="https://simonwillison.net/2010/Dec/15/instapaper/#atom-tag" rel="alternate"/><published>2010-12-15T20:35:00+00:00</published><updated>2010-12-15T20:35:00+00:00</updated><id>https://simonwillison.net/2010/Dec/15/instapaper/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.instapaper.com/post/2318776738"&gt;Instapaper requiring email and passwords for new accounts&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Instapaper are changing from their novel “enter a username or email address, only enter a password if you really want one” registration scheme to a more traditional email and password required model. Messing with registration forms is a risky business—in this case, the non-obvious support issues that resulted were a net negative.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/forms"&gt;forms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/instapaper"&gt;instapaper&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/registration"&gt;registration&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="forms"/><category term="instapaper"/><category term="registration"/><category term="usability"/><category term="recovered"/></entry><entry><title>To what extent is it still valid to assume that your web app users are stupid?</title><link href="https://simonwillison.net/2010/Oct/13/to-what-extent-is/#atom-tag" rel="alternate"/><published>2010-10-13T12:58:00+00:00</published><updated>2010-10-13T12:58:00+00:00</updated><id>https://simonwillison.net/2010/Oct/13/to-what-extent-is/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/To-what-extent-is-it-still-valid-to-assume-that-your-web-app-users-are-stupid/answer/Simon-Willison"&gt;To what extent is it still valid to assume that your web app users are stupid?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;They're not stupid, but they're probably WAY less web literate than you might expect - unlike you, they haven't spent their entire career learning how the web works. See the famous "What is a browser?" video the Google Chrome team released: 
&lt;iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/o4MwTvtyrUQ" frameborder="0" allowfullscreen="allowfullscreen"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ui"&gt;ui&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ui"/><category term="usability"/><category term="quora"/><category term="ux"/></entry><entry><title>Dark Patterns: Forced Continuity example, Audible.com</title><link href="https://simonwillison.net/2010/Oct/12/audible/#atom-tag" rel="alternate"/><published>2010-10-12T10:55:00+00:00</published><updated>2010-10-12T10:55:00+00:00</updated><id>https://simonwillison.net/2010/Oct/12/audible/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://wiki.darkpatterns.org/wiki/Forced_Continuity#Example:_audible.com"&gt;Dark Patterns: Forced Continuity example, Audible.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Dark Patterns are user interfaces that are designed to trick people. I just submitted Audible.com for their habit of signing up users for a $7.49 “gold membership” without making it clear on the checkout screens that this is a recurring monthly charge, not a one-off payment.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/audible"&gt;audible&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/darkpatterns"&gt;darkpatterns&lt;/a&gt;&lt;/p&gt;



</summary><category term="usability"/><category term="ux"/><category term="recovered"/><category term="audible"/><category term="darkpatterns"/></entry><entry><title>Comet (long polling) for all browsers using ScriptCommunicator</title><link href="https://simonwillison.net/2010/Feb/3/scriptcommunicator/#atom-tag" rel="alternate"/><published>2010-02-03T00:37:34+00:00</published><updated>2010-02-03T00:37:34+00:00</updated><id>https://simonwillison.net/2010/Feb/3/scriptcommunicator/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://amix.dk/blog/post/19489#ScriptCommunicator-implementing-comet-long-polling-for-all-browse"&gt;Comet (long polling) for all browsers using ScriptCommunicator&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
More Comet from the Plurk team: 80 lines of dependency free JavaScript implementing long polling using script tags (hence working cross-domain) across IE6+, Firefox, WebKit and Opera. The clever bit is the code to detect loading errors. It doesn’t try to fix the infinite loading indicator problem—is that still a cromulent usability concern?


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/long-polling"&gt;long-polling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/plurk"&gt;plurk&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;&lt;/p&gt;



</summary><category term="comet"/><category term="javascript"/><category term="long-polling"/><category term="plurk"/><category term="usability"/></entry><entry><title>The making of the NYT's Netflix graphic</title><link href="https://simonwillison.net/2010/Jan/25/nyt/#atom-tag" rel="alternate"/><published>2010-01-25T13:11:50+00:00</published><updated>2010-01-25T13:11:50+00:00</updated><id>https://simonwillison.net/2010/Jan/25/nyt/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.snd.org/2010/01/nyt-netflix-graphic/"&gt;The making of the NYT&amp;#x27;s Netflix graphic&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A database dump from Netflix, some clever hackery in ArcView GIS, hpricot to scrape Metacritic and a lot of careful thought about the UI for navigating the data.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/arcview"&gt;arcview&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geospatial"&gt;geospatial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hpricot"&gt;hpricot&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/infographics"&gt;infographics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/metacritic"&gt;metacritic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/netflix"&gt;netflix&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/new-york-times"&gt;new-york-times&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ui"&gt;ui&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/visualisation"&gt;visualisation&lt;/a&gt;&lt;/p&gt;



</summary><category term="arcview"/><category term="design"/><category term="geospatial"/><category term="hpricot"/><category term="infographics"/><category term="metacritic"/><category term="netflix"/><category term="new-york-times"/><category term="ui"/><category term="usability"/><category term="visualisation"/></entry></feed>