<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: terence-eden</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/terence-eden.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-07-23T16:00:24+00:00</updated><author><name>Simon Willison</name></author><entry><title>1KB JS Numbers Station</title><link href="https://simonwillison.net/2025/Jul/23/1kb-js-numbers-station/#atom-tag" rel="alternate"/><published>2025-07-23T16:00:24+00:00</published><updated>2025-07-23T16:00:24+00:00</updated><id>https://simonwillison.net/2025/Jul/23/1kb-js-numbers-station/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://shkspr.mobi/blog/2025/07/1kb-js-numbers-station/"&gt;1KB JS Numbers Station&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Terence Eden built &lt;a href="https://js1024.fun/demos/2025/24/bar"&gt;a neat and weird&lt;/a&gt; 1023 byte JavaScript demo that simulates a &lt;a href="https://en.wikipedia.org/wiki/Numbers_station"&gt;numbers station&lt;/a&gt; using the browser &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance"&gt;SpeechSynthesisUtterance&lt;/a&gt;, which I hadn't realized is supported by every modern browser now.&lt;/p&gt;
&lt;p&gt;This inspired me to vibe code up &lt;a href="https://tools.simonwillison.net/speech-synthesis"&gt;this playground interface&lt;/a&gt; for that API &lt;a href="https://claude.ai/share/e4ea91ab-d329-4e3d-aabf-9f5ced9700ed"&gt;using Claude&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of a speech synthesis tester web interface showing: Speech synthesis tester, Text to speak:, Hello, this is a test of the speech synthesis API!, Voice:, Default voice, Rate: 1, Pitch: 1, Volume: 1, Speak, Stop, Ready to speak" src="https://static.simonwillison.net/static/2025/speech-synthesis-tool.jpg" /&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/text-to-speech"&gt;text-to-speech&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tools"&gt;tools&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;a href="https://simonwillison.net/tags/terence-eden"&gt;terence-eden&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-coding"&gt;vibe-coding&lt;/a&gt;&lt;/p&gt;



</summary><category term="javascript"/><category term="text-to-speech"/><category term="tools"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="terence-eden"/><category term="vibe-coding"/></entry><entry><title>Quoting Terence Eden</title><link href="https://simonwillison.net/2025/Jul/17/terence-eden/#atom-tag" rel="alternate"/><published>2025-07-17T14:31:38+00:00</published><updated>2025-07-17T14:31:38+00:00</updated><id>https://simonwillison.net/2025/Jul/17/terence-eden/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://shkspr.mobi/blog/2025/07/weve-got-to-stop-sending-files-to-each-other/"&gt;&lt;p&gt;The modern workforce shouldn't be flinging copies to each other. A copy is outdated the moment it is downloaded. A copy has no protection against illicit reading. A copy can never be revoked.&lt;/p&gt;
&lt;p&gt;Data shouldn't live in a file on a laptop. It shouldn't be a single file on a network share. Data is a &lt;em&gt;living&lt;/em&gt; beast. Data needs to live in a database - not an Excel file. Access should be granted for each according to their needs.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://shkspr.mobi/blog/2025/07/weve-got-to-stop-sending-files-to-each-other/"&gt;Terence Eden&lt;/a&gt;, We've got to stop sending files to each other&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/files"&gt;files&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/terence-eden"&gt;terence-eden&lt;/a&gt;&lt;/p&gt;



