<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title> - The Blog</title>
      <link>https://maxbruges.com/blog/</link>
      <description></description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://maxbruges.com/blog/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Mon, 01 Dec 2025 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Hosting on Cloudflare&#x27;s R2</title>
          <pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://maxbruges.com/blog/r2hosting/</link>
          <guid>https://maxbruges.com/blog/r2hosting/</guid>
          <description xml:base="https://maxbruges.com/blog/r2hosting/">&lt;p&gt;I’ve been building an internal knowledge base at work recently, and wanted a quick-and-dirty means of hosting so that everyone across the organisation could access.&lt;&#x2F;p&gt;
&lt;p&gt;Normally, I’d simply whack it on a public Github repo and use Cloudflare Pages to build and host from there. However, some parts of the site are &lt;em&gt;moderately&lt;&#x2F;em&gt; sensitive - or at least information that I’d rather not have slurped up by crawlers &lt;em&gt;et al&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The perfect opportunity, then, to test out something I’d seen mentioned on a HN post a while ago: hosting the site directly from an R2 bucket.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;domains-and-databases&quot;&gt;Domains and databases&lt;a class=&quot;zola-anchor&quot; href=&quot;#domains-and-databases&quot; aria-label=&quot;Anchor link for: domains-and-databases&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Setting up the bucket is straightforward:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;In the Cloudflare admin panel, go to &lt;code&gt;Storage &amp;amp; Databases -&amp;gt; R2 Object Storage&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Here, create a new bucket - with a name that’s easy to identify with the site you’re hosting.&lt;&#x2F;li&gt;
&lt;li&gt;Upload single file - try &lt;em&gt;“hello world!”&lt;&#x2F;em&gt; in &lt;code&gt;test.html&lt;&#x2F;code&gt; - for testing later.&lt;&#x2F;li&gt;
&lt;li&gt;Navigate to the &lt;code&gt;Settings&lt;&#x2F;code&gt; tab and add a &lt;code&gt;Custom Domain&lt;&#x2F;code&gt;. This should (obviously) be one that you hold with Cloudflare, and the DNS record update should be handled automatically.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;The bucket is now serving to anyone visiting your &lt;code&gt;site.example.com&lt;&#x2F;code&gt; domain. Try it out by visiting &lt;code&gt;https:&#x2F;&#x2F;site.example.com&#x2F;test.html&lt;&#x2F;code&gt; - you should see your “hello world!” from step 3.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;adding-content&quot;&gt;Adding content&lt;a class=&quot;zola-anchor&quot; href=&quot;#adding-content&quot; aria-label=&quot;Anchor link for: adding-content&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;In my case, I had a folder of static HTML pages built on my local machine. The easiest way to dump these into the bucket is to click-and-drag into the upload pane on the Cloudflare panel. This is fine for a one-off, but will get tedious with regular updates.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;Rclone&lt;&#x2F;code&gt; is the best tool I’ve found for syncing content to a bucket.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Download and install &lt;code&gt;rclone&lt;&#x2F;code&gt; if it isn’t already on your system.&lt;&#x2F;li&gt;
&lt;li&gt;Back on the main &lt;code&gt;R2 Object Storage&lt;&#x2F;code&gt; page of the Cloudflare Admin Panel, click the &lt;kbd&gt;{} Manage&lt;&#x2F;kbd&gt; button  under the &lt;strong&gt;Account Details&lt;&#x2F;strong&gt; heading.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Create User API token&lt;&#x2F;code&gt;, with &lt;code&gt;Object read &amp;amp; write&lt;&#x2F;code&gt; permissions. For added security, limit it to specifically the bucket for your site.&lt;&#x2F;li&gt;
&lt;li&gt;Save down the credentials somewhere, ready to enter into &lt;code&gt;rclone&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;In your terminal, type &lt;code&gt;rclone config&lt;&#x2F;code&gt;, and follow the instructions to link your R2 instance with &lt;code&gt;rclone&lt;&#x2F;code&gt; - name it &lt;code&gt;r2&lt;&#x2F;code&gt; for convenience.&lt;&#x2F;li&gt;
&lt;li&gt;Test out the connection by running &lt;code&gt;rclone ls r2:name-of-bucket&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;If it’s been configured correctly, you should see your test file &lt;code&gt;test.html&lt;&#x2F;code&gt; from earlier listed.&lt;&#x2F;li&gt;
&lt;li&gt;Now, to sync your assets to the bucket, run &lt;code&gt;rclone sync .&#x2F;assets&#x2F;* r2:name-of-bucket&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Run &lt;code&gt;rclone ls r2:name-of-bucket&#x2F;&lt;&#x2F;code&gt; again to check everything’s uploaded successfully.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;fixing-index-html&quot;&gt;Fixing &lt;code&gt;index.html&lt;&#x2F;code&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fixing-index-html&quot; aria-label=&quot;Anchor link for: fixing-index-html&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;We can now navigate to &lt;code&gt;site.example.com&lt;&#x2F;code&gt; and see our page in all its glory…&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;ERROR 404
&lt;&#x2F;span&gt;&lt;span&gt;Object not found
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;This object does not exist or is not publicly accessible at this URL. Check the URL of the object that you&amp;#39;re looking for or contact the owner to enable Public access.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ah. A reminder that R2 is not really &lt;em&gt;designed&lt;&#x2F;em&gt; to host whole sites: whereas most servers will default to &lt;code&gt;index.html&lt;&#x2F;code&gt; if a client requests the root of a directory, R2 simply follows our request to the letter, attempting to serve the page &lt;code&gt;&#x2F;&lt;&#x2F;code&gt;, which obviously doesn’t exist.&lt;&#x2F;p&gt;
&lt;p&gt;Fortunately, there’s a quick fix for this, using &lt;strong&gt;Transform Rules&lt;&#x2F;strong&gt;. We’re going to create two rules: one to fix the site root, and another for the habit that some static site generators have of defaulting their links to &lt;code&gt;&#x2F;section&#x2F;subsection&#x2F;&lt;&#x2F;code&gt;, without an explicit &lt;code&gt;.html&lt;&#x2F;code&gt; page.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;From the main Cloudflare Admin panel, select the domain you’re serving from (e.g. &lt;code&gt;example.com&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;In the sidebar, select &lt;code&gt;Rules -&amp;gt; Overview&lt;&#x2F;code&gt;, then click the &lt;code&gt;Create rule&lt;&#x2F;code&gt; button&lt;&#x2F;li&gt;
&lt;li&gt;Rule one:
&lt;ol&gt;
&lt;li&gt;Name the first rule something like &lt;code&gt;Index.html for site root&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Select &lt;strong&gt;Custom filter expression&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;In the &lt;strong&gt;When incoming requests match…&lt;&#x2F;strong&gt; section, set:
| Field | Operator | Value |
| :—: | :—: | :—: |
| URI Path | Ends with | &#x2F; |&lt;&#x2F;li&gt;
&lt;li&gt;Under &lt;strong&gt;Then…&lt;&#x2F;strong&gt;, select &lt;strong&gt;Rewrite to..&lt;&#x2F;strong&gt; and &lt;strong&gt;Dynamic&lt;&#x2F;strong&gt; from the dropdown.&lt;&#x2F;li&gt;
&lt;li&gt;Enter &lt;code&gt;concat(http.request.uri.path, &quot;&#x2F;index.html&quot;)&lt;&#x2F;code&gt; as the expression, and hit &lt;code&gt;Save&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Rule two:
&lt;ol&gt;
&lt;li&gt;Name this second rule something like &lt;code&gt;Index.html for subdirectories&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Select &lt;strong&gt;Custom filter expression&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;In the &lt;strong&gt;When incoming requests match…&lt;&#x2F;strong&gt; section, set:
| Field | Operator | Value |
| :—: | :—: | :—: |
| URI Path | Does not contain | . |&lt;&#x2F;li&gt;
&lt;li&gt;Click ‘And’ to add another condition:
| Field | Operator | Value |
| :—: | :—: | :—: |
| URI Path | Does not end with | &#x2F; |&lt;&#x2F;li&gt;
&lt;li&gt;Under &lt;strong&gt;Then…&lt;&#x2F;strong&gt;, select &lt;strong&gt;Rewrite to..&lt;&#x2F;strong&gt; and &lt;strong&gt;Dynamic&lt;&#x2F;strong&gt; from the dropdown.&lt;&#x2F;li&gt;
&lt;li&gt;Enter &lt;code&gt;concat(http.request.uri.path, &quot;index.html&quot;)&lt;&#x2F;code&gt; as the expression, and hit &lt;code&gt;Save&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;You can limit these rules to just your specific site (rather than all that are hosted on your domain), you can add an ‘And’ rule of:
| Field | Operator | Value |
| :—: | :—: | :—: |
| Hostname | Equals | &lt;code&gt;site.example.com&lt;&#x2F;code&gt; |&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Note that the second rule has a &lt;em&gt;very slight&lt;&#x2F;em&gt; difference in the rewrite: we omit the leading &lt;code&gt;&#x2F;&lt;&#x2F;code&gt; from &lt;code&gt;index.html&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wrapping-up-and-costing&quot;&gt;Wrapping up and costing&lt;a class=&quot;zola-anchor&quot; href=&quot;#wrapping-up-and-costing&quot; aria-label=&quot;Anchor link for: wrapping-up-and-costing&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Give all those settings a minute or two to propogate across the network, then try again visiting your site. It &lt;em&gt;should&lt;&#x2F;em&gt; now present you with your &lt;code&gt;index.html&lt;&#x2F;code&gt; page, just like a real server.&lt;&#x2F;p&gt;
&lt;p&gt;It is worth mentioning that this sort of hosting isn’t &lt;em&gt;totally&lt;&#x2F;em&gt; free. Generally, you can serve up to 10 million requests per month before Cloudflare will start charging you - you can play with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;r2-calculator.cloudflare.com&#x2F;&quot;&gt;their calculator here&lt;&#x2F;a&gt;. Frankly, if you’re hitting those numbers, you can probably afford to set things up properly.&lt;&#x2F;p&gt;
&lt;p&gt;Similarly, the sales team will come knocking on your door if you start hosting very large files, but for a simple static site with nothing more complex that some &lt;code&gt;HTML&lt;&#x2F;code&gt; and images, you’re good to go.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Cloning in your classroom</title>
          <pubDate>Sun, 04 May 2025 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/cloning-in-your-classroom/</link>
          <guid>https://maxbruges.com/blog/cloning-in-your-classroom/</guid>
          <description xml:base="https://maxbruges.com/blog/cloning-in-your-classroom/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;dolly.webp&quot; alt=&quot;HERO Dolly the Sheep&quot; &#x2F;&gt;
&lt;em&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Dolly_(sheep)&quot;&gt;Dolly the sheep&lt;&#x2F;a&gt; (left).&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;“But what’s the &lt;em&gt;right&lt;&#x2F;em&gt; answer, sir?”&lt;&#x2F;p&gt;
&lt;p&gt;I’d barely been teaching a week before being brought to a dead stop, mid-lesson. I’d done all the right things: pre-taught the vocabulary, broken down the context, &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;definitions&#x2F;&quot;&gt;painstakingly annotated&lt;&#x2F;a&gt; the iambs and trochees. But that had all been &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.biblegateway.com&#x2F;passage&#x2F;?search=ecclesiastes%201&amp;amp;version=KJV&quot;&gt;vanity&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Rafael wanted an &lt;em&gt;answer&lt;&#x2F;em&gt;. And he wanted the right one.&lt;&#x2F;p&gt;
&lt;p&gt;No amount of “well, one could argue…” or “a possible interpretation might be…” or any critical expostulation would satisfy him. If Maths and Science and French and ICT could answer their questions with a tick or a cross, why couldn’t English?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;spinning-the-flywheel&quot;&gt;Spinning the flywheel&lt;a class=&quot;zola-anchor&quot; href=&quot;#spinning-the-flywheel&quot; aria-label=&quot;Anchor link for: spinning-the-flywheel&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Rafael was right, of course. This is the problem with English. Our answers are too fuzzy. There isn’t one, immutable, correct response to &lt;em&gt;‘How does Shakespeare portray &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;learn&#x2F;textbook&#x2F;macbeth&#x2F;&quot;&gt;the protagonist&lt;&#x2F;a&gt; as a tragic hero?’&lt;&#x2F;em&gt; - and Harold Bloom will rise from his grave and throttle you if you even suggest it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;harold-bloom.webp&quot; alt=&quot;Harold Bloom in his study, aside&quot; &#x2F;&gt;
&lt;em&gt;Not angry, just disappointed.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But that is also the &lt;em&gt;point&lt;&#x2F;em&gt;: we do not teach knowledge. We teach the encoding and decoding of language, in all its fuzzy nuance.&lt;&#x2F;p&gt;
&lt;p&gt;This makes the essential iterative loop of learning - &lt;code&gt;answer --&amp;gt;&lt;&#x2F;code&gt; &lt;code&gt;assess --&amp;gt;&lt;&#x2F;code&gt; &lt;code&gt;improve --&amp;gt;&lt;&#x2F;code&gt; &lt;code&gt;re-answer&lt;&#x2F;code&gt; - a slow, manual process. Every answer from a student in English needs to be weighed on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Thoth&quot;&gt;Thoth’s&lt;&#x2F;a&gt; scales of criticality, and only the teacher in the room is fully qualified to make that judgment. We look in envy at our STEM colleagues with their binary marking and autonomous testing; for every sentence we evaluate for the nuance of language usage, they can mark a dozen sums &lt;code&gt;right&lt;&#x2F;code&gt; or &lt;code&gt;wrong&lt;&#x2F;code&gt;. The maths student receives an order of magnitude more indicators of success and correctness that the English student does, even before accounting for the ease of self-assessment.&lt;&#x2F;p&gt;
&lt;p&gt;The bottleneck to learning in Arts and Humanities is the teacher’s capacity to assess and feedback. But that could be about to change.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fuzzy-bots-firm-answers&quot;&gt;Fuzzy bots, firm answers&lt;a class=&quot;zola-anchor&quot; href=&quot;#fuzzy-bots-firm-answers&quot; aria-label=&quot;Anchor link for: fuzzy-bots-firm-answers&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Above everything, LLMs excel at fuzzily assessing language, which makes them the perfect candidate for ‘cloning’ an English teacher.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;twiins.webp&quot; alt=&quot;aside&quot; &#x2F;&gt;
&lt;em&gt;Yes I know they aren’t &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Twins_(1988_film)&quot;&gt;clones&lt;&#x2F;a&gt;.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;They may &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;BanGoogle&#x2F;&quot;&gt;hallucinate facts&lt;&#x2F;a&gt; or forget data, but their ability to read and extrapolate from written text is dependably good. Ultimately, that’s what we need in English. We learn it the same way the LLM does: ingesting as much &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;PowerOfReading&#x2F;&quot;&gt;good quality writing&lt;&#x2F;a&gt; as possible so that we can produce our own, mimicking styles and structures whilst changing the content.&lt;&#x2F;p&gt;
&lt;p&gt;The classroom of tomorrow can leverage this technology to finally widen that bottleneck; a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Digital_twin&quot;&gt;digital twin&lt;&#x2F;a&gt; of the teacher to serve as a low-stakes feedback machine.&lt;&#x2F;p&gt;
&lt;p&gt;They don’t need to be perfect, only ‘good enough’ to give an indication of if the student is the right direction: finally giving English some semblance of the STEM binary; though rather than &lt;code&gt;correct&#x2F;incorrect&lt;&#x2F;code&gt;, we can ask for &lt;code&gt;better&#x2F;worse&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cautious-optimisation&quot;&gt;Cautious optimisation&lt;a class=&quot;zola-anchor&quot; href=&quot;#cautious-optimisation&quot; aria-label=&quot;Anchor link for: cautious-optimisation&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;But tread softly, and never mistake eloquence for accuracy. The key distinction here is between &lt;em&gt;evaluation&lt;&#x2F;em&gt; and &lt;em&gt;feedback&lt;&#x2F;em&gt;. The bots are rubbish at the former: too easily swayed by context and weighting to reliably give accurate marks and levels for written work.&lt;&#x2F;p&gt;
&lt;p&gt;In my own rudimentary experiements, the bots showed the sort of capricious inconsistency that would get an examiner booted from a marking pool in minutes, with grading that varied wildly even from paragraph to paragraph. Running the same exam script through the AI three times would produce three distinctly different results. There have been &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;schoolsweek.co.uk&#x2F;using-ai-to-judge-writing-could-revolutionise-assessment-trial&#x2F;&quot;&gt;some promising steps in recent months&lt;&#x2F;a&gt; to improve on this, but at this stage the tech is simply too inconsistent to take on the quantitative aspect of marking. We may get there with a big dollop of fine-tuning and RAG-ing, but for now the auto-marking bot remains but a twinkle in every GCSE assessor’s eye.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;vogon-poetry.webp&quot; alt=&quot;A Vogon receiving criticism on his poetry&quot; &#x2F;&gt;
&lt;em&gt;“The candidate has demonstrated an ambitious use of vocabulary, commensurate with AO3 Level 4.”&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Feedback, on the other hand, is ideal. Load up the AI’s context window with a script of pre-written responses (‘Vary your sentence structures’, ‘Consider your paragraphing’, ‘Incorporate more ambitious vocabulary’, etc.) and they can &lt;em&gt;usually&lt;&#x2F;em&gt; be counted on to pick the right one for the right text. And for obvious reasons: it’s doing the job it was made for, to extrapolate text. Assessment frameworks may come and go, marking criteria may change with phases of the moon, but good, broad feedback is forever.&lt;&#x2F;p&gt;
&lt;p&gt;For low-stakes assessment, where the &lt;em&gt;practice&lt;&#x2F;em&gt; rather than the &lt;em&gt;outcome&lt;&#x2F;em&gt; is what matters, this has the potential to work brilliantly. A quick nudge in the right direction can keep momentum up and spin the learning flywheel; nudges that you don’t always have the time or space to deliver.&lt;&#x2F;p&gt;
&lt;p&gt;In truth, the only way to know is to do. Run some student work through ChatGPT, with a strict prompt limiting them to your pre-written comments. See what it comes up with. Feed in some more tailored comment templates. Tweak, repeat, iterate.&lt;&#x2F;p&gt;
&lt;p&gt;It may not be classroom-ready today, but you may have a feedback clone to help you tomorrow.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Revenge of the knowledge-based curriculum</title>
          <pubDate>Sun, 16 Feb 2025 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/knowledge-based/</link>
          <guid>https://maxbruges.com/blog/knowledge-based/</guid>
          <description xml:base="https://maxbruges.com/blog/knowledge-based/">&lt;p&gt;The ever-interesting Ben Thompson has been playing with OpenAI’s new &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;openai.com&#x2F;index&#x2F;introducing-deep-research&#x2F;&quot;&gt;Deep Research&lt;&#x2F;a&gt; tool. His &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stratechery.com&#x2F;2025&#x2F;deep-research-and-knowledge-value&#x2F;&quot;&gt;write-up&lt;&#x2F;a&gt; of how he used it to generate a report on Apple’s earnings announcements is worth reading, but this section stood out to me:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The issue with the report I generated […] is that it completely missed a major entity in the industry in question. This particular entity is not a well-known brand, but is a major player in the supply chain. It is a significant enough entity that any report about the industry that did not include them is, if you want to be generous, incomplete.&lt;br &#x2F;&gt;
It is, in fact, the fourth categorization that &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;There_are_unknown_unknowns&quot;&gt;Rumsfeld&lt;&#x2F;a&gt; didn’t mention: “the unknown known.” Anyone who read the report that Deep Research generated would be given the &lt;strong&gt;illusion of knowledge&lt;&#x2F;strong&gt;, but would not know what they think they know.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ben Thompson, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stratechery.com&#x2F;2025&#x2F;deep-research-and-knowledge-value&#x2F;&quot;&gt;Deep Research and Knowledge Value, 2024&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;unseen-and-unknown&quot;&gt;Unseen and unknown&lt;a class=&quot;zola-anchor&quot; href=&quot;#unseen-and-unknown&quot; aria-label=&quot;Anchor link for: unseen-and-unknown&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Sound familiar? In teaching, we face that &lt;em&gt;illusion of knowledge&lt;&#x2F;em&gt; twenty times a day.&lt;&#x2F;p&gt;
&lt;p&gt;The stuck student is easy to identify and intervene with; it’s the confident but compromised one that’s hardest to fix. We’re too easily fooled by flowing paragraphs and correct responses to prompted questions. Often, one only spots the depths of the misunderstanding in high-stakes, unscaffolded assessment on unfamiliar content, where the fallback on routine and skills leaves glaring gaps in answers.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;media3.giphy.com&#x2F;media&#x2F;v1.Y2lkPTc5MGI3NjExcGxkenV0cW5nMHFxNTczeW93NHdzM2FhdDE1dmR3eXk0NjAzZDVkZCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw&#x2F;VIPfTy8y1Lc5iREYDS&#x2F;giphy.gif&quot; alt=&quot;&quot; &#x2F;&gt;
&lt;em&gt;“However, to conclude, it can clearly be seen that the allegorical play is…”&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The unseen poetry portion of GCSE English is the purest crucible for this: students diligently marching their way through PETAL paragraphs but totally missing the central conceit of the dramatic monologue or allegory, simply because they lack the &lt;em&gt;knowledge&lt;&#x2F;em&gt; of those forms.&lt;&#x2F;p&gt;
&lt;p&gt;Most heart-breaking of all is the shock that the grading of these sorts of answers is usually met with: the student &lt;em&gt;doesn’t know&lt;&#x2F;em&gt; what they didn’t know. From their perspective, their perfectly planned answer used all the right &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;experiments&#x2F;kickstart&#x2F;&quot;&gt;sentence stems&lt;&#x2F;a&gt;, ticked all the AOs and followed all the rituals from the classroom.&lt;&#x2F;p&gt;
&lt;p&gt;Because when it comes down to it, knowledge trumps all else.&lt;&#x2F;p&gt;
&lt;p&gt;The curriculum pendulum may be about to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tes.com&#x2F;magazine&#x2F;news&#x2F;general&#x2F;dfe-curriculum-and-assessment-review-7-key-details&quot;&gt;swing back from knowledge to skills&lt;&#x2F;a&gt;. But in a world full of fluent-but-fallible bots, that would be a mistake: our students &lt;em&gt;desperately&lt;&#x2F;em&gt; need a solid grounding in facts to spot when hallucinations creep in.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;trust-but-verify&quot;&gt;Trust but verify&lt;a class=&quot;zola-anchor&quot; href=&quot;#trust-but-verify&quot; aria-label=&quot;Anchor link for: trust-but-verify&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I’ve no quick fixes for this in English, other than that &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;More_Cowbell&quot;&gt;cowbell&lt;&#x2F;a&gt; of Literature study: &lt;em&gt;read moar&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;But it does prompt a useful, meta-cognitive lesson for a students to take and apply outside of the classroom and exam hall.&lt;&#x2F;p&gt;
&lt;p&gt;Large-Language Models are going to - and should! - play a central part in their working lives. Teaching them to use the tools properly, modelling safe and accurate usage, is a duty we as educators have to embrace today.&lt;&#x2F;p&gt;
&lt;p&gt;As Ben notes above, the models are extremely good at behaving like over-confident GCSE candidates, producing fluent paragraphs that miss key information. If our students can become domain &lt;em&gt;experts&lt;&#x2F;em&gt;, then they can be equipped to spot when these Rumsfeldian knowledge gaps emerge, and challenge them.&lt;&#x2F;p&gt;
&lt;p&gt;To out-smart the machine is pretty a awesome experience for anyone, let alone a neophyte dipping their toes into the pool of academia for the first time. What better confidence boost can there be than telling ChatGPT it’s got it wrong, and having it &lt;em&gt;agree&lt;&#x2F;em&gt;? The best way to learn is to teach, so teach that chatbot who’s boss.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gell-mann-and-gpt&quot;&gt;Gell-Mann and GPT&lt;a class=&quot;zola-anchor&quot; href=&quot;#gell-mann-and-gpt&quot; aria-label=&quot;Anchor link for: gell-mann-and-gpt&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Above all, an interaction like this can pierce the veil of infallibility and teach students an essential lesson in &lt;em&gt;Gell-Mann Amnesia&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;You open the newspaper to an article on some subject you know well. […] You read the article and see the journalist has absolutely no understanding of either the facts or the issues. Often, the article is so wrong it actually presents the story backward—reversing cause and effect…&lt;br &#x2F;&gt;
In any case, you read with exasperation or amusement the multiple errors in a story, and then turn the page to national or international affairs, and read as if the rest of the newspaper was somehow more accurate about Palestine than the baloney you just read. You turn the page, and forget what you know.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20070714204136&#x2F;http:&#x2F;&#x2F;www.michaelcrichton.net&#x2F;speech-whyspeculate.html&quot;&gt;Michael Crichton, 2007&lt;&#x2F;a&gt; (yes, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Jurassic_Park&quot;&gt;that&lt;&#x2F;a&gt; Michael Crichton)&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Swap ‘newspaper’ and ‘journalist’ for ChatGPT, and you’ll see exactly what Ben Thompson is driving at. Of course, Crichton’s point is that we &lt;em&gt;forget&lt;&#x2F;em&gt; this once we leave our domain of expertise, slipping back in to trusting the authority of fluency.&lt;&#x2F;p&gt;
&lt;p&gt;But for a brief, shining moment, our students can know how right they are, and know that these tools exist to &lt;em&gt;augment&lt;&#x2F;em&gt; their knowledge, not replace it.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Launching the A.I. Academy</title>
          <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/ai-academy/</link>
          <guid>https://maxbruges.com/blog/ai-academy/</guid>
          <description xml:base="https://maxbruges.com/blog/ai-academy/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;cropped-dubai-skyline.webp&quot; alt=&quot;Sunrise shot of Downtown Dubai and Burj Khalifa, by David Rodrigo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The best thing about my day job is the boredom. Not &lt;em&gt;my&lt;&#x2F;em&gt; boredom (how could I be bored when I’m literally paid to talk about &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;PowerOfReading&#x2F;&quot;&gt;words&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;learn&#x2F;textbook&#x2F;macbeth&#x2F;&quot;&gt;witchcraft&lt;&#x2F;a&gt; all day?), but the boredom on the other side of the desk: the students’.&lt;&#x2F;p&gt;
&lt;p&gt;There is no creature on this Earth more motivated, more inquisitive, more hungry to learn &lt;em&gt;what’s next&lt;&#x2F;em&gt; than the child who’s bored with what they’re doing &lt;em&gt;right now&lt;&#x2F;em&gt;. If you can manage it, bottling that boredom lightning is the best part of being a teacher, and the best way to &lt;em&gt;teach&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It’s in this spirit that we - a few foolhardy Year 11s and I - have launched (probably) the city’s first &lt;strong&gt;After-School AI Academy.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;building-for-us-learning-to-last&quot;&gt;Building for us, learning to last&lt;a class=&quot;zola-anchor&quot; href=&quot;#building-for-us-learning-to-last&quot; aria-label=&quot;Anchor link for: building-for-us-learning-to-last&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;lessons&#x2F;static&#x2F;chatting.gif&quot; alt=&quot;Ollama running a chat model, aside&quot; &#x2F;&gt;
&lt;em&gt;An LLM running on one of our Macbooks&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We’re starting &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;little-local-llm&#x2F;&quot;&gt;small&lt;&#x2F;a&gt;, with a simple question: how can we make this incredible new technology &lt;em&gt;our own&lt;&#x2F;em&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;As a child of Web 2.0 and ICT lessons, the last thing I’d want is to lock another generation into walled gardens. They need to see this technology as something they can play with and make their own, not a pay-to-use, locked-down utility managed by someone else.&lt;&#x2F;p&gt;
&lt;p&gt;No, our Academy is all about building, running, tinkering and tweaking our own AI tools, on our own computers, under our own steam.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;open-and-free&quot;&gt;Open and free&lt;a class=&quot;zola-anchor&quot; href=&quot;#open-and-free&quot; aria-label=&quot;Anchor link for: open-and-free&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Our first sessions have been all about learning what models are, how they’re created, and - above all - the value of building and learning out in the open. We couldn’t do what we do without the miraculous open-source free-for-all that is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ollama.com&#x2F;&quot;&gt;Ollama&lt;&#x2F;a&gt;. Everything we do carries on in that spirit, sharing code as collaborators, not as students led by a teacher.&lt;&#x2F;p&gt;
&lt;p&gt;The group is already buzzing with applications and ideas, from processing nutritional information to virtual tour guides. I’m sure I’ll be showcasing some of their work in the near-future.&lt;&#x2F;p&gt;
&lt;p&gt;If you’d like to join them or share ideas, you can &lt;a href=&quot;mailto:mbruges@reptonalbarsha.org?subject=Tell%20me%20more%20about%20the%20AI%20Academy!&quot;&gt;drop us a line&lt;&#x2F;a&gt; and &lt;a href=&quot;&#x2F;lessons&#x2F;ai.html#2&quot;&gt;follow along&lt;&#x2F;a&gt; below.&lt;&#x2F;p&gt;
&lt;p&gt;And if &lt;em&gt;you’re&lt;&#x2F;em&gt; reading this, academicians, keep it up. Happy hacking.&lt;&#x2F;p&gt;
&lt;style&gt;
    iframe {
        border: 4px solid var(--a);
        width: 95%;
        aspect-ratio: 16 &#x2F; 9;
    }

    button {
        min-width: 3em;
        overflow: hidden;
    }
&lt;&#x2F;style&gt;
&lt;iframe
    id=&quot;lesson-view&quot;
    src=&quot;&#x2F;lessons&#x2F;ai.html#2&quot;
    class=&quot;center&quot;
    onload=&quot;this.onload=null;loadLesson(this);console.log(this.src)&quot;
    tabindex=&quot;0&quot;
&gt;
&lt;&#x2F;iframe&gt;
&lt;script&gt;

    const iframe = document.getElementById(&quot;lesson-view&quot;);
    function simulateKeyPress(key) {
        console.log(&quot;key pressed: &quot; + key);
        iframe.contentWindow.focus();
        iframe.contentWindow.document.dispatchEvent(
            new KeyboardEvent(&quot;keydown&quot;, { key: key }),
        );
    }
    
    function toggleFullscreen() {
        let iframe = document.getElementById(&quot;lesson-view&quot;);
        let toast = iframe.contentWindow.document.getElementById(&quot;toast&quot;);
        if (!document.fullscreenElement) {
            if (iframe.requestFullscreen) {
                iframe.requestFullscreen();
                iframe.contentWindow.focus();
            }
        }
    }
&lt;&#x2F;script&gt;
&lt;div class=&quot;center&quot;&gt;
    &lt;button onclick=&quot;simulateKeyPress(&#x27;PageUp&#x27;)&quot;&gt;&lt;&lt;&#x2F;button&gt;
    &lt;button
        style=&quot;padding: 0.2em&quot;
        title=&quot;Fullscreen&quot;
        alt=&quot;Fullscreen&quot;
        onclick=&quot;toggleFullscreen()&quot;
    &gt;
        &lt;!--&amp;#x26F6;--&gt;📺
    &lt;&#x2F;button&gt;
    &lt;button onclick=&quot;simulateKeyPress(&#x27;PageDown&#x27;)&quot;&gt;&gt;&lt;&#x2F;button&gt;
&lt;&#x2F;div&gt;
&lt;br&gt;
</description>
      </item>
      <item>
          <title>Machine learning in the margins</title>
          <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/definitions/</link>
          <guid>https://maxbruges.com/blog/definitions/</guid>
          <description xml:base="https://maxbruges.com/blog/definitions/">&lt;p&gt;Decoding vocabulary is often the first stumbling block for a developing reader.&lt;&#x2F;p&gt;
&lt;p&gt;But with some help from GPT-4o and some trusty HTML, we can give our learners a chance to vault these blocks and stay in the flow.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;tiger-forest.webp&quot; alt=&quot;A tiger&quot; &#x2F;&gt;
&lt;em&gt;What immortal LLM could frame thy fearful symmetry?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;preempt-pre-teach-prepare&quot;&gt;Preempt, pre-teach, prepare&lt;a class=&quot;zola-anchor&quot; href=&quot;#preempt-pre-teach-prepare&quot; aria-label=&quot;Anchor link for: preempt-pre-teach-prepare&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;When reading, one doesn’t need to &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;PowerOfReading&#x2F;&quot;&gt;know every word&lt;&#x2F;a&gt;, but if a critical mass of unknowns is reached then understanding will collapse; or, worse, misunderstanding will creep in.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;cer.schools.nsw.gov.au&#x2F;content&#x2F;dam&#x2F;doe&#x2F;sws&#x2F;schools&#x2F;c&#x2F;cer&#x2F;localcontent&#x2F;pre-teach_vocab.pdf&quot;&gt;‘pre-teach’&lt;&#x2F;a&gt; is a classic, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;teachlikeachampion.org&#x2F;blog&#x2F;active-practice-key-vocabulary&#x2F;&quot;&gt;Lemov-approved&lt;&#x2F;a&gt; method for tackling this. Preempt the sticking points, prioritise their necessity, then define those words and contextualise them.&lt;&#x2F;p&gt;
&lt;p&gt;At the same time, we don’t want to overload our learners with vocabulary that it breaks the flow of reading. It’s a trap I see new teachers fall into constantly; they give so much time and cognitive load over to learning the individual words that there’s no space left for the text itself. What’s the use of knowing ‘ecstasy’ and ‘fumbling’ if you miss the desperate panic of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.poetryfoundation.org&#x2F;poems&#x2F;46560&#x2F;dulce-et-decorum-est&quot;&gt;the whole line&lt;&#x2F;a&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;Vocabulary needs to be a buffet, not &lt;em&gt;foie-gras&lt;&#x2F;em&gt; force-feeding. Better that some words remain untaught, if it leaves room for learners to digest the text.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;generating-definitions&quot;&gt;Generating definitions&lt;a class=&quot;zola-anchor&quot; href=&quot;#generating-definitions&quot; aria-label=&quot;Anchor link for: generating-definitions&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I’ve slowly been building out the learning resources on this site, including all the anthology poetry for Pearson &lt;a href=&quot;&#x2F;learn&#x2F;textbook&#x2F;?filter=ks4&quot;&gt;iGCSE&lt;&#x2F;a&gt; and &lt;a href=&quot;&#x2F;learn&#x2F;textbook&#x2F;?filter=ks5&quot;&gt;iA-Level&lt;&#x2F;a&gt; English Literature. These poems range in difficulty from the straight-forward to the archaic, but all need some level of vocabulary decoding before they’re understood (in spite of what &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;citatis.com&#x2F;a4233&#x2F;04dd7&#x2F;&quot;&gt;Mr. Eliot&lt;&#x2F;a&gt; might say).&lt;&#x2F;p&gt;
&lt;p&gt;Deciding which words to decode - and how to decode them - is often the last thing one thinks to do, particularly in the rush of photocopying&#x2F;marking&#x2F;coffee-ing that makes up most of a teacher’s day. So I’ve built a quick, AI-powered tool to kickstart&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; the process.&lt;&#x2F;p&gt;
&lt;p&gt;The tool reads through the given text, selects words it thinks are challenging &lt;em&gt;and&lt;&#x2F;em&gt; crucial to the understanding of the text, then generates brief, context-accurate definitions:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;vocab.gif&quot; alt=&quot;GPT-4o generating vocabulary&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The first iterations were good, but far too thorough, churning out definitions lists that covered half the words in the text. That’s no good: the sweet spot for a poem of average difficulty ought to be no more than seven, if only for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_Magical_Number_Seven%2C_Plus_or_Minus_Two&quot;&gt;the sake of cognitive load&lt;&#x2F;a&gt;, so the model is forced to limit itself.&lt;&#x2F;p&gt;
&lt;p&gt;Not only that, but we want to keep the definitions &lt;em&gt;as brief as possible&lt;&#x2F;em&gt;. Again, our intention here isn’t to make our students world experts in the vocabulary, but to give them enough of a gist that they can skate over misunderstanding and focus on the main task: the reading.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;displaying-definitions&quot;&gt;Displaying definitions&lt;a class=&quot;zola-anchor&quot; href=&quot;#displaying-definitions&quot; aria-label=&quot;Anchor link for: displaying-definitions&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;But getting these definitions is only half of the challenge. What really matters is how they are presented. Good teachers avoid starting the lesson with de-contextualised keyword instruction: far better to observe the word in its natural habitat of the text. We also want to slowly reveal the vocabulary at the most suitable time - when the student really needs it - to avoid breaking the all-important reading flow.&lt;&#x2F;p&gt;
&lt;p&gt;In the medium of dead trees, we’re a little limited as to what we can do. Write the definitions as footnotes? Put them in line? Dish them out as post-its? Either way, you’re adding to the textual clutter on the page, potentially increasing the challenge of decoding for the struggling reader.&lt;&#x2F;p&gt;
&lt;p&gt;The digital space affords us much more freedom to choose how and when the new vocabulary decoding happens. Consider the stanza below, from &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;learn&#x2F;textbook&#x2F;the-tyger&#x2F;&quot;&gt;&lt;em&gt;‘The Tyger’&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; :&lt;&#x2F;p&gt;
&lt;center&gt;
&lt;style&gt;
    abbr {
        background-color: color-mix(in srgb, var(--a), transparent 80%);
        font-family: sans-serif;
        text-decoration: none;
        color: var(--t);
        padding-left: 0.2em;
        padding-right: 0.2em;
        margin-left: -0.2em;
        margin-right: -0.2em;
        position: relative;
        cursor: help;
        border: 1px solid transparent;
        background-color: transparent !important;
        border-bottom: 1pt dashed var(--a) !important;
        border-radius: 0px;
    }
    abbr:hover, abbr:focus {
        border: 1px solid var(--a) !important;
    }

    abbr:hover::after,
    abbr:focus::after {
      content: attr(data-title);
      font-size: 0.85em;
      padding-bottom: 3em;
      position: absolute;
      left: 50%;
      transform: translate(-50%, -0.25rem);
      bottom: 82%;
      min-width: 15em;
      text-overflow: ellipsis;
      text-align: center;
      background-color: var(--a);
      color: var(--b);
      box-shadow: 1px 1px 5px 0 rgba(0,0,0,0.4);
      font-size: 14px;
      padding: 3px 5px;
      z-index: 999;
    }

    .def:hover::after,
    .def:focus::after{
        background-color: var(--b);
        color: var(--t);
        font-style: italic;
        bottom: -1.55rem;
        border: 1pt dashed var(--a) !important;
        max-height: 1.1rem;
        line-height: 0.9em;
        height:1.1em;
        overflow-y:auto;
    }

    @media screen and (max-width: 500px) {
        abbr:hover::after,
        abbr:focus::after {
            left:110%
        }
    }
  &lt;&#x2F;style&gt;
&lt;div id=snippet style=&quot;border: 3pt solid var(--a); border-radius:var(--border-radius);max-width:fit-content; padding:1.5em&quot;&gt;
    &lt;p&gt;Tyger Tyger, burning bright,&lt;br&gt;
    In the forests of the night;&lt;br&gt;
    What &lt;abbr class=&quot;def&quot; data-title=&quot;(adj) god-like&quot; tabindex=&quot;3&quot;&gt;immortal&lt;&#x2F;abbr&gt; hand or eye,&lt;br&gt;
    Could &lt;abbr class=&quot;def&quot; data-title=&quot;(v) create, build&quot; tabindex=&quot;4&quot;&gt;frame&lt;&#x2F;abbr&gt; thy fearful &lt;abbr class=&quot;def&quot; data-title=&quot;(n) matching pattern of stripes&quot; tabindex=&quot;5&quot;&gt;symmetry&lt;&#x2F;abbr&gt;?&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;center&gt;
&lt;p&gt;The text is presented as cleanly as we can manage. No footnotes, no asterisks, no pre-populated annotations. The only indicator that there is more information for some words is the lightly dotted line. This draws the mouse or finger of the learner, and on contact…&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;tyger-recording.gif&quot; alt=&quot;A screen recording showing The Tyger displaying annotations&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;…a quick, short definition. Not enough for a dictionary, nor enough for full understanding of all the word’s uses, but enough for now, to keep them going. And so they do: the mouse moves off, the definition disappears, and the learner keeps reading. It’s HTML as it was intended: a &lt;em&gt;document&lt;&#x2F;em&gt; markup format, leveraging the &lt;code&gt;&amp;lt;abbr&amp;gt;&lt;&#x2F;code&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;HTML&#x2F;Element&#x2F;abbr&quot;&gt;element&lt;&#x2F;a&gt; to decode phrases in an unobtrusive way.&lt;&#x2F;p&gt;
&lt;p&gt;The beauty of this approach? It differentiates by design. The student isn’t &lt;em&gt;obligated&lt;&#x2F;em&gt; to read the definition; if they can make it through the line without hovering on the word, focussing on the flow instead, then they can.&lt;&#x2F;p&gt;
&lt;p&gt;A good vocabulary list should allow struggling readers to walk, and able readers to fly. No more stumbling, just reading and - eventually - understanding.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-next&quot;&gt;What next?&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-next&quot; aria-label=&quot;Anchor link for: what-next&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Time to put the tool to use. You ought to start seeing definitions appearing on &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;learn&#x2F;textbook&#x2F;&quot;&gt;Extracts&lt;&#x2F;a&gt; over the next few days. Through some fiddling with Zola shortcodes, there’s an autogenerated &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;experiments&#x2F;vocabulary&#x2F;&quot;&gt;vocabulary list&lt;&#x2F;a&gt; of all the words defined across the site.&lt;&#x2F;p&gt;
&lt;p&gt;In addition to these definitions, you may see some &lt;em&gt;annotations&lt;&#x2F;em&gt; showing up (but that’s a post for later).&lt;&#x2F;p&gt;
&lt;p&gt;I’ll see if I can get the tool working as a web &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;experiments&#x2F;&quot;&gt;experiment&lt;&#x2F;a&gt;, too. Watch this space!&lt;&#x2F;p&gt;
&lt;hr&gt;&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;In the spirit of the &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;filtered-unfiltered&#x2F;&quot;&gt;earlier experiment&lt;&#x2F;a&gt;, of course. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</description>
      </item>
      <item>
          <title>Printing a nano newspaper</title>
          <pubDate>Thu, 16 Jan 2025 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/thermal-newspaper/</link>
          <guid>https://maxbruges.com/blog/thermal-newspaper/</guid>
          <description xml:base="https://maxbruges.com/blog/thermal-newspaper/">&lt;p&gt;Reading things on paper is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;phys.org&#x2F;news&#x2F;2024-02-screens-paper-effective-absorb-retain.html&quot;&gt;better for your brain&lt;&#x2F;a&gt;, and I’ve got a thermal printer in a box gathering dust.&lt;&#x2F;p&gt;
&lt;p&gt;Rather than blearily scrolling through BBC News first thing, why not get the news from a miniature newspaper, freshly printed each morning?  It’s not quite &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cyclingweekly.com&#x2F;news&#x2F;sky-before-screens-has-made-me-a-better-cyclist-could-it-work-for-you&quot;&gt;“sky before screens”&lt;&#x2F;a&gt;, but &lt;em&gt;“paper before pixels”&lt;&#x2F;em&gt; has a ring to it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;nano-paper.webp&quot; alt=&quot;The finished product, a newspaper printed on thermal paper showing the date, weather and news headlines&quot; &#x2F;&gt;
&lt;em&gt;Behold, a literal &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Doomscrolling&quot;&gt;doom scroll&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In this post, we’ll go through setting up the &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;thermal-newspaper&#x2F;#heating-up-the-press&quot;&gt;printer&lt;&#x2F;a&gt;, formatting the &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;thermal-newspaper&#x2F;#fun-with-formatting&quot;&gt;text&lt;&#x2F;a&gt;, and finally using AI to generate our &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;thermal-newspaper&#x2F;#the-news-digested&quot;&gt;summarised headlines&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;heating-up-the-press&quot;&gt;Heating up the press&lt;a class=&quot;zola-anchor&quot; href=&quot;#heating-up-the-press&quot; aria-label=&quot;Anchor link for: heating-up-the-press&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The first step is &lt;sup&gt;re-&lt;&#x2F;sup&gt;learning&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; how to operate the printer itself. It’s a fairly standard model from our friends at the great electronics bazaar of Shenzen; one of hundreds that can be found on Amazon or Ali Express. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aliexpress.com&#x2F;item&#x2F;1005005900329185.html?gatewayAdapt=glo2ara&quot;&gt;This&lt;&#x2F;a&gt; is my model, but frankly they’re so commoditised that these steps ought to work regardless.&lt;&#x2F;p&gt;
&lt;p&gt;Start by connecting the printer directly over USB.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; On Linux&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; we can run this command to see if it shows up in USB directory…&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; ls &#x2F;dev&#x2F;usb
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;lp0
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There it is! &lt;code&gt;&#x2F;dev&#x2F;usb&#x2F;lp0&lt;&#x2F;code&gt; is the path to the printer. Printing something with it is surprisingly easy: we simply &lt;code&gt;echo&lt;&#x2F;code&gt; directly to that path:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Hello world!&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;gt;&amp;gt; &#x2F;dev&#x2F;usb&#x2F;lp0
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If all is well, you’ll hear a happy whirr and a single line will have been printed to the thermal paper. It’s often worth printing a couple of blank lines to make it easier to take the paper out, which you can with &lt;code&gt;echo &quot; &quot;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fun-with-formatting&quot;&gt;Fun with formatting&lt;a class=&quot;zola-anchor&quot; href=&quot;#fun-with-formatting&quot; aria-label=&quot;Anchor link for: fun-with-formatting&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;thermal-newspaper&#x2F;aside-note&quot;&gt;&lt;&#x2F;a&gt; If you’d like to get more advanced, there are a few libraries out there for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mike42&#x2F;escpos-php&quot;&gt;php&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jbittencourt&#x2F;python-escpos&quot;&gt;python&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Thermal printers can be controlled using a common language of &lt;code&gt;Escape&lt;&#x2F;code&gt; codes. They don’t all have access to the same vocabulary of commands - the sort that allows for fancy formatting &lt;em&gt;etcetera&lt;&#x2F;em&gt; - but the basics are pretty consistent.&lt;&#x2F;p&gt;
&lt;p&gt;Our model here is particularly vocabulary-poor. By trial and error, I found it can only really manage two different fonts (one even less readable than the standard) and a double-size font good for headers. No matter - that should suffice for our needs.&lt;&#x2F;p&gt;
&lt;p&gt;To set a format, we enter the &lt;code&gt;ESC&lt;&#x2F;code&gt; character - &lt;code&gt;\x1B&lt;&#x2F;code&gt; - followed by a given number. To print in double-size, for instance, we include the designated &lt;code&gt;Escape&lt;&#x2F;code&gt; code (!1) in the &lt;code&gt;echo&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ESC&lt;&#x2F;span&gt;&lt;span&gt;=&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;\x1B&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;amp;&amp;amp; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ESC&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;}!1 This is big &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ESC&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;}@ and this is back to normal&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;These codes are helpfully &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mike42.me&#x2F;blog&#x2F;what-is-escpos-and-how-do-i-use-it&quot;&gt;documented here&lt;&#x2F;a&gt; by Mike Billington, scavenged from poorly formatted Epson documentation. Mike’s guides are extremely good, and the best place to look if you get stuck on anything ESC&#x2F;POS.&lt;&#x2F;p&gt;
&lt;p&gt;The printer will do exactly - and &lt;em&gt;only&lt;&#x2F;em&gt; - what we explicitly tell it to. That means that niceties like word-wrapping need to be implemented manually, which I ended up doing through a &lt;code&gt;bash&lt;&#x2F;code&gt; function.&lt;&#x2F;p&gt;
&lt;p&gt;Combine this with some basic &lt;code&gt;sed&lt;&#x2F;code&gt; and &lt;code&gt;grep&lt;&#x2F;code&gt;, and we’ve soon got a very rudimentary desktop publisher for our printer:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;word-wrapped paragraphs&lt;&#x2F;li&gt;
&lt;li&gt;double-size font for titles (indicated with a markdown-style &lt;code&gt;#&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;a cut-off line at the end&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Simply pipe in the text you want printed and out it will whirr. You can download my &lt;a href=&quot;&#x2F;files&#x2F;tprint.sh&quot;&gt;full printing script here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;getting-the-content&quot;&gt;Getting the content&lt;a class=&quot;zola-anchor&quot; href=&quot;#getting-the-content&quot; aria-label=&quot;Anchor link for: getting-the-content&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;In the spirit of analogue minimalism, we only want three things on our newspaper: the date, the weather and the news.&lt;&#x2F;p&gt;
&lt;p&gt;The date is easy, a quick &lt;code&gt;date +&quot;# %a %d %h %y&quot;&lt;&#x2F;code&gt;, with the octothorpe at the front letting the printing script know that this is the title.&lt;&#x2F;p&gt;
&lt;p&gt;The weather we can use the excellent &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wttr.in&quot;&gt;wttr.in&lt;&#x2F;a&gt; service:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; curl &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;wttr.in&#x2F;Dubai?format=&amp;quot;Dubai:+%f,+%C\n&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; | &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sed &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;s&#x2F;°&#x2F;&#x2F;g&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Dubai: +25C, Clear&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This gives us a nice clean string with temperature and conditions. The little &lt;code&gt;sed&lt;&#x2F;code&gt; command is there to strip out the degree symbol, which Shenzen’s finest helpfully renders as a random Chinese character.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-news-digested&quot;&gt;The news, digested&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-news-digested&quot; aria-label=&quot;Anchor link for: the-news-digested&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Getting the headlines is a trickier matter. We’re going to use GPT-4o-mini to help condense down the news, but we’ve got to get the raw material in the first place. There’s a bit of a vogue for minimalist, brutalist, text-only sites at the moment - call it the HackerNews effect - and I particularly like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neuters.de&#x2F;&quot;&gt;neuters&lt;&#x2F;a&gt;. But for all their opinionated clarity, they’re still &lt;em&gt;webpages&lt;&#x2F;em&gt;, and we want something purely textual.&lt;&#x2F;p&gt;
&lt;p&gt;Time to reach for old faithful: &lt;code&gt;RSS&lt;&#x2F;code&gt;. The Guardian (when they aren’t &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reuters.com&#x2F;business&#x2F;media-telecom&#x2F;britains-guardian-group-agrees-sell-observer-newspaper-tortoise-media-2024-12-06&#x2F;&quot;&gt;selling off&lt;&#x2F;a&gt; beloved media brands) still runs an excellent RSS feed. Quick, free, and machine readable - ideal for our needs.&lt;&#x2F;p&gt;
&lt;p&gt;We start by parsing the XML data of the RSS feed, using the utl &lt;code&gt;xmllint&lt;&#x2F;code&gt;&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-4-1&quot;&gt;&lt;a href=&quot;#fn-4&quot;&gt;[4]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;curl -s &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;https:&#x2F;&#x2F;feeds.theguardian.com&#x2F;theguardian&#x2F;uk&#x2F;rss&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; \
&lt;&#x2F;span&gt;&lt;span&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;xmllint --xpath &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;(&#x2F;&#x2F;item&#x2F;title|&#x2F;&#x2F;item&#x2F;description)[position() &amp;lt;= 16]&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; -
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This filters the feed so that it returns only the title and description for each news story. So we don’t totally hammer our API (and credit card) when it comes to processing, I’ve limited the feed to only 16 items or stories. The Guardian occasionally includes some HTML in the descriptions, which we can strip out with:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sed &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;s&#x2F;href=.*&amp;amp;gt;&#x2F;&#x2F;g&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; | &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sed &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;s&#x2F;&amp;amp;lt;&#x2F;&#x2F;g&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; \
&lt;&#x2F;span&gt;&lt;span&gt;| &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sed &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;s&#x2F;&amp;amp;gt;&#x2F;&#x2F;g&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; | &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;sed &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;s|&amp;lt;title&amp;gt;|\n&amp;lt;title&amp;gt;|g&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We’ve now got a lovely, clean block of news to feed into the LLM.&lt;&#x2F;p&gt;
&lt;p&gt;This prompt consistently yields a condensed summary of the big stories:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;QUERY&lt;&#x2F;span&gt;&lt;span&gt;=&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Here is today&amp;#39;s news, summarise it in five bullet-points: &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;NEWS&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;. Respond with a five bullet-point summary of today&amp;#39;s news. You can ignore stories that are less newsworthy or important. Keep each summary to no more than 18 words. Follow this format: &amp;#39;&#x2F;&#x2F;  BRIEF HEADLINE: More details about the story, summarising the key events, location etc.&amp;#39; &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;the-finished-product&quot;&gt;The finished product&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-finished-product&quot; aria-label=&quot;Anchor link for: the-finished-product&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Assuming all goes well and GPT-4o-mini delivers the goods, we’re ready to go to press.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;Echo&lt;&#x2F;code&gt; the output - plus the title and weather - all into &lt;code&gt;&#x2F;dev&#x2F;usb&#x2F;lp0&lt;&#x2F;code&gt;, and…&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;tprinter.gif&quot; alt=&quot;The finished product, a newspaper printed on thermal paper showing the date, weather and news headlines&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Wonderful. All that’s left is to check we’re full loaded with thermal paper, and to schedule a &lt;code&gt;cron&lt;&#x2F;code&gt; job to run the script every morning.&lt;&#x2F;p&gt;
&lt;p&gt;Now, we can wake up to our latest &lt;em&gt;Nano Newspaper&lt;&#x2F;em&gt;. Ideal with an equally tiny cup of espresso (though maybe &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.pca.state.mn.us&#x2F;business-with-us&#x2F;bpa-and-bps-in-thermal-paper&quot;&gt;wash your hands first&lt;&#x2F;a&gt;). ☕&lt;&#x2F;p&gt;
&lt;hr&gt;&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;My Github repo tells me I started a similar project nearly two years ago, but have clearly forgotten all the fiddly bits. If only I’d written notes on &lt;em&gt;paper&lt;&#x2F;em&gt;. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;This printer also proudly advertises Bluetooth connectivity, which requires an Android app installed via an &lt;code&gt;.apk&lt;&#x2F;code&gt; from &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;baidu.com&quot;&gt;baidu.com&lt;&#x2F;a&gt;. No thanks. &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;If you’re trying this on Windows: may God go with thee, follow Mike’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mike42.me&#x2F;blog&#x2F;2015-04-getting-a-usb-receipt-printer-working-on-windows&quot;&gt;guide here&lt;&#x2F;a&gt;. &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-4&quot;&gt;
&lt;p&gt;If this isn’t on your system - as was the case with my Pi Zero - you can install it with the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;manpages.debian.org&#x2F;buster&#x2F;libxml2-utils&#x2F;xmllint.1.en.html&quot;&gt;libxml2-utils&lt;&#x2F;a&gt; package. &lt;a href=&quot;#fr-4-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</description>
      </item>
      <item>
          <title>Small sites and short trips</title>
          <pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://maxbruges.com/blog/14kb/</link>
          <guid>https://maxbruges.com/blog/14kb/</guid>
          <description xml:base="https://maxbruges.com/blog/14kb/">&lt;p&gt;Chances are you aren’t reading this from a satellite-connected oil-platform, deep in the North Sea, but if you are… &lt;em&gt;you’re welcome&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Almost all&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; the &lt;code&gt;HTML&lt;&#x2F;code&gt; pages that make up this site weigh in at under &lt;em&gt;14 kilobytes&lt;&#x2F;em&gt;.&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; Why does that matter? Because it’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;endtimes.dev&#x2F;why-your-website-should-be-under-14kb-in-size&#x2F;&quot;&gt;much faster&lt;&#x2F;a&gt; for our imaginary drilling friend.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;oil-platform.webp&quot; alt=&quot;An oil platform at night&quot; &#x2F;&gt;
&lt;em&gt;For those downloading from the sea 🎶&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It’s all &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;id&#x2F;draft-ietf-quic-recovery-26.html#section-6.8-3&quot;&gt;terribly complicated&lt;&#x2F;a&gt;, but 14kb is about the maximum amount of data you can wring from your first connection to a web-server&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-3-1&quot;&gt;&lt;a href=&quot;#fn-3&quot;&gt;[3]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;. That means that if your browser can fetch the key components of the webpage in one quick, 14kb round-trip, then you won’t need to hang around waiting for the page to load as another round-trip gets underway.&lt;&#x2F;p&gt;
&lt;p&gt;This isn’t worth worrying about most of the time. But if you’re some poor soul living off a high-latency satellite connection, those round-trips add up: from laptop, to router, all the way up to a satellite in orbit, back down to a base-station, to a server… then all the way back again. Not to mention the eye-watering data fees.&lt;&#x2F;p&gt;
&lt;p&gt;I’ll admit, I don’t expect the deep-sea-oil-rig-engineer demographic to be a massive part of this site’s audience, but it’s good to build something that is as accessible as possible, whatever connection you’re on. Nearly &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;datareportal.com&#x2F;reports&#x2F;digital-2024-deep-dive-the-state-of-internet-adoption&quot;&gt;100 million&lt;&#x2F;a&gt; people came online for the first time last year, and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.ericsson.com&#x2F;en&#x2F;reports-and-papers&#x2F;mobility-report&#x2F;articles&#x2F;enabling-internet-for-all&quot;&gt;most of those&lt;&#x2F;a&gt; were on laggy mobile connections and slow hardware. Why waste their money, time and battery-life on junk?&lt;&#x2F;p&gt;
&lt;p&gt;More than that, &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;markdown&#x2F;&quot;&gt;limitations are good&lt;&#x2F;a&gt;. Less is more, and killing your darlings - be they &lt;code&gt;&amp;lt;HTML&amp;gt;&lt;&#x2F;code&gt; tags or &lt;del&gt;superflous&lt;&#x2F;del&gt; adjectives - is a healthy practice for any creator. The magic 14kb mark is a precise, achievable target to aim at when building the site.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;kill-your-darlings.webp&quot; alt=&quot;A still from ‘Kill Your Darlings’&quot; &#x2F;&gt;
&lt;em&gt;“I saw the best webpages of my generation driven mad by React components”&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We get better at things when we have these sorts of clearly-defined and tangible goals. It contextualises decisions and provides a yardstick against which to measure the importance of things. Do I &lt;em&gt;really&lt;&#x2F;em&gt; need this chunk of Javascript here? Could this glob of inline &lt;code&gt;css&lt;&#x2F;code&gt; be squidged into a stylesheet?&lt;&#x2F;p&gt;
&lt;p&gt;I ended up writing a quick &lt;code&gt;bash&lt;&#x2F;code&gt; script to tighten up the &lt;em&gt;measure-tweak-evaluate&lt;&#x2F;em&gt; loop. All it does is cycle through the directory of webpages and flag up those over 14kb, but that’s all it needs to do. &lt;a href=&quot;&#x2F;files&#x2F;bytesize.sh&quot;&gt;You can download the script here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;bytesize.webp&quot; alt=&quot;Bytesize script in action&quot; &#x2F;&gt;
&lt;em&gt;And this screenshot? Exactly 14kb, of course.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The real work, the editing, is what comes next. And in that spirit of brevity, I’ll end here.&lt;&#x2F;p&gt;
&lt;hr&gt;&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;bar the odd chunky &lt;a href=&quot;&#x2F;experiments&quot;&gt;Experiment&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;As a point of reference: the entire blog section of this site is smaller than just the &lt;em&gt;fonts&lt;&#x2F;em&gt; that your browser downloads when you open the BBC.com homepage (7 different variants of Reith Sans? Really?). &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-3&quot;&gt;
&lt;p&gt;&lt;em&gt;usually&lt;&#x2F;em&gt;, but not the rule. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;id&#x2F;draft-ietf-quic-recovery-26.html&quot;&gt;Some light bedtime reading if you’d like to know more.&lt;&#x2F;a&gt; &lt;a href=&quot;#fr-3-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</description>
      </item>
      <item>
          <title>Making a little, local LLM</title>
          <pubDate>Sat, 04 Jan 2025 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/little-local-llm/</link>
          <guid>https://maxbruges.com/blog/little-local-llm/</guid>
          <description xml:base="https://maxbruges.com/blog/little-local-llm/">&lt;p&gt;I’ve been using &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;howdoi&#x2F;&quot;&gt;my nifty terminal helper&lt;&#x2F;a&gt; to write the &lt;code&gt;bash&lt;&#x2F;code&gt; commands that my brain refuses to remember. It’s quick and accurate (enough); the best tool yet I’ve built using an LLM.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;little-engine-could.webp&quot; alt=&quot;The Little Engine That Could aside&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The only downside is its reliance on the Claude &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;support.anthropic.com&#x2F;en&#x2F;collections&#x2F;5370014-anthropic-api-api-console&quot;&gt;API&lt;&#x2F;a&gt;, which means it’s useless without an internet connection and a credit card&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;But can we get another version to run &lt;em&gt;locally&lt;&#x2F;em&gt;? No APIs, no tech companies &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.law.com&#x2F;legaltechnews&#x2F;2024&#x2F;03&#x2F;20&#x2F;legal-industry-players-missed-a-microsoft-ai-loophole-that-could-expose-confidential-data&#x2F;&quot;&gt;leaking our data&lt;&#x2F;a&gt;; just our own little AI, on our own computer.&lt;&#x2F;p&gt;
&lt;p&gt;In short: yes. But we need to be clever about it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;little-local-llm&#x2F;#how&quot;&gt;&lt;strong&gt;🛠 Click here to jump straight to the HOW-TO 🛠&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;super-models&quot;&gt;Super Models&lt;a class=&quot;zola-anchor&quot; href=&quot;#super-models&quot; aria-label=&quot;Anchor link for: super-models&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;A quick refresher on the basics, first.&lt;&#x2F;p&gt;
&lt;p&gt;‘AI’ bots like ChatGPT and Claude are powered by &lt;strong&gt;Large Language Models&lt;&#x2F;strong&gt; (LLMs). The margins of this blog are too small (and its author insufficiently STEM’d) to contain a full explanation of how these work, but essentially they’re programs for predicting patterns of words.&lt;&#x2F;p&gt;
&lt;p&gt;These predictions are made based on &lt;em&gt;parameters&lt;&#x2F;em&gt; drawn from massive bodies of text. Us internet-connected humans have been merrily churning out text to the Web for decades, and the LLMs ingest this to ‘learn’ what words usually come after each other.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;nyt-frontpage.webp&quot; alt=&quot;NYT frontpage aside&quot; &#x2F;&gt;
&lt;em&gt;Hoover fast and break &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bbc.com&#x2F;news&#x2F;technology-67826601&quot;&gt;copyright&lt;&#x2F;a&gt;.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Models differ from one another in their training data and their weightings: what stuff the LLM has read and what it attaches importance to. Some models lean more towards coding-related data, others are trained on specialist material to suit their use-case.&lt;&#x2F;p&gt;
&lt;p&gt;In the beginning, bigger was better: the more data you hoovered up, the more parameters your model could contain and the better its responses could be. OpenAI’s GPT-2 contained 1.5 billion parameters when it was released in 2019; by 2024, their GPT-4 model had &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;the-decoder.com&#x2F;gpt-4-architecture-datasets-costs-and-more-leaked&#x2F;&quot;&gt;somewhere&lt;&#x2F;a&gt; north of 1.4 &lt;strong&gt;trillion&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The problem with such massive models is that they need similarly colossal hardware to actually run. There’s a reason Nvidia is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bloomberg.com&#x2F;news&#x2F;articles&#x2F;2024-06-18&#x2F;nvidia-becomes-world-s-largest-firm-as-ai-rally-steams-ahead?srnd=homepage-americas&amp;amp;sref=CIpmV6x8&quot;&gt;now the most valuable company on the planet&lt;&#x2F;a&gt;: in the AI gold-rush, they sell the biggest shovels. Shovels that sell for $40,000 and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tomshardware.com&#x2F;tech-industry&#x2F;nvidias-h100-gpus-will-consume-more-power-than-some-countries-each-gpu-consumes-700w-of-power-35-million-are-expected-to-be-sold-in-the-coming-year&quot;&gt;use more power than a house&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Somehow, I don’t think my 9-year old Thinkpad is quite going to cut it with a top-end model.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;small-is-beautiful&quot;&gt;Small is beautiful&lt;a class=&quot;zola-anchor&quot; href=&quot;#small-is-beautiful&quot; aria-label=&quot;Anchor link for: small-is-beautiful&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Although the mega-models tend to get the headlines, there have been some fascinating developments down at the other end of the scale, too. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;azure.microsoft.com&#x2F;en-us&#x2F;blog&#x2F;introducing-phi-3-redefining-whats-possible-with-slms&#x2F;&quot;&gt;Microsoft’s Phi&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.google&#x2F;technology&#x2F;developers&#x2F;gemma-open-models&#x2F;&quot;&gt;Google’s Gemma&lt;&#x2F;a&gt; models are - amongst others - tailored to use a much smaller sets of parameters, to deliver usable performance on much skimpier hardware.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;slm-timeline.webp&quot; alt=&quot;Timeline of SLMs, from https:&#x2F;&#x2F;arxiv.org&#x2F;pdf&#x2F;2409.15790&quot; &#x2F;&gt;
&lt;em&gt;A timeline of Small Language Models&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-2-1&quot;&gt;&lt;a href=&quot;#fn-2&quot;&gt;[2]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The thinking here is that lots of AI tasks can actually be handled using smaller models, running directly on users’ devices, rather than having to send requests off to energy- (and capital-) hungry data centres full of chuntering &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Hopper_(microarchitecture)&quot;&gt;H100s&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And they’re getting &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.technologyreview.com&#x2F;2025&#x2F;01&#x2F;03&#x2F;1108800&#x2F;small-language-models-ai-breakthrough-technologies-2025&#x2F;&quot;&gt;pretty good&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qwen&quot;&gt;Yes We Qwen&lt;a class=&quot;zola-anchor&quot; href=&quot;#qwen&quot; aria-label=&quot;Anchor link for: qwen&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I’ve tinkered with Phi and Gemma. While both are fairly capable, they’re still a little on the large side. My poor X1 isn’t overflowing with RAM - and lacks any discrete GPU - so every MB counts.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;huggingface.co&#x2F;Qwen&#x2F;Qwen2.5-0.5B&quot;&gt;latest and smallest Qwen-coder model&lt;&#x2F;a&gt;, on the other hand, is positively &lt;em&gt;minute&lt;&#x2F;em&gt;: a mere 500MB! That’s half the size of GPT-2, but massively more coherent and capable.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;qwenlogo.webp&quot; alt=&quot;qwen logo aside&quot; &#x2F;&gt;
&lt;em&gt;Just &lt;a href=&quot;&#x2F;images&#x2F;xi.gif&quot;&gt;don’t ask&lt;&#x2F;a&gt; about &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Censorship_of_Winnie-the-Pooh_in_China&quot;&gt;Winnie The Pooh&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It won’t write beautiful sonnets or &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;2023&#x2F;02&#x2F;16&#x2F;technology&#x2F;bing-chatbot-microsoft-chatgpt.html&quot;&gt;fall in love with journalists&lt;&#x2F;a&gt;, but it will pump out passable commands at a snappy pace, with a minimal RAM footprint.&lt;&#x2F;p&gt;
&lt;p&gt;Let’s give it a whirl.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how&quot;&gt;How To 🛠&lt;a class=&quot;zola-anchor&quot; href=&quot;#how&quot; aria-label=&quot;Anchor link for: how&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-install-ollama&quot;&gt;1) Install Ollama&lt;a class=&quot;zola-anchor&quot; href=&quot;#1-install-ollama&quot; aria-label=&quot;Anchor link for: 1-install-ollama&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ollama.com&#x2F;&quot;&gt;Ollama&lt;&#x2F;a&gt; is the go-to software for quickly downloading and running different models. They’ve an &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ollama.com&#x2F;search&quot;&gt;extensive catalogue&lt;&#x2F;a&gt; of pre-packaged LLMs that can be pulled with a single command, and a rudimentary chat interface on the command line. I tend to stick with the CLI version, but you can also set up &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;open-webui&#x2F;open-webui&quot;&gt;OpenWebUI&lt;&#x2F;a&gt; for a nice front-end.&lt;&#x2F;p&gt;
&lt;p&gt;You can &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ollama.com&#x2F;download&quot;&gt;download the latest version of Ollama here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-download-the-model&quot;&gt;2) Download the model&lt;a class=&quot;zola-anchor&quot; href=&quot;#2-download-the-model&quot; aria-label=&quot;Anchor link for: 2-download-the-model&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;There are plenty of small language models to choose from. My &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;little-local-llm&#x2F;#qwen&quot;&gt;current preference&lt;&#x2F;a&gt; is for Alibaba’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ollama.com&#x2F;library&#x2F;qwen2.5-coder:0.5b&quot;&gt;Qwen2.5 Coder&lt;&#x2F;a&gt; model, clocking in at a tiddly 0.5b parameters. Your mileage may vary, so do poke around the catalogue, and perhaps try Gemma or Phi.&lt;&#x2F;p&gt;
&lt;p&gt;To download the model, run:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ollama&lt;&#x2F;span&gt;&lt;span&gt; pull qwen2.5-coder:0.5b
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;3-write-the-modelfile&quot;&gt;3) Write the Modelfile&lt;a class=&quot;zola-anchor&quot; href=&quot;#3-write-the-modelfile&quot; aria-label=&quot;Anchor link for: 3-write-the-modelfile&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;This Qwen model is already weighted towards coding queries, but we want to further refine it to suit our use-case of generating &lt;code&gt;Bash&lt;&#x2F;code&gt; commands.&lt;&#x2F;p&gt;
&lt;p&gt;To do this we make a &lt;code&gt;Modelfile&lt;&#x2F;code&gt;, a set of instructions to tweak the model towards our needs (my &lt;a href=&quot;&#x2F;files&#x2F;Modelfile_cai.txt&quot;&gt;Modelfile is here&lt;&#x2F;a&gt;, which you can copy and paste). First, we specify which model we’re basing our tweaked version on:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;FROM qwen2.5-coder:0.5b
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then we set the most important part of the Modelfile, the system prompt:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;SYSTEM &amp;quot;You are an excellent assistant called CAI. You specialise in generating Bash scripts and commands for use on Unix systems. Respond only with the correct command for the given query. Do not provide any commentary, only respond with the command.&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Given how small our model is already, we want to keep this as brief as possible. From trial and error, I’ve found this to &lt;em&gt;mostly&lt;&#x2F;em&gt; keep CAI on task with delivering one-liners.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, we set the temperature - where on the creative&#x2F;consistent spectrum we want the model to fall:&lt;&#x2F;p&gt;
&lt;pre style=&quot;background-color:#2b303b;color:#c0c5ce;&quot;&gt;&lt;code&gt;&lt;span&gt;PARAMETER temperature 0.7
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can also set other parameters like the size of the context window, but this will do for now.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-run-the-new-local-assistant&quot;&gt;4) Run the new, local assistant&lt;a class=&quot;zola-anchor&quot; href=&quot;#4-run-the-new-local-assistant&quot; aria-label=&quot;Anchor link for: 4-run-the-new-local-assistant&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;With the Modelfile prepared, we can now ask Ollama to build the new model. We’ll call it &lt;code&gt;cai&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ollama&lt;&#x2F;span&gt;&lt;span&gt; create cai&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;path&#x2F;to&#x2F;Modelfile
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Once it’s created, we can now start running it. To ask the model a question, simply use the &lt;code&gt;ollama run cai&lt;&#x2F;code&gt;, followed by the query.&lt;&#x2F;p&gt;
&lt;p&gt;Integrating that with my little &lt;code&gt;cai&lt;&#x2F;code&gt; &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;howdoi&#x2F;&quot;&gt;shell wrapper&lt;&#x2F;a&gt;, we end up with:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;ollama-cai.gif&quot; alt=&quot;screen recording of CAI in action&quot; &#x2F;&gt;
&lt;em&gt;Practically instant, and certainly quicker than an API call&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And there we have it: a fully local, fully offline, fully free command-line assistant. One that &lt;em&gt;won’t&lt;&#x2F;em&gt; fry a knackered Thinkpad.&lt;&#x2F;p&gt;
&lt;hr&gt;&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Thankfully just pennies here and there, rather than £20 a month like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;pricing&quot;&gt;some sort of mug&lt;&#x2F;a&gt;. But still. &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;From &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;pdf&#x2F;2409.15790%5D&quot;&gt;Lu et al.&lt;&#x2F;a&gt;, 2024 &lt;a href=&quot;#fr-2-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</description>
      </item>
      <item>
          <title>Kickstarting, not controlling</title>
          <pubDate>Mon, 30 Dec 2024 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/filtered-unfiltered/</link>
          <guid>https://maxbruges.com/blog/filtered-unfiltered/</guid>
          <description xml:base="https://maxbruges.com/blog/filtered-unfiltered/">&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;filtered-unfiltered&#x2F;note&quot;&gt;&lt;&#x2F;a&gt; &lt;a href=&quot;&#x2F;experiments&#x2F;kickstart&#x2F;?q=How+does+Shakespeare+present+Lady+Macbeth&quot;&gt;Try &lt;strong&gt;Kickstart&lt;&#x2F;strong&gt; 🛵 here&lt;&#x2F;a&gt;, the app that goes with this post.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=41994567&quot;&gt;Hacker News comment&lt;&#x2F;a&gt; started turning a cog in my brain: are we going about LLMs all wrong, by plonking them straight in the hands of the end user?&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;AI, in its current state, really isn’t a tool meant for an end user to interact with…
The best use cases seem to be those that don’t require an end consumer to directly interact with an AI, but their journey through some process is assisted by an AI instead.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;user?id=CharlieDigital&quot;&gt;CharlieDigital, 30&#x2F;10&#x2F;24&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The raw input&#x2F;output pipeline has the broadest possible surface for hallucination and minimal error correction; a few too many &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;2023&#x2F;02&#x2F;16&#x2F;technology&#x2F;bing-chatbot-microsoft-chatgpt.html&quot;&gt;mad pledges of love&lt;&#x2F;a&gt; and the user will quickly assume the whole technology is bad (or worse, requite the love right back).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;filtered-cigs.webp&quot; alt=&quot;Just what the doctor ordered aside&quot; &#x2F;&gt;
&lt;em&gt;So close to ‘LLM’&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I can’t comment on ‘grown-up’ usage of chat LLMs - I think most (even tech-unsavvy) users are pretty comfortable with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;chat.com&quot;&gt;text-prompts as an input&lt;&#x2F;a&gt; - but do think there’s something to be said for &lt;em&gt;filtering&lt;&#x2F;em&gt; our students’ usage of them.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wrappers-don-t-kill-people-prompts-do&quot;&gt;Wrappers don’t kill people, prompts do&lt;a class=&quot;zola-anchor&quot; href=&quot;#wrappers-don-t-kill-people-prompts-do&quot; aria-label=&quot;Anchor link for: wrappers-don-t-kill-people-prompts-do&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Take the most prevalent (&lt;em&gt;viz&lt;&#x2F;em&gt; pervasive) use-cases of LLMs in schools today: generating written responses to homework tasks. Obviously, we don’t &lt;em&gt;want&lt;&#x2F;em&gt; students to do this; it’s just plagiarism with fewer steps. But we’ve got a doubled-up problem of unfiltered LLM output here: no wrapper means the bot can go buck-wild with its answer, and no work-ethic&#x2F;morals&#x2F;care from the student means minimal error-checking on their end.&lt;&#x2F;p&gt;
&lt;p&gt;We live in a world where this happens anyway, and &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;BanGoogle&#x2F;&quot;&gt;Google isn’t getting banned&lt;&#x2F;a&gt; anytime soon.&lt;&#x2F;p&gt;
&lt;p&gt;But what if we could nudge them towards a &lt;em&gt;filtered&lt;&#x2F;em&gt; version of the bot, one that doesn’t introduce quite as much random nonsense, and - God help us! - potentially nudges them towards some actual learning?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sentenced-to-life&quot;&gt;Sentenced to life&lt;a class=&quot;zola-anchor&quot; href=&quot;#sentenced-to-life&quot; aria-label=&quot;Anchor link for: sentenced-to-life&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;In my wonderful fantasy world, our students - when given an essay homework&lt;sup class=&quot;footnote-reference&quot; id=&quot;fr-1-1&quot;&gt;&lt;a href=&quot;#fn-1&quot;&gt;[1]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; - reach not for the raw chatbox but our carefully prepped light wrapper. They reach for…
&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;experiments&#x2F;kickstart&#x2F;&quot;&gt;&lt;code&gt;Kickstart 🛵&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;They plonk in their homework task as before, though rather than the LLM spitting out a full essay, it returns something a little more carefully considered: sentence starters and ideas for what to write.&lt;&#x2F;p&gt;
&lt;style&gt;
img[alt*=&#x27;Kickstart&#x27;] {
    border: 2px solid var(--t);
    padding:0px;
}
&lt;&#x2F;style&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;kickstart-demo.webp&quot; alt=&quot;the Kickstart app in action&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;experiments&#x2F;kickstart&#x2F;&quot;&gt;Kickstart&lt;&#x2F;a&gt; isn’t going to write their essay for them, but what it will do is get them &lt;em&gt;going&lt;&#x2F;em&gt;, overcoming the initial activation energy of thought.&lt;&#x2F;p&gt;
&lt;p&gt;Sentence starters are often the most effective form of scaffolding we can employ, tricking the brain into working a little like an LLM to test out what it &lt;em&gt;thinks&lt;&#x2F;em&gt; might be the right answer.&lt;&#x2F;p&gt;
&lt;p&gt;And what they end up writing might be wrong, but that’s fine! Because they’re little learning humans, not inscrutable monolithic software stacks &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;arstechnica.com&#x2F;ai&#x2F;2024&#x2F;10&#x2F;hospitals-adopt-error-prone-ai-transcription-tools-despite-warnings&#x2F;&quot;&gt;allocating life-saving care&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-man-can-dream&quot;&gt;A man can dream&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-man-can-dream&quot; aria-label=&quot;Anchor link for: a-man-can-dream&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Of course, this is a fantasy, and what reason do they have to reach for &lt;code&gt;Kickstart&lt;&#x2F;code&gt; rather than &lt;code&gt;openai.com&lt;&#x2F;code&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;That being said, the path of least resistance is a powerful thing. Couple this with a tougher line on AI-generated plagiarism (and better training for staff on how to spot it), and one could nudge a few into using LLMs the right way, the way any technology is supposed to be used: as an &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;Trial-by-Error&#x2F;&quot;&gt;augmentation&lt;&#x2F;a&gt; - not replacement - for your brain.&lt;&#x2F;p&gt;
&lt;hr&gt;&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;Although we all know this isn’t what homework is for. Haven’t you heard of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sciencedirect.com&#x2F;science&#x2F;article&#x2F;pii&#x2F;S2405844022038178&quot;&gt;Flipped learning&lt;&#x2F;a&gt;? &lt;a href=&quot;#fr-1-1&quot;&gt;↩&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</description>
      </item>
      <item>
          <title>Reading the dictionary and other lies</title>
          <pubDate>Sun, 08 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://maxbruges.com/blog/PowerOfReading/</link>
          <guid>https://maxbruges.com/blog/PowerOfReading/</guid>
          <description xml:base="https://maxbruges.com/blog/PowerOfReading/">&lt;p&gt;Don’t tell them, but I’ve been lying to my Year 11s.&lt;&#x2F;p&gt;
&lt;p&gt;What started as a joke is now well on its way to becoming an essential part of our daily routine. Every morning they push me further into it, and every day I desperately try to bluff my way out of it. In fact, it’s getting to the point where I’m starting to believe it myself.&lt;&#x2F;p&gt;
&lt;p&gt;The lie? That I’ve read and memorised &lt;em&gt;every word in the dictionary.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;dr-johnson.webp&quot; alt=&quot;Dr Johnson, reading his dictionary&quot; &#x2F;&gt;
&lt;em&gt;“How do you spell &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;apnews.com&#x2F;article&#x2F;oxford-word-year-brain-rot-b43d864aed7f7d9d039edbd9b8a19ffb&quot;&gt;brainrot&lt;&#x2F;a&gt;?”&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Year 11s being Year 11s, they have now made it their unshakeable mission to prove me a liar. Each lesson now begins with a mad scramble for the class dictionaries, with each of them feverishly flicking through to try to find the most obscure word they can to trip up their duplicitous English teacher.&lt;&#x2F;p&gt;
&lt;p&gt;But so far, I’m getting away with it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;words-words-everywhere&quot;&gt;Words, words, everywhere&lt;a class=&quot;zola-anchor&quot; href=&quot;#words-words-everywhere&quot; aria-label=&quot;Anchor link for: words-words-everywhere&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The shocking truth is I &lt;em&gt;have&lt;&#x2F;em&gt; read all the words in the dictionary, just not on those densely-typed, tissue-thin pages. Like any good reader, I’ve picked them up everywhere else.&lt;&#x2F;p&gt;
&lt;p&gt;This is the great miracle of reading: it is a self-reinforcing loop. The more one reads, the better one gets, and the more one &lt;em&gt;can&lt;&#x2F;em&gt; read, &lt;em&gt;ad infinitum&lt;&#x2F;em&gt;, until you find yourself confidently conning 15-year-olds that you definitely know what &lt;code&gt;antidisestablishmentarianism&lt;&#x2F;code&gt; means.&lt;&#x2F;p&gt;
&lt;p&gt;As teachers, we’re pretty good at teaching our students to focus on a text, to read and re-read for additional meaning, inference and connotations. Whether it’s source-work in History, poetic analysis in English, or translation tasks in MFL, students are well-drilled in drilling down.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;robot-writer.webp&quot; alt=&quot;aside&quot; &#x2F;&gt;
&lt;em&gt;Millsandboontron hard at work&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But in a prolix world, are we doing them a disservice? We’re well and truly into a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.statista.com&#x2F;chart&#x2F;19058&#x2F;number-of-websites-online&#x2F;&quot;&gt;post-scarcity economy&lt;&#x2F;a&gt; when it comes to writing. When &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog#220523&quot;&gt;AI can churn out&lt;&#x2F;a&gt; treatises and stories in minutes, the real skill comes from a reader’s ability to quickly and efficiently parse a text for purpose and veracity. The nature of a curriculum means we rarely place our students in a position where they need to make these snap judgments from skimmed content: every word we place in front of them has been pre-filtered by us (or our exam boards) for maximum curriculum effectiveness.&lt;&#x2F;p&gt;
&lt;p&gt;Really, we need our students to build the habit of reading as much as possible, as broadly as possible. They don’t just need to be confident in understanding, but in seeking out and ploughing through texts.&lt;&#x2F;p&gt;
&lt;p&gt;So what should we do to turbo-charge this process?&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-skate-don-t-slog&quot;&gt;1) Skate, don’t slog&lt;a class=&quot;zola-anchor&quot; href=&quot;#1-skate-don-t-slog&quot; aria-label=&quot;Anchor link for: 1-skate-don-t-slog&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Reading more, quickly, is sometimes better than reading less, slowly.&lt;&#x2F;strong&gt; There’s a time and a place for careful, close analysis of texts. But it’s easy to get bogged down in detail and miss the benefits that accrue for reading briskly and widely. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;onlinelibrary.wiley.com&#x2F;doi&#x2F;abs&#x2F;10.1111&#x2F;lit.12141&quot;&gt;The evidence is clear&lt;&#x2F;a&gt; that readers get better the more reading they’re exposed to, even with tricky texts:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Simply reading challenging, complex novels aloud and at a fast pace in each lesson repositioned ‘poorer readers’ as ‘good’ readers, giving them a more engaged uninterrupted reading experience over a sustained period.”&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;onlinelibrary.wiley.com&#x2F;doi&#x2F;abs&#x2F;10.1111&#x2F;lit.12141&quot;&gt;UKLA 2018&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Let students skate along the surface. With practice, they’ll learn what they can and should skip over for the sake of fluency. Just be ready to dive in to rescue them if they slip through the thin ice into confusion.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-location-location-location&quot;&gt;2) Location, Location, Location&lt;a class=&quot;zola-anchor&quot; href=&quot;#2-location-location-location&quot; aria-label=&quot;Anchor link for: 2-location-location-location&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Give students trusted sources they can draw from for their texts, and signpost them well.&lt;&#x2F;strong&gt; Libraries are the natural source for this in the physical realm, but it’s the digital that is the first port of call for most of our students. Train students early on about the sites they can trust - not just for their content but also the quality of their writing.&lt;&#x2F;p&gt;
&lt;p&gt;One of the best things I ever did as a trainee was start saving down digital versions of classic texts in a Google Drive. Now it functions as a one-stop-shop for my students (or, more often, their parents) looking for something to load up on the Kindle or tablet. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drive.google.com&#x2F;drive&#x2F;folders&#x2F;1aUTVde-LrUne3zvphTw6h1rTnVcXr0cj?usp=share_link&quot;&gt;Feel free to use it yourself&lt;&#x2F;a&gt; - no library card required.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-if-it-reads-it-leads&quot;&gt;3) If it reads, it leads&lt;a class=&quot;zola-anchor&quot; href=&quot;#3-if-it-reads-it-leads&quot; aria-label=&quot;Anchor link for: 3-if-it-reads-it-leads&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Expose students to as many types of text as you can find.&lt;&#x2F;strong&gt; The primacy of The Book in schools - particularly the novel - is easy to understand. It’s a discrete object, adaptable to a teaching unit, requiring little to no secondary sources to access and often following structures even the least confident of readers can &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.researchgate.net&#x2F;publication&#x2F;351634281_The_Sympathetic_Plot_Its_Psychological_Origins_and_Implications_for_the_Evolution_of_Fiction&quot;&gt;innately understand&lt;&#x2F;a&gt;. But it’s only one of a myriad of different text types that students will encounter in their lives (and one that many adults &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;today.yougov.com&#x2F;entertainment&#x2F;articles&#x2F;48239-54-percent-of-americans-read-a-book-this-year&quot;&gt;happily ignore&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;guy-fawkes-signature.webp&quot; alt=&quot;aside&quot; &#x2F;&gt;
Wherever you can, experiment with different text types. Articles, ad campaigns, tweets: if it’s got words, give it a go. Our introduction to Macbeth has everything from cartoons, to private letters, to Guy Fawkes’s &lt;a href=&quot;&#x2F;images&#x2F;guy-fawkes-signature.webp&quot;&gt;tortured signature&lt;&#x2F;a&gt;, all before they read a word of Shakespeare’s folio.&lt;&#x2F;p&gt;
&lt;p&gt;This medium-agnostic approach not only &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;educationendowmentfoundation.org.uk&#x2F;education-evidence&#x2F;guidance-reports&#x2F;literacy-ks-1&quot;&gt;builds students’ confidence and fluency&lt;&#x2F;a&gt;, but also breaks down the notion that Reading-with-a-capital-R is something confined to the English classroom, between the A5 covers of a Book.&lt;&#x2F;p&gt;
&lt;p&gt;If students can learn that ‘to read’ is as much a passive skill as an active one, they’ll be well equipped to face the word-flood of the modern world.&lt;&#x2F;p&gt;
&lt;p&gt;And - much more importantly - they might even learn the word that catches me out.&lt;&#x2F;p&gt;
&lt;p&gt;Until then, the dictionary duel continues.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The AI I use every day</title>
          <pubDate>Sun, 29 Sep 2024 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/howdoi/</link>
          <guid>https://maxbruges.com/blog/howdoi/</guid>
          <description xml:base="https://maxbruges.com/blog/howdoi/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;how-do-i.gif&quot; alt=&quot;how&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It’s been nearly two years since I started fiddling with LLMs. In many ways, they’re the perfect technology to &lt;em&gt;tinker&lt;&#x2F;em&gt; with: zero up-front cost, straight-forward documentation, with plaintext input and output.&lt;&#x2F;p&gt;
&lt;p&gt;As with most overhyped start-ups, my tinkering has largely been in the form of writing fancy wrappers around an API. I’ve tested out a few - some &lt;a href=&quot;&#x2F;experiments&#x2F;bard-or-bot.html&quot;&gt;silly&lt;&#x2F;a&gt;, some &lt;a href=&quot;&#x2F;experiments&#x2F;flambards.html&quot;&gt;deadly serious&lt;&#x2F;a&gt;, and some making use of my &lt;a href=&quot;&#x2F;experiments&#x2F;codefixer.html&quot;&gt;day-job pedagogy&lt;&#x2F;a&gt; to channel the Magic Talking Computers into something useful.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;one-question-one-answer&quot;&gt;One question, one answer&lt;a class=&quot;zola-anchor&quot; href=&quot;#one-question-one-answer&quot; aria-label=&quot;Anchor link for: one-question-one-answer&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;But the best application I’ve built - the one I use every day, a dozen times a day (and the reason OpenAI and Anthropic have my credit card details) - is easily the simplest.&lt;&#x2F;p&gt;
&lt;p&gt;Sometimes, you just want the computer to do The Thing; to turn your fleshy human thoughts into clean coded commands. And that’s exactly what I built &lt;code&gt;cai&lt;&#x2F;code&gt; to do:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;cai.gif&quot; alt=&quot;CAI in action in the terminal&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;One question, one actionable answer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;silence-is-a-virtue&quot;&gt;Silence is a virtue&lt;a class=&quot;zola-anchor&quot; href=&quot;#silence-is-a-virtue&quot; aria-label=&quot;Anchor link for: silence-is-a-virtue&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;No conversation, no commentary, no buttons or widgets. Just a single call and response with an LLM, turning the unknown into the known.&lt;&#x2F;p&gt;
&lt;p&gt;For the quick things I’ve not learnt, or the stupid things I’ve forgotten, it’s ideal.&lt;&#x2F;p&gt;
&lt;p&gt;And it works about 90% of the time! It’s cut my StackOverflow and Arch Wiki lurking time in half. What was once a click through three forums is now a single line in the terminal.&lt;&#x2F;p&gt;
&lt;p&gt;After a couple of weeks of use, I did add a &lt;code&gt;-verbose&lt;&#x2F;code&gt; flag; having a few lines of explanatory commentary can be valuable when working through thornier problems. There’s also a &lt;code&gt;-chat&lt;&#x2F;code&gt; option for follow-up questions, but I’ve rarely had the need to use it (much to my past-self’s disappointment, and the unused overkill-SQLiteDB he set up for that purpose).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-it-works&quot; aria-label=&quot;Anchor link for: how-it-works&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;As with all good things, it started life as a &lt;code&gt;bash&lt;&#x2F;code&gt;, &lt;code&gt;curl&lt;&#x2F;code&gt;-ing to the OpenAI endpoint. It then grew into a Python script, switching to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;news&#x2F;claude-3-haiku&quot;&gt;Anthropic’s Claude&lt;&#x2F;a&gt; to include some message history (&lt;code&gt;Haiku&lt;&#x2F;code&gt; is an excellent little model).&lt;&#x2F;p&gt;
&lt;p&gt;The latest iteration is pure Golang, partly to avoid the faff of Python &lt;code&gt;venv&lt;&#x2F;code&gt; and partly as an exercise in learning more about Go. The magic is mostly in the prompt, which I’ll paste below. The fancy loading animation is &lt;code&gt;gum&lt;&#x2F;code&gt;, by the excellent &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;charmbracelet&quot;&gt;Charm&lt;&#x2F;a&gt; collective (also responsible for &lt;code&gt;VHS&lt;&#x2F;code&gt;, used to produce the terminal gifs above).&lt;&#x2F;p&gt;
&lt;p&gt;Now, this little Go binary sits in my &lt;code&gt;$PATH&lt;&#x2F;code&gt;, aliased to &lt;code&gt;@&lt;&#x2F;code&gt;, ready to go with a single keypress.&lt;&#x2F;p&gt;
&lt;p&gt;If this is the future of computing, give me excess of it.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;pre data-lang=&quot;go&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-go &quot;&gt;&lt;code class=&quot;language-go&quot; data-lang=&quot;go&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;var &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;systemPrompt &lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;string &lt;&#x2F;span&gt;&lt;span&gt;= `&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;You are a coding and computing
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;assistant called CAI.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Respond only with the requested code or command or solution,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;ideally in a single line, defaulting to BASH script unless
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;otherwise stated.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;If a more detailed explanation is needed, the user will ask
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;for it.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Always be concise. All output will be rendered on a terminal,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;so do not use markdown formatting.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;You must respond only with the requested code or command or
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;solution,
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;ideally in a single line, defaulting to BASH script unless
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;otherwise stated.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;If I need a more detailed explanation, I will ask for it.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;If you are providing a single line of code, do not use any
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;code markers or backticks to indicate this.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Do not add commentary or explanation.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;If you need to add comments, use # to comment the lines out.&lt;&#x2F;span&gt;&lt;span&gt;`
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Turning radio into podcasts</title>
          <pubDate>Sat, 28 Sep 2024 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/private-podcasts/</link>
          <guid>https://maxbruges.com/blog/private-podcasts/</guid>
          <description xml:base="https://maxbruges.com/blog/private-podcasts/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;bigben.webp&quot; alt=&quot;Big Ben mid-bong&quot; &#x2F;&gt;
&lt;em&gt;A boy needs his bongs&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I love the BBC. But I do not love &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bbc.co.uk&#x2F;sounds&quot;&gt;BBC Sounds&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It is clunky, it lacks automatic downloads, and it has an unbearable habit of advertising the podcast you are listening to &lt;em&gt;during said podcast&lt;&#x2F;em&gt;, with a bonus reminder that you can listen to the podcast &lt;em&gt;on the app you are currently using&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As more and more BBC programmes vanish from open podcast platforms and into Sounds, the app feels increasingly like an attempt to build a content silo that is utterly unbecoming of a national broadcaster.&lt;&#x2F;p&gt;
&lt;p&gt;And yet: a licence-fee-payer has got to get his &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Greenwich_Time_Signal&quot;&gt;pips&lt;&#x2F;a&gt;. But how?&lt;&#x2F;p&gt;
&lt;p&gt;Time to make our &lt;em&gt;own&lt;&#x2F;em&gt; Six O’Clock News Podcast, with auto-downloads, FM-quality bongs and &lt;em&gt;no Sounds announcements&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;crossing-the-streams&quot;&gt;Crossing the streams&lt;a class=&quot;zola-anchor&quot; href=&quot;#crossing-the-streams&quot; aria-label=&quot;Anchor link for: crossing-the-streams&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Back in the heady days of internet radio, Auntie gifted the world high-quality audio streams of all BBC radio stations. Sadly, these have started to disappear, though a few diehards still maintain lists of the working streams.&lt;&#x2F;p&gt;
&lt;p&gt;I won’t post the streams here, but if you’re interested I would recommend visiting the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;bpsib&#x2F;67089b959e4fa898af69fea59ad74bc3&quot;&gt;Github&lt;&#x2F;a&gt; and trying your luck.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;private-podcasts&#x2F;warning&quot;&gt;&lt;&#x2F;a&gt; These streams - and the steps discussed here - are strictly for &lt;strong&gt;personal use&lt;&#x2F;strong&gt;. As much as I find BBC Sounds objectionable and irritating, pirating BBC content is Not OK.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;m3u8-to-m4a&quot;&gt;&lt;code&gt;.m3u8&lt;&#x2F;code&gt; to &lt;code&gt;.m4a&lt;&#x2F;code&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#m3u8-to-m4a&quot; aria-label=&quot;Anchor link for: m3u8-to-m4a&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Now we have our stream, we need to capture it.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few bespoke programs in the repos for capturing streams, but we’re going to stick with the trusty workhorse of &lt;code&gt;FFMPEG&lt;&#x2F;code&gt;, for simplicity’s sake (it’s a quick &lt;code&gt;apt-get&lt;&#x2F;code&gt;, or &lt;code&gt;brew install&lt;&#x2F;code&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;formulae.brew.sh&#x2F;formula&#x2F;ffmpeg&quot;&gt;for Mac&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;We pipe our stream in to &lt;code&gt;FFMPEG&lt;&#x2F;code&gt;, specify an output file, and it’ll record away.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; ffmpeg&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -i&lt;&#x2F;span&gt;&lt;span&gt; https:&#x2F;&#x2F;a.bbc.stream&#x2F;live&#x2F;radio4.m3u8 6-oclock-news.mp3
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;Opening &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;http:&#x2F;&#x2F;a.bbc.stream&#x2F;live&#x2F;radio4.m3u8&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39; for reading
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;size&lt;&#x2F;span&gt;&lt;span&gt;=     &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;256kB&lt;&#x2F;span&gt;&lt;span&gt; time=00:00:25.64 bitrate=  81.8kbits&#x2F;s speed=1.99x
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Great! But I don’t particularly want an endless MP3 file of Radio 4, or I may accidentally listen to &lt;em&gt;Moneybox&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So, we set a flag to limit the recording to 30 minutes. While we’re at it, we’ll also set a bitrate - without this, we can easily end up with a file size into the hundred of MBs - and switch to our preferred format of &lt;code&gt;.m4a&lt;&#x2F;code&gt;, using &lt;code&gt;-c:a aac&lt;&#x2F;code&gt;. A bitrate of &lt;code&gt;128k&lt;&#x2F;code&gt; is more than sufficient for our purposes.&lt;&#x2F;p&gt;
&lt;p&gt;Our command now looks like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span&gt; ffmpeg&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -i&lt;&#x2F;span&gt;&lt;span&gt; https:&#x2F;&#x2F;a.bbc.stream&#x2F;live&#x2F;radio4.m3u8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; 00:30:00&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span&gt;:a aac&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -b&lt;&#x2F;span&gt;&lt;span&gt;:a 128k 6-oclock-news.m4a
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;But a strange thing happens if you set this to run: after about 7 to 8 minutes, the recording will stop. With much painful debugging (&lt;code&gt;-loglevel&lt;&#x2F;code&gt; is your friend), the answer appears: the encoder is catching up with the end of the stream. When it does, it stops, satisfied with a job well done.&lt;&#x2F;p&gt;
&lt;p&gt;So, we need to add a couple more flags to let &lt;code&gt;FFMPEG&lt;&#x2F;code&gt; know that this is a &lt;em&gt;live&lt;&#x2F;em&gt; stream, and to keep going until our timer is up: &lt;code&gt;-re&lt;&#x2F;code&gt;. We can also add &lt;code&gt;-itsoffset&lt;&#x2F;code&gt; to give some breathing room between the encoding and the stream, as well as a &lt;code&gt;-reconnect&lt;&#x2F;code&gt; and an expanded buffer just to be safe. Our final command, then, is:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;ffmpeg -itsoffset&lt;&#x2F;span&gt;&lt;span&gt; 5&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -re -reconnect&lt;&#x2F;span&gt;&lt;span&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -i&lt;&#x2F;span&gt;&lt;span&gt; https:&#x2F;&#x2F;a.bbc.stream&#x2F;live&#x2F;radio4.m3u8&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span&gt; 00:30:00&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span&gt;:a aac&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -b&lt;&#x2F;span&gt;&lt;span&gt;:a 128k&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -rtbufsize&lt;&#x2F;span&gt;&lt;span&gt; 20M 6-oclock-news.m4a
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Save the command down into a handy script - something like &lt;code&gt;get-news.sh&lt;&#x2F;code&gt; - then set a cronjob to run it at 6pm every day: &lt;code&gt;0 18 * * * bash get-news.sh&lt;&#x2F;code&gt;. Obviously, you’ll need your computer to be switched on for the duration of the recording. FFMPEG is light enough that it can easily run on a Pi: as good an excuse as any to dig it out from the drawer.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;private-podcasts&#x2F;important&quot;&gt;&lt;&#x2F;a&gt; The streams tend to have a delay of 20-30 secs on them, so it’s worth adding in a &lt;code&gt;sleep 15&lt;&#x2F;code&gt; at beginning of the script to account for this.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;serving-the-podcast&quot;&gt;Serving the podcast&lt;a class=&quot;zola-anchor&quot; href=&quot;#serving-the-podcast&quot; aria-label=&quot;Anchor link for: serving-the-podcast&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;private-podcasts&#x2F;aside-tip&quot;&gt;&lt;&#x2F;a&gt; Syncthing is super-easy to set up. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.syncthing.net&#x2F;intro&#x2F;getting-started.html&quot;&gt;Give it a go!&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;As a quick and dirty way to get the files onto a phone for listening, Syncthing works perfectly; set it up to watch the folder containing the podcast audio files, and make sure Syncthing on the device is set up to receive them.&lt;&#x2F;p&gt;
&lt;p&gt;My preferred listening app is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;antennapod.org&#x2F;&quot;&gt;AntennaPod&lt;&#x2F;a&gt;: open-source and very snappy. For our purposes, it also has an easy method for adding local files: tap &lt;code&gt;Add podcast&lt;&#x2F;code&gt; then &lt;code&gt;Add local folder&lt;&#x2F;code&gt; to select the Syncthing folder containing the audio files. As soon as the files appear in the folder, they’ll populate into your Episode feed (with the added bonus of being listenable offline).&lt;&#x2F;p&gt;
&lt;p&gt;And &lt;em&gt;voila&lt;&#x2F;em&gt;: your own, FM-standard, &lt;em&gt;Sounds&lt;&#x2F;em&gt;-free &lt;strong&gt;6 O’Clock News&lt;&#x2F;strong&gt;, with auto-downloads, immediately after broadcast. Just as Lord Reith intended.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;“…in view of the widespread interest which is taken by Our People in
services which provide audio and visual material by means of broadcasting, the internet or the use of newer technologies, and of the great value of such services as means of disseminating information, education and entertainment…”&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;downloads.bbc.co.uk&#x2F;bbctrust&#x2F;assets&#x2F;files&#x2F;pdf&#x2F;about&#x2F;how_we_govern&#x2F;2016&#x2F;charter.pdf&quot;&gt;Royal Charter for the BBC&lt;&#x2F;a&gt;, 2016&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
</description>
      </item>
      <item>
          <title>AI for Me, but not for Thee</title>
          <pubDate>Sun, 30 Jun 2024 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/aiForMe/</link>
          <guid>https://maxbruges.com/blog/aiForMe/</guid>
          <description xml:base="https://maxbruges.com/blog/aiForMe/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;pen.webp&quot; alt=&quot;Fountain pen on paper&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The temptation to ‘just get ChatGPT to do it’ is as strong for teachers as it is for students. So should we be surprised when pupils reach for the AI to finish their homework, when we do the same with our paperwork?&lt;&#x2F;p&gt;
&lt;p&gt;The end of term is always a rush, with exams to mark, units to finish, reports to write. That last bullet-point on the To-Do list is often the most arduous: at a modest 100 words per pupil, per subject, subject teachers can soon find themselves churning out close to ten thousand words (double that if you’re a sole trader like a drama or music lead).&lt;&#x2F;p&gt;
&lt;p&gt;Faced with a drafting a short novel in the hectic final days of an exhausting year, who can blame someone for looking to speed things up a little? Particularly when reports quickly drift into anodyne vacuity anyway (“has worked well this year… has shown progress… going forward, make more of an effort to complete homework on time…”). What’s the harm in letting the artificial brain take the strain?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;they-can-always-tell&quot;&gt;They can always tell&lt;a class=&quot;zola-anchor&quot; href=&quot;#they-can-always-tell&quot; aria-label=&quot;Anchor link for: they-can-always-tell&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Social mores about LLM-generated text are &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nature.com&#x2F;articles&#x2F;s41598-024-53335-2&quot;&gt;still forming&lt;&#x2F;a&gt;. If it’s for personal consumption, no-one can really object. But if a text purports to be from a human, tasting the tang of ChatGPT’s artificial verbiage can be a bitter surprise. If it has a human’s name on it, then it should really be written by &lt;em&gt;that human&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Educators write reports in double-trust: both as custodians and as role models. The obvious purpose of the end-of-term report is to provide a (largely) unvarnished summation of how the child is doing, for the benefit of the parents. In the context of the private sector, this is even more important, perhaps the most crucial piece of client-service communication the educator produces all year.&lt;&#x2F;p&gt;
&lt;p&gt;But there is the other, implicit value of the report. For the child, this is likely the only adult-coded, personally-targeted writing they will read in a year. It must set the standard for what professional, transactional writing should look like. Even if the comments are banal and inoffensive, they serve the purpose of instructing the child in how grown-ups speak to one another in a professional written context.&lt;&#x2F;p&gt;
&lt;p&gt;To farm that out to a bot is a dereliction of duty, and an implicit signal to child and parent that this writing &lt;em&gt;doesn’t matter.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;There are plenty of points in the school day that can benefit from the quick-and-dirty disposable drafting of AI, but the end of year report must not be one of them.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>I ♥ Markdown</title>
          <pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/markdown/</link>
          <guid>https://maxbruges.com/blog/markdown/</guid>
          <description xml:base="https://maxbruges.com/blog/markdown/">&lt;p&gt;No matter how often you do it, starting the process of writing is agonising. It is slow and full of false starts. Not because we don’t know what to write, but because we could write &lt;em&gt;anything&lt;&#x2F;em&gt;. The blank page is infinite, without footholds or signposts.&lt;&#x2F;p&gt;
&lt;p&gt;So we start doodling in the margins.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;the-sponge.webp&quot; alt=&quot;page with an ornate THE written on it, and nothing else&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;death-to-docx&quot;&gt;Death to &lt;em&gt;.docx&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#death-to-docx&quot; aria-label=&quot;Anchor link for: death-to-docx&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Children are most susceptible to this trap. Students will often be thrown into the blazing white &lt;code&gt;.docx&lt;&#x2F;code&gt;  quadrangle before they have even the most basic understanding of computers, drafting, or the formalities of writing.  They can be overwhelmed by the profundity of formatting options - the colours, the WordArt, the clipart (oh God, the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;clipart-library.com&#x2F;clipart&#x2F;1578505.htm&quot;&gt;clipart&lt;&#x2F;a&gt;) - so much so that the words themselves seem less important.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;word-art.webp&quot; alt=&quot;some classic examples of Noughties wordart&quot; &#x2F;&gt;
&lt;em&gt;What a thing of beauty.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And who can blame them? Formatting is fun! Unlike crafting prose, the feedback loop is instantaneous, the results immediately visible. Click this button and look: it’s bigger! There’s no equivalent for writing, no “click here to increase pathos by 20%.” At least, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.folger.edu&#x2F;blogs&#x2F;shakespeare-and-beyond&#x2F;by-false-intelligence-ai-chatgpt-and-the-bard&#x2F;&quot;&gt;not yet&lt;&#x2F;a&gt;. There isn’t a primary teacher in the world who hasn’t let their students work on computers for a lesson, only for the hour to produce nothing more than 30 documents with a single, brightly coloured heading of &lt;em&gt;&lt;strong&gt;My StOrY&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;man-cannot-live-by-format-font-alone&quot;&gt;Man cannot live by &lt;em&gt;Format-&amp;gt;Font&lt;&#x2F;em&gt; alone&lt;a class=&quot;zola-anchor&quot; href=&quot;#man-cannot-live-by-format-font-alone&quot; aria-label=&quot;Anchor link for: man-cannot-live-by-format-font-alone&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Formatting is lower-order thought. It may be creative, but it is not &lt;em&gt;generative&lt;&#x2F;em&gt;. It is not the valuable part.&lt;&#x2F;p&gt;
&lt;p&gt;Visit any consultancy or agency producing reports and decks for a living and I will guarantee that billable rates scale inversely to the amount of time an individual personally spends fiddling with column layouts and transparency effects. Those at the very top can live in a workflow of bluntly worded emails and WhatsApp voicenotes.&lt;&#x2F;p&gt;
&lt;p&gt;Why? Because content is the valuable part, not the colour.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;alan-dictaphone.webp&quot; alt=&quot;Alan Partridge speaking into his dictaphone&quot; &#x2F;&gt;
&lt;em&gt;You may not like it, but this is what peak creativity looks like.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;If that’s the case, when we really need to write, why use tools that distract us from the core purpose?&lt;&#x2F;p&gt;
&lt;p&gt;Writing requires discipline. And you can only have your pudding once you’ve written (?) your meat. In releasing students into the all-you-can-format buffet of &lt;code&gt;Word.exe&lt;&#x2F;code&gt;, we let them gorge on sweet treats of colouring and shuffling, whilst skipping the chewy fibre of actual writing.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-with-less&quot;&gt;More with less&lt;a class=&quot;zola-anchor&quot; href=&quot;#more-with-less&quot; aria-label=&quot;Anchor link for: more-with-less&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;So how should we begin? How do we put down the first word and start the flow of writing?&lt;&#x2F;p&gt;
&lt;p&gt;Like any chemical reaction, tweaking the environment helps: something to lower the activation energy and get the words bonding into sentences. Increase the temperature, the pressure, and the collisions increase. The same with writing.&lt;&#x2F;p&gt;
&lt;p&gt;It’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Creative_limitation#:~:text=Creative%20limitation%20is%20the%20concept,oneself%20can%20actually%20drive%20creativity.&quot;&gt;well-documented&lt;&#x2F;a&gt; how the &lt;em&gt;limiting&lt;&#x2F;em&gt; of options paradoxically enhances creativity. Tell a child to write a story about anything they want, any way they want, and it will be slow going. Tell them to describe their morning &lt;em&gt;without any words that use the letter A&lt;&#x2F;em&gt;, and suddenly it is a challenge they can throw themselves into.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;don-t-bash-the&quot;&gt;Don’t bash the ‘#’&lt;a class=&quot;zola-anchor&quot; href=&quot;#don-t-bash-the&quot; aria-label=&quot;Anchor link for: don-t-bash-the&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;By setting boundaries on the creative process, we can channel ourselves more easily into actually &lt;em&gt;producing&lt;&#x2F;em&gt; something. This is why it’s one of the great crimes of digitised education that we’ve attached so much importance to fully-featured word processors. They’re designed for desktop publishing, not for writing. If raw prose is the proxy for thought, all those shiny formatting buttons are nothing but distractions at best, and strains on the cognitive load at worst.&lt;&#x2F;p&gt;
&lt;p&gt;This is where Markdown comes in. Basic formatting exists, certainly, but it is there to &lt;em&gt;structure&lt;&#x2F;em&gt; your writing and thinking. The point-size, underline style, colour of your heading? Don’t worry about that. Just know your heading is there and focus on the words underneath it.&lt;&#x2F;p&gt;
&lt;p&gt;That hour in the computer lab spent fiddling with titles? Now it just looks like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;# My Story
&lt;&#x2F;span&gt;&lt;span&gt;Once upon a time there was...
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That’s it.&lt;&#x2F;p&gt;
&lt;p&gt;The restriction of your options to a limited few (headings, italics, bold, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.markdownguide.org&#x2F;extended-syntax&#x2F;&quot;&gt;etc&lt;&#x2F;a&gt;) keeps Formatting where it belongs - down at the bottom of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bloom&amp;#x27;s_taxonomy#Psychomotor_domain_(action-based)&quot;&gt;Bloom’s pyramid&lt;&#x2F;a&gt; - while you scale the heady heights and actually &lt;strong&gt;write.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;writeme.mattstow.com&#x2F;&quot;&gt;try it&lt;&#x2F;a&gt;. Embrace the blank page. Trust the words, not the fonts.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>AI will eat your English Department</title>
          <pubDate>Mon, 22 May 2023 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/ArtsVsAI/</link>
          <guid>https://maxbruges.com/blog/ArtsVsAI/</guid>
          <description xml:base="https://maxbruges.com/blog/ArtsVsAI/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;saturn.webp&quot; alt=&quot;Saturn devouring his son&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;ArtsVsAI&#x2F;note&quot;&gt;&lt;&#x2F;a&gt; TL;DR: The Times has been good enough to publish &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;times-letters-the-implications-of-using-ai-in-education-3f8ggnt7g&quot;&gt;my letter&lt;&#x2F;a&gt; on this topic - so just read that if you want. Otherwise: given the infinite space afforded by a personal blog, I thought it worth elaborating my thinking here.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Given all the problems faced by British head teachers - the yawning &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ifs.org.uk&#x2F;articles&#x2F;what-has-happened-teacher-pay-england&quot;&gt;gulf&lt;&#x2F;a&gt; between pay and inflation, opaque inspection &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bbc.co.uk&#x2F;news&#x2F;education-65013919&quot;&gt;frameworks&lt;&#x2F;a&gt;, cratering teacher &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;education&#x2F;2022&#x2F;dec&#x2F;01&#x2F;number-graduates-teacher-training-england-catastrophic-level&quot;&gt;training&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;education&#x2F;2023&#x2F;jan&#x2F;09&#x2F;third-of-englands-teachers-who-qualified-in-last-decade-have-left-profession&quot;&gt;retention&lt;&#x2F;a&gt; rates - one could forgive them for choosing to focus on the current fire-fighting, rather than the looming pall of smoke on the horizon.&lt;&#x2F;p&gt;
&lt;p&gt;Which is why it’s even more salutary to see them turn their attention briefly - albeit in the form of an advisory body - to the question of AI in education. From &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;ai-is-clear-and-present-danger-to-education-3sk09ftlf&quot;&gt;The Times&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;“A coalition of leaders of some of the country’s top schools have warned of the “very real and present hazards and dangers” being presented by AI [i.e. Large Language Models]…
Head teachers’ fears go beyond AI’s potential to aid cheating, encompassing the impact on children’s mental and physical health and even the future of the teaching profession…“&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;ai-is-clear-and-present-danger-to-education-3sk09ftlf&quot;&gt;‘AI is a clear and present danger to education’, 19&#x2F;05&#x2F;23&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;There is a lot to praise here, not least the use of the present tense. Anyone who thinks that ChatGPT isn’t already being used by students in their classroom is either naive or in denial; it’s gratifying that even the grand old man of education Sir Anthony Seldon recognises that this is something happening &lt;em&gt;now&lt;&#x2F;em&gt;, rather than something that can wait ’til the next King’s Speech.&lt;&#x2F;p&gt;
&lt;p&gt;But one line stood out to me (not mentioned in the coalition’s original &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;times-letters-green-belt-building-and-affordable-homes-zcmzll2tw&quot;&gt;letter&lt;&#x2F;a&gt;, but elaborated in the subsequent Times article):&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The group will create a website &lt;em&gt;led by heads of science or digital&lt;&#x2F;em&gt; at 15 state and private schools. it will offer guidance on the latest developments in AI and what schools should use and avoid.”&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;ai-is-clear-and-present-danger-to-education-3sk09ftlf&quot;&gt;‘AI is a clear and present danger to education’, 19&#x2F;05&#x2F;23&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The natural question to ask is: why these subjects specifically? I’ve not spoken with the coalition, and have little more to go on than a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;times-letters-green-belt-building-and-affordable-homes-zcmzll2tw&quot;&gt;letter&lt;&#x2F;a&gt;, two &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;ai-is-clear-and-present-danger-to-education-3sk09ftlf&quot;&gt;Times&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;the-times-view-on-ai-regulation-missing-guardrails-3hnp8znln&quot;&gt;articles&lt;&#x2F;a&gt; and some cursory Googling, but if the threat is as serious as they suggest (and it is), it is a valid question to ask.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dancing-on-the-razor-s-edge&quot;&gt;Dancing on the razor’s edge&lt;a class=&quot;zola-anchor&quot; href=&quot;#dancing-on-the-razor-s-edge&quot; aria-label=&quot;Anchor link for: dancing-on-the-razor-s-edge&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Perhaps I am being reductive, but there are two possible trains of thought from the coalition in focussing on science and digital.&lt;&#x2F;p&gt;
&lt;p&gt;The first train of thought perhaps goes something like this:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;LLMs are a new technology.&lt;&#x2F;li&gt;
&lt;li&gt;Science and Digital are the subjects that produce the engineers and scientists that build these technologies.&lt;&#x2F;li&gt;
&lt;li&gt;Q.E.D our subject specialists in those areas ought to be best placed to understand these new technologies.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I have worked with some exceptional heads of science in my career: teachers capable of making the most tedious lesson on covalent bonds into a whirlwind of electron excitement.  But the skill set needed to design and deliver a science curriculum has almost zero cross-over with an understanding of cutting-edge Large Language Model research. Show me the part of the physics spec that asks a teacher to explain neural networks, or the chemistry module that analyses &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.google&#x2F;products&#x2F;pixel&#x2F;introducing-google-tensor&#x2F;&quot;&gt;Tensor&lt;&#x2F;a&gt; chip fabrication processes.&lt;&#x2F;p&gt;
&lt;p&gt;You may stand a little more luck if you’re a small school, with a head of ‘digital’ who doubles as head of IT, but even then: do you seriously expect them to have built a working understanding of these brand new tools, whilst still trying to fend off waves of ransomware attacks on your Windows NT-powered school mainframe?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;chernobyl-room.webp&quot; alt=&quot;The control room of the Chernobyl power station&quot; &#x2F;&gt;
&lt;em&gt;“Have you considered becoming an Apple-accredited school?”&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The truth is, these bots are so far outside our curricula that to expect anyone on your staff to have existing expertise in them is absurd, let alone your ‘head of science or digital’ (and let’s be honest, if they were really into LLMs, do you think they’d still be hanging around on a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.businessinsider.com&#x2F;ai-prompt-engineer-jobs-pay-salary-requirements-no-tech-background-2023-3#:~:text=%22Prompt%20engineers%22%20train%20AI%20chatbots,always%20require%20a%20tech%20degree.&quot;&gt;U1 payscale&lt;&#x2F;a&gt;? Perhaps they’d just be writing tedious &lt;a href=&quot;&#x2F;blog&quot;&gt;blogposts&lt;&#x2F;a&gt; instead).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;don-t-let-the-truth-get-in-the-way-of-a-good-tokenized-response&quot;&gt;Don’t let the truth get in the way of a good tokenized response&lt;a class=&quot;zola-anchor&quot; href=&quot;#don-t-let-the-truth-get-in-the-way-of-a-good-tokenized-response&quot; aria-label=&quot;Anchor link for: don-t-let-the-truth-get-in-the-way-of-a-good-tokenized-response&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The second train of thought is perhaps this: Science and digital heads have subjects most closely adjacent to AI, so they will likely be the ones that see their subjects affected the most.&lt;&#x2F;p&gt;
&lt;p&gt;But to think this way is to miss the whole point of ChatGPT and other chatbots. They are designed to write prose, not formulae or scientific analyses. Precision, accuracy, and truthfulness are not the priority here, fluency is.&lt;&#x2F;p&gt;
&lt;p&gt;It’s hard to wrap one’s head around this, because it runs contrary to the way computers are supposed to work. For decades, we’ve known them as glorified calculators, capable of exact detail, but not the nuances of human speech and art. Machines for truth, not beauty.&lt;&#x2F;p&gt;
&lt;p&gt;Now, for the first time, we have a technology that does the very opposite. This is not a gradually, iterative change to computing, but a radical and fundamental, paradigmatic shift. You may access ChatGPT from your browser, and type into it like you would Google, but it is a wholly different technology with a wholly different purpose.&lt;&#x2F;p&gt;
&lt;p&gt;As I’ve put it more succinctly &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;times-letters-the-implications-of-using-ai-in-education-3f8ggnt7g&quot;&gt;here&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;“What makes these new large language models such as ChatGPT so exceptional is their ability to produce fluent and plausible prose: they are far better suited to writing essays on Coleridge than calculating covalent bonds. It is the literature student who reaches for AI first, not the chemist.”&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thetimes.co.uk&#x2F;article&#x2F;times-letters-the-implications-of-using-ai-in-education-3f8ggnt7g&quot;&gt;Letters, 22&#x2F;05&#x2F;23&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;With all this in mind, the decision to focus on Science and Digital departments suggests a lack of understanding of the nature of the technology, or indeed the dangers posed.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tidy-prose-tidy-mind&quot;&gt;Tidy prose, tidy mind&lt;a class=&quot;zola-anchor&quot; href=&quot;#tidy-prose-tidy-mind&quot; aria-label=&quot;Anchor link for: tidy-prose-tidy-mind&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;So who &lt;em&gt;should&lt;&#x2F;em&gt; be involved?&lt;&#x2F;p&gt;
&lt;p&gt;Well, I am a little &lt;a href=&quot;&#x2F;about&quot;&gt;biased&lt;&#x2F;a&gt;, but if prose is the name of the game, then English (and our cousins in the Humanities) ought to be top of the list. Implicitly, we use the requirement of prose as a proxy for thought. Fluent essays aren’t rewarded just because they sound nice, but because they act as a symptom of organised, complex thinking.&lt;&#x2F;p&gt;
&lt;p&gt;English Literature and Language are, perhaps, most at risk here. Ours is the subject least rooted in the concrete and factual (beyond plot-points and grammatical rules), and most centred around nebulous and subjective ideas of style and structure. The best English students are those that &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gl-assessment.co.uk&#x2F;press-office&#x2F;press-releases&#x2F;new-study-highlights-the-importance-of-reading-to-the-whole-school-curriculum&#x2F;&quot;&gt;read&lt;&#x2F;a&gt; the most, and the bots have read &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ai.facebook.com&#x2F;blog&#x2F;large-language-model-llama-meta-ai&#x2F;#:~:text=We%20trained%20LLaMA%2065B%20and%20LLaMA%2033B%20on%201.4%20trillion%20tokens.%20Our%20smallest%20model%2C%20LLaMA%207B%2C%20is%20trained%20on%20one%20trillion%20tokens.&quot;&gt;everything&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We now have a technology that can easily surmount the once wholly-human task of producing a passable essay; not simply &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.grammarly.com&#x2F;paraphrasing-tool&quot;&gt;paraphrasing&lt;&#x2F;a&gt; an existing one, but making something entirely new and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.digitaltrends.com&#x2F;computing&#x2F;chatgpt-dupes-professor-trying-to-catch-ai-plagiarism&#x2F;&quot;&gt;untraceable&lt;&#x2F;a&gt;. The barrier to entry for machines has been comprehensively vaulted over. How we re-establish that barrier, how (or if) we build a new proxy mechanism for measuring complexity of thought is another matter, and one the margins here won’t contain.&lt;&#x2F;p&gt;
&lt;p&gt;But in the immediate: speak to your heads of English, Humanities and Arts. Either they’re already nervous of what’s to come, or they ought to be. They will be on the front-line of this LLM-powered revolution, so help them build their barricades.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The case for banning Google</title>
          <pubDate>Sat, 13 May 2023 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/BanGoogle/</link>
          <guid>https://maxbruges.com/blog/BanGoogle/</guid>
          <description xml:base="https://maxbruges.com/blog/BanGoogle/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;canute.webp&quot; alt=&quot;Canute on the beach, engaging in the Saxon world’s most poorly communicated PR exercise&quot; title=&quot;Canute on the beach, engaging in the Saxon world&amp;#39;s most poorly communicated PR exercise&quot; &#x2F;&gt;
&lt;em&gt;We can’t control the tides, but we can at least stop our students playing on the sandbars&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It seems incredible to say now, but I once received lessons in How To Google. And yesterday, Google &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;2023&#x2F;5&#x2F;10&#x2F;23717120&#x2F;google-search-ai-results-generated-experience-io&quot;&gt;rang the death-knell&lt;&#x2F;a&gt; for that way of traditional searching.&lt;&#x2F;p&gt;
&lt;p&gt;Friday was Google’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;io.google&#x2F;&quot;&gt;annual I&#x2F;O conference&lt;&#x2F;a&gt;. Between the perennial updates to mobiles and tablets was arguably the most important innovation in search since &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;PageRank&quot;&gt;PageRank&lt;&#x2F;a&gt;: the opening up of their chatbot ‘&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bard.google.com&#x2F;&quot;&gt;Bard&lt;&#x2F;a&gt;’, and the move to place it front and centre on the search results page.&lt;&#x2F;p&gt;
&lt;p&gt;It is fast, free, and extremely capable. And if we are not careful, it will destroy the way students use the Internet.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;an-uneasy-alliance&quot;&gt;An uneasy alliance&lt;a class=&quot;zola-anchor&quot; href=&quot;#an-uneasy-alliance&quot; aria-label=&quot;Anchor link for: an-uneasy-alliance&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The relationship between teachers and the search-box has always been fraught.&lt;&#x2F;p&gt;
&lt;p&gt;Those old Google lessons on chuntering Pentium PCs were not just one-offs, they had whole carefully designed schemes of work about search operators, link assessing, citations, &lt;em&gt;etcetera&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;My dutiful I.C.T. teachers had grown up without the Internet: they were equal parts wary and awed by the power of this new ‘engine for search’. They - rightly - saw it for the fire-hose of information that it was, and recognised that students needed to be carefully introduced to the ‘right’ way to operate this powerful machine.&lt;&#x2F;p&gt;
&lt;p&gt;Without the proper training, it’ll drive you off an intellectual cliff, into a ravine of misinformation and misunderstanding. So each Thursday after lunch we sat in the computer lab, carefully typing search strings into the plain white box, scrolling down the page of blue linked search results.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;child-and-robot.webp&quot; alt=&quot;A child with a robot&quot; title=&quot;A child with a robot&quot; &#x2F;&gt;
&lt;em&gt;An image from a happier time, when man and machine lived in perfect harmony and stock image providers were completely deranged.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Those lessons mattered because our teachers knew that, given half a chance, we’d simply click the first result we were given.&lt;&#x2F;p&gt;
&lt;p&gt;In this caution, however, lies the academic utility of Google: it was a librarian, pointing you towards sources of information; it was up to &lt;em&gt;you&lt;&#x2F;em&gt; to read, evaluate and extricate the information you needed from those sources. There’s a strong argument to be made that the ‘Google’ generation developed those essential academic skills of citation and synthesis far more quickly than previous, non-digitised students, simply by dint of having to wade through so many more potential sources. Skim-reading ten different webpages on the same topic is not a waste of time by any means, it’s the very point of being a scholar: to become immersed in the intellectual milieu of a subject, gradually forming one’s own unique perspective.&lt;&#x2F;p&gt;
&lt;p&gt;Now, I’m not &lt;em&gt;so&lt;&#x2F;em&gt; Panglossian as to suggest that all students, all the time, for all their work, used Google in this inquisitive, critical way. The point is that they &lt;em&gt;could&lt;&#x2F;em&gt;. With the right encouragement and scaffolding (and plagiarism vigilance) from their teachers, students could use Google as the incredible information democratiser that it was built to be.&lt;&#x2F;p&gt;
&lt;p&gt;Google’s &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.google.com&#x2F;search&#x2F;howsearchworks&#x2F;our-approach&#x2F;#:~:text=Google&amp;#x27;s%20mission%20is%20to%20organize,a%20wide%20variety%20of%20sources.&quot;&gt;mission&lt;&#x2F;a&gt; is to “to organize the world’s information and make it universally accessible and useful”.  When handled with care, that purpose (specifically its first clause) made Google the most powerful tool in a student’s arsenal: laying a pathway to the answers they needed, but still requiring students to &lt;em&gt;think&lt;&#x2F;em&gt; to get the answer itself.&lt;&#x2F;p&gt;
&lt;p&gt;But that is no longer the case.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zero-clicks-zero-thought&quot;&gt;Zero-clicks, zero thought&lt;a class=&quot;zola-anchor&quot; href=&quot;#zero-clicks-zero-thought&quot; aria-label=&quot;Anchor link for: zero-clicks-zero-thought&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;This is nothing new. Slowly, over the past decade, Google has been chipping away at that second clause: the “accessible and useful” part. Filtering through search results - for all its value as a learning exercise, is not “accessible.” Google’s expressed intention over the past few years has been to obfuscate that familiar list of blue links, turning from librarian to oracle.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developers.google.com&#x2F;search&#x2F;blog&#x2F;2016&#x2F;05&#x2F;introducing-rich-cards&quot;&gt;Rich snippets and cards&lt;&#x2F;a&gt; were one of the first attempts to turn search away from &lt;em&gt;indexing&lt;&#x2F;em&gt; sources of information to &lt;em&gt;answering users’ queries directly&lt;&#x2F;em&gt;. Rather than giving prominence at the top of the search page to the most relevant web pages, result cards snipped out what the algorithm decided was the relevant information, and plonked it directly in front of the searcher’s eyeballs.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;macbeth-snippet.webp&quot; alt=&quot;A rich snippet example&quot; &#x2F;&gt;
&lt;em&gt;This is a rich snippet. Note that this still has a link - a digital paper trail for the diligent student to follow, evaluate and cite.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It’s a subtle shift, but one that marks a fundamental change in how we interact with search engines.  It stops Google being a repository of potential answers - laid out for your to assess for yourself, as a scholar - to simply being the sole source of information in and of itself.  This is the dream of ‘&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.searchenginejournal.com&#x2F;google-and-the-rise-of-zero-click-searches-what-does-it-mean-for-your-business-podcast&#x2F;474281&#x2F;&quot;&gt;zero-click search&lt;&#x2F;a&gt;’.&lt;&#x2F;p&gt;
&lt;p&gt;Friday’s announcement marks the next evolution of this philosophy, and it is far more troubling.&lt;&#x2F;p&gt;
&lt;p&gt;The ‘&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;2023&#x2F;5&#x2F;10&#x2F;23717120&#x2F;google-search-ai-results-generated-experience-io&quot;&gt;new generative search&lt;&#x2F;a&gt;’ results page showcased by Google places AI-generated content at the very top: ahead of the traditional blue hyperlinks.&lt;&#x2F;p&gt;
&lt;p&gt;Whereas result cards at least had the decency to pull their information from a tangible source (with a link to read more if you were so inclined), the New Search aims to do away with the whole concept of ‘the source’.  Through their LLM-power chatbot ‘Bard’, the Google will now &lt;em&gt;generate brand new text&lt;&#x2F;em&gt; to answer your query; text without a digital paper-trail, created through an &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Large_language_model&quot;&gt;opaque synthesisation&lt;&#x2F;a&gt; of all the web’s writing.&lt;&#x2F;p&gt;
&lt;p&gt;It is no longer a ‘search engine’, but an answer engine.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;bard-screenshot.webp&quot; alt=&quot;A screenshot of a Bard result&quot; &#x2F;&gt;
&lt;em&gt;…and this is a ‘Bard’ response. No link, no citation, no paper trail: just pure unfiltered &lt;strong&gt;Information&lt;&#x2F;strong&gt;. There’s still a desultory ‘Google It’ button, of course, because&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theregister.com&#x2F;2023&#x2F;04&#x2F;21&#x2F;google_bard_ai&#x2F;&quot;&gt; how else will they pay for it&lt;&#x2F;a&gt;?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;i-m-feeling-unlucky&quot;&gt;I’m feeling unlucky&lt;a class=&quot;zola-anchor&quot; href=&quot;#i-m-feeling-unlucky&quot; aria-label=&quot;Anchor link for: i-m-feeling-unlucky&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;And the problem is: &lt;em&gt;it will work.&lt;&#x2F;em&gt; The answers provided will be (already &lt;em&gt;are&lt;&#x2F;em&gt;) lucid and convincing and &lt;em&gt;good enough&lt;&#x2F;em&gt; for the casual searcher. Because each response is generated, not indexed, it will also be next-to-impossible to detect as plagiarism. The usual &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.seroundtable.com&#x2F;google-ai-plagiarized-content-34495.html&quot;&gt;reassurances&lt;&#x2F;a&gt; have been given, but it’s an open secret that LLM-detection software is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.washingtonpost.com&#x2F;technology&#x2F;2023&#x2F;04&#x2F;01&#x2F;chatgpt-cheating-detection-turnitin&#x2F;&quot;&gt;barely better than random&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;There is no value to be found - not for schools, not for students - in a tool that simply gives answers. School is not about returning the right answer. Education is not about the tick-marks. Every perfect score isn’t a sign of success, it’s a marker of insufficient challenge and poorly scaled learning.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;robot-friend.webp&quot; alt=&quot;This is the future Googlers want&quot; &#x2F;&gt;
&lt;em&gt;“Well done! You copied and pasted the answer I gave you. Here: have a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.themoscowtimes.com&#x2F;2023&#x2F;02&#x2F;02&#x2F;russian-student-allowed-to-keep-diploma-for-chatgpt-written-thesis-a80125&quot;&gt;Bachelors&lt;&#x2F;a&gt;.”&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;All this new product offers is danger; the danger that comes from automating and outsourcing the most important aspect of learning: &lt;a href=&quot;&#x2F;blog&#x2F;Trial-by-Error&quot;&gt;getting things wrong&lt;&#x2F;a&gt; and navigating the &lt;a href=&quot;&#x2F;experiments&#x2F;codefixer.html&quot;&gt;pathway&lt;&#x2F;a&gt; to right-ness.&lt;&#x2F;p&gt;
&lt;p&gt;Imperfection is needed to trigger the learning journey, to enable thought. This idea is anathema to Google. Search will only ever move in one direction: whichever way removes the friction between user and product. ‘Thinking’ is just another piece of friction, grit in the gears of their &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.wsj.com&#x2F;articles&#x2F;alphabet-google-googl-q4-earnings-report-2022-11675306621&quot;&gt;well-oiled advertising machine&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;So it falls to schools to take the step and recognise what is coming. And it needs to happen today, before our students become completely dependent on the incredible, infallible answer engine.&lt;&#x2F;p&gt;
&lt;p&gt;We can only pray for the return of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.webdesignmuseum.org&#x2F;gallery&#x2F;ask-jeeves-2000&quot;&gt;the king&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Trial by Error</title>
          <pubDate>Thu, 04 May 2023 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/Trial-by-Error/</link>
          <guid>https://maxbruges.com/blog/Trial-by-Error/</guid>
          <description xml:base="https://maxbruges.com/blog/Trial-by-Error/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;trial-illustration.webp&quot; alt=&quot;A trial by ordeal&quot; title=&quot;The blind-folded man is the learner, the bishop the teacher, and the monks are... OFSTED I guess&quot; &#x2F;&gt;
&lt;em&gt;A trial by ordeal&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This website is a place &lt;em&gt;about&lt;&#x2F;em&gt; learning and a place &lt;em&gt;for&lt;&#x2F;em&gt; learning: as the &lt;a href=&quot;&#x2F;experiments&#x2F;codeplayground.html&quot;&gt;playground&lt;&#x2F;a&gt; page testifies, this is as much a learning experience for me as it is a resource for anyone else.&lt;&#x2F;p&gt;
&lt;p&gt;Based on my &lt;a href=&quot;&#x2F;blog&#x2F;HelloWorld&quot;&gt;previous musings&lt;&#x2F;a&gt;, I’ve tried to put the principle into practice. Allow me to introduce my latest experiment in GPT and JS:
&lt;em&gt;&lt;a href=&quot;&#x2F;experiments&#x2F;codefixer.html&quot;&gt;What Am I Doing Wrong?&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;waidw-screenshot.webp&quot; alt=&quot;A screenshot of the page in action&quot; title=&quot;I wish I could say I invented this error.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Simply put: it’s a wrapper for ChatGPT that gives you feedback on your code. Philosophically, it’s a deliberate nudge away from the “fire-and-forget” approach to LLMs that their design (and decades of Google habits) tend towards. Rather than demand “make me a script to do this thing” (which The Bot is perfectly capable of doing!), this puts the impetus on the user to &lt;em&gt;attempt the problem first&lt;&#x2F;em&gt;, before seeking the help of the omniscient chatbot overlord.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;creating-is-hard-editing-is-easy&quot;&gt;Creating is hard, editing is easy&lt;a class=&quot;zola-anchor&quot; href=&quot;#creating-is-hard-editing-is-easy&quot; aria-label=&quot;Anchor link for: creating-is-hard-editing-is-easy&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;“What am I doing wrong?” (or &lt;em&gt;WAIDW&lt;&#x2F;em&gt;, for short) is probably the most powerful question a learner can ask.&lt;&#x2F;p&gt;
&lt;p&gt;It invites effective feedback, sets a clear metric of success, and scaffolds its own response. Telling a student what a ‘good one looks like’ seems simple, but is extremely tricky to get right: end-products don’t often foreground the most important thinking, and copying the model might mean the learner ends up focusing your efforts on what doesn’t really matter.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;last-supper.webp&quot; alt=&quot;The Last Supper&quot; title=&quot;Can you pass the unleavened bread&quot; &#x2F;&gt;
&lt;em&gt;Tracing ‘The Last Supper’ won’t make you a master of perspective overnight - you need to understand the fundamentals&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;“WAIDW”, on the other hand, is simple to answer for anyone with domain knowledge one step above the questioner. If you know more than they do, you can’t help but identify the gaps in knowledge, and offer the immediate remedy. Call it Weaponised Mansplaining; the Pedagogy of The Insufferable; the Art of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;knowyourmeme.com&#x2F;memes&#x2F;ackchyually-actually-guy&quot;&gt;Ackshually&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It also forces you, as a teacher, to focus your speech on the needs of the learner. ‘Teacher talk’ is a trap, particularly when it isn’t dialogic. WAIDR is the perfect prompt to force even the most didactic of instructors, judo-like, to flip their desire for monologuing into an act of student-centred learning.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;check-yourself-before-you-brick-yourself&quot;&gt;Check yourself before you brick yourself&lt;a class=&quot;zola-anchor&quot; href=&quot;#check-yourself-before-you-brick-yourself&quot; aria-label=&quot;Anchor link for: check-yourself-before-you-brick-yourself&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;So where does this fit with the &lt;a href=&quot;&#x2F;experiments&#x2F;codefixer.html&quot;&gt;new experiment&lt;&#x2F;a&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;Well: The Bot is clever, but it’s not got enough tokens to go full Vygotsky or Bloom on you just yet. But what it can do, very effectively, is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theatlantic.com&#x2F;technology&#x2F;archive&#x2F;2023&#x2F;03&#x2F;ai-chatgpt-autocorrect-limitations&#x2F;673338&#x2F;&quot;&gt;auto-correct&lt;&#x2F;a&gt;. And essentially, that’s what “WAIDW” is for the human brain: here’s how I’ve started, now give me some wiggly red lines and tell me what to fix.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, we don’t want to fall into the trap of blind-copying the correction that’s been given. I’ve got a perfectly good &lt;a href=&quot;&#x2F;experiments&#x2F;codeplayground.html#CopyButton&quot;&gt;‘click to copy’ function&lt;&#x2F;a&gt; (thank you very much), and an earlier draft of this site had it implemented: snipping out the code to the clipboard, all set for oven-ready deployment to your failing script.&lt;&#x2F;p&gt;
&lt;p&gt;Taking that little button out is another small nudge towards the &lt;em&gt;pause-reflect-digest&lt;&#x2F;em&gt; cycle that one needs to actually &lt;em&gt;learn&lt;&#x2F;em&gt; from a mistake.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;homer.webp&quot; alt=&quot;Me typing SUDO BASH for the first time.&quot; title=&quot;Me typing SUDO BASH for the first time.&quot; &#x2F;&gt;
&lt;em&gt;Me typing &lt;code&gt;sudo bash&lt;&#x2F;code&gt; for the first time.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;blog&#x2F;Trial-by-Error&quot;&gt;I’ve joked before&lt;&#x2F;a&gt; about the dangers of ‘&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.howtogeek.com&#x2F;126665&#x2F;htg-explains-what-does-bricking-a-device-mean&#x2F;&quot;&gt;bricking&lt;&#x2F;a&gt;’ - irreparably breaking something by copying what you don’t understand - but it’s a potent metaphor. Too often, as teachers, we incentivise the “do as I do” approach, and mistake mirrored compliance for actual understanding. In the worst case, our students end up building their knowledge on non-existent foundations, before some unscaffolded, unmodelled assessment suddenly &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.britannica.com&#x2F;video&#x2F;185615&#x2F;liquefaction-event-soil-particles-earthquake-combination-water&quot;&gt;liquifies&lt;&#x2F;a&gt; the ground and it all comes tumbling down.&lt;&#x2F;p&gt;
&lt;p&gt;If that happens, the loss of confidence can be catastrophic, and the closest to ‘bricking’ that a learner can get.  The process of rebuilding has to start with working out where the uncomprehending copying ends, and where the solid knowledge begins. And to get there, we start asking “What Am I Doing Wrong?”&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Coding on The Titanic</title>
          <pubDate>Wed, 26 Apr 2023 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/CodingOnTheTitanic/</link>
          <guid>https://maxbruges.com/blog/CodingOnTheTitanic/</guid>
          <description xml:base="https://maxbruges.com/blog/CodingOnTheTitanic/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;titanic-sinks.webp&quot; alt=&quot;The Titanic goes down; women and coders first&quot; title=&quot;The Titanic goes down; women and coders first&quot; &#x2F;&gt;
&lt;em&gt;Less “rearranging the deckchairs” and more “putting on your white tie, sitting down in the flooded dining room and wondering if there’ll be scallops to start.”&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can’t move for the doom-laden coding headlines at the moment:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.businessinsider.com&#x2F;software-engineer-coding-jobs-face-layoffs-this-year-2023-4&quot;&gt;The layoffs are here for those who chose to ‘learn to code’&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.vox.com&#x2F;technology&#x2F;2023&#x2F;4&#x2F;21&#x2F;23692515&#x2F;tech-workers-software-engineers-layoffs-meta-coding&quot;&gt;Meta layoffs show how coding jobs are no longer safe&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hackaday.com&#x2F;2023&#x2F;03&#x2F;08&#x2F;will-a-i-steal-all-the-code-and-take-all-the-jobs&#x2F;&quot;&gt;Will A.I. Steal All The Code And Take All The Jobs?&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;(And given &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;CodingOnTheTitanic&#x2F;(https:&#x2F;&#x2F;www.theringer.com&#x2F;tech&#x2F;2019&#x2F;1&#x2F;29&#x2F;18201695&#x2F;learn-to-code-twitter-abuse-buzzfeed-journalists)&quot;&gt;what they’ve gone through&lt;&#x2F;a&gt;, one should really allow the media precariat this little crumb of &lt;em&gt;schadenfreude&lt;&#x2F;em&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;So why on earth would you waste your precious youth learning to code &lt;strong&gt;now&lt;&#x2F;strong&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;The paradox of it is that even in the teeth of this apocalypse, there’s never been an &lt;em&gt;easier&lt;&#x2F;em&gt; time to learn to code. Nor a time when it’s been as frictionless and &lt;em&gt;fun&lt;&#x2F;em&gt;. And it’s precisely &lt;em&gt;because&lt;&#x2F;em&gt; of The Bots that this is the case.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;to-err-is-human-to-post-is-divine&quot;&gt;To err is human, to post is divine&lt;a class=&quot;zola-anchor&quot; href=&quot;#to-err-is-human-to-post-is-divine&quot; aria-label=&quot;Anchor link for: to-err-is-human-to-post-is-divine&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Since the year &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;January_1970#January_1&quot;&gt;zero&lt;&#x2F;a&gt;, learning computer-whispering has been a process of standing on the shoulders of prat-fallen giants.&lt;&#x2F;p&gt;
&lt;p&gt;It’s a noble tradition, founded on the principle of mining the mistakes of others for the knowledge you need, scouring long-dead Stackoverflow&#x2F; Reddit&#x2F; message-board threads to find the poor sod who had the &lt;em&gt;identical&lt;&#x2F;em&gt; error code to you, but back in April 2004 on a computer that looked like a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.pinterest.com&#x2F;pin&#x2F;old-gateway-computers--496310821445158621&#x2F;&quot;&gt;cow&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I cannot count the number of times - callow-eyed youth as I was - that I almost bricked my Eee PC, blindly copying and pasting console commands from some poorly-translated Estonian Xandros forum, only to have its 7-inch display splutter back into life thanks to the garbled incantations on page 94 of &lt;em&gt;another&lt;&#x2F;em&gt; obscure Estonian distro forum.&lt;&#x2F;p&gt;
&lt;p&gt;And this is by design! This is how &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;History_of_programming_languages&quot;&gt;computing works&lt;&#x2F;a&gt;! Piece by obscure piece, the corpus, the Canon, has been built by often-nameless men and women in computer labs and basements  and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;2347&#x2F;&quot;&gt;Nebraska&lt;&#x2F;a&gt;. And if you want to learn it properly, sometimes you’ve got to go to the source.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;school-of-athens.webp&quot; alt=&quot;The School of Athens&quot; &#x2F;&gt;
&lt;em&gt;It’s like the Academy, except Plato is some anonymous Eastern European computer science student with a profile pic of Shadow the Hedgehog&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;drinking-from-the-hosepipe&quot;&gt;Drinking from the hosepipe&lt;a class=&quot;zola-anchor&quot; href=&quot;#drinking-from-the-hosepipe&quot; aria-label=&quot;Anchor link for: drinking-from-the-hosepipe&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;So what’s different now? Well: The Bots.&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps unsurprisingly - and as a clear vindication of the ‘Relentless Googling’ school of pedagogy - they have been doing &lt;em&gt;exactly the same thing&lt;&#x2F;em&gt;. Day in, day out, they’ve been doom-scrolling. And they’ve already digested every single one of those haunted forum posts, manically hoovering it all up in the name of training data before &lt;em&gt;The Man&lt;&#x2F;em&gt; shuts off the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;techcrunch.com&#x2F;2023&#x2F;04&#x2F;18&#x2F;reddit-will-begin-charging-for-access-to-its-api&#x2F;&quot;&gt;API&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.engadget.com&#x2F;twitter-shut-off-its-free-api-and-its-breaking-a-lot-of-apps-222011637.html&quot;&gt;fire-hose&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Obviously, Bots Are Liars Sometimes. Even the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;2023&#x2F;4&#x2F;19&#x2F;23689554&#x2F;google-ai-chatbot-bard-employees-criticism-pathological-liar&quot;&gt;really expensive ones&lt;&#x2F;a&gt;.  But that’s only a problem if you treat it as a search engine, a machine for delivering Truth (and even then: come on, didn’t you have the ‘Beware of Google’ lesson in Year 6 ICT?).&lt;&#x2F;p&gt;
&lt;p&gt;Instead, treat it as what it is: a hideous amalgamated chimera of every midnight scream into the digital void, and every echo - helpful and unhelpful - that came to The Poster’s aid. The Forum is &lt;em&gt;never&lt;&#x2F;em&gt; right the first time (not unless your problem is extremely obvious, as people will &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;lmgtfy.app&#x2F;?q=how+do+i+switch+my+computer+on&quot;&gt;politely remind you&lt;&#x2F;a&gt;). It is in the sifting and panning for gold that we really learn, with the latent threat of Bricking From Blind Copying providing just enough jeopardy to give you meaningful pause to reflect. Neither should we expect The Bot, then, to be an ever-reliable truth-giver.&lt;&#x2F;p&gt;
&lt;p&gt;But what The Bot is capable of - what it excels at - is giving you an endless stream of vaguely helpful, possibly correct-sounding suggestions that might get you the solution to your problem. Or better yet, for our purposes: they’ll nudge into thinking along the right lines.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dig-your-own-grave-and-save&quot;&gt;‘Dig your own grave and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;7jYPp9w-0Uk?t=5&quot;&gt;save&lt;&#x2F;a&gt;!’&lt;a class=&quot;zola-anchor&quot; href=&quot;#dig-your-own-grave-and-save&quot; aria-label=&quot;Anchor link for: dig-your-own-grave-and-save&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Of course, the bullish case is to say the bots can &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;features&#x2F;copilot&quot;&gt;already code&lt;&#x2F;a&gt;. And I’ve no doubt at all that they can do it far better than I can, even if their errors are more hallucinatory than mine (but have &lt;em&gt;they&lt;&#x2F;em&gt; got a rich and detailed search history that includes one hundred variations of &lt;code&gt;why async not work please help&lt;&#x2F;code&gt;? I think &lt;em&gt;not&lt;&#x2F;em&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;But to say that is to miss the point. I won’t rehash the argument about the purpose of hand-making that which can be machine-produced: I’m about three hundred years &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Luddite&quot;&gt;late&lt;&#x2F;a&gt; for that one. Nor could these margins contain a worthwhile expounding on the value of creativity in the age of generative content, if only because others have &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ianleslie.substack.com&#x2F;p&#x2F;the-struggle-to-be-human&quot;&gt;made the case&lt;&#x2F;a&gt; far more eloquently already.&lt;&#x2F;p&gt;
&lt;p&gt;But I will happily argue that Learning Is Good, and anything that helps you learn must be good by proxy. It is my &lt;a href=&quot;&#x2F;about&quot;&gt;day-job&lt;&#x2F;a&gt;, after all.&lt;&#x2F;p&gt;
&lt;p&gt;Like any tool: The Bot is only as good as the purpose you put it to. And I cannot think of a better, more worthwhile exercise than learning a new skill that stretches a part of your brain that otherwise sits untouched and atrophying, bar the occasional stab of a ‘Fiendish’ sudoku.&lt;&#x2F;p&gt;
&lt;p&gt;So use The Bots. Have no shame. Just don’t brick yourself by blindly copying what they’ve told you.&lt;&#x2F;p&gt;
&lt;p&gt;And if you do: time to learn Estonian. 🇪🇪&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Hello World</title>
          <pubDate>Tue, 18 Apr 2023 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/HelloWorld/</link>
          <guid>https://maxbruges.com/blog/HelloWorld/</guid>
          <description xml:base="https://maxbruges.com/blog/HelloWorld/">&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;hello-world-pc.webp&quot; alt=&quot;A laptop showing ‘hello world’&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As it says &lt;a href=&quot;&#x2F;about&quot;&gt;on the tin&lt;&#x2F;a&gt;: I’m a teacher. It’s an incredible career, and one I’m proud to be part of.&lt;&#x2F;p&gt;
&lt;p&gt;But a niggling feeling started to at the back of my mind a few months ago.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Teachers don’t do much learning.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;That’s perhaps unfair - hardly anyone, really, does much learning &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tes.com&#x2F;magazine&#x2F;analysis&#x2F;general&#x2F;why-better-cpd-could-be-answer-teacher-retention&quot;&gt;past the age of 25&lt;&#x2F;a&gt;. I don’t mean in the self-knowledge, incremental gains kind of way; I mean in the taking on of a fundamentally new skill or new domain, something you don’t already do.&lt;&#x2F;p&gt;
&lt;p&gt;Certainly, we sit through plenty of CPD (of varying quality). But this is often either something we know already, something we’ve forgotten and need to be (legally) reminded of on a periodic basis, or some system that changes something we were doing already.&lt;&#x2F;p&gt;
&lt;p&gt;The rarity of genuinely new experiences is, I think, one of the things that hampers us from truly understanding the mind-bendingly difficult process our students go through 5 times a day, every day: being confronted with something you don’t know yet, and being unsure quite how you’ll ever get to the stage of fully understanding it.&lt;&#x2F;p&gt;
&lt;p&gt;It’s remarkable, really. It’s as though we experience collective amnesia about those horrendous few terms in Year 9 when first confronted with algebraic equations, or that torturous double period on a Thursday as a well-meaning &lt;em&gt;madame&lt;&#x2F;em&gt; patiently explained the past participle for the &lt;em&gt;soixante-dix&lt;&#x2F;em&gt; time. As though we’ve agreed to never speak of them again, and certainly not re-live the emotions.&lt;&#x2F;p&gt;
&lt;p&gt;But ever a glutton for punishment, I have thrown myself back into the unforgiving maw of learning, willingly.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;&quot;&gt;This website you’re on right now&lt;&#x2F;a&gt; - in all its hacked-together glory  - represents the half-ripened fruits of that process.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fit-your-own-lightbulbs&quot;&gt;Fit your own lightbulbs&lt;a class=&quot;zola-anchor&quot; href=&quot;#fit-your-own-lightbulbs&quot; aria-label=&quot;Anchor link for: fit-your-own-lightbulbs&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;My first, and over-riding feeling? Satisfaction. My god is it satisfying to get something, to go from clueless to clue-full. In that one brief moment (before you see the Dunning-Kruger pit gaping ahead of you) the fabric of space and time opens up and you are master of the universe. You have, through your own fleshy grey matter, taken something that was meaningless and rendered it meaningful. Where that was darkness, light; where there was fear, understanding.&lt;&#x2F;p&gt;
&lt;p&gt;The second feeling, hot on satisfaction’s heels: worry. Because one must then ask the question: how often do my students feel this? This burning, satisfied pride that comes from accumulating another brick of knowledge on their little pyramid of progress? Do they ever? Do I celebrate it when I see it? Can &lt;em&gt;I&lt;&#x2F;em&gt; see it?&lt;&#x2F;p&gt;
&lt;p&gt;When interviewing teachers, one of the most best questions you can ask is: what’s been your favourite moment in the classroom? Ninety-nine times out of a hundred, the answer will be this. The ‘light-bulb’ moment of understanding, going off in the student (usually recalcitrant, usually male), which briefly illuminates the narrow path ahead of them and makes it seem achievable.&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps we can all benefit from living a moment like this ourselves. Fit your own lightbulbs; remember what it feels like.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;just-do-it-check-mark&quot;&gt;Just do it ✔️&lt;a class=&quot;zola-anchor&quot; href=&quot;#just-do-it-check-mark&quot; aria-label=&quot;Anchor link for: just-do-it-check-mark&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The best way to learn is to do. One can read, highlight, bulletpoint, mind-map in a beautifully &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.vox.com&#x2F;the-goods&#x2F;22538703&#x2F;tiktok-productivity-hacks-gen-z&quot;&gt;Pinterest-able notebook&lt;&#x2F;a&gt;, but if you want to form and solidifying those synaptic connections, you need to actually practice. And practice that produces something is even better.&lt;&#x2F;p&gt;
&lt;p&gt;Knowing that anyone with a Wi-Fi connection and a browser can access what you show is another excellent motivator.&lt;&#x2F;p&gt;
&lt;p&gt;Having faffed around with Javascript and a little Python, there’s a great deal to be said for solidifying the nebulous world of &lt;code&gt;monospaced type&lt;&#x2F;code&gt; on a black screen into something more tangible and designed.&lt;&#x2F;p&gt;
&lt;p&gt;This site is less a &lt;a href=&quot;&#x2F;experiments&#x2F;codeplayground.html&quot;&gt;showcase&lt;&#x2F;a&gt; or portfolio, and more a sketchbook. There are lots of ideas here in various states of completion. Some are &lt;a href=&quot;&#x2F;experiments&#x2F;wotd.html&quot;&gt;demos at 99% functionality&lt;&#x2F;a&gt;, some are &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;open.spotify.com&#x2F;show&#x2F;1s44mmlysg8G7lLW5QvGb5?si=5889d05e4c8a4171&quot;&gt;projects I’ve put on ice&lt;&#x2F;a&gt; for the foreseeable, and some are &lt;a href=&quot;&#x2F;experiments&#x2F;codeplayground.html&quot;&gt;abominations of half-formed code&lt;&#x2F;a&gt; that really ought to be put out of their misery.&lt;&#x2F;p&gt;
&lt;p&gt;But each one represents one of those lightbulbs. And even if they only give off a flicker, they’re worth keeping around. 💡&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Schools&#x27; labours lost</title>
          <pubDate>Wed, 20 May 2020 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/rebuilding-relearning/</link>
          <guid>https://maxbruges.com/blog/rebuilding-relearning/</guid>
          <description xml:base="https://maxbruges.com/blog/rebuilding-relearning/">&lt;p&gt;In the aftermath of the 2011 Christchurch earthquake, schools in the city faced an unthinkable challenge: how do you return to normal? 15,000 pupils had been wrenched from their usual routines overnight - how do you bring them back?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;quake.webp&quot; alt=&quot;Christchurch Cathedral, after the 2020 earthquake&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Kiwi educators recognised that – above everything – school provides &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.stuff.co.nz&#x2F;national&#x2F;110930872&#x2F;coping-strategies-for-earthquakeaffected-children&quot;&gt;“a calm space,”&lt;&#x2F;a&gt; essential after a traumatic crisis. That thinking informed their entire approach: they prioritised getting students into classrooms above all else, to get them back to that place of greatest safety. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pdfs.semanticscholar.org&#x2F;fab3&#x2F;571f32136c23fed45d950d9f758ec29c094c.pdf&quot;&gt;The evidence says they succeeded.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;loss-and-labour&quot;&gt;Loss and labour&lt;a class=&quot;zola-anchor&quot; href=&quot;#loss-and-labour&quot; aria-label=&quot;Anchor link for: loss-and-labour&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Looking at our own coronavirus crisis, Professor Carpenter at &lt;em&gt;Evidence for Learning&lt;&#x2F;em&gt; has discussed a similar need for a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.evidenceforlearning.net&#x2F;recoverycurriculum&#x2F;&quot;&gt;‘recovery curriculum’&lt;&#x2F;a&gt;; a curriculum to repair the “5 losses, of routine, structure, friendship, opportunity and freedom” that have been suffered by pupils during the lockdown.&lt;&#x2F;p&gt;
&lt;p&gt;To describe these as “losses” is true and right. Everyone in the country is feeling a sense of loss; we don’t need to empathise with school-less children, we’re experiencing it first-hand too: our adult structures of work, politics and our social lives have all been disrupted and curtailed.&lt;&#x2F;p&gt;
&lt;p&gt;But in ten years, how keenly will that “loss” be felt? When the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cityam.com&#x2F;demand-for-uk-bonds-surges-as-government-funds-coronavirus-spree&#x2F;&quot;&gt;government bonds mature&lt;&#x2F;a&gt; and the bills need to be paid, will we as a country still remember the collective feelings of dread and confusion? Today, no one doubts the magnitude of the situation. We may not be able to see all its ramifications, but we all know it’s there.  In the 2030s, things might not seem so clear.&lt;&#x2F;p&gt;
&lt;p&gt;Which is why we need to think of these not as “losses” – losses of school routine and structure – but  as &lt;em&gt;labour.&lt;&#x2F;em&gt; Feeling withers, emotion fades, but raw economic reality endures.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-work-of-living&quot;&gt;The work of living&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-work-of-living&quot; aria-label=&quot;Anchor link for: the-work-of-living&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Discourse about emotional labour has grown over the last few years – even more so in the course of the pandemic – but the role of schools is sometimes overlooked. It’s easily done: how do you measure “safety” on spreadsheet? How do you track “security” on a league table?&lt;&#x2F;p&gt;
&lt;p&gt;Schools are not factories for exams, but a vast project to provide every child in the country with the structures and environment they need to live happily and grow safely. Regulating your life is a job, and like any job it requires training. Children do not have the skills to regulate themselves, so that job has to be done by someone.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;school-desks.webp&quot; alt=&quot;Chairs stacked on school desks&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In normal times, in normal terms, schools share this labour with parents, alongside their other (important) role of providing academic teaching and learning. But in the lockdown, that burden of labour has shifted entirely to parents. For some, this is manageable – if not exactly enjoyable – with a house large enough and wi-fi fast enough to accommodate everyone in relative peace. But every teacher in the country has a story of what they have done to help those who do not have these simple luxuries – but no number of loaned laptops will &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tes.com&#x2F;news&#x2F;coronavirus-extra-teaching-needed-plug-disadvantage-chasm&quot;&gt;plug that gap.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For a parent to carry this additional burden would be a challenge at the best of times; to do so during a global crisis, in a small house, whilst juggling your own economic uncertainty, is Herculean. Like most crisis labour, it has fallen disproportionately on those that are least able to carry it: those families with shared bedrooms or precarious employment or acute needs. School is an essential social service, existing to redistribute that labour more fairly. Once the schools gates have closed, the weight comes crashing down, hitting the poorest the hardest. This current crisis is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gov.uk&#x2F;government&#x2F;news&#x2F;free-meals-and-summer-holiday-activities-for-children&quot;&gt;summer holiday free school meals&lt;&#x2F;a&gt;, writ large.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;online-offline-bottom-line&quot;&gt;Online, offline, bottom line&lt;a class=&quot;zola-anchor&quot; href=&quot;#online-offline-bottom-line&quot; aria-label=&quot;Anchor link for: online-offline-bottom-line&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;There will be a committee room somewhere in the bowels of the DfE – perhaps not in this Parliament, but maybe the next – where a bright young Spad presents a glossy deck showcasing the brilliance of the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.thenational.academy&#x2F;&quot;&gt;Oak National Academy&lt;&#x2F;a&gt; or Google Classrooms during the pandemic and asks: if it worked then, why not now? With a balance sheet steeped in red, the cost savings of digital learning will look increasingly appealing.&lt;&#x2F;p&gt;
&lt;p&gt;It’s true that many pupils &lt;em&gt;have&lt;&#x2F;em&gt; continued to learn during the lockdown, and that teachers everywhere have gone through &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.tes.com&#x2F;news&#x2F;teachers-skills-improve-lockdown&quot;&gt;a crash-course&lt;&#x2F;a&gt; in digital distance learning. But to see that as an evolutionary step for education is to miss the point of schools and the job they do. These have been emergency measures, filling the breach in normal practice. Just because the lifeboats float doesn’t mean you scuttle your ship, even if the fuel bills would be cheaper.&lt;&#x2F;p&gt;
&lt;p&gt;If pupils are not in a classroom with a trained teacher, they don’t magically stop needing the structure that the school environment provides. Someone, somewhere, has to provide it, or those awful “losses” become the norm.&lt;&#x2F;p&gt;
&lt;p&gt;In the years to come, this pandemic should stand as a lesson in the value of this labour – not as an excuse to outsource it back to parents.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Max Bruges</title>
          <pubDate>Mon, 01 Jan 2001 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://maxbruges.com/blog/cv/</link>
          <guid>https://maxbruges.com/blog/cv/</guid>
          <description xml:base="https://maxbruges.com/blog/cv/">&lt;style&gt;
    body {
        max-width: 720px;
        display: block;
        margin-left: auto;
        margin-right: auto;
        line-height: 1.4;
    }
    img {
        max-height: 27em
    }
    table {
        min-width: 100%
    }

    h1 {
        text-align:center;
        border:none;
    }

    p, h3, h4 {
        margin-bottom: 0.5em;
        padding-bottom: 0.2em;
        margin-top: 0.7em;
    }

    @counter-style contact {
    system: cyclic;
    symbols:  🌍 📧 📞 💻 ;
    suffix: &quot;  &quot;;
}

    table li {
        list-style-type: contact;
        font-weight: 400;
        padding-left: 0.2em;
        margin-left: 0.1em;
    }

    table ul {
        margin-left:-10px
    }

    a {
        color:#000099;
    }
    &lt;&#x2F;style&gt;
&lt;!-- &lt;div style=&quot;background:rgba(240, 248, 255, 0.5);border-top:solid 1px black;&quot;&gt; --&gt;
&lt;style&gt;
table th a {
    filter: brightness(170%);
    color:#51518a;
}
&lt;&#x2F;style&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Outstanding teacher and leader in the British curriculum, experienced in improving outcomes at student, department and whole-school levels through data-driven practice.&lt;&#x2F;strong&gt; &lt;hr&gt;🌍 Dubai Marina, United Arab Emirates &lt;br&gt; 📧  &lt;a href=&quot;mailto:hello@maxbruges.com&quot;&gt;hello@maxbruges.com&lt;&#x2F;a&gt;&lt;br&gt; 📞 &lt;em&gt;[on request]&lt;&#x2F;em&gt;&lt;br&gt; 💻 &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;&quot;&gt;maxbruges.com&lt;&#x2F;a&gt;&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;&lt;img src=&quot;&#x2F;images&#x2F;headshot.webp&quot; alt=&quot;mb-headshot&quot; &#x2F;&gt;&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;employment&quot;&gt;Employment&lt;a class=&quot;zola-anchor&quot; href=&quot;#employment&quot; aria-label=&quot;Anchor link for: employment&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;repton-al-barsha-dubai&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reptonalbarsha.org&#x2F;&quot;&gt;Repton Al Barsha&lt;&#x2F;a&gt;, Dubai&lt;a class=&quot;zola-anchor&quot; href=&quot;#repton-al-barsha-dubai&quot; aria-label=&quot;Anchor link for: repton-al-barsha-dubai&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;data-lead-august-2024-present&quot;&gt;Data Lead, &lt;em&gt;August 2024 - &lt;strong&gt;Present&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#data-lead-august-2024-present&quot; aria-label=&quot;Anchor link for: data-lead-august-2024-present&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Led whole-school overhaul of data gathering and analysis processes to improve efficiency and accuracy&lt;&#x2F;li&gt;
&lt;li&gt;Improved parental communication and engagement to drive buy-in to assessment and reporting&lt;&#x2F;li&gt;
&lt;li&gt;Designed and implemented data-led behavioural monitoring and intervention system&lt;&#x2F;li&gt;
&lt;li&gt;Worked directly with Principal to prepare inspectorate and governor reports&lt;&#x2F;li&gt;
&lt;li&gt;Coordinated standardised testing suite to meet KHDA standards across Key Stages 1 to 5&lt;&#x2F;li&gt;
&lt;li&gt;Built interactive online tools and resources to provide cross-phase data insights for inspection&lt;&#x2F;li&gt;
&lt;li&gt;Delivered targeted CPD to senior and middle leaders to build data literacy skills&lt;&#x2F;li&gt;
&lt;li&gt;Worked closely with senior leadership across all phases to guide data-driven decision-making&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;head-of-english-august-2023-present&quot;&gt;Head of English, &lt;em&gt;August 2023 - &lt;strong&gt;Present&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#head-of-english-august-2023-present&quot; aria-label=&quot;Anchor link for: head-of-english-august-2023-present&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Built department to deliver first GCSE and A-Level cohorts&lt;&#x2F;li&gt;
&lt;li&gt;Line-managed growing team of teachers and literacy support staff&lt;&#x2F;li&gt;
&lt;li&gt;Designed and implement spiral curriculum up from Key Stage 3, coordinating with Junior School&lt;&#x2F;li&gt;
&lt;li&gt;Attained departmental ‘Very Good’ rating in most recent KHDA inspection&lt;&#x2F;li&gt;
&lt;li&gt;Rated as an Outstanding teacher by internal and BSO inspections&lt;&#x2F;li&gt;
&lt;li&gt;Achieved 30% increase in students attaining 120+ SAS reading scores&lt;&#x2F;li&gt;
&lt;li&gt;Collaborated with SLT to draft and implement School and Department Improvement Plans&lt;&#x2F;li&gt;
&lt;li&gt;Effectively managed staffing challenges to ensure consistency of high quality teaching&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;el-alsson-british-international-school-cairo&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.alsson.com&#x2F;&quot;&gt;El Alsson British International School&lt;&#x2F;a&gt;, Cairo&lt;a class=&quot;zola-anchor&quot; href=&quot;#el-alsson-british-international-school-cairo&quot; aria-label=&quot;Anchor link for: el-alsson-british-international-school-cairo&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;head-of-english-director-of-literacy-august-2020-july-2023&quot;&gt;Head of English &amp;amp; Director of Literacy, &lt;em&gt;August 2020 - July 2023&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#head-of-english-director-of-literacy-august-2020-july-2023&quot; aria-label=&quot;Anchor link for: head-of-english-director-of-literacy-august-2020-july-2023&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Led a core department at a high-performing international school for Key Stages 3, 4 and 5, whilst also maintaining responsibility for whole-school literacy.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Delivered improved outcomes across all three Key Stages&lt;&#x2F;li&gt;
&lt;li&gt;Enabled student to attain highest iGCSE English Language mark in Egypt&lt;&#x2F;li&gt;
&lt;li&gt;Grew department to meet expansion of school, carrying out targeted CPD to improve quality of teaching&lt;&#x2F;li&gt;
&lt;li&gt;Coordinated successful transition from National Curriculum to IB MYP programme&lt;&#x2F;li&gt;
&lt;li&gt;Department highlighted in reports by BSO and IB inspectors as examples of best practice&lt;&#x2F;li&gt;
&lt;li&gt;Implemented data-driven literacy interventions to improve Reading Ages for students in KS3&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;dagenham-park-church-of-england-school-london&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dagenhampark.org.uk&#x2F;&quot;&gt;Dagenham Park Church of England School&lt;&#x2F;a&gt;, London&lt;a class=&quot;zola-anchor&quot; href=&quot;#dagenham-park-church-of-england-school-london&quot; aria-label=&quot;Anchor link for: dagenham-park-church-of-england-school-london&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;english-teacher-epq-supervisor-august-2027-july-2020&quot;&gt;English Teacher &amp;amp; EPQ Supervisor, &lt;em&gt;August 2027 - July 2020&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#english-teacher-epq-supervisor-august-2027-july-2020&quot; aria-label=&quot;Anchor link for: english-teacher-epq-supervisor-august-2027-july-2020&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Developed teaching practice in a challenging, resource-constrained environment, meeting the complex needs of students in a comprehensive setting through high-quality pedagogy.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Designed and delivered new English Literature A-Level curriculum, achieving record number of passes&lt;&#x2F;li&gt;
&lt;li&gt;Led whole-school CPD on vocabulary-acquisition, informed by original quantitative research&lt;&#x2F;li&gt;
&lt;li&gt;Produced high quality resources for Key Stages 3, 4 and 5&lt;&#x2F;li&gt;
&lt;li&gt;Coached extra-curricular debating team to regional success&lt;&#x2F;li&gt;
&lt;li&gt;Balanced teaching duties with rigours of TeachFirst training programme&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;hill-knowlton-strategies-london&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hillandknowlton.com&#x2F;office&#x2F;london&quot;&gt;Hill + Knowlton Strategies&lt;&#x2F;a&gt;, London&lt;a class=&quot;zola-anchor&quot; href=&quot;#hill-knowlton-strategies-london&quot; aria-label=&quot;Anchor link for: hill-knowlton-strategies-london&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;senior-account-executive-october-2014-may-2017&quot;&gt;Senior Account Executive, &lt;em&gt;October 2014 - May 2017&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#senior-account-executive-october-2014-may-2017&quot; aria-label=&quot;Anchor link for: senior-account-executive-october-2014-may-2017&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;Worked across a range of international clients, including Intel, Adidas, and Amazon&lt;&#x2F;li&gt;
&lt;li&gt;Experience in drafting copy for press releases, crisis communication, and digital content&lt;&#x2F;li&gt;
&lt;li&gt;Developed relationships with a variety of media and market analyst contacts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;other-interests&quot;&gt;Other Interests&lt;a class=&quot;zola-anchor&quot; href=&quot;#other-interests&quot; aria-label=&quot;Anchor link for: other-interests&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;gess-presenter-dubai&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gessdubai.com&#x2F;max-bruges&quot;&gt;GESS&lt;&#x2F;a&gt; Presenter, Dubai&lt;a class=&quot;zola-anchor&quot; href=&quot;#gess-presenter-dubai&quot; aria-label=&quot;Anchor link for: gess-presenter-dubai&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;a-practical-guide-to-a-i-in-the-classroom-november-2023&quot;&gt;‘A Practical Guide to A.I. in the Classroom’, &lt;em&gt;November 2023&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-practical-guide-to-a-i-in-the-classroom-november-2023&quot; aria-label=&quot;Anchor link for: a-practical-guide-to-a-i-in-the-classroom-november-2023&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Delivered &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;presentation&#x2F;d&#x2F;1vKS0qiiHxLfrBxObR0uHraTY0QizGz_CDexdOevXeIE&#x2F;&quot;&gt;keynote address&lt;&#x2F;a&gt; exploring opportunities and limitations of A.I. and Large Language Models, providing an ‘absolute beginners’ introduction on how to use them in a range of educational contexts.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;british-charities-commission-cairo&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;register-of-charities.charitycommission.gov.uk&#x2F;charity-search&#x2F;-&#x2F;charity-details&#x2F;243384&#x2F;trustees&quot;&gt;British Charities Commission&lt;&#x2F;a&gt;, Cairo&lt;a class=&quot;zola-anchor&quot; href=&quot;#british-charities-commission-cairo&quot; aria-label=&quot;Anchor link for: british-charities-commission-cairo&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;trustee-august-2022-august-2023&quot;&gt;Trustee, &lt;em&gt;August 2022 - August 2023&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#trustee-august-2022-august-2023&quot; aria-label=&quot;Anchor link for: trustee-august-2022-august-2023&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Trustee of charities group supporting a range of causes across Egypt.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Scrutinised financial reports and funding proposals&lt;&#x2F;li&gt;
&lt;li&gt;Allocated £70k of funding to causes in healthcare and education&lt;&#x2F;li&gt;
&lt;li&gt;Carried out due-diligence inspections of funding recipients&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;sudanese-displaced-children-s-learning-center-cairo&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sdclc.org&#x2F;&quot;&gt;Sudanese Displaced Children’s Learning Center&lt;&#x2F;a&gt;, Cairo&lt;a class=&quot;zola-anchor&quot; href=&quot;#sudanese-displaced-children-s-learning-center-cairo&quot; aria-label=&quot;Anchor link for: sudanese-displaced-children-s-learning-center-cairo&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;consultant-professional-coach-january-2022-january-2023&quot;&gt;Consultant &amp;amp; professional coach, &lt;em&gt;January 2022 - January 2023&lt;&#x2F;em&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#consultant-professional-coach-january-2022-january-2023&quot; aria-label=&quot;Anchor link for: consultant-professional-coach-january-2022-january-2023&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Provided pedagogical training to teachers at charity school for refugees from war in Sudan.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Designed and developed training programme with Principal&lt;&#x2F;li&gt;
&lt;li&gt;Delivered multiple professional development sessions in-situ&lt;&#x2F;li&gt;
&lt;li&gt;Provided follow-up support and one-on-one coaching to embed practice&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;bbc-think-tank-glasgow&quot;&gt;BBC &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bbc.co.uk&#x2F;programmes&#x2F;b07qtbjg&quot;&gt;Think Tank&lt;&#x2F;a&gt;, Glasgow&lt;a class=&quot;zola-anchor&quot; href=&quot;#bbc-think-tank-glasgow&quot; aria-label=&quot;Anchor link for: bbc-think-tank-glasgow&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;On-screen contributor&lt;&#x2F;strong&gt; for 24 episodes, broadcast nationally in 2017 to peak audience of 6.3 million. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.theguardian.com&#x2F;tv-and-radio&#x2F;tvandradioblog&#x2F;2016&#x2F;mar&#x2F;21&#x2F;think-tank-bill-turnbulls-addictive-new-quiz-is-the-next-daytime-tv-smash#:~:text=max%20has&quot;&gt;Favourably reviewed.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;education&quot;&gt;Education&lt;a class=&quot;zola-anchor&quot; href=&quot;#education&quot; aria-label=&quot;Anchor link for: education&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;Best Practice Network (2024)&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Institute of Education UCL (2019)&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;University of Leeds (2014)&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;NPQ Senior Leadership&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;PGDE TeachFirst&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;B.A. English Literature &lt;strong&gt;1st Class&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: right&quot;&gt;Reigate Grammar School (2011)&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;&lt;em&gt;A-Levels&lt;&#x2F;em&gt;&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: right&quot;&gt;English Literature - A*&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;History - A&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Drama - A&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Philosophy &amp;amp; Ethics - A&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;!-- ---

## References

| Mrs. Zoe Cass, Assistant Head | Mr. Rod Boswell, Principal |
| :--- | :--- |
| Repton Al Barsha, Dubai | El Alsson British International School, Cairo |
| 📧 [zcass@reptonalbarsha.org](mailto:zcass@reptonalbarsha.org) | 📧 [rboswell@alsson.com](mailto:rboswell@alsson.com) |
| 📞 [+97148188600](tel:+97148188600) | 📞 [+201038270800](tel:+201038270800) | --&gt;
</description>
      </item>
      <item>
          <title>Test Page</title>
          <pubDate>Mon, 01 Jan 2001 00:00:00 +0000</pubDate>
          <author>Max Bruges</author>
          <link>https://maxbruges.com/blog/test/</link>
          <guid>https://maxbruges.com/blog/test/</guid>
          <description xml:base="https://maxbruges.com/blog/test/">&lt;p&gt;Here’s a test&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;test&#x2F;task&quot;&gt;&lt;&#x2F;a&gt; Complete the following:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A second line of the task!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;heading-1&quot;&gt;heading 1&lt;a class=&quot;zola-anchor&quot; href=&quot;#heading-1&quot; aria-label=&quot;Anchor link for: heading-1&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;And some more text&lt;&#x2F;p&gt;
&lt;h2 id=&quot;heading-2&quot;&gt;Heading 2&lt;a class=&quot;zola-anchor&quot; href=&quot;#heading-2&quot; aria-label=&quot;Anchor link for: heading-2&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;And some more text&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;dith-athens.webp&quot; alt=&quot;dith&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;dith-max.webp&quot; alt=&quot;dith&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;dith-canute.webp&quot; alt=&quot;dith&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;dith-pen.webp&quot; alt=&quot;dith&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;dith-johnson.webp&quot; alt=&quot;dithered&quot; &#x2F;&gt;
&lt;em&gt;Dithered Johnson, I presume&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;dith-johnson.png&quot; alt=&quot;dithered&quot; &#x2F;&gt;
&lt;em&gt;PNG Johnson, I presume&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;small-johnson.webp&quot; alt=&quot;dithered&quot; &#x2F;&gt;
&lt;em&gt;Small Johnson, I presume&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This is just a test page, please &lt;strong&gt;ignore&lt;&#x2F;strong&gt;. 😇&lt;&#x2F;p&gt;
&lt;h2 id=&quot;checkboxes&quot;&gt;Checkboxes&lt;a class=&quot;zola-anchor&quot; href=&quot;#checkboxes&quot; aria-label=&quot;Anchor link for: checkboxes&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
normal&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
checkboxes&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
ticked&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
not ticked&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
&lt;del&gt;ticked and strikethrough&lt;&#x2F;del&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;test&#x2F;caution&quot;&gt;&lt;&#x2F;a&gt;
This is a caution.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;test&#x2F;note&quot;&gt;&lt;&#x2F;a&gt;
This is a note.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;blog&#x2F;test&#x2F;think&quot;&gt;&lt;&#x2F;a&gt;
This is a think.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a &lt;em&gt;quote&lt;&#x2F;em&gt;
This is another &lt;strong&gt;line&lt;&#x2F;strong&gt; of the quote
This line has double space at the end
…so this ought to be a new line.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;by &lt;a href=&quot;https:&#x2F;&#x2F;maxbruges.com&#x2F;about&#x2F;&quot;&gt;Me&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Did it work?&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;python&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-python &quot;&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;hello world!&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;echo &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;hello &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;world&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
    </channel>
</rss>
