<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/feeds/stylesheet.xslt" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Oli Warner&apos;s Blog</title><description>Latest posts from Oli Warner</description><link>https://thepcspy.com/</link><css>/static/combined.DLsSxJDA.css</css><item><title>11ty wasn’t right for me</title><link>https://thepcspy.com/read/11ty-wasnt-right-for-me/</link><guid isPermaLink="true">https://thepcspy.com/read/11ty-wasnt-right-for-me/</guid><description>&lt;p&gt;In 2022 &lt;a href=&quot;https://thepcspy.com/read/turning-it-up-to-11ty/&quot;&gt;I migrated to &lt;strong&gt;11ty&lt;/strong&gt;&lt;/a&gt;, a flexible static site generator.  I thought it perfect but &lt;strong&gt;I was wrong&lt;/strong&gt; and it took &lt;em&gt;four years&lt;/em&gt; to recover  😪&lt;/p&gt;
</description><pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In 2022 &lt;a href=&quot;https://thepcspy.com/read/turning-it-up-to-11ty/&quot;&gt;I migrated to &lt;strong&gt;11ty&lt;/strong&gt;&lt;/a&gt;, a flexible static site generator.  I thought it perfect but &lt;strong&gt;I was wrong&lt;/strong&gt; and it took &lt;em&gt;four years&lt;/em&gt; to recover  😪&lt;/p&gt;
 &lt;figure style=&quot;float:right;margin: 0 0 10px 10px;max-width: 30%&quot;&gt;&lt;img src=&quot;https://thepcspy.com/read/11ty-wasnt-right-for-me/sad-11ty.svg&quot;&gt;&lt;/figure&gt;