</summary><category term="files"/><category term="terence-eden"/></entry><entry><title>You can use text-wrap: balance; on icons</title><link href="https://simonwillison.net/2024/Oct/20/you-can-use-text-wrap-balance-on-icons/#atom-tag" rel="alternate"/><published>2024-10-20T13:23:16+00:00</published><updated>2024-10-20T13:23:16+00:00</updated><id>https://simonwillison.net/2024/Oct/20/you-can-use-text-wrap-balance-on-icons/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://shkspr.mobi/blog/2024/10/you-can-use-text-wrap-balance-on-icons/"&gt;You can use text-wrap: balance; on icons&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Neat CSS experiment from Terence Eden: the new &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/text-wrap#balance"&gt;text-wrap: balance&lt;/a&gt; CSS property is intended to help make text like headlines display without ugly wrapped single orphan words, but Terence points out it can be used for icons too:&lt;/p&gt;
&lt;p&gt;&lt;img alt="A row of icons, without text-wrap balances just one is wrapped on the second line. With the propert they are split into two lines with equal numbers of icons." src="https://static.simonwillison.net/static/2024/icons-text-wrap-balance.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;This inspired me to investigate if the same technique could work for text based navigation elements. I &lt;a href="https://gist.github.com/simonw/53648554917862676ccd12dcf5cc9cab"&gt;used Claude&lt;/a&gt; to build &lt;a href="https://tools.simonwillison.net/text-wrap-balance-nav"&gt;this interactive prototype&lt;/a&gt; of a navigation bar that uses &lt;code&gt;text-wrap: balance&lt;/code&gt; against a list of &lt;code&gt;display: inline&lt;/code&gt; menu list items. It seems to work well!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Animated demo. A navigation menu with 13 items - things like Home and About and Services and a products. These are wrapped on four lines with 4, 4, 4 and then 1 item. Selecting the enable text-wrap: balances checkbox changes that to 3, 4, 3, 3 - a slider also allows the number of visible items to be changed to see the effect that has" src="https://static.simonwillison.net/static/2024/text-wrap-balance.gif" /&gt;&lt;/p&gt;
&lt;p&gt;My first attempt used &lt;code&gt;display: inline-block&lt;/code&gt; which worked in Safari but failed in Firefox.&lt;/p&gt;
&lt;p&gt;Notable limitation from &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/text-wrap#balance"&gt;that MDN article&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Because counting characters and balancing them across multiple lines is computationally expensive, this value is only supported for blocks of text spanning a limited number of lines (six or less for Chromium and ten or less for Firefox)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So it's fine for these navigation concepts but isn't something you can use for body text.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/css"&gt;css&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prototyping"&gt;prototyping&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/anthropic"&gt;anthropic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&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/terence-eden"&gt;terence-eden&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="css"/><category term="prototyping"/><category term="ai-assisted-programming"/><category term="anthropic"/><category term="claude"/><category term="claude-artifacts"/><category term="terence-eden"/><category term="prompt-to-app"/></entry><entry><title>ActivityPub Server in a Single PHP File</title><link href="https://simonwillison.net/2024/Feb/19/activitypub-server-in-a-single-php-file/#atom-tag" rel="alternate"/><published>2024-02-19T00:20:13+00:00</published><updated>2024-02-19T00:20:13+00:00</updated><id>https://simonwillison.net/2024/Feb/19/activitypub-server-in-a-single-php-file/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://shkspr.mobi/blog/2024/02/activitypub-server-in-a-single-file/"&gt;ActivityPub Server in a Single PHP File&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Terence Eden: “Any computer program can be designed to run from a single file if you architect it wrong enough!”&lt;/p&gt;

&lt;p&gt;I love this as a clear, easy-to-follow example of the core implementation details of the ActivityPub protocol—and a reminder that often a single PHP file is all you need.

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


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/php"&gt;php&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mastodon"&gt;mastodon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/activitypub"&gt;activitypub&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/terence-eden"&gt;terence-eden&lt;/a&gt;&lt;/p&gt;



</summary><category term="php"/><category term="mastodon"/><category term="activitypub"/><category term="terence-eden"/></entry><entry><title>11 barriers to coding in the open and how to overcome them</title><link href="https://simonwillison.net/2018/Nov/5/11-barriers-to-coding-in-the-open/#atom-tag" rel="alternate"/><published>2018-11-05T20:53:43+00:00</published><updated>2018-11-05T20:53:43+00:00</updated><id>https://simonwillison.net/2018/Nov/5/11-barriers-to-coding-in-the-open/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://gdstechnology.blog.gov.uk/2018/11/05/11-barriers-to-coding-in-the-open-and-how-to-overcome-them/"&gt;11 barriers to coding in the open and how to overcome them&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“Terence Eden, open standards lead at GDS, also gave a talk about overcoming barriers to coding in the open”—an intriguing recap of that talk revealing exactly how the UK government have been encouraging a culture of coding in the open and going open source first.

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


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ukgovernment"&gt;ukgovernment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gov-uk"&gt;gov-uk&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/terence-eden"&gt;terence-eden&lt;/a&gt;&lt;/p&gt;



</summary><category term="open-source"/><category term="ukgovernment"/><category term="gov-uk"/><category term="terence-eden"/></entry></feed>