<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: stuart-langridge</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/stuart-langridge.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2024-01-14T22:56:08+00:00</updated><author><name>Simon Willison</name></author><entry><title>Making a Discord bot with PHP</title><link href="https://simonwillison.net/2024/Jan/14/making-a-discord-bot-with-php/#atom-tag" rel="alternate"/><published>2024-01-14T22:56:08+00:00</published><updated>2024-01-14T22:56:08+00:00</updated><id>https://simonwillison.net/2024/Jan/14/making-a-discord-bot-with-php/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.kryogenix.org/days/2024/01/14/making-a-discord-bot-with-php/"&gt;Making a Discord bot with PHP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Building bots for Discord used to require a long-running process that stayed connected, but a more recent change introduced slash commands via webhooks, making it much easier to write a bot that is backed by a simple request/response HTTP endpoint. Stuart Langridge explores how to build these in PHP here, but the same pattern in Python should be quite straight-forward.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://mastodon.social/@sil/111756707673740628"&gt;@sil&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/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webhooks"&gt;webhooks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/discord"&gt;discord&lt;/a&gt;&lt;/p&gt;



</summary><category term="php"/><category term="stuart-langridge"/><category term="webhooks"/><category term="discord"/></entry><entry><title>Don't Read Off The Screen</title><link href="https://simonwillison.net/2022/Nov/4/dont-read-off-the-screen/#atom-tag" rel="alternate"/><published>2022-11-04T16:02:37+00:00</published><updated>2022-11-04T16:02:37+00:00</updated><id>https://simonwillison.net/2022/Nov/4/dont-read-off-the-screen/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.kryogenix.org/days/2022/10/18/don-t-read-off-the-screen/"&gt;Don&amp;#x27;t Read Off The Screen&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stuart Langridge provides a fantastic set of public speaking tips in a five minute lightning talk remix of Sunscreen. Watch with sound.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://indieweb.social/@Simonscarfe/109285968437978776"&gt;@Simonscarfe&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/speaking"&gt;speaking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;



</summary><category term="speaking"/><category term="stuart-langridge"/></entry><entry><title>Farmbound, or how I built an app in 2022</title><link href="https://simonwillison.net/2022/Aug/31/farmbound/#atom-tag" rel="alternate"/><published>2022-08-31T23:23:54+00:00</published><updated>2022-08-31T23:23:54+00:00</updated><id>https://simonwillison.net/2022/Aug/31/farmbound/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.kryogenix.org/days/2022/08/31/farmbound-or-how-i-built-an-app-in-2022/"&gt;Farmbound, or how I built an app in 2022&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stuart Langridge describes the architecture and decision process behind his new mobile web game, Farmbound.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web"&gt;web&lt;/a&gt;&lt;/p&gt;



</summary><category term="stuart-langridge"/><category term="web"/></entry><entry><title>Quoting Stuart Langridge</title><link href="https://simonwillison.net/2018/Feb/1/stuart-langridge/#atom-tag" rel="alternate"/><published>2018-02-01T14:03:08+00:00</published><updated>2018-02-01T14:03:08+00:00</updated><id>https://simonwillison.net/2018/Feb/1/stuart-langridge/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://kryogenix.org/code/privacy-could-be-the-next-big-thing-hackference/"&gt;&lt;p&gt;What we need to do is come up with a way to help people understand that there are ways to never be lost again, and to listen to any music you want, and to video chat with someone on the other side of the world, without them having to feel disquieted about it. That it's not OK that you're made to feel weirded out. That it's possible for there to be alternatives. That having to feel someone rooting around in your life is not a price you should have to pay.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://kryogenix.org/code/privacy-could-be-the-next-big-thing-hackference/"&gt;Stuart Langridge&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/privacy"&gt;privacy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;



</summary><category term="privacy"/><category term="stuart-langridge"/></entry><entry><title>Desktop Couch initial code</title><link href="https://simonwillison.net/2009/Jul/9/desktop/#atom-tag" rel="alternate"/><published>2009-07-09T11:34:19+00:00</published><updated>2009-07-09T11:34:19+00:00</updated><id>https://simonwillison.net/2009/Jul/9/desktop/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/days/2009/07/09/desktop-couch-initial-code"&gt;Desktop Couch initial code&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
More from Stuart Langridge on the project to make CouchDB available as a desktop service, providing free synchronisation between machines and a way for different applications to interrogate each other’s structured data.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/desktop"&gt;desktop&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/synchronisation"&gt;synchronisation&lt;/a&gt;&lt;/p&gt;