&lt;p&gt;Let’s be clear, my last post on this was true: &lt;strong&gt;I loved deploying 11ty.&lt;/strong&gt; It was 100% right to move to a &lt;abbr title=&quot;Static Site Generator&quot;&gt;SSG&lt;/abbr&gt;, exfiltrate the content from a claggy database into markdown files, twisting the excellent &lt;a href=&quot;https://github.com/markdown-it/markdown-it&quot;&gt;&lt;code&gt;markdown-it&lt;/code&gt;&lt;/a&gt; library to handle a decade of custom tags and weird oddities, and 11ty Just Kinda Sorta Worked™. A quantum leap from the rigid Django system I’d been using &lt;a href=&quot;https://thepcspy.com/read/everything-is-new-again/&quot;&gt;since 2010&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My elation masked &lt;a href=&quot;https://thepcspy.com/read/turning-it-up-to-11ty/#whats-not-so-good&quot;&gt;the ugly bits&lt;/a&gt;, until they got in the way.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Collections&lt;/strong&gt; (posts) are very light and accessible on the surface and filtering and paging are both possible. I never managed to do both at once. I tried to unpick the code, understand what Zach was doing, but it was beyond me, the documentation and the support available at the time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Asset/design management&lt;/strong&gt; was explicitly your job. There’s no Vite or Webpack. You can manually pass your output files through processors, but nothing was there to pick up after you. I thought it was cool but quickly realised I much prefer having access to sourcemaps and not having to recompile design files manually. &lt;strong&gt;Edit&lt;/strong&gt; &lt;a href=&quot;https://www.11ty.dev/docs/server-vite/&quot;&gt;You can now use Vite&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://mozilla.github.io/nunjucks/&quot;&gt;&lt;strong&gt;Nunjucks&lt;/strong&gt;&lt;/a&gt; is the core templating language, similar to Django’s, it was quick for me to pick up but every its dissimilarity and quirk felt like a limitation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Trying to fix these things was painful. &lt;strong&gt;Zach is only one guy&lt;/strong&gt;, there are still only ~110 other contributors. It’s a really tight team with a cult following and that made getting enough support impossible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The v2 upgrade broke &lt;u&gt;&lt;em&gt;me&lt;/em&gt;&lt;/u&gt;.&lt;/strong&gt; I tried –&lt;em&gt;I really tried&lt;/em&gt;– but I couldn’t make my site work on v2. I reached out but nobody could untangle my problem and so I did the only thing I could: I gave up.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The shame of being stuck on a platform I’d just eulogised for contributed to my &lt;a href=&quot;https://thepcspy.com/read/losing-your-voice/&quot;&gt;stopping writing altogether&lt;/a&gt;. Not a sole cause, by any means, but every time I opened the site to write, all I could see was stuff I needed to fix.&lt;/p&gt;
&lt;h2 id=&quot;the-lesson-of-the-story-isnt-astro&quot;&gt;The lesson of the story isn’t Astro&lt;img src=&quot;https://thepcspy.com/read/11ty-wasnt-right-for-me/astro.svg&quot;&gt;&lt;/h2&gt;
&lt;p&gt;Wait, this incomplete pile of complaints is a lesson? Didn’t I move to Astro? Well, yeah, but &lt;strong&gt;it’s okay that 11ty didn’t work for me&lt;/strong&gt;. I’m not angry at Zach &amp;amp; co. — they helped me as much as they could with a system that I’m sure does what they need. They owe me nothing.&lt;/p&gt;
&lt;p&gt;I failed but I didn’t &lt;em&gt;&lt;strong&gt;Fail Fast&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I knew four years ago that 11ty wasn’t working for me. Rather than shop around, I convinced myself that I’d fix it one day. It was a perennial &lt;em&gt;project for another day&lt;/em&gt;. In putting it off, I nearly ruined one of my favourite hobbies. I missed every cue to correct these oversights, and lied to myself that I’d come back to it.&lt;/p&gt;
&lt;p&gt;As a three time platinum-selling parent, a key skill is being honest about mistakes, learning from them. If you don’t accomplish this cycle, you get stuck in ruts. The longer it goes on, the more peripheral damage.&lt;/p&gt;
&lt;p&gt;This site &lt;em&gt;does&lt;/em&gt; run Astro now. It took a heck of a lot of work to port my Markdown code over, and indeed was only just made possible this year inside Astro. Maybe I’ll write about it one day.&lt;/p&gt;
</content:encoded></item><item><title>Tell your kids to be plumbers</title><link>https://thepcspy.com/read/tell-kids-to-be-plumbers/</link><guid isPermaLink="true">https://thepcspy.com/read/tell-kids-to-be-plumbers/</guid><description>&lt;p&gt;A few years ago I’d have been happy if my children wanted to
follow me into a career of programming, but the longer I spend
with LLMs, the less future I see in it for any of us.
How should we advise our children for their futures?&lt;/p&gt;
</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A few years ago I’d have been happy if my children wanted to
follow me into a career of programming, but the longer I spend
with LLMs, the less future I see in it for any of us.
How should we advise our children for their futures?&lt;/p&gt;
 &lt;figure style=&quot;float:right;margin: 0 0 10px 10px;max-width: 30%&quot;&gt;&lt;img src=&quot;https://thepcspy.com/read/tell-kids-to-be-plumbers/plumber-education.avif&quot;&gt;&lt;figcaption&gt;Thanks ChatGPT&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;If you can afford tokens, programming became an &lt;strong&gt;outcome-oriented task&lt;/strong&gt;. Tell your &lt;abbr title=&quot;Large Language Model&quot;&gt;LLM&lt;/abbr&gt; what you want and wait. Ideas to &lt;abbr title=&quot;Minimum Viable Product&quot;&gt;MVP&lt;/abbr&gt; in an hour, little programming required. Senior developers’ last bastion is debugging and performance, but it’s only a matter of time. Engineering teams &lt;em&gt;will&lt;/em&gt; mutate into LLM shepherds until even seniors have no place. And my industry isn’t alone.&lt;/p&gt;
