add shkspr.mobi Atom feed (new Wordpress version) - sfeed_tests - sfeed tests a… | |
git clone git://git.codemadness.org/sfeed_tests | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit c4166385ca59f5f4b8cb8e306408a2918f1f124f | |
parent 235966bbea4038cb8718d996ceabd7359d490410 | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Sat, 12 Jul 2025 12:42:55 +0200 | |
add shkspr.mobi Atom feed (new Wordpress version) | |
Diffstat: | |
A input/sfeed/realworld/shkspr.mobi.… | 1676 +++++++++++++++++++++++++++… | |
1 file changed, 1676 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/input/sfeed/realworld/shkspr.mobi.atom.xml b/input/sfeed/realworld… | |
@@ -0,0 +1,1676 @@ | |
+<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="https://shkspr.mo… | |
+ xmlns="http://www.w3.org/2005/Atom" | |
+ xmlns:thr="http://purl.org/syndication/thread/1.0" | |
+ xml:lang="en-GB" | |
+ > | |
+ <title type="text">Terence Eden’s Blog</title> | |
+ <subtitle type="text">Regular nonsense about tech and its effects 🙃… | |
+ | |
+ <updated>2025-07-09T21:12:31Z</updated> | |
+ | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mobi/blog"… | |
+ <id>https://shkspr.mobi/blog/feed/atom/</id> | |
+ <link rel="self" type="application/atom+xml" href="https://shkspr.mobi… | |
+ | |
+ <generator uri="https://wordpress.org/" version="6.8.1">WordPress</gen… | |
+<icon>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32… | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Gadget Review: Thermal Imaging Cam… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61523</id> | |
+ <updated>2025-07-09T21:12:31Z</updated> | |
+ <published>2025-07-10T11:34:53Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[I've reviewed several therm… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>I've reviewed <a h… | |
+ | |
+<p>Topdon have sent me a mid-point model to review. It's relatively cheap for … | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/71IGxD6iDyL._SL7… | |
+ | |
+<p>While it has a bunch of useful features, there's no video recording and it … | |
+ | |
+<h2 id="the-good-points"><a href="https://shkspr.mobi/blog/2025/07/gadget-revi… | |
+ | |
+<p>It seems broadly accurate. Point it at a bunch of things and you can see th… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/IR20250623073108… | |
+ | |
+<p>That's the actual size of the file. Their marketing bumph says:</p> | |
+ | |
+<blockquote><p>TISR (Thermal Image Super Resolution) uses AI algorithms to add… | |
+ | |
+<p>Let's be honest, there's no AI in a device this cheap. There are various co… | |
+ | |
+<p>Quick start up is great. It is ready to go a few seconds after pushing the … | |
+ | |
+<p>The trigger grip is comfortable and responsive - it makes the whole device … | |
+ | |
+<p>There's a standard tripod screw fitting at the bottom.</p> | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/tripod.jpg" alt=… | |
+ | |
+<p>The camera is at a slight angle from the grip, so you'll need a tripod with… | |
+ | |
+<p>There's a file-browser built in - which also lets you delete photos.</p> | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/File-Browser.web… | |
+ | |
+<p>USB-C for charging and data transfer. Same as all your other gadgets, I hop… | |
+ | |
+<h2 id="but"><a href="https://shkspr.mobi/blog/2025/07/gadget-review-thermal-i… | |
+ | |
+<p>Resolution is low. That's normal for these sorts of cameras, but because th… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/IR20250622072705… | |
+ | |
+<p>The interface is basic. It doesn't look brilliant, but it is usable.</p> | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/Menu.webp" alt="… | |
+ | |
+<p>Setting the time, for example, is a bit of a pain:</p> | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/date-time-settin… | |
+ | |
+<p>Once you've gone in to set the time and other basic settings, you'll probab… | |
+ | |
+<p>Storage space is low - only 480MB. To be fair, images are under 100KB, so y… | |
+ | |
+<p>There's no video recording. That's a bit of an arse if you want to see how … | |
+ | |
+<p>You can't extract temperature information from the images. There's no EXIF,… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/IR20250702154023… | |
+ | |
+<p>The rubber flap protecting the charging port makes it difficult to insert t… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/usb-c.jpg" alt="… | |
+ | |
+<p>Because the port is on the top of the device, it's sensible to protect it f… | |
+ | |
+<h2 id="linux-information"><a href="https://shkspr.mobi/blog/2025/07/gadget-re… | |
+ | |
+<p>This shows up as <code>3474:0020 Raysentek Co.,Ltd Raysentek MTP</code>. In… | |
+ | |
+<p>I couldn't detect anything with <code>mtp-device</code> - it didn't show up… | |
+ | |
+<p><code>lsusb -v</code> shows it claims to support <a href="https://en.wikipe… | |
+ | |
+<p>I reset the device, formatted its memory, used different cables and ports, … | |
+ | |
+<p>Which rather puts a damp squib on things. If you can't get the images off t… | |
+ | |
+<p>It <em>will</em> work with Windows. I tried it in VirtualBox and it showed … | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/Cobra.webp" alt=… | |
+ | |
+<h2 id="verdict"><a href="https://shkspr.mobi/blog/2025/07/gadget-review-therm… | |
+ | |
+<p>Fora quick and dirty inspection, this is a perfectly fine little device. Po… | |
+ | |
+<p>The tripod attachment is handy and there are enough settings hidden away fo… | |
+ | |
+<p>The buttons feel a bit crap and flap gets in the way of the USB-C charging … | |
+ | |
+<p>It doesn't work with Linux or Android - I wasn't able to test it on a Mac -… | |
+ | |
+<p>This is one of the cheapest stand-alone thermal cameras you can buy. Necess… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>1</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Book Review: The World After Amazo… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61798</id> | |
+ <updated>2025-07-07T15:55:01Z</updated> | |
+ <published>2025-07-09T11:34:09Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[This is a brilliant idea for a s… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>This is a brillian… | |
+ | |
+<blockquote><p>The Worker as Futurist project asks another question: if SF is … | |
+ | |
+<p>I'll be honest, it feels a <em>little</em> patronising. The project articu… | |
+ | |
+<blockquote><p>We at the Worker as Futurist project believe that workers can f… | |
+ | |
+<p>Still, it makes for a fascinating introduction to a somewhat uneven set of … | |
+ | |
+<p>The afterword is very clear about the reason for this book existing:</p> | |
+ | |
+<blockquote><p>To me, it never mattered whether or not the stories written by … | |
+ | |
+<p>And I heartily agree with that. I'd rather read a new writer explore the pr… | |
+ | |
+<p>The book is free to download or, if you think the master's tools can disman… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>0</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Book Review: Problems Have No Sex … | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=58424</id> | |
+ <updated>2025-07-06T21:40:44Z</updated> | |
+ <published>2025-07-08T11:34:34Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[This is the best book on practic… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>This is the best b… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/Book-Cover.webp"… | |
+ | |
+<p>I'm fascinated by the evolution of feminist discourse in 20th Century UK. … | |
+ | |
+<p>As part of her battle for equality, she wrote a book called Problems Have N… | |
+ | |
+<p>So I made a request to the British Library and, a few days later, sat down … | |
+ | |
+<p>All books writing from 2020 will be in the shadow of Covid19. This book, pu… | |
+ | |
+<p>The influx of women into traditionally male environments allowed for a <em>… | |
+ | |
+<blockquote><p>Sir Robert Watson Watt, the discoverer of radiolocation, speaki… | |
+ | |
+<p>It is evident, however, that in addition to the revision of the school syll… | |
+ | |
+<p>There are signs that this is occurring spontaneously. A boy reproached by h… | |
+ | |
+<p>The book spends a decent amount of space on pregnancy and its effects on wo… | |
+ | |
+<p>In amongst some slightly tedious legal matters of the day are some forthrig… | |
+ | |
+<blockquote><p>Women must see that the vast amount of talk which there has bee… | |
+ | |
+<p>Haslett is undoubtedly technocratic but, above all, she is realistic. She h… | |
+ | |
+<blockquote><p>The sense of having prove herself equal to a male colleague so… | |
+ | |
+<p>In manual as opposed to professional types of work the fear "If I show her … | |
+ | |
+<p>Equal pay is a battle which is still being fought, unfortunately.</p> | |
+ | |
+<p>There is also just a <em>hint</em> of radical politics lurking under the so… | |
+ | |
+<p>There's also an undercurrent of rage directed at the women who helped bring… | |
+ | |
+<blockquote><p>The rise of Nazi Germany and Fascist Italy was made possible by… | |
+ | |
+<p>Prophetically, she notes that the next 20 years should be one of the most i… | |
+ | |
+<p>Unlike some other books, this is realistic about the timeframes involved in… | |
+ | |
+<p>Women's organisations are also the recipient of Haslett's unsentimental gaz… | |
+ | |
+<p>There is a whole discussion about the structural ephemera which causes rese… | |
+ | |
+<p>Now, obviously, people are the product of their time. The book is strongly … | |
+ | |
+<blockquote><p>Although in Great Britain and the United States women have achi… | |
+ | |
+<p>Just as different races have reached different stages of civilization so th… | |
+ | |
+<p>While these differences and inequalities persist, trained women will have a… | |
+ | |
+<p>It is necessary also to have a realistic appreciation of the differences th… | |
+ | |
+<p>The women of Japan were enfranchised almost simultaneously with the women o… | |
+ | |
+<p>Yet to deduce from the equality of political rights conferred on the women … | |
+ | |
+<p>The traditional Japanese woman, educated from birth to consider herself of … | |
+ | |
+<p>The adoption of Western democratic machinery by nations of other cultural t… | |
+ | |
+<p>Some of the Eastern nations are tackling their problems themselves with con… | |
+ | |
+<p>In this age we are setting up the pattern for life of succeeding generation… | |
+ | |
+<p>She is curiously circumspect on the issue of disability. Post-war, I imagin… | |
+ | |
+<blockquote><p>Yet even in Britain a very great number of people lead unnecess… | |
+ | |
+<p>Ultimately, this book is about what we owe to each other. Women won the war… | |
+ | |
+<p>"Problems Have No Sex" is <em>far</em> better than many other feminist book… | |
+ | |
+<p>Every feminist should read this book. I'm annoyed that it has never been re… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>1</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Grinding down open source maintain… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61265</id> | |
+ <updated>2025-07-02T16:34:08Z</updated> | |
+ <published>2025-07-07T11:34:09Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[Early one morning I received an … | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>Early one morning … | |
+ | |
+<blockquote> | |
+<h2 id="%f0%9f%98%b1-i-cant-use-on-this-day-%f0%9f%98%ad"><a href="https://shk… | |
+Seriously, What’s Going On?! <img src="https://s.w.org/images/core/emoji/15.… | |
+I’ve been trying to use the On This Day feature, but it’s just not working… | |
+Every time I input my details, it says I have no posts for today, even though … | |
+ | |
+<h3 id="heres-my-setup-%e2%9a%99%ef%b8%8f"><a href="https://shkspr.mobi/blog/2… | |
+ | |
+<ul> | |
+ <li>Python 3.x <img src="https://s.w.org/images/core/emoji/15.1.0/72x7… | |
+ <li>Access token fully generated (I triple-checked!) <img src="https://s.w… | |
+ <li>Attempted on multiple instances but still nothing! <img src="https… | |
+</ul> | |
+ | |
+<h3 id="could-it-be-a-bug-%f0%9f%a4%94"><a href="https://shkspr.mobi/blog/2025… | |
+ | |
+I’m really starting to doubt my posting history! <img src="https://s.w.org/i… | |
+Is it supposed to show only specific types of posts?<br> | |
+I’ve made some pretty epic posts before! <img src="https://s.w.org/images/co… | |
+ | |
+<h3 id="documentation-confusion-%f0%9f%93%9a"><a href="https://shkspr.mobi/blo… | |
+ | |
+The README says to register for an access token but doesn’t clarify if it fa… | |
+Did I miss something REALLY important?!<br> | |
+Help me figure this out, please!!! <img src="https://s.w.org/images/core/emoji… | |
+ | |
+<h3 id="feature-suggestion-%f0%9f%92%ad"><a href="https://shkspr.mobi/blog/202… | |
+ | |
+If this is broken, can we at least have a debug mode to log what’s happening… | |
+I need to know if it’s truly my fault or the code’s! <img src="https://s.w… | |
+Thanks for looking into this TRAGIC situation!!! <img src="https://s.w.org/ima… | |
+<br> | |
+P.S. My friends ARE posting on this day and their instances work!! <img src="h… | |
+I feel so left out!! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/… | |
+Let’s get this sorted ASAP! <img src="https://s.w.org/images/core/emoji/15.1… | |
+</blockquote> | |
+ | |
+<p>OK, that's a <em>lot</em> of Emoji - too much even for me! But if one of my… | |
+ | |
+<p>I clicked on the link to the Codeberg repository and was hit be a 404! What… | |
+ | |
+<p>"Seriously, What’s Going On?! <img src="https://s.w.org/images/core/emoji… | |
+ | |
+<p>It looks like Codeberg has been hit by a wave of spam bug reports. I read … | |
+ | |
+<p>A few weeks later, I got a bug report to a different repo. This one was als… | |
+ | |
+<blockquote><p>I've been trying to use the Threads tool to visualize some conv… | |
+</p><p>When I input the URL for a post with a substantial number of replies, t… | |
+</p><p>It's unclear what's actually happening here. Is the script failing sile… | |
+</p><p>Can you please add some kind of error handling or logging feature to th… | |
+</p><p>Thanks for addressing this. I hope to see improvements soon.</p></block… | |
+ | |
+<ul> | |
+<li>The emotional manipulation starts in the first line - telling me how frust… | |
+<li>It turns the blame on me for providing poor guidance.</li> | |
+<li>Then the criticism of the tool.</li> | |
+<li>Next, a request that I do work.</li> | |
+<li>Finally some more emotional baggage for me to carry.</li> | |
+</ul> | |
+ | |
+<p>I'm not alone in getting these - <a href="https://merveilles.town/@raboof/1… | |
+ | |
+<p>To be fair to Codeberg, they are under attack and are trying to stop these … | |
+ | |
+<blockquote class="mastodon-embed" data-embed-url="https://social.anoxinon.de/… | |
+ | |
+<script data-allowed-prefixes="https://social.anoxinon.de/" async="" src="http… | |
+ | |
+<p>But, still, search the socials and you'll find a stream of frustrated devel… | |
+ | |
+<blockquote class="bluesky-embed" data-bluesky-uri="at://did:plc:i7qrqashiejms… | |
+ | |
+I immediately knew it was AI spam due to the overuse of emojis…<img src="htt… | |
+ | |
+<script async="" src="https://embed.bsky.app/static/embed.js" charset="utf-8">… | |
+ | |
+<h2 id="whats-going-on%e2%81%89%ef%b8%8f"><a href="https://shkspr.mobi/blog/20… | |
+ | |
+<p>I can only think of a few possibilities - none of them particularly positiv… | |
+ | |
+<ul> | |
+<li>Attacking the viability of CodeBerg - make users abandon it for a differen… | |
+<li>Attacking the attention of developers - make them unwilling to give attent… | |
+<li>Attacking the integrity of users - make them less likely to receive help b… | |
+<li>Maybe it is just a bored kid or an unethical researcher. Trying to find th… | |
+</ul> | |
+ | |
+<p>Either way, AI bug reports like this are about as welcome as a haemorrhage … | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>2</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Get the location of the ISS using … | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61693</id> | |
+ <updated>2025-07-06T07:51:14Z</updated> | |
+ <published>2025-07-06T11:34:33Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[I love DNS esoterica. Weird litt… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>I love DNS esoteri… | |
+ | |
+<p>Domain names, like <code>www.example.com</code> usually resolve to servers.… | |
+ | |
+<p>Got a tricky machine which is playing silly-buggers? Wouldn't it be nice to… | |
+ | |
+<p>Enter the DNS LOC record!</p> | |
+ | |
+<p>The snappily titled <a href="https://www.rfc-editor.org/rfc/rfc1876.html">R… | |
+ | |
+<p>The standard allows for a minimum altitude of -100,000 metres - deep enough… | |
+ | |
+<p>So, as a bit of fun, I decided to create <code>where-is-the-iss.dedyn.io</c… | |
+ | |
+<p>It isn't a website. You can't ping it. There's no way to interact with it <… | |
+ | |
+<p>Linux and Mac users<sup id="fnref:win"><a href="https://shkspr.mobi/blog/20… | |
+ | |
+<p><code>dig where-is-the-iss.dedyn.io LOC</code></p> | |
+ | |
+<p>And receive back the latest position of the ISS:</p> | |
+ | |
+<pre><code class="language-_">;; ANSWER SECTION: | |
+where-is-the-iss.dedyn.io. 1066 IN LOC 47 24 53.500 N 66 12 12.070 W 430520m … | |
+</code></pre> | |
+ | |
+<p>The DNS records are updated every 15 minutes on a best-effort basis<sup id=… | |
+ | |
+<h2 id="how"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the… | |
+ | |
+<p>The lovely people at <a href="https://www.n2yo.com">N2YO</a> have a website… | |
+ | |
+<p>Calling <code>https://api.n2yo.com/rest/v1/satellite/positions/25544/0/0/0/… | |
+ | |
+<pre><code class="language-json">{ | |
+ "info": { | |
+ "satname": "SPACE STATION", | |
+ "satid": 25544, | |
+ "transactionscount": 7 | |
+ }, | |
+ "positions": [ | |
+ { | |
+ "satlatitude": -21.25409321, | |
+ "satlongitude": 140.3335763, | |
+ "sataltitude": 420.09, | |
+ "azimuth": 292.92, | |
+ "elevation": -70.95, | |
+ "ra": 202.69300845, | |
+ "dec": -32.16097472, | |
+ "timestamp": 1751366048, | |
+ "eclipsed": true | |
+ } | |
+ ] | |
+} | |
+</code></pre> | |
+ | |
+<p>Note that the altitude is in Km, whereas the LOC format requires m.</p> | |
+ | |
+<p>The latitude and longitude are in decimal format - they need to be converte… | |
+ | |
+<p>There were only a few free domain name providers who offer an API for updat… | |
+ | |
+<p>Adding the initial LOC record is done with:</p> | |
+ | |
+<pre><code class="language-bash">curl https://desec.io/api/v1/domains/where-is… | |
+ --header "Authorization: Token _______" \ | |
+ --header "Content-Type: application/json" --data @- <<< \ | |
+ '{"type": "LOC", "records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m … | |
+</code></pre> | |
+ | |
+<p>However, updating the record is a little trickier. it needs to be sent as a… | |
+ | |
+<pre><code class="language-bash">curl -X PATCH https://desec.io/api/v1/domains… | |
+ --header "Authorization: Token _______" \ | |
+ --header "Content-Type: application/json" --data @- <<< \ | |
+ '{"records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"]}' | |
+</code></pre> | |
+ | |
+<p>I set the <a href="https://ttl-calc.com/">Time To Live</a> at 900 seconds. … | |
+ | |
+<p>There you have it! A complex and silly way to demonstrate how DNS can be us… | |
+ | |
+<h2 id="further-reading"><a href="https://shkspr.mobi/blog/2025/07/get-the-loc… | |
+ | |
+<p>For more DNS weirdness, please see my other posts:</p> | |
+ | |
+<ul> | |
+<li><a href="https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-tx… | |
+<li><a href="https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-s… | |
+</ul> | |
+ | |
+<div class="footnotes" role="doc-endnotes"> | |
+<hr> | |
+<ol start="0"> | |
+ | |
+<li id="fn:win" role="doc-endnote"> | |
+<p>I don't think there's a way for Windows users to look up LOC records using … | |
+</li> | |
+ | |
+<li id="fn:nasa" role="doc-endnote"> | |
+<p>Look, I'm not NASA, OK? If you're using this to help you dock then I cannot… | |
+</li> | |
+ | |
+<li id="fn:api" role="doc-endnote"> | |
+<p>I suppose you could build an API with unlimited request limits by distribut… | |
+</li> | |
+ | |
+<li id="fn:naptr" role="doc-endnote"> | |
+<p>See if you can find the other interesting record I've added to DNS! <a… | |
+</li> | |
+ | |
+</ol> | |
+</div> | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>11</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Book Review: The Department of Rar… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61430</id> | |
+ <updated>2025-07-01T09:16:33Z</updated> | |
+ <published>2025-07-05T11:34:47Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[I did not care for this book at … | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p><img src="https://… | |
+ | |
+<p>Much like <a href="https://shkspr.mobi/blog/2025/06/book-review-the-martian… | |
+ | |
+<p>At various points she's "Ashamed, embarrassed, disgusted with herself" or r… | |
+ | |
+<p>The prose was plodding and there are some excruciating attempts at expositi… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>0</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Making My Own Hacktoberfest T-Shir… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61656</id> | |
+ <updated>2025-07-04T11:29:23Z</updated> | |
+ <published>2025-07-04T11:34:54Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[Between 2014 and 2022, DigitalOc… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>Between 2014 and 2… | |
+ | |
+<p>I'm the sort of hip fashionista who <em>only</em> wears free conference t-s… | |
+ | |
+<blockquote class="social-embed" id="social-embed-958377102641893376" lang="en… | |
+ | |
+<p>Sadly, after several years of constant catwalk modelling, my beloved Hackto… | |
+ | |
+<p>Note: <a href="https://github.com/Hacktoberfest/hacktoberfest-2022/blob/mai… | |
+ | |
+<h2 id="the-logos"><a href="https://shkspr.mobi/blog/2025/07/making-my-own-hac… | |
+ | |
+<p>There are <a href="https://dev.to/fernandezbaptiste/last-10-years-of-hackto… | |
+ | |
+<h3 id="low-resolution"><a href="https://shkspr.mobi/blog/2025/07/making-my-ow… | |
+ | |
+<p>Kotis - a design agency - did the Hacktoberfest swag from 2015-2020. They … | |
+ | |
+<ul> | |
+<li>2020 <img src="https://go.kotisdesign.com/wp-content/uploads/2020/02/Artbo… | |
+<li>2019 <img src="https://go.kotisdesign.com/wp-content/uploads/2020/02/Artbo… | |
+<li>2018 <img src="https://go.kotisdesign.com/wp-content/uploads/2020/02/Artbo… | |
+<li>2017 <img src="https://go.kotisdesign.com/wp-content/uploads/2020/02/Artbo… | |
+<li>2016 <img src="https://go.kotisdesign.com/wp-content/uploads/2020/02/Artbo… | |
+<li>2015 <img src="https://go.kotisdesign.com/wp-content/uploads/2020/02/Artbo… | |
+</ul> | |
+ | |
+<p>Similarly, there are a few low resolution promo shots of the t-shirts or th… | |
+ | |
+<ul> | |
+<li><a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2f1eggqi… | |
+<li><a href="https://user-images.githubusercontent.com/99407553/194741467-af24… | |
+<li><a href="https://cerealtree.wordpress.com/wp-content/uploads/2016/11/hackt… | |
+<li><a href="https://github.blog/wp-content/uploads/2015/09/d13f20be-66f9-11e5… | |
+<li><a href="https://hacktoberfesthowto.github.io/images/2014Logo.webp">2014</… | |
+</ul> | |
+ | |
+<p>AI upscaling looked typically rubbish.</p> | |
+ | |
+<h3 id="higher-resolution-bitmaps"><a href="https://shkspr.mobi/blog/2025/07/m… | |
+ | |
+<p>Some designers have their logo designs on Dribbble. Not <em>very</em> high … | |
+ | |
+<ul> | |
+<li><a href="https://dribbble.com/shots/8192199-Hacktoberfest-2019-logo">2019<… | |
+<li><a href="https://dribbble.com/shots/5333694-Hacktoberfest-2018">2018</a></… | |
+<li><a href="https://dribbble.com/shots/3814307-Hactoberfest-2017">2017</a></l… | |
+<li><a href="https://dribbble.com/shots/2988111-Hactoberfest-2016">2016</a></l… | |
+</ul> | |
+ | |
+<h3 id="archived-logos"><a href="https://shkspr.mobi/blog/2025/07/making-my-ow… | |
+ | |
+<p>The official Hacktoberfest website had some logos embedded on it:</p> | |
+ | |
+<ul> | |
+<li><a href="https://web.archive.org/web/20221001041836/https://hacktoberfest.… | |
+<li><a href="https://web.archive.org/web/20190930141101im_/https://hacktoberfe… | |
+<li><a href="https://web.archive.org/web/20181001075142if_/https://hacktoberfe… | |
+<li><a href="https://web.archive.org/web/20170913052813/https://hacktoberfest.… | |
+</ul> | |
+ | |
+<h2 id="best-of-the-bunch"><a href="https://shkspr.mobi/blog/2025/07/making-my… | |
+ | |
+<p>These are the best available logos. The SVGs are suitable for printing at a… | |
+ | |
+<ul> | |
+<li><a href="https://static.wikia.nocookie.net/logopedia/images/7/7f/Hacktober… | |
+<li><a href="https://github.com/Hacktoberfest/hacktoberfest-2020/blob/master/a… | |
+<li><a href="//web.archive.org/web/20190930141101im_/https://hacktoberfest.dig… | |
+<li><a href="https://hacktoberfesthowto.github.io/images/2018Logo.webp">2018</… | |
+<li><a href="//web.archive.org/web/20170913052813/https://hacktoberfest.digita… | |
+<li><a href="//web.archive.org/web/20161022114022im_/https://hacktoberfest.dig… | |
+</ul> | |
+ | |
+<h2 id="missing"><a href="https://shkspr.mobi/blog/2025/07/making-my-own-hackt… | |
+ | |
+<p>The following are missing 2014, 2015, 2021, 2022 (comic). There are photo… | |
+ | |
+<h3 id="2021"><a href="https://shkspr.mobi/blog/2025/07/making-my-own-hacktobe… | |
+ | |
+<p>There are <em>some</em> elements out there. For example:</p> | |
+ | |
+<ul> | |
+<li><a href="https://www.behance.net/gallery/128630281/HacktoberFest-2021">Thi… | |
+<li><a href="https://web.archive.org/web/20210930065625im_/https://hacktoberfe… | |
+<li><a href="https://web.archive.org/web/20210928150155im_/https://hacktoberfe… | |
+<li><a href="https://web.archive.org/web/20210928150151/https://hacktoberfest.… | |
+</ul> | |
+ | |
+<h3 id="2014"><a href="https://shkspr.mobi/blog/2025/07/making-my-own-hacktobe… | |
+ | |
+<p>There's not much available about the first t-shirt. There's a <a href="http… | |
+ | |
+<h2 id="photos-of-t-shirts"><a href="https://shkspr.mobi/blog/2025/07/making-m… | |
+ | |
+<p>If you want to compare the logos to the originals, and see what colour fabr… | |
+ | |
+<ul> | |
+<li><a href="https://www.reddit.com/r/hacktoberfest/comments/16vzkes/here_is_m… | |
+<li><a href="https://hacktoberfesthowto.github.io/history/">History of Hacktob… | |
+</ul> | |
+ | |
+<h2 id="end-result"><a href="https://shkspr.mobi/blog/2025/07/making-my-own-ha… | |
+ | |
+<p>If I can't find the missing logos, I'll create my own design for my own per… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/07/double-t.webp" a… | |
+ | |
+<p>If you have a source for vectors of the missing logos, please drop me a com… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>2</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Process Vs Prejudice]]></title> | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=60985</id> | |
+ <updated>2025-07-01T09:16:31Z</updated> | |
+ <published>2025-07-03T11:34:05Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[I recently read an interesting a… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>I recently read an… | |
+ | |
+<p>Every one of us has tried to have an argument with an employee of a big com… | |
+ | |
+<blockquote><p>the human being you are speaking to is only allowed to follow a… | |
+ | |
+<p>So should we give people more discretion in which processes they follow?</p> | |
+ | |
+<p>In some cases, yes! The article contains some compelling examples of when "… | |
+ | |
+<p>But there are some unacknowledged downsides to letting people decide which … | |
+ | |
+<p>The article say some of the discontent with the modern world can be blamed … | |
+ | |
+<blockquote><p>The skepticism toward judges? It fits. They often seem more dev… | |
+ | |
+<p>Imagine a world without <a href="https://www.sentencingcouncil.org.uk/sente… | |
+ | |
+<p>The customer service agent just doesn't like people of your gender, and ref… | |
+ | |
+<p>You give the bank manager a firm handshake and he approves your loan - even… | |
+ | |
+<p>And on it goes.</p> | |
+ | |
+<p>Look, there's no doubt plenty of bias encoded within processes. All process… | |
+ | |
+<p>A well-defined process dehumanises <em>both</em> sides.</p> | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>6</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Book Review: The World According t… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61157</id> | |
+ <updated>2025-06-25T08:30:28Z</updated> | |
+ <published>2025-07-02T11:34:17Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[There are some characters whose … | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p><img src="https://… | |
+ | |
+<p>The book has been written with a very specific pace - one chuckle per parag… | |
+ | |
+<p>I kept highlighting bits of it and showing them to my wife. After the 8th o… | |
+ | |
+<p>It's just endlessly quotable. "The emperor eventually died and was buried … | |
+ | |
+<p>The long-running callbacks are perfect, as are the inclusion of a few <a hr… | |
+ | |
+<p>Even the fucking <em>index</em> of this book is hilarious.</p> | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>0</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Are Brother's Insecure Printers Il… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61677</id> | |
+ <updated>2025-07-01T09:16:24Z</updated> | |
+ <published>2025-07-01T11:34:15Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[Another day, another security di… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>Another day, anoth… | |
+ | |
+<p>Let's take a look <a href="https://www.cve.org/CVERecord?id=CVE-2024-51978"… | |
+ | |
+<blockquote><p>An unauthenticated attacker who knows the target device's seria… | |
+ | |
+<p>Recently, the UK brought in some laws aimed at strengthening consumer prote… | |
+ | |
+<p>There are three interesting points to note in that blog post. The first is … | |
+ | |
+<blockquote><p>The law means manufacturers must ensure that all their smart de… | |
+ | |
+<ol> | |
+<li>The manufacturer must not supply devices that use default passwords, which… | |
+</ol></blockquote> | |
+ | |
+<p>Secondly, is a question of jurisdiction:</p> | |
+ | |
+<blockquote><p>Most smart devices are manufactured outside the UK, but the PST… | |
+ | |
+<p>Thirdly, what is actually covered:</p> | |
+ | |
+<blockquote><p>The law applies to any ‘consumer smart device’ that connect… | |
+ | |
+<p>Is a WiFi enabled printer a "consumer smart device"? One of the things tha… | |
+ | |
+<p>Let's move beyond the consumer-friendly summary and go to the actual law. <… | |
+ | |
+<blockquote><ol start="2"> | |
+<li><p>Passwords must be—</p> | |
+ | |
+<p>a. unique per product; or</p> | |
+ | |
+<p>b. defined by the user of the product.</p></li> | |
+<li><p>Passwords which are unique per product must not be—</p> | |
+ | |
+<p>a. based on incremental counters;</p> | |
+ | |
+<p>b. based on or derived from publicly available information;</p> | |
+ | |
+<p>c. based on or derived from unique product identifiers, such as serial numb… | |
+ | |
+<p>d. otherwise guessable in a manner unacceptable as part of good industry pr… | |
+</ol></blockquote> | |
+ | |
+<p>How does this apply to the printers? Rapid7, who discovered the vulnerabili… | |
+ | |
+<blockquote><p>[The vulnerability] allows an attacker to leak a serial number … | |
+ | |
+<p>So, yes. The default password <em>is</em> unique but it can be automaticall… | |
+ | |
+<p>But, do printers fall under the scope of this act?</p> | |
+ | |
+<p>The <a href="https://www.legislation.gov.uk/ukpga/2022/46/part/1/enacted#se… | |
+ | |
+<blockquote><p>4 Relevant connectable products</p> | |
+ | |
+<ol> | |
+<li><p>In this Part “relevant connectable product” means a product that me… | |
+<li><p>Condition A is that the product is—</p> | |
+ | |
+<p>A. an internet-connectable product, or</p> | |
+ | |
+<p>B. a network-connectable product.</p></li> | |
+<li><p>Condition B is that the product is not an excepted product (see section… | |
+</ol></blockquote> | |
+ | |
+<p>It goes on to define what Internet-connectable means, along with some other… | |
+ | |
+<blockquote><p>In this Part “excepted product” means a product of a descri… | |
+ | |
+<p>OK, let's look at <a href="https://www.legislation.gov.uk/uksi/2023/1007/sc… | |
+ | |
+<blockquote><p>Schedule 3 Excepted connectable products</p> | |
+ | |
+<ol start="5"> | |
+<li><p>Computers</p> | |
+ | |
+<ol> | |
+<li><p>Products are excepted under this paragraph if they are computers which … | |
+ | |
+<p>a. desktop computers;</p> | |
+ | |
+<p>b. laptop computers;</p> | |
+ | |
+<p>c. tablet computers which do not have the capability to connect to cellular… | |
+</ol></li> | |
+</ol></blockquote> | |
+ | |
+<p>Nope! The Brother printers don't appear to be exempt<sup id="fnref:neil"><a… | |
+ | |
+<p>The greater of £10 million or 4% of worldwide <em>revenue</em>.</p> | |
+ | |
+<p>Ouch!</p> | |
+ | |
+<p>Of course, much like GDPR fines, these are headline grabbing numbers. The p… | |
+ | |
+<p>So, to recap. The law says an Internet-connected device (including printers… | |
+ | |
+<p>In Brother's (slight) defence, unless the user has specifically connected t… | |
+ | |
+<p>Should users change default passwords? Yes. But manufacturers have a legal … | |
+ | |
+<div class="footnotes" role="doc-endnotes"> | |
+<hr> | |
+<ol start="0"> | |
+ | |
+<li id="fn:law" role="doc-endnote"> | |
+<p>I'm not a lawyer. This is not legal advice. This is just my interpretation … | |
+</li> | |
+ | |
+<li id="fn:neil" role="doc-endnote"> | |
+<p>With thanks to m'learned colleague <a href="https://decoded.legal/blog/2023… | |
+</li> | |
+ | |
+<li id="fn:actions" role="doc-endnote"> | |
+<p>You can <a href="https://www.gov.uk/government/publications/opss-enforcemen… | |
+</li> | |
+ | |
+</ol> | |
+</div> | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>4</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Book Review: The Left Hand of Dog … | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61173</id> | |
+ <updated>2025-06-26T07:19:15Z</updated> | |
+ <published>2025-06-30T11:34:37Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[I have to say, I did not get on … | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p><img src="https://… | |
+ | |
+<p>It's a daft enough story but the chuckles are few and far between.</p> | |
+ | |
+<p>Much like the <a href="https://shkspr.mobi/blog/tag/wayfarers/">Wayfarers b… | |
+ | |
+<p>But, in the end, I found the plot a bit too derivative to enjoy, and the sh… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>0</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Contactless Payments with Graphene… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61636</id> | |
+ <updated>2025-06-28T20:36:24Z</updated> | |
+ <published>2025-06-29T11:34:57Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[Google's monopolistic stran… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>Google's monopolis… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/06/GPay-fs8.png" al… | |
+ | |
+<p>First of all, Google is lying. It <em>does</em> meet security standards and… | |
+ | |
+<p>Anyway, here's how you can use contactless payments on Graphene.</p> | |
+ | |
+<h2 id="prerequisites"><a href="https://shkspr.mobi/blog/2025/06/contactless-p… | |
+ | |
+<p>I'm going to tell you what I did. If you found another way, leave a comment… | |
+ | |
+<p>I'm using the latest version of Graphene (2025062000) with Play Services in… | |
+ | |
+<p>You will have to agree to <a href="https://www.curve.com/legal/privacy/">Cu… | |
+ | |
+<h2 id="install-curve"><a href="https://shkspr.mobi/blog/2025/06/contactless-p… | |
+ | |
+<p><a href="https://www.curve.com/join#D4MK9ZKN">Here's a referral link to ins… | |
+ | |
+<p>You'll need to create an account and pass KYC / AML checks. <a href="https:… | |
+ | |
+<h2 id="add-a-card"><a href="https://shkspr.mobi/blog/2025/06/contactless-paym… | |
+ | |
+<p>Curve is a <em>virtual</em> card provider. So add your existing Visa or Mas… | |
+ | |
+<h2 id="set-up-curve-pay"><a href="https://shkspr.mobi/blog/2025/06/contactles… | |
+ | |
+<p>On your app's dashboard, you should see a banner saying "Curve Pay is good … | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/06/Good-to-go-fs8.p… | |
+ | |
+<p>If it has all set up, you should see a welcome tutorial explaining how cont… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/06/Good-To-Go-fs8.p… | |
+ | |
+<h2 id="set-your-default-wallet"><a href="https://shkspr.mobi/blog/2025/06/con… | |
+ | |
+<p>On your phone, go to Settings → Connected devices → Connection Preferen… | |
+ | |
+<p>Or, search your settings for Pay.</p> | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/06/Pay-Location-fs8… | |
+ | |
+<p>Select your default wallet app - in this case, Curve.</p> | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/06/Default-Wallet-A… | |
+ | |
+<h2 id="pay-for-something"><a href="https://shkspr.mobi/blog/2025/06/contactle… | |
+ | |
+<p>You need to make sure NFC is turned on before you can use NFC payments. I k… | |
+ | |
+<p>Go to a local shop, pick up something, hand it to the merchant, wave your p… | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/06/Notification-fs8… | |
+ | |
+<p>Enjoy eating whatever you paid for!</p> | |
+ | |
+<h2 id="thats-it"><a href="https://shkspr.mobi/blog/2025/06/contactless-paymen… | |
+ | |
+<p>Once you're done, you can turn of NFC if you're paranoid.</p> | |
+ | |
+<p>Apparently, <a href="https://justfollow.me.uk/@sborrill/114761774161342879"… | |
+ | |
+<p>If you've found this blog post useful, I'd be grateful if you signed up wit… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>6</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Book Review: First Contact - The S… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61450</id> | |
+ <updated>2025-06-26T07:19:06Z</updated> | |
+ <published>2025-06-28T11:34:39Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[This is a cheerful and convivial… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p><img src="https://… | |
+ | |
+<p>It is a beautiful PDF which has been gorgeously typeset and lushly illustra… | |
+ | |
+<p>The language is unpretentious and accessible. It's probably aimed towards t… | |
+ | |
+<blockquote><p>The authorities were decidedly unchill about all this philosoph… | |
+ | |
+<p>There aren't any inline references or footnotes - and links to images would… | |
+ | |
+<p>It would have been nice if some of the examples were a <em>little</em> more… | |
+ | |
+<blockquote><p>Many cultures have imagined themselves as the descendants of ce… | |
+ | |
+<p>But it is an excellent jumping off point for anyone who wants to expand the… | |
+ | |
+<p>A great starting point for anyone who wants to get quickly acquainted with … | |
+ | |
+<p>Many thanks to <a href="https://www.netgalley.com">NetGalley</a> for the pr… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>0</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Review: Octopus Home Mini - Real-T… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61481</id> | |
+ <updated>2025-06-27T08:51:38Z</updated> | |
+ <published>2025-06-27T11:34:29Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[I unashamedly love my smart-mete… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>I unashamedly <em>… | |
+ | |
+<p>By design, the smart-meter is limited in how much data it can send back. Yo… | |
+ | |
+<p>The smart-meter has the ability to send real-time information to a local de… | |
+ | |
+<p>As I've discovered, <a href="https://shkspr.mobi/blog/2020/04/hacking-your-… | |
+ | |
+<h2 id="size"><a href="https://shkspr.mobi/blog/2025/06/review-octopus-home-mi… | |
+ | |
+<p>Mini by name, mini by nature!</p> | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/06/Mini.webp" alt="… | |
+ | |
+<p>It's rare to find a device smaller than its plug. I half-wonder if they cou… | |
+ | |
+<p>Annoyingly, it is <em>micro</em> USB. I am a USB-C maximalist. There's no r… | |
+ | |
+<h2 id="installation"><a href="https://shkspr.mobi/blog/2025/06/review-octopus… | |
+ | |
+<p>Plug the Mini in - ideally within 5m of your smartmeter - and wait for the … | |
+ | |
+<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/06/24ghz.webp" alt=… | |
+ | |
+<p>Like all cheap IoT devices, it will only work on 2.4㎓, so you may need to… | |
+ | |
+<h2 id="and-then"><a href="https://shkspr.mobi/blog/2025/06/review-octopus-hom… | |
+ | |
+<p>That's it. Every 10 seconds it sends an update to Octopus. You can use the … | |
+ | |
+<p><a href="https://blog.v-s-f.co.uk/2023/07/near-realtime-energy-consumption-… | |
+ | |
+<h2 id="downside"><a href="https://shkspr.mobi/blog/2025/06/review-octopus-hom… | |
+ | |
+<p>In theory this is nifty, but there are a few things I'm not keen on.</p> | |
+ | |
+<ul> | |
+<li>Export readings simply don't work for some brands of smart meter. That's a… | |
+<li>No local connection. It sends the data to Octopus, so I have to use their … | |
+<li>USB-micro. We live in the future. USB-C or GTFO!</li> | |
+</ul> | |
+ | |
+<p>Honestly, a bit disappointing. If you don't have solar panels - or your met… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>6</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Book Review: The Martian Contingen… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61166</id> | |
+ <updated>2025-06-24T11:46:55Z</updated> | |
+ <published>2025-06-26T11:34:19Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[The Lady Astronaut books are an … | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p><img src="https://… | |
+ | |
+<p>For a sci-fi nerd like me, it is total catnip. A heady mix of brain-tanglin… | |
+ | |
+<p>My only criticism is that Elma is <em>such</em> an ineffective character. S… | |
+ | |
+<p>I love the world building, the jokey asides, and the sense of purpose all t… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>2</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Theatre Review: Just For One Day �… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61592</id> | |
+ <updated>2025-06-25T08:30:23Z</updated> | |
+ <published>2025-06-25T11:34:07Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[Leave your cynicism at the door.… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p><img src="https://… | |
+ | |
+<p>Jukebox musicals usually stick to a single-artist (Mamma Mia, & Juliet,… | |
+ | |
+<p>Just For One Day goes down a different route. Rather than just recreate the… | |
+ | |
+<p>The central plot device is a <em>little</em> silly - a mother who went to t… | |
+ | |
+<p>But that's the nature of Live Aid. It <em>is</em> preachy. And for all the … | |
+ | |
+<p>I felt that it pulls its punches a little bit. Rather than showing any foot… | |
+ | |
+<p>Nevertheless, it is a powerful and moving spectacle.</p> | |
+ | |
+<p>Oh, and there's a rap battle between Bob Geldof and Mrs Thatcher.</p> | |
+ | |
+<p>Tickets start at £20. The music is so loud, and the staging so expressive,… | |
+ | |
+<p>Far better than the average jukebox musical.</p> | |
+ | |
+<h2 id="pre-show-and-post-show"><a href="https://shkspr.mobi/blog/2025/06/thea… | |
+ | |
+<p>As regular readers of <a href="https://shkspr.mobi/blog/tag/theatre-review/… | |
+ | |
+<p>Bag searches were conducted quickly, and they were happy to let me bring in… | |
+ | |
+<p>There's a little bit of set dressing inside the theatre to allow the audien… | |
+ | |
+<p>As we exited the theatre we were handed a commemorative ticket! What a swel… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>0</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Reading NFC Passport Chips in Linu… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61546</id> | |
+ <updated>2025-06-24T12:12:53Z</updated> | |
+ <published>2025-06-24T11:34:49Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[For boring and totally not nefar… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>For boring and tot… | |
+ | |
+<p>I can now read all the passport information, including biometrics.</p> | |
+ | |
+<p></p><nav id="toc"><menu id="toc-start"><li id="toc-title"><h2 id="table-of-… | |
+ | |
+<h2 id="background"><a href="https://shkspr.mobi/blog/2025/06/reading-nfc-pass… | |
+ | |
+<p>The NFC chip in a passport is protected by a password. The password is prin… | |
+ | |
+<p>I had a small problem though. I'm using my old passport<sup id="fnref:old"… | |
+ | |
+<blockquote><p>Cut off the bottom left hand corner of the personal details pag… | |
+ | |
+<p>So a chunk of the MRZ is missing! Oh no! Whatever can we do!?</p> | |
+ | |
+<h3 id="recreating-the-mrz"><a href="https://shkspr.mobi/blog/2025/06/reading-… | |
+ | |
+<p>The password is made up of three pieces of data:</p> | |
+ | |
+<ol> | |
+<li>Passport Number (Letters and Numbers)</li> | |
+<li>Date of Birth (YYMMDD)</li> | |
+<li>Expiry Date (YYMMDD)</li> | |
+</ol> | |
+ | |
+<p>Each piece <em>also</em> has a checksum. This calculation is defined in App… | |
+ | |
+<p>Oh, and there's a checksum for the entire string. It's this final checksum … | |
+ | |
+<p>The final password is: <code>Number Number-checksum DOB DOB-checksum Expiry… | |
+ | |
+<h4 id="python-code-to-generate-an-mrz"><a href="https://shkspr.mobi/blog/2025… | |
+ | |
+<p>If you know the passport number, date of birth, and expiry date, you can ge… | |
+ | |
+<pre><code class="language-python">def calculateChecksum( value ): | |
+ weighting = [7,3,1] | |
+ characterWeight = { | |
+ '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, | |
+ '8': 8, '9': 9, '<': 0, 'A':10, 'B':11, 'C':12, 'D':13, 'E':14, | |
+ 'F':15, 'G':16, 'H':17, 'I':18, 'J':19, 'K':20, 'L':21, 'M':22, | |
+ 'N':23, 'O':24, 'P':25, 'Q':26, 'R':27, 'S':28, 'T':29, 'U':30, | |
+ 'V':31, 'W':32, 'X':33, 'Y':34, 'Z':35 | |
+ } | |
+ counter = 0 | |
+ result = 0 | |
+ for x in value: | |
+ result += characterWeight[str(x)] * weighting[counter%3] | |
+ counter += 1 | |
+ return str(result%10) | |
+ | |
+def calculateMRZ( passportNumber, DOB, expiry ): | |
+ """ | |
+ DOB and expiry are formatted as YYMMDD | |
+ """ | |
+ passportCheck = calculateChecksum( passportNumber ) | |
+ DOBCheck = calculateChecksum( DOB ) | |
+ expiryCheck = calculateChecksum( expiry ) | |
+ mrzNumber = passportNumber + passportCheck + DOB + DOBCheck + expiry + ex… | |
+ mrzCheck = calculateChecksum( mrzNumber ).zfill(2) | |
+ mrz = passportNumber + passportCheck + "XXX" + DOB + DOBCheck + "X" + exp… | |
+ return mrz | |
+ | |
+print( calculateMRZ("123456789", "841213", "220229") ) | |
+</code></pre> | |
+ | |
+<h2 id="can-you-read-a-cancelled-passport"><a href="https://shkspr.mobi/blog/2… | |
+ | |
+<p>I would have thought that cutting the cover of the passport would destroy t… | |
+ | |
+<blockquote><p>You must not cut the back cover on the ePassport</p></blockquot… | |
+ | |
+<p>Ah! That's where the NFC chip is. I presume this is so that cancelled passp… | |
+ | |
+<h2 id="cryptography-and-other-security"><a href="https://shkspr.mobi/blog/202… | |
+ | |
+<p>The security is, thankfully, all fairly standard Public Key Cryptography - … | |
+ | |
+<p>One thing I found curious - because the chip has no timer, it cannot know h… | |
+ | |
+<blockquote><p>the success probability of the attacker is given by the time th… | |
+ | |
+<h2 id="can-you-brute-force-a-passport"><a href="https://shkspr.mobi/blog/2025… | |
+ | |
+<p>Wellllll… maybeeeee…?</p> | |
+ | |
+<p>Passports are generally valid for only 10 years. So that's 36,525 possible … | |
+ | |
+<p>Passport holders are generally under 100 years old. So that's 3,652,500 pos… | |
+ | |
+<p>That's already 133,407,562,500 attempts - and we haven't even got on to the… | |
+ | |
+<p>In my experiments, sending an incorrect but valid MRZ results in the chip r… | |
+ | |
+<p>But sending that incorrect attempt seemed to introduce a delay in the next … | |
+ | |
+<p>So, if you knew the target's passport number and birthday, brute forcing th… | |
+ | |
+<p>Most <a href="https://www.nxp.com/docs/en/data-sheet/NTAG213_215_216.pdf">c… | |
+ | |
+<h3 id="is-it-worth-brute-forcing-a-password"><a href="https://shkspr.mobi/blo… | |
+ | |
+<p>If you were to brute-force the MRZ, you would discover the passport-holder'… | |
+ | |
+<ul> | |
+<li>A digital copy of their photo,</li> | |
+<li>Their full name,</li> | |
+<li>Their sex<sup id="fnref:sex"><a href="https://shkspr.mobi/blog/2025/06/rea… | |
+<li>The country which issued their passport, and</li> | |
+<li>Their nationality.</li> | |
+</ul> | |
+ | |
+<p>All of that is something which you can see from looking at the passport. So… | |
+ | |
+<h2 id="installing"><a href="https://shkspr.mobi/blog/2025/06/reading-nfc-pass… | |
+ | |
+<p>As mentioned, I'm using <a href="https://github.com/roeften/pypassport">htt… | |
+ | |
+<p>The only library I needed to install was <a href="https://pypi.org/project/… | |
+ | |
+<p>Download PyPassport. In the same directory, you can create a test Python fi… | |
+ | |
+<pre><code class="language-python">from pypassport import epassport, reader | |
+ | |
+# Replace this MRZ with the one from your passport | |
+MRZ = "1234567897XXX8412139X2202299<<<<<<<<<<<… | |
+ | |
+def trace(name, msg): | |
+ if name == "EPassport": | |
+ print(name + ": " + msg) | |
+ | |
+r = reader.ReaderManager().waitForCard() | |
+ | |
+ep = epassport.EPassport(r, MRZ) | |
+ep.register(trace) | |
+ep.readPassport() | |
+</code></pre> | |
+ | |
+<p>Plug in your NFC reader, place your passport on it, run the above code. If… | |
+ | |
+<h2 id="getting-structured-data"><a href="https://shkspr.mobi/blog/2025/06/rea… | |
+ | |
+<p>The structure of the passport data is a little convoluted. <a href="https:… | |
+ | |
+<p>By running:</p> | |
+ | |
+<pre><code class="language-python">ep.keys() | |
+</code></pre> | |
+ | |
+<p>You can see which Data Groups are available. In my case, <code>['60', '61',… | |
+ | |
+<ul> | |
+<li><code>60</code> is the common area which contains some metadata. Nothing i… | |
+<li><code>61</code> is DG1 - the full MRZ. This contains the holder's name, se… | |
+<li><code>77</code> is the Document Security Object - this was empty for me.</… | |
+<li><code>75</code> is DG2 to DG4 Biometric Templates - this contains the imag… | |
+</ul> | |
+ | |
+<p>Dumping the biometrics - <code>print( ep["75"] )</code> - gives these inter… | |
+ | |
+<pre><code class="language-_">'83': '20190311201345', | |
+'meta': { 'Expression': 'Unspecified', | |
+ 'EyeColour' : 'Unspecified', | |
+ 'FaceImageBlockLength': 19286, | |
+ 'FaceImageType': 'Basic', | |
+ 'FeatureMask': '000000', | |
+ 'FeaturePoint': {0: {'FeaturePointCode': 'C1', | |
+ 'FeatureType': '01', | |
+ 'HorizontalPosition': 249, | |
+ 'Reserved': '0000', | |
+ 'VerticalPosition': 216}, | |
+ 1: {'FeaturePointCode': 'C2', | |
+ 'FeatureType': '01', | |
+ 'HorizontalPosition': 141, | |
+ 'Reserved': '0000', | |
+ 'VerticalPosition': 214}}, | |
+ 'Features': {}, | |
+ 'Gender': 'Unspecified', | |
+ 'HairColour': 'Unspecified', | |
+ 'ImageColourSpace': 'RGB24', | |
+ 'ImageDataType': 'JPEG', | |
+ 'ImageDeviceType': 0, | |
+ 'ImageHeight': 481, | |
+ 'ImageQuality': 'Unspecified', | |
+ 'ImageSourceType': 'Static Scan', | |
+ 'ImageWidth': 385, | |
+ 'LengthOfRecord': 19300, | |
+ 'NumberOfFacialImages': 1, | |
+ 'NumberOfFeaturePoint': 2, | |
+ 'PoseAngle': '0600B5', | |
+ 'PoseAngleUncertainty': '000000', | |
+ 'VersionNumber': b'010' | |
+ } | |
+</code></pre> | |
+ | |
+<p>If I understand <a href="https://www.icao.int/security/mrtd/siteassets/page… | |
+ | |
+<h3 id="saving-the-image"><a href="https://shkspr.mobi/blog/2025/06/reading-nf… | |
+ | |
+<p>Passport images are saved either with JPEG or with <a href="https://www.ica… | |
+ | |
+<p>To save the image, grab the bytes and plonk them onto disk:</p> | |
+ | |
+<pre><code class="language-python">photo = ep["75"]["A1"]["5F2E"] | |
+with open( "photo.jpg", "wb" ) as f: | |
+ f.write( photo ) | |
+</code></pre> | |
+ | |
+<p>As expected, the "FeaturePoints" co-ordinates corresponded roughly to the c… | |
+ | |
+<h2 id="what-didnt-work"><a href="https://shkspr.mobi/blog/2025/06/reading-nfc… | |
+ | |
+<p>I tried a few different tools. Listed here so you don't make the same mista… | |
+ | |
+<h3 id="mrtdreader"><a href="https://shkspr.mobi/blog/2025/06/reading-nfc-pass… | |
+ | |
+<p>The venerable <a href="https://github.com/rubund/mrtdreader">mrtdreader</a>… | |
+ | |
+<p>I think this is because <a href="https://github.com/nfc-tools/libnfc/issues… | |
+ | |
+<h3 id="jean-francois-houzards-and-olivier-rogers-pypassport"><a href="https:/… | |
+ | |
+<p>I looked at <a href="https://code.google.com/archive/p/pypassport/">pyPassp… | |
+ | |
+<h3 id="beaujeans-pypassport"><a href="https://shkspr.mobi/blog/2025/06/readin… | |
+ | |
+<p>This <a href="https://github.com/beaujeant/pypassport">pypassport</a> only … | |
+ | |
+<h3 id="d-logic"><a href="https://shkspr.mobi/blog/2025/06/reading-nfc-passpor… | |
+ | |
+<p><a href="https://www.d-logic.com/nfc-rfid-reader-sdk/software/epassport-rea… | |
+ | |
+<h3 id="android-reader"><a href="https://shkspr.mobi/blog/2025/06/reading-nfc-… | |
+ | |
+<p><a href="https://github.com/tananaev/passport-reader">tananaev's passport-r… | |
+ | |
+<h2 id="is-it-worth-it"><a href="https://shkspr.mobi/blog/2025/06/reading-nfc-… | |
+ | |
+<p>Yeah, I reckon so! Realistically, you aren't going to be able to crack the … | |
+ | |
+<p>The MRZ is a <em>Machine Readable</em> Zone - so it is fairly simple to OCR… | |
+ | |
+<p>And even if the MRZ is gone, you can reconstruct it from the data printed o… | |
+ | |
+<p>Of course, this won't be able to detect fraudulent passports. It doesn't ch… | |
+ | |
+<p>But if you just want to see what's on your travel documents, it works perfe… | |
+ | |
+<div class="footnotes" role="doc-endnotes"> | |
+<hr> | |
+<ol start="0"> | |
+ | |
+<li id="fn:long" role="doc-endnote"> | |
+<p>There are some <a href="https://www.shopnfc.com/en/nfc-readers-writers/300-… | |
+ | |
+<blockquote><p>the unencrypted communication between a contactless IC and a re… | |
+ | |
+<p><a href="https://shkspr.mobi/blog/2025/06/reading-nfc-passport-chips-in-lin… | |
+</li> | |
+ | |
+<li id="fn:old" role="doc-endnote"> | |
+<p>I'm not dumb enough to do this stuff on a <em>live</em> passport! <a h… | |
+</li> | |
+ | |
+<li id="fn:sex" role="doc-endnote"> | |
+<p>Sex is complicated<sup id="fnref:giggle"><a href="https://shkspr.mobi/blog/… | |
+</li> | |
+ | |
+<li id="fn:gdpr" role="doc-endnote"> | |
+<p>Under the auspices of GDPR, of course! <a href="https://shkspr.mobi/bl… | |
+</li> | |
+ | |
+<li id="fn:interpol" role="doc-endnote"> | |
+<p>Nor does it check if the holder is on some Interpol list. <a href="htt… | |
+</li> | |
+ | |
+<li id="fn:giggle" role="doc-endnote"> | |
+<p>Stop giggling at the back! <a href="https://shkspr.mobi/blog/2025/06/r… | |
+</li> | |
+ | |
+</ol> | |
+</div> | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>8</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[An annoying SVG animation bug in C… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61537</id> | |
+ <updated>2025-06-23T09:03:34Z</updated> | |
+ <published>2025-06-23T11:34:12Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[Writing web standards is hard. Y… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p>Writing web standa… | |
+ | |
+<p>I recently stumbled across what I think is a little bug which <em>might</em… | |
+ | |
+<svg width="170" height="170" xmlns="http://www.w3.org/2000/svg"> | |
+ <path fill="#2c4169" d="M170 0H0v170h170z"></path> | |
+ <circle r="45" cx="50" cy="50" fill="#e4da2e" opacity="0"> | |
+ <animate attributeName="opacity" begin="0s" dur="30s" values="0; 1;" … | |
+ </circle> | |
+ <circle r="45" cx="80" cy="80" fill="red" opacity="0"> | |
+ <animate attributeName="opacity" begin="0s" dur="30s" values="0; 1;" … | |
+ </circle> | |
+</svg> | |
+ | |
+<p>If you're on Chrome, you might only see one circle animate. Why? Bloody sem… | |
+ | |
+<p>The <a href="https://svgwg.org/specs/animations/#KeyTimesAttribute">specifi… | |
+ | |
+<blockquote><p><strong>keyTimes</strong></p> | |
+ | |
+<p>A semicolon-separated list of time values used to control the pacing of the… | |
+ | |
+<p>[…]</p> | |
+ | |
+<p>If the last semicolon separator is followed by either just white space or n… | |
+ | |
+<p>To me, that isn't ambiguous. The text <code>keyTimes="0; 1;"</code> has a f… | |
+ | |
+<p>But maybe the humans who wrote the description were sloppy. There's also a … | |
+ | |
+<p><code><number> [; <number>]* ;?</code></p> | |
+ | |
+<p>This isn't quite Backus–Naur form<sup id="fnref:bnf"><a href="https://shk… | |
+ | |
+<ul> | |
+<li>The <code><number></code> is a <a href="https://www.w3.org/TR/css-va… | |
+<li>The <code>[</code> and <code>]</code> are <a href="https://www.w3.org/TR/c… | |
+<li>The <code>*</code> and <code>?</code> are <a href="https://www.w3.org/TR/c… | |
+ | |
+<ul> | |
+<li><code>*</code> "indicates that the preceding type, word, or group occurs z… | |
+<li><code>?</code> "indicates that the preceding type, word, or group is optio… | |
+</ul></li> | |
+<li>The <code>;</code> is just a semicolon<sup id="fnref:cig"><a href="https:/… | |
+</ul> | |
+ | |
+<p>Reading the definition tells us that a valid value will be a number, follow… | |
+ | |
+<p>So, based on my reading, I think Chrome is wrong to throw an error here. Bo… | |
+ | |
+<p>Accordingly, I've <a href="https://issues.chromium.org/issues/427020732">ra… | |
+ | |
+<div class="footnotes" role="doc-endnotes"> | |
+<hr> | |
+<ol start="0"> | |
+ | |
+<li id="fn:experience" role="doc-endnote"> | |
+<p>I do have <a href="https://www.w3.org/TR/2018/WD-html53-20180426/">some exp… | |
+</li> | |
+ | |
+<li id="fn:webdev" role="doc-endnote"> | |
+<p>Back in 2006, Catharine A. MacKinnon provokatively asked "<a href="https://… | |
+</li> | |
+ | |
+<li id="fn:eng" role="doc-endnote"> | |
+<p>I imagine English literature students also find them confusing; everyone do… | |
+</li> | |
+ | |
+<li id="fn:bnf" role="doc-endnote"> | |
+<p>Also the bane of programmers everywhere! <a href="https://shkspr.mobi/… | |
+</li> | |
+ | |
+<li id="fn:cig" role="doc-endnote"> | |
+<p>Just like how <a href="https://quoteinvestigator.com/2011/08/12/just-a-ciga… | |
+</li> | |
+ | |
+</ol> | |
+</div> | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>1</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Theatre Review: Operation Mincemea… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61507</id> | |
+ <updated>2025-06-22T09:14:43Z</updated> | |
+ <published>2025-06-22T11:34:01Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[Everyone I know told me to go an… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p><img src="https://… | |
+ | |
+<p>If you're unaware of the book (or the film. Or the novelisation of the film… | |
+ | |
+<p>So, naturally, this is a glitzy West End Musical. And, as befitting a story… | |
+ | |
+<p>I can't lie - I found the start of the first act a bit underwhelming. It fe… | |
+ | |
+<p>The second act has the strongest opening I've seen in a good long while. It… | |
+ | |
+<p>Naturally, the cast are superb. It's exhausting watching them quick-change … | |
+ | |
+<p>It is an excellent and kinetic work of theatre. It revels in its daftness a… | |
+ | |
+<h2 id="pre-show"><a href="https://shkspr.mobi/blog/2025/06/theatre-review-ope… | |
+ | |
+<p>Regular readers know how much I love discussing the pre-show elements. Minc… | |
+ | |
+<p>The theatre is cramped, with a packed bar, and inadequate toilet facilities… | |
+ | |
+<p>The cost of the programme is exorbitant - an advert filled brochure with th… | |
+ | |
+<p>On the plus side, the stall seats are spacious and there's a bar to one sid… | |
+ | |
+<p>A single "cheap" ticket usually costs about 3-months of Netflix. Full price… | |
+ | |
+<p>The <a href="https://operationmincemeat.com/tickets/">ticket lottery</a> re… | |
+ | |
+<p>There's nothing like seeing live theatre performed by a hyper-talented cast… | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>0</thr:total> | |
+ </entry> | |
+ <entry> | |
+ <author> | |
+ <name>@edent</name> | |
+ </author> | |
+ | |
+ <title type="html"><![CDATA[Book Review: Venomous Lumpsucker b… | |
+ <link rel="alternate" type="text/html" href="https://shkspr.mo… | |
+ | |
+ <id>https://shkspr.mobi/blog/?p=61183</id> | |
+ <updated>2025-06-13T09:16:16Z</updated> | |
+ <published>2025-06-21T11:34:56Z</published> | |
+ <category scheme="https://shkspr.mobi/blog" term="/etc/" /><ca… | |
+ <summary type="html"><![CDATA[No book has the right to be this… | |
+ | |
+ <content type="html" xml:base="https:/… | |
+ <html><head></head><body><p><img src="https://… | |
+ | |
+<p>The plot is delightful - what if <del>carbon credits</del> extinction credi… | |
+ | |
+<p>The characters are perfectly fleshed out and gradually reveal their motivat… | |
+ | |
+<blockquote><p>one big thing about the socially normal was that they loved the… | |
+ | |
+<p>There is a <em>slight</em> tendency towards Socratic dialogue as a means of… | |
+ | |
+<p>The ending(s) genuinely shocked me.</p> | |
+</body></html>]]></content> | |
+ | |
+ <link rel="replies" type="text/html" h… | |
+ <link rel="replies" type="application/atom+xml" href="… | |
+ <thr:total>2</thr:total> | |
+ </entry> | |
+ </feed> |