</summary><category term="couchdb"/><category term="desktop"/><category term="stuart-langridge"/><category term="synchronisation"/></entry><entry><title>It's a purple world</title><link href="https://simonwillison.net/2008/Nov/6/purple/#atom-tag" rel="alternate"/><published>2008-11-06T20:26:33+00:00</published><updated>2008-11-06T20:26:33+00:00</updated><id>https://simonwillison.net/2008/Nov/6/purple/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/days/2008/11/05/its-a-purple-world"&gt;It&amp;#x27;s a purple world&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stuart Langridge made a purplish map of the US election results, using JSON data from Google and an SVG map of the US from Wikipedia.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/svg"&gt;svg&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uselection"&gt;uselection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wikipedia"&gt;wikipedia&lt;/a&gt;&lt;/p&gt;



</summary><category term="stuart-langridge"/><category term="svg"/><category term="uselection"/><category term="wikipedia"/></entry><entry><title>UnicodeDictWriter - write unicode strings out to Excel compatible CSV files using Python</title><link href="https://simonwillison.net/2008/Aug/20/excel/#atom-tag" rel="alternate"/><published>2008-08-20T12:19:59+00:00</published><updated>2008-08-20T12:19:59+00:00</updated><id>https://simonwillison.net/2008/Aug/20/excel/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.djangosnippets.org/snippets/993/"&gt;UnicodeDictWriter - write unicode strings out to Excel compatible CSV files using Python&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stuart Langridge and I spent quite a while this morning battling with Excel. The magic combination for storing unicode text in a CSV file such that Excel correctly reads it is UTF-16, a byte order mark and tab delimiters rather than commas.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/byteordermark"&gt;byteordermark&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/csv"&gt;csv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/excel"&gt;excel&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/i18n"&gt;i18n&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unicode"&gt;unicode&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unicodedictwriter"&gt;unicodedictwriter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/utf16"&gt;utf16&lt;/a&gt;&lt;/p&gt;



</summary><category term="byteordermark"/><category term="csv"/><category term="excel"/><category term="i18n"/><category term="python"/><category term="stuart-langridge"/><category term="unicode"/><category term="unicodedictwriter"/><category term="utf16"/></entry><entry><title>The end of LugRadio</title><link href="https://simonwillison.net/2008/Jun/30/end/#atom-tag" rel="alternate"/><published>2008-06-30T14:03:04+00:00</published><updated>2008-06-30T14:03:04+00:00</updated><id>https://simonwillison.net/2008/Jun/30/end/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/days/2008/06/30/the-end-of-lugradio"&gt;The end of LugRadio&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Wow. LugRadio was a podcast before the term podcast had even been coined. It will be sorely missed.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/lugradio"&gt;lugradio&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/podcasts"&gt;podcasts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;



</summary><category term="lugradio"/><category term="podcasts"/><category term="stuart-langridge"/></entry><entry><title>Negative numbers in the Google Chart API</title><link href="https://simonwillison.net/2007/Dec/8/negative/#atom-tag" rel="alternate"/><published>2007-12-08T09:03:12+00:00</published><updated>2007-12-08T09:03:12+00:00</updated><id>https://simonwillison.net/2007/Dec/8/negative/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/days/2007/12/08/negative-numbers-in-the-google-chart-api"&gt;Negative numbers in the Google Chart API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stuart has some ingenious tricks for showing negative values on Google Charts, based on transforming the data to positive values and then relabeling the axes.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-charts"&gt;google-charts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;