&lt;p&gt;Anything where computers became central is feeling heat: data entry, customer service, translation, technical writing, marketing, copywriting, paralegal, secretarial, accountancy and tax code, and every creative job that doesn’t rely on physical media. Junior tasks are already being done by LLMs, senior roles will follow.&lt;/p&gt;
&lt;p&gt;So what do you want your kids to be when they grow up?&lt;br&gt;
Will that still be a thing in ten years?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Let’s remember: it’s their life to live. As parent’s we sometimes like to think we’re steering but we’re not even passengers. We can advise, we can enable, but we can’t make our kids do anything and would be foolish to try.&lt;/p&gt;
&lt;h2 id=&quot;raise-barbarians-rogues-and-rangers-not-wizards&quot;&gt;Raise barbarians, rogues and rangers, not wizards&lt;/h2&gt;
&lt;p&gt;My parents, grandparents and school pushed hard towards further education and “professional” jobs. It was the only path for a bright kid. The “trades” were for kids who &lt;em&gt;failed&lt;/em&gt; at school. If you didn’t need an A-level –let alone a degree– what was the point?&lt;/p&gt;
&lt;p&gt;This feels like bad advice today. Intelligence-based jobs will still exist but not in today’s volume, and with ever increasing numbers of people (and AIs) vying for them, throwing our kids into that fray doesn’t seem like giving them opportunity, it sounds like a fight.&lt;/p&gt;
&lt;p&gt;But &lt;u&gt;&lt;strong&gt;everybody will always need plumbing&lt;/strong&gt;&lt;/u&gt;. All the tokens in the world won’t solder pipework, dig pipe trenches, stick tiles on the wall, smell gas leaks, and and they won’t carry a bath up the stairs. Robots are decades away from replacing cheap meatbags so plumbing is safe from automation, while still being diverse, entrepreneurial and often creative enough to engage an active mind.&lt;/p&gt;
&lt;p&gt;The important thing is raising kids with the awareness of what jobs are actually available. They can’t all be doctors and influencers. There are lots of STR and DEX builds available. Don’t be afraid to dual class.&lt;/p&gt;
&lt;h2 id=&quot;education-still-adds-value-and-opportunity&quot;&gt;Education still adds value and opportunity&lt;/h2&gt;
&lt;p&gt;What do &lt;em&gt;I&lt;/em&gt; want my kids to be? &lt;strong&gt;Happy&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Forcing them out of school into an apprenticeship is unlikely to achieve that, and as much as I worry about the future of employment, will more education ever be bad? Further education isn’t a checkbox qualification. It coaches people how to think, research, learn and grow.&lt;/p&gt;
&lt;p&gt;Higher education needs to catch up with the world. £100k for a 5y medical degree, 40 year career &lt;em&gt;might&lt;/em&gt; make sense, but what about the degrees without an attached career? Rather than get tribal about what should be allowed at university, I think we need to be more flexible with learning. Is there anything wrong with learning about the Italian Renaissance &lt;em&gt;while&lt;/em&gt; training as a plumber? Similarly, we should help adults go back to education, learn more. More night schools, more vocational courses.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;do&lt;/em&gt; worry about the future, but that’s always been a parent’s job.&lt;/p&gt;
</content:encoded></item><item><title>Microbit: easier with extensions</title><link>https://thepcspy.com/read/microbit-easier-with-extensions/</link><guid isPermaLink="true">https://thepcspy.com/read/microbit-easier-with-extensions/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://microbit.org/get-started/what-is-the-microbit/&quot;&gt;BBC Microbit&lt;/a&gt; is a wonderful introduction to both programming and electronics, but &lt;a href=&quot;https://makecode.microbit.org/blocks&quot;&gt;MakeCode’s Blocks&lt;/a&gt; make some ideas quite hard to express.&lt;/p&gt;
</description><pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The &lt;a href=&quot;https://microbit.org/get-started/what-is-the-microbit/&quot;&gt;BBC Microbit&lt;/a&gt; is a wonderful introduction to both programming and electronics, but &lt;a href=&quot;https://makecode.microbit.org/blocks&quot;&gt;MakeCode’s Blocks&lt;/a&gt; make some ideas quite hard to express.&lt;/p&gt;
 &lt;figure style=&quot;float:right;margin: 0 0 10px 10px;max-width: 30%&quot;&gt;&lt;img src=&quot;https://thepcspy.com/read/microbit-easier-with-extensions/microbit-drawing-2-yellow.avif&quot;&gt;&lt;/figure&gt;
