Introduction
Introduction Statistics Contact Development Disclaimer Help
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&#039;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 @- &lt;&lt;&lt; \
+ '{"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 @- &lt;&lt;&lt; \
+ '{"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!&nbsp;<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&#039;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, &amp; 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, '&lt;': 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&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt…
+
+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!&nbsp;<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!&nbsp;<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.&nbsp;<a href="htt…
+</li>
+
+<li id="fn:giggle" role="doc-endnote">
+<p>Stop giggling at the back!&nbsp;<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>&lt;number&gt; [; &lt;number&gt;]* ;?</code></p>
+
+<p>This isn't quite Backus–Naur form<sup id="fnref:bnf"><a href="https://shk…
+
+<ul>
+<li>The <code>&lt;number&gt;</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!&nbsp;<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>
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.