</summary><category term="google"/><category term="google-charts"/><category term="stuart-langridge"/></entry><entry><title>Cruciforum</title><link href="https://simonwillison.net/2007/Oct/16/cruciforum/#atom-tag" rel="alternate"/><published>2007-10-16T09:08:28+00:00</published><updated>2007-10-16T09:08:28+00:00</updated><id>https://simonwillison.net/2007/Oct/16/cruciforum/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/code/cruciforum/"&gt;Cruciforum&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stuart’s new PHP forum—single script, stores threads as static HTML on the filesystem (no database), installation is a one-step process.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.kryogenix.org/days/2007/10/16/cruciforum-crucially-simple"&gt;Stuart Langridge&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/cruciforum"&gt;cruciforum&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/forums"&gt;forums&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/php"&gt;php&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;



</summary><category term="cruciforum"/><category term="forums"/><category term="php"/><category term="stuart-langridge"/></entry><entry><title>hasAccount</title><link href="https://simonwillison.net/2007/Sep/28/as/#atom-tag" rel="alternate"/><published>2007-09-28T09:10:56+00:00</published><updated>2007-09-28T09:10:56+00:00</updated><id>https://simonwillison.net/2007/Sep/28/as/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/days/2007/09/28/hasaccount"&gt;hasAccount&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stuart proposes a light-weight API for letting any site know if a user has an account (and is signed in) on another service. I wouldn’t want to deploy this without being confident that my CSRF protection was in order.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/accounts"&gt;accounts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/api"&gt;api&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crossdomain"&gt;crossdomain&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/csrf"&gt;csrf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;



</summary><category term="accounts"/><category term="api"/><category term="crossdomain"/><category term="csrf"/><category term="json"/><category term="stuart-langridge"/></entry><entry><title>DOMContentLoaded for IE, Safari, everything, without document.write</title><link href="https://simonwillison.net/2007/Sep/26/sil/#atom-tag" rel="alternate"/><published>2007-09-26T12:19:07+00:00</published><updated>2007-09-26T12:19:07+00:00</updated><id>https://simonwillison.net/2007/Sep/26/sil/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/days/2007/09/26/shortloaded"&gt;DOMContentLoaded for IE, Safari, everything, without document.write&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Stuart has taken Hedger’s recent IE technique, combined it with the others and compressed it in to a short-as-possible code snippet that you can paste in to your scripts without having to include the whole of jQuery/YUI/Dojo/Prototype.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/documentwrite"&gt;documentwrite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dom-scripting"&gt;dom-scripting&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/internet-explorer"&gt;internet-explorer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ondomready"&gt;ondomready&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/safari"&gt;safari&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unobtrusive-javascript"&gt;unobtrusive-javascript&lt;/a&gt;&lt;/p&gt;



</summary><category term="documentwrite"/><category term="dom-scripting"/><category term="internet-explorer"/><category term="javascript"/><category term="ondomready"/><category term="safari"/><category term="stuart-langridge"/><category term="unobtrusive-javascript"/></entry><entry><title>DRM-free MP3 downloads from Amazon</title><link href="https://simonwillison.net/2007/Sep/25/sil/#atom-tag" rel="alternate"/><published>2007-09-25T16:30:11+00:00</published><updated>2007-09-25T16:30:11+00:00</updated><id>https://simonwillison.net/2007/Sep/25/sil/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/days/2007/09/25/drm-free-mp3-downloads-from-amazon"&gt;DRM-free MP3 downloads from Amazon&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The good: they have what looks like the entire Universal and EMI catalogues in DRM-free 256bit MP3s. The bad: you need a US billing address! So close...


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/amazon"&gt;amazon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/drm"&gt;drm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/emi"&gt;emi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mp3"&gt;mp3&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/universal"&gt;universal&lt;/a&gt;&lt;/p&gt;



</summary><category term="amazon"/><category term="drm"/><category term="emi"/><category term="mp3"/><category term="stuart-langridge"/><category term="universal"/></entry><entry><title>Quoting Stuart Langridge</title><link href="https://simonwillison.net/2007/May/9/javafx/#atom-tag" rel="alternate"/><published>2007-05-09T19:46:55+00:00</published><updated>2007-05-09T19:46:55+00:00</updated><id>https://simonwillison.net/2007/May/9/javafx/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://www.kryogenix.org/days/2007/05/09/this-weeks-guest-publication"&gt;&lt;p&gt;I'd like to ask readers of this site which you're more interested in, Sun's JavaFX or signing up for TissueWorld 2008, the Premiere Exhibition and Conference for the International Tissue Industry.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://www.kryogenix.org/days/2007/05/09/this-weeks-guest-publication"&gt;Stuart Langridge&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/funny"&gt;funny&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javafx"&gt;javafx&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sun"&gt;sun&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tissueworld"&gt;tissueworld&lt;/a&gt;&lt;/p&gt;