&lt;p&gt;Introducing my 6yo to robotics, I’m conscious how important it is to keep things interesting, to keep difficulties abstracted, hidden. Buzzers, LEDs, motor controllers and servos are pretty much plug-and-play these days but &lt;em&gt;control&lt;/em&gt; is harder. You want speed, direction, some buttons for features and ideally some method of feedback.&lt;/p&gt;
&lt;p&gt;The builtin BLE allows &lt;a href=&quot;https://www.youtube.com/watch?v=QxVwzhAZq3Y&quot;&gt;phone apps&lt;/a&gt;, but I try to keep my kids off phones. There isn’t a proper BT stack available to the Microbit, so real controllers are out. IR is super cheap but the experience is short range and very directional. Similarly a corded remote  works &lt;em&gt;with caveats&lt;/em&gt;. But none are ideal.&lt;/p&gt;
&lt;h2 id=&quot;use-another-microbit&quot;&gt;Use another Microbit.&lt;/h2&gt;
&lt;p&gt;The radio module in the Microbit is awesome. Its Nordic nRF5xxxx SoC has a proprietary low-latency communication protocol called &lt;a href=&quot;https://nrfconnectdocs.nordicsemi.com/ncs/3.2.2/nrf/protocols/esb/index.html&quot;&gt;Enhanced ShockBurst&lt;/a&gt;. Microbit software builds on top of this for a super-simple message exchange format. Pick a channel and just send and receive 32byte messages.&lt;/p&gt;
&lt;p&gt;A Microbit on its own does have enough sensors to act as a HCI device: accelerometer for directions, two or three buttons depending on your version, but you still have to add batteries, and tilting isn’t the best interface. In a pinch, sure, but better options exist. I have –and would recommmend– a &lt;a href=&quot;https://wiki.elecfreaks.com/en/microbit/expansion-board/joystick-bit-v2/&quot;&gt;Joystick v2 Plus&lt;/a&gt;. ~£15 buys you a x-y axes, four buttons, buzzer, vibration feedback, battery case and the plus version has handles (which you could 3d print).&lt;/p&gt;
&lt;h2 id=&quot;if-its-so-good-why-use-extensions&quot;&gt;If it’s so good, why use extensions?&lt;/h2&gt;
&lt;p&gt;We have our hardware but how do we take that input and send it to our robot? &lt;a href=&quot;https://www.elecfreaks.com/learn-en/microbitKit/smart_cutebot/cutebot_case13.html&quot;&gt;Elecfreaks’ example&lt;/a&gt; would have your controller send named events for both axes, every button. 🤮&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://thepcspy.com/read/microbit-easier-with-extensions/elecfreaks.avif&quot;&gt;&lt;/figure&gt;
&lt;p&gt;You have to unpick each message separately. These messages are processed in a queue with the main forever loop, it’s possible –likely, even– you’re going to have forever loops where you’re dealing with old data. What about key combinations?&lt;/p&gt;
&lt;p&gt;In a &lt;em&gt;real&lt;/em&gt; programming language, you’d pack all your data into one packet and send it off and decode it all at once. 8 bits each for &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt;. 1 bit per button. In a real language you can use bitwise operators to pack the bits together into a single number, and break them apart just as easily.&lt;/p&gt;
&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;    x    |     y    |  c  |  d  |  e  |  f  
00000000 | 00000000 |  0  |  0  |  0  |  0 &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But Blocks lacks the tools for encoding this stuff into a single message … without extensions. So I wrote a &lt;a href=&quot;https://github.com/oliwarner/joystickbitRadio/&quot;&gt;&lt;strong&gt;joystickbit-radio&lt;/strong&gt; extension&lt;/a&gt; extension to do exactly that. I turns the joypad state into a single number you just transmit over the normal radio block. For the user it’s as simple as dragging a few blocks:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://thepcspy.com/read/microbit-easier-with-extensions/joystickbit-radio-sender.avif&quot;&gt;&lt;/figure&gt;
&lt;aside&gt;&lt;details&gt;&lt;summary&gt;See what it&apos;s doing behind the scenes...&lt;/summary&gt;&lt;p&gt;It’s pretty simple to pack a binary format up with bitwise operators.&lt;/p&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span&gt;let&lt;/span&gt; value&lt;span&gt;:&lt;/span&gt;&lt;span&gt;number&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;0&lt;/span&gt;