</summary><category term="funny"/><category term="java"/><category term="javafx"/><category term="stuart-langridge"/><category term="sun"/><category term="tissueworld"/></entry><entry><title>Writing a Jokosher extension</title><link href="https://simonwillison.net/2007/Jan/7/extension/#atom-tag" rel="alternate"/><published>2007-01-07T22:25:54+00:00</published><updated>2007-01-07T22:25:54+00:00</updated><id>https://simonwillison.net/2007/Jan/7/extension/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kryogenix.org/days/2006/12/30/writing-a-jokosher-extension-a-rambling-essay"&gt;Writing a Jokosher extension&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I like the way API calls are made through an API object passed to the extension’s startup function.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/api"&gt;api&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jokosher"&gt;jokosher&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;



</summary><category term="api"/><category term="jokosher"/><category term="python"/><category term="stuart-langridge"/></entry><entry><title>Stuart's book</title><link href="https://simonwillison.net/2005/Jun/3/book/#atom-tag" rel="alternate"/><published>2005-06-03T13:44:02+00:00</published><updated>2005-06-03T13:44:02+00:00</updated><id>https://simonwillison.net/2005/Jun/3/book/#atom-tag</id><summary type="html">
    I meant to mention this earlier, but Stuart's book, &lt;a href="http://www.sitepoint.com/books/dhtml1/"&gt;DHTML Utopia: 
Modern Web Design Using JavaScript &amp;amp; DOM&lt;/a&gt;, has been published.