value &lt;span&gt;|=&lt;/span&gt; Math&lt;span&gt;.&lt;/span&gt;&lt;span&gt;idiv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRockerValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;rockerType&lt;span&gt;.&lt;/span&gt;&lt;span&gt;X&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;4&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
value &lt;span&gt;|=&lt;/span&gt; Math&lt;span&gt;.&lt;/span&gt;&lt;span&gt;idiv&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRockerValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;rockerType&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Y&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;4&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span&gt;8&lt;/span&gt;

&lt;span&gt;if&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;JoystickBitPin&lt;span&gt;.&lt;/span&gt;&lt;span&gt;P12&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
    value &lt;span&gt;|=&lt;/span&gt; &lt;span&gt;1&lt;/span&gt; &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span&gt;16&lt;/span&gt;

&lt;span&gt;if&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;JoystickBitPin&lt;span&gt;.&lt;/span&gt;&lt;span&gt;P13&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
    value &lt;span&gt;|=&lt;/span&gt; &lt;span&gt;1&lt;/span&gt; &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span&gt;17&lt;/span&gt;

&lt;span&gt;if&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;JoystickBitPin&lt;span&gt;.&lt;/span&gt;&lt;span&gt;P14&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
    value &lt;span&gt;|=&lt;/span&gt; &lt;span&gt;1&lt;/span&gt; &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span&gt;18&lt;/span&gt;

&lt;span&gt;if&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getButton&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;joystickbit&lt;span&gt;.&lt;/span&gt;JoystickBitPin&lt;span&gt;.&lt;/span&gt;&lt;span&gt;P15&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
    value &lt;span&gt;|=&lt;/span&gt; &lt;span&gt;1&lt;/span&gt; &lt;span&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span&gt;19&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can’t do &lt;em&gt;that&lt;/em&gt; with Blocks.&lt;/p&gt;&lt;/details&gt;&lt;/aside&gt;
&lt;p&gt;And at the other end, I’ve added some sugar. Not only does it decode, it adds events for button handling, utilities for mapping to different scales, or even tank tracking. &lt;a href=&quot;https://makecode.microbit.org/_LKz9J6U42DCR&quot;&gt;It makes the whole endeavour for users much, much easier&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://thepcspy.com/read/microbit-easier-with-extensions/joystickbit-radio.avif&quot;&gt;&lt;/figure&gt;
&lt;p&gt;Extensions allow you to create Blocks that &lt;strong&gt;do stuff&lt;/strong&gt; like this. I’m not saying you should use my extension –you can– rather &lt;em&gt;&lt;strong&gt;you can write your own!&lt;/strong&gt;&lt;/em&gt; It’s pretty simple and helping your learners before they get stuck will allow them to stay immersed, far longer. Nothing breaks a learning experience like debugging a system you don’t understand, or a impromptu maths lesson on how to unpick a right-to-left axis, or have to learn javascript before they could start.&lt;/p&gt;
&lt;p&gt;Blocks is great for discovering the Microbit API, it pays dividends to make it Good Enough™ rather than push people to harder environments.&lt;/p&gt;
&lt;p&gt;Things I used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://makecode.com/extensions/getting-started&quot;&gt;https://makecode.com/extensions/getting-started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://makecode.com/defining-blocks&quot;&gt;https://makecode.com/defining-blocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://makecode.com/playground&quot;&gt;https://makecode.com/playground&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Lead image from &lt;a href=&quot;https://thepcspy.com/read/microbit-easier-with-extensions/microbit.org&quot;&gt;micro Educational Foundation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item></channel></rss>