I worked as a technical editor on the book, and I'm proud to have been associated with it. Don't worry about the hairy title (apparently you have to have DHTML in it or bookshops won't know where to put it / people won't know what it's about), the inside is pure gold.

In their usual style, SitePoint have posted &lt;a href="http://www.sitepoint.com/article/dhtml-utopia-modern-web-design"&gt;the first four chapters online&lt;/a&gt; for your perusal so you don't have to take my word for it, you can try it out for yourself.
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/books"&gt;books&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sitepoint"&gt;sitepoint&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="books"/><category term="javascript"/><category term="sitepoint"/><category term="stuart-langridge"/></entry><entry><title>LugRadio</title><link href="https://simonwillison.net/2004/Mar/4/lugRadio/#atom-tag" rel="alternate"/><published>2004-03-04T21:30:16+00:00</published><updated>2004-03-04T21:30:16+00:00</updated><id>https://simonwillison.net/2004/Mar/4/lugRadio/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;a href="http://www.lugradio.org/"&gt;LugRadio&lt;/a&gt; rocks. It's a collaboration between &lt;a href="http://www.jonobacon.org/"&gt;Jono Bacon&lt;/a&gt;, &lt;a href="http://www.kryogenix.org/"&gt;Stuart Langridge&lt;/a&gt;, &lt;a href="http://www.westmids.biz/blog/"&gt;Stephen Parkes&lt;/a&gt; and &lt;a href="http://www.webeditorblog.com/"&gt;Matthew Revell&lt;/a&gt;, all members of the &lt;a href="http://www.wolveslug.org.uk/"&gt;Wolverhampton Linux User Group&lt;/a&gt;. They've just released their second episode after over 1,000 people downloaded the first one. It's witty, laid back, saracastic and quintessentially English - in fact just listening to some genuine British banter is enough to make me a little homesick. Thoroughly recommended.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="stuart-langridge"/></entry><entry><title>Javascript Mojo</title><link href="https://simonwillison.net/2003/Nov/5/mojo/#atom-tag" rel="alternate"/><published>2003-11-05T19:12:10+00:00</published><updated>2003-11-05T19:12:10+00:00</updated><id>https://simonwillison.net/2003/Nov/5/mojo/#atom-tag</id><summary type="html">
    &lt;p&gt;Stuart Langridge has released a couple of &lt;em&gt;very&lt;/em&gt; neat new Javascript experiments. &lt;a href="http://www.kryogenix.org/code/browser/sorttable/" title="Sortable Tables"&gt;sorttable&lt;/a&gt; makes any data table on a page "sortable" by clicking the table headers. I've seen this effect &lt;a href="http://msdn.microsoft.com/library/en-us/dndude/html/dude07232001.asp" title="Fun with Tables"&gt;used&lt;/a&gt; to demonstrate Microsoft's proprietary "behaviors" technology but Stuart's solution has the advantage of being standards compliant and working across different browsers. Best of all, it follows the principles of inobtrusive &lt;acronym title="Dynamic HyperText Markup Language"&gt;DHTML&lt;/acronym&gt; and hooks in to the markup using only a class attribute.&lt;/p&gt;

&lt;p&gt;Stuart's second experiment, &lt;a href="http://www.kryogenix.org/code/browser/jses/"&gt;JavaScript Event Sheets&lt;/a&gt;, is even more interesting. It tackles the problem of attaching events to page elements. The most common way of doing this is with inline attributes, but these require adding behavioural (rather than structural) code to your markup and can lead to additional maintenance costs further down the road. A better alternative is to use the &lt;acronym title="Document Object Model"&gt;DOM&lt;/acronym&gt; to dynamically add events, which works fine but means tightly coupling the structure of the document to the Javascript that sets up the events. Stuart's solution is to abstract the logic that attaches events to elements out to a separate file, called a Javascript Event Sheet. This uses &lt;acronym title="Cascading Style Sheets"&gt;CSS&lt;/acronym&gt; style syntax (partially handled by my &lt;a href="/2003/Mar/25/getElementsBySelector/"&gt;getElementsBySelector function&lt;/a&gt;) to specify how events attached to different elements should be handled. Stuart demonstrates the idea with a common image rollover:&lt;/p&gt;

&lt;pre&gt;&lt;code class="jses"&gt;img.rollover {
  mouseover: rollover_handler;
  mouseout: rollout_handler;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Stuart's blog entries concerning the two new experiments are &lt;a href="http://www.kryogenix.org/days/565.html" title="Sortable tables"&gt;here&lt;/a&gt; and &lt;a href="http://www.kryogenix.org/days/566.html"&gt;JavaScript Event Sheets&lt;/a&gt;.&lt;/p&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/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="javascript"/><category term="stuart-langridge"/></entry><entry><title>More Vellum</title><link href="https://simonwillison.net/2003/Jan/21/moreVellum/#atom-tag" rel="alternate"/><published>2003-01-21T11:14:58+00:00</published><updated>2003-01-21T11:14:58+00:00</updated><id>https://simonwillison.net/2003/Jan/21/moreVellum/#atom-tag</id><summary type="html">
    &lt;p&gt;Vellum 1.0a4 is &lt;a href="http://www.kryogenix.org/code/vellum/" title="Vellum: a weblogging system in Python"&gt;out&lt;/a&gt;, and features comment support via a new Comments plugin and an Audience generic object type that abstracts the concept of "responses to your post" and is also used for Pingback support. Different response types within the same interface is a very neat idea, as Sam Ruby has &lt;a href="http://www.intertwingly.net/blog/1136.html" title="Pingback now with excerpts"&gt;demonstrated&lt;/a&gt; with his integrated comments, referral tracking, Pingbacks and TrackBacks. Stuart also &lt;a href="http://www.kryogenix.org/days/383.html" title="Comment pings"&gt;suggests&lt;/a&gt; auto-discovery of You-Know-Me information from the &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt; of your weblog, presumably by another &lt;code&gt;link&lt;/code&gt; element. This is a great idea, but I have reservations about the performance trade off as unauthenticated comment systems will have to retrieve the poster's home page in the background every time they make a post.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/pingback"&gt;pingback&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/trackback"&gt;trackback&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vellum"&gt;vellum&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="pingback"/><category term="stuart-langridge"/><category term="trackback"/><category term="vellum"/></entry><entry><title>First deployment of Vellum</title><link href="https://simonwillison.net/2003/Jan/15/firstDeploymentOfVellum/#atom-tag" rel="alternate"/><published>2003-01-15T10:22:01+00:00</published><updated>2003-01-15T10:22:01+00:00</updated><id>https://simonwillison.net/2003/Jan/15/firstDeploymentOfVellum/#atom-tag</id><summary type="html">
    &lt;p&gt;Oooh... Stuart has moved &lt;a href="http://www.kryogenix.org/" title="as days pass by"&gt;his blog&lt;/a&gt; over to Vellum, his brand new sparkly Python powered blogging system. The full post is &lt;a href="http://www.kryogenix.org/days/378.html" title="The big move to Vellum"&gt;here&lt;/a&gt;, but his archive / permalinks aren't working yet. It's going to be fun watching the system develop.&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/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="python"/><category term="stuart-langridge"/></entry><entry><title>Stuart's pingback roundup</title><link href="https://simonwillison.net/2003/Jan/11/stuartsPingbackRoundup/#atom-tag" rel="alternate"/><published>2003-01-11T17:54:37+00:00</published><updated>2003-01-11T17:54:37+00:00</updated><id>https://simonwillison.net/2003/Jan/11/stuartsPingbackRoundup/#atom-tag</id><summary type="html">
    &lt;p&gt;Stuart has a &lt;a href="http://www.kryogenix.org/days/000431.cas" title="Pingbacks and trackbacks and implementation"&gt;good summary&lt;/a&gt; of the recent advances being made in the Pingback/Trackback implementation sphere.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/pingback"&gt;pingback&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/trackback"&gt;trackback&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="pingback"/><category term="stuart-langridge"/><category term="trackback"/></entry><entry><title>Testing Pingback client</title><link href="https://simonwillison.net/2002/Sep/11/testingPingbackClient/#atom-tag" rel="alternate"/><published>2002-09-11T01:17:33+00:00</published><updated>2002-09-11T01:17:33+00:00</updated><id>https://simonwillison.net/2002/Sep/11/testingPingbackClient/#atom-tag</id><summary type="html">
    &lt;p&gt;This post exists partly to list the blogs I know of that support PingBack, but mostly to help test my new PingBack client implementation.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ln.hixie.ch/?start=1031465247&amp;amp;count=1"&gt;Hixie welcomes feedback&lt;/a&gt; on his text/html document.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.aquarionics.com/index.php?id=700"&gt;Aquarion links to the above.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kryogenix.org/days/000257.cas"&gt;Stuart is having problems&lt;/a&gt; getting Mozilla gestures to work on Linux.&lt;/li&gt;

&lt;li&gt;&lt;a href="http://mort.mine.nu:8080/b2/index.php?m=200209#80220626"&gt;Mort&lt;/a&gt; has a b2 PingBack client.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tidakada.com/archives/m/200209#testing_pingback"&gt;Michel&lt;/a&gt; tries it out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fingers crossed... here goes!&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/aquarion"&gt;aquarion&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hixie"&gt;hixie&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pingback"&gt;pingback&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="aquarion"/><category term="hixie"/><category term="pingback"/><category term="stuart-langridge"/></entry><entry><title>Pingback specification</title><link href="https://simonwillison.net/2002/Sep/4/pingBackSpec/#atom-tag" rel="alternate"/><published>2002-09-04T17:05:44+00:00</published><updated>2002-09-04T17:05:44+00:00</updated><id>https://simonwillison.net/2002/Sep/4/pingBackSpec/#atom-tag</id><summary type="html">
    &lt;p&gt;Stuart has published the &lt;a href="http://www.kryogenix.org/writings/tech/pingback"&gt;first draught&lt;/a&gt; of the PingBack specification, detailing how PingBack works and how it should be implemented. PingBack is brilliant - it &lt;em&gt;just works&lt;/em&gt;. What could be simpler than just quietly telling someone's blog that you've linked to them?&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/pingback"&gt;pingback&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="pingback"/><category term="stuart-langridge"/></entry><entry><title>Pingback implemented</title><link href="https://simonwillison.net/2002/Sep/2/pingBackImplemented/#atom-tag" rel="alternate"/><published>2002-09-02T15:18:27+00:00</published><updated>2002-09-02T15:18:27+00:00</updated><id>https://simonwillison.net/2002/Sep/2/pingBackImplemented/#atom-tag</id><summary type="html">
    &lt;p&gt;I've implemented PingBack on my blog. PingBack is a system for tracking who is linking to your blog in a controlled way, based on a &lt;a href="http://www.kryogenix.org/days/000138.cas" title="Making TrackBack happen automatically"&gt;post by Stuart&lt;/a&gt; a few months ago. The idea is that when you link to a PingBack enabled blog you (or your blogging tool) should send an XML-RPC "ping" to that blog's PingBack server telling it where you have linked to and where you linked from. The PingBack server can then grab your page, check that the link is there and extract a title and short description from the blog. The system is an alternative to (and was inspired by) MoveableType's &lt;a href="http://www.moveabletype.org/trackback/"&gt;TrackBack&lt;/a&gt; feature. Stuart and I are actively developing the idea and will be releasing code and documentation to help other people experiment with the system in the near future.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/pingback"&gt;pingback&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/trackback"&gt;trackback&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xml-rpc"&gt;xml-rpc&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/site-upgrades"&gt;site-upgrades&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="pingback"/><category term="projects"/><category term="stuart-langridge"/><category term="trackback"/><category term="xml-rpc"/><category term="site-upgrades"/></entry><entry><title>CSS could be so much more</title><link href="https://simonwillison.net/2002/Jul/16/cssCouldBeSoMuchMore/#atom-tag" rel="alternate"/><published>2002-07-16T23:38:26+00:00</published><updated>2002-07-16T23:38:26+00:00</updated><id>https://simonwillison.net/2002/Jul/16/cssCouldBeSoMuchMore/#atom-tag</id><summary type="html">
    &lt;p&gt;Stuart Langridge &lt;a href="http://www.kryogenix.org/days/2002_07.cas#000152"&gt;discusses the nature of minimalism&lt;/a&gt; and &lt;acronym title="Cascading Style Sheets"&gt;CSS&lt;/acronym&gt; design, following a &lt;a href="http://www.dellah.com/orient/2002/07/15/the_minimalist_web_project.shtml"&gt;post by Sarabian&lt;/a&gt;. Stuart wonders if the current trend for relatively plain site designs is an interim period while we find our feet in the relatively new medium of CSS. I am sure it is - while I personally love the elegance and simplicity being showcase in many pure CSS sites, it's not going to help convert die hard table fanatics. The annoying thing is that CSS is capable of so much - the &lt;a href="http://www.w3schools.com/css/css_background.asp" title="CSS Background Properties"&gt;power it gives us&lt;/a&gt; over background images should free designers to do things that were difficult or impossible with tables. I'm a rubbish designer, but I'm considering taking on the challenge of "interesting" CSS design in the not too distant future. If I can make things look good, anyone can ;)&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/css"&gt;css&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="css"/><category term="stuart-langridge"/></entry><entry><title>Tree from unordered list</title><link href="https://simonwillison.net/2002/Jun/13/treeFromUnorderedList/#atom-tag" rel="alternate"/><published>2002-06-13T03:30:07+00:00</published><updated>2002-06-13T03:30:07+00:00</updated><id>https://simonwillison.net/2002/Jun/13/treeFromUnorderedList/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;a href="http://www.kryogenix.org/code/browser/aqtree/aqtree.html" title="Tree structures from unordered lists"&gt;The amazing tree generator&lt;/a&gt; (via &lt;a href="http://www.web-graphics.com/mtarchive/000517.php#000517"&gt;webgraphics&lt;/a&gt;, who in turn got it from &lt;a href="http://two.pairlist.net/mailman/listinfo/css-discuss"&gt;CSS Discuss&lt;/a&gt;). This is just the kind of DHTML I really like. Place a simple nested unordered list in your document and this external javascript can use the DOM to convert the list in to a hierarchical outline style tree, with each node expandable to show the child members. It looks great and works in both IE and Mozilla - I haven't tested it in other browsers but it should degrade gracefully, leaving them with a static nested list.&lt;/p&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/stuart-langridge"&gt;stuart-langridge&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="javascript"/><category term="stuart-langridge"/></entry></